diff --git a/packages/scramble/index.js b/packages/scramble/index.js new file mode 100644 index 00000000000..007ce2d923e --- /dev/null +++ b/packages/scramble/index.js @@ -0,0 +1,35 @@ +/** + * Run this command from directly in this folder. + * + * This command scans file in the kibana repository with react-scanner, analyzing all component usage, and upload that usage + * to an Elastic instance. + * + * To run this, you need to have this repository (the eui repository) checked out side by side. + * + * The elasticsearch index will be called "eui_components" + * + * Usage: + * CLOUD_ID=****** AUTH_APIKEY=****** node index.js + * + */ + +const { scan } = require('./scan'); + +const { Client } = require('@elastic/elasticsearch'); +const client = new Client({ + cloud: { + id: process.env.CLOUD_ID + }, + auth: { + apiKey: process.env.AUTH_APIKEY + } +}); + +const run = async () => { + const result = await scan(); + const operations = result.flatMap(doc => [{ index: { _index: 'eui_components' } }, doc]); + const response = await client.bulk({ refresh: true, operations }); + console.log(response); +}; + +run().catch((e) => console.error(e)); diff --git a/packages/scramble/package.json b/packages/scramble/package.json new file mode 100644 index 00000000000..fb9a8b07981 --- /dev/null +++ b/packages/scramble/package.json @@ -0,0 +1,11 @@ +{ + "name": "eui-scramble", + "version": "0.1.0", + "description": "Scripts to collect analytics on EUI usage", + "dependencies": { + "@elastic/elasticsearch": "^8.14.0", + "codeowners": "^5.1.1", + "escodegen-wallaby": "^1.6.44", + "react-scanner": "^1.1.0" + } +} diff --git a/packages/scramble/scan.js b/packages/scramble/scan.js new file mode 100644 index 00000000000..3d7b1c6e595 --- /dev/null +++ b/packages/scramble/scan.js @@ -0,0 +1,110 @@ +const scanner = require('react-scanner'); +const escodegen = require("escodegen-wallaby"); +const Codeowners = require('codeowners'); + +const codeowners = new Codeowners("../../../kibana"); +const path = require('path'); +const cwd = path.resolve(__dirname); + +const repos = { + kibana: { + crawlFrom: [ + '../../../kibana/src', + '../../../kibana/x-pack', + '../../../kibana/packages', + ], + }, + // TODO + // cloud: { + // crawlFrom: './cloud/cloud-ui/apps/monolith', + // }, + // docsmobile: { + // crawlFrom: './docsmobile/docsmobile/template', + // }, +}; + +const scannerConfig = { + rootDir: cwd, + exclude: ['node_modules', /^\.\w+/], + globs: ['**/!(*.test|*.spec|*.stories).{jsx,tsx}'], + includeSubComponents: true, + processors: ["raw-report"], + crawlFrom: './', + getPropValue: ({ node, propName, componentName, defaultGetPropValue }) => { + if (propName === "css" || propName === "style") { + if (node.type === "JSXExpressionContainer") { + try { + return escodegen.generate(node.expression); + } catch { + return defaultGetPropValue(node); + } + + } else { + try { + return escodegen.generate(node); + } catch { + return defaultGetPropValue(node); + } + } + } else { + return defaultGetPropValue(node); + } + } +}; + + +const scan = async () => { + let time = new Date(); + let output = []; + + await Promise.all( + Object.entries(repos).map(async ([repo, { crawlFrom }]) => { + + await Promise.all( + crawlFrom.map(async (kibanaCrawlDirs) => { + let newOutput = await scanner.run({ + ...scannerConfig, + crawlFrom: kibanaCrawlDirs, + }); + + newOutput = Object.entries(newOutput).flatMap(([componentName, value]) => { + return value.instances?.map((instance) => { + let fileName; + let sourceLocation; + let owners = []; + + let regex = /\/kibana\/(.*)$/; + if (instance.location?.file) { + const result = regex.exec(instance.location.file); + fileName = result[0]; + sourceLocation = `https://github.com/elastic/kibana/blob/main/${result[1]}#L${instance.location.start.line}`; + owners = codeowners.getOwner(result[1]); + } + + return { + '@timestamp': time, + project: 'kibana', + scanDate: time, + component: componentName, + codeOwners: owners, + moduleName: instance.importInfo?.moduleName, + props: Object.entries(instance.props).map(([k, v]) => ({ propName: k, propValue: v })), + props_combined: Object.entries(instance.props).map(([k, v]) => (`${k}::${v}`)), + fileName, + sourceLocation, + lineNumber: instance.location?.start?.line, + lineColumn: instance.location?.start?.column, + repository: repo + }; + }); + }); + output = output.concat(newOutput); + }) + ); + }) + ); + + return output; +}; + +exports.scan = scan; diff --git a/packages/scramble/test.js b/packages/scramble/test.js new file mode 100644 index 00000000000..f82dcd05ba1 --- /dev/null +++ b/packages/scramble/test.js @@ -0,0 +1,11 @@ +const Codeowners = require('codeowners'); +const temp = new Codeowners("../../../kibana"); + +const { scan } = require('./scan'); + +const runScan = async () => { + const scanResult = await scan(); + console.log(scanResult); +}; + +runScan(); diff --git a/yarn.lock b/yarn.lock index c9cc6259bef..dfdd765fce2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5673,6 +5673,16 @@ __metadata: languageName: node linkType: hard +"@elastic/elasticsearch@npm:^8.14.0": + version: 8.14.0 + resolution: "@elastic/elasticsearch@npm:8.14.0" + dependencies: + "@elastic/transport": "npm:^8.6.0" + tslib: "npm:^2.4.0" + checksum: 10c0/9e13bd76fa31a711e659dc5b8569b869d8308cb14176491e04047ab1c9e80c86f9a64d0df8a6c21b67f357887b7568d671e89cfadd71694a66f3f0a87d5e7bcd + languageName: node + linkType: hard + "@elastic/eslint-plugin-eui@workspace:packages/eslint-plugin": version: 0.0.0-use.local resolution: "@elastic/eslint-plugin-eui@workspace:packages/eslint-plugin" @@ -6009,6 +6019,21 @@ __metadata: languageName: unknown linkType: soft +"@elastic/transport@npm:^8.6.0": + version: 8.7.0 + resolution: "@elastic/transport@npm:8.7.0" + dependencies: + "@opentelemetry/api": "npm:1.x" + debug: "npm:^4.3.4" + hpagent: "npm:^1.0.0" + ms: "npm:^2.1.3" + secure-json-parse: "npm:^2.4.0" + tslib: "npm:^2.4.0" + undici: "npm:^6.12.0" + checksum: 10c0/3dc8761883acb1bfc242ec8ad6388d6fffa96257d47aef84bd37188f3e07c57c95cf86320e0177478f644f27297c872c6d2083aba44f4bccdd96c6810a6eeaf5 + languageName: node + linkType: hard + "@emotion/babel-plugin-jsx-pragmatic@npm:^0.2.1": version: 0.2.1 resolution: "@emotion/babel-plugin-jsx-pragmatic@npm:0.2.1" @@ -7430,7 +7455,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.8": +"@nodelib/fs.walk@npm:^1.2.6, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -7640,6 +7665,13 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/api@npm:1.x": + version: 1.9.0 + resolution: "@opentelemetry/api@npm:1.9.0" + checksum: 10c0/9aae2fe6e8a3a3eeb6c1fdef78e1939cf05a0f37f8a4fae4d6bf2e09eb1e06f966ece85805626e01ba5fab48072b94f19b835449e58b6d26720ee19a58298add + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -9526,6 +9558,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:^0.0.45": + version: 0.0.45 + resolution: "@types/estree@npm:0.0.45" + checksum: 10c0/dce1fb977d9aab2492cfc831e76abdc7c0944e42974bf7b907d02d28b9356e38c7534ade5a6b7f4f2dd12347f02d78051a4e0f4685bf8b7d60ebf85263a48bf9 + languageName: node + linkType: hard + "@types/estree@npm:^0.0.51": version: 0.0.51 resolution: "@types/estree@npm:0.0.51" @@ -10482,6 +10521,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.20.0": + version: 5.20.0 + resolution: "@typescript-eslint/types@npm:5.20.0" + checksum: 10c0/00be6702c1323143f37cd7d59237a946e565ce1f1ff175afe66c3710f6c2cba3c9c006a4cec5d5af18979db00de4f8c10a620f063496803b224b6b78506ba611 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:5.60.0": version: 5.60.0 resolution: "@typescript-eslint/types@npm:5.60.0" @@ -10513,6 +10559,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:5.20.0": + version: 5.20.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.20.0" + dependencies: + "@typescript-eslint/types": "npm:5.20.0" + "@typescript-eslint/visitor-keys": "npm:5.20.0" + debug: "npm:^4.3.2" + globby: "npm:^11.0.4" + is-glob: "npm:^4.0.3" + semver: "npm:^7.3.5" + tsutils: "npm:^3.21.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/308d6daa1cbb80303752ef5f540e78ad285315a192fd1a5d439f4f98e238b27d1ba5aff3e4f11b9340928e6b46c46a39bf7a0c7ff0bdab2adebd97c15c9c6e1a + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.60.0, @typescript-eslint/typescript-estree@npm:^5.47.0": version: 5.60.0 resolution: "@typescript-eslint/typescript-estree@npm:5.60.0" @@ -10618,6 +10682,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.20.0": + version: 5.20.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.20.0" + dependencies: + "@typescript-eslint/types": "npm:5.20.0" + eslint-visitor-keys: "npm:^3.0.0" + checksum: 10c0/6b2c1808b66e112ee98c9beb92eb212297e5d6d249c07043c1cc90297cc8f235ccbe0be6448e0bb336be7f54f7213c06ae883014ad4089e8436eff4818503ae6 + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:5.60.0": version: 5.60.0 resolution: "@typescript-eslint/visitor-keys@npm:5.60.0" @@ -11549,6 +11623,13 @@ __metadata: languageName: node linkType: hard +"amdefine@npm:>=0.0.4": + version: 1.0.1 + resolution: "amdefine@npm:1.0.1" + checksum: 10c0/ba8aa5d4ff5248b2ed067111e72644b36b5b7ae88d9a5a2c4223dddb3bdc9102db67291e0b414f59f12c6479ac6a365886bac72c7965e627cbc732e0962dd1ab + languageName: node + linkType: hard + "angular-estree-parser@npm:1.1.5": version: 1.1.5 resolution: "angular-estree-parser@npm:1.1.5" @@ -12173,6 +12254,18 @@ __metadata: languageName: node linkType: hard +"astray@npm:1.1.1": + version: 1.1.1 + resolution: "astray@npm:1.1.1" + dependencies: + "@types/estree": "npm:^0.0.45" + dependenciesMeta: + "@types/estree": + optional: true + checksum: 10c0/50d9df02ab4d64192dd46fffa18eccdfd014d1df17fb2fdf5279dbafbeec76fb61ba8c1ee739f66a93e5be48899e0454ef8006c45233836b7211743dc516e93b + languageName: node + linkType: hard + "astring@npm:^1.8.0": version: 1.8.6 resolution: "astring@npm:1.8.6" @@ -14330,6 +14423,25 @@ __metadata: languageName: node linkType: hard +"codeowners@npm:^5.1.1": + version: 5.1.1 + resolution: "codeowners@npm:5.1.1" + dependencies: + "@nodelib/fs.walk": "npm:^1.2.6" + commander: "npm:^6.2.1" + find-up: "npm:^2.1.0" + ignore: "npm:^3.3.10" + is-directory: "npm:^0.3.1" + lodash.intersection: "npm:^4.4.0" + lodash.maxby: "npm:^4.6.0" + lodash.padend: "npm:^4.6.1" + true-case-path: "npm:^1.0.3" + bin: + codeowners: index.js + checksum: 10c0/895afd9501adc71ad18c6c904237621196007205883cbdc9425b8dc2e3e67d87a1889904602938bdaac4118129d4ce66a6aec6caebcd8dc9f4fb64a9ba0c305a + languageName: node + linkType: hard + "codesandbox-import-util-types@npm:^2.1.15": version: 2.1.15 resolution: "codesandbox-import-util-types@npm:2.1.15" @@ -16596,6 +16708,13 @@ __metadata: languageName: node linkType: hard +"dlv@npm:1.1.3": + version: 1.1.3 + resolution: "dlv@npm:1.1.3" + checksum: 10c0/03eb4e769f19a027fd5b43b59e8a05e3fd2100ac239ebb0bf9a745de35d449e2f25cfaf3aa3934664551d72856f4ae8b7822016ce5c42c2d27c18ae79429ec42 + languageName: node + linkType: hard + "dns-equal@npm:^1.0.0": version: 1.0.0 resolution: "dns-equal@npm:1.0.0" @@ -16875,6 +16994,13 @@ __metadata: languageName: node linkType: hard +"dset@npm:3.1.2": + version: 3.1.2 + resolution: "dset@npm:3.1.2" + checksum: 10c0/a10d5f214ccd53e7d2e79215473256b74cb98fd3f20ad4f4684ab575b19bac71e5dda524d6febcf42854062e3f575a2dbfca4d53d2ffb9ae238eecdcc97a095b + languageName: node + linkType: hard + "dts-generator@npm:^3.0.0": version: 3.0.0 resolution: "dts-generator@npm:3.0.0" @@ -17749,6 +17875,25 @@ __metadata: languageName: node linkType: hard +"escodegen-wallaby@npm:^1.6.44": + version: 1.6.44 + resolution: "escodegen-wallaby@npm:1.6.44" + dependencies: + esprima: "npm:^2.7.1" + estraverse: "npm:^1.9.1" + esutils: "npm:^2.0.2" + optionator: "npm:^0.8.1" + source-map: "npm:~0.2.0" + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: bin/escodegen.js + esgenerate: bin/esgenerate.js + checksum: 10c0/2b9c8461504e1aae3172428310c346aab053787660c760e18abc5562ee591a77c2dbc8c73705b8f5271dae006e8be277574c89517692c21b66b9b9c2650caae2 + languageName: node + linkType: hard + "escodegen@npm:^2.1.0": version: 2.1.0 resolution: "escodegen@npm:2.1.0" @@ -18028,6 +18173,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^3.0.0, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + "eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1": version: 3.4.1 resolution: "eslint-visitor-keys@npm:3.4.1" @@ -18035,13 +18187,6 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.4.3": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 - languageName: node - linkType: hard - "eslint@npm:^6.4.0": version: 6.8.0 resolution: "eslint@npm:6.8.0" @@ -18160,6 +18305,16 @@ __metadata: languageName: node linkType: hard +"esprima@npm:^2.7.1": + version: 2.7.3 + resolution: "esprima@npm:2.7.3" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 10c0/6e1e99f280eed2ecd521ae28217c5f7c7a03fd0a1ac913bffd4a4ba278caf32cb8d9fc01e41d4b4bc904617282873dea297d60e1f93ea20156f29994c348a04f + languageName: node + linkType: hard + "esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -18188,6 +18343,13 @@ __metadata: languageName: node linkType: hard +"estraverse@npm:^1.9.1": + version: 1.9.3 + resolution: "estraverse@npm:1.9.3" + checksum: 10c0/2477bab0c5cdc7534162fbb16b25282c49f434875227937726692ed105762403e9830324cc97c3ea8bf332fe91122ea321f4d4292aaf50db7a90d857e169719e + languageName: node + linkType: hard + "estraverse@npm:^4.1.1": version: 4.2.0 resolution: "estraverse@npm:4.2.0" @@ -18305,6 +18467,17 @@ __metadata: languageName: node linkType: hard +"eui-scramble@workspace:packages/scramble": + version: 0.0.0-use.local + resolution: "eui-scramble@workspace:packages/scramble" + dependencies: + "@elastic/elasticsearch": "npm:^8.14.0" + codeowners: "npm:^5.1.1" + escodegen-wallaby: "npm:^1.6.44" + react-scanner: "npm:^1.1.0" + languageName: unknown + linkType: soft + "eval@npm:^0.1.8": version: 0.1.8 resolution: "eval@npm:0.1.8" @@ -18830,6 +19003,13 @@ __metadata: languageName: node linkType: hard +"fdir@npm:5.2.0": + version: 5.2.0 + resolution: "fdir@npm:5.2.0" + checksum: 10c0/1b8997beb551bf7f919ecc62442ef48936f5cdd45ff1a4160fa64f37c6aae8be2bb061862edd669cff3033d09ceb435081505a3f2604edb3fdae983615e2ae11 + languageName: node + linkType: hard + "feed@npm:^4.2.2": version: 4.2.2 resolution: "feed@npm:4.2.2" @@ -21240,6 +21420,13 @@ __metadata: languageName: node linkType: hard +"hpagent@npm:^1.0.0": + version: 1.2.0 + resolution: "hpagent@npm:1.2.0" + checksum: 10c0/505ef42e5e067dba701ea21e7df9fa73f6f5080e59d53680829827d34cd7040f1ecf7c3c8391abe9df4eb4682ef4a4321608836b5b70a61b88c1b3a03d77510b + languageName: node + linkType: hard + "hsl-regex@npm:^1.0.0": version: 1.0.0 resolution: "hsl-regex@npm:1.0.0" @@ -21763,7 +21950,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^3.3.5": +"ignore@npm:^3.3.10, ignore@npm:^3.3.5": version: 3.3.10 resolution: "ignore@npm:3.3.10" checksum: 10c0/973e0ef3b3eaab8fc19014d80014ed11bcf3585de8088d9c7a5b5c4edefc55f4ecdc498144bdd0440b8e2ff22deb03f89c90300bfef2d1750d5920f997d0a600 @@ -24775,6 +24962,13 @@ __metadata: languageName: node linkType: hard +"lodash.intersection@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.intersection@npm:4.4.0" + checksum: 10c0/b4c98577367aa9bf37cb69313f0355b4121a8fb0dbf5832232156fef58e8662b8bd67f81000688a802e2ab4e7417723fba3f78b5105d50eab1e84de2648bd834 + languageName: node + linkType: hard + "lodash.isequal@npm:^4.5.0": version: 4.5.0 resolution: "lodash.isequal@npm:4.5.0" @@ -24789,6 +24983,13 @@ __metadata: languageName: node linkType: hard +"lodash.maxby@npm:^4.6.0": + version: 4.6.0 + resolution: "lodash.maxby@npm:4.6.0" + checksum: 10c0/752db8fdb890a796c3be2fc9e469376da203ce650306fec65fc2ebecf181a89f127ffa4c59b32f2901faaab4f18e8ee3c994071e5075a42a0ec19817de66c591 + languageName: node + linkType: hard + "lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" @@ -24817,7 +25018,7 @@ __metadata: languageName: node linkType: hard -"lodash.padend@npm:^4.1.0": +"lodash.padend@npm:^4.1.0, lodash.padend@npm:^4.6.1": version: 4.6.1 resolution: "lodash.padend@npm:4.6.1" checksum: 10c0/da10eae6e7862541e431d97e652ea66690307104676a30793398e2f66d0fd9a62b07f199451d2185560d9b4627dc6652d33dc7cceb7ab9d843f6e15addec56f5 @@ -26964,7 +27165,7 @@ __metadata: languageName: node linkType: hard -"mri@npm:^1.2.0": +"mri@npm:^1.1.0, mri@npm:^1.2.0": version: 1.2.0 resolution: "mri@npm:1.2.0" checksum: 10c0/a3d32379c2554cf7351db6237ddc18dc9e54e4214953f3da105b97dc3babe0deb3ffe99cf409b38ea47cc29f9430561ba6b53b24ab8f9ce97a4b50409e4a50e7 @@ -26992,7 +27193,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3": +"ms@npm:2.1.3, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -28091,7 +28292,7 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.8.3": +"optionator@npm:^0.8.1, optionator@npm:^0.8.3": version: 0.8.3 resolution: "optionator@npm:0.8.3" dependencies: @@ -29059,7 +29260,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.0, picomatch@npm:^2.3.1": +"picomatch@npm:2.3.1, picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.0, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be @@ -31492,6 +31693,25 @@ __metadata: languageName: node linkType: hard +"react-scanner@npm:^1.1.0": + version: 1.1.0 + resolution: "react-scanner@npm:1.1.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:5.20.0" + astray: "npm:1.1.1" + dlv: "npm:1.1.3" + dset: "npm:3.1.2" + fdir: "npm:5.2.0" + is-plain-object: "npm:5.0.0" + picomatch: "npm:2.3.1" + sade: "npm:1.8.1" + typescript: "npm:4.6.3" + bin: + react-scanner: bin/react-scanner + checksum: 10c0/bd4efa9f8578ea0cedb6ae57fcd530bb13710f1adcc294c6e028ed7b7bfb2a20c453a8ded1f120d39ebac2f239e3f6dda82de35dd76614bc5290c4ddc83a8e9a + languageName: node + linkType: hard + "react-shallow-renderer@npm:^16.13.1, react-shallow-renderer@npm:^16.15.0": version: 16.15.0 resolution: "react-shallow-renderer@npm:16.15.0" @@ -32952,6 +33172,15 @@ __metadata: languageName: node linkType: hard +"sade@npm:1.8.1": + version: 1.8.1 + resolution: "sade@npm:1.8.1" + dependencies: + mri: "npm:^1.1.0" + checksum: 10c0/da8a3a5d667ad5ce3bf6d4f054bbb9f711103e5df21003c5a5c1a8a77ce12b640ed4017dd423b13c2307ea7e645adee7c2ae3afe8051b9db16a6f6d3da3f90b1 + languageName: node + linkType: hard + "safe-array-concat@npm:^1.0.1": version: 1.0.1 resolution: "safe-array-concat@npm:1.0.1" @@ -33209,6 +33438,13 @@ __metadata: languageName: node linkType: hard +"secure-json-parse@npm:^2.4.0": + version: 2.7.0 + resolution: "secure-json-parse@npm:2.7.0" + checksum: 10c0/f57eb6a44a38a3eeaf3548228585d769d788f59007454214fab9ed7f01fbf2e0f1929111da6db28cf0bcc1a2e89db5219a59e83eeaec3a54e413a0197ce879e4 + languageName: node + linkType: hard + "select-hose@npm:^2.0.0": version: 2.0.0 resolution: "select-hose@npm:2.0.0" @@ -34024,6 +34260,15 @@ __metadata: languageName: node linkType: hard +"source-map@npm:~0.2.0": + version: 0.2.0 + resolution: "source-map@npm:0.2.0" + dependencies: + amdefine: "npm:>=0.0.4" + checksum: 10c0/24ac0df484721203e7c98faaa2a56cc73d7e8b8468a03459dd98e09b84421056c456dbfea1bf4f292142c3b88c160574f648cbc83e8fe772cf0b3342f0bba68d + languageName: node + linkType: hard + "space-separated-tokens@npm:^1.0.0": version: 1.1.5 resolution: "space-separated-tokens@npm:1.1.5" @@ -35924,6 +36169,15 @@ __metadata: languageName: node linkType: hard +"true-case-path@npm:^1.0.3": + version: 1.0.3 + resolution: "true-case-path@npm:1.0.3" + dependencies: + glob: "npm:^7.1.2" + checksum: 10c0/6235caddf342fd04281001e6724fd302bdc77b4977bcff4d1fea8ca3539e75398b14120b48f1cf3de9a0ce35a5fa1aaf62e0e0a60e7322a1b37e772af876e19b + languageName: node + linkType: hard + "ts-api-utils@npm:^1.3.0": version: 1.3.0 resolution: "ts-api-utils@npm:1.3.0" @@ -36259,6 +36513,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:4.6.3": + version: 4.6.3 + resolution: "typescript@npm:4.6.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/53e8bcf00abde8ecb2002d1f1e15160b21cb62b2dd0ff71bad2ef55fa96141f76316fce649a415758d3f17bd8e0c5676d8f017c34ec3e38b585812d4717a712c + languageName: node + linkType: hard + "typescript@npm:~5.2.2": version: 5.2.2 resolution: "typescript@npm:5.2.2" @@ -36289,6 +36553,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A4.6.3#optional!builtin": + version: 4.6.3 + resolution: "typescript@patch:typescript@npm%3A4.6.3#optional!builtin::version=4.6.3&hash=5d3a66" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/8d62a37d9f238d83b6cdc738be90bb476a61c7e05d5924ecfb894eb63f39406b0660bd931876546a2be6895cd2678ddcb7f6793ceaab1454bc4e39f3cd9eb889 + languageName: node + linkType: hard + "typescript@patch:typescript@npm%3A~5.2.2#optional!builtin": version: 5.2.2 resolution: "typescript@patch:typescript@npm%3A5.2.2#optional!builtin::version=5.2.2&hash=f3b441" @@ -36398,6 +36672,13 @@ __metadata: languageName: node linkType: hard +"undici@npm:^6.12.0": + version: 6.19.4 + resolution: "undici@npm:6.19.4" + checksum: 10c0/d6cb7227893140abab3c216bd2817f24a34270b23be316ff9ddbdbb18e3b528e29e0a20cd33ab1bc0d3f604d652e7baf3f39f6760470b3027d83bc6270f90e43 + languageName: node + linkType: hard + "unherit@npm:^1.0.4": version: 1.1.3 resolution: "unherit@npm:1.1.3"