@servicetitan/startup 36.1.1 → 36.1.2-canary.2
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/_run.js +77 -0
- package/bin/cpx.js +3 -0
- package/bin/eslint.js +3 -0
- package/bin/jest.js +3 -0
- package/bin/js-yaml.js +3 -0
- package/bin/json5.js +3 -0
- package/bin/kendo-ui-license.js +3 -0
- package/bin/lerna.js +3 -0
- package/bin/lessc.js +3 -0
- package/bin/patch-package.js +3 -0
- package/bin/prettier.js +3 -0
- package/bin/sass.js +3 -0
- package/bin/semver.js +3 -0
- package/bin/spack.js +3 -0
- package/bin/stylelint.js +3 -0
- package/bin/swc.js +3 -0
- package/bin/swcx.js +3 -0
- package/bin/tcm.js +3 -0
- package/bin/ts-jest.js +3 -0
- package/bin/ts-node-cwd.js +3 -0
- package/bin/ts-node-esm.js +3 -0
- package/bin/ts-node-script.js +3 -0
- package/bin/ts-node-transpile-only.js +3 -0
- package/bin/ts-node.js +3 -0
- package/bin/ts-script.js +3 -0
- package/bin/tsc.js +3 -0
- package/bin/tsserver.js +3 -0
- package/bin/vitest.js +3 -0
- package/bin/webpack-bundle-analyzer.js +3 -0
- package/bin/webpack-dev-server.js +3 -0
- package/bin/webpack.js +3 -0
- package/dist/cli/commands/clean.d.ts +1 -0
- package/dist/cli/commands/clean.d.ts.map +1 -1
- package/dist/cli/commands/clean.js +18 -8
- package/dist/cli/commands/clean.js.map +1 -1
- package/dist/cli/commands/coverage-finalize.d.ts +16 -0
- package/dist/cli/commands/coverage-finalize.d.ts.map +1 -0
- package/dist/cli/commands/coverage-finalize.js +41 -0
- package/dist/cli/commands/coverage-finalize.js.map +1 -0
- package/dist/cli/commands/install.js +1 -1
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/kendo-ui-license.js +1 -2
- package/dist/cli/commands/kendo-ui-license.js.map +1 -1
- package/dist/cli/commands/prepare-package.js +2 -2
- package/dist/cli/commands/prepare-package.js.map +1 -1
- package/dist/cli/commands/registry/coverage-finalize.d.ts +5 -0
- package/dist/cli/commands/registry/coverage-finalize.d.ts.map +1 -0
- package/dist/cli/commands/registry/coverage-finalize.js +17 -0
- package/dist/cli/commands/registry/coverage-finalize.js.map +1 -0
- package/dist/cli/commands/review/review.d.ts.map +1 -1
- package/dist/cli/commands/review/review.js +8 -7
- package/dist/cli/commands/review/review.js.map +1 -1
- package/dist/cli/commands/review/rules/require-compatible-launch-darkly-sdk.d.ts +0 -1
- package/dist/cli/commands/review/rules/require-compatible-launch-darkly-sdk.d.ts.map +1 -1
- package/dist/cli/commands/review/rules/require-compatible-launch-darkly-sdk.js +12 -18
- package/dist/cli/commands/review/rules/require-compatible-launch-darkly-sdk.js.map +1 -1
- package/dist/cli/commands/review/rules/require-project-version-in-root-node-modules.d.ts.map +1 -1
- package/dist/cli/commands/review/rules/require-project-version-in-root-node-modules.js +9 -4
- package/dist/cli/commands/review/rules/require-project-version-in-root-node-modules.js.map +1 -1
- package/dist/cli/commands/review/types.d.ts +2 -8
- package/dist/cli/commands/review/types.d.ts.map +1 -1
- package/dist/cli/commands/review/types.js.map +1 -1
- package/dist/cli/utils/index.d.ts +0 -3
- package/dist/cli/utils/index.d.ts.map +1 -1
- package/dist/cli/utils/index.js +0 -3
- package/dist/cli/utils/index.js.map +1 -1
- package/dist/cypress/config/webpack-config.js +0 -1
- package/dist/cypress/config/webpack-config.js.map +1 -1
- package/dist/storybook-config/webpack-final.d.ts.map +1 -1
- package/dist/storybook-config/webpack-final.js +0 -6
- package/dist/storybook-config/webpack-final.js.map +1 -1
- package/dist/utils/default-excludes.d.ts +14 -0
- package/dist/utils/default-excludes.d.ts.map +1 -0
- package/dist/utils/default-excludes.js +23 -0
- package/dist/utils/default-excludes.js.map +1 -0
- package/dist/utils/find-packages.d.ts.map +1 -1
- package/dist/utils/find-packages.js +15 -0
- package/dist/utils/find-packages.js.map +1 -1
- package/dist/utils/get-coverage-aliases.d.ts +23 -0
- package/dist/utils/get-coverage-aliases.d.ts.map +1 -0
- package/dist/utils/get-coverage-aliases.js +41 -0
- package/dist/utils/get-coverage-aliases.js.map +1 -0
- package/dist/utils/get-coverage-source-patterns.d.ts +21 -0
- package/dist/utils/get-coverage-source-patterns.d.ts.map +1 -0
- package/dist/utils/get-coverage-source-patterns.js +39 -0
- package/dist/utils/get-coverage-source-patterns.js.map +1 -0
- package/dist/utils/get-jest-config.d.ts.map +1 -1
- package/dist/utils/get-jest-config.js +2 -1
- package/dist/utils/get-jest-config.js.map +1 -1
- package/dist/utils/prettify.js +1 -1
- package/dist/utils/prettify.js.map +1 -1
- package/dist/webpack/configs/cache-config.d.ts.map +1 -1
- package/dist/webpack/configs/cache-config.js +3 -1
- package/dist/webpack/configs/cache-config.js.map +1 -1
- package/dist/webpack/configs/rules/ts-coverage-rules.d.ts +22 -0
- package/dist/webpack/configs/rules/ts-coverage-rules.d.ts.map +1 -0
- package/dist/webpack/configs/rules/ts-coverage-rules.js +48 -0
- package/dist/webpack/configs/rules/ts-coverage-rules.js.map +1 -0
- package/eslint/config.mjs +2 -0
- package/package.json +54 -18
- package/src/__tests__/postinstall.test.ts +173 -0
- package/src/cli/commands/__tests__/clean.test.ts +30 -12
- package/src/cli/commands/__tests__/install.test.ts +3 -1
- package/src/cli/commands/__tests__/kendo-ui-license.test.ts +4 -4
- package/src/cli/commands/__tests__/prepare-package.test.ts +2 -3
- package/src/cli/commands/clean.ts +18 -9
- package/src/cli/commands/install.ts +1 -1
- package/src/cli/commands/kendo-ui-license.ts +1 -1
- package/src/cli/commands/prepare-package.ts +1 -1
- package/src/cli/commands/review/__mocks__/index.ts +1 -0
- package/src/cli/commands/review/__mocks__/mock-package-manager.ts +20 -0
- package/src/cli/commands/review/__tests__/review.test.ts +23 -31
- package/src/cli/commands/review/review.ts +11 -7
- package/src/cli/commands/review/rules/__mocks__/mock-project.ts +2 -1
- package/src/cli/commands/review/rules/__tests__/require-compatible-launch-darkly-sdk.test.ts +39 -49
- package/src/cli/commands/review/rules/__tests__/require-project-version-in-root-node-modules.test.ts +35 -22
- package/src/cli/commands/review/rules/require-compatible-launch-darkly-sdk.ts +13 -28
- package/src/cli/commands/review/rules/require-project-version-in-root-node-modules.ts +10 -3
- package/src/cli/commands/review/types.ts +3 -12
- package/src/cli/utils/index.ts +10 -3
- package/src/cypress/config/__tests__/webpack-config.test.ts +0 -9
- package/src/cypress/config/webpack-config.ts +0 -1
- package/src/postinstall.js +106 -14
- package/src/scripts/__tests__/generate-bin-wrappers.test.ts +226 -0
- package/src/scripts/generate-bin-wrappers.js +205 -0
- package/src/storybook-config/__tests__/webpack-final.test.ts +0 -25
- package/src/storybook-config/webpack-final.ts +0 -4
- package/src/utils/__tests__/get-jest-config.test.ts +3 -1
- package/src/utils/__tests__/get-packages.test.ts +47 -2
- package/src/utils/__tests__/prettify.test.ts +1 -1
- package/src/utils/find-packages.ts +16 -0
- package/src/utils/get-jest-config.ts +4 -1
- package/src/utils/prettify.ts +1 -1
- package/src/webpack/configs/cache-config.ts +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/cli/commands/review/review.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { execSync } from 'child_process';\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 packageLock = readJsonSafe<Project['packageLock']>('package-lock.json');\n if (!packageLock?.packages) {\n throw new Error('this command must be run with valid package-lock.json');\n }\n\n root.location = '.'; // identifies the root package.json for rules that care\n packageLock.location = './package-lock.json';\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 { config, dependencies, packageLock, packages };\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 execSync('npx @servicetitan/install --fix --quiet', { 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","packageLock","packages","location","config","getReviewConfiguration","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","execSync","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,"file":"require-compatible-launch-darkly-sdk.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/review/rules/require-compatible-launch-darkly-sdk.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwB,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAMpF,UAAU,SAAS;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,KAAK,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAEzC,qBAAa,gCAAiC,YAAW,WAAW;;IAGhE,IAAI,EAAE,WAEL;IAED,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,GAAG,SAAS;IAiB1D,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO;IAsBzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAkB3B;IAEF,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,2BAA2B;
|
|
1
|
+
{"version":3,"file":"require-compatible-launch-darkly-sdk.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/review/rules/require-compatible-launch-darkly-sdk.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwB,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAMpF,UAAU,SAAS;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,KAAK,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAEzC,qBAAa,gCAAiC,YAAW,WAAW;;IAGhE,IAAI,EAAE,WAEL;IAED,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,GAAG,SAAS;IAiB1D,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO;IAsBzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAkB3B;IAEF,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,2BAA2B;CAOtC"}
|
|
@@ -119,7 +119,7 @@ class RequireCompatibleLaunchDarklySdk {
|
|
|
119
119
|
if (actualVersion && targetVersion && !(0, _semver.satisfies)(actualVersion, targetVersion)) {
|
|
120
120
|
return this.createError({
|
|
121
121
|
message: `project depends on an incompatible version of ${JS_CLIENT_SDK}`,
|
|
122
|
-
location: _class_private_field_get(this, _project).
|
|
122
|
+
location: _class_private_field_get(this, _project).packageManager.lockFileName,
|
|
123
123
|
data: {
|
|
124
124
|
actualVersion,
|
|
125
125
|
targetVersion
|
|
@@ -141,24 +141,18 @@ class RequireCompatibleLaunchDarklySdk {
|
|
|
141
141
|
formatDetails({ actualVersion, targetVersion }) {
|
|
142
142
|
return `${_chalk.default.yellow(actualVersion)} does not match ${targetVersion}`;
|
|
143
143
|
}
|
|
144
|
-
getActualJsClientSdkVersion(
|
|
145
|
-
return this.
|
|
146
|
-
|
|
144
|
+
getActualJsClientSdkVersion(workspacePackage = '') {
|
|
145
|
+
return _class_private_field_get(this, _project).packageManager.getResolvedVersion({
|
|
146
|
+
workspacePackage,
|
|
147
147
|
dependency: JS_CLIENT_SDK
|
|
148
|
-
})
|
|
149
|
-
}
|
|
150
|
-
getResolvedDependency({ packageName, dependency }) {
|
|
151
|
-
var _ref, _ref1;
|
|
152
|
-
const { packages } = _class_private_field_get(this, _project).packageLock;
|
|
153
|
-
return (_ref = (_ref1 = packageName ? packages[`node_modules/${packageName}/node_modules/${dependency}`] : undefined) !== null && _ref1 !== void 0 ? _ref1 : packages[`node_modules/${dependency}`]) !== null && _ref !== void 0 ? _ref : {};
|
|
148
|
+
});
|
|
154
149
|
}
|
|
155
|
-
getTargetJsClientSdkVersion(
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
dependency:
|
|
150
|
+
getTargetJsClientSdkVersion(workspacePackage = '') {
|
|
151
|
+
return _class_private_field_get(this, _project).packageManager.getDeclaredVersion({
|
|
152
|
+
workspacePackage,
|
|
153
|
+
declaredBy: LD_SERVICE,
|
|
154
|
+
dependency: JS_CLIENT_SDK
|
|
160
155
|
});
|
|
161
|
-
return (_dependencies_JS_CLIENT_SDK = dependencies[JS_CLIENT_SDK]) !== null && _dependencies_JS_CLIENT_SDK !== void 0 ? _dependencies_JS_CLIENT_SDK : peerDependencies[JS_CLIENT_SDK];
|
|
162
156
|
}
|
|
163
157
|
constructor(){
|
|
164
158
|
_class_private_field_init(this, _project, {
|
|
@@ -169,8 +163,8 @@ class RequireCompatibleLaunchDarklySdk {
|
|
|
169
163
|
if (!dependencies[JS_CLIENT_SDK]) {
|
|
170
164
|
return;
|
|
171
165
|
}
|
|
172
|
-
const actualVersion = this.getActualJsClientSdkVersion(
|
|
173
|
-
const targetVersion = this.getTargetJsClientSdkVersion(
|
|
166
|
+
const actualVersion = this.getActualJsClientSdkVersion(location);
|
|
167
|
+
const targetVersion = this.getTargetJsClientSdkVersion(location);
|
|
174
168
|
if (actualVersion && targetVersion && !(0, _semver.satisfies)(actualVersion, targetVersion)) {
|
|
175
169
|
return this.createError({
|
|
176
170
|
message: `package "${name}" depends on an incompatible version of ${JS_CLIENT_SDK}`,
|
|
@@ -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(
|
|
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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"}
|
package/dist/cli/commands/review/rules/require-project-version-in-root-node-modules.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"require-project-version-in-root-node-modules.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/review/rules/require-project-version-in-root-node-modules.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAG3E,UAAU,QAAQ;IACd,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,SAAS;IACf,UAAU,EAAE,QAAQ,EAAE,CAAC;CAC1B;AAED,qBAAa,sCAAuC,YAAW,WAAW;IACtE,IAAI,EAAE,WAEL;IAED,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"require-project-version-in-root-node-modules.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/review/rules/require-project-version-in-root-node-modules.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAG3E,UAAU,QAAQ;IACd,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,SAAS;IACf,UAAU,EAAE,QAAQ,EAAE,CAAC;CAC1B;AAED,qBAAa,sCAAuC,YAAW,WAAW;IACtE,IAAI,EAAE,WAEL;IAED,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,SAAS;IAqB1D,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO;IAoCvD,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,eAAe;CAI1B"}
|
|
@@ -24,6 +24,10 @@ class RequireProjectVersionInRootNodeModules {
|
|
|
24
24
|
return 'require-project-version-in-root-node-modules';
|
|
25
25
|
}
|
|
26
26
|
run(project) {
|
|
27
|
+
// pnpm isolates each package's dependencies, so root version mismatches are harmless
|
|
28
|
+
if (project.packageManager.command === 'pnpm') {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
27
31
|
const mismatches = this.findMismatches(project);
|
|
28
32
|
if (!mismatches.length) {
|
|
29
33
|
return;
|
|
@@ -33,7 +37,7 @@ class RequireProjectVersionInRootNodeModules {
|
|
|
33
37
|
message: 'project has unexpected version in root node_modules',
|
|
34
38
|
details: this.formatDetails(mismatches),
|
|
35
39
|
fixable: _types.FixCategory.lockFile,
|
|
36
|
-
location: project.
|
|
40
|
+
location: project.packageManager.lockFileName,
|
|
37
41
|
data: {
|
|
38
42
|
mismatches
|
|
39
43
|
}
|
|
@@ -74,10 +78,11 @@ class RequireProjectVersionInRootNodeModules {
|
|
|
74
78
|
});
|
|
75
79
|
}
|
|
76
80
|
findMismatches(project) {
|
|
77
|
-
const { packageLock } = project;
|
|
78
81
|
return this.getDependencies(project).reduce((result, [name, versions])=>{
|
|
79
|
-
|
|
80
|
-
|
|
82
|
+
const rootVersion = project.packageManager.getResolvedVersion({
|
|
83
|
+
workspacePackage: '',
|
|
84
|
+
dependency: name
|
|
85
|
+
});
|
|
81
86
|
if (rootVersion) {
|
|
82
87
|
const projectVersions = Object.keys(versions);
|
|
83
88
|
if (!projectVersions.some((version)=>(0, _semver.satisfies)(rootVersion, version))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/require-project-version-in-root-node-modules.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { execSync } from 'child_process';\nimport { satisfies } from 'semver';\nimport { log } from '../../../../utils';\nimport { FixCategory, PackageError, PackageRule, Project } from '../types';\nimport { applyFilter, getKey, getMaxVersion } from '../utils';\n\ninterface Mismatch {\n name: string;\n projectVersions: string[];\n rootVersion: string;\n}\n\ninterface ErrorData {\n mismatches: Mismatch[];\n}\n\nexport class RequireProjectVersionInRootNodeModules implements PackageRule {\n get id() {\n return 'require-project-version-in-root-node-modules';\n }\n\n run(project: Project): PackageError<ErrorData> | undefined {\n const mismatches = this.findMismatches(project);\n if (!mismatches.length) {\n return;\n }\n\n return {\n id: this.id,\n message: 'project has unexpected version in root node_modules',\n details: this.formatDetails(mismatches),\n fixable: FixCategory.lockFile,\n location: project.
|
|
1
|
+
{"version":3,"sources":["../../../../../src/cli/commands/review/rules/require-project-version-in-root-node-modules.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { execSync } from 'child_process';\nimport { satisfies } from 'semver';\nimport { log } from '../../../../utils';\nimport { FixCategory, PackageError, PackageRule, Project } from '../types';\nimport { applyFilter, getKey, getMaxVersion } from '../utils';\n\ninterface Mismatch {\n name: string;\n projectVersions: string[];\n rootVersion: string;\n}\n\ninterface ErrorData {\n mismatches: Mismatch[];\n}\n\nexport class RequireProjectVersionInRootNodeModules implements PackageRule {\n get id() {\n return 'require-project-version-in-root-node-modules';\n }\n\n run(project: Project): PackageError<ErrorData> | undefined {\n // pnpm isolates each package's dependencies, so root version mismatches are harmless\n if (project.packageManager.command === 'pnpm') {\n return;\n }\n\n const mismatches = this.findMismatches(project);\n if (!mismatches.length) {\n return;\n }\n\n return {\n id: this.id,\n message: 'project has unexpected version in root node_modules',\n details: this.formatDetails(mismatches),\n fixable: FixCategory.lockFile,\n location: project.packageManager.lockFileName,\n data: { mismatches },\n };\n }\n\n fix({ data }: PackageError<ErrorData>, project: Project) {\n const { mismatches } = data ?? {};\n if (!mismatches) {\n return;\n }\n\n const root = project.packages.find(({ location }) => location === '.');\n if (!root) {\n return;\n }\n\n const dependencies = mismatches.reduce<Record<string, string>>(\n (result, { name, projectVersions }) => {\n if (!getKey(root, name)) {\n result[name] = getMaxVersion(projectVersions);\n }\n return result;\n },\n {}\n );\n\n const entries = Object.entries(dependencies);\n if (entries.length === 0) {\n return;\n }\n\n /* istanbul ignore next: debug only */\n log.debug(`review:${this.id}`, () => JSON.stringify(dependencies, null, 2));\n\n [\n ...entries.map(([name, version]) => `npm pkg set dependencies[\"${name}\"]=\"${version}\"`),\n 'npx @servicetitan/install --fix --quiet',\n ...entries.map(([name]) => `npm pkg delete dependencies[\"${name}\"]`),\n ].forEach(command => execSync(command, { stdio: 'inherit' }));\n }\n\n private formatDetails(mismatches: Mismatch[]) {\n return mismatches.map(({ name, projectVersions, rootVersion }) => {\n const pkg = chalk.yellow(`${name}@${rootVersion}`);\n return `${pkg} does not match ${chalk.yellow(projectVersions.join(', '))}`;\n });\n }\n\n private findMismatches(project: Project) {\n return this.getDependencies(project).reduce((result, [name, versions]) => {\n const rootVersion = project.packageManager.getResolvedVersion({\n workspacePackage: '',\n dependency: name,\n });\n if (rootVersion) {\n const projectVersions = Object.keys(versions);\n if (!projectVersions.some(version => satisfies(rootVersion, version))) {\n result.push({ name, projectVersions, rootVersion });\n }\n }\n return result;\n }, [] as Mismatch[]);\n }\n\n private getDependencies({ config, dependencies }: Project) {\n const ruleConfig = config.rules?.[this.id];\n return applyFilter(ruleConfig, Object.entries(dependencies), ([name]) => name);\n }\n}\n"],"names":["RequireProjectVersionInRootNodeModules","id","run","project","packageManager","command","mismatches","findMismatches","length","message","details","formatDetails","fixable","FixCategory","lockFile","location","lockFileName","data","fix","root","packages","find","dependencies","reduce","result","name","projectVersions","getKey","getMaxVersion","entries","Object","log","debug","JSON","stringify","map","version","forEach","execSync","stdio","rootVersion","pkg","chalk","yellow","join","getDependencies","versions","getResolvedVersion","workspacePackage","dependency","keys","some","satisfies","push","config","ruleConfig","rules","applyFilter"],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PackageManager } from '@servicetitan/install';
|
|
1
2
|
export declare abstract class PackageRule {
|
|
2
3
|
abstract get id(): string;
|
|
3
4
|
abstract run(project: Project): PackageError | PackageError[] | undefined;
|
|
@@ -6,14 +7,7 @@ export declare abstract class PackageRule {
|
|
|
6
7
|
export interface Project {
|
|
7
8
|
config: ReviewConfiguration;
|
|
8
9
|
dependencies: Dependencies;
|
|
9
|
-
|
|
10
|
-
packages: Record<string, {
|
|
11
|
-
version: string;
|
|
12
|
-
dependencies?: Record<string, string>;
|
|
13
|
-
peerDependencies?: Record<string, string>;
|
|
14
|
-
}>;
|
|
15
|
-
location: string;
|
|
16
|
-
};
|
|
10
|
+
packageManager: PackageManager;
|
|
17
11
|
packages: Package[];
|
|
18
12
|
}
|
|
19
13
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/review/types.ts"],"names":[],"mappings":"AAAA,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;
|
|
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,GACvB,KAAK,GACL,CAAC,KAAK,CAAC,GACP,CAAC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAEjE,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/cli/commands/review/types.ts"],"sourcesContent":["
|
|
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\n | [Level]\n | [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"}
|
|
@@ -5,10 +5,7 @@ export * from './cli-git';
|
|
|
5
5
|
export * from './cli-npm';
|
|
6
6
|
export * from './cli-os';
|
|
7
7
|
export * from './compile';
|
|
8
|
-
export * from './compile-less';
|
|
9
|
-
export * from './compile-sass';
|
|
10
8
|
export * from './constants';
|
|
11
|
-
export * from './copy-files';
|
|
12
9
|
export * from './eslint';
|
|
13
10
|
export * from './get-module-type';
|
|
14
11
|
export * from './is-module-installed';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAW1B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AAEnC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
|
package/dist/cli/utils/index.js
CHANGED
|
@@ -9,10 +9,7 @@ _export_star(require("./cli-git"), exports);
|
|
|
9
9
|
_export_star(require("./cli-npm"), exports);
|
|
10
10
|
_export_star(require("./cli-os"), exports);
|
|
11
11
|
_export_star(require("./compile"), exports);
|
|
12
|
-
_export_star(require("./compile-less"), exports);
|
|
13
|
-
_export_star(require("./compile-sass"), exports);
|
|
14
12
|
_export_star(require("./constants"), exports);
|
|
15
|
-
_export_star(require("./copy-files"), exports);
|
|
16
13
|
_export_star(require("./eslint"), exports);
|
|
17
14
|
_export_star(require("./get-module-type"), exports);
|
|
18
15
|
_export_star(require("./is-module-installed"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/utils/index.ts"],"sourcesContent":["export * from './bundle';\nexport * from './check-args';\nexport * from './check-startup-location';\nexport * from './cli-git';\nexport * from './cli-npm';\nexport * from './cli-os';\nexport * from './compile';\
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/utils/index.ts"],"sourcesContent":["export * from './bundle';\nexport * from './check-args';\nexport * from './check-startup-location';\nexport * from './cli-git';\nexport * from './cli-npm';\nexport * from './cli-os';\nexport * from './compile';\n/*\n * These modules eagerly load heavy dependencies (less, sass). Importing them\n * from the barrel causes every test that touches cli/utils to pay that cost\n * and spams \"Less has finished and no sheets were loaded\" in test output.\n * Import directly from the module instead (e.g., import { copyFiles } from './copy-files').\n *\n * export * from './compile-less';\n * export * from './compile-sass';\n * export * from './copy-files';\n */\nexport * from './constants';\nexport * from './eslint';\nexport * from './get-module-type';\nexport * from './is-module-installed';\nexport * from './is-tty';\nexport * from './lerna-exec';\nexport * from './maybe-create-git-folder';\nexport * from './pipe-stdout';\nexport * from './process-tree';\nexport * from './publish';\nexport * from './set-node-options';\n// Don't export ./stylelint, it breaks tests using the default \"jsdom\" environment\nexport * from './ts-config';\nexport * from './type-check';\nexport * from './watch-stdout';\n"],"names":[],"mappings":";;;;qBAAc;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAWA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBACA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cypress/config/webpack-config.ts"],"sourcesContent":["import { inspect } from 'node:util';\nimport type { Configuration } from 'webpack';\nimport merge from 'webpack-merge';\nimport { getSwcOptions } from '../../cli/tasks';\nimport { TSConfig } from '../../cli/utils';\nimport { getTsConfigWithFallback, log } from '../../utils';\nimport { Context, Overrides, rulesConfig } from '../../webpack/configs';\n\nexport function webpackConfig(overrides?: Overrides): Configuration {\n const context = getContext();\n const rules = getRules(context, overrides ?? {});\n\n /* istanbul ignore next: debug only */\n log.debug('cypress-config:webpack-config', () => inspect({ rules }, { depth: null }));\n\n const config: Configuration = {\n module: {\n rules,\n },\n resolve: {\n extensions: ['.ts', '.tsx', '.js', '.jsx'],\n },\n };\n\n return merge(config, overrides?.configuration ?? {});\n}\n\nfunction getContext(): Context {\n return {\n
|
|
1
|
+
{"version":3,"sources":["../../../src/cypress/config/webpack-config.ts"],"sourcesContent":["import { inspect } from 'node:util';\nimport type { Configuration } from 'webpack';\nimport merge from 'webpack-merge';\nimport { getSwcOptions } from '../../cli/tasks';\nimport { TSConfig } from '../../cli/utils';\nimport { getTsConfigWithFallback, log } from '../../utils';\nimport { Context, Overrides, rulesConfig } from '../../webpack/configs';\n\nexport function webpackConfig(overrides?: Overrides): Configuration {\n const context = getContext();\n const rules = getRules(context, overrides ?? {});\n\n /* istanbul ignore next: debug only */\n log.debug('cypress-config:webpack-config', () => inspect({ rules }, { depth: null }));\n\n const config: Configuration = {\n module: {\n rules,\n },\n resolve: {\n extensions: ['.ts', '.tsx', '.js', '.jsx'],\n },\n };\n\n return merge(config, overrides?.configuration ?? {});\n}\n\nfunction getContext(): Context {\n return {\n destination: '',\n isProduction: false,\n name: '',\n packageData: {} as any,\n sharedDependencies: {},\n source: '',\n };\n}\n\nfunction getRules(context: Context, overrides: Overrides) {\n const { rules } = rulesConfig(context, overrides);\n\n return [getSwcLoaderRule(), ...rules];\n}\n\nfunction getSwcLoaderRule() {\n const tsConfig = new TSConfig(getTsConfigWithFallback());\n\n const swcOptions = getSwcOptions(tsConfig);\n\n return {\n test: /\\.tsx?$/,\n exclude: /node_modules/,\n use: {\n loader: 'swc-loader',\n options: swcOptions,\n },\n };\n}\n"],"names":["webpackConfig","overrides","context","getContext","rules","getRules","log","debug","inspect","depth","config","module","resolve","extensions","merge","configuration","destination","isProduction","name","packageData","sharedDependencies","source","rulesConfig","getSwcLoaderRule","tsConfig","TSConfig","getTsConfigWithFallback","swcOptions","getSwcOptions","test","exclude","use","loader","options"],"mappings":";;;;+BAQgBA;;;eAAAA;;;0BARQ;qEAEN;uBACY;uBACL;wBACoB;yBACG;;;;;;AAEzC,SAASA,cAAcC,SAAqB;;IAC/C,MAAMC,UAAUC;IAChB,MAAMC,QAAQC,SAASH,SAASD,sBAAAA,uBAAAA,YAAa,CAAC;IAE9C,oCAAoC,GACpCK,WAAG,CAACC,KAAK,CAAC,iCAAiC,IAAMC,IAAAA,iBAAO,EAAC;YAAEJ;QAAM,GAAG;YAAEK,OAAO;QAAK;IAElF,MAAMC,SAAwB;QAC1BC,QAAQ;YACJP;QACJ;QACAQ,SAAS;YACLC,YAAY;gBAAC;gBAAO;gBAAQ;gBAAO;aAAO;QAC9C;IACJ;IAEA,OAAOC,IAAAA,qBAAK,EAACJ,gBAAQT,sBAAAA,gCAAAA,UAAWc,aAAa,uCAAI,CAAC;AACtD;AAEA,SAASZ;IACL,OAAO;QACHa,aAAa;QACbC,cAAc;QACdC,MAAM;QACNC,aAAa,CAAC;QACdC,oBAAoB,CAAC;QACrBC,QAAQ;IACZ;AACJ;AAEA,SAAShB,SAASH,OAAgB,EAAED,SAAoB;IACpD,MAAM,EAAEG,KAAK,EAAE,GAAGkB,IAAAA,oBAAW,EAACpB,SAASD;IAEvC,OAAO;QAACsB;WAAuBnB;KAAM;AACzC;AAEA,SAASmB;IACL,MAAMC,WAAW,IAAIC,eAAQ,CAACC,IAAAA,+BAAuB;IAErD,MAAMC,aAAaC,IAAAA,oBAAa,EAACJ;IAEjC,OAAO;QACHK,MAAM;QACNC,SAAS;QACTC,KAAK;YACDC,QAAQ;YACRC,SAASN;QACb;IACJ;AACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webpack-final.d.ts","sourceRoot":"","sources":["../../src/storybook-config/webpack-final.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAW,SAAS,EAAe,MAAM,oBAAoB,CAAC;AAGrE,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,GAAE,SAAc,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"webpack-final.d.ts","sourceRoot":"","sources":["../../src/storybook-config/webpack-final.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAW,SAAS,EAAe,MAAM,oBAAoB,CAAC;AAGrE,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,GAAE,SAAc,GAAG,aAAa,CAgB5F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/storybook-config/webpack-final.ts"],"sourcesContent":["import { inspect } from 'node:util';\nimport type { Configuration } from 'webpack';\nimport { log } from '../utils';\nimport { Context, Overrides, rulesConfig } from '../webpack/configs';\nimport { miniCssExtractPlugin } from '../webpack/configs/plugins';\n\nexport function webpackFinal(config: Configuration, overrides: Overrides = {}): Configuration {\n const context = getContext(config);\n const rules = getRules(context, overrides);\n const plugins = getPlugins(context, overrides);\n\n /* istanbul ignore next: debug only */\n log.debug('storybook-config:webpack-final', () => inspect({ rules, plugins }, { depth: null }));\n\n return {\n ...config,\n
|
|
1
|
+
{"version":3,"sources":["../../src/storybook-config/webpack-final.ts"],"sourcesContent":["import { inspect } from 'node:util';\nimport type { Configuration } from 'webpack';\nimport { log } from '../utils';\nimport { Context, Overrides, rulesConfig } from '../webpack/configs';\nimport { miniCssExtractPlugin } from '../webpack/configs/plugins';\n\nexport function webpackFinal(config: Configuration, overrides: Overrides = {}): Configuration {\n const context = getContext(config);\n const rules = getRules(context, overrides);\n const plugins = getPlugins(context, overrides);\n\n /* istanbul ignore next: debug only */\n log.debug('storybook-config:webpack-final', () => inspect({ rules, plugins }, { depth: null }));\n\n return {\n ...config,\n module: {\n ...config.module,\n rules: [...transformDefaultRules(config.module?.rules), ...rules],\n },\n plugins: [...(config.plugins ?? []), ...plugins],\n };\n}\n\nfunction getContext(config: Configuration): Context {\n return {\n destination: '',\n isProduction: config.mode === 'production',\n name: '',\n packageData: {} as any,\n sharedDependencies: {},\n source: '',\n };\n}\n\nfunction getPlugins(context: Context, overrides: Overrides) {\n return [miniCssExtractPlugin(context, overrides)].filter(plugin => !!plugin);\n}\n\nfunction getRules(context: Context, overrides: Overrides) {\n const include = ['.module.css', '.module.less', '.less', '.module.scss', '.scss', '.svg'];\n const exclude = ['.css'];\n\n const { rules } = rulesConfig(context, overrides);\n\n return rules.filter(\n ({ test }) =>\n !(test instanceof RegExp) ||\n include.some(ext => test.exec(ext) && !exclude.some(ext => test.exec(ext)))\n );\n}\n\nfunction transformDefaultRules(rules: NonNullable<Configuration['module']>['rules'] = []) {\n const result = rules.map(rule => {\n if (rule && typeof rule === 'object' && rule.test instanceof RegExp) {\n if (rule.test.test('.css')) {\n return { ...rule, exclude: /\\.module.css$/ };\n }\n if (rule.test.test('.svg')) {\n return { ...rule, exclude: /\\.svg$/i };\n }\n }\n return rule;\n });\n\n /* istanbul ignore next: debug only */\n log.debug('storybook-config:transform-default-rules', () =>\n inspect({ result }, { depth: null })\n );\n\n return result;\n}\n"],"names":["webpackFinal","config","overrides","context","getContext","rules","getRules","plugins","getPlugins","log","debug","inspect","depth","module","transformDefaultRules","destination","isProduction","mode","name","packageData","sharedDependencies","source","miniCssExtractPlugin","filter","plugin","include","exclude","rulesConfig","test","RegExp","some","ext","exec","result","map","rule"],"mappings":";;;;+BAMgBA;;;eAAAA;;;0BANQ;uBAEJ;yBAC4B;yBACX;AAE9B,SAASA,aAAaC,MAAqB,EAAEC,YAAuB,CAAC,CAAC;QAcvDD;QAFuBA;IAXzC,MAAME,UAAUC,WAAWH;IAC3B,MAAMI,QAAQC,SAASH,SAASD;IAChC,MAAMK,UAAUC,WAAWL,SAASD;IAEpC,oCAAoC,GACpCO,UAAG,CAACC,KAAK,CAAC,kCAAkC,IAAMC,IAAAA,iBAAO,EAAC;YAAEN;YAAOE;QAAQ,GAAG;YAAEK,OAAO;QAAK;IAE5F,OAAO;QACH,GAAGX,MAAM;QACTY,QAAQ;YACJ,GAAGZ,OAAOY,MAAM;YAChBR,OAAO;mBAAIS,uBAAsBb,iBAAAA,OAAOY,MAAM,cAAbZ,qCAAAA,eAAeI,KAAK;mBAAMA;aAAM;QACrE;QACAE,SAAS;gBAAKN,kBAAAA,OAAOM,OAAO,cAAdN,6BAAAA,kBAAkB,EAAE;eAAMM;SAAQ;IACpD;AACJ;AAEA,SAASH,WAAWH,MAAqB;IACrC,OAAO;QACHc,aAAa;QACbC,cAAcf,OAAOgB,IAAI,KAAK;QAC9BC,MAAM;QACNC,aAAa,CAAC;QACdC,oBAAoB,CAAC;QACrBC,QAAQ;IACZ;AACJ;AAEA,SAASb,WAAWL,OAAgB,EAAED,SAAoB;IACtD,OAAO;QAACoB,IAAAA,6BAAoB,EAACnB,SAASD;KAAW,CAACqB,MAAM,CAACC,CAAAA,SAAU,CAAC,CAACA;AACzE;AAEA,SAASlB,SAASH,OAAgB,EAAED,SAAoB;IACpD,MAAMuB,UAAU;QAAC;QAAe;QAAgB;QAAS;QAAgB;QAAS;KAAO;IACzF,MAAMC,UAAU;QAAC;KAAO;IAExB,MAAM,EAAErB,KAAK,EAAE,GAAGsB,IAAAA,oBAAW,EAACxB,SAASD;IAEvC,OAAOG,MAAMkB,MAAM,CACf,CAAC,EAAEK,IAAI,EAAE,GACL,CAAEA,CAAAA,gBAAgBC,MAAK,KACvBJ,QAAQK,IAAI,CAACC,CAAAA,MAAOH,KAAKI,IAAI,CAACD,QAAQ,CAACL,QAAQI,IAAI,CAACC,CAAAA,MAAOH,KAAKI,IAAI,CAACD;AAEjF;AAEA,SAASjB,sBAAsBT,QAAuD,EAAE;IACpF,MAAM4B,SAAS5B,MAAM6B,GAAG,CAACC,CAAAA;QACrB,IAAIA,QAAQ,OAAOA,SAAS,YAAYA,KAAKP,IAAI,YAAYC,QAAQ;YACjE,IAAIM,KAAKP,IAAI,CAACA,IAAI,CAAC,SAAS;gBACxB,OAAO;oBAAE,GAAGO,IAAI;oBAAET,SAAS;gBAAgB;YAC/C;YACA,IAAIS,KAAKP,IAAI,CAACA,IAAI,CAAC,SAAS;gBACxB,OAAO;oBAAE,GAAGO,IAAI;oBAAET,SAAS;gBAAU;YACzC;QACJ;QACA,OAAOS;IACX;IAEA,oCAAoC,GACpC1B,UAAG,CAACC,KAAK,CAAC,4CAA4C,IAClDC,IAAAA,iBAAO,EAAC;YAAEsB;QAAO,GAAG;YAAErB,OAAO;QAAK;IAGtC,OAAOqB;AACX"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns default exclusions applied to both test running and coverage
|
|
3
|
+
* collection in Jest and Vitest.
|
|
4
|
+
*
|
|
5
|
+
* Patterns use regex syntax (for Jest testPathIgnorePatterns /
|
|
6
|
+
* coveragePathIgnorePatterns) and double as substring matches in Vitest's
|
|
7
|
+
* micromatch-based exclude / coverage.exclude.
|
|
8
|
+
*
|
|
9
|
+
* Destination folders (compiled output dirs from each package's tsconfig
|
|
10
|
+
* outDir) are included so that dist/ files are excluded from tests and
|
|
11
|
+
* coverage across all runners.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getDefaultExcludes(): string[];
|
|
14
|
+
//# sourceMappingURL=default-excludes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-excludes.d.ts","sourceRoot":"","sources":["../../src/utils/default-excludes.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAS7C"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "getDefaultExcludes", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return getDefaultExcludes;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _getdestinationfolders = require("./get-destination-folders");
|
|
12
|
+
function getDefaultExcludes() {
|
|
13
|
+
return [
|
|
14
|
+
'__mocks__',
|
|
15
|
+
'\\.stories\\.',
|
|
16
|
+
'\\.yalc',
|
|
17
|
+
'\\.claude',
|
|
18
|
+
'\\.d\\.ts',
|
|
19
|
+
...(0, _getdestinationfolders.getDestinationFolders)()
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=default-excludes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/default-excludes.ts"],"sourcesContent":["import { getDestinationFolders } from './get-destination-folders';\n\n/**\n * Returns default exclusions applied to both test running and coverage\n * collection in Jest and Vitest.\n *\n * Patterns use regex syntax (for Jest testPathIgnorePatterns /\n * coveragePathIgnorePatterns) and double as substring matches in Vitest's\n * micromatch-based exclude / coverage.exclude.\n *\n * Destination folders (compiled output dirs from each package's tsconfig\n * outDir) are included so that dist/ files are excluded from tests and\n * coverage across all runners.\n */\nexport function getDefaultExcludes(): string[] {\n return [\n '__mocks__',\n '\\\\.stories\\\\.',\n '\\\\.yalc',\n '\\\\.claude',\n '\\\\.d\\\\.ts',\n ...getDestinationFolders(),\n ];\n}\n"],"names":["getDefaultExcludes","getDestinationFolders"],"mappings":";;;;+BAcgBA;;;eAAAA;;;uCAdsB;AAc/B,SAASA;IACZ,OAAO;QACH;QACA;QACA;QACA;QACA;WACGC,IAAAA,4CAAqB;KAC3B;AACL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-packages.d.ts","sourceRoot":"","sources":["../../src/utils/find-packages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"find-packages.d.ts","sourceRoot":"","sources":["../../src/utils/find-packages.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAe,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,YAAY,IAAI,cAAc,EAAE,CAwB/C"}
|
|
@@ -8,7 +8,9 @@ Object.defineProperty(exports, "findPackages", {
|
|
|
8
8
|
return findPackages;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
+
const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
11
12
|
const _glob = require("glob");
|
|
13
|
+
const _jsyaml = /*#__PURE__*/ _interop_require_default(require("js-yaml"));
|
|
12
14
|
const _multimatch = /*#__PURE__*/ _interop_require_default(require("multimatch"));
|
|
13
15
|
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
14
16
|
const _findup = require("./find-up");
|
|
@@ -41,6 +43,12 @@ function findWorkspaces() {
|
|
|
41
43
|
const packageJson = _path.default.resolve(_path.default.join(directory, 'package.json'));
|
|
42
44
|
_log.log.debug('find-packages', `reading: ${packageJson}`);
|
|
43
45
|
let workspaces = (_readJsonSafe = (0, _readjson.readJsonSafe)(packageJson)) === null || _readJsonSafe === void 0 ? void 0 : _readJsonSafe.workspaces;
|
|
46
|
+
if (!workspaces) {
|
|
47
|
+
var _readYamlSafe;
|
|
48
|
+
const pnpmWorkspace = _path.default.resolve(_path.default.join(directory, 'pnpm-workspace.yaml'));
|
|
49
|
+
_log.log.debug('find-packages', `reading: ${pnpmWorkspace}`);
|
|
50
|
+
workspaces = (_readYamlSafe = readYamlSafe(pnpmWorkspace)) === null || _readYamlSafe === void 0 ? void 0 : _readYamlSafe.packages;
|
|
51
|
+
}
|
|
44
52
|
if (!workspaces) {
|
|
45
53
|
var _readJsonSafe1;
|
|
46
54
|
const lernaJson = _path.default.resolve(_path.default.join(directory, 'lerna.json'));
|
|
@@ -58,5 +66,12 @@ function findWorkspaces() {
|
|
|
58
66
|
}
|
|
59
67
|
});
|
|
60
68
|
}
|
|
69
|
+
function readYamlSafe(filePath) {
|
|
70
|
+
try {
|
|
71
|
+
return _jsyaml.default.load(_fs.default.readFileSync(filePath, 'utf-8'));
|
|
72
|
+
} catch (unused) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
61
76
|
|
|
62
77
|
//# sourceMappingURL=find-packages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/find-packages.ts"],"sourcesContent":["import { globSync } from 'glob';\nimport multimatch from 'multimatch';\nimport path from 'path';\nimport { findUp } from './find-up';\nimport { log } from './log';\nimport { readJsonSafe } from './read-json';\n\nexport interface ProjectPackage extends Record<string, any> {\n name: string;\n location: string;\n version: string;\n}\n\nexport function findPackages(): ProjectPackage[] {\n const workspaces = findWorkspaces();\n if (!workspaces) {\n return [];\n }\n\n const result = multimatch(\n workspaces.flatMap(pattern => globSync(pattern)),\n workspaces\n )\n .map(location => {\n const dir = path.resolve(location);\n const file = path.join(dir, 'package.json');\n return { ...readJsonSafe<ProjectPackage>(file), location: dir };\n })\n .filter(({ name }) => name !== undefined) as ProjectPackage[];\n\n /* istanbul ignore next: debug only */\n log.debug(\n 'find-packages',\n () => `found packages: ${JSON.stringify(result.map(({ name }) => name))}`\n );\n\n return result;\n}\n\nfunction findWorkspaces() {\n return findUp(directory => {\n const packageJson = path.resolve(path.join(directory, 'package.json'));\n\n log.debug('find-packages', `reading: ${packageJson}`);\n let workspaces = readJsonSafe<{ workspaces: string[] }>(packageJson)?.workspaces;\n\n if (!workspaces) {\n const lernaJson = path.resolve(path.join(directory, 'lerna.json'));\n log.debug('find-packages', `reading: ${lernaJson}`);\n workspaces = readJsonSafe<{ packages: string[] }>(lernaJson)?.packages;\n }\n\n if (workspaces) {\n workspaces = workspaces.map(workspace => {\n const result = workspace.startsWith('!')\n ? `!${path.join(directory, workspace.slice(1))}`\n : path.join(directory, workspace);\n // Note, glob requires \"/\" as path separator, even on Windows\n return result.replace(/\\\\/g, '/');\n });\n /* istanbul ignore next: debug only */\n log.debug('find-packages', () => `found workspaces: ${JSON.stringify(workspaces)}`);\n return workspaces;\n }\n });\n}\n"],"names":["findPackages","workspaces","findWorkspaces","result","multimatch","flatMap","pattern","globSync","map","location","dir","path","resolve","file","join","readJsonSafe","filter","name","undefined","log","debug","JSON","stringify","findUp","directory","packageJson","
|
|
1
|
+
{"version":3,"sources":["../../src/utils/find-packages.ts"],"sourcesContent":["import fs from 'fs';\nimport { globSync } from 'glob';\nimport yaml from 'js-yaml';\nimport multimatch from 'multimatch';\nimport path from 'path';\nimport { findUp } from './find-up';\nimport { log } from './log';\nimport { readJsonSafe } from './read-json';\n\nexport interface ProjectPackage extends Record<string, any> {\n name: string;\n location: string;\n version: string;\n}\n\nexport function findPackages(): ProjectPackage[] {\n const workspaces = findWorkspaces();\n if (!workspaces) {\n return [];\n }\n\n const result = multimatch(\n workspaces.flatMap(pattern => globSync(pattern)),\n workspaces\n )\n .map(location => {\n const dir = path.resolve(location);\n const file = path.join(dir, 'package.json');\n return { ...readJsonSafe<ProjectPackage>(file), location: dir };\n })\n .filter(({ name }) => name !== undefined) as ProjectPackage[];\n\n /* istanbul ignore next: debug only */\n log.debug(\n 'find-packages',\n () => `found packages: ${JSON.stringify(result.map(({ name }) => name))}`\n );\n\n return result;\n}\n\nfunction findWorkspaces() {\n return findUp(directory => {\n const packageJson = path.resolve(path.join(directory, 'package.json'));\n\n log.debug('find-packages', `reading: ${packageJson}`);\n let workspaces = readJsonSafe<{ workspaces: string[] }>(packageJson)?.workspaces;\n\n if (!workspaces) {\n const pnpmWorkspace = path.resolve(path.join(directory, 'pnpm-workspace.yaml'));\n log.debug('find-packages', `reading: ${pnpmWorkspace}`);\n workspaces = readYamlSafe<{ packages: string[] }>(pnpmWorkspace)?.packages;\n }\n\n if (!workspaces) {\n const lernaJson = path.resolve(path.join(directory, 'lerna.json'));\n log.debug('find-packages', `reading: ${lernaJson}`);\n workspaces = readJsonSafe<{ packages: string[] }>(lernaJson)?.packages;\n }\n\n if (workspaces) {\n workspaces = workspaces.map(workspace => {\n const result = workspace.startsWith('!')\n ? `!${path.join(directory, workspace.slice(1))}`\n : path.join(directory, workspace);\n // Note, glob requires \"/\" as path separator, even on Windows\n return result.replace(/\\\\/g, '/');\n });\n /* istanbul ignore next: debug only */\n log.debug('find-packages', () => `found workspaces: ${JSON.stringify(workspaces)}`);\n return workspaces;\n }\n });\n}\n\nfunction readYamlSafe<T>(filePath: string): T | undefined {\n try {\n return yaml.load(fs.readFileSync(filePath, 'utf-8')) as T;\n } catch {\n return undefined;\n }\n}\n"],"names":["findPackages","workspaces","findWorkspaces","result","multimatch","flatMap","pattern","globSync","map","location","dir","path","resolve","file","join","readJsonSafe","filter","name","undefined","log","debug","JSON","stringify","findUp","directory","packageJson","readYamlSafe","pnpmWorkspace","packages","lernaJson","workspace","startsWith","slice","replace","filePath","yaml","load","fs","readFileSync"],"mappings":";;;;+BAegBA;;;eAAAA;;;2DAfD;sBACU;+DACR;mEACM;6DACN;wBACM;qBACH;0BACS;;;;;;AAQtB,SAASA;IACZ,MAAMC,aAAaC;IACnB,IAAI,CAACD,YAAY;QACb,OAAO,EAAE;IACb;IAEA,MAAME,SAASC,IAAAA,mBAAU,EACrBH,WAAWI,OAAO,CAACC,CAAAA,UAAWC,IAAAA,cAAQ,EAACD,WACvCL,YAECO,GAAG,CAACC,CAAAA;QACD,MAAMC,MAAMC,aAAI,CAACC,OAAO,CAACH;QACzB,MAAMI,OAAOF,aAAI,CAACG,IAAI,CAACJ,KAAK;QAC5B,OAAO;YAAE,GAAGK,IAAAA,sBAAY,EAAiBF,KAAK;YAAEJ,UAAUC;QAAI;IAClE,GACCM,MAAM,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAASC;IAEnC,oCAAoC,GACpCC,QAAG,CAACC,KAAK,CACL,iBACA,IAAM,CAAC,gBAAgB,EAAEC,KAAKC,SAAS,CAACnB,OAAOK,GAAG,CAAC,CAAC,EAAES,IAAI,EAAE,GAAKA,QAAQ;IAG7E,OAAOd;AACX;AAEA,SAASD;IACL,OAAOqB,IAAAA,cAAM,EAACC,CAAAA;YAIOT;QAHjB,MAAMU,cAAcd,aAAI,CAACC,OAAO,CAACD,aAAI,CAACG,IAAI,CAACU,WAAW;QAEtDL,QAAG,CAACC,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAEK,aAAa;QACpD,IAAIxB,cAAac,gBAAAA,IAAAA,sBAAY,EAA2BU,0BAAvCV,oCAAAA,cAAqDd,UAAU;QAEhF,IAAI,CAACA,YAAY;gBAGAyB;YAFb,MAAMC,gBAAgBhB,aAAI,CAACC,OAAO,CAACD,aAAI,CAACG,IAAI,CAACU,WAAW;YACxDL,QAAG,CAACC,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAEO,eAAe;YACtD1B,cAAayB,gBAAAA,aAAqCC,4BAArCD,oCAAAA,cAAqDE,QAAQ;QAC9E;QAEA,IAAI,CAAC3B,YAAY;gBAGAc;YAFb,MAAMc,YAAYlB,aAAI,CAACC,OAAO,CAACD,aAAI,CAACG,IAAI,CAACU,WAAW;YACpDL,QAAG,CAACC,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAES,WAAW;YAClD5B,cAAac,iBAAAA,IAAAA,sBAAY,EAAyBc,wBAArCd,qCAAAA,eAAiDa,QAAQ;QAC1E;QAEA,IAAI3B,YAAY;YACZA,aAAaA,WAAWO,GAAG,CAACsB,CAAAA;gBACxB,MAAM3B,SAAS2B,UAAUC,UAAU,CAAC,OAC9B,CAAC,CAAC,EAAEpB,aAAI,CAACG,IAAI,CAACU,WAAWM,UAAUE,KAAK,CAAC,KAAK,GAC9CrB,aAAI,CAACG,IAAI,CAACU,WAAWM;gBAC3B,6DAA6D;gBAC7D,OAAO3B,OAAO8B,OAAO,CAAC,OAAO;YACjC;YACA,oCAAoC,GACpCd,QAAG,CAACC,KAAK,CAAC,iBAAiB,IAAM,CAAC,kBAAkB,EAAEC,KAAKC,SAAS,CAACrB,aAAa;YAClF,OAAOA;QACX;IACJ;AACJ;AAEA,SAASyB,aAAgBQ,QAAgB;IACrC,IAAI;QACA,OAAOC,eAAI,CAACC,IAAI,CAACC,WAAE,CAACC,YAAY,CAACJ,UAAU;IAC/C,EAAE,eAAM;QACJ,OAAOhB;IACX;AACJ"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns a webpack `resolve.alias` map that redirects workspace package imports
|
|
3
|
+
* to their TypeScript source directories when building with code coverage enabled.
|
|
4
|
+
*
|
|
5
|
+
* For each workspace package that declares a `main` entry point, this function:
|
|
6
|
+
* 1. Reads `compilerOptions.rootDir` from the package's tsconfig
|
|
7
|
+
* 2. Builds an alias from the package name to its resolved source root directory
|
|
8
|
+
*
|
|
9
|
+
* This ensures that the coverage-istanbul-loader instruments the original TypeScript
|
|
10
|
+
* source files (rather than compiled `dist/*.js` output), so coverage data contains
|
|
11
|
+
* correct `src/` file paths and TypeScript source positions — matching what jest and
|
|
12
|
+
* vitest produce.
|
|
13
|
+
*
|
|
14
|
+
* Only packages with both a `main` field and a tsconfig `compilerOptions.rootDir`
|
|
15
|
+
* are included. Packages without `main` (e.g. webpack bundle apps) are skipped
|
|
16
|
+
* since they are not imported by other packages and need no alias.
|
|
17
|
+
*
|
|
18
|
+
* Example: for a package `@scope/common` at `packages/common` with
|
|
19
|
+
* `tsconfig.json` containing `{ "compilerOptions": { "rootDir": "src" } }`,
|
|
20
|
+
* the returned alias is `{ "@scope/common": "/abs/path/packages/common/src" }`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getCoverageAliases(): Record<string, string>;
|
|
23
|
+
//# sourceMappingURL=get-coverage-aliases.d.ts.map
|