@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.
Files changed (134) hide show
  1. package/bin/_run.js +77 -0
  2. package/bin/cpx.js +3 -0
  3. package/bin/eslint.js +3 -0
  4. package/bin/jest.js +3 -0
  5. package/bin/js-yaml.js +3 -0
  6. package/bin/json5.js +3 -0
  7. package/bin/kendo-ui-license.js +3 -0
  8. package/bin/lerna.js +3 -0
  9. package/bin/lessc.js +3 -0
  10. package/bin/patch-package.js +3 -0
  11. package/bin/prettier.js +3 -0
  12. package/bin/sass.js +3 -0
  13. package/bin/semver.js +3 -0
  14. package/bin/spack.js +3 -0
  15. package/bin/stylelint.js +3 -0
  16. package/bin/swc.js +3 -0
  17. package/bin/swcx.js +3 -0
  18. package/bin/tcm.js +3 -0
  19. package/bin/ts-jest.js +3 -0
  20. package/bin/ts-node-cwd.js +3 -0
  21. package/bin/ts-node-esm.js +3 -0
  22. package/bin/ts-node-script.js +3 -0
  23. package/bin/ts-node-transpile-only.js +3 -0
  24. package/bin/ts-node.js +3 -0
  25. package/bin/ts-script.js +3 -0
  26. package/bin/tsc.js +3 -0
  27. package/bin/tsserver.js +3 -0
  28. package/bin/vitest.js +3 -0
  29. package/bin/webpack-bundle-analyzer.js +3 -0
  30. package/bin/webpack-dev-server.js +3 -0
  31. package/bin/webpack.js +3 -0
  32. package/dist/cli/commands/clean.d.ts +1 -0
  33. package/dist/cli/commands/clean.d.ts.map +1 -1
  34. package/dist/cli/commands/clean.js +18 -8
  35. package/dist/cli/commands/clean.js.map +1 -1
  36. package/dist/cli/commands/coverage-finalize.d.ts +16 -0
  37. package/dist/cli/commands/coverage-finalize.d.ts.map +1 -0
  38. package/dist/cli/commands/coverage-finalize.js +41 -0
  39. package/dist/cli/commands/coverage-finalize.js.map +1 -0
  40. package/dist/cli/commands/install.js +1 -1
  41. package/dist/cli/commands/install.js.map +1 -1
  42. package/dist/cli/commands/kendo-ui-license.js +1 -2
  43. package/dist/cli/commands/kendo-ui-license.js.map +1 -1
  44. package/dist/cli/commands/prepare-package.js +2 -2
  45. package/dist/cli/commands/prepare-package.js.map +1 -1
  46. package/dist/cli/commands/registry/coverage-finalize.d.ts +5 -0
  47. package/dist/cli/commands/registry/coverage-finalize.d.ts.map +1 -0
  48. package/dist/cli/commands/registry/coverage-finalize.js +17 -0
  49. package/dist/cli/commands/registry/coverage-finalize.js.map +1 -0
  50. package/dist/cli/commands/review/review.d.ts.map +1 -1
  51. package/dist/cli/commands/review/review.js +8 -7
  52. package/dist/cli/commands/review/review.js.map +1 -1
  53. package/dist/cli/commands/review/rules/require-compatible-launch-darkly-sdk.d.ts +0 -1
  54. package/dist/cli/commands/review/rules/require-compatible-launch-darkly-sdk.d.ts.map +1 -1
  55. package/dist/cli/commands/review/rules/require-compatible-launch-darkly-sdk.js +12 -18
  56. package/dist/cli/commands/review/rules/require-compatible-launch-darkly-sdk.js.map +1 -1
  57. package/dist/cli/commands/review/rules/require-project-version-in-root-node-modules.d.ts.map +1 -1
  58. package/dist/cli/commands/review/rules/require-project-version-in-root-node-modules.js +9 -4
  59. package/dist/cli/commands/review/rules/require-project-version-in-root-node-modules.js.map +1 -1
  60. package/dist/cli/commands/review/types.d.ts +2 -8
  61. package/dist/cli/commands/review/types.d.ts.map +1 -1
  62. package/dist/cli/commands/review/types.js.map +1 -1
  63. package/dist/cli/utils/index.d.ts +0 -3
  64. package/dist/cli/utils/index.d.ts.map +1 -1
  65. package/dist/cli/utils/index.js +0 -3
  66. package/dist/cli/utils/index.js.map +1 -1
  67. package/dist/cypress/config/webpack-config.js +0 -1
  68. package/dist/cypress/config/webpack-config.js.map +1 -1
  69. package/dist/storybook-config/webpack-final.d.ts.map +1 -1
  70. package/dist/storybook-config/webpack-final.js +0 -6
  71. package/dist/storybook-config/webpack-final.js.map +1 -1
  72. package/dist/utils/default-excludes.d.ts +14 -0
  73. package/dist/utils/default-excludes.d.ts.map +1 -0
  74. package/dist/utils/default-excludes.js +23 -0
  75. package/dist/utils/default-excludes.js.map +1 -0
  76. package/dist/utils/find-packages.d.ts.map +1 -1
  77. package/dist/utils/find-packages.js +15 -0
  78. package/dist/utils/find-packages.js.map +1 -1
  79. package/dist/utils/get-coverage-aliases.d.ts +23 -0
  80. package/dist/utils/get-coverage-aliases.d.ts.map +1 -0
  81. package/dist/utils/get-coverage-aliases.js +41 -0
  82. package/dist/utils/get-coverage-aliases.js.map +1 -0
  83. package/dist/utils/get-coverage-source-patterns.d.ts +21 -0
  84. package/dist/utils/get-coverage-source-patterns.d.ts.map +1 -0
  85. package/dist/utils/get-coverage-source-patterns.js +39 -0
  86. package/dist/utils/get-coverage-source-patterns.js.map +1 -0
  87. package/dist/utils/get-jest-config.d.ts.map +1 -1
  88. package/dist/utils/get-jest-config.js +2 -1
  89. package/dist/utils/get-jest-config.js.map +1 -1
  90. package/dist/utils/prettify.js +1 -1
  91. package/dist/utils/prettify.js.map +1 -1
  92. package/dist/webpack/configs/cache-config.d.ts.map +1 -1
  93. package/dist/webpack/configs/cache-config.js +3 -1
  94. package/dist/webpack/configs/cache-config.js.map +1 -1
  95. package/dist/webpack/configs/rules/ts-coverage-rules.d.ts +22 -0
  96. package/dist/webpack/configs/rules/ts-coverage-rules.d.ts.map +1 -0
  97. package/dist/webpack/configs/rules/ts-coverage-rules.js +48 -0
  98. package/dist/webpack/configs/rules/ts-coverage-rules.js.map +1 -0
  99. package/eslint/config.mjs +2 -0
  100. package/package.json +54 -18
  101. package/src/__tests__/postinstall.test.ts +173 -0
  102. package/src/cli/commands/__tests__/clean.test.ts +30 -12
  103. package/src/cli/commands/__tests__/install.test.ts +3 -1
  104. package/src/cli/commands/__tests__/kendo-ui-license.test.ts +4 -4
  105. package/src/cli/commands/__tests__/prepare-package.test.ts +2 -3
  106. package/src/cli/commands/clean.ts +18 -9
  107. package/src/cli/commands/install.ts +1 -1
  108. package/src/cli/commands/kendo-ui-license.ts +1 -1
  109. package/src/cli/commands/prepare-package.ts +1 -1
  110. package/src/cli/commands/review/__mocks__/index.ts +1 -0
  111. package/src/cli/commands/review/__mocks__/mock-package-manager.ts +20 -0
  112. package/src/cli/commands/review/__tests__/review.test.ts +23 -31
  113. package/src/cli/commands/review/review.ts +11 -7
  114. package/src/cli/commands/review/rules/__mocks__/mock-project.ts +2 -1
  115. package/src/cli/commands/review/rules/__tests__/require-compatible-launch-darkly-sdk.test.ts +39 -49
  116. package/src/cli/commands/review/rules/__tests__/require-project-version-in-root-node-modules.test.ts +35 -22
  117. package/src/cli/commands/review/rules/require-compatible-launch-darkly-sdk.ts +13 -28
  118. package/src/cli/commands/review/rules/require-project-version-in-root-node-modules.ts +10 -3
  119. package/src/cli/commands/review/types.ts +3 -12
  120. package/src/cli/utils/index.ts +10 -3
  121. package/src/cypress/config/__tests__/webpack-config.test.ts +0 -9
  122. package/src/cypress/config/webpack-config.ts +0 -1
  123. package/src/postinstall.js +106 -14
  124. package/src/scripts/__tests__/generate-bin-wrappers.test.ts +226 -0
  125. package/src/scripts/generate-bin-wrappers.js +205 -0
  126. package/src/storybook-config/__tests__/webpack-final.test.ts +0 -25
  127. package/src/storybook-config/webpack-final.ts +0 -4
  128. package/src/utils/__tests__/get-jest-config.test.ts +3 -1
  129. package/src/utils/__tests__/get-packages.test.ts +47 -2
  130. package/src/utils/__tests__/prettify.test.ts +1 -1
  131. package/src/utils/find-packages.ts +16 -0
  132. package/src/utils/get-jest-config.ts +4 -1
  133. package/src/utils/prettify.ts +1 -1
  134. 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":";;;;+BAmCaA;;;eAAAA;;;8DAnCK;+BACO;qEACA;uBAQlB;uBAEiB;uBACF;wBAUf;wBAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEP,MAAMC,WAAW,IAAIC,KAAKC,QAAQ;AAE3B,MAAMH,eAAeI,cAAO;IAW/B,MACMC,UAAU;QACZ,MAAMC,SAAS,IAAI,CAACC,IAAI,CAACC,GAAG,GAAG,IAAI,CAACC,SAAS,KAAK,IAAI,CAACC,UAAU;QACjE,MAAMC,UAAU,IAAI,CAACC,YAAY,CAACN;QAClC,OAAOK,QAAQE,KAAK,GAAG,IAAIC,QAAQC,MAAM,KAAKD,QAAQE,OAAO;IACjE;IAEQC,gBAAyB;QAC7B,MAAMC,OAAOC,IAAAA,mBAAY,EAAC;QAC1B,IAAI,EAACD,iBAAAA,2BAAAA,KAAME,UAAU,GAAE;YACnB,MAAM,IAAIC,MAAM;QACpB;QAEA,MAAMC,cAAcH,IAAAA,mBAAY,EAAyB;QACzD,IAAI,EAACG,wBAAAA,kCAAAA,YAAaC,QAAQ,GAAE;YACxB,MAAM,IAAIF,MAAM;QACpB;QAEAH,KAAKM,QAAQ,GAAG,KAAK,uDAAuD;QAC5EF,YAAYE,QAAQ,GAAG;QAEvB,MAAMC,SAASC,IAAAA,6BAAsB;QACrC,MAAMH,WAAsB;YAACL;eAASS,IAAAA,mBAAY;SAAG;QACrD,MAAMC,eAAeC,UAAUC,IAAAA,2BAAmB,EAACP;QACnD,IAAI,CAACQ,KAAK,CAAC,mBAAmBR;QAC9B,IAAI,CAACQ,KAAK,CAAC,uBAAuBH;QAElC,OAAO;YAAEH;YAAQG;YAAcN;YAAaC;QAAS;IACzD;IAEQQ,MAAMC,SAAiB,EAAEC,IAAS,EAAE;QACxC,oCAAoC,GACpCC,UAAG,CAACH,KAAK,CAACC,WAAW,IAAMC,QAAQE,KAAKC,SAAS,CAACH,MAAM,MAAM;IAClE;IAEQvB,WAAW2B,OAAiB,EAAE;QAClC,MAAM/B,SAAS,IAAI,CAACgC,QAAQ,CAACD,oBAAAA,qBAAAA,UAAW,IAAI,CAACpB,aAAa;QAC1D,IAAI,CAACc,KAAK,CAAC,iBAAiBzB;QAC5B,OAAOA;IACX;IAEQG,YAAY;QAChB,MAAM8B,YAAYC,YAAK,CAACC,MAAM,CAA8B,CAACC,QAAQC;YACjED,MAAM,CAACC,KAAKC,EAAE,CAAC,GAAGD;YAClB,OAAOD;QACX,GAAG,CAAC;QAEJ,IAAIL,UAAU,IAAI,CAACpB,aAAa;QAChC,IAAIX,SAAS,IAAI,CAACI,UAAU,CAAC2B;QAC7B,IAAIQ,aAAa;QAEjB,KAAK,MAAMC,YAAY;YAACC,mBAAW,CAACC,QAAQ;YAAED,mBAAW,CAACE,MAAM;YAAEF,mBAAW,CAACG,QAAQ;SAAC,CAAE;YACrF,MAAMC,UAAU7C,OAAO8C,MAAM,CAAC,CAAC,EAAED,OAAO,EAAE,GAAKA,YAAYL;YAC3D,IAAIK,QAAQE,MAAM,KAAK,GAAG;gBACtB;YACJ;YAEAF,QAAQG,OAAO,CAACzC,CAAAA;gBACZ,MAAM8B,OAAOJ,SAAS,CAAC1B,MAAM+B,EAAE,CAAC;gBAChC,IAAID,KAAKnC,GAAG,EAAE;oBACV0B,UAAG,CAACqB,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAACC,WAAW,CAAC;wBAAE,GAAG3C,KAAK;wBAAE4C,SAAS;wBAAIjC,UAAU;oBAAG,IAAI;oBAC9EmB,KAAKnC,GAAG,CAACK,OAAOwB;oBAChBQ,cAAc;gBAClB;YACJ;YAEAa,IAAAA,uBAAQ,EAAC,2CAA2C;gBAAEC,OAAO;YAAU;YACvEtB,UAAU,IAAI,CAACpB,aAAa;YAC5BX,SAAS,IAAI,CAACI,UAAU,CAAC2B;QAC7B;QAEA,IAAIQ,aAAa,GAAG;YAChB,IAAIlC,UAAU,CAAC,MAAM,EAAEiD,IAAAA,iBAAS,EAACf,YAAY,YAAY;YACzD,IAAIvC,OAAO+C,MAAM,EAAE;gBACf1C,UAAU,GAAGA,QAAQ,EAAE,EAAEiD,IAAAA,iBAAS,EAACtD,OAAO+C,MAAM,EAAE,mBAAmB,mBAAmB,GAAG,CAAC;YAChG;YACAnB,UAAG,CAAC2B,IAAI,CAAClD;QACb;QAEA,OAAOL;IACX;IAEQkD,YAAY3C,KAAmB,EAAE;QACrC,MAAM,EAAEW,QAAQ,EAAEsC,OAAO,EAAEC,WAAWC,qBAAa,CAACnD,KAAK,EAAE,GAAGA;QAE9D,MAAMoD,QAAQC,IAAAA,cAAM,EAAC,IAAI,CAACC,eAAe,CAACJ,SAAS,EAAEvC,WAAW,IAAI;QACpE,MAAMiC,UAAU5C,MAAM4C,OAAO,GAAG,CAAC,EAAE,EAAES,IAAAA,cAAM,EAACrD,MAAM4C,OAAO,EAAEjC,WAAW,IAAI,IAAI,GAAG;QACjF,MAAM4C,OAAO,IAAI,CAACC,OAAO,CAACxD;QAE1B,OAAO,GAAGoD,MAAM,CAAC,EAAEH,QAAQ,CAAC,EAAEM,OAAOX,SAAS;IAClD;IAEQ7C,aAAaN,MAAsB,EAAE;QACzC,IAAIgE;QAEJhE,OAAOgD,OAAO,CAAC,CAACzC,OAAO0D;YACnB,MAAM,EAAE/C,QAAQ,EAAE,GAAGX;YACrB,IAAI0D,QAAQ,KAAM,CAAA,CAAC/C,YAAYA,aAAa8C,YAAW,GAAI;gBACvDpC,UAAG,CAACqB,IAAI,CAAC;YACb;YACA,IAAI/B,YAAYA,aAAa8C,cAAc;gBACvCpC,UAAG,CAACqB,IAAI,CAACiB,cAAK,CAACC,SAAS,CAACC,IAAAA,sBAAc,EAAClD;gBACxC8C,eAAe9C;YACnB;YACAU,UAAG,CAACqB,IAAI,CAAC,IAAI,CAACC,WAAW,CAAC3C;QAC9B;QAEA,MAAMF,UAAUgE,IAAAA,iBAAS,EAACrE;QAC1B,IAAI,CAACsE,aAAa,CAACjE;QACnB,OAAOA;IACX;IAEQiE,cAAc,EAAE/D,KAAK,EAAEgE,OAAO,EAAE1B,OAAO,EAAgB,EAAE;QAC7D,IAAItC,QAAQgE,YAAY,GAAG;YACvB,OAAO3C,UAAG,CAAC4C,OAAO,CAAC;QACvB;QAEA5C,UAAG,CAACqB,IAAI,CAAC;QAET,MAAMQ,WAAWlD,QAAQ,UAAU;QACnCqB,UAAG,CAAC6B,SAAS,CACT,GAAGH,IAAAA,iBAAS,EAAC/C,QAAQgE,SAAS,WAAW,EAAE,EAAEjB,IAAAA,iBAAS,EAAC/C,OAAO,SAAS,EAAE,EAAE+C,IAAAA,iBAAS,EAACiB,SAAS,WAAW,CAAC,CAAC;QAG/G,IAAI1B,QAAQtC,KAAK,GAAGsC,QAAQ0B,OAAO,GAAG,GAAG;YACrC3C,UAAG,CAAC6B,SAAS,CACT,GAAGH,IAAAA,iBAAS,EAACT,QAAQtC,KAAK,EAAE,SAAS,KAAK,EAAE+C,IAAAA,iBAAS,EAACT,QAAQ0B,OAAO,EAAE,WAAW,sCAAsC,CAAC;QAEjI;IACJ;IAEQvC,SAASD,OAAgB,EAAkB;QAC/C,MAAM0C,WAAW,IAAI,CAACC,gBAAgB;QACtC,OAAOxC,YAAK,CACPY,MAAM,CAAC,CAAC,EAAER,EAAE,EAAE,GAAK,CAACmC,YAAYA,SAASE,GAAG,CAACrC,KAC7CsC,OAAO,CAACvC,CAAAA,OAAQ,IAAI,CAACwC,OAAO,CAACxC,MAAMN,UACnCe,MAAM,CAACvC,CAAAA,QAAS,CAAC,CAACA,OAClBuE,IAAI,CAACC;IACd;IAEQF,QAAQxC,IAAiB,EAAEN,OAAgB,EAAE;YACrBA;QAA5B,MAAMiD,QAAQ,IAAI,CAACC,QAAQ,EAAClD,wBAAAA,QAAQZ,MAAM,CAACe,KAAK,cAApBH,4CAAAA,qBAAsB,CAACM,KAAKC,EAAE,CAAC;QAC3D,IAAI0C,UAAU,OAAO;YACjB;QACJ;QAEA,OAAO,IAAI,CAACE,SAAS,CAAC7C,KAAK8C,GAAG,CAACpD,UAAUiD;IAC7C;IAEQE,UAAUlF,MAAsC,EAAEgF,KAAwB,EAAE;QAChF,MAAMvB,WAAWuB,SAAS,IAAI,CAACI,eAAe,CAACJ,MAAM;QACrD,OAAOhF,UAAUyD,WAAW4B,IAAAA,cAAO,EAACrF,QAAQsF,GAAG,CAAC/E,CAAAA,QAAU,CAAA;gBAAE,GAAGA,KAAK;gBAAEkD;YAAS,CAAA,KAAMzD;IACzF;IAEQiF,SAAS9D,MAA0B,EAAE;QACzC,IAAI,OAAOA,WAAW,UAAU;YAC5B,OAAOA;QACX;QACA,IAAIoE,MAAMC,OAAO,CAACrE,WAAW,OAAOA,MAAM,CAAC,EAAE,KAAK,UAAU;YACxD,OAAOA,MAAM,CAAC,EAAE;QACpB;IACJ;IAEQ4C,QAAQ,EAAEzB,EAAE,EAAgB,EAAE;QAClC,MAAMmD,MAAM,CAAC,uDAAuD,EAAEnD,IAAI;QAC1E,OAAO4B,cAAK,CAACwB,GAAG,CAACC,IAAAA,qBAAY,EAACrD,IAAImD;IACtC;IAEQf,mBAAmB;QACvB,MAAMrC,OAAO,IAAI,CAACpC,IAAI,CAACoC,IAAI;QAC3B,OAAOA,OAAO,IAAIuD,IAAIvD,KAAKS,MAAM,CAACR,CAAAA,KAAM,CAAC,CAACA,OAAOuD;IACrD;;QAtLG,gBACH,uBAAiBhC,mBAAiD;YAC9D,CAACH,qBAAa,CAACa,OAAO,CAAC,EAAEL,cAAK,CAAC4B,MAAM,CAAC;YACtC,CAACpC,qBAAa,CAACnD,KAAK,CAAC,EAAE2D,cAAK,CAAC6B,GAAG,CAAC;QACrC,IAEA,uBAAiBX,mBAAyD;YACtEY,MAAMtC,qBAAa,CAACa,OAAO;YAC3BhE,OAAOmD,qBAAa,CAACnD,KAAK;QAC9B;;AA8KJ;;;;;;;AAEA,SAASwE,aACL,EAAE7D,UAAU+E,YAAY,EAAE,EAAExC,UAAUyC,YAAYxC,qBAAa,CAACnD,KAAK,EAAgB,EACrF,EAAEW,UAAUiF,YAAY,EAAE,EAAE1C,UAAU2C,YAAY1C,qBAAa,CAACnD,KAAK,EAAgB;IAErF,OAAO0F,cAAcE,YAAYD,YAAYE,YAAYzG,SAAS0G,OAAO,CAACJ,WAAWE;AACzF;AAEA,SAAS5E,UAAa+E,GAAsB;IACxC,OAAOC,OAAOC,WAAW,CAACD,OAAOE,OAAO,CAACH,KAAKxB,IAAI,CAAC,CAAC,CAAC4B,EAAE,EAAE,CAACC,EAAE,GAAKhH,SAAS0G,OAAO,CAACK,GAAGC;AACzF"}
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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"}
@@ -15,7 +15,6 @@ export declare class RequireCompatibleLaunchDarklySdk implements PackageRule {
15
15
  private createError;
16
16
  private formatDetails;
17
17
  private getActualJsClientSdkVersion;
18
- private getResolvedDependency;
19
18
  private getTargetJsClientSdkVersion;
20
19
  }
21
20
  export {};
@@ -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;IAInC,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,2BAA2B;CAQtC"}
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).packageLock.location,
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(packageName) {
145
- return this.getResolvedDependency({
146
- packageName,
144
+ getActualJsClientSdkVersion(workspacePackage = '') {
145
+ return _class_private_field_get(this, _project).packageManager.getResolvedVersion({
146
+ workspacePackage,
147
147
  dependency: JS_CLIENT_SDK
148
- }).version;
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(packageName) {
156
- var _dependencies_JS_CLIENT_SDK;
157
- const { dependencies = {}, peerDependencies = {} } = this.getResolvedDependency({
158
- packageName,
159
- dependency: LD_SERVICE
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(name);
173
- const targetVersion = this.getTargetJsClientSdkVersion(name);
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(name);\n const targetVersion = this.getTargetJsClientSdkVersion(name);\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.packageLock.location,\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(packageName?: string) {\n return this.getResolvedDependency({ packageName, dependency: JS_CLIENT_SDK }).version;\n }\n\n private getResolvedDependency({\n packageName,\n dependency,\n }: {\n packageName?: string;\n dependency: string;\n }) {\n const { packages } = this.#project.packageLock;\n return (\n (packageName\n ? packages[`node_modules/${packageName}/node_modules/${dependency}`]\n : undefined) ??\n packages[`node_modules/${dependency}`] ??\n {}\n );\n }\n\n private getTargetJsClientSdkVersion(packageName?: string) {\n const { dependencies = {}, peerDependencies = {} } = this.getResolvedDependency({\n packageName,\n dependency: LD_SERVICE,\n });\n\n return dependencies[JS_CLIENT_SDK] ?? peerDependencies[JS_CLIENT_SDK];\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","packageLock","params","details","formatDetails","fixable","FixCategory","isolated","lockFile","chalk","yellow","getResolvedDependency","packages","undefined","dependencies","peerDependencies"],"mappings":"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"}
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,"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;IAgB1D,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO;IAoCvD,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,eAAe;CAI1B"}
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.packageLock.location,
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
- var _packageLock_packages_;
80
- const rootVersion = (_packageLock_packages_ = packageLock.packages[`node_modules/${name}`]) === null || _packageLock_packages_ === void 0 ? void 0 : _packageLock_packages_.version;
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.packageLock.location,\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 const { packageLock } = project;\n return this.getDependencies(project).reduce((result, [name, versions]) => {\n const rootVersion = packageLock.packages[`node_modules/${name}`]?.version;\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","mismatches","findMismatches","length","message","details","formatDetails","fixable","FixCategory","lockFile","location","packageLock","data","fix","root","packages","find","dependencies","reduce","result","name","projectVersions","getKey","getMaxVersion","entries","Object","log","debug","JSON","stringify","map","version","forEach","command","execSync","stdio","rootVersion","pkg","chalk","yellow","join","getDependencies","versions","keys","some","satisfies","push","config","ruleConfig","rules","applyFilter"],"mappings":"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"}
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
- packageLock: {
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":"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"}
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":["export 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 // Only using this subset of package-lock.json\n packageLock: {\n packages: Record<\n string,\n {\n version: string;\n dependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n }\n >;\n location: string;\n };\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":";;;;;;;;;;;QAkEYA;eAAAA;;QAKAC;eAAAA;;QAvEUC;eAAAA;;;AAAf,MAAeA;AAItB;AA8DO,IAAA,AAAKF,uCAAAA;;;WAAAA;;AAKL,IAAA,AAAKC,qCAAAA;;;;WAAAA"}
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;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,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"}
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"}
@@ -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';\nexport * from './compile-less';\nexport * from './compile-sass';\nexport * from './constants';\nexport * from './copy-files';\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;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBACA"}
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"}
@@ -45,7 +45,6 @@ function webpackConfig(overrides) {
45
45
  }
46
46
  function getContext() {
47
47
  return {
48
- codeCoverage: true,
49
48
  destination: '',
50
49
  isProduction: false,
51
50
  name: '',
@@ -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 codeCoverage: true,\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","codeCoverage","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,cAAc;QACdC,aAAa;QACbC,cAAc;QACdC,MAAM;QACNC,aAAa,CAAC;QACdC,oBAAoB,CAAC;QACrBC,QAAQ;IACZ;AACJ;AAEA,SAASjB,SAASH,OAAgB,EAAED,SAAoB;IACpD,MAAM,EAAEG,KAAK,EAAE,GAAGmB,IAAAA,oBAAW,EAACrB,SAASD;IAEvC,OAAO;QAACuB;WAAuBpB;KAAM;AACzC;AAEA,SAASoB;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
+ {"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,CAoB5F"}
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"}
@@ -26,12 +26,6 @@ function webpackFinal(config, overrides = {}) {
26
26
  }));
27
27
  return {
28
28
  ...config,
29
- optimization: {
30
- ...config.optimization,
31
- ...config.mode !== 'production' ? {
32
- sideEffects: false
33
- } : {}
34
- },
35
29
  module: {
36
30
  ...config.module,
37
31
  rules: [
@@ -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 optimization: {\n ...config.optimization,\n ...(config.mode !== 'production' ? { sideEffects: false } : {}),\n },\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","optimization","mode","sideEffects","module","transformDefaultRules","destination","isProduction","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;QAkBvDD;QAFuBA;IAfzC,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,cAAc;YACV,GAAGZ,OAAOY,YAAY;YACtB,GAAIZ,OAAOa,IAAI,KAAK,eAAe;gBAAEC,aAAa;YAAM,IAAI,CAAC,CAAC;QAClE;QACAC,QAAQ;YACJ,GAAGf,OAAOe,MAAM;YAChBX,OAAO;mBAAIY,uBAAsBhB,iBAAAA,OAAOe,MAAM,cAAbf,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;QACHiB,aAAa;QACbC,cAAclB,OAAOa,IAAI,KAAK;QAC9BM,MAAM;QACNC,aAAa,CAAC;QACdC,oBAAoB,CAAC;QACrBC,QAAQ;IACZ;AACJ;AAEA,SAASf,WAAWL,OAAgB,EAAED,SAAoB;IACtD,OAAO;QAACsB,IAAAA,6BAAoB,EAACrB,SAASD;KAAW,CAACuB,MAAM,CAACC,CAAAA,SAAU,CAAC,CAACA;AACzE;AAEA,SAASpB,SAASH,OAAgB,EAAED,SAAoB;IACpD,MAAMyB,UAAU;QAAC;QAAe;QAAgB;QAAS;QAAgB;QAAS;KAAO;IACzF,MAAMC,UAAU;QAAC;KAAO;IAExB,MAAM,EAAEvB,KAAK,EAAE,GAAGwB,IAAAA,oBAAW,EAAC1B,SAASD;IAEvC,OAAOG,MAAMoB,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,SAAShB,sBAAsBZ,QAAuD,EAAE;IACpF,MAAM8B,SAAS9B,MAAM+B,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,GACpC5B,UAAG,CAACC,KAAK,CAAC,4CAA4C,IAClDC,IAAAA,iBAAO,EAAC;YAAEwB;QAAO,GAAG;YAAEvB,OAAO;QAAK;IAGtC,OAAOuB;AACX"}
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":"AAOA,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"}
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","lernaJson","packages","workspace","startsWith","slice","replace"],"mappings":";;;;+BAagBA;;;eAAAA;;;sBAbS;mEACF;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;gBAGAc;YAFb,MAAMW,YAAYf,aAAI,CAACC,OAAO,CAACD,aAAI,CAACG,IAAI,CAACU,WAAW;YACpDL,QAAG,CAACC,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAEM,WAAW;YAClDzB,cAAac,iBAAAA,IAAAA,sBAAY,EAAyBW,wBAArCX,qCAAAA,eAAiDY,QAAQ;QAC1E;QAEA,IAAI1B,YAAY;YACZA,aAAaA,WAAWO,GAAG,CAACoB,CAAAA;gBACxB,MAAMzB,SAASyB,UAAUC,UAAU,CAAC,OAC9B,CAAC,CAAC,EAAElB,aAAI,CAACG,IAAI,CAACU,WAAWI,UAAUE,KAAK,CAAC,KAAK,GAC9CnB,aAAI,CAACG,IAAI,CAACU,WAAWI;gBAC3B,6DAA6D;gBAC7D,OAAOzB,OAAO4B,OAAO,CAAC,OAAO;YACjC;YACA,oCAAoC,GACpCZ,QAAG,CAACC,KAAK,CAAC,iBAAiB,IAAM,CAAC,kBAAkB,EAAEC,KAAKC,SAAS,CAACrB,aAAa;YAClF,OAAOA;QACX;IACJ;AACJ"}
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