@servicetitan/startup 37.0.2 → 38.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/js-yaml.js +2 -2
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +22 -9
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/bundle-package.d.ts +6 -0
- package/dist/cli/commands/bundle-package.d.ts.map +1 -0
- package/dist/cli/commands/bundle-package.js +59 -0
- package/dist/cli/commands/bundle-package.js.map +1 -0
- package/dist/cli/commands/bundle-vite.js +13 -4
- package/dist/cli/commands/bundle-vite.js.map +1 -1
- package/dist/cli/commands/bundle-webpack.js +13 -4
- package/dist/cli/commands/bundle-webpack.js.map +1 -1
- package/dist/cli/commands/clean.js +13 -4
- package/dist/cli/commands/clean.js.map +1 -1
- package/dist/cli/commands/command.d.ts +9 -0
- package/dist/cli/commands/command.d.ts.map +1 -0
- package/dist/cli/commands/command.js +35 -0
- package/dist/cli/commands/command.js.map +1 -0
- package/dist/cli/commands/convert-eslint-config.js +14 -7
- package/dist/cli/commands/convert-eslint-config.js.map +1 -1
- package/dist/cli/commands/eslint.js +13 -4
- package/dist/cli/commands/eslint.js.map +1 -1
- package/dist/cli/commands/init.js +13 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/install.js +13 -4
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/kendo-ui-license.js +13 -4
- package/dist/cli/commands/kendo-ui-license.js.map +1 -1
- package/dist/cli/commands/lint.js +13 -4
- package/dist/cli/commands/lint.js.map +1 -1
- package/dist/cli/commands/mfe-check.d.ts.map +1 -1
- package/dist/cli/commands/mfe-check.js +15 -7
- package/dist/cli/commands/mfe-check.js.map +1 -1
- package/dist/cli/commands/mfe-generate-metadata.js +13 -4
- package/dist/cli/commands/mfe-generate-metadata.js.map +1 -1
- package/dist/cli/commands/mfe-list.js +13 -4
- package/dist/cli/commands/mfe-list.js.map +1 -1
- package/dist/cli/commands/mfe-package-clean.js +13 -4
- package/dist/cli/commands/mfe-package-clean.js.map +1 -1
- package/dist/cli/commands/mfe-package-publish.js +13 -4
- package/dist/cli/commands/mfe-package-publish.js.map +1 -1
- package/dist/cli/commands/mfe-package-rollback.js +13 -4
- package/dist/cli/commands/mfe-package-rollback.js.map +1 -1
- package/dist/cli/commands/mfe-publish.js +13 -4
- package/dist/cli/commands/mfe-publish.js.map +1 -1
- package/dist/cli/commands/mfe-purge-cache.js +13 -4
- package/dist/cli/commands/mfe-purge-cache.js.map +1 -1
- package/dist/cli/commands/prepare-package.js +13 -4
- package/dist/cli/commands/prepare-package.js.map +1 -1
- package/dist/cli/commands/registry/build.d.ts +1 -1
- package/dist/cli/commands/registry/build.d.ts.map +1 -1
- package/dist/cli/commands/registry/build.js +3 -5
- package/dist/cli/commands/registry/build.js.map +1 -1
- package/dist/cli/commands/registry/bundle-package.d.ts +41 -0
- package/dist/cli/commands/registry/bundle-package.d.ts.map +1 -0
- package/dist/cli/commands/registry/bundle-package.js +54 -0
- package/dist/cli/commands/registry/bundle-package.js.map +1 -0
- package/dist/cli/commands/registry/command-registry.d.ts +42 -2
- package/dist/cli/commands/registry/command-registry.d.ts.map +1 -1
- package/dist/cli/commands/registry/command-registry.js +10 -19
- package/dist/cli/commands/registry/command-registry.js.map +1 -1
- package/dist/cli/commands/registry/start.d.ts +1 -1
- package/dist/cli/commands/registry/start.d.ts.map +1 -1
- package/dist/cli/commands/registry/start.js +3 -5
- package/dist/cli/commands/registry/start.js.map +1 -1
- package/dist/cli/commands/review/review.js +14 -7
- package/dist/cli/commands/review/review.js.map +1 -1
- package/dist/cli/commands/review/rules/no-deprecated-content-base.js +1 -3
- package/dist/cli/commands/review/rules/no-deprecated-content-base.js.map +1 -1
- package/dist/cli/commands/review/rules/no-direct-peer-dependencies.js +1 -3
- package/dist/cli/commands/review/rules/no-direct-peer-dependencies.js.map +1 -1
- package/dist/cli/commands/review/rules/no-typescript-entry-point.js +1 -3
- package/dist/cli/commands/review/rules/no-typescript-entry-point.js.map +1 -1
- package/dist/cli/commands/review/rules/prefer-open-ended-peer-dependencies.js +5 -12
- package/dist/cli/commands/review/rules/prefer-open-ended-peer-dependencies.js.map +1 -1
- package/dist/cli/commands/review/rules/require-compatible-launch-darkly-sdk.js +5 -12
- package/dist/cli/commands/review/rules/require-compatible-launch-darkly-sdk.js.map +1 -1
- package/dist/cli/commands/review/rules/require-explicit-side-effects.js +1 -3
- package/dist/cli/commands/review/rules/require-explicit-side-effects.js.map +1 -1
- package/dist/cli/commands/review/rules/require-one-collection-version.js +1 -3
- package/dist/cli/commands/review/rules/require-one-collection-version.js.map +1 -1
- package/dist/cli/commands/review/rules/require-servicetitan-scope.js +1 -3
- package/dist/cli/commands/review/rules/require-servicetitan-scope.js.map +1 -1
- package/dist/cli/commands/review/rules/require-tsconfig-references.js +1 -3
- package/dist/cli/commands/review/rules/require-tsconfig-references.js.map +1 -1
- package/dist/cli/commands/review/types.d.ts.map +1 -1
- package/dist/cli/commands/review/types.js.map +1 -1
- package/dist/cli/commands/review/utils/compare-version.js +8 -19
- package/dist/cli/commands/review/utils/compare-version.js.map +1 -1
- package/dist/cli/commands/run-task.d.ts +1 -0
- package/dist/cli/commands/run-task.d.ts.map +1 -1
- package/dist/cli/commands/run-task.js +20 -6
- package/dist/cli/commands/run-task.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +28 -13
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/stylelint.js +13 -4
- package/dist/cli/commands/stylelint.js.map +1 -1
- package/dist/cli/commands/styles-check.js +13 -4
- package/dist/cli/commands/styles-check.js.map +1 -1
- package/dist/cli/commands/test/runners/jest.js +1 -3
- package/dist/cli/commands/test/runners/jest.js.map +1 -1
- package/dist/cli/commands/test/tests.js +13 -4
- package/dist/cli/commands/test/tests.js.map +1 -1
- package/dist/cli/commands/types.d.ts +1 -6
- package/dist/cli/commands/types.d.ts.map +1 -1
- package/dist/cli/commands/types.js +2 -20
- package/dist/cli/commands/types.js.map +1 -1
- package/dist/cli/commands/upload-sourcemaps.js +17 -13
- package/dist/cli/commands/upload-sourcemaps.js.map +1 -1
- package/dist/cli/index.js +1 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/tasks/cli-task.d.ts +3 -0
- package/dist/cli/tasks/cli-task.d.ts.map +1 -1
- package/dist/cli/tasks/cli-task.js +41 -9
- package/dist/cli/tasks/cli-task.js.map +1 -1
- package/dist/cli/tasks/swc-compile-package/get-swc-options.d.ts +9 -1
- package/dist/cli/tasks/swc-compile-package/get-swc-options.d.ts.map +1 -1
- package/dist/cli/tasks/swc-compile-package/get-swc-options.js +18 -2
- package/dist/cli/tasks/swc-compile-package/get-swc-options.js.map +1 -1
- package/dist/cli/tasks/swc-compile-package/swc-compile-package.d.ts +3 -1
- package/dist/cli/tasks/swc-compile-package/swc-compile-package.d.ts.map +1 -1
- package/dist/cli/tasks/swc-compile-package/swc-compile-package.js +17 -3
- package/dist/cli/tasks/swc-compile-package/swc-compile-package.js.map +1 -1
- package/dist/cli/tasks/task.d.ts +2 -1
- package/dist/cli/tasks/task.d.ts.map +1 -1
- package/dist/cli/tasks/task.js +6 -3
- package/dist/cli/tasks/task.js.map +1 -1
- package/dist/cli/tasks/tsc-compile/tsc-compile.js +1 -3
- package/dist/cli/tasks/tsc-compile/tsc-compile.js.map +1 -1
- package/dist/cli/utils/cli-npm.d.ts.map +1 -1
- package/dist/cli/utils/cli-npm.js +8 -1
- package/dist/cli/utils/cli-npm.js.map +1 -1
- package/dist/cli/utils/cli-os.d.ts +1 -0
- package/dist/cli/utils/cli-os.d.ts.map +1 -1
- package/dist/cli/utils/cli-os.js +20 -0
- package/dist/cli/utils/cli-os.js.map +1 -1
- package/dist/cli/utils/compile.d.ts.map +1 -1
- package/dist/cli/utils/compile.js +7 -4
- package/dist/cli/utils/compile.js.map +1 -1
- package/dist/cli/utils/copy-files.js +1 -0
- package/dist/cli/utils/copy-files.js.map +1 -1
- package/dist/cli/utils/index.d.ts +1 -1
- package/dist/cli/utils/index.d.ts.map +1 -1
- package/dist/cli/utils/index.js +1 -1
- package/dist/cli/utils/index.js.map +1 -1
- package/dist/cli/utils/process-tree.js +2 -6
- package/dist/cli/utils/process-tree.js.map +1 -1
- package/dist/cli/utils/resolve-bundler.d.ts.map +1 -1
- package/dist/cli/utils/resolve-bundler.js +2 -1
- package/dist/cli/utils/resolve-bundler.js.map +1 -1
- package/dist/cli/utils/ts-config.d.ts +1 -1
- package/dist/cli/utils/ts-config.d.ts.map +1 -1
- package/dist/cli/utils/ts-config.js +1 -3
- package/dist/cli/utils/ts-config.js.map +1 -1
- package/dist/cli/utils/with-exponential-backoff.d.ts +7 -0
- package/dist/cli/utils/with-exponential-backoff.d.ts.map +1 -0
- package/dist/cli/utils/with-exponential-backoff.js +28 -0
- package/dist/cli/utils/with-exponential-backoff.js.map +1 -0
- package/dist/core/constants.d.ts +2 -0
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +6 -1
- package/dist/core/constants.js.map +1 -1
- package/dist/cypress/config/vite-config.d.ts.map +1 -1
- package/dist/cypress/config/vite-config.js +23 -3
- package/dist/cypress/config/vite-config.js.map +1 -1
- package/dist/cypress/config/webpack-config.d.ts.map +1 -1
- package/dist/cypress/config/webpack-config.js +5 -0
- package/dist/cypress/config/webpack-config.js.map +1 -1
- package/dist/postinstall.js +118 -0
- package/dist/scripts/generate-bin-wrappers.js +203 -0
- package/dist/storybook-config/swc.d.ts +6 -0
- package/dist/storybook-config/swc.d.ts.map +1 -1
- package/dist/storybook-config/vite-final.d.ts.map +1 -1
- package/dist/storybook-config/vite-final.js +32 -6
- package/dist/storybook-config/vite-final.js.map +1 -1
- package/dist/storybook-config/webpack-final.d.ts.map +1 -1
- package/dist/storybook-config/webpack-final.js +3 -1
- package/dist/storybook-config/webpack-final.js.map +1 -1
- package/dist/utils/exit-when-parent-exits.d.ts +6 -0
- package/dist/utils/exit-when-parent-exits.d.ts.map +1 -0
- package/dist/utils/exit-when-parent-exits.js +37 -0
- package/dist/utils/exit-when-parent-exits.js.map +1 -0
- package/dist/utils/find-up.d.ts +1 -1
- package/dist/utils/find-up.d.ts.map +1 -1
- package/dist/utils/find-up.js +2 -2
- package/dist/utils/find-up.js.map +1 -1
- package/dist/utils/get-configuration.d.ts +6 -3
- package/dist/utils/get-configuration.d.ts.map +1 -1
- package/dist/utils/get-configuration.js +10 -2
- package/dist/utils/get-configuration.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/log.js +1 -3
- package/dist/utils/log.js.map +1 -1
- package/dist/vite/build-shared-dependencies.d.ts.map +1 -1
- package/dist/vite/build-shared-dependencies.js +2 -0
- package/dist/vite/build-shared-dependencies.js.map +1 -1
- package/dist/vite/config/base-config.d.ts.map +1 -1
- package/dist/vite/config/base-config.js +14 -1
- package/dist/vite/config/base-config.js.map +1 -1
- package/dist/vite/config/create-filtering-logger.d.ts.map +1 -1
- package/dist/vite/config/create-filtering-logger.js +12 -1
- package/dist/vite/config/create-filtering-logger.js.map +1 -1
- package/dist/vite/config/create-vite-build-context.d.ts.map +1 -1
- package/dist/vite/config/create-vite-build-context.js +4 -1
- package/dist/vite/config/create-vite-build-context.js.map +1 -1
- package/dist/vite/config/create-vite-config.js +7 -2
- package/dist/vite/config/create-vite-config.js.map +1 -1
- package/dist/vite/config/load-config-file.js +8 -19
- package/dist/vite/config/load-config-file.js.map +1 -1
- package/dist/vite/index.d.ts +2 -0
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.html +2 -2
- package/dist/vite/index.js +16 -0
- package/dist/vite/index.js.map +1 -1
- package/dist/vite/plugins/chain-source-maps-plugin.js +1 -1
- package/dist/vite/plugins/chain-source-maps-plugin.js.map +1 -1
- package/dist/vite/plugins/clean-plugin.js +1 -1
- package/dist/vite/plugins/clean-plugin.js.map +1 -1
- package/dist/vite/plugins/css-injector-plugin.js +1 -1
- package/dist/vite/plugins/css-injector-plugin.js.map +1 -1
- package/dist/vite/plugins/design-system-guard-plugin.d.ts.map +1 -1
- package/dist/vite/plugins/design-system-guard-plugin.js +10 -5
- package/dist/vite/plugins/design-system-guard-plugin.js.map +1 -1
- package/dist/vite/plugins/dev-server-routing-plugin.d.ts +1 -1
- package/dist/vite/plugins/dev-server-routing-plugin.d.ts.map +1 -1
- package/dist/vite/plugins/dev-server-routing-plugin.js +4 -3
- package/dist/vite/plugins/dev-server-routing-plugin.js.map +1 -1
- package/dist/vite/plugins/externals-plugin.d.ts.map +1 -1
- package/dist/vite/plugins/externals-plugin.js +11 -5
- package/dist/vite/plugins/externals-plugin.js.map +1 -1
- package/dist/vite/plugins/html-plugin.d.ts.map +1 -1
- package/dist/vite/plugins/html-plugin.js +5 -3
- package/dist/vite/plugins/html-plugin.js.map +1 -1
- package/dist/vite/plugins/ignore-modules-plugin.d.ts +2 -2
- package/dist/vite/plugins/ignore-modules-plugin.d.ts.map +1 -1
- package/dist/vite/plugins/ignore-modules-plugin.js +36 -24
- package/dist/vite/plugins/ignore-modules-plugin.js.map +1 -1
- package/dist/vite/plugins/index.d.ts +3 -0
- package/dist/vite/plugins/index.d.ts.map +1 -1
- package/dist/vite/plugins/index.js +3 -0
- package/dist/vite/plugins/index.js.map +1 -1
- package/dist/vite/plugins/istanbul-plugin.d.ts.map +1 -1
- package/dist/vite/plugins/istanbul-plugin.js +33 -1
- package/dist/vite/plugins/istanbul-plugin.js.map +1 -1
- package/dist/vite/plugins/less-tilde-plugin.d.ts +8 -0
- package/dist/vite/plugins/less-tilde-plugin.d.ts.map +1 -0
- package/dist/vite/plugins/less-tilde-plugin.js +53 -0
- package/dist/vite/plugins/less-tilde-plugin.js.map +1 -0
- package/dist/vite/plugins/magic-comments-plugin/magic-comments-plugin.js +1 -1
- package/dist/vite/plugins/magic-comments-plugin/magic-comments-plugin.js.map +1 -1
- package/dist/vite/plugins/metadata-plugin.js +1 -1
- package/dist/vite/plugins/metadata-plugin.js.map +1 -1
- package/dist/vite/plugins/moment-locales-plugin.d.ts +1 -1
- package/dist/vite/plugins/moment-locales-plugin.d.ts.map +1 -1
- package/dist/vite/plugins/moment-locales-plugin.js +30 -14
- package/dist/vite/plugins/moment-locales-plugin.js.map +1 -1
- package/dist/vite/plugins/react-refresh-plugin/index.d.ts +2 -0
- package/dist/vite/plugins/react-refresh-plugin/index.d.ts.map +1 -0
- package/dist/vite/plugins/react-refresh-plugin/index.js +20 -0
- package/dist/vite/plugins/react-refresh-plugin/index.js.map +1 -0
- package/dist/vite/plugins/react-refresh-plugin/react-refresh-plugin.d.ts +4 -0
- package/dist/vite/plugins/react-refresh-plugin/react-refresh-plugin.d.ts.map +1 -0
- package/dist/vite/plugins/react-refresh-plugin/react-refresh-plugin.js +143 -0
- package/dist/vite/plugins/react-refresh-plugin/react-refresh-plugin.js.map +1 -0
- package/dist/vite/plugins/react-refresh-plugin/refresh-runtime.js +113 -0
- package/dist/vite/plugins/shared-dependencies-plugin/shared-dependencies-plugin.d.ts.map +1 -1
- package/dist/vite/plugins/shared-dependencies-plugin/shared-dependencies-plugin.js +14 -11
- package/dist/vite/plugins/shared-dependencies-plugin/shared-dependencies-plugin.js.map +1 -1
- package/dist/vite/plugins/style-urls-plugin.js +1 -1
- package/dist/vite/plugins/style-urls-plugin.js.map +1 -1
- package/dist/vite/plugins/virtual-modules-plugin.d.ts.map +1 -1
- package/dist/vite/plugins/virtual-modules-plugin.js +9 -6
- package/dist/vite/plugins/virtual-modules-plugin.js.map +1 -1
- package/dist/vite/plugins/window-externals-plugin.d.ts +22 -0
- package/dist/vite/plugins/window-externals-plugin.d.ts.map +1 -0
- package/dist/vite/plugins/window-externals-plugin.js +74 -0
- package/dist/vite/plugins/window-externals-plugin.js.map +1 -0
- package/dist/vite/types.d.ts +4 -1
- package/dist/vite/types.d.ts.map +1 -1
- package/dist/webpack/bundle-webpack.d.ts.map +1 -1
- package/dist/webpack/bundle-webpack.js +6 -1
- package/dist/webpack/bundle-webpack.js.map +1 -1
- package/dist/webpack/configs/optimization-config.js +4 -4
- package/dist/webpack/configs/optimization-config.js.map +1 -1
- package/dist/webpack/configs/output-config.js +1 -1
- package/dist/webpack/configs/output-config.js.map +1 -1
- package/dist/webpack/configs/plugins/ignore-plugin/ignore-plugin.js +1 -3
- package/dist/webpack/configs/plugins/ignore-plugin/ignore-plugin.js.map +1 -1
- package/dist/webpack/loaders/expose-loader/__tests__/__mocks__/configuration.expose-loader.js +13 -0
- package/dist/webpack/loaders/expose-loader/__tests__/__mocks__/index.js +1 -0
- package/dist/webpack/utils/index.d.ts +1 -0
- package/dist/webpack/utils/index.d.ts.map +1 -1
- package/dist/webpack/utils/index.js +1 -0
- package/dist/webpack/utils/index.js.map +1 -1
- package/dist/webpack/utils/normalize-proxy-config.d.ts +6 -0
- package/dist/webpack/utils/normalize-proxy-config.d.ts.map +1 -0
- package/dist/webpack/utils/normalize-proxy-config.js +52 -0
- package/dist/webpack/utils/normalize-proxy-config.js.map +1 -0
- package/package.json +25 -22
- package/src/cli/commands/__tests__/build.test.ts +33 -19
- package/src/cli/commands/__tests__/bundle-package.test.ts +65 -0
- package/src/cli/commands/__tests__/bundle-vite.test.ts +1 -0
- package/src/cli/commands/__tests__/command.test.ts +42 -0
- package/src/cli/commands/__tests__/mfe-check.test.ts +26 -5
- package/src/cli/commands/__tests__/run-task.test.ts +20 -1
- package/src/cli/commands/__tests__/start.test.ts +35 -15
- package/src/cli/commands/build.ts +6 -5
- package/src/cli/commands/bundle-package.ts +20 -0
- package/src/cli/commands/command.ts +14 -0
- package/src/cli/commands/mfe-check.ts +6 -10
- package/src/cli/commands/registry/build.ts +3 -2
- package/src/cli/commands/registry/bundle-package.ts +22 -0
- package/src/cli/commands/registry/command-registry.ts +2 -0
- package/src/cli/commands/registry/start.ts +3 -2
- package/src/cli/commands/review/types.ts +1 -3
- package/src/cli/commands/run-task.ts +8 -2
- package/src/cli/commands/start.ts +9 -5
- package/src/cli/commands/types.ts +2 -6
- package/src/cli/index.ts +3 -0
- package/src/cli/tasks/__tests__/cli-task.test.ts +181 -69
- package/src/cli/tasks/__tests__/task.test.ts +40 -45
- package/src/cli/tasks/cli-task.ts +43 -2
- package/src/cli/tasks/swc-compile-package/__tests__/get-swc-options.test.ts +46 -4
- package/src/cli/tasks/swc-compile-package/__tests__/swc-compile-package.test.ts +25 -4
- package/src/cli/tasks/swc-compile-package/get-swc-options.ts +14 -1
- package/src/cli/tasks/swc-compile-package/swc-compile-package.ts +6 -2
- package/src/cli/tasks/task.ts +8 -2
- package/src/cli/tasks/tsc-compile/__tests__/tsc-compile.test.ts +8 -32
- package/src/cli/tasks/tsc-compile-package/__tests__/tsc-compile-package.test.ts +10 -19
- package/src/cli/utils/__tests__/cli-npm.test.ts +33 -0
- package/src/cli/utils/__tests__/cli-os.test.ts +86 -3
- package/src/cli/utils/__tests__/compile.test.ts +37 -2
- package/src/cli/utils/__tests__/copy-files.test.ts +1 -1
- package/src/cli/utils/__tests__/with-exponential-backoff.test.ts +119 -0
- package/src/cli/utils/cli-npm.ts +19 -4
- package/src/cli/utils/cli-os.ts +14 -0
- package/src/cli/utils/compile.ts +8 -1
- package/src/cli/utils/copy-files.ts +1 -1
- package/src/cli/utils/index.ts +1 -1
- package/src/cli/utils/resolve-bundler.ts +2 -1
- package/src/cli/utils/ts-config.ts +1 -1
- package/src/cli/utils/with-exponential-backoff.ts +28 -0
- package/src/core/constants.ts +2 -0
- package/src/cypress/config/__tests__/vite-config.test.ts +21 -11
- package/src/cypress/config/__tests__/webpack-config.test.ts +17 -0
- package/src/cypress/config/vite-config.ts +18 -3
- package/src/cypress/config/webpack-config.ts +2 -0
- package/src/storybook-config/__tests__/vite-final.test.ts +71 -11
- package/src/storybook-config/__tests__/webpack-final.test.ts +30 -6
- package/src/storybook-config/vite-final.ts +23 -2
- package/src/storybook-config/webpack-final.ts +10 -2
- package/src/utils/__tests__/exit-when-parent-exits.test.ts +87 -0
- package/src/utils/__tests__/find-up.test.ts +49 -0
- package/src/utils/__tests__/get-configuration.test.ts +62 -0
- package/src/utils/exit-when-parent-exits.ts +33 -0
- package/src/utils/find-up.ts +2 -2
- package/src/utils/get-configuration.ts +14 -5
- package/src/utils/index.ts +1 -0
- package/src/vite/__tests__/build-shared-dependencies.test.ts +39 -5
- package/src/vite/build-shared-dependencies.ts +2 -1
- package/src/vite/config/__tests__/base-config.test.ts +16 -4
- package/src/vite/config/__tests__/create-css-config.test.ts +2 -6
- package/src/vite/config/__tests__/create-filtering-logger.test.ts +9 -0
- package/src/vite/config/__tests__/create-vite-build-context.test.ts +25 -0
- package/src/vite/config/__tests__/create-vite-config.test.ts +6 -3
- package/src/vite/config/base-config.ts +18 -2
- package/src/vite/config/create-filtering-logger.ts +13 -2
- package/src/vite/config/create-vite-build-context.ts +1 -0
- package/src/vite/config/create-vite-config.ts +6 -3
- package/src/vite/index.html +2 -2
- package/src/vite/index.ts +2 -0
- package/src/vite/plugins/__tests__/chain-source-maps-plugin.test.ts +1 -1
- package/src/vite/plugins/__tests__/clean-plugin.test.ts +1 -1
- package/src/vite/plugins/__tests__/css-injector-plugin.test.ts +1 -1
- package/src/vite/plugins/__tests__/design-system-guard-plugin.test.ts +15 -3
- package/src/vite/plugins/__tests__/dev-server-routing-plugin.test.ts +121 -99
- package/src/vite/plugins/__tests__/externals-plugin.test.ts +24 -3
- package/src/vite/plugins/__tests__/html-plugin.test.ts +10 -3
- package/src/vite/plugins/__tests__/html-template.test.ts +10 -2
- package/src/vite/plugins/__tests__/ignore-modules-plugin.test.ts +30 -6
- package/src/vite/plugins/__tests__/istanbul-plugin.test.ts +42 -1
- package/src/vite/plugins/__tests__/less-tilde-plugin.test.ts +91 -0
- package/src/vite/plugins/__tests__/metadata-plugin.test.ts +1 -1
- package/src/vite/plugins/__tests__/moment-locales-plugin.test.ts +35 -25
- package/src/vite/plugins/__tests__/style-urls-plugin.test.ts +1 -1
- package/src/vite/plugins/__tests__/virtual-modules-plugin.test.ts +20 -9
- package/src/vite/plugins/__tests__/window-externals-plugin.test.ts +128 -0
- package/src/vite/plugins/chain-source-maps-plugin.ts +1 -1
- package/src/vite/plugins/clean-plugin.ts +1 -1
- package/src/vite/plugins/css-injector-plugin.ts +1 -1
- package/src/vite/plugins/design-system-guard-plugin.ts +11 -8
- package/src/vite/plugins/dev-server-routing-plugin.ts +4 -4
- package/src/vite/plugins/externals-plugin.ts +15 -6
- package/src/vite/plugins/html-plugin.ts +4 -2
- package/src/vite/plugins/ignore-modules-plugin.ts +32 -23
- package/src/vite/plugins/index.ts +3 -0
- package/src/vite/plugins/istanbul-plugin.ts +28 -1
- package/src/vite/plugins/less-tilde-plugin.ts +64 -0
- package/src/vite/plugins/magic-comments-plugin/magic-comments-plugin.ts +1 -1
- package/src/vite/plugins/metadata-plugin.ts +1 -1
- package/src/vite/plugins/moment-locales-plugin.ts +24 -14
- package/src/vite/plugins/react-refresh-plugin/README.md +165 -0
- package/src/vite/plugins/react-refresh-plugin/__tests__/react-refresh-plugin.test.ts +366 -0
- package/src/vite/plugins/react-refresh-plugin/__tests__/refresh-runtime.test.ts +193 -0
- package/src/vite/plugins/react-refresh-plugin/index.ts +1 -0
- package/src/vite/plugins/react-refresh-plugin/react-refresh-plugin.ts +144 -0
- package/src/vite/plugins/react-refresh-plugin/refresh-runtime.js +113 -0
- package/src/vite/plugins/shared-dependencies-plugin/__tests__/shared-dependencies-plugin.test.ts +21 -16
- package/src/vite/plugins/shared-dependencies-plugin/shared-dependencies-plugin.ts +13 -12
- package/src/vite/plugins/style-urls-plugin.ts +1 -1
- package/src/vite/plugins/virtual-modules-plugin.ts +8 -7
- package/src/vite/plugins/window-externals-plugin.ts +94 -0
- package/src/vite/types.ts +4 -1
- package/src/webpack/__tests__/bundle-webpack.test.ts +32 -0
- package/src/webpack/__tests__/create-webpack-config-web-component.test.ts +17 -5
- package/src/webpack/__tests__/create-webpack-config.test.ts +10 -6
- package/src/webpack/bundle-webpack.ts +7 -1
- package/src/webpack/configs/optimization-config.ts +3 -3
- package/src/webpack/configs/output-config.ts +1 -1
- package/src/webpack/utils/__tests__/normalize-proxy-config.test.ts +121 -0
- package/src/webpack/utils/index.ts +1 -0
- package/src/webpack/utils/normalize-proxy-config.ts +59 -0
- package/tsconfig/types.d.ts +10 -0
- package/dist/cli/utils/get-bundle-command.d.ts +0 -3
- package/dist/cli/utils/get-bundle-command.d.ts.map +0 -1
- package/dist/cli/utils/get-bundle-command.js +0 -16
- package/dist/cli/utils/get-bundle-command.js.map +0 -1
- package/src/cli/utils/__tests__/get-bundle-command.test.ts +0 -23
- package/src/cli/utils/get-bundle-command.ts +0 -5
|
@@ -24,9 +24,7 @@ function _define_property(obj, key, value) {
|
|
|
24
24
|
configurable: true,
|
|
25
25
|
writable: true
|
|
26
26
|
});
|
|
27
|
-
} else
|
|
28
|
-
obj[key] = value;
|
|
29
|
-
}
|
|
27
|
+
} else obj[key] = value;
|
|
30
28
|
return obj;
|
|
31
29
|
}
|
|
32
30
|
function _interop_require_default(obj) {
|
|
@@ -36,12 +34,21 @@ function _interop_require_default(obj) {
|
|
|
36
34
|
}
|
|
37
35
|
function _ts_decorate(decorators, target, key, desc) {
|
|
38
36
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
39
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
40
|
-
|
|
37
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
38
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
39
|
+
} else {
|
|
40
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
41
|
+
if (d = decorators[i]) {
|
|
42
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
41
46
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
42
47
|
}
|
|
43
|
-
function _ts_metadata(
|
|
44
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
48
|
+
function _ts_metadata(metadataKey, metadataValue) {
|
|
49
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
|
|
50
|
+
return Reflect.metadata(metadataKey, metadataValue);
|
|
51
|
+
}
|
|
45
52
|
}
|
|
46
53
|
const collator = new Intl.Collator();
|
|
47
54
|
class Review extends _types.Command {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/cli/commands/review/review.ts"],"sourcesContent":["import { getPackageManager } from '@servicetitan/install';\nimport chalk from 'chalk';\nimport terminalLink from 'terminal-link';\nimport {\n findPackages,\n getReviewConfiguration,\n log,\n logErrors,\n readJsonSafe,\n toArray,\n} from '../../../utils';\nimport type { entry } from '../registry/review';\nimport { Command } from '../types';\nimport { rules } from './rules';\nimport {\n ErrorSeverity,\n FixCategory,\n Level,\n Package,\n PackageError,\n PackageRule,\n Project,\n RuleConfiguration,\n} from './types';\nimport {\n collateDependencies,\n ErrorSummary,\n formatLocation,\n indent,\n pluralize,\n summarize,\n} from './utils';\n\nconst collator = new Intl.Collator();\n\nexport class Review extends Command<typeof entry> {\n private readonly severityToLabel: Record<ErrorSeverity, string> = {\n [ErrorSeverity.warning]: chalk.yellow('warning'),\n [ErrorSeverity.error]: chalk.red('error'),\n };\n\n private readonly levelToSeverity: Partial<Record<Level, ErrorSeverity>> = {\n warn: ErrorSeverity.warning,\n error: ErrorSeverity.error,\n };\n\n @logErrors\n async execute() {\n const errors = this.args.fix ? this.fixErrors() : this.findErrors();\n const summary = this.reportErrors(errors);\n return summary.error > 0 ? Promise.reject() : Promise.resolve();\n }\n\n private createProject(): Project {\n const root = readJsonSafe('package.json');\n if (!root?.workspaces) {\n throw new Error('this command must be run from the workspace root directory');\n }\n\n const packageManager = getPackageManager();\n if (!packageManager.hasValidLockFile()) {\n throw new Error(`missing or invalid lock file: ${packageManager.lockFileName}`);\n }\n\n root.location = '.'; // identifies the root package.json for rules that care\n\n const config = getReviewConfiguration();\n const packages: Package[] = [root, ...findPackages()];\n const dependencies = sortByKey(collateDependencies(packages));\n this.debug('review:packages', packages);\n this.debug('review:dependencies', dependencies);\n\n return {\n config,\n dependencies,\n packageManager,\n packages,\n };\n }\n\n private debug(namespace: string, data: any) {\n /* istanbul ignore next: debug only */\n log.debug(namespace, () => data && JSON.stringify(data, null, 2));\n }\n\n private findErrors(project?: Project) {\n const errors = this.runRules(project ?? this.createProject());\n this.debug('review:errors', errors);\n return errors;\n }\n\n private fixErrors() {\n const rulesById = rules.reduce<Record<string, PackageRule>>((result, rule) => {\n result[rule.id] = rule;\n return result;\n }, {});\n\n let project = this.createProject();\n let errors = this.findErrors(project);\n let totalFixed = 0;\n\n for (const category of [FixCategory.isolated, FixCategory.normal, FixCategory.lockFile]) {\n const fixable = errors.filter(({ fixable }) => fixable === category);\n if (fixable.length === 0) {\n continue;\n }\n\n fixable.forEach(error => {\n const rule = rulesById[error.id];\n if (rule.fix) {\n log.text(`Fixing ${this.formatError({ ...error, details: '', location: '' })}`);\n rule.fix(error, project);\n totalFixed += 1;\n }\n });\n\n project.packageManager.installPackages({ fix: true }, { stdio: 'inherit' });\n project = this.createProject();\n errors = this.findErrors(project);\n }\n\n if (totalFixed > 0) {\n let summary = `Fixed ${pluralize(totalFixed, 'problem')}`;\n if (errors.length) {\n summary = `${summary}, ${pluralize(errors.length, 'problem remains', 'problems remain')}:\\n`;\n }\n log.info(summary);\n }\n\n return errors;\n }\n\n private formatError(error: PackageError) {\n const { location, message, severity = ErrorSeverity.error } = error;\n\n const label = indent(this.severityToLabel[severity], location ? 1 : 0);\n const details = error.details ? `\\n${indent(error.details, location ? 2 : 1)}` : '';\n const link = this.getLink(error);\n\n return `${label} ${message} ${link}${details}`;\n }\n\n private reportErrors(errors: PackageError[]) {\n let prevLocation: string | undefined;\n\n errors.forEach((error, index) => {\n const { location } = error;\n if (index > 0 && (!location || location !== prevLocation)) {\n log.text('');\n }\n if (location && location !== prevLocation) {\n log.text(chalk.underline(formatLocation(location)));\n prevLocation = location;\n }\n log.text(this.formatError(error));\n });\n\n const summary = summarize(errors);\n this.reportSummary(summary);\n return summary;\n }\n\n private reportSummary({ error, warning, fixable }: ErrorSummary) {\n if (error + warning === 0) {\n return log.success('0 problems');\n }\n\n log.text('');\n\n const severity = error ? 'error' : 'warning';\n log[severity](\n `${pluralize(error + warning, 'problem')} (${pluralize(error, 'error')}, ${pluralize(warning, 'warning')})`\n );\n\n if (fixable.error + fixable.warning > 0) {\n log[severity](\n `${pluralize(fixable.error, 'error')} and ${pluralize(fixable.warning, 'warning')} potentially fixable with --fix option`\n );\n }\n }\n\n private runRules(project: Project): PackageError[] {\n const selected = this.getSelectedRules();\n return rules\n .filter(({ id }) => !selected || selected.has(id))\n .flatMap(rule => this.runRule(rule, project))\n .filter(error => !!error)\n .sort(compareError);\n }\n\n private runRule(rule: PackageRule, project: Project) {\n const level = this.getLevel(project.config.rules?.[rule.id]);\n if (level === 'off') {\n return;\n }\n\n return this.transform(rule.run(project), level);\n }\n\n private transform(errors?: PackageError | PackageError[], level?: 'error' | 'warn') {\n const severity = level && this.levelToSeverity[level];\n return errors && severity ? toArray(errors).map(error => ({ ...error, severity })) : errors;\n }\n\n private getLevel(config?: RuleConfiguration) {\n if (typeof config === 'string') {\n return config;\n }\n if (Array.isArray(config) && typeof config[0] === 'string') {\n return config[0];\n }\n }\n\n private getLink({ id }: PackageError) {\n const url = `https://docs.st.dev/docs/frontend/uikit/startup/review#${id}`;\n return chalk.dim(terminalLink(id, url));\n }\n\n private getSelectedRules() {\n const rule = this.args.rule;\n return rule ? new Set(rule.filter(id => !!id)) : undefined;\n }\n}\n\nfunction compareError(\n { location: locationA = '', severity: severityA = ErrorSeverity.error }: PackageError,\n { location: locationB = '', severity: severityB = ErrorSeverity.error }: PackageError\n) {\n return locationA === locationB ? severityA - severityB : collator.compare(locationA, locationB);\n}\n\nfunction sortByKey<T>(obj: Record<string, T>): Record<string, T> {\n return Object.fromEntries(Object.entries(obj).sort(([a], [b]) => collator.compare(a, b)));\n}\n"],"names":["Review","collator","Intl","Collator","Command","execute","errors","args","fix","fixErrors","findErrors","summary","reportErrors","error","Promise","reject","resolve","createProject","root","readJsonSafe","workspaces","Error","packageManager","getPackageManager","hasValidLockFile","lockFileName","location","config","getReviewConfiguration","packages","findPackages","dependencies","sortByKey","collateDependencies","debug","namespace","data","log","JSON","stringify","project","runRules","rulesById","rules","reduce","result","rule","id","totalFixed","category","FixCategory","isolated","normal","lockFile","fixable","filter","length","forEach","text","formatError","details","installPackages","stdio","pluralize","info","message","severity","ErrorSeverity","label","indent","severityToLabel","link","getLink","prevLocation","index","chalk","underline","formatLocation","summarize","reportSummary","warning","success","selected","getSelectedRules","has","flatMap","runRule","sort","compareError","level","getLevel","transform","run","levelToSeverity","toArray","map","Array","isArray","url","dim","terminalLink","Set","undefined","yellow","red","warn","locationA","severityA","locationB","severityB","compare","obj","Object","fromEntries","entries","a","b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/cli/commands/review/review.ts"],"sourcesContent":["import { getPackageManager } from '@servicetitan/install';\nimport chalk from 'chalk';\nimport terminalLink from 'terminal-link';\nimport {\n findPackages,\n getReviewConfiguration,\n log,\n logErrors,\n readJsonSafe,\n toArray,\n} from '../../../utils';\nimport type { entry } from '../registry/review';\nimport { Command } from '../types';\nimport { rules } from './rules';\nimport {\n ErrorSeverity,\n FixCategory,\n Level,\n Package,\n PackageError,\n PackageRule,\n Project,\n RuleConfiguration,\n} from './types';\nimport {\n collateDependencies,\n ErrorSummary,\n formatLocation,\n indent,\n pluralize,\n summarize,\n} from './utils';\n\nconst collator = new Intl.Collator();\n\nexport class Review extends Command<typeof entry> {\n private readonly severityToLabel: Record<ErrorSeverity, string> = {\n [ErrorSeverity.warning]: chalk.yellow('warning'),\n [ErrorSeverity.error]: chalk.red('error'),\n };\n\n private readonly levelToSeverity: Partial<Record<Level, ErrorSeverity>> = {\n warn: ErrorSeverity.warning,\n error: ErrorSeverity.error,\n };\n\n @logErrors\n async execute() {\n const errors = this.args.fix ? this.fixErrors() : this.findErrors();\n const summary = this.reportErrors(errors);\n return summary.error > 0 ? Promise.reject() : Promise.resolve();\n }\n\n private createProject(): Project {\n const root = readJsonSafe('package.json');\n if (!root?.workspaces) {\n throw new Error('this command must be run from the workspace root directory');\n }\n\n const packageManager = getPackageManager();\n if (!packageManager.hasValidLockFile()) {\n throw new Error(`missing or invalid lock file: ${packageManager.lockFileName}`);\n }\n\n root.location = '.'; // identifies the root package.json for rules that care\n\n const config = getReviewConfiguration();\n const packages: Package[] = [root, ...findPackages()];\n const dependencies = sortByKey(collateDependencies(packages));\n this.debug('review:packages', packages);\n this.debug('review:dependencies', dependencies);\n\n return {\n config,\n dependencies,\n packageManager,\n packages,\n };\n }\n\n private debug(namespace: string, data: any) {\n /* istanbul ignore next: debug only */\n log.debug(namespace, () => data && JSON.stringify(data, null, 2));\n }\n\n private findErrors(project?: Project) {\n const errors = this.runRules(project ?? this.createProject());\n this.debug('review:errors', errors);\n return errors;\n }\n\n private fixErrors() {\n const rulesById = rules.reduce<Record<string, PackageRule>>((result, rule) => {\n result[rule.id] = rule;\n return result;\n }, {});\n\n let project = this.createProject();\n let errors = this.findErrors(project);\n let totalFixed = 0;\n\n for (const category of [FixCategory.isolated, FixCategory.normal, FixCategory.lockFile]) {\n const fixable = errors.filter(({ fixable }) => fixable === category);\n if (fixable.length === 0) {\n continue;\n }\n\n fixable.forEach(error => {\n const rule = rulesById[error.id];\n if (rule.fix) {\n log.text(`Fixing ${this.formatError({ ...error, details: '', location: '' })}`);\n rule.fix(error, project);\n totalFixed += 1;\n }\n });\n\n project.packageManager.installPackages({ fix: true }, { stdio: 'inherit' });\n project = this.createProject();\n errors = this.findErrors(project);\n }\n\n if (totalFixed > 0) {\n let summary = `Fixed ${pluralize(totalFixed, 'problem')}`;\n if (errors.length) {\n summary = `${summary}, ${pluralize(errors.length, 'problem remains', 'problems remain')}:\\n`;\n }\n log.info(summary);\n }\n\n return errors;\n }\n\n private formatError(error: PackageError) {\n const { location, message, severity = ErrorSeverity.error } = error;\n\n const label = indent(this.severityToLabel[severity], location ? 1 : 0);\n const details = error.details ? `\\n${indent(error.details, location ? 2 : 1)}` : '';\n const link = this.getLink(error);\n\n return `${label} ${message} ${link}${details}`;\n }\n\n private reportErrors(errors: PackageError[]) {\n let prevLocation: string | undefined;\n\n errors.forEach((error, index) => {\n const { location } = error;\n if (index > 0 && (!location || location !== prevLocation)) {\n log.text('');\n }\n if (location && location !== prevLocation) {\n log.text(chalk.underline(formatLocation(location)));\n prevLocation = location;\n }\n log.text(this.formatError(error));\n });\n\n const summary = summarize(errors);\n this.reportSummary(summary);\n return summary;\n }\n\n private reportSummary({ error, warning, fixable }: ErrorSummary) {\n if (error + warning === 0) {\n return log.success('0 problems');\n }\n\n log.text('');\n\n const severity = error ? 'error' : 'warning';\n log[severity](\n `${pluralize(error + warning, 'problem')} (${pluralize(error, 'error')}, ${pluralize(warning, 'warning')})`\n );\n\n if (fixable.error + fixable.warning > 0) {\n log[severity](\n `${pluralize(fixable.error, 'error')} and ${pluralize(fixable.warning, 'warning')} potentially fixable with --fix option`\n );\n }\n }\n\n private runRules(project: Project): PackageError[] {\n const selected = this.getSelectedRules();\n return rules\n .filter(({ id }) => !selected || selected.has(id))\n .flatMap(rule => this.runRule(rule, project))\n .filter(error => !!error)\n .sort(compareError);\n }\n\n private runRule(rule: PackageRule, project: Project) {\n const level = this.getLevel(project.config.rules?.[rule.id]);\n if (level === 'off') {\n return;\n }\n\n return this.transform(rule.run(project), level);\n }\n\n private transform(errors?: PackageError | PackageError[], level?: 'error' | 'warn') {\n const severity = level && this.levelToSeverity[level];\n return errors && severity ? toArray(errors).map(error => ({ ...error, severity })) : errors;\n }\n\n private getLevel(config?: RuleConfiguration) {\n if (typeof config === 'string') {\n return config;\n }\n if (Array.isArray(config) && typeof config[0] === 'string') {\n return config[0];\n }\n }\n\n private getLink({ id }: PackageError) {\n const url = `https://docs.st.dev/docs/frontend/uikit/startup/review#${id}`;\n return chalk.dim(terminalLink(id, url));\n }\n\n private getSelectedRules() {\n const rule = this.args.rule;\n return rule ? new Set(rule.filter(id => !!id)) : undefined;\n }\n}\n\nfunction compareError(\n { location: locationA = '', severity: severityA = ErrorSeverity.error }: PackageError,\n { location: locationB = '', severity: severityB = ErrorSeverity.error }: PackageError\n) {\n return locationA === locationB ? severityA - severityB : collator.compare(locationA, locationB);\n}\n\nfunction sortByKey<T>(obj: Record<string, T>): Record<string, T> {\n return Object.fromEntries(Object.entries(obj).sort(([a], [b]) => collator.compare(a, b)));\n}\n"],"names":["Review","collator","Intl","Collator","Command","execute","errors","args","fix","fixErrors","findErrors","summary","reportErrors","error","Promise","reject","resolve","createProject","root","readJsonSafe","workspaces","Error","packageManager","getPackageManager","hasValidLockFile","lockFileName","location","config","getReviewConfiguration","packages","findPackages","dependencies","sortByKey","collateDependencies","debug","namespace","data","log","JSON","stringify","project","runRules","rulesById","rules","reduce","result","rule","id","totalFixed","category","FixCategory","isolated","normal","lockFile","fixable","filter","length","forEach","text","formatError","details","installPackages","stdio","pluralize","info","message","severity","ErrorSeverity","label","indent","severityToLabel","link","getLink","prevLocation","index","chalk","underline","formatLocation","summarize","reportSummary","warning","success","selected","getSelectedRules","has","flatMap","runRule","sort","compareError","level","getLevel","transform","run","levelToSeverity","toArray","map","Array","isArray","url","dim","terminalLink","Set","undefined","yellow","red","warn","locationA","severityA","locationB","severityB","compare","obj","Object","fromEntries","entries","a","b"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/no-deprecated-content-base.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport { ErrorSeverity, FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages } from '../utils';\n\ninterface ErrorData {\n contentBase: string;\n}\n\ntype RuleError = PackageError<ErrorData>;\n\nexport class NoDeprecatedContentBase implements PackageRule {\n get id() {\n return 'no-deprecated-content-base';\n }\n\n run(project: Project): RuleError[] | undefined {\n return checkPackages(this, project, this.checkPackage);\n }\n\n fix({ data, location }: RuleError) {\n const { contentBase } = data ?? {};\n if (!location || contentBase === undefined) {\n return;\n }\n\n const setCommands = Array.isArray(contentBase)\n ? contentBase.map((directory, index) => {\n return `npm pkg set cli.webpack.static[${index}].directory=\"${directory}\" -w ${location}`;\n })\n : [`npm pkg set cli.webpack.static.directory=\"${contentBase}\" -w ${location}`];\n\n [...setCommands, `npm pkg delete cli.webpack.contentBase -w ${location}`].forEach(command =>\n execSync(command, { stdio: 'inherit' })\n );\n }\n\n private readonly checkPackage = (pkg: Package): RuleError | undefined => {\n const { webpack = {} } = pkg.cli ?? {};\n if (webpack && typeof webpack === 'object' && Object.hasOwn(webpack, 'contentBase')) {\n return {\n id: this.id,\n message: `package \"${pkg.name}\" uses deprecated cli.webpack.contentBase configuration`,\n location: pkg.location,\n fixable: FixCategory.isolated,\n severity: ErrorSeverity.warning,\n data: { contentBase: webpack.contentBase },\n };\n }\n };\n}\n"],"names":["NoDeprecatedContentBase","id","run","project","checkPackages","checkPackage","fix","data","location","contentBase","undefined","setCommands","Array","isArray","map","directory","index","forEach","command","execSync","stdio","pkg","webpack","cli","Object","hasOwn","message","name","fixable","FixCategory","isolated","severity","ErrorSeverity","warning"],"mappings":";;;;+BAUaA;;;eAAAA;;;+BAVY;uBAC+D;uBAC1D
|
|
1
|
+
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/no-deprecated-content-base.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport { ErrorSeverity, FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages } from '../utils';\n\ninterface ErrorData {\n contentBase: string;\n}\n\ntype RuleError = PackageError<ErrorData>;\n\nexport class NoDeprecatedContentBase implements PackageRule {\n get id() {\n return 'no-deprecated-content-base';\n }\n\n run(project: Project): RuleError[] | undefined {\n return checkPackages(this, project, this.checkPackage);\n }\n\n fix({ data, location }: RuleError) {\n const { contentBase } = data ?? {};\n if (!location || contentBase === undefined) {\n return;\n }\n\n const setCommands = Array.isArray(contentBase)\n ? contentBase.map((directory, index) => {\n return `npm pkg set cli.webpack.static[${index}].directory=\"${directory}\" -w ${location}`;\n })\n : [`npm pkg set cli.webpack.static.directory=\"${contentBase}\" -w ${location}`];\n\n [...setCommands, `npm pkg delete cli.webpack.contentBase -w ${location}`].forEach(command =>\n execSync(command, { stdio: 'inherit' })\n );\n }\n\n private readonly checkPackage = (pkg: Package): RuleError | undefined => {\n const { webpack = {} } = pkg.cli ?? {};\n if (webpack && typeof webpack === 'object' && Object.hasOwn(webpack, 'contentBase')) {\n return {\n id: this.id,\n message: `package \"${pkg.name}\" uses deprecated cli.webpack.contentBase configuration`,\n location: pkg.location,\n fixable: FixCategory.isolated,\n severity: ErrorSeverity.warning,\n data: { contentBase: webpack.contentBase },\n };\n }\n };\n}\n"],"names":["NoDeprecatedContentBase","id","run","project","checkPackages","checkPackage","fix","data","location","contentBase","undefined","setCommands","Array","isArray","map","directory","index","forEach","command","execSync","stdio","pkg","webpack","cli","Object","hasOwn","message","name","fixable","FixCategory","isolated","severity","ErrorSeverity","warning"],"mappings":";;;;+BAUaA;;;eAAAA;;;+BAVY;uBAC+D;uBAC1D;;;;;;;;;;;;AAQvB,MAAMA;IACT,IAAIC,KAAK;QACL,OAAO;IACX;IAEAC,IAAIC,OAAgB,EAA2B;QAC3C,OAAOC,IAAAA,oBAAa,EAAC,IAAI,EAAED,SAAS,IAAI,CAACE,YAAY;IACzD;IAEAC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAa,EAAE;QAC/B,MAAM,EAAEC,WAAW,EAAE,GAAGF,iBAAAA,kBAAAA,OAAQ,CAAC;QACjC,IAAI,CAACC,YAAYC,gBAAgBC,WAAW;YACxC;QACJ;QAEA,MAAMC,cAAcC,MAAMC,OAAO,CAACJ,eAC5BA,YAAYK,GAAG,CAAC,CAACC,WAAWC;YACxB,OAAO,CAAC,+BAA+B,EAAEA,MAAM,aAAa,EAAED,UAAU,KAAK,EAAEP,UAAU;QAC7F,KACA;YAAC,CAAC,0CAA0C,EAAEC,YAAY,KAAK,EAAED,UAAU;SAAC;QAElF;eAAIG;YAAa,CAAC,0CAA0C,EAAEH,UAAU;SAAC,CAACS,OAAO,CAACC,CAAAA,UAC9EC,IAAAA,uBAAQ,EAACD,SAAS;gBAAEE,OAAO;YAAU;IAE7C;;QAEA,uBAAiBf,gBAAe,CAACgB;gBACJA;YAAzB,MAAM,EAAEC,UAAU,CAAC,CAAC,EAAE,IAAGD,WAAAA,IAAIE,GAAG,cAAPF,sBAAAA,WAAW,CAAC;YACrC,IAAIC,WAAW,OAAOA,YAAY,YAAYE,OAAOC,MAAM,CAACH,SAAS,gBAAgB;gBACjF,OAAO;oBACHrB,IAAI,IAAI,CAACA,EAAE;oBACXyB,SAAS,CAAC,SAAS,EAAEL,IAAIM,IAAI,CAAC,uDAAuD,CAAC;oBACtFnB,UAAUa,IAAIb,QAAQ;oBACtBoB,SAASC,kBAAW,CAACC,QAAQ;oBAC7BC,UAAUC,oBAAa,CAACC,OAAO;oBAC/B1B,MAAM;wBAAEE,aAAaa,QAAQb,WAAW;oBAAC;gBAC7C;YACJ;QACJ;;AACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/no-direct-peer-dependencies.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport { FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages, formatList } from '../utils';\n\ninterface ErrorData {\n dependencies: Record<string, string>;\n directPeerDependencies: string[];\n}\n\ntype RuleError = PackageError<ErrorData>;\n\nexport class NoDirectPeerDependencies implements PackageRule {\n get id() {\n return 'no-direct-peer-dependencies';\n }\n\n run(project: Project): RuleError[] | undefined {\n return checkPackages(this, project, this.checkPackage);\n }\n\n fix({ data, location }: RuleError) {\n const { dependencies, directPeerDependencies } = data ?? {};\n if (!(location && dependencies && directPeerDependencies)) {\n return;\n }\n\n directPeerDependencies.forEach(name => {\n [\n `npm pkg set devDependencies[\"${name}\"]=\"${dependencies[name]}\" -w ${location}`,\n `npm pkg delete dependencies[\"${name}\"] -w ${location}`,\n ].forEach(command => execSync(command, { stdio: 'inherit' }));\n });\n }\n\n private readonly checkPackage = (pkg: Package): RuleError | undefined => {\n const { dependencies = {}, peerDependencies = {} } = pkg;\n const directPeerDependencies = Object.keys(peerDependencies).filter(\n peerDependency => !!dependencies[peerDependency]\n );\n if (directPeerDependencies.length) {\n return {\n id: this.id,\n message: this.formatMessage(pkg.name, directPeerDependencies),\n location: pkg.location,\n fixable: FixCategory.isolated,\n data: { dependencies, directPeerDependencies },\n };\n }\n };\n\n private formatMessage(name: string, dependencies: string[]) {\n if (dependencies.length === 1) {\n return `package \"${name}\" lists \"${dependencies[0]}\" as both a direct and a peer dependency`;\n }\n const list = formatList(dependencies.map(name => `\"${name}\"`));\n return `package \"${name}\" lists ${list} as both direct and peer dependencies`;\n }\n}\n"],"names":["NoDirectPeerDependencies","id","run","project","checkPackages","checkPackage","fix","data","location","dependencies","directPeerDependencies","forEach","name","command","execSync","stdio","formatMessage","length","list","formatList","map","pkg","peerDependencies","Object","keys","filter","peerDependency","message","fixable","FixCategory","isolated"],"mappings":";;;;+BAWaA;;;eAAAA;;;+BAXY;uBACgD;uBAC/B
|
|
1
|
+
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/no-direct-peer-dependencies.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport { FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages, formatList } from '../utils';\n\ninterface ErrorData {\n dependencies: Record<string, string>;\n directPeerDependencies: string[];\n}\n\ntype RuleError = PackageError<ErrorData>;\n\nexport class NoDirectPeerDependencies implements PackageRule {\n get id() {\n return 'no-direct-peer-dependencies';\n }\n\n run(project: Project): RuleError[] | undefined {\n return checkPackages(this, project, this.checkPackage);\n }\n\n fix({ data, location }: RuleError) {\n const { dependencies, directPeerDependencies } = data ?? {};\n if (!(location && dependencies && directPeerDependencies)) {\n return;\n }\n\n directPeerDependencies.forEach(name => {\n [\n `npm pkg set devDependencies[\"${name}\"]=\"${dependencies[name]}\" -w ${location}`,\n `npm pkg delete dependencies[\"${name}\"] -w ${location}`,\n ].forEach(command => execSync(command, { stdio: 'inherit' }));\n });\n }\n\n private readonly checkPackage = (pkg: Package): RuleError | undefined => {\n const { dependencies = {}, peerDependencies = {} } = pkg;\n const directPeerDependencies = Object.keys(peerDependencies).filter(\n peerDependency => !!dependencies[peerDependency]\n );\n if (directPeerDependencies.length) {\n return {\n id: this.id,\n message: this.formatMessage(pkg.name, directPeerDependencies),\n location: pkg.location,\n fixable: FixCategory.isolated,\n data: { dependencies, directPeerDependencies },\n };\n }\n };\n\n private formatMessage(name: string, dependencies: string[]) {\n if (dependencies.length === 1) {\n return `package \"${name}\" lists \"${dependencies[0]}\" as both a direct and a peer dependency`;\n }\n const list = formatList(dependencies.map(name => `\"${name}\"`));\n return `package \"${name}\" lists ${list} as both direct and peer dependencies`;\n }\n}\n"],"names":["NoDirectPeerDependencies","id","run","project","checkPackages","checkPackage","fix","data","location","dependencies","directPeerDependencies","forEach","name","command","execSync","stdio","formatMessage","length","list","formatList","map","pkg","peerDependencies","Object","keys","filter","peerDependency","message","fixable","FixCategory","isolated"],"mappings":";;;;+BAWaA;;;eAAAA;;;+BAXY;uBACgD;uBAC/B;;;;;;;;;;;;AASnC,MAAMA;IACT,IAAIC,KAAK;QACL,OAAO;IACX;IAEAC,IAAIC,OAAgB,EAA2B;QAC3C,OAAOC,IAAAA,oBAAa,EAAC,IAAI,EAAED,SAAS,IAAI,CAACE,YAAY;IACzD;IAEAC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAa,EAAE;QAC/B,MAAM,EAAEC,YAAY,EAAEC,sBAAsB,EAAE,GAAGH,iBAAAA,kBAAAA,OAAQ,CAAC;QAC1D,IAAI,CAAEC,CAAAA,YAAYC,gBAAgBC,sBAAqB,GAAI;YACvD;QACJ;QAEAA,uBAAuBC,OAAO,CAACC,CAAAA;YAC3B;gBACI,CAAC,6BAA6B,EAAEA,KAAK,IAAI,EAAEH,YAAY,CAACG,KAAK,CAAC,KAAK,EAAEJ,UAAU;gBAC/E,CAAC,6BAA6B,EAAEI,KAAK,MAAM,EAAEJ,UAAU;aAC1D,CAACG,OAAO,CAACE,CAAAA,UAAWC,IAAAA,uBAAQ,EAACD,SAAS;oBAAEE,OAAO;gBAAU;QAC9D;IACJ;IAkBQC,cAAcJ,IAAY,EAAEH,YAAsB,EAAE;QACxD,IAAIA,aAAaQ,MAAM,KAAK,GAAG;YAC3B,OAAO,CAAC,SAAS,EAAEL,KAAK,SAAS,EAAEH,YAAY,CAAC,EAAE,CAAC,wCAAwC,CAAC;QAChG;QACA,MAAMS,OAAOC,IAAAA,iBAAU,EAACV,aAAaW,GAAG,CAACR,CAAAA,OAAQ,CAAC,CAAC,EAAEA,KAAK,CAAC,CAAC;QAC5D,OAAO,CAAC,SAAS,EAAEA,KAAK,QAAQ,EAAEM,KAAK,qCAAqC,CAAC;IACjF;;QAtBA,uBAAiBb,gBAAe,CAACgB;YAC7B,MAAM,EAAEZ,eAAe,CAAC,CAAC,EAAEa,mBAAmB,CAAC,CAAC,EAAE,GAAGD;YACrD,MAAMX,yBAAyBa,OAAOC,IAAI,CAACF,kBAAkBG,MAAM,CAC/DC,CAAAA,iBAAkB,CAAC,CAACjB,YAAY,CAACiB,eAAe;YAEpD,IAAIhB,uBAAuBO,MAAM,EAAE;gBAC/B,OAAO;oBACHhB,IAAI,IAAI,CAACA,EAAE;oBACX0B,SAAS,IAAI,CAACX,aAAa,CAACK,IAAIT,IAAI,EAAEF;oBACtCF,UAAUa,IAAIb,QAAQ;oBACtBoB,SAASC,kBAAW,CAACC,QAAQ;oBAC7BvB,MAAM;wBAAEE;wBAAcC;oBAAuB;gBACjD;YACJ;QACJ;;AASJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/no-typescript-entry-point.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport path from 'path';\nimport { getFolders, log } from '../../../../utils';\nimport { FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages } from '../utils';\n\ninterface ErrorData {\n key: string;\n value: string;\n}\n\nexport class NoTypescriptEntryPoint implements PackageRule {\n get id() {\n return 'no-typescript-entry-point';\n }\n\n run(project: Project): PackageError<ErrorData>[] {\n return checkPackages(this, project, this.checkEntryPoints);\n }\n\n fix({ data, location }: PackageError<ErrorData>) {\n const { key, value } = data ?? {};\n if (!(key && value && location)) {\n return;\n }\n\n const workspace = path.relative('.', location);\n const { source, destination } = getFolders(location);\n const newValue = value.replace(source, destination).replace(/\\.ts$/, '.js');\n const command = `npm pkg set \"${key}\"=\"${newValue}\" -w ${workspace}`;\n log.debug(`review:${this.id}`, `Running ${command}`);\n execSync(command);\n }\n\n private readonly checkEntryPoints = (pkg: Package) => {\n const errors: PackageError<ErrorData>[] = [];\n const addError = (message: string, data: ErrorData) =>\n errors.push({\n id: this.id,\n message,\n location: pkg.location,\n fixable: FixCategory.normal,\n data,\n });\n\n (['main', 'module', 'exports'] as (keyof Package)[]).forEach(key => {\n const value = pkg[key];\n if (typeof value === 'string' && this.isTypescriptEntryPoint(value)) {\n addError(`\"${key}\" is Typescript: ${value}`, { key, value });\n }\n });\n\n if (pkg.exports && typeof pkg.exports !== 'string') {\n const checkExports = (exports: NonNullable<Package['exports']>, prefix: string) => {\n Object.entries(exports).forEach(([key, value]) => {\n const path = `${prefix}[${key}]`;\n if (typeof value === 'string') {\n if (this.isTypescriptEntryPoint(value)) {\n addError(`\"${path}\" is Typescript: ${value}`, { key: path, value });\n }\n } else if (exports) {\n checkExports(value, path);\n }\n });\n };\n checkExports(pkg.exports, 'exports');\n }\n\n return errors;\n };\n\n private isTypescriptEntryPoint(str: string) {\n return str.endsWith('.ts') && !str.endsWith('.d.ts');\n }\n}\n"],"names":["NoTypescriptEntryPoint","id","run","project","checkPackages","checkEntryPoints","fix","data","location","key","value","workspace","path","relative","source","destination","getFolders","newValue","replace","command","log","debug","execSync","isTypescriptEntryPoint","str","endsWith","pkg","errors","addError","message","push","fixable","FixCategory","normal","forEach","exports","checkExports","prefix","Object","entries"],"mappings":";;;;+BAWaA;;;eAAAA;;;+BAXY;6DACR;uBACe;uBACyC;wBAC3C
|
|
1
|
+
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/no-typescript-entry-point.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport path from 'path';\nimport { getFolders, log } from '../../../../utils';\nimport { FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages } from '../utils';\n\ninterface ErrorData {\n key: string;\n value: string;\n}\n\nexport class NoTypescriptEntryPoint implements PackageRule {\n get id() {\n return 'no-typescript-entry-point';\n }\n\n run(project: Project): PackageError<ErrorData>[] {\n return checkPackages(this, project, this.checkEntryPoints);\n }\n\n fix({ data, location }: PackageError<ErrorData>) {\n const { key, value } = data ?? {};\n if (!(key && value && location)) {\n return;\n }\n\n const workspace = path.relative('.', location);\n const { source, destination } = getFolders(location);\n const newValue = value.replace(source, destination).replace(/\\.ts$/, '.js');\n const command = `npm pkg set \"${key}\"=\"${newValue}\" -w ${workspace}`;\n log.debug(`review:${this.id}`, `Running ${command}`);\n execSync(command);\n }\n\n private readonly checkEntryPoints = (pkg: Package) => {\n const errors: PackageError<ErrorData>[] = [];\n const addError = (message: string, data: ErrorData) =>\n errors.push({\n id: this.id,\n message,\n location: pkg.location,\n fixable: FixCategory.normal,\n data,\n });\n\n (['main', 'module', 'exports'] as (keyof Package)[]).forEach(key => {\n const value = pkg[key];\n if (typeof value === 'string' && this.isTypescriptEntryPoint(value)) {\n addError(`\"${key}\" is Typescript: ${value}`, { key, value });\n }\n });\n\n if (pkg.exports && typeof pkg.exports !== 'string') {\n const checkExports = (exports: NonNullable<Package['exports']>, prefix: string) => {\n Object.entries(exports).forEach(([key, value]) => {\n const path = `${prefix}[${key}]`;\n if (typeof value === 'string') {\n if (this.isTypescriptEntryPoint(value)) {\n addError(`\"${path}\" is Typescript: ${value}`, { key: path, value });\n }\n } else if (exports) {\n checkExports(value, path);\n }\n });\n };\n checkExports(pkg.exports, 'exports');\n }\n\n return errors;\n };\n\n private isTypescriptEntryPoint(str: string) {\n return str.endsWith('.ts') && !str.endsWith('.d.ts');\n }\n}\n"],"names":["NoTypescriptEntryPoint","id","run","project","checkPackages","checkEntryPoints","fix","data","location","key","value","workspace","path","relative","source","destination","getFolders","newValue","replace","command","log","debug","execSync","isTypescriptEntryPoint","str","endsWith","pkg","errors","addError","message","push","fixable","FixCategory","normal","forEach","exports","checkExports","prefix","Object","entries"],"mappings":";;;;+BAWaA;;;eAAAA;;;+BAXY;6DACR;uBACe;uBACyC;wBAC3C;;;;;;;;;;;;;;;;;AAOvB,MAAMA;IACT,IAAIC,KAAK;QACL,OAAO;IACX;IAEAC,IAAIC,OAAgB,EAA6B;QAC7C,OAAOC,IAAAA,qBAAa,EAAC,IAAI,EAAED,SAAS,IAAI,CAACE,gBAAgB;IAC7D;IAEAC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAA2B,EAAE;QAC7C,MAAM,EAAEC,GAAG,EAAEC,KAAK,EAAE,GAAGH,iBAAAA,kBAAAA,OAAQ,CAAC;QAChC,IAAI,CAAEE,CAAAA,OAAOC,SAASF,QAAO,GAAI;YAC7B;QACJ;QAEA,MAAMG,YAAYC,aAAI,CAACC,QAAQ,CAAC,KAAKL;QACrC,MAAM,EAAEM,MAAM,EAAEC,WAAW,EAAE,GAAGC,IAAAA,iBAAU,EAACR;QAC3C,MAAMS,WAAWP,MAAMQ,OAAO,CAACJ,QAAQC,aAAaG,OAAO,CAAC,SAAS;QACrE,MAAMC,UAAU,CAAC,aAAa,EAAEV,IAAI,GAAG,EAAEQ,SAAS,KAAK,EAAEN,WAAW;QACpES,UAAG,CAACC,KAAK,CAAC,CAAC,OAAO,EAAE,IAAI,CAACpB,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAEkB,SAAS;QACnDG,IAAAA,uBAAQ,EAACH;IACb;IAuCQI,uBAAuBC,GAAW,EAAE;QACxC,OAAOA,IAAIC,QAAQ,CAAC,UAAU,CAACD,IAAIC,QAAQ,CAAC;IAChD;;QAvCA,uBAAiBpB,oBAAmB,CAACqB;YACjC,MAAMC,SAAoC,EAAE;YAC5C,MAAMC,WAAW,CAACC,SAAiBtB,OAC/BoB,OAAOG,IAAI,CAAC;oBACR7B,IAAI,IAAI,CAACA,EAAE;oBACX4B;oBACArB,UAAUkB,IAAIlB,QAAQ;oBACtBuB,SAASC,kBAAW,CAACC,MAAM;oBAC3B1B;gBACJ;YAEH;gBAAC;gBAAQ;gBAAU;aAAU,CAAuB2B,OAAO,CAACzB,CAAAA;gBACzD,MAAMC,QAAQgB,GAAG,CAACjB,IAAI;gBACtB,IAAI,OAAOC,UAAU,YAAY,IAAI,CAACa,sBAAsB,CAACb,QAAQ;oBACjEkB,SAAS,CAAC,CAAC,EAAEnB,IAAI,iBAAiB,EAAEC,OAAO,EAAE;wBAAED;wBAAKC;oBAAM;gBAC9D;YACJ;YAEA,IAAIgB,IAAIS,OAAO,IAAI,OAAOT,IAAIS,OAAO,KAAK,UAAU;gBAChD,MAAMC,eAAe,CAACD,UAA0CE;oBAC5DC,OAAOC,OAAO,CAACJ,UAASD,OAAO,CAAC,CAAC,CAACzB,KAAKC,MAAM;wBACzC,MAAME,OAAO,GAAGyB,OAAO,CAAC,EAAE5B,IAAI,CAAC,CAAC;wBAChC,IAAI,OAAOC,UAAU,UAAU;4BAC3B,IAAI,IAAI,CAACa,sBAAsB,CAACb,QAAQ;gCACpCkB,SAAS,CAAC,CAAC,EAAEhB,KAAK,iBAAiB,EAAEF,OAAO,EAAE;oCAAED,KAAKG;oCAAMF;gCAAM;4BACrE;wBACJ,OAAO,IAAIyB,UAAS;4BAChBC,aAAa1B,OAAOE;wBACxB;oBACJ;gBACJ;gBACAwB,aAAaV,IAAIS,OAAO,EAAE;YAC9B;YAEA,OAAOR;QACX;;AAKJ"}
|
|
@@ -18,15 +18,12 @@ function _check_private_redeclaration(obj, privateCollection) {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
function _class_apply_descriptor_get(receiver, descriptor) {
|
|
21
|
-
if (descriptor.get)
|
|
22
|
-
return descriptor.get.call(receiver);
|
|
23
|
-
}
|
|
21
|
+
if (descriptor.get) return descriptor.get.call(receiver);
|
|
24
22
|
return descriptor.value;
|
|
25
23
|
}
|
|
26
24
|
function _class_apply_descriptor_set(receiver, descriptor, value) {
|
|
27
|
-
if (descriptor.set)
|
|
28
|
-
|
|
29
|
-
} else {
|
|
25
|
+
if (descriptor.set) descriptor.set.call(receiver, value);
|
|
26
|
+
else {
|
|
30
27
|
if (!descriptor.writable) {
|
|
31
28
|
throw new TypeError("attempted to set read only private field");
|
|
32
29
|
}
|
|
@@ -34,9 +31,7 @@ function _class_apply_descriptor_set(receiver, descriptor, value) {
|
|
|
34
31
|
}
|
|
35
32
|
}
|
|
36
33
|
function _class_extract_field_descriptor(receiver, privateMap, action) {
|
|
37
|
-
if (!privateMap.has(receiver))
|
|
38
|
-
throw new TypeError("attempted to " + action + " private field on non-instance");
|
|
39
|
-
}
|
|
34
|
+
if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance");
|
|
40
35
|
return privateMap.get(receiver);
|
|
41
36
|
}
|
|
42
37
|
function _class_private_field_get(receiver, privateMap) {
|
|
@@ -60,9 +55,7 @@ function _define_property(obj, key, value) {
|
|
|
60
55
|
configurable: true,
|
|
61
56
|
writable: true
|
|
62
57
|
});
|
|
63
|
-
} else
|
|
64
|
-
obj[key] = value;
|
|
65
|
-
}
|
|
58
|
+
} else obj[key] = value;
|
|
66
59
|
return obj;
|
|
67
60
|
}
|
|
68
61
|
var _project = /*#__PURE__*/ new WeakMap();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/prefer-open-ended-peer-dependencies.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport { satisfies } from 'semver';\nimport { ErrorSeverity, FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages } from '../utils';\n\ninterface ErrorData {\n dependency: string;\n version: string;\n}\n\ntype RuleError = PackageError<ErrorData>;\n\nexport class PreferOpenEndedPeerDependencies implements PackageRule {\n #project!: Project;\n\n get id() {\n return 'prefer-open-ended-peer-dependencies';\n }\n\n run(project: Project): RuleError[] | undefined {\n this.#project = project;\n return checkPackages(this, project, this.checkPackage);\n }\n\n fix({ data, location }: RuleError) {\n const { dependency, version } = data ?? {};\n if (!(location && dependency && version)) {\n return;\n }\n\n const openEndedVersion = version.replace(/^[\\^~]/, '>=');\n const command = `npm pkg set peerDependencies[\"${dependency}\"]=\"${openEndedVersion}\" -w ${location}`;\n execSync(command, { stdio: 'inherit' });\n }\n\n private readonly checkPackage = (pkg: Package): RuleError[] | undefined => {\n return Object.entries(pkg.peerDependencies ?? {}).reduce<RuleError[]>(\n (result, [dependency, version]) => {\n if (this.isViolation(pkg, { dependency, version })) {\n result.push({\n id: this.id,\n message: `package \"${pkg.name}\" has closed-ended peer dependency on \"${dependency}@${version}\"`,\n location: pkg.location,\n severity: ErrorSeverity.warning,\n ...(this.isFixable(version)\n ? { fixable: FixCategory.isolated, data: { dependency, version } }\n : {}),\n });\n }\n return result;\n },\n []\n );\n };\n\n private isExactVersion(version: string) {\n return /^\\d/.test(version);\n }\n\n private isExcluded({ name }: Package, dependency: string) {\n const ruleConfig = this.#project.config.rules?.[this.id];\n if (Array.isArray(ruleConfig)) {\n const { exclude } = ruleConfig[1] ?? {};\n if (typeof exclude === 'object' && !Array.isArray(exclude)) {\n return exclude[name]?.includes(dependency);\n }\n }\n return false;\n }\n\n private isOpenEndedVersion(version: string) {\n return satisfies('999.999.999', version);\n }\n\n private isFixable(version: string) {\n return /^[\\^~]\\d+(\\.\\d+){0,2}$/.test(version);\n }\n\n private isViolation(\n pkg: Package,\n { dependency, version }: { dependency: string; version: string }\n ) {\n return (\n !this.isExactVersion(version) &&\n !this.isOpenEndedVersion(version) &&\n !this.isExcluded(pkg, dependency)\n );\n }\n}\n"],"names":["PreferOpenEndedPeerDependencies","id","run","project","checkPackages","checkPackage","fix","data","location","dependency","version","openEndedVersion","replace","command","execSync","stdio","isExactVersion","test","isExcluded","name","ruleConfig","config","rules","Array","isArray","exclude","includes","isOpenEndedVersion","satisfies","isFixable","isViolation","pkg","Object","entries","peerDependencies","reduce","result","push","message","severity","ErrorSeverity","warning","fixable","FixCategory","isolated"],"mappings":";;;;+BAYaA;;;eAAAA;;;+BAZY;wBACC;uBAC8D;uBAC1D
|
|
1
|
+
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/prefer-open-ended-peer-dependencies.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport { satisfies } from 'semver';\nimport { ErrorSeverity, FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages } from '../utils';\n\ninterface ErrorData {\n dependency: string;\n version: string;\n}\n\ntype RuleError = PackageError<ErrorData>;\n\nexport class PreferOpenEndedPeerDependencies implements PackageRule {\n #project!: Project;\n\n get id() {\n return 'prefer-open-ended-peer-dependencies';\n }\n\n run(project: Project): RuleError[] | undefined {\n this.#project = project;\n return checkPackages(this, project, this.checkPackage);\n }\n\n fix({ data, location }: RuleError) {\n const { dependency, version } = data ?? {};\n if (!(location && dependency && version)) {\n return;\n }\n\n const openEndedVersion = version.replace(/^[\\^~]/, '>=');\n const command = `npm pkg set peerDependencies[\"${dependency}\"]=\"${openEndedVersion}\" -w ${location}`;\n execSync(command, { stdio: 'inherit' });\n }\n\n private readonly checkPackage = (pkg: Package): RuleError[] | undefined => {\n return Object.entries(pkg.peerDependencies ?? {}).reduce<RuleError[]>(\n (result, [dependency, version]) => {\n if (this.isViolation(pkg, { dependency, version })) {\n result.push({\n id: this.id,\n message: `package \"${pkg.name}\" has closed-ended peer dependency on \"${dependency}@${version}\"`,\n location: pkg.location,\n severity: ErrorSeverity.warning,\n ...(this.isFixable(version)\n ? { fixable: FixCategory.isolated, data: { dependency, version } }\n : {}),\n });\n }\n return result;\n },\n []\n );\n };\n\n private isExactVersion(version: string) {\n return /^\\d/.test(version);\n }\n\n private isExcluded({ name }: Package, dependency: string) {\n const ruleConfig = this.#project.config.rules?.[this.id];\n if (Array.isArray(ruleConfig)) {\n const { exclude } = ruleConfig[1] ?? {};\n if (typeof exclude === 'object' && !Array.isArray(exclude)) {\n return exclude[name]?.includes(dependency);\n }\n }\n return false;\n }\n\n private isOpenEndedVersion(version: string) {\n return satisfies('999.999.999', version);\n }\n\n private isFixable(version: string) {\n return /^[\\^~]\\d+(\\.\\d+){0,2}$/.test(version);\n }\n\n private isViolation(\n pkg: Package,\n { dependency, version }: { dependency: string; version: string }\n ) {\n return (\n !this.isExactVersion(version) &&\n !this.isOpenEndedVersion(version) &&\n !this.isExcluded(pkg, dependency)\n );\n }\n}\n"],"names":["PreferOpenEndedPeerDependencies","id","run","project","checkPackages","checkPackage","fix","data","location","dependency","version","openEndedVersion","replace","command","execSync","stdio","isExactVersion","test","isExcluded","name","ruleConfig","config","rules","Array","isArray","exclude","includes","isOpenEndedVersion","satisfies","isFixable","isViolation","pkg","Object","entries","peerDependencies","reduce","result","push","message","severity","ErrorSeverity","warning","fixable","FixCategory","isolated"],"mappings":"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"}
|
|
@@ -19,15 +19,12 @@ function _check_private_redeclaration(obj, privateCollection) {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
function _class_apply_descriptor_get(receiver, descriptor) {
|
|
22
|
-
if (descriptor.get)
|
|
23
|
-
return descriptor.get.call(receiver);
|
|
24
|
-
}
|
|
22
|
+
if (descriptor.get) return descriptor.get.call(receiver);
|
|
25
23
|
return descriptor.value;
|
|
26
24
|
}
|
|
27
25
|
function _class_apply_descriptor_set(receiver, descriptor, value) {
|
|
28
|
-
if (descriptor.set)
|
|
29
|
-
|
|
30
|
-
} else {
|
|
26
|
+
if (descriptor.set) descriptor.set.call(receiver, value);
|
|
27
|
+
else {
|
|
31
28
|
if (!descriptor.writable) {
|
|
32
29
|
throw new TypeError("attempted to set read only private field");
|
|
33
30
|
}
|
|
@@ -35,9 +32,7 @@ function _class_apply_descriptor_set(receiver, descriptor, value) {
|
|
|
35
32
|
}
|
|
36
33
|
}
|
|
37
34
|
function _class_extract_field_descriptor(receiver, privateMap, action) {
|
|
38
|
-
if (!privateMap.has(receiver))
|
|
39
|
-
throw new TypeError("attempted to " + action + " private field on non-instance");
|
|
40
|
-
}
|
|
35
|
+
if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance");
|
|
41
36
|
return privateMap.get(receiver);
|
|
42
37
|
}
|
|
43
38
|
function _class_private_field_get(receiver, privateMap) {
|
|
@@ -61,9 +56,7 @@ function _define_property(obj, key, value) {
|
|
|
61
56
|
configurable: true,
|
|
62
57
|
writable: true
|
|
63
58
|
});
|
|
64
|
-
} else
|
|
65
|
-
obj[key] = value;
|
|
66
|
-
}
|
|
59
|
+
} else obj[key] = value;
|
|
67
60
|
return obj;
|
|
68
61
|
}
|
|
69
62
|
function _interop_require_default(obj) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/require-compatible-launch-darkly-sdk.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { execSync } from 'child_process';\nimport { satisfies } from 'semver';\nimport { FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { applyFilter, checkPackages, setVersion } from '../utils';\n\nconst JS_CLIENT_SDK = 'launchdarkly-js-client-sdk';\nconst LD_SERVICE = '@servicetitan/launchdarkly-service';\n\ninterface ErrorData {\n name?: string;\n actualVersion: string;\n targetVersion: string;\n}\n\ntype RuleError = PackageError<ErrorData>;\n\nexport class RequireCompatibleLaunchDarklySdk implements PackageRule {\n #project!: Project;\n\n get id() {\n return 'require-compatible-launch-darkly-sdk';\n }\n\n run(project: Project): RuleError | RuleError[] | undefined {\n this.#project = project;\n\n /*\n * Pass an empty filter object to checkPackages to disable its filtering.\n * The project-level check is only useful when there are no package-level\n * errors so we need an accurate count.\n */\n const errors = checkPackages({}, project, this.checkPackage);\n\n if (!errors.length) {\n return this.checkProject();\n }\n\n return applyFilter(project.config.rules?.[this.id], errors, ({ data }) => data!.name!);\n }\n\n fix({ data }: RuleError, project: Project) {\n const { name, targetVersion } = data ?? {};\n if (!targetVersion) {\n return;\n }\n if (name) {\n setVersion({\n project,\n packageName: name,\n dependency: JS_CLIENT_SDK,\n version: targetVersion,\n });\n return;\n }\n\n [\n `npm pkg set dependencies[\"${JS_CLIENT_SDK}\"]=${targetVersion}`,\n 'npx @servicetitan/install --fix --quiet',\n `npm pkg delete dependencies[\"${JS_CLIENT_SDK}\"]`,\n ].forEach(command => execSync(command, { stdio: 'inherit' }));\n }\n\n private readonly checkPackage = ({\n dependencies = {},\n location,\n name,\n }: Package): RuleError | undefined => {\n if (!dependencies[JS_CLIENT_SDK]) {\n return;\n }\n\n const actualVersion = this.getActualJsClientSdkVersion(location);\n const targetVersion = this.getTargetJsClientSdkVersion(location);\n if (actualVersion && targetVersion && !satisfies(actualVersion, targetVersion)) {\n return this.createError({\n message: `package \"${name}\" depends on an incompatible version of ${JS_CLIENT_SDK}`,\n location,\n data: { name, actualVersion, targetVersion },\n });\n }\n };\n\n private checkProject() {\n const actualVersion = this.getActualJsClientSdkVersion();\n const targetVersion = this.getTargetJsClientSdkVersion();\n if (actualVersion && targetVersion && !satisfies(actualVersion, targetVersion)) {\n return this.createError({\n message: `project depends on an incompatible version of ${JS_CLIENT_SDK}`,\n location: this.#project.packageManager.lockFileName,\n data: { actualVersion, targetVersion },\n });\n }\n }\n\n private createError(params: { message: string; location: string; data: ErrorData }): RuleError {\n const { message, data, location } = params;\n return {\n id: this.id,\n message,\n details: this.formatDetails(data),\n location,\n fixable: data.name ? FixCategory.isolated : FixCategory.lockFile,\n data,\n };\n }\n\n private formatDetails({ actualVersion, targetVersion }: ErrorData) {\n return `${chalk.yellow(actualVersion)} does not match ${targetVersion}`;\n }\n\n private getActualJsClientSdkVersion(workspacePackage = '') {\n return this.#project.packageManager.getResolvedVersion({\n workspacePackage,\n dependency: JS_CLIENT_SDK,\n });\n }\n\n private getTargetJsClientSdkVersion(workspacePackage = '') {\n return this.#project.packageManager.getDeclaredVersion({\n workspacePackage,\n declaredBy: LD_SERVICE,\n dependency: JS_CLIENT_SDK,\n });\n }\n}\n"],"names":["RequireCompatibleLaunchDarklySdk","JS_CLIENT_SDK","LD_SERVICE","id","run","project","errors","checkPackages","checkPackage","length","checkProject","applyFilter","config","rules","data","name","fix","targetVersion","setVersion","packageName","dependency","version","forEach","command","execSync","stdio","actualVersion","getActualJsClientSdkVersion","getTargetJsClientSdkVersion","satisfies","createError","message","location","packageManager","lockFileName","params","details","formatDetails","fixable","FixCategory","isolated","lockFile","chalk","yellow","workspacePackage","getResolvedVersion","getDeclaredVersion","declaredBy","dependencies"],"mappings":";;;;+BAiBaA;;;eAAAA;;;8DAjBK;+BACO;wBACC;uBAC+C;uBAClB
|
|
1
|
+
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/require-compatible-launch-darkly-sdk.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { execSync } from 'child_process';\nimport { satisfies } from 'semver';\nimport { FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { applyFilter, checkPackages, setVersion } from '../utils';\n\nconst JS_CLIENT_SDK = 'launchdarkly-js-client-sdk';\nconst LD_SERVICE = '@servicetitan/launchdarkly-service';\n\ninterface ErrorData {\n name?: string;\n actualVersion: string;\n targetVersion: string;\n}\n\ntype RuleError = PackageError<ErrorData>;\n\nexport class RequireCompatibleLaunchDarklySdk implements PackageRule {\n #project!: Project;\n\n get id() {\n return 'require-compatible-launch-darkly-sdk';\n }\n\n run(project: Project): RuleError | RuleError[] | undefined {\n this.#project = project;\n\n /*\n * Pass an empty filter object to checkPackages to disable its filtering.\n * The project-level check is only useful when there are no package-level\n * errors so we need an accurate count.\n */\n const errors = checkPackages({}, project, this.checkPackage);\n\n if (!errors.length) {\n return this.checkProject();\n }\n\n return applyFilter(project.config.rules?.[this.id], errors, ({ data }) => data!.name!);\n }\n\n fix({ data }: RuleError, project: Project) {\n const { name, targetVersion } = data ?? {};\n if (!targetVersion) {\n return;\n }\n if (name) {\n setVersion({\n project,\n packageName: name,\n dependency: JS_CLIENT_SDK,\n version: targetVersion,\n });\n return;\n }\n\n [\n `npm pkg set dependencies[\"${JS_CLIENT_SDK}\"]=${targetVersion}`,\n 'npx @servicetitan/install --fix --quiet',\n `npm pkg delete dependencies[\"${JS_CLIENT_SDK}\"]`,\n ].forEach(command => execSync(command, { stdio: 'inherit' }));\n }\n\n private readonly checkPackage = ({\n dependencies = {},\n location,\n name,\n }: Package): RuleError | undefined => {\n if (!dependencies[JS_CLIENT_SDK]) {\n return;\n }\n\n const actualVersion = this.getActualJsClientSdkVersion(location);\n const targetVersion = this.getTargetJsClientSdkVersion(location);\n if (actualVersion && targetVersion && !satisfies(actualVersion, targetVersion)) {\n return this.createError({\n message: `package \"${name}\" depends on an incompatible version of ${JS_CLIENT_SDK}`,\n location,\n data: { name, actualVersion, targetVersion },\n });\n }\n };\n\n private checkProject() {\n const actualVersion = this.getActualJsClientSdkVersion();\n const targetVersion = this.getTargetJsClientSdkVersion();\n if (actualVersion && targetVersion && !satisfies(actualVersion, targetVersion)) {\n return this.createError({\n message: `project depends on an incompatible version of ${JS_CLIENT_SDK}`,\n location: this.#project.packageManager.lockFileName,\n data: { actualVersion, targetVersion },\n });\n }\n }\n\n private createError(params: { message: string; location: string; data: ErrorData }): RuleError {\n const { message, data, location } = params;\n return {\n id: this.id,\n message,\n details: this.formatDetails(data),\n location,\n fixable: data.name ? FixCategory.isolated : FixCategory.lockFile,\n data,\n };\n }\n\n private formatDetails({ actualVersion, targetVersion }: ErrorData) {\n return `${chalk.yellow(actualVersion)} does not match ${targetVersion}`;\n }\n\n private getActualJsClientSdkVersion(workspacePackage = '') {\n return this.#project.packageManager.getResolvedVersion({\n workspacePackage,\n dependency: JS_CLIENT_SDK,\n });\n }\n\n private getTargetJsClientSdkVersion(workspacePackage = '') {\n return this.#project.packageManager.getDeclaredVersion({\n workspacePackage,\n declaredBy: LD_SERVICE,\n dependency: JS_CLIENT_SDK,\n });\n }\n}\n"],"names":["RequireCompatibleLaunchDarklySdk","JS_CLIENT_SDK","LD_SERVICE","id","run","project","errors","checkPackages","checkPackage","length","checkProject","applyFilter","config","rules","data","name","fix","targetVersion","setVersion","packageName","dependency","version","forEach","command","execSync","stdio","actualVersion","getActualJsClientSdkVersion","getTargetJsClientSdkVersion","satisfies","createError","message","location","packageManager","lockFileName","params","details","formatDetails","fixable","FixCategory","isolated","lockFile","chalk","yellow","workspacePackage","getResolvedVersion","getDeclaredVersion","declaredBy","dependencies"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/require-explicit-side-effects.ts"],"sourcesContent":["import { ErrorSeverity, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages, isLibrary } from '../utils';\n\nexport class RequireExplicitSideEffects implements PackageRule {\n get id() {\n return 'require-explicit-side-effects';\n }\n\n run(project: Project): PackageError[] {\n return checkPackages(this, project, this.checkSideEffects);\n }\n\n private readonly checkSideEffects = (pkg: Package) => {\n if (this.needsSideEffects(pkg)) {\n return {\n id: this.id,\n message: `package \"${pkg.name}\" omits sideEffects property`,\n severity: ErrorSeverity.warning,\n location: pkg.location,\n };\n }\n };\n\n private needsSideEffects(pkg: Package) {\n return (\n isLibrary(pkg) &&\n (pkg.main !== undefined || pkg.exports !== undefined) &&\n pkg.sideEffects === undefined\n );\n }\n}\n"],"names":["RequireExplicitSideEffects","id","run","project","checkPackages","checkSideEffects","needsSideEffects","pkg","isLibrary","main","undefined","exports","sideEffects","message","name","severity","ErrorSeverity","warning","location"],"mappings":";;;;+BAGaA;;;eAAAA;;;uBAH8D;uBAClC
|
|
1
|
+
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/require-explicit-side-effects.ts"],"sourcesContent":["import { ErrorSeverity, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages, isLibrary } from '../utils';\n\nexport class RequireExplicitSideEffects implements PackageRule {\n get id() {\n return 'require-explicit-side-effects';\n }\n\n run(project: Project): PackageError[] {\n return checkPackages(this, project, this.checkSideEffects);\n }\n\n private readonly checkSideEffects = (pkg: Package) => {\n if (this.needsSideEffects(pkg)) {\n return {\n id: this.id,\n message: `package \"${pkg.name}\" omits sideEffects property`,\n severity: ErrorSeverity.warning,\n location: pkg.location,\n };\n }\n };\n\n private needsSideEffects(pkg: Package) {\n return (\n isLibrary(pkg) &&\n (pkg.main !== undefined || pkg.exports !== undefined) &&\n pkg.sideEffects === undefined\n );\n }\n}\n"],"names":["RequireExplicitSideEffects","id","run","project","checkPackages","checkSideEffects","needsSideEffects","pkg","isLibrary","main","undefined","exports","sideEffects","message","name","severity","ErrorSeverity","warning","location"],"mappings":";;;;+BAGaA;;;eAAAA;;;uBAH8D;uBAClC;;;;;;;;;;;;AAElC,MAAMA;IACT,IAAIC,KAAK;QACL,OAAO;IACX;IAEAC,IAAIC,OAAgB,EAAkB;QAClC,OAAOC,IAAAA,oBAAa,EAAC,IAAI,EAAED,SAAS,IAAI,CAACE,gBAAgB;IAC7D;IAaQC,iBAAiBC,GAAY,EAAE;QACnC,OACIC,IAAAA,gBAAS,EAACD,QACTA,CAAAA,IAAIE,IAAI,KAAKC,aAAaH,IAAII,OAAO,KAAKD,SAAQ,KACnDH,IAAIK,WAAW,KAAKF;IAE5B;;QAjBA,uBAAiBL,oBAAmB,CAACE;YACjC,IAAI,IAAI,CAACD,gBAAgB,CAACC,MAAM;gBAC5B,OAAO;oBACHN,IAAI,IAAI,CAACA,EAAE;oBACXY,SAAS,CAAC,SAAS,EAAEN,IAAIO,IAAI,CAAC,4BAA4B,CAAC;oBAC3DC,UAAUC,oBAAa,CAACC,OAAO;oBAC/BC,UAAUX,IAAIW,QAAQ;gBAC1B;YACJ;QACJ;;AASJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/require-one-collection-version.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { log } from '../../../../utils';\nimport { FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { applyFilter, compareVersion, formatDependsOn, nameToLocation, setVersion } from '../utils';\n\nexport interface Collection {\n name: string;\n packages: string[];\n}\n\n/**\n * Maps version number to packages with that version and their dependents.\n */\ninterface Versions {\n [version: string]: {\n [packageName: string]: string[];\n };\n}\n\ninterface ErrorData {\n targetVersion: string;\n otherVersions: Versions;\n}\n\ninterface ErrorDetail {\n dependents: string[];\n extra: boolean;\n packageName: string;\n}\n\nexport class RequireOneCollectionVersion implements PackageRule {\n constructor(private readonly collection: Collection) {}\n\n get id() {\n return `require-one-${this.collection.name}-version`;\n }\n\n run(project: Project): PackageError<ErrorData> | undefined {\n const versions = this.collateVersions(project);\n\n /* istanbul ignore next: debug only */\n log.debug(`review:${this.collection.name}-versions`, () =>\n JSON.stringify(versions, null, 2)\n );\n\n const keys = Object.keys(versions);\n if (keys.length <= 1) {\n return;\n }\n\n const message = `project depends on multiple versions of ${this.collection.name} packages`;\n const details = this.composeDetails(project, versions);\n const targetVersion = keys[0];\n const otherVersions = Object.fromEntries(Object.entries(versions).slice(1));\n return {\n id: this.id,\n message,\n details,\n fixable: FixCategory.normal,\n data: { targetVersion, otherVersions },\n };\n }\n\n fix({ data }: PackageError<ErrorData>, project: Project) {\n const { targetVersion, otherVersions } = data ?? {};\n if (!(targetVersion && otherVersions)) {\n return;\n }\n\n Object.values(otherVersions).forEach(packages => {\n Object.entries(packages).forEach(([name, dependents]) => {\n dependents.forEach(dependent =>\n setVersion({\n project,\n packageName: dependent,\n dependency: name,\n version: targetVersion,\n })\n );\n });\n });\n }\n\n private collateVersions(project: Project) {\n const dependencies = this.getDependencies(project);\n return this.sortVersions(\n this.collection.packages.reduce<Versions>((result, name) => {\n Object.entries(dependencies[name] ?? {}).forEach(([version, dependents]) => {\n result[version] ??= {};\n result[version][name] = dependents;\n });\n return result;\n }, {})\n );\n }\n\n private composeDetails({ packages }: Project, versions: Versions) {\n const extra = this.getExtra(versions);\n return this.sortDetails(this.getDetails(packages, versions, extra)).map(detail =>\n this.formatDetail(detail)\n );\n }\n\n private formatDetail({ dependents, packageName, extra }: ErrorDetail) {\n return formatDependsOn(dependents, chalk[extra ? 'red' : 'yellow'](packageName));\n }\n\n private getDependencies({ config, dependencies }: Project) {\n const ruleConfig = config.rules?.[this.id];\n return Object.fromEntries(\n applyFilter(ruleConfig, Object.entries(dependencies), ([name]) => name)\n ) as Project['dependencies'];\n }\n\n private getDetails(packages: Package[], versions: Versions, extra: Set<string>) {\n return Object.entries(versions).reduce((result, [version, dependencies]) => {\n Object.entries(dependencies).forEach(([pkg, dependents]) => {\n result.push({\n packageName: `${pkg}@${version}`,\n dependents: dependents.map(name => nameToLocation(name, packages)),\n extra: extra.has(pkg),\n });\n });\n return result;\n }, [] as ErrorDetail[]);\n }\n\n /**\n * Assumes first version is the most common and the other ones are extra (see sortVersions)\n */\n private getExtra(versions: Versions): Set<string> {\n return new Set(\n Object.entries(versions)\n .slice(1)\n .flatMap(([_version, dependencies]) => Object.keys(dependencies))\n );\n }\n\n /**\n * Orders details so that extraneous packages are at the top\n */\n private sortDetails(details: ErrorDetail[]) {\n return details.sort((a, b) => {\n if (a.extra === b.extra) {\n return 0;\n }\n return a.extra === true ? -1 : 1;\n });\n }\n\n /**\n * Orders versions in descending order by the number of packages using the version\n * and then by version number. I.e., It puts most common version at the top and if\n * multiple versions tie for the top position, it puts the highest version first.\n */\n private sortVersions(versions: Versions): Versions {\n return Object.fromEntries(\n Object.entries(versions)\n .sort(\n ([v1, depsV1], [v2, depsV2]) =>\n Object.keys(depsV1).length - Object.keys(depsV2).length ||\n compareVersion(v1, v2)\n )\n .reverse()\n );\n }\n}\n"],"names":["RequireOneCollectionVersion","id","collection","name","run","project","versions","collateVersions","log","debug","JSON","stringify","keys","Object","length","message","details","composeDetails","targetVersion","otherVersions","fromEntries","entries","slice","fixable","FixCategory","normal","data","fix","values","forEach","packages","dependents","dependent","setVersion","packageName","dependency","version","dependencies","getDependencies","sortVersions","reduce","result","extra","getExtra","sortDetails","getDetails","map","detail","formatDetail","formatDependsOn","chalk","config","ruleConfig","rules","applyFilter","pkg","push","nameToLocation","has","Set","flatMap","_version","sort","a","b","v1","depsV1","v2","depsV2","compareVersion","reverse"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/require-one-collection-version.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { log } from '../../../../utils';\nimport { FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { applyFilter, compareVersion, formatDependsOn, nameToLocation, setVersion } from '../utils';\n\nexport interface Collection {\n name: string;\n packages: string[];\n}\n\n/**\n * Maps version number to packages with that version and their dependents.\n */\ninterface Versions {\n [version: string]: {\n [packageName: string]: string[];\n };\n}\n\ninterface ErrorData {\n targetVersion: string;\n otherVersions: Versions;\n}\n\ninterface ErrorDetail {\n dependents: string[];\n extra: boolean;\n packageName: string;\n}\n\nexport class RequireOneCollectionVersion implements PackageRule {\n constructor(private readonly collection: Collection) {}\n\n get id() {\n return `require-one-${this.collection.name}-version`;\n }\n\n run(project: Project): PackageError<ErrorData> | undefined {\n const versions = this.collateVersions(project);\n\n /* istanbul ignore next: debug only */\n log.debug(`review:${this.collection.name}-versions`, () =>\n JSON.stringify(versions, null, 2)\n );\n\n const keys = Object.keys(versions);\n if (keys.length <= 1) {\n return;\n }\n\n const message = `project depends on multiple versions of ${this.collection.name} packages`;\n const details = this.composeDetails(project, versions);\n const targetVersion = keys[0];\n const otherVersions = Object.fromEntries(Object.entries(versions).slice(1));\n return {\n id: this.id,\n message,\n details,\n fixable: FixCategory.normal,\n data: { targetVersion, otherVersions },\n };\n }\n\n fix({ data }: PackageError<ErrorData>, project: Project) {\n const { targetVersion, otherVersions } = data ?? {};\n if (!(targetVersion && otherVersions)) {\n return;\n }\n\n Object.values(otherVersions).forEach(packages => {\n Object.entries(packages).forEach(([name, dependents]) => {\n dependents.forEach(dependent =>\n setVersion({\n project,\n packageName: dependent,\n dependency: name,\n version: targetVersion,\n })\n );\n });\n });\n }\n\n private collateVersions(project: Project) {\n const dependencies = this.getDependencies(project);\n return this.sortVersions(\n this.collection.packages.reduce<Versions>((result, name) => {\n Object.entries(dependencies[name] ?? {}).forEach(([version, dependents]) => {\n result[version] ??= {};\n result[version][name] = dependents;\n });\n return result;\n }, {})\n );\n }\n\n private composeDetails({ packages }: Project, versions: Versions) {\n const extra = this.getExtra(versions);\n return this.sortDetails(this.getDetails(packages, versions, extra)).map(detail =>\n this.formatDetail(detail)\n );\n }\n\n private formatDetail({ dependents, packageName, extra }: ErrorDetail) {\n return formatDependsOn(dependents, chalk[extra ? 'red' : 'yellow'](packageName));\n }\n\n private getDependencies({ config, dependencies }: Project) {\n const ruleConfig = config.rules?.[this.id];\n return Object.fromEntries(\n applyFilter(ruleConfig, Object.entries(dependencies), ([name]) => name)\n ) as Project['dependencies'];\n }\n\n private getDetails(packages: Package[], versions: Versions, extra: Set<string>) {\n return Object.entries(versions).reduce((result, [version, dependencies]) => {\n Object.entries(dependencies).forEach(([pkg, dependents]) => {\n result.push({\n packageName: `${pkg}@${version}`,\n dependents: dependents.map(name => nameToLocation(name, packages)),\n extra: extra.has(pkg),\n });\n });\n return result;\n }, [] as ErrorDetail[]);\n }\n\n /**\n * Assumes first version is the most common and the other ones are extra (see sortVersions)\n */\n private getExtra(versions: Versions): Set<string> {\n return new Set(\n Object.entries(versions)\n .slice(1)\n .flatMap(([_version, dependencies]) => Object.keys(dependencies))\n );\n }\n\n /**\n * Orders details so that extraneous packages are at the top\n */\n private sortDetails(details: ErrorDetail[]) {\n return details.sort((a, b) => {\n if (a.extra === b.extra) {\n return 0;\n }\n return a.extra === true ? -1 : 1;\n });\n }\n\n /**\n * Orders versions in descending order by the number of packages using the version\n * and then by version number. I.e., It puts most common version at the top and if\n * multiple versions tie for the top position, it puts the highest version first.\n */\n private sortVersions(versions: Versions): Versions {\n return Object.fromEntries(\n Object.entries(versions)\n .sort(\n ([v1, depsV1], [v2, depsV2]) =>\n Object.keys(depsV1).length - Object.keys(depsV2).length ||\n compareVersion(v1, v2)\n )\n .reverse()\n );\n }\n}\n"],"names":["RequireOneCollectionVersion","id","collection","name","run","project","versions","collateVersions","log","debug","JSON","stringify","keys","Object","length","message","details","composeDetails","targetVersion","otherVersions","fromEntries","entries","slice","fixable","FixCategory","normal","data","fix","values","forEach","packages","dependents","dependent","setVersion","packageName","dependency","version","dependencies","getDependencies","sortVersions","reduce","result","extra","getExtra","sortDetails","getDetails","map","detail","formatDetail","formatDependsOn","chalk","config","ruleConfig","rules","applyFilter","pkg","push","nameToLocation","has","Set","flatMap","_version","sort","a","b","v1","depsV1","v2","depsV2","compareVersion","reverse"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/require-servicetitan-scope.ts"],"sourcesContent":["import { ErrorSeverity, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages, isLibrary } from '../utils';\n\nexport class RequireServiceTitanScope implements PackageRule {\n get id() {\n return 'require-servicetitan-scope';\n }\n\n run(project: Project): PackageError[] {\n return checkPackages(this, project, this.checkScope);\n }\n\n private readonly checkScope = (pkg: Package) => {\n if (this.needsScope(pkg)) {\n return {\n id: this.id,\n message: `package \"${pkg.name}\" should have @servicetitan scope`,\n severity: ErrorSeverity.warning,\n location: pkg.location,\n };\n }\n };\n\n private needsScope(pkg: Package) {\n return isLibrary(pkg) && pkg.private !== true && !pkg.name.startsWith('@servicetitan/');\n }\n}\n"],"names":["RequireServiceTitanScope","id","run","project","checkPackages","checkScope","needsScope","pkg","isLibrary","private","name","startsWith","message","severity","ErrorSeverity","warning","location"],"mappings":";;;;+BAGaA;;;eAAAA;;;uBAH8D;uBAClC
|
|
1
|
+
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/require-servicetitan-scope.ts"],"sourcesContent":["import { ErrorSeverity, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages, isLibrary } from '../utils';\n\nexport class RequireServiceTitanScope implements PackageRule {\n get id() {\n return 'require-servicetitan-scope';\n }\n\n run(project: Project): PackageError[] {\n return checkPackages(this, project, this.checkScope);\n }\n\n private readonly checkScope = (pkg: Package) => {\n if (this.needsScope(pkg)) {\n return {\n id: this.id,\n message: `package \"${pkg.name}\" should have @servicetitan scope`,\n severity: ErrorSeverity.warning,\n location: pkg.location,\n };\n }\n };\n\n private needsScope(pkg: Package) {\n return isLibrary(pkg) && pkg.private !== true && !pkg.name.startsWith('@servicetitan/');\n }\n}\n"],"names":["RequireServiceTitanScope","id","run","project","checkPackages","checkScope","needsScope","pkg","isLibrary","private","name","startsWith","message","severity","ErrorSeverity","warning","location"],"mappings":";;;;+BAGaA;;;eAAAA;;;uBAH8D;uBAClC;;;;;;;;;;;;AAElC,MAAMA;IACT,IAAIC,KAAK;QACL,OAAO;IACX;IAEAC,IAAIC,OAAgB,EAAkB;QAClC,OAAOC,IAAAA,oBAAa,EAAC,IAAI,EAAED,SAAS,IAAI,CAACE,UAAU;IACvD;IAaQC,WAAWC,GAAY,EAAE;QAC7B,OAAOC,IAAAA,gBAAS,EAACD,QAAQA,IAAIE,OAAO,KAAK,QAAQ,CAACF,IAAIG,IAAI,CAACC,UAAU,CAAC;IAC1E;;QAbA,uBAAiBN,cAAa,CAACE;YAC3B,IAAI,IAAI,CAACD,UAAU,CAACC,MAAM;gBACtB,OAAO;oBACHN,IAAI,IAAI,CAACA,EAAE;oBACXW,SAAS,CAAC,SAAS,EAAEL,IAAIG,IAAI,CAAC,iCAAiC,CAAC;oBAChEG,UAAUC,oBAAa,CAACC,OAAO;oBAC/BC,UAAUT,IAAIS,QAAQ;gBAC1B;YACJ;QACJ;;AAKJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/require-tsconfig-references.ts"],"sourcesContent":["import { globSync } from 'glob';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { getTsConfig, prettifySync, readJson, readJsonSafe } from '../../../../utils';\nimport { FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages } from '../utils';\n\ninterface TsConfig {\n references?: { path: string }[];\n}\n\ninterface ErrorData {\n tsconfigPath: string;\n missingReference: string;\n expectedPath: string;\n}\n\nexport type RuleError = PackageError<ErrorData>;\n\nexport class RequireTsconfigReferences implements PackageRule {\n private packageNameToLocation!: Map<string, string>;\n private locationToPackageName!: Map<string, string>;\n private workspacePackageNames!: Set<string>;\n\n get id() {\n return 'require-tsconfig-references';\n }\n\n run(project: Project): RuleError[] {\n this.packageNameToLocation = new Map(\n project.packages.map(({ name, location }) => [name, location])\n );\n this.locationToPackageName = new Map(\n project.packages.map(({ name, location }) => [path.resolve(location), name])\n );\n this.workspacePackageNames = new Set(project.packages.map(({ name }) => name));\n\n return checkPackages(this, project, this.checkTsConfigReferences);\n }\n\n fix({ data }: RuleError) {\n if (!data) {\n return;\n }\n\n const { tsconfigPath, expectedPath } = data;\n const tsconfig = readJson<TsConfig>(tsconfigPath);\n\n const references = tsconfig.references ?? [];\n references.push({ path: expectedPath });\n tsconfig.references = references;\n\n fs.writeFileSync(tsconfigPath, JSON.stringify(tsconfig) + '\\n', 'utf-8');\n prettifySync(tsconfigPath);\n }\n\n private getLocalDependencies(pkg: Package) {\n const dependencies = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n ...pkg.peerDependencies,\n };\n\n return Object.keys(dependencies).filter(dependency =>\n this.workspacePackageNames.has(dependency)\n );\n }\n\n private normalizeTsConfigPath(filePath: string): string {\n if (this.isDirectory(filePath)) {\n return path.join(filePath, 'tsconfig.json');\n }\n return filePath.endsWith('.json') ? filePath : `${filePath}.json`;\n }\n\n private getTsConfigReferencedPackages(tsconfigPath: string) {\n const config = readJsonSafe<TsConfig>(tsconfigPath);\n if (!config?.references) {\n return new Set<string>();\n }\n\n const tsconfigDir = path.dirname(tsconfigPath);\n const referencedPackages = new Set<string>();\n\n for (const reference of config.references) {\n const resolvedRefPath = this.normalizeTsConfigPath(\n path.resolve(tsconfigDir, reference.path)\n );\n const refDir = path.dirname(resolvedRefPath);\n const packageName = this.locationToPackageName.get(refDir);\n\n if (packageName) {\n referencedPackages.add(packageName);\n }\n }\n\n return referencedPackages;\n }\n\n private getExpectedReferencePath(fromLocation: string, toLocation: string) {\n const relativePath = path.relative(fromLocation, toLocation);\n const tsconfigFile = getTsConfig(toLocation);\n const tsconfigName = path.basename(tsconfigFile);\n const referencePath = this.isDefaultTsConfig(tsconfigName)\n ? relativePath\n : path.join(relativePath, tsconfigName);\n\n return referencePath.replaceAll('\\\\', '/');\n }\n\n private collectTsConfigFiles(location: string): string[] {\n const tsconfigFiles = globSync(['tsconfig.json', 'tsconfig.*.json'], {\n absolute: false,\n cwd: location,\n });\n\n return tsconfigFiles.map(tsconfigFile => path.join(location, tsconfigFile));\n }\n\n private findMissingDependencyReferences(\n pkg: Package,\n tsconfigPath: string,\n localDependencies: string[]\n ): RuleError[] {\n const referencedPackages = this.getTsConfigReferencedPackages(tsconfigPath);\n\n return localDependencies\n .filter(dependency => !referencedPackages.has(dependency))\n .map(dependency => {\n const dependencyLocation = this.packageNameToLocation.get(dependency)!;\n\n return {\n id: this.id,\n message: `missing reference for dependency: ${dependency}`,\n location: tsconfigPath,\n fixable: FixCategory.normal,\n data: {\n tsconfigPath,\n missingReference: dependency,\n expectedPath: this.getExpectedReferencePath(\n pkg.location,\n dependencyLocation\n ),\n },\n };\n });\n }\n\n private readonly checkTsConfigReferences = (pkg: Package) => {\n if (pkg.location === '.') {\n return [];\n }\n\n const tsconfigFiles = this.collectTsConfigFiles(pkg.location);\n const localDependencies = this.getLocalDependencies(pkg);\n\n return tsconfigFiles.flatMap(tsconfigPath =>\n this.findMissingDependencyReferences(pkg, tsconfigPath, localDependencies)\n );\n };\n\n private isDefaultTsConfig(name: string) {\n return name === 'tsconfig.json';\n }\n\n private isDirectory(file: string) {\n try {\n return fs.statSync(file).isDirectory();\n } catch {\n return false;\n }\n }\n}\n"],"names":["RequireTsconfigReferences","id","run","project","packageNameToLocation","Map","packages","map","name","location","locationToPackageName","path","resolve","workspacePackageNames","Set","checkPackages","checkTsConfigReferences","fix","data","tsconfig","tsconfigPath","expectedPath","readJson","references","push","fs","writeFileSync","JSON","stringify","prettifySync","getLocalDependencies","pkg","dependencies","devDependencies","peerDependencies","Object","keys","filter","dependency","has","normalizeTsConfigPath","filePath","isDirectory","join","endsWith","getTsConfigReferencedPackages","config","readJsonSafe","tsconfigDir","dirname","referencedPackages","reference","resolvedRefPath","refDir","packageName","get","add","getExpectedReferencePath","fromLocation","toLocation","relativePath","relative","tsconfigFile","getTsConfig","tsconfigName","basename","referencePath","isDefaultTsConfig","replaceAll","collectTsConfigFiles","tsconfigFiles","globSync","absolute","cwd","findMissingDependencyReferences","localDependencies","dependencyLocation","message","fixable","FixCategory","normal","missingReference","file","statSync","flatMap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/require-tsconfig-references.ts"],"sourcesContent":["import { globSync } from 'glob';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { getTsConfig, prettifySync, readJson, readJsonSafe } from '../../../../utils';\nimport { FixCategory, Package, PackageError, PackageRule, Project } from '../types';\nimport { checkPackages } from '../utils';\n\ninterface TsConfig {\n references?: { path: string }[];\n}\n\ninterface ErrorData {\n tsconfigPath: string;\n missingReference: string;\n expectedPath: string;\n}\n\nexport type RuleError = PackageError<ErrorData>;\n\nexport class RequireTsconfigReferences implements PackageRule {\n private packageNameToLocation!: Map<string, string>;\n private locationToPackageName!: Map<string, string>;\n private workspacePackageNames!: Set<string>;\n\n get id() {\n return 'require-tsconfig-references';\n }\n\n run(project: Project): RuleError[] {\n this.packageNameToLocation = new Map(\n project.packages.map(({ name, location }) => [name, location])\n );\n this.locationToPackageName = new Map(\n project.packages.map(({ name, location }) => [path.resolve(location), name])\n );\n this.workspacePackageNames = new Set(project.packages.map(({ name }) => name));\n\n return checkPackages(this, project, this.checkTsConfigReferences);\n }\n\n fix({ data }: RuleError) {\n if (!data) {\n return;\n }\n\n const { tsconfigPath, expectedPath } = data;\n const tsconfig = readJson<TsConfig>(tsconfigPath);\n\n const references = tsconfig.references ?? [];\n references.push({ path: expectedPath });\n tsconfig.references = references;\n\n fs.writeFileSync(tsconfigPath, JSON.stringify(tsconfig) + '\\n', 'utf-8');\n prettifySync(tsconfigPath);\n }\n\n private getLocalDependencies(pkg: Package) {\n const dependencies = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n ...pkg.peerDependencies,\n };\n\n return Object.keys(dependencies).filter(dependency =>\n this.workspacePackageNames.has(dependency)\n );\n }\n\n private normalizeTsConfigPath(filePath: string): string {\n if (this.isDirectory(filePath)) {\n return path.join(filePath, 'tsconfig.json');\n }\n return filePath.endsWith('.json') ? filePath : `${filePath}.json`;\n }\n\n private getTsConfigReferencedPackages(tsconfigPath: string) {\n const config = readJsonSafe<TsConfig>(tsconfigPath);\n if (!config?.references) {\n return new Set<string>();\n }\n\n const tsconfigDir = path.dirname(tsconfigPath);\n const referencedPackages = new Set<string>();\n\n for (const reference of config.references) {\n const resolvedRefPath = this.normalizeTsConfigPath(\n path.resolve(tsconfigDir, reference.path)\n );\n const refDir = path.dirname(resolvedRefPath);\n const packageName = this.locationToPackageName.get(refDir);\n\n if (packageName) {\n referencedPackages.add(packageName);\n }\n }\n\n return referencedPackages;\n }\n\n private getExpectedReferencePath(fromLocation: string, toLocation: string) {\n const relativePath = path.relative(fromLocation, toLocation);\n const tsconfigFile = getTsConfig(toLocation);\n const tsconfigName = path.basename(tsconfigFile);\n const referencePath = this.isDefaultTsConfig(tsconfigName)\n ? relativePath\n : path.join(relativePath, tsconfigName);\n\n return referencePath.replaceAll('\\\\', '/');\n }\n\n private collectTsConfigFiles(location: string): string[] {\n const tsconfigFiles = globSync(['tsconfig.json', 'tsconfig.*.json'], {\n absolute: false,\n cwd: location,\n });\n\n return tsconfigFiles.map(tsconfigFile => path.join(location, tsconfigFile));\n }\n\n private findMissingDependencyReferences(\n pkg: Package,\n tsconfigPath: string,\n localDependencies: string[]\n ): RuleError[] {\n const referencedPackages = this.getTsConfigReferencedPackages(tsconfigPath);\n\n return localDependencies\n .filter(dependency => !referencedPackages.has(dependency))\n .map(dependency => {\n const dependencyLocation = this.packageNameToLocation.get(dependency)!;\n\n return {\n id: this.id,\n message: `missing reference for dependency: ${dependency}`,\n location: tsconfigPath,\n fixable: FixCategory.normal,\n data: {\n tsconfigPath,\n missingReference: dependency,\n expectedPath: this.getExpectedReferencePath(\n pkg.location,\n dependencyLocation\n ),\n },\n };\n });\n }\n\n private readonly checkTsConfigReferences = (pkg: Package) => {\n if (pkg.location === '.') {\n return [];\n }\n\n const tsconfigFiles = this.collectTsConfigFiles(pkg.location);\n const localDependencies = this.getLocalDependencies(pkg);\n\n return tsconfigFiles.flatMap(tsconfigPath =>\n this.findMissingDependencyReferences(pkg, tsconfigPath, localDependencies)\n );\n };\n\n private isDefaultTsConfig(name: string) {\n return name === 'tsconfig.json';\n }\n\n private isDirectory(file: string) {\n try {\n return fs.statSync(file).isDirectory();\n } catch {\n return false;\n }\n }\n}\n"],"names":["RequireTsconfigReferences","id","run","project","packageNameToLocation","Map","packages","map","name","location","locationToPackageName","path","resolve","workspacePackageNames","Set","checkPackages","checkTsConfigReferences","fix","data","tsconfig","tsconfigPath","expectedPath","readJson","references","push","fs","writeFileSync","JSON","stringify","prettifySync","getLocalDependencies","pkg","dependencies","devDependencies","peerDependencies","Object","keys","filter","dependency","has","normalizeTsConfigPath","filePath","isDirectory","join","endsWith","getTsConfigReferencedPackages","config","readJsonSafe","tsconfigDir","dirname","referencedPackages","reference","resolvedRefPath","refDir","packageName","get","add","getExpectedReferencePath","fromLocation","toLocation","relativePath","relative","tsconfigFile","getTsConfig","tsconfigName","basename","referencePath","isDefaultTsConfig","replaceAll","collectTsConfigFiles","tsconfigFiles","globSync","absolute","cwd","findMissingDependencyReferences","localDependencies","dependencyLocation","message","fixable","FixCategory","normal","missingReference","file","statSync","flatMap"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/review/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,8BAAsB,WAAW;IAC7B,QAAQ,KAAK,EAAE,IAAI,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,EAAE,GAAG,SAAS;IACzE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;CAC7D;AAED,MAAM,WAAW,OAAO;IACpB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,CAAC,WAAW,EAAE,MAAM,GAAG;QACnB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC/B,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,UAAU,UAAU;IAChB,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,GAAG;IACjC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC5B;AAED,oBAAY,aAAa;IACrB,KAAK,IAAI;IACT,OAAO,IAAI;CACd;AAED,oBAAY,WAAW;IACnB,QAAQ,aAAa,CAAE,0EAA0E;IACjG,MAAM,WAAW,CAAE,6DAA6D;IAChF,QAAQ,aAAa;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/review/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,8BAAsB,WAAW;IAC7B,QAAQ,KAAK,EAAE,IAAI,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,EAAE,GAAG,SAAS;IACzE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;CAC7D;AAED,MAAM,WAAW,OAAO;IACpB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,CAAC,WAAW,EAAE,MAAM,GAAG;QACnB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC/B,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,UAAU,UAAU;IAChB,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,GAAG;IACjC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC5B;AAED,oBAAY,aAAa;IACrB,KAAK,IAAI;IACT,OAAO,IAAI;CACd;AAED,oBAAY,WAAW;IACnB,QAAQ,aAAa,CAAE,0EAA0E;IACjG,MAAM,WAAW,CAAE,6DAA6D;IAChF,QAAQ,aAAa;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,MAAM,iBAAiB,GACzB,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAEjF,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/cli/commands/review/types.ts"],"sourcesContent":["import { PackageManager } from '@servicetitan/install';\n\nexport abstract class PackageRule {\n abstract get id(): string;\n abstract run(project: Project): PackageError | PackageError[] | undefined;\n abstract fix?(error: PackageError, project: Project): void;\n}\n\nexport interface Project {\n config: ReviewConfiguration;\n dependencies: Dependencies;\n packageManager: PackageManager;\n packages: Package[];\n}\n\n/**\n * Maps package name to versions and dependents of those versions.\n */\nexport interface Dependencies {\n [packageName: string]: {\n [version: string]: string[];\n };\n}\n\n/**\n * Subset of package.json used by rules\n */\nexport interface Package {\n cli?: CliOptions;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n exports?: string | Record<string, string | Record<string, string>> | null;\n location: string;\n main?: string;\n module?: string;\n name: string;\n peerDependencies?: Record<string, string>;\n private?: boolean;\n scripts?: Record<string, string>;\n sideEffects?: any;\n workspaces?: string[];\n}\n\ninterface CliOptions {\n webpack?: false | Record<string, any>;\n}\n\nexport interface PackageError<T = any> {\n data?: T;\n details?: string | string[];\n fixable?: FixCategory;\n id: string;\n location?: string;\n message: string;\n severity?: ErrorSeverity;\n}\n\nexport enum ErrorSeverity {\n error = 1,\n warning = 2,\n}\n\nexport enum FixCategory {\n isolated = 'isolated', // fix examines and changes at most one dependency or package.json, if any\n normal = 'normal', // fix potentially examines and changes multiple dependencies\n lockFile = 'lockFile', // fix examines and changes package-lock.json\n}\n\nexport interface ReviewConfiguration {\n rules?: { [id: string]: RuleConfiguration };\n}\n\nexport type RuleConfiguration =\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/cli/commands/review/types.ts"],"sourcesContent":["import { PackageManager } from '@servicetitan/install';\n\nexport abstract class PackageRule {\n abstract get id(): string;\n abstract run(project: Project): PackageError | PackageError[] | undefined;\n abstract fix?(error: PackageError, project: Project): void;\n}\n\nexport interface Project {\n config: ReviewConfiguration;\n dependencies: Dependencies;\n packageManager: PackageManager;\n packages: Package[];\n}\n\n/**\n * Maps package name to versions and dependents of those versions.\n */\nexport interface Dependencies {\n [packageName: string]: {\n [version: string]: string[];\n };\n}\n\n/**\n * Subset of package.json used by rules\n */\nexport interface Package {\n cli?: CliOptions;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n exports?: string | Record<string, string | Record<string, string>> | null;\n location: string;\n main?: string;\n module?: string;\n name: string;\n peerDependencies?: Record<string, string>;\n private?: boolean;\n scripts?: Record<string, string>;\n sideEffects?: any;\n workspaces?: string[];\n}\n\ninterface CliOptions {\n webpack?: false | Record<string, any>;\n}\n\nexport interface PackageError<T = any> {\n data?: T;\n details?: string | string[];\n fixable?: FixCategory;\n id: string;\n location?: string;\n message: string;\n severity?: ErrorSeverity;\n}\n\nexport enum ErrorSeverity {\n error = 1,\n warning = 2,\n}\n\nexport enum FixCategory {\n isolated = 'isolated', // fix examines and changes at most one dependency or package.json, if any\n normal = 'normal', // fix potentially examines and changes multiple dependencies\n lockFile = 'lockFile', // fix examines and changes package-lock.json\n}\n\nexport interface ReviewConfiguration {\n rules?: { [id: string]: RuleConfiguration };\n}\n\nexport type RuleConfiguration =\n Level | [Level] | [Level, { exclude?: string[] | Record<string, string[]> }];\n\nexport type Level = 'warn' | 'error' | 'off';\n"],"names":["ErrorSeverity","FixCategory","PackageRule"],"mappings":";;;;;;;;;;;QAyDYA;eAAAA;;QAKAC;eAAAA;;QA5DUC;eAAAA;;;AAAf,MAAeA;AAItB;AAmDO,IAAA,AAAKF,uCAAAA;;;WAAAA;;AAKL,IAAA,AAAKC,qCAAAA;;;;WAAAA"}
|