From c89f4404b942e4033c081e9f54551f3d1dd09334 Mon Sep 17 00:00:00 2001 From: Derek Brans Date: Mon, 3 Feb 2025 11:00:26 -0500 Subject: [PATCH] build: track circular dependency in the codebase (#29811) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## **Description** This PR introduces circular dependency detection, tracking, and CODEOWNERS. Here are the key changes: 1. Added a new circular dependency detection system: - New script `development/circular-deps.ts` that uses `madge` to detect circular dependencies - New config file `.madgerc` for TypeScript-specific settings - Generated baseline file `development/circular-deps.json` containing current circular dependencies 2. Added new yarn scripts in `package.json`: - `yarn circular-deps:check` - Verifies circular dependencies match baseline - `yarn circular-deps:update` - Updates baseline with current circular dependencies 3. Added CI integration: - Added `.github/workflows/test-circular-deps.yml` to run circular dependency check 4. Assigning appropriate CODEOWNERS to `circular-deps.jsonc` The PR essentially sets up a process to track new circular dependencies while acknowledging existing ones in the codebase. [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/29811?quickstart=1) ## **Related issues** * Fixes: https://github.com/MetaMask/MetaMask-planning/issues/3088 ## **Manual testing steps** 1. Remove (or add) a circular dependency in the code. 2. Run `yarn circular-deps:check` => should report that codebase is out of sync with `circular-deps.jsonc` 3. Run `yarn circular-deps:update` => should update `circular-deps.jsonc` to match the codebase. Inspect the diff. 4. Run `yarn circular-deps:check` => should pass. ## **Screenshots/Recordings** ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. --------- Co-authored-by: MetaMask Bot Co-authored-by: Howard Braham --- .github/CODEOWNERS | 5 + .github/workflows/main.yml | 4 + .github/workflows/test-circular-deps.yml | 18 + .madgerc | 15 + development/circular-deps.jsonc | 391 +++++++++ development/circular-deps.ts | 204 +++++ .../common/build-module-partitions.ts | 2 +- .../scripts/write-list-of-files-to-convert.ts | 2 +- lavamoat/build-system/policy.json | 38 +- package.json | 7 +- yarn.lock | 768 ++++++++++-------- 11 files changed, 1094 insertions(+), 360 deletions(-) create mode 100644 .github/workflows/test-circular-deps.yml create mode 100644 .madgerc create mode 100644 development/circular-deps.jsonc create mode 100644 development/circular-deps.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index abb929dfa224..80ccc370ffe0 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -44,6 +44,11 @@ offscreen/scripts/offscreen.ts @MetaMask/snaps-devs # make all such communication opt IN versus opt OUT. privacy-snapshot.json @MetaMask/extension-privacy-reviewers + +# A machine-generated file that tracks circular dependencies in the codebase. +# It is updated using yarn circular-deps:update +development/circular-deps.jsonc @MetaMask/extension-security-team @HowardBraham @dbrans + # The CODEOWNERS file constitutes an agreement amongst organization # admins and maintainers to restrict approval capabilities to a subset # of contributors. Modifications to this file result in a modification of diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index eaa85079a7f3..5adec1fc7358 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,6 +26,10 @@ jobs: name: Test lint uses: ./.github/workflows/test-lint.yml + test-circular-deps: + name: Test circular deps + uses: ./.github/workflows/test-circular-deps.yml + test-lint-changelog: name: Test lint changelog uses: ./.github/workflows/test-lint-changelog.yml diff --git a/.github/workflows/test-circular-deps.yml b/.github/workflows/test-circular-deps.yml new file mode 100644 index 000000000000..5f3024c3f81a --- /dev/null +++ b/.github/workflows/test-circular-deps.yml @@ -0,0 +1,18 @@ +name: Test Circular Dependencies + +on: + workflow_call: + +jobs: + test-circular-deps: + name: Test circular dependencies + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup environment + uses: metamask/github-tools/.github/actions/setup-environment@main + + - name: Check circular dependencies + run: yarn circular-deps:check \ No newline at end of file diff --git a/.madgerc b/.madgerc new file mode 100644 index 000000000000..6e07898680db --- /dev/null +++ b/.madgerc @@ -0,0 +1,15 @@ +{ + "detectiveOptions": { + "es6": { + "skipTypeImports": true + }, + "ts": { + "skipTypeImports": true, + "skipAsyncImports": true + }, + "tsx": { + "skipTypeImports": true, + "skipAsyncImports": true + } + } +} \ No newline at end of file diff --git a/development/circular-deps.jsonc b/development/circular-deps.jsonc new file mode 100644 index 000000000000..7ab42272d313 --- /dev/null +++ b/development/circular-deps.jsonc @@ -0,0 +1,391 @@ +// This is a machine-generated file that tracks circular dependencies in the codebase. +// To understand changes in this file: +// - Each array represents a cycle of imports where the last file imports the first +// - The cycles are sorted alphabetically for consistent diffs +// - To update this file, run: yarn circular-deps:update +// - To prevent new circular dependencies, ensure your changes don't add new cycles +// - For more information contact the Extension Platform team. + +[ + [ + "app/scripts/controllers/bridge-status/bridge-status-controller.ts", + "app/scripts/controllers/bridge-status/types.ts" + ], + [ + "app/scripts/controllers/bridge-status/utils.ts", + "app/scripts/controllers/bridge-status/validators.ts" + ], + [ + "app/scripts/controllers/bridge/bridge-controller.ts", + "app/scripts/controllers/bridge/types.ts" + ], + [ + "app/scripts/controllers/swaps/index.ts", + "app/scripts/controllers/swaps/swaps.constants.ts", + "app/scripts/controllers/swaps/swaps.types.ts" + ], + [ + "app/scripts/controllers/swaps/swaps.constants.ts", + "app/scripts/controllers/swaps/swaps.types.ts" + ], + [ + "app/scripts/lib/transaction/metrics.ts", + "shared/modules/metametrics.ts" + ], + [ + "ui/components/app/alert-system/confirm-alert-modal/confirm-alert-modal.tsx", + "ui/components/app/alert-system/confirm-alert-modal/index.tsx", + "ui/pages/confirmations/components/confirm/footer/footer.tsx" + ], + [ + "ui/components/app/assets/asset-list/asset-list-control-bar/asset-list-control-bar.tsx", + "ui/components/app/assets/asset-list/asset-list-control-bar/index.ts", + "ui/components/app/assets/asset-list/asset-list.tsx", + "ui/components/app/assets/asset-list/network-filter/index.ts", + "ui/components/app/assets/asset-list/network-filter/network-filter.tsx", + "ui/hooks/useAccountTotalCrossChainFiatBalance.ts" + ], + [ + "ui/components/app/assets/asset-list/asset-list.tsx", + "ui/components/app/assets/asset-list/native-token/index.ts", + "ui/components/app/assets/asset-list/native-token/native-token.tsx" + ], + [ + "ui/components/app/assets/asset-list/asset-list.tsx", + "ui/components/app/assets/asset-list/native-token/index.ts", + "ui/components/app/assets/asset-list/native-token/native-token.tsx", + "ui/components/app/assets/asset-list/native-token/use-native-token-balance.ts" + ], + [ + "ui/components/app/assets/token-list/token-list.tsx", + "ui/components/app/assets/util/calculateTokenBalance.ts" + ], + [ + "ui/components/app/assets/token-list/token-list.tsx", + "ui/components/app/assets/util/calculateTokenFiatAmount.ts" + ], + [ + "ui/components/app/name/name-details/name-details.tsx", + "ui/components/app/name/name.tsx" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/banner.ts", + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/bold.ts", + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/box.ts", + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/button.ts", + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/card.ts", + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/container.ts", + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/field.ts", + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/components/selector.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/field.ts", + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/form.ts", + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/components/italic.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/components/link.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/components/row.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/components/skeleton.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/components/text.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/components/tooltip.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/app/snaps/snap-ui-renderer/components/index.ts", + "ui/components/app/snaps/snap-ui-renderer/components/value.ts", + "ui/components/app/snaps/snap-ui-renderer/utils.ts" + ], + [ + "ui/components/component-library/avatar-account/avatar-account.tsx", + "ui/components/component-library/avatar-account/avatar-account.types.ts", + "ui/components/component-library/avatar-account/index.ts", + "ui/components/component-library/avatar-base/avatar-base.types.ts", + "ui/components/component-library/index.ts", + "ui/components/component-library/text/index.ts", + "ui/components/component-library/text/text.tsx" + ], + [ + "ui/components/component-library/badge-wrapper/badge-wrapper.tsx", + "ui/components/component-library/badge-wrapper/badge-wrapper.types.ts", + "ui/components/component-library/badge-wrapper/index.ts", + "ui/components/component-library/index.ts" + ], + [ + "ui/components/component-library/badge-wrapper/badge-wrapper.tsx", + "ui/components/component-library/badge-wrapper/index.ts", + "ui/components/component-library/index.ts" + ], + [ + "ui/components/component-library/banner-alert/banner-alert.tsx", + "ui/components/component-library/banner-alert/banner-alert.types.ts", + "ui/components/component-library/banner-alert/index.ts", + "ui/components/component-library/banner-base/banner-base.types.ts", + "ui/components/component-library/button-base/button-base.tsx", + "ui/components/component-library/button-base/index.ts", + "ui/components/component-library/button-link/button-link.tsx", + "ui/components/component-library/button-link/index.ts", + "ui/components/component-library/index.ts" + ], + [ + "ui/components/component-library/banner-alert/banner-alert.tsx", + "ui/components/component-library/banner-alert/banner-alert.types.ts", + "ui/components/component-library/banner-alert/index.ts", + "ui/components/component-library/banner-base/banner-base.types.ts", + "ui/components/component-library/button-icon/button-icon.tsx", + "ui/components/component-library/button-icon/index.ts", + "ui/components/component-library/index.ts" + ], + [ + "ui/components/component-library/banner-alert/banner-alert.tsx", + "ui/components/component-library/banner-alert/banner-alert.types.ts", + "ui/components/component-library/banner-alert/index.ts", + "ui/components/component-library/banner-base/banner-base.types.ts", + "ui/components/component-library/button-link/button-link.tsx", + "ui/components/component-library/button-link/index.ts", + "ui/components/component-library/index.ts" + ], + [ + "ui/components/component-library/banner-alert/banner-alert.tsx", + "ui/components/component-library/banner-alert/index.ts", + "ui/components/component-library/banner-base/banner-base.tsx", + "ui/components/component-library/banner-base/index.ts", + "ui/components/component-library/index.ts" + ], + [ + "ui/components/component-library/banner-alert/banner-alert.tsx", + "ui/components/component-library/banner-alert/index.ts", + "ui/components/component-library/index.ts" + ], + [ + "ui/components/component-library/banner-tip/banner-tip.tsx", + "ui/components/component-library/banner-tip/index.ts", + "ui/components/component-library/index.ts" + ], + [ + "ui/components/component-library/checkbox/checkbox.tsx", + "ui/components/component-library/checkbox/index.ts", + "ui/components/component-library/index.ts" + ], + [ + "ui/components/component-library/container/container.tsx", + "ui/components/component-library/container/index.ts", + "ui/components/component-library/index.ts" + ], + [ + "ui/components/component-library/form-text-field/form-text-field.tsx", + "ui/components/component-library/form-text-field/index.ts", + "ui/components/component-library/index.ts" + ], + [ + "ui/components/component-library/header-base/header-base.tsx", + "ui/components/component-library/header-base/index.ts", + "ui/components/component-library/index.ts" + ], + [ + "ui/components/component-library/help-text/help-text.tsx", + "ui/components/component-library/help-text/index.ts" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/modal-body/index.ts", + "ui/components/component-library/modal-body/modal-body.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/modal-content/index.ts", + "ui/components/component-library/modal-content/modal-content.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/modal-footer/index.ts", + "ui/components/component-library/modal-footer/modal-footer.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/modal-header/index.ts", + "ui/components/component-library/modal-header/modal-header.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/picker-network/index.ts", + "ui/components/component-library/picker-network/picker-network.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/picker-network/index.ts", + "ui/components/component-library/picker-network/picker-network.tsx", + "ui/components/component-library/picker-network/picker-network.types.ts", + "ui/components/multichain/avatar-group/avatar-group.types.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/picker-network/index.ts", + "ui/components/component-library/picker-network/picker-network.tsx", + "ui/components/multichain/avatar-group/avatar-group.tsx", + "ui/components/multichain/avatar-group/index.ts" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/popover-header/index.ts", + "ui/components/component-library/popover-header/popover-header.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/popover/index.ts", + "ui/components/component-library/popover/popover.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/select-button/index.ts", + "ui/components/component-library/select-button/select-button.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/select-button/index.ts", + "ui/components/component-library/select-button/select-button.tsx", + "ui/components/component-library/select-wrapper/index.ts", + "ui/components/component-library/select-wrapper/select-wrapper.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/select-option/index.ts", + "ui/components/component-library/select-option/select-option.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/tag-url/index.ts", + "ui/components/component-library/tag-url/tag-url.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/tag/index.ts", + "ui/components/component-library/tag/tag.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/text-field-search/index.ts", + "ui/components/component-library/text-field-search/text-field-search.tsx" + ], + [ + "ui/components/component-library/index.ts", + "ui/components/component-library/text-field/index.ts", + "ui/components/component-library/text-field/text-field.tsx" + ], + [ + "ui/components/component-library/modal-header/deprecated/index.ts", + "ui/components/component-library/modal-header/deprecated/modal-header.tsx" + ], + [ + "ui/components/component-library/modal-header/index.ts", + "ui/components/component-library/modal-header/modal-header.tsx" + ], + [ + "ui/components/component-library/popover-header/index.ts", + "ui/components/component-library/popover-header/popover-header.tsx" + ], + [ + "ui/components/multichain/pages/send/components/account-picker.tsx", + "ui/components/multichain/pages/send/components/index.ts" + ], + [ + "ui/components/multichain/pages/send/components/address-book.tsx", + "ui/components/multichain/pages/send/components/index.ts" + ], + [ + "ui/components/multichain/pages/send/components/hex.tsx", + "ui/components/multichain/pages/send/components/index.ts" + ], + [ + "ui/components/multichain/pages/send/components/index.ts", + "ui/components/multichain/pages/send/components/network-picker.tsx" + ], + [ + "ui/components/multichain/pages/send/components/index.ts", + "ui/components/multichain/pages/send/components/recipient-content.tsx" + ], + [ + "ui/components/multichain/pages/send/components/index.ts", + "ui/components/multichain/pages/send/components/recipient-input.tsx" + ], + [ + "ui/components/multichain/pages/send/components/index.ts", + "ui/components/multichain/pages/send/components/recipient.tsx" + ], + [ + "ui/components/multichain/pages/send/components/index.ts", + "ui/components/multichain/pages/send/components/your-accounts.tsx" + ], + [ + "ui/pages/asset/components/asset-page.tsx", + "ui/pages/asset/components/token-buttons.tsx" + ], + [ + "ui/pages/notifications/notifications-list.tsx", + "ui/pages/notifications/notifications.tsx" + ], + [ + "ui/pages/snap-account-redirect/components/index.ts", + "ui/pages/snap-account-redirect/components/snap-account-redirect-context.tsx", + "ui/pages/snap-account-redirect/components/snap-account-redirect-message.tsx", + "ui/pages/snap-account-redirect/components/url-display-box.tsx", + "ui/pages/snap-account-redirect/snap-account-redirect.tsx" + ], + [ + "ui/pages/swaps/swaps.util.ts", + "ui/store/actions.ts" + ] +] diff --git a/development/circular-deps.ts b/development/circular-deps.ts new file mode 100644 index 000000000000..3796ab82f6bc --- /dev/null +++ b/development/circular-deps.ts @@ -0,0 +1,204 @@ +#!/usr/bin/env tsx + +import fs from 'fs'; +import madge from 'madge'; +import fg from 'fast-glob'; + +const TARGET_FILE = 'development/circular-deps.jsonc'; + +const FILE_HEADER = `// This is a machine-generated file that tracks circular dependencies in the codebase. +// To understand changes in this file: +// - Each array represents a cycle of imports where the last file imports the first +// - The cycles are sorted alphabetically for consistent diffs +// - To update this file, run: yarn circular-deps:update +// - To prevent new circular dependencies, ensure your changes don't add new cycles +// - For more information contact the Extension Platform team. + +`; + +/** + * Message displayed when circular dependency checks fail and need resolution. + */ +const RESOLUTION_STEPS = + 'To resolve this issue, run `yarn circular-deps:update` locally and commit the changes.'; + +/** + * Patterns for files and directories to ignore when checking for circular dependencies: + * - test files and directories + * - storybook files and directories + * - any file with .test., .spec., or .stories. in its name + */ +const IGNORE_PATTERNS = [ + // Test files and directories + '**/test/**', + '**/tests/**', + '**/*.test.*', + '**/*.spec.*', + + // Storybook files and directories + '**/stories/**', + '**/storybook/**', + '**/*.stories.*', +]; + +/** + * Source code directories to check for circular dependencies. + * These are the main app directories containing production code. + */ +const ENTRYPOINT_PATTERNS = [ + 'app/**/*', // Main application code + 'shared/**/*', // Shared utilities and components + 'ui/**/*', // UI components and styles +]; + +// Converts a glob pattern to a RegExp pattern +function globToRegExp(pattern: string): RegExp { + return new RegExp( + pattern + // Convert '**' to '.*' to match any characters. + .replace(/\*\*/gu, '.*') + // Convert '*' to '[^/]*' to match any characters except directory separators. + .replace(/\*/gu, '[^/]*'), + 'u', + ); +} + +/** + * Circular dependencies are represented as an array of arrays, where each + * inner array represents a cycle of dependencies. + */ +type CircularDeps = string[][]; + +/** + * Normalizes JSON output by sorting both the individual cycles and the array + * of cycles. This ensures consistent output regardless of cycle starting point. + * + * Example: + * Input cycle: B -> C -> A -> B + * Output cycle: A -> B -> C -> A + * + * The normalization allows for reliable diff comparisons by eliminating + * ordering variations. + *… + * + * @param cycles + */ +function normalizeJson(cycles: CircularDeps): CircularDeps { + return cycles.map((cycle) => [...cycle].sort()).sort(); +} + +// Common madge configuration +const MADGE_CONFIG = { + circular: true, + extensions: ['js', 'jsx', 'ts', 'tsx'], + excludeRegExp: IGNORE_PATTERNS.map(globToRegExp), + tsConfig: 'tsconfig.json', + webpackConfig: 'webpack.config.js', +}; + +async function getMadgeCircularDeps(): Promise { + console.log('Running madge to detect circular dependencies...'); + try { + const entrypoints = ( + await Promise.all( + ENTRYPOINT_PATTERNS.map((pattern) => + fg(pattern, { ignore: IGNORE_PATTERNS }), + ), + ) + ).flat(); + console.log( + `Analyzing ${entrypoints.length} entry points for circular dependencies...`, + ); + const result = await madge(entrypoints, MADGE_CONFIG); + const circularDeps = result.circular(); + console.log(`Found ${circularDeps.length} circular dependencies`); + return normalizeJson(circularDeps); + } catch (error) { + console.error('Error while running madge:', error); + throw error; + } +} + +async function update(): Promise { + try { + console.log('Generating circular dependencies...'); + const circularDeps = await getMadgeCircularDeps(); + fs.writeFileSync( + TARGET_FILE, + `${FILE_HEADER + JSON.stringify(circularDeps, null, 2)}\n`, + ); + console.log(`Wrote circular dependencies to ${TARGET_FILE}`); + } catch (error) { + console.error('Error while updating circular dependencies:', error); + process.exit(1); + } +} + +/** + * Simplified version of stripJsonComments that removes any line that + * starts with // (ignoring whitespace). + * + * @param jsonc + */ +function stripJsonComments(jsonc: string): string { + return jsonc + .split('\n') + .filter((line) => !line.trim().startsWith('//')) + .join('\n'); +} + +async function check(): Promise { + try { + // Check if target file exists + if (!fs.existsSync(TARGET_FILE)) { + console.error(`Error: ${TARGET_FILE} does not exist.`); + console.log(RESOLUTION_STEPS); + process.exit(1); + } + + // Determine actual circular dependencies in the codebase + const actualDeps = await getMadgeCircularDeps(); + + // Read existing file and strip comments + const fileContents = fs.readFileSync(TARGET_FILE, 'utf-8'); + const baselineDeps = JSON.parse(stripJsonComments(fileContents)); + + // Compare dependencies + const actualStr = JSON.stringify(actualDeps); + const baselineStr = JSON.stringify(baselineDeps); + + if (actualStr !== baselineStr) { + console.error( + `Error: Codebase circular dependencies are out of sync with ${TARGET_FILE}`, + ); + console.log(RESOLUTION_STEPS); + process.exit(1); + } + + console.log('Circular dependencies check passed.'); + } catch (error) { + console.error('Error while checking circular dependencies:', error); + process.exit(1); + } +} + +// Main execution +async function main(): Promise { + const command = process.argv[2]; + + if (command !== 'check' && command !== 'update') { + console.error('Usage: circular-deps.ts [check|update]'); + process.exit(1); + } + + if (command === 'update') { + await update(); + } else { + await check(); + } +} + +main().catch((error) => { + console.error('Unexpected error:', error); + process.exit(1); +}); diff --git a/development/ts-migration-dashboard/common/build-module-partitions.ts b/development/ts-migration-dashboard/common/build-module-partitions.ts index 14fa31900eed..aa58568b3d58 100644 --- a/development/ts-migration-dashboard/common/build-module-partitions.ts +++ b/development/ts-migration-dashboard/common/build-module-partitions.ts @@ -1,7 +1,7 @@ import fs from 'fs'; import path from 'path'; import fg from 'fast-glob'; -import madge from '@lgbot/madge'; +import madge from 'madge'; import { ROOT_DIRECTORY_PATH, ENTRYPOINT_PATTERNS, diff --git a/development/ts-migration-dashboard/scripts/write-list-of-files-to-convert.ts b/development/ts-migration-dashboard/scripts/write-list-of-files-to-convert.ts index 4fd95a8366e3..ead0cb218716 100644 --- a/development/ts-migration-dashboard/scripts/write-list-of-files-to-convert.ts +++ b/development/ts-migration-dashboard/scripts/write-list-of-files-to-convert.ts @@ -1,7 +1,7 @@ import path from 'path'; import fs from 'fs'; import fg from 'fast-glob'; -import madge from '@lgbot/madge'; +import madge from 'madge'; import { ROOT_DIRECTORY_PATH, ENTRYPOINT_PATTERNS, diff --git a/lavamoat/build-system/policy.json b/lavamoat/build-system/policy.json index 6265bb7b2315..bae075d9b3fb 100644 --- a/lavamoat/build-system/policy.json +++ b/lavamoat/build-system/policy.json @@ -975,7 +975,7 @@ "node:path.relative": true }, "packages": { - "depcheck>resolve": true + "lavamoat>@lavamoat/aa>resolve": true } }, "@lavamoat/lavapack": { @@ -4106,7 +4106,7 @@ "gulp>gulp-cli>replace-homedir>is-absolute>is-relative>is-unc-path>unc-path-regex": true } }, - "mocha>log-symbols>is-unicode-supported": { + "madge>ora>is-unicode-supported": { "globals": { "process.env.CI": true, "process.env.TERM": true, @@ -4348,7 +4348,7 @@ "console.log": true }, "packages": { - "@babel/core>@babel/parser": true, + "lavamoat>lavamoat-tofu>@babel/parser": true, "depcheck>@babel/traverse": true } }, @@ -4444,7 +4444,7 @@ "mocha>log-symbols": { "packages": { "chalk": true, - "mocha>log-symbols>is-unicode-supported": true + "madge>ora>is-unicode-supported": true } }, "loose-envify": { @@ -7222,6 +7222,36 @@ "gulp>vinyl-fs>value-or-function": true } }, + "lavamoat>@lavamoat/aa>resolve": { + "builtin": { + "fs.readFileSync": true, + "fs.realpathSync": true, + "fs.statSync": true, + "os.homedir": true, + "path.dirname": true, + "path.join": true, + "path.parse": true, + "path.relative": true, + "path.resolve": true + }, + "globals": { + "process.env.HOME": true, + "process.env.HOMEDRIVE": true, + "process.env.HOMEPATH": true, + "process.env.LNAME": true, + "process.env.LOGNAME": true, + "process.env.USER": true, + "process.env.USERNAME": true, + "process.env.USERPROFILE": true, + "process.getuid": true, + "process.platform": true, + "process.versions.pnp": true + }, + "packages": { + "depcheck>is-core-module": true, + "depcheck>resolve>path-parse": true + } + }, "depcheck>resolve": { "builtin": { "fs.readFile": true, diff --git a/package.json b/package.json index 191127a8e6a6..40ba6a790da9 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,8 @@ "dist:mmi:debug": "yarn dist --build-type mmi --apply-lavamoat=false --snow=false", "build": "yarn lavamoat:build", "build:dev": "node development/build/index.js", + "circular-deps:check": "tsx development/circular-deps.ts check", + "circular-deps:update": "tsx development/circular-deps.ts update", "start:test": "yarn env:e2e build:dev testDev --apply-lavamoat=false", "start:test:flask": "yarn start:test --build-type flask --apply-lavamoat=false", "start:test:mv2:flask": "ENABLE_MV3=false yarn start:test:flask --apply-lavamoat=false --snow=false", @@ -67,7 +69,7 @@ "ganache:start": "./development/run-ganache.sh", "sentry:publish": "node ./development/sentry-publish.js", "lint": "yarn lint:prettier && yarn lint:eslint && yarn lint:tsc && yarn lint:styles", - "lint:fix": "yarn lint:prettier:fix && yarn lint:eslint:fix && yarn lint:styles:fix", + "lint:fix": "yarn lint:prettier:fix && yarn lint:eslint:fix && yarn lint:styles:fix && yarn circular-deps:update", "lint:prettier": "prettier --check --cache -- '**/*.json'", "lint:prettier:fix": "prettier --write --cache -- '**/*.json'", "lint:changed": "./development/get-changed-file-names.sh | grep -E --regexp='[.](js|ts|tsx)$' | tr '\\n' '\\0' | xargs -0 eslint --cache --cache-location node_modules/.cache/eslint/.eslint-cache", @@ -458,7 +460,6 @@ "@lavamoat/allow-scripts": "^3.3.1", "@lavamoat/lavadome-core": "0.0.20", "@lavamoat/lavapack": "^7.0.5", - "@lgbot/madge": "^6.2.0", "@lydell/node-pty": "^1.0.1", "@metamask/api-specs": "^0.9.3", "@metamask/auto-changelog": "^2.1.0", @@ -517,6 +518,7 @@ "@types/he": "^1", "@types/jest": "^29.5.12", "@types/luxon": "^3.4.2", + "@types/madge": "^5.0.3", "@types/mocha": "^10.0.3", "@types/node": "^20", "@types/path-browserify": "^1.0.2", @@ -618,6 +620,7 @@ "level": "^8.0.1", "lockfile-lint": "^4.10.6", "loose-envify": "^1.4.0", + "madge": "^8.0.0", "mini-css-extract-plugin": "^2.9.1", "minipass": "^7.1.2", "mocha": "^10.2.0", diff --git a/yarn.lock b/yarn.lock index 31b511deca9d..5205f774ac47 100644 --- a/yarn.lock +++ b/yarn.lock @@ -462,7 +462,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:7.26.2, @babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.0, @babel/parser@npm:^7.13.9, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.8, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.25.9": +"@babel/parser@npm:7.26.2": version: 7.26.2 resolution: "@babel/parser@npm:7.26.2" dependencies: @@ -473,6 +473,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.7": + version: 7.26.7 + resolution: "@babel/parser@npm:7.26.7" + dependencies: + "@babel/types": "npm:^7.26.7" + bin: + parser: ./bin/babel-parser.js + checksum: 10/3ccc384366ca9a9b49c54f5b24c9d8cff9a505f2fbdd1cfc04941c8e1897084cc32f100e77900c12bc14a176cf88daa3c155faad680d9a23491b997fd2a59ffc + languageName: node + linkType: hard + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.9": version: 7.25.9 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.9" @@ -1636,13 +1647,13 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.0, @babel/types@npm:^7.13.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.24.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.26.3 - resolution: "@babel/types@npm:7.26.3" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.24.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.26.7 + resolution: "@babel/types@npm:7.26.7" dependencies: "@babel/helper-string-parser": "npm:^7.25.9" "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10/c31d0549630a89abfa11410bf82a318b0c87aa846fbf5f9905e47ba5e2aa44f41cc746442f105d622c519e4dc532d35a8d8080460ff4692f9fc7485fbf3a00eb + checksum: 10/2264efd02cc261ca5d1c5bc94497c8995238f28afd2b7483b24ea64dd694cf46b00d51815bf0c87f0d0061ea221569c77893aeecb0d4b4bb254e9c2f938d7669 languageName: node linkType: hard @@ -1734,13 +1745,13 @@ __metadata: languageName: node linkType: hard -"@dependents/detective-less@npm:^4.1.0": - version: 4.1.0 - resolution: "@dependents/detective-less@npm:4.1.0" +"@dependents/detective-less@npm:^5.0.0": + version: 5.0.0 + resolution: "@dependents/detective-less@npm:5.0.0" dependencies: gonzales-pe: "npm:^4.3.0" - node-source-walk: "npm:^6.0.1" - checksum: 10/5188bc4f0314ea2c7d6390c938904e91ba8aea15c7eb62f633e916db4d90af9e0cf27b6ab30e4b5bf60af9401433825d8d256076ef7ad258c9edb860f37fdb43 + node-source-walk: "npm:^7.0.0" + checksum: 10/85dfc3142d8f34753ddd411dc434784361f318adc7c4abc529c27cf9e2abad28cfe1cc099f2fd3615b9d7787d1f0bd012ac3ef20881d539bb85b61eb9ad7c78e languageName: node linkType: hard @@ -3935,10 +3946,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: 10/89960ac087781b961ad918978975bcdf2051cd1741880469783c42de64239703eab9db5230d776d8e6a09d73bb5e4cb964e07d93ee6e2e7aea5a7d726e865c09 +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10/4ed6123217569a1484419ac53f6ea0d9f3b57e5b57ab30d7c267bdb27792a27eb0e4b08e84a2680aa55cc2f2b411ffd6ec3db01c44fdc6dc43aca4b55f8374fd languageName: node linkType: hard @@ -4414,34 +4425,6 @@ __metadata: languageName: node linkType: hard -"@lgbot/madge@npm:^6.2.0": - version: 6.2.0 - resolution: "@lgbot/madge@npm:6.2.0" - dependencies: - chalk: "npm:^4.1.2" - commander: "npm:^7.2.0" - commondir: "npm:^1.0.1" - debug: "npm:^4.3.4" - dependency-tree: "npm:^10.0.9" - ora: "npm:^5.4.1" - pluralize: "npm:^8.0.0" - precinct: "npm:^11.0.5" - pretty-ms: "npm:^7.0.1" - rc: "npm:^1.2.8" - stream-to-array: "npm:^2.3.0" - ts-graphviz: "npm:^1.8.1" - walkdir: "npm:^0.4.1" - peerDependencies: - typescript: ^3.9.5 || ^4.9.5 || ^5 - peerDependenciesMeta: - typescript: - optional: true - bin: - madge: bin/cli.js - checksum: 10/e98a634bf0b7338b0164c22abecf8788a3c9127c038cc252212bd5c93fe565a9eda9ed1d7521fd9625d5aa3fb057062101567c9979648810ffca389e8e9da6f8 - languageName: node - linkType: hard - "@lit-labs/react@npm:^1.0.2": version: 1.2.1 resolution: "@lit-labs/react@npm:1.2.1" @@ -10049,6 +10032,41 @@ __metadata: languageName: node linkType: hard +"@ts-graphviz/adapter@npm:^2.0.6": + version: 2.0.6 + resolution: "@ts-graphviz/adapter@npm:2.0.6" + dependencies: + "@ts-graphviz/common": "npm:^2.1.5" + checksum: 10/6f15c14a166126e29dddb13f2ad012d8ac4d883e6fa789263b05ee50e0b47f2c09cf4c7f09b549e711563c30d6a6c2e45b52df0fd2701db2953dff112c0e9ea6 + languageName: node + linkType: hard + +"@ts-graphviz/ast@npm:^2.0.7": + version: 2.0.7 + resolution: "@ts-graphviz/ast@npm:2.0.7" + dependencies: + "@ts-graphviz/common": "npm:^2.1.5" + checksum: 10/ca2e0054cb97106e5993d642b8277b60b29a1d227ff75e576d56704a8364790d3fb535788243ac2ec7bc46f077cd760da61fa4a76ddfda5877d40d77b857c3c5 + languageName: node + linkType: hard + +"@ts-graphviz/common@npm:^2.1.5": + version: 2.1.5 + resolution: "@ts-graphviz/common@npm:2.1.5" + checksum: 10/421ea1a0d32917d6f26bceaf7b8e99db9f405afd3bbbb83bb9d2c759ee4bdcf15d5e611b3590becf55615f0ff35a9766fb19268c8c01c3dee0b02a74d0ef1a27 + languageName: node + linkType: hard + +"@ts-graphviz/core@npm:^2.0.7": + version: 2.0.7 + resolution: "@ts-graphviz/core@npm:2.0.7" + dependencies: + "@ts-graphviz/ast": "npm:^2.0.7" + "@ts-graphviz/common": "npm:^2.1.5" + checksum: 10/a2884db12a822ba0fa22845d382459332add43b8297c78d6e7223d89403aacf83508133a00bbf2122c6097b52351bfc5bcf856539379c6d35c9f1439d39cb89b + languageName: node + linkType: hard + "@tsconfig/node10@npm:^1.0.7": version: 1.0.8 resolution: "@tsconfig/node10@npm:1.0.8" @@ -10402,13 +10420,6 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:^0.0.48": - version: 0.0.48 - resolution: "@types/estree@npm:0.0.48" - checksum: 10/f9869dedb1c074c5e7dbbd8c4a1b38eca178e615be839687a4cc66eea058b953b20277d4345f9f4bc1f5cf8a4b75002ce3c57e8f7066d5f44a1f23fdf7959ada - languageName: node - linkType: hard - "@types/estree@npm:^0.0.51": version: 0.0.51 resolution: "@types/estree@npm:0.0.51" @@ -10749,6 +10760,15 @@ __metadata: languageName: node linkType: hard +"@types/madge@npm:^5.0.3": + version: 5.0.3 + resolution: "@types/madge@npm:5.0.3" + dependencies: + "@types/node": "npm:*" + checksum: 10/6f09cd5cc9a4074067d50b387899f967e3f84dbe890d69b007f31c4518df2ffca40823e76ab3d9d6438d32f8304a4d5103182b0159ebfb5bc895541d1215672b + languageName: node + linkType: hard + "@types/mdast@npm:^3.0.0": version: 3.0.10 resolution: "@types/mdast@npm:3.0.10" @@ -11524,6 +11544,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/types@npm:7.18.0" + checksum: 10/0e30c73a3cc3c67dd06360a5a12fd12cee831e4092750eec3d6c031bdc4feafcb0ab1d882910a73e66b451a4f6e1dd015e9e2c4d45bf6bf716a474e5d123ddf0 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.59.1": version: 5.59.1 resolution: "@typescript-eslint/typescript-estree@npm:5.59.1" @@ -11542,7 +11569,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.62.0, @typescript-eslint/typescript-estree@npm:^5.59.5": +"@typescript-eslint/typescript-estree@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" dependencies: @@ -11579,6 +11606,25 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:^7.6.0": + version: 7.18.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/b01e66235a91aa4439d02081d4a5f8b4a7cf9cb24f26b334812f657e3c603493e5f41e5c1e89cf4efae7d64509fa1f73affc16afc5e15cb7f83f724577c82036 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:7.11.0": version: 7.11.0 resolution: "@typescript-eslint/utils@npm:7.11.0" @@ -11641,6 +11687,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + eslint-visitor-keys: "npm:^3.4.3" + checksum: 10/b7cfe6fdeae86c507357ac6b2357813c64fb2fbf1aaf844393ba82f73a16e2599b41981b34200d9fc7765d70bc3a8181d76b503051e53f04bcb7c9afef637eab + languageName: node + linkType: hard + "@ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" @@ -11648,70 +11704,60 @@ __metadata: languageName: node linkType: hard -"@vue/compiler-core@npm:3.1.4": - version: 3.1.4 - resolution: "@vue/compiler-core@npm:3.1.4" +"@vue/compiler-core@npm:3.5.13": + version: 3.5.13 + resolution: "@vue/compiler-core@npm:3.5.13" dependencies: - "@babel/parser": "npm:^7.12.0" - "@babel/types": "npm:^7.12.0" - "@vue/shared": "npm:3.1.4" - estree-walker: "npm:^2.0.1" - source-map: "npm:^0.6.1" - checksum: 10/a27a1caf408c6a57b3f389ef1b351d96392e73d57588f67632cbf9d0779c408216ee8f7e3b7363188c95d68bb034621a01e6f31b91fc2e8b34980ab2dfcf8e8e + "@babel/parser": "npm:^7.25.3" + "@vue/shared": "npm:3.5.13" + entities: "npm:^4.5.0" + estree-walker: "npm:^2.0.2" + source-map-js: "npm:^1.2.0" + checksum: 10/22f042bb47c8a1edb9d602e24da8092ab542d5640f0459a9b99ecf35f90e96678f870209dd30f774f5340c6d817d3c5a46ca49cefb9659ee5b228bd42d1f076a languageName: node linkType: hard -"@vue/compiler-dom@npm:3.1.4": - version: 3.1.4 - resolution: "@vue/compiler-dom@npm:3.1.4" +"@vue/compiler-dom@npm:3.5.13": + version: 3.5.13 + resolution: "@vue/compiler-dom@npm:3.5.13" dependencies: - "@vue/compiler-core": "npm:3.1.4" - "@vue/shared": "npm:3.1.4" - checksum: 10/8d9a493bea641045e42ffd4bc6171822b992291c76e80b537ed301d03c4891f8fb6a8b8bd63d1021a50b74f7d0b84f5d40c23e1b2cd175874aa68987ec474a2f + "@vue/compiler-core": "npm:3.5.13" + "@vue/shared": "npm:3.5.13" + checksum: 10/5dc628c52091264a443c2d7326b759d7d3999c7e9c00078c2eb370b778e60b9f2ef258a8decf2fd97c8fa0923f895d449eabc1e5bc3d8a45d3ef99c9eb0599d7 languageName: node linkType: hard -"@vue/compiler-sfc@npm:^3.0.5": - version: 3.1.4 - resolution: "@vue/compiler-sfc@npm:3.1.4" - dependencies: - "@babel/parser": "npm:^7.13.9" - "@babel/types": "npm:^7.13.0" - "@types/estree": "npm:^0.0.48" - "@vue/compiler-core": "npm:3.1.4" - "@vue/compiler-dom": "npm:3.1.4" - "@vue/compiler-ssr": "npm:3.1.4" - "@vue/shared": "npm:3.1.4" - consolidate: "npm:^0.16.0" - estree-walker: "npm:^2.0.1" - hash-sum: "npm:^2.0.0" - lru-cache: "npm:^5.1.1" - magic-string: "npm:^0.25.7" - merge-source-map: "npm:^1.1.0" - postcss: "npm:^8.1.10" - postcss-modules: "npm:^4.0.0" - postcss-selector-parser: "npm:^6.0.4" - source-map: "npm:^0.6.1" - peerDependencies: - vue: 3.1.4 - checksum: 10/fd23effde5668b78a50acc7607efb7ddf00603c1cc927a416a69119cde8c0986acff6c143419e41f22a80abe812418503c3b04cebee8880f7dee17f5dba5fd0f +"@vue/compiler-sfc@npm:^3.0.5, @vue/compiler-sfc@npm:^3.5.13": + version: 3.5.13 + resolution: "@vue/compiler-sfc@npm:3.5.13" + dependencies: + "@babel/parser": "npm:^7.25.3" + "@vue/compiler-core": "npm:3.5.13" + "@vue/compiler-dom": "npm:3.5.13" + "@vue/compiler-ssr": "npm:3.5.13" + "@vue/shared": "npm:3.5.13" + estree-walker: "npm:^2.0.2" + magic-string: "npm:^0.30.11" + postcss: "npm:^8.4.48" + source-map-js: "npm:^1.2.0" + checksum: 10/08d55bbdbe86ad0a1fc0501dbf5f535161d35ecb378adb478dd4a75b97e8d21852516966c0ad8aed1d6da11b0d8280b7848ff142b4181cb8f24eaaecd7827f73 languageName: node linkType: hard -"@vue/compiler-ssr@npm:3.1.4": - version: 3.1.4 - resolution: "@vue/compiler-ssr@npm:3.1.4" +"@vue/compiler-ssr@npm:3.5.13": + version: 3.5.13 + resolution: "@vue/compiler-ssr@npm:3.5.13" dependencies: - "@vue/compiler-dom": "npm:3.1.4" - "@vue/shared": "npm:3.1.4" - checksum: 10/2a21c9049daf84fb6586ed8a5557cfa65a34018643fccce46ae68346c786fe48fe31e19968db3aa736968f5a9a0847f404406f501b49208545918e1707dcfe62 + "@vue/compiler-dom": "npm:3.5.13" + "@vue/shared": "npm:3.5.13" + checksum: 10/09f2706455a7d8a5acc67c98120d28d0105d006184402b045636be7791939f5a77fd1c37657047b0129fa431f03437dcab9befc6baa172367ecdef7618407149 languageName: node linkType: hard -"@vue/shared@npm:3.1.4": - version: 3.1.4 - resolution: "@vue/shared@npm:3.1.4" - checksum: 10/d2dd7f127e7f5fec3f2fb82d8465fbb7c6c2904ae96b36214112fa2f27118ce690b6f10618f7245cb2ff2783e65ae82f2c51be4591d1409668f0388dbc9a91be +"@vue/shared@npm:3.5.13": + version: 3.5.13 + resolution: "@vue/shared@npm:3.5.13" + checksum: 10/5c0c24f443533392dde08c3e4272ff2e19af9762f90baeaa808850e05106537bbd9e2d2ad2081d979b8c4bc89902395b46036b67f74c60b76025924de37833b1 languageName: node linkType: hard @@ -13021,10 +13067,10 @@ __metadata: languageName: node linkType: hard -"ast-module-types@npm:^5.0.0": - version: 5.0.0 - resolution: "ast-module-types@npm:5.0.0" - checksum: 10/188a0c331929962c7ea0d9174b31393d31b0f9d5cc3bb3ad1dcb6f94c611eddfff10194104f247f1cba03f0bb9a2b5c757e619f5a5940333f60b8a12a7db244d +"ast-module-types@npm:^6.0.0": + version: 6.0.0 + resolution: "ast-module-types@npm:6.0.0" + checksum: 10/72ede4e198e62cf442b444b21126ffefbd89e5155097d91e8c829647b0bd6b32655176b4ae01ebb358fbd41eefbecaf46cbe2f784f82ad7bf6a896de52c5bded languageName: node linkType: hard @@ -13778,7 +13824,7 @@ __metadata: languageName: node linkType: hard -"bluebird@npm:^3.7.2, bluebird@npm:~3.7.2": +"bluebird@npm:~3.7.2": version: 3.7.2 resolution: "bluebird@npm:3.7.2" checksum: 10/007c7bad22c5d799c8dd49c85b47d012a1fe3045be57447721e6afbd1d5be43237af1db62e26cb9b0d9ba812d2e4ca3bac82f6d7e016b6b88de06ee25ceb96e7 @@ -15391,7 +15437,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^12.1.0": +"commander@npm:^12.0.0, commander@npm:^12.1.0": version: 12.1.0 resolution: "commander@npm:12.1.0" checksum: 10/cdaeb672d979816853a4eed7f1310a9319e8b976172485c2a6b437ed0db0a389a44cfb222bfbde772781efa9f215bdd1b936f80d6b249485b465c6cb906e1f93 @@ -15629,15 +15675,6 @@ __metadata: languageName: node linkType: hard -"consolidate@npm:^0.16.0": - version: 0.16.0 - resolution: "consolidate@npm:0.16.0" - dependencies: - bluebird: "npm:^3.7.2" - checksum: 10/74b9bc2f1c8a6898e062a569e873ad3800490cf0e83f951933895e0a68ebd144de073b15898ba84bf61bffe88eb389998cd3a53b69096c15cc72303f725e1753 - languageName: node - linkType: hard - "constants-browserify@npm:^1.0.0, constants-browserify@npm:~1.0.0": version: 1.0.0 resolution: "constants-browserify@npm:1.0.0" @@ -16822,17 +16859,17 @@ __metadata: languageName: node linkType: hard -"dependency-tree@npm:^10.0.9": - version: 10.0.9 - resolution: "dependency-tree@npm:10.0.9" +"dependency-tree@npm:^11.0.0": + version: 11.0.1 + resolution: "dependency-tree@npm:11.0.1" dependencies: - commander: "npm:^10.0.1" - filing-cabinet: "npm:^4.1.6" - precinct: "npm:^11.0.5" - typescript: "npm:^5.0.4" + commander: "npm:^12.0.0" + filing-cabinet: "npm:^5.0.1" + precinct: "npm:^12.0.2" + typescript: "npm:^5.4.5" bin: dependency-tree: bin/cli.js - checksum: 10/ddfd641f4ff82fe33d0d9578fd71ea9d044b9416191f93e484e7a2b2ed195e02f8dfe7cbb4f00fb25ba37aeca46158fc29782d22bd3a5ef3582c01d15d6705c8 + checksum: 10/31c89353f730107717bdcea3b9a4e1558ab0ffe57c5ffecc7915f5265ed2a2d526420767884589bf983ccb65c03309f49d468784ca12fd95ec6453bbb502e4bd languageName: node linkType: hard @@ -16968,86 +17005,105 @@ __metadata: languageName: node linkType: hard -"detective-amd@npm:^5.0.2": - version: 5.0.2 - resolution: "detective-amd@npm:5.0.2" +"detective-amd@npm:^6.0.0": + version: 6.0.0 + resolution: "detective-amd@npm:6.0.0" dependencies: - ast-module-types: "npm:^5.0.0" - escodegen: "npm:^2.0.0" - get-amd-module-type: "npm:^5.0.1" - node-source-walk: "npm:^6.0.1" + ast-module-types: "npm:^6.0.0" + escodegen: "npm:^2.1.0" + get-amd-module-type: "npm:^6.0.0" + node-source-walk: "npm:^7.0.0" bin: detective-amd: bin/cli.js - checksum: 10/6117eec09b4908abe74a3c3bc1f037334092e2a9388231c5f1b672a22c48f6e17ade9ecaf8c0cbbef6fcde52da178b0693e9810ef3c824c11c5c64c6c5865ca1 + checksum: 10/2b48d48f8e93a84326975bc8da16cb16df0e06a5e39776c98c17e1d32722d4bf58c3a826265c781ee970b9bf71513f42b8d541f5b56ec111ea922f62da2da406 languageName: node linkType: hard -"detective-cjs@npm:^5.0.1": - version: 5.0.1 - resolution: "detective-cjs@npm:5.0.1" +"detective-cjs@npm:^6.0.0": + version: 6.0.0 + resolution: "detective-cjs@npm:6.0.0" dependencies: - ast-module-types: "npm:^5.0.0" - node-source-walk: "npm:^6.0.0" - checksum: 10/c51c27ab10e4c441b26d13e44569c4cd1015268b10537fdfca698996c569ce98e9d69ce635a9680789c9e4fbc6d60c77a752ae64d7532e92678c19fb19ff313b + ast-module-types: "npm:^6.0.0" + node-source-walk: "npm:^7.0.0" + checksum: 10/9fa6c39122a9b378f4afd76494c23d6913150dfe5ea73d703229a8d0ba7ef5057c4946510a210048b6d78d0171ae6f724c9bba91ea8ec23badec61d232c1b8ba languageName: node linkType: hard -"detective-es6@npm:^4.0.1": - version: 4.0.1 - resolution: "detective-es6@npm:4.0.1" +"detective-es6@npm:^5.0.0": + version: 5.0.0 + resolution: "detective-es6@npm:5.0.0" dependencies: - node-source-walk: "npm:^6.0.1" - checksum: 10/f9fbcae9399fad5d1c4120d22db97fdab6fc8d9ec8011cec2214b23970b3524d5a8ec30943009543cda99cb6dec2e8b78549b6dd918d7c2bff8f13c0565345c8 + node-source-walk: "npm:^7.0.0" + checksum: 10/cf7d6423e83fb48e3687ddecc6b5437d01a864e80495bd10a02e985f2757957b8c132d1d2b576aef1250d69ee9fc28ce33ac5805f8ef2e42c9772164011af557 languageName: node linkType: hard -"detective-postcss@npm:^6.1.3": - version: 6.1.3 - resolution: "detective-postcss@npm:6.1.3" +"detective-postcss@npm:^7.0.0": + version: 7.0.0 + resolution: "detective-postcss@npm:7.0.0" dependencies: is-url: "npm:^1.2.4" - postcss: "npm:^8.4.23" postcss-values-parser: "npm:^6.0.2" - checksum: 10/ee6e07fed20ac93a6ba84736b9c586a942a4a6b2df173f963f95ea753380c99e4a606da22b8d9e8407c50e356f3d893a127eb68cf84c97233a209e9fbbadb026 + peerDependencies: + postcss: ^8.4.38 + checksum: 10/987e460169459b16f1fdc42bb508ce63b0ea1ee5c9bba810ba2c3554ded76100b746c02c4d1e8de6c11501c9cd845da98a3f63b62917d8e687f37015bda2baf4 languageName: node linkType: hard -"detective-sass@npm:^5.0.3": - version: 5.0.3 - resolution: "detective-sass@npm:5.0.3" +"detective-sass@npm:^6.0.0": + version: 6.0.0 + resolution: "detective-sass@npm:6.0.0" dependencies: gonzales-pe: "npm:^4.3.0" - node-source-walk: "npm:^6.0.1" - checksum: 10/5b09526931c6d87b8159fd9f10518b546ac2cbbc3cec91db194e67553a64c312bcf53de6950f34236ba7747a4f7855885b662c0e2df42aff7deb9d8aed0ce5e3 + node-source-walk: "npm:^7.0.0" + checksum: 10/2a4db6fb383949b9203fea982810ebcf6071f8b0eaf1a173a4c13c6652a7cecf873be386b864fee7a953718fa11a49caa2fa05b137961267e4e771ef39ff1280 languageName: node linkType: hard -"detective-scss@npm:^4.0.3": - version: 4.0.3 - resolution: "detective-scss@npm:4.0.3" +"detective-scss@npm:^5.0.0": + version: 5.0.0 + resolution: "detective-scss@npm:5.0.0" dependencies: gonzales-pe: "npm:^4.3.0" - node-source-walk: "npm:^6.0.1" - checksum: 10/afeda1e45468d23499349bedaece546b63f9269b51faf05b00f8d9a8a092f6961a6f2f366cc7664b8a1e4291454085b57cfa94fc7e1a1eaf16ef63c06782cfa9 + node-source-walk: "npm:^7.0.0" + checksum: 10/2fad1dcaf4a496cf50fff8777100b014394b90f45df7291c5a47b2e8e9c17a884ccb657b8670c1135b3cb1cddab2960a90cd4513b61c365123ba7518e7b83369 languageName: node linkType: hard -"detective-stylus@npm:^4.0.0": - version: 4.0.0 - resolution: "detective-stylus@npm:4.0.0" - checksum: 10/50a765f95e95c8204a86122f015dc9b3d32eb1c38d25cba9a71bbcb0441d398185679baa0d15d8cf43ff1c37e071c98b18599adc7ffe6147cc3c7f7f874cf6a3 +"detective-stylus@npm:^5.0.0": + version: 5.0.0 + resolution: "detective-stylus@npm:5.0.0" + checksum: 10/e39a48e5d23605a459923896a5c511fff5d94bb1dc993a9b8cd866ee9b337589a314ef653342e3f0440e3233a8a40320e29ee557b6ef2f58e020ad9934c83682 languageName: node linkType: hard -"detective-typescript@npm:^11.1.0": - version: 11.1.0 - resolution: "detective-typescript@npm:11.1.0" +"detective-typescript@npm:^13.0.0": + version: 13.0.0 + resolution: "detective-typescript@npm:13.0.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:^7.6.0" + ast-module-types: "npm:^6.0.0" + node-source-walk: "npm:^7.0.0" + peerDependencies: + typescript: ^5.4.4 + checksum: 10/09f27c3e379e1300a1a4faafa62d119dddac1aae6b06a17e610a4c0e8d80e0cda34ad7fd2eef770cdd28e13e57a1fb2ded36b94d1e0861e0806e2112417c65b7 + languageName: node + linkType: hard + +"detective-vue2@npm:^2.0.3": + version: 2.1.1 + resolution: "detective-vue2@npm:2.1.1" dependencies: - "@typescript-eslint/typescript-estree": "npm:^5.59.5" - ast-module-types: "npm:^5.0.0" - node-source-walk: "npm:^6.0.1" - typescript: "npm:^5.0.4" - checksum: 10/b9f481b05a85ee71e5c4f0f1eb6892264d12faf287097f730be161fe1a1bc3a21d97f49e7001580084e32e6c59e6339d28d0c66ce2b4db924651f87c09fa253a + "@dependents/detective-less": "npm:^5.0.0" + "@vue/compiler-sfc": "npm:^3.5.13" + detective-es6: "npm:^5.0.0" + detective-sass: "npm:^6.0.0" + detective-scss: "npm:^5.0.0" + detective-stylus: "npm:^5.0.0" + detective-typescript: "npm:^13.0.0" + peerDependencies: + typescript: ^5.4.4 + checksum: 10/8eca36e7ed162e79f7591e14563b89ceb0668bbb0ffcfe5ec47e339bf096eeb99ec589381141aaef87341d1aa2a29bdaa9d1b5daa20972d5ed82abdf77c8461e languageName: node linkType: hard @@ -17641,13 +17697,13 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:>=5.7.0, enhanced-resolve@npm:^5.14.1, enhanced-resolve@npm:^5.17.1": - version: 5.17.1 - resolution: "enhanced-resolve@npm:5.17.1" +"enhanced-resolve@npm:>=5.7.0, enhanced-resolve@npm:^5.16.0, enhanced-resolve@npm:^5.17.1, enhanced-resolve@npm:^5.18.0": + version: 5.18.0 + resolution: "enhanced-resolve@npm:5.18.0" dependencies: graceful-fs: "npm:^4.2.4" tapable: "npm:^2.2.0" - checksum: 10/e8e03cb7a4bf3c0250a89afbd29e5ec20e90ba5fcd026066232a0754864d7d0a393fa6fc0e5379314a6529165a1834b36731147080714459d98924520410d8f5 + checksum: 10/e88463ef97b68d40d0da0cd0c572e23f43dba0be622d6d44eae5cafed05f0c5dac43e463a83a86c4f70186d029357f82b56d9e1e47e8fc91dce3d6602f8bd6ce languageName: node linkType: hard @@ -17665,7 +17721,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.2.0, entities@npm:^4.4.0": +"entities@npm:^4.2.0, entities@npm:^4.4.0, entities@npm:^4.5.0": version: 4.5.0 resolution: "entities@npm:4.5.0" checksum: 10/ede2a35c9bce1aeccd055a1b445d41c75a14a2bb1cd22e242f20cf04d236cdcd7f9c859eb83f76885327bfae0c25bf03303665ee1ce3d47c5927b98b0e3e3d48 @@ -18709,7 +18765,7 @@ __metadata: languageName: node linkType: hard -"estree-walker@npm:^2.0.1": +"estree-walker@npm:^2.0.2": version: 2.0.2 resolution: "estree-walker@npm:2.0.2" checksum: 10/b02109c5d46bc2ed47de4990eef770f7457b1159a229f0999a09224d2b85ffeed2d7679cffcff90aeb4448e94b0168feb5265b209cdec29aad50a3d6e93d21e2 @@ -19670,25 +19726,24 @@ __metadata: languageName: node linkType: hard -"filing-cabinet@npm:^4.1.6": - version: 4.1.6 - resolution: "filing-cabinet@npm:4.1.6" +"filing-cabinet@npm:^5.0.1": + version: 5.0.2 + resolution: "filing-cabinet@npm:5.0.2" dependencies: app-module-path: "npm:^2.2.0" - commander: "npm:^10.0.1" - enhanced-resolve: "npm:^5.14.1" - is-relative-path: "npm:^1.0.2" - module-definition: "npm:^5.0.1" - module-lookup-amd: "npm:^8.0.5" - resolve: "npm:^1.22.3" - resolve-dependency-path: "npm:^3.0.2" - sass-lookup: "npm:^5.0.1" - stylus-lookup: "npm:^5.0.1" + commander: "npm:^12.0.0" + enhanced-resolve: "npm:^5.16.0" + module-definition: "npm:^6.0.0" + module-lookup-amd: "npm:^9.0.1" + resolve: "npm:^1.22.8" + resolve-dependency-path: "npm:^4.0.0" + sass-lookup: "npm:^6.0.1" + stylus-lookup: "npm:^6.0.0" tsconfig-paths: "npm:^4.2.0" - typescript: "npm:^5.0.4" + typescript: "npm:^5.4.4" bin: filing-cabinet: bin/cli.js - checksum: 10/2a02fa6938eb4ecf7446a19f99befc4b8833eb6f82c9a26e0c7b5e80ff44cbc6a060fc551d41a6b703d2a4949d1fb0d1c84d77e6b586b02408589a855977ef50 + checksum: 10/dc6b5c3553e049c1de9e076b3b625bfc584579e801f5ec7da73cb8d7fa5941713574480190153d32a7a930b0096c25d0f62920425fb7c522f8f3e04c6037825c languageName: node linkType: hard @@ -20463,15 +20518,6 @@ __metadata: languageName: node linkType: hard -"generic-names@npm:^2.0.1": - version: 2.0.1 - resolution: "generic-names@npm:2.0.1" - dependencies: - loader-utils: "npm:^1.1.0" - checksum: 10/6c6e95f7765c9490f3ab677494715c7a9227cff42d51f44e3d9af35f58dcf2297e79532f3b378b5885786e366bf7a3e73b19aa3693c9dd4608129f951b4d2f19 - languageName: node - linkType: hard - "gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" @@ -20479,13 +20525,13 @@ __metadata: languageName: node linkType: hard -"get-amd-module-type@npm:^5.0.1": - version: 5.0.1 - resolution: "get-amd-module-type@npm:5.0.1" +"get-amd-module-type@npm:^6.0.0": + version: 6.0.0 + resolution: "get-amd-module-type@npm:6.0.0" dependencies: - ast-module-types: "npm:^5.0.0" - node-source-walk: "npm:^6.0.1" - checksum: 10/77b6a59b90c54fd2d8adb1555e3939462d7b97c617e74271bbcb8f9741ca6681e831216e9e45f4ab1ab1b249394b89d5c8d9e4afa1497c68d02698775cd2225e + ast-module-types: "npm:^6.0.0" + node-source-walk: "npm:^7.0.0" + checksum: 10/ebac9fae785fbab313309702278d1574204d5d9ea065f06be91a45512fa268ccd235bdfe62e840d868ff9038afb917b32b535fb609f844a05d4ec680f3f91ee7 languageName: node linkType: hard @@ -21577,13 +21623,6 @@ __metadata: languageName: node linkType: hard -"hash-sum@npm:^2.0.0": - version: 2.0.0 - resolution: "hash-sum@npm:2.0.0" - checksum: 10/efeeacf09ecbd467202865403c3a1991fa15d4f4903c1148ecbe13223fdbf9ec6d7dc661e17e5ce6e776cd70d67b6ee4c82e0171318962435be45c1155175f3f - languageName: node - linkType: hard - "hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": version: 1.1.7 resolution: "hash.js@npm:1.1.7" @@ -22198,13 +22237,6 @@ __metadata: languageName: node linkType: hard -"icss-replace-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "icss-replace-symbols@npm:1.1.0" - checksum: 10/24575b2c2f7e762bfc6f4beee31be9ba98a01cad521b5aa9954090a5de2b5e1bf67814c17e22f9e51b7d798238db8215a173d6c2b4726ce634ce06b68ece8045 - languageName: node - linkType: hard - "icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": version: 5.1.0 resolution: "icss-utils@npm:5.1.0" @@ -22675,12 +22707,12 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.12.1, is-core-module@npm:^2.13.0, is-core-module@npm:^2.4.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": - version: 2.13.1 - resolution: "is-core-module@npm:2.13.1" +"is-core-module@npm:^2.12.1, is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.0, is-core-module@npm:^2.4.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" dependencies: - hasown: "npm:^2.0.0" - checksum: 10/d53bd0cc24b0a0351fb4b206ee3908f71b9bbf1c47e9c9e14e5f06d292af1663704d2abd7e67700d6487b2b7864e0d0f6f10a1edf1892864bdffcb197d1845a2 + hasown: "npm:^2.0.2" + checksum: 10/452b2c2fb7f889cbbf7e54609ef92cf6c24637c568acc7e63d166812a0fb365ae8a504c333a29add8bdb1686704068caa7f4e4b639b650dde4f00a038b8941fb languageName: node linkType: hard @@ -23206,13 +23238,6 @@ __metadata: languageName: node linkType: hard -"is-relative-path@npm:^1.0.2": - version: 1.0.2 - resolution: "is-relative-path@npm:1.0.2" - checksum: 10/6c2ccffd3c0a3e3990535d0571370883d558b825b51940085f3446ec338857f4552f44521dfec3e83b7e067de08c0b0369de290208a91200bcae2c569533e340 - languageName: node - linkType: hard - "is-relative@npm:^1.0.0": version: 1.0.0 resolution: "is-relative@npm:1.0.0" @@ -25921,21 +25946,39 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.25.7": - version: 0.25.7 - resolution: "magic-string@npm:0.25.7" +"madge@npm:^8.0.0": + version: 8.0.0 + resolution: "madge@npm:8.0.0" dependencies: - sourcemap-codec: "npm:^1.4.4" - checksum: 10/252982e4a1b2b9b47bdf6fc7018b53f96908a34a1ee791a290a938795e9ef8bb11b8af336fdf053c82971cf91c5d8fab9d74c6370acba2635839c84b5269511e + chalk: "npm:^4.1.2" + commander: "npm:^7.2.0" + commondir: "npm:^1.0.1" + debug: "npm:^4.3.4" + dependency-tree: "npm:^11.0.0" + ora: "npm:^5.4.1" + pluralize: "npm:^8.0.0" + pretty-ms: "npm:^7.0.1" + rc: "npm:^1.2.8" + stream-to-array: "npm:^2.3.0" + ts-graphviz: "npm:^2.1.2" + walkdir: "npm:^0.4.1" + peerDependencies: + typescript: ^5.4.4 + peerDependenciesMeta: + typescript: + optional: true + bin: + madge: bin/cli.js + checksum: 10/9adee480224aadb1d24d36f583396053c3cea84359316b601f5bc423c67c87e81ba842425acaa6c764ccc8c00241e2e78700b16f9af546111d1106b70c336174 languageName: node linkType: hard -"magic-string@npm:^0.30.5": - version: 0.30.10 - resolution: "magic-string@npm:0.30.10" +"magic-string@npm:^0.30.11, magic-string@npm:^0.30.5": + version: 0.30.17 + resolution: "magic-string@npm:0.30.17" dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.4.15" - checksum: 10/9f8bf6363a14c98a9d9f32ef833b194702a5c98fb931b05ac511b76f0b06fd30ed92beda6ca3261d2d52d21e39e891ef1136fbd032023f6cbb02d0b7d5767201 + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10/2f71af2b0afd78c2e9012a29b066d2c8ba45a9cd0c8070f7fd72de982fb1c403b4e3afdb1dae00691d56885ede66b772ef6bedf765e02e3a7066208fe2fec4aa languageName: node linkType: hard @@ -26473,15 +26516,6 @@ __metadata: languageName: node linkType: hard -"merge-source-map@npm:^1.1.0": - version: 1.1.0 - resolution: "merge-source-map@npm:1.1.0" - dependencies: - source-map: "npm:^0.6.1" - checksum: 10/945a83dcc59eff77dde709be1d3d6cb575c11cd7164a7ccdc1c6f0d463aad7c12750a510bdf84af2c05fac4615c4305d97ac90477975348bb901a905c8e92c4b - languageName: node - linkType: hard - "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -26546,7 +26580,6 @@ __metadata: "@lavamoat/lavadome-react": "npm:0.0.20" "@lavamoat/lavapack": "npm:^7.0.5" "@lavamoat/snow": "npm:^2.0.3" - "@lgbot/madge": "npm:^6.2.0" "@lydell/node-pty": "npm:^1.0.1" "@material-ui/core": "npm:^4.11.0" "@metamask-institutional/custody-controller": "npm:^0.3.0" @@ -26696,6 +26729,7 @@ __metadata: "@types/he": "npm:^1" "@types/jest": "npm:^29.5.12" "@types/luxon": "npm:^3.4.2" + "@types/madge": "npm:^5.0.3" "@types/mocha": "npm:^10.0.3" "@types/node": "npm:^20" "@types/path-browserify": "npm:^1.0.2" @@ -26834,6 +26868,7 @@ __metadata: loose-envify: "npm:^1.4.0" lottie-web: "npm:^5.12.2" luxon: "npm:^3.2.1" + madge: "npm:^8.0.0" mini-css-extract-plugin: "npm:^2.9.1" minipass: "npm:^7.1.2" mocha: "npm:^10.2.0" @@ -27775,15 +27810,15 @@ __metadata: languageName: node linkType: hard -"module-definition@npm:^5.0.1": - version: 5.0.1 - resolution: "module-definition@npm:5.0.1" +"module-definition@npm:^6.0.0": + version: 6.0.0 + resolution: "module-definition@npm:6.0.0" dependencies: - ast-module-types: "npm:^5.0.0" - node-source-walk: "npm:^6.0.1" + ast-module-types: "npm:^6.0.0" + node-source-walk: "npm:^7.0.0" bin: module-definition: bin/cli.js - checksum: 10/d769181d119af6a80abb14219c6ca60b49689eec6e2dd7f8760a499a2c64646ec619a2e7f71760f777f86af763f61efc431e22693b03500ca3db9d7c73cfcb4c + checksum: 10/525922b0c3eb5dd1bf3751fc8752061bd2ded5c7b2818eee4fdc00d2010088f9779fb35d30c347f9474f2c8037299a55c4be3874d3effab5ad1e7a0634f403a5 languageName: node linkType: hard @@ -27819,17 +27854,17 @@ __metadata: languageName: node linkType: hard -"module-lookup-amd@npm:^8.0.5": - version: 8.0.5 - resolution: "module-lookup-amd@npm:8.0.5" +"module-lookup-amd@npm:^9.0.1": + version: 9.0.2 + resolution: "module-lookup-amd@npm:9.0.2" dependencies: - commander: "npm:^10.0.1" + commander: "npm:^12.1.0" glob: "npm:^7.2.3" - requirejs: "npm:^2.3.6" + requirejs: "npm:^2.3.7" requirejs-config-file: "npm:^4.0.0" bin: lookup-amd: bin/cli.js - checksum: 10/2808a5dfff52365dd5f7c9a50c3c5985414dcd13d5b966dad82f61f3274b0bbc246aadcefb0dd0421eb2a43709be0a8d937f0d1a19008e722e81cc361bb10dca + checksum: 10/593d954d8cf5653ff79c5c571b10f45270b3ecba36ad30f07ca459705d23b5392d000f01378118aadbb2d0d7c6fbc2dae02fe112a3769a0ff32282a57fa5fef5 languageName: node linkType: hard @@ -28001,7 +28036,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.1.31, nanoid@npm:^3.3.7, nanoid@npm:^3.3.8": +"nanoid@npm:^3.1.31, nanoid@npm:^3.3.8": version: 3.3.8 resolution: "nanoid@npm:3.3.8" bin: @@ -28296,12 +28331,12 @@ __metadata: languageName: node linkType: hard -"node-source-walk@npm:^6.0.0, node-source-walk@npm:^6.0.1, node-source-walk@npm:^6.0.2": - version: 6.0.2 - resolution: "node-source-walk@npm:6.0.2" +"node-source-walk@npm:^7.0.0": + version: 7.0.1 + resolution: "node-source-walk@npm:7.0.1" dependencies: - "@babel/parser": "npm:^7.21.8" - checksum: 10/eacaaa11fa71fd48da16d75a108d5e1e945b581550112b37c5e909c7f112c1b48acf8648d7fa167e6f482e41f047bceca1ffc5aa3c91fee74406acc003f98190 + "@babel/parser": "npm:^7.26.7" + checksum: 10/cd71a136b095aa8055d2a670e7820d467eaad3c62d343dacb706d3ac651991ae73032ce5f82a9ac0373ec8186d98c3c7e9b4311f1cd0887d1ec035c734b5f5ed languageName: node linkType: hard @@ -29555,7 +29590,7 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0": +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" checksum: 10/e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 @@ -29953,7 +29988,7 @@ __metadata: languageName: node linkType: hard -"postcss-modules-local-by-default@npm:^4.0.0, postcss-modules-local-by-default@npm:^4.0.4": +"postcss-modules-local-by-default@npm:^4.0.4": version: 4.0.4 resolution: "postcss-modules-local-by-default@npm:4.0.4" dependencies: @@ -29966,7 +30001,7 @@ __metadata: languageName: node linkType: hard -"postcss-modules-scope@npm:^3.0.0, postcss-modules-scope@npm:^3.1.1": +"postcss-modules-scope@npm:^3.1.1": version: 3.1.1 resolution: "postcss-modules-scope@npm:3.1.1" dependencies: @@ -29988,24 +30023,6 @@ __metadata: languageName: node linkType: hard -"postcss-modules@npm:^4.0.0": - version: 4.1.3 - resolution: "postcss-modules@npm:4.1.3" - dependencies: - generic-names: "npm:^2.0.1" - icss-replace-symbols: "npm:^1.1.0" - lodash.camelcase: "npm:^4.3.0" - postcss-modules-extract-imports: "npm:^3.0.0" - postcss-modules-local-by-default: "npm:^4.0.0" - postcss-modules-scope: "npm:^3.0.0" - postcss-modules-values: "npm:^4.0.0" - string-hash: "npm:^1.1.1" - peerDependencies: - postcss: ^8.0.0 - checksum: 10/b2777f37e5257147862cc8b3a0af57f1a43bf5213dddf1aeffccb180f7d7e0448809e50d55e717dd1370de98dffe1acc180c70d0a0e991566b835bc5249434ec - languageName: node - linkType: hard - "postcss-reporter@npm:^6.0.1": version: 6.0.1 resolution: "postcss-reporter@npm:6.0.1" @@ -30136,36 +30153,39 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.1.10, postcss@npm:^8.3.0, postcss@npm:^8.4.21, postcss@npm:^8.4.23, postcss@npm:^8.4.32, postcss@npm:^8.4.33": - version: 8.4.38 - resolution: "postcss@npm:8.4.38" +"postcss@npm:^8.3.0, postcss@npm:^8.4.21, postcss@npm:^8.4.32, postcss@npm:^8.4.33, postcss@npm:^8.4.40, postcss@npm:^8.4.48": + version: 8.5.1 + resolution: "postcss@npm:8.5.1" dependencies: - nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.0" - source-map-js: "npm:^1.2.0" - checksum: 10/6e44a7ed835ffa9a2b096e8d3e5dfc6bcf331a25c48aeb862dd54e3aaecadf814fa22be224fd308f87d08adf2299164f88c5fd5ab1c4ef6cbd693ceb295377f4 + nanoid: "npm:^3.3.8" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10/1fbd28753143f7f03e4604813639918182b15343c7ad0f4e72f3875fc2cc0b8494c887f55dc05008fad5fbf1e1e908ce2edbbce364a91f84dcefb71edf7cd31d languageName: node linkType: hard -"precinct@npm:^11.0.5": - version: 11.0.5 - resolution: "precinct@npm:11.0.5" +"precinct@npm:^12.0.2": + version: 12.1.2 + resolution: "precinct@npm:12.1.2" dependencies: - "@dependents/detective-less": "npm:^4.1.0" - commander: "npm:^10.0.1" - detective-amd: "npm:^5.0.2" - detective-cjs: "npm:^5.0.1" - detective-es6: "npm:^4.0.1" - detective-postcss: "npm:^6.1.3" - detective-sass: "npm:^5.0.3" - detective-scss: "npm:^4.0.3" - detective-stylus: "npm:^4.0.0" - detective-typescript: "npm:^11.1.0" - module-definition: "npm:^5.0.1" - node-source-walk: "npm:^6.0.2" + "@dependents/detective-less": "npm:^5.0.0" + commander: "npm:^12.1.0" + detective-amd: "npm:^6.0.0" + detective-cjs: "npm:^6.0.0" + detective-es6: "npm:^5.0.0" + detective-postcss: "npm:^7.0.0" + detective-sass: "npm:^6.0.0" + detective-scss: "npm:^5.0.0" + detective-stylus: "npm:^5.0.0" + detective-typescript: "npm:^13.0.0" + detective-vue2: "npm:^2.0.3" + module-definition: "npm:^6.0.0" + node-source-walk: "npm:^7.0.0" + postcss: "npm:^8.4.40" + typescript: "npm:^5.5.4" bin: precinct: bin/cli.js - checksum: 10/8f93c2e171622dfa1ce461ef52427247e4fcd51091480eec62b8d24c9b1098f5b6c2b28c50d57c2ae70a049f7302dfb2164631b59bfd894de97e2a8e11708c54 + checksum: 10/2bd14fadd8d3a4384bef426670e9844409c0b194fbeb02713570efa19d585ea5558a17faae9d4e389f21bac76c0b73ddccccdb912d59f1ca388d5e8c1db583d8 languageName: node linkType: hard @@ -32247,13 +32267,13 @@ __metadata: languageName: node linkType: hard -"requirejs@npm:^2.3.6": - version: 2.3.6 - resolution: "requirejs@npm:2.3.6" +"requirejs@npm:^2.3.7": + version: 2.3.7 + resolution: "requirejs@npm:2.3.7" bin: - r.js: ./bin/r.js - r_js: ./bin/r.js - checksum: 10/808540b0a2374cf19bf00d13036a90f94aac92984a9be0f1fa642266d0ee467db0b1aa9d85d567e0da71b54294f5feb92e13ac62bae7f85a0b3ac3ab393b05d4 + r.js: bin/r.js + r_js: bin/r.js + checksum: 10/7f42af10d8af210a2769501004b34f9dad4c39716f008f91faeef36c33b60a5f372ca1025c8f40b262f2522fd1ea0f36fd11e9587cba14311fac0df51a8571b0 languageName: node linkType: hard @@ -32294,10 +32314,10 @@ __metadata: languageName: node linkType: hard -"resolve-dependency-path@npm:^3.0.2": - version: 3.0.2 - resolution: "resolve-dependency-path@npm:3.0.2" - checksum: 10/d042bef325ce8dbdbe57f37f93851b2c5651e06378b9f352ceef2c28aa99dc6ae793be7795e8bf4ad18b40769ee06d8e049ce8206f183c9afe9812fd48ef6d8c +"resolve-dependency-path@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-dependency-path@npm:4.0.0" + checksum: 10/b582be091605f767e2abbf1965efb782aa8ccec8a329b065351c39890ca0f278fa1bde2bd959641b6bb06dfc6bfe76515f01e7e9996dd5d9ac491ad14861b1c7 languageName: node linkType: hard @@ -32390,7 +32410,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:1.22.8, resolve@npm:^1.1.4, resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.18.1, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.22.1, resolve@npm:^1.22.2, resolve@npm:^1.22.3, resolve@npm:^1.4.0": +"resolve@npm:1.22.8": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -32403,6 +32423,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.1.4, resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.18.1, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.22.1, resolve@npm:^1.22.2, resolve@npm:^1.22.8, resolve@npm:^1.4.0": + version: 1.22.10 + resolution: "resolve@npm:1.22.10" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10/0a398b44da5c05e6e421d70108822c327675febb880eebe905587628de401854c61d5df02866ff34fc4cb1173a51c9f0e84a94702738df3611a62e2acdc68181 + languageName: node + linkType: hard + "resolve@npm:^2.0.0-next.3": version: 2.0.0-next.4 resolution: "resolve@npm:2.0.0-next.4" @@ -32416,8 +32449,7 @@ __metadata: languageName: node linkType: hard -? "resolve@patch:resolve@npm%3A1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.1.4#optional!builtin, resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.18.1#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.3#optional!builtin, resolve@patch:resolve@npm%3A^1.4.0#optional!builtin" -: +"resolve@patch:resolve@npm%3A1.22.8#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -32430,6 +32462,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@npm%3A^1.1.4#optional!builtin, resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.18.1#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.4.0#optional!builtin": + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10/d4d878bfe3702d215ea23e75e0e9caf99468e3db76f5ca100d27ebdc527366fee3877e54bce7d47cc72ca8952fc2782a070d238bfa79a550eeb0082384c3b81a + languageName: node + linkType: hard + "resolve@patch:resolve@npm%3A^2.0.0-next.3#optional!builtin": version: 2.0.0-next.4 resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#optional!builtin::version=2.0.0-next.4&hash=c3c19d" @@ -33058,14 +33103,15 @@ __metadata: languageName: node linkType: hard -"sass-lookup@npm:^5.0.1": - version: 5.0.1 - resolution: "sass-lookup@npm:5.0.1" +"sass-lookup@npm:^6.0.1": + version: 6.1.0 + resolution: "sass-lookup@npm:6.1.0" dependencies: - commander: "npm:^10.0.1" + commander: "npm:^12.1.0" + enhanced-resolve: "npm:^5.18.0" bin: sass-lookup: bin/cli.js - checksum: 10/4d37f16830d31e4bb9804fedddc7d79e82d3d0c74ca307a2b4f77656f58f20f55f55e8321c51fe3d7850e04fe216910611cc0a7a1fa67cf9152929bfa1b9b95b + checksum: 10/90a06d5b0545615919f619608019a731eee81939cd0f1f88ed006060222f57de797ad20fc0eb103e13e6a9ff3e620af773e9f3e2ddf69a99fb2ccf4513f47fa4 languageName: node linkType: hard @@ -33851,10 +33897,10 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.0": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 10/74f331cfd2d121c50790c8dd6d3c9de6be21926de80583b23b37029b0f37aefc3e019fa91f9a10a5e120c08135297e1ecf312d561459c45908cb1e0e365f49e5 +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.0, source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10/ff9d8c8bf096d534a5b7707e0382ef827b4dd360a577d3f34d2b9f48e12c9d230b5747974ee7c607f0df65113732711bb701fe9ece3c7edbd43cb2294d707df3 languageName: node linkType: hard @@ -33938,13 +33984,6 @@ __metadata: languageName: node linkType: hard -"sourcemap-codec@npm:^1.4.4": - version: 1.4.8 - resolution: "sourcemap-codec@npm:1.4.8" - checksum: 10/6fc57a151e982b5c9468362690c6d062f3a0d4d8520beb68a82f319c79e7a4d7027eeb1e396de0ecc2cd19491e1d602b2d06fd444feac9b63dd43fea4c55a857 - languageName: node - linkType: hard - "space-separated-tokens@npm:^1.0.0, space-separated-tokens@npm:^1.1.0": version: 1.1.5 resolution: "space-separated-tokens@npm:1.1.5" @@ -34276,7 +34315,7 @@ __metadata: languageName: node linkType: hard -"string-hash@npm:^1.1.1, string-hash@npm:^1.1.3": +"string-hash@npm:^1.1.3": version: 1.1.3 resolution: "string-hash@npm:1.1.3" checksum: 10/104b8667a5e0dc71bfcd29fee09cb88c6102e27bfb07c55f95535d90587d016731d52299380052e514266f4028a7a5172e0d9ac58e2f8f5001be61dc77c0754d @@ -34789,14 +34828,14 @@ __metadata: languageName: node linkType: hard -"stylus-lookup@npm:^5.0.1": - version: 5.0.1 - resolution: "stylus-lookup@npm:5.0.1" +"stylus-lookup@npm:^6.0.0": + version: 6.1.0 + resolution: "stylus-lookup@npm:6.1.0" dependencies: - commander: "npm:^10.0.1" + commander: "npm:^12.1.0" bin: stylus-lookup: bin/cli.js - checksum: 10/c89ae3e35f578b8a324f96aacabe1ab582741de6d527cf94b64cbcb23702e753f96d43fc519b7e9818a7cb712780fe4aae63c188d1774a3d73b5f5bc173ffc48 + checksum: 10/0d998a648025b5e4ad07b65c9f0ee3a0b67cfdbecc352d56e6b2806f9f0ce966ffa287922d3dde7e7e245510a10d6435169dbaa015bdda44cccc60907a2bbce7 languageName: node linkType: hard @@ -35573,10 +35612,15 @@ __metadata: languageName: node linkType: hard -"ts-graphviz@npm:^1.8.1": - version: 1.8.2 - resolution: "ts-graphviz@npm:1.8.2" - checksum: 10/969b06332ca622c148f7b404569af1b972bbe7ee9ba1226350dd0d99bc92c1c95eb6bf9e69aafce51a6c2493a1342b25a8edd6883f27bd516778d401b2a3623f +"ts-graphviz@npm:^2.1.2": + version: 2.1.6 + resolution: "ts-graphviz@npm:2.1.6" + dependencies: + "@ts-graphviz/adapter": "npm:^2.0.6" + "@ts-graphviz/ast": "npm:^2.0.7" + "@ts-graphviz/common": "npm:^2.1.5" + "@ts-graphviz/core": "npm:^2.0.7" + checksum: 10/7490978263c2365b80b687964c13ad622a05b00e307c1ce448317a551fa1ee7fc03f37cd88d606ba23a030dd3baeb5b147d06d5af087b73133ac9276a7d65449 languageName: node linkType: hard @@ -35936,7 +35980,17 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.0.4, typescript@npm:~5.4.5": +"typescript@npm:^5.4.4, typescript@npm:^5.4.5, typescript@npm:^5.5.4": + version: 5.7.3 + resolution: "typescript@npm:5.7.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/6a7e556de91db3d34dc51cd2600e8e91f4c312acd8e52792f243c7818dfadb27bae677175fad6947f9c81efb6c57eb6b2d0c736f196a6ee2f1f7d57b74fc92fa + languageName: node + linkType: hard + +"typescript@npm:~5.4.5": version: 5.4.5 resolution: "typescript@npm:5.4.5" bin: @@ -35956,7 +36010,17 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.0.4#optional!builtin, typescript@patch:typescript@npm%3A~5.4.5#optional!builtin": +"typescript@patch:typescript@npm%3A^5.4.4#optional!builtin, typescript@patch:typescript@npm%3A^5.4.5#optional!builtin, typescript@patch:typescript@npm%3A^5.5.4#optional!builtin": + version: 5.7.3 + resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=cef18b" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/3ac7b7e3e899273d2fbdce6e24b93d4d53a705ad7a7e4cc83b4c57bcb6d25948abcd2a21994f6b9c73ab03960f395aae95f0458de292a66ce0134233261714c3 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A~5.4.5#optional!builtin": version: 5.4.5 resolution: "typescript@patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=5adc0c" bin: