@servicetitan/startup 36.3.0-far-1776.2 → 36.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/bin/_run.js +19 -8
  2. package/dist/cli/commands/mfe-check.d.ts.map +1 -1
  3. package/dist/cli/commands/mfe-check.js +1 -5
  4. package/dist/cli/commands/mfe-check.js.map +1 -1
  5. package/dist/utils/find-up.js +4 -4
  6. package/dist/utils/find-up.js.map +1 -1
  7. package/dist/utils/get-jest-config.js +1 -1
  8. package/dist/utils/get-jest-config.js.map +1 -1
  9. package/dist/utils/get-package-data.d.ts +1 -0
  10. package/dist/utils/get-package-data.d.ts.map +1 -1
  11. package/dist/utils/get-package-data.js +22 -3
  12. package/dist/utils/get-package-data.js.map +1 -1
  13. package/dist/utils/index.d.ts +0 -1
  14. package/dist/utils/index.d.ts.map +1 -1
  15. package/dist/utils/index.js +0 -1
  16. package/dist/utils/index.js.map +1 -1
  17. package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.d.ts.map +1 -1
  18. package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.js +1 -3
  19. package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.js.map +1 -1
  20. package/dist/webpack/configs/utils/get-launchdarkly-sdk-version.d.ts.map +1 -1
  21. package/dist/webpack/configs/utils/get-launchdarkly-sdk-version.js +11 -1
  22. package/dist/webpack/configs/utils/get-launchdarkly-sdk-version.js.map +1 -1
  23. package/dist/webpack/configs/utils/get-web-components-version.d.ts.map +1 -1
  24. package/dist/webpack/configs/utils/get-web-components-version.js +7 -5
  25. package/dist/webpack/configs/utils/get-web-components-version.js.map +1 -1
  26. package/package.json +13 -12
  27. package/src/cli/commands/__tests__/mfe-check.test.ts +10 -12
  28. package/src/cli/commands/mfe-check.ts +1 -5
  29. package/src/utils/__tests__/get-jest-config.test.ts +1 -1
  30. package/src/utils/__tests__/get-package-data.test.ts +45 -1
  31. package/src/utils/find-up.ts +1 -1
  32. package/src/utils/get-jest-config.ts +1 -1
  33. package/src/utils/get-package-data.ts +14 -0
  34. package/src/utils/index.ts +0 -1
  35. package/src/webpack/__tests__/create-webpack-config-shared-dependencies.test.ts +6 -4
  36. package/src/webpack/__tests__/create-webpack-config.test.ts +5 -3
  37. package/src/webpack/configs/plugins/define-exposed-dependencies-plugin.ts +3 -6
  38. package/src/webpack/configs/utils/__tests__/get-launchdarkly-sdk-version.test.ts +12 -29
  39. package/src/webpack/configs/utils/__tests__/get-web-components-version.test.ts +12 -37
  40. package/src/webpack/configs/utils/get-launchdarkly-sdk-version.ts +12 -2
  41. package/src/webpack/configs/utils/get-web-components-version.ts +5 -8
  42. package/dist/cli/commands/get-command.d.ts +0 -4
  43. package/dist/cli/commands/get-command.d.ts.map +0 -1
  44. package/dist/cli/commands/get-command.js +0 -68
  45. package/dist/cli/commands/get-command.js.map +0 -1
  46. package/dist/cli/commands/index.d.ts +0 -15
  47. package/dist/cli/commands/index.d.ts.map +0 -1
  48. package/dist/cli/commands/index.js +0 -32
  49. package/dist/cli/commands/index.js.map +0 -1
  50. package/dist/cli/commands/run-task.test.d.ts +0 -2
  51. package/dist/cli/commands/run-task.test.d.ts.map +0 -1
  52. package/dist/cli/commands/run-task.test.js +0 -65
  53. package/dist/cli/commands/run-task.test.js.map +0 -1
  54. package/dist/cypress-config/index.d.ts +0 -2
  55. package/dist/cypress-config/index.d.ts.map +0 -1
  56. package/dist/cypress-config/index.js +0 -20
  57. package/dist/cypress-config/index.js.map +0 -1
  58. package/dist/cypress-config/webpack-config.d.ts +0 -4
  59. package/dist/cypress-config/webpack-config.d.ts.map +0 -1
  60. package/dist/cypress-config/webpack-config.js +0 -76
  61. package/dist/cypress-config/webpack-config.js.map +0 -1
  62. package/dist/utils/__tests__/get-package-version.test.js +0 -180
  63. package/dist/utils/__tests__/get-package-version.test.js.map +0 -1
  64. package/dist/utils/find-package-lock.d.ts +0 -2
  65. package/dist/utils/find-package-lock.d.ts.map +0 -1
  66. package/dist/utils/find-package-lock.js +0 -26
  67. package/dist/utils/find-package-lock.js.map +0 -1
  68. package/dist/utils/get-package-version.d.ts +0 -3
  69. package/dist/utils/get-package-version.d.ts.map +0 -1
  70. package/dist/utils/get-package-version.js +0 -31
  71. package/dist/utils/get-package-version.js.map +0 -1
  72. package/dist/utils/package-lock/find-package-lock.d.ts +0 -2
  73. package/dist/utils/package-lock/find-package-lock.d.ts.map +0 -1
  74. package/dist/utils/package-lock/find-package-lock.js +0 -26
  75. package/dist/utils/package-lock/find-package-lock.js.map +0 -1
  76. package/dist/utils/package-lock/get-lock-file-entry.d.ts +0 -3
  77. package/dist/utils/package-lock/get-lock-file-entry.d.ts.map +0 -1
  78. package/dist/utils/package-lock/get-lock-file-entry.js +0 -22
  79. package/dist/utils/package-lock/get-lock-file-entry.js.map +0 -1
  80. package/dist/utils/package-lock/get-lock-file-version.d.ts +0 -3
  81. package/dist/utils/package-lock/get-lock-file-version.d.ts.map +0 -1
  82. package/dist/utils/package-lock/get-lock-file-version.js +0 -16
  83. package/dist/utils/package-lock/get-lock-file-version.js.map +0 -1
  84. package/dist/utils/package-lock/get-package-version.d.ts +0 -3
  85. package/dist/utils/package-lock/get-package-version.d.ts.map +0 -1
  86. package/dist/utils/package-lock/get-package-version.js +0 -31
  87. package/dist/utils/package-lock/get-package-version.js.map +0 -1
  88. package/dist/utils/package-lock/index.d.ts +0 -6
  89. package/dist/utils/package-lock/index.d.ts.map +0 -1
  90. package/dist/utils/package-lock/index.js +0 -23
  91. package/dist/utils/package-lock/index.js.map +0 -1
  92. package/dist/utils/package-lock/read-package-lock.d.ts +0 -3
  93. package/dist/utils/package-lock/read-package-lock.d.ts.map +0 -1
  94. package/dist/utils/package-lock/read-package-lock.js +0 -22
  95. package/dist/utils/package-lock/read-package-lock.js.map +0 -1
  96. package/dist/utils/package-lock/resolve-package-lock-entry.d.ts +0 -3
  97. package/dist/utils/package-lock/resolve-package-lock-entry.d.ts.map +0 -1
  98. package/dist/utils/package-lock/resolve-package-lock-entry.js +0 -21
  99. package/dist/utils/package-lock/resolve-package-lock-entry.js.map +0 -1
  100. package/dist/utils/package-lock/types.d.ts +0 -12
  101. package/dist/utils/package-lock/types.d.ts.map +0 -1
  102. package/dist/utils/package-lock/types.js +0 -6
  103. package/dist/utils/package-lock/types.js.map +0 -1
  104. package/dist/utils/package-lock.d.ts +0 -14
  105. package/dist/utils/package-lock.d.ts.map +0 -1
  106. package/dist/utils/package-lock.js +0 -63
  107. package/dist/utils/package-lock.js.map +0 -1
  108. package/dist/utils/resolve-package-lock-entry.d.ts +0 -11
  109. package/dist/utils/resolve-package-lock-entry.d.ts.map +0 -1
  110. package/dist/utils/resolve-package-lock-entry.js +0 -21
  111. package/dist/utils/resolve-package-lock-entry.js.map +0 -1
  112. package/src/utils/package-lock/__tests__/find-package-lock.test.ts +0 -35
  113. package/src/utils/package-lock/__tests__/get-lock-file-entry.test.ts +0 -97
  114. package/src/utils/package-lock/__tests__/get-lock-file-version.test.ts +0 -32
  115. package/src/utils/package-lock/__tests__/read-package-lock.test.ts +0 -47
  116. package/src/utils/package-lock/find-package-lock.ts +0 -10
  117. package/src/utils/package-lock/get-lock-file-entry.ts +0 -14
  118. package/src/utils/package-lock/get-lock-file-version.ts +0 -6
  119. package/src/utils/package-lock/index.ts +0 -5
  120. package/src/utils/package-lock/read-package-lock.ts +0 -13
  121. package/src/utils/package-lock/types.ts +0 -13
package/bin/_run.js CHANGED
@@ -44,25 +44,36 @@ function findInFileSystem(target) {
44
44
  }
45
45
 
46
46
  function resolve(pkg, binPath) {
47
- const target = `${pkg}/${binPath}`;
47
+ /*
48
+ * Strip any leading './' so the composed target stays `pkg/bin/foo`
49
+ * rather than `pkg/./bin/foo`. The latter is normalized into a `././bin/foo`
50
+ * subpath by Node's exports resolver, which rejects it against patterns like
51
+ * `./*` with ERR_INVALID_MODULE_SPECIFIER (e.g. prettier 3.x).
52
+ */
53
+ const target = `${pkg}/${binPath.replace(/^\.\//, '')}`;
48
54
 
49
55
  // Try require.resolve first — it follows pnpm's dependency graph correctly
50
56
  try {
51
57
  return require.resolve(target);
52
58
  } catch (e) {
53
59
  /*
54
- * Fall through on resolution errors; some packages use "exports" which
55
- * blocks subpath access (ERR_PACKAGE_PATH_NOT_EXPORTED).
60
+ * Fall through on known resolution failures so we can try a direct
61
+ * filesystem lookup:
62
+ * - MODULE_NOT_FOUND: nothing matched on the resolution paths.
63
+ * - ERR_PACKAGE_PATH_NOT_EXPORTED: package's "exports" blocks the subpath.
64
+ * - ERR_INVALID_MODULE_SPECIFIER: the subpath shape is rejected by an
65
+ * "exports" pattern (e.g. prettier's `./*`).
56
66
  */
57
- if (e.code !== 'MODULE_NOT_FOUND' && e.code !== 'ERR_PACKAGE_PATH_NOT_EXPORTED') {
67
+ const fallthrough = new Set([
68
+ 'MODULE_NOT_FOUND',
69
+ 'ERR_PACKAGE_PATH_NOT_EXPORTED',
70
+ 'ERR_INVALID_MODULE_SPECIFIER',
71
+ ]);
72
+ if (!fallthrough.has(e.code)) {
58
73
  throw e;
59
74
  }
60
75
  }
61
76
 
62
- /*
63
- * require.resolve fails when the package uses "exports" to block subpath
64
- * access. Fall back to a direct filesystem lookup.
65
- */
66
77
  return findInFileSystem(target);
67
78
  }
68
79
 
@@ -1 +1 @@
1
- {"version":3,"file":"mfe-check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mfe-check.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAuBlC,qBAAa,QAAS,SAAQ,OAAO,CAAC,OAAO,KAAK,CAAC;IAEzC,OAAO;IAoBb,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,kBAAkB;IAoC1B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,mBAAmB;CA2B9B"}
1
+ {"version":3,"file":"mfe-check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mfe-check.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAuBlC,qBAAa,QAAS,SAAQ,OAAO,CAAC,OAAO,KAAK,CAAC;IAEzC,OAAO;IAoBb,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,mBAAmB;CA2B9B"}
@@ -58,11 +58,7 @@ class MfeCheck extends _types.Command {
58
58
  var _hostData_cli_webpack, _hostData_cli, _hostData_cli_webpack1, _hostData_cli1;
59
59
  const mfeSharedDependencies = mfeMetadata.sharedDependencies;
60
60
  const hostSharedDependencies = (0, _utils.loadSharedDependencies)(hostData.dependencies, (_hostData_cli = hostData.cli) === null || _hostData_cli === void 0 ? void 0 : (_hostData_cli_webpack = _hostData_cli.webpack) === null || _hostData_cli_webpack === void 0 ? void 0 : _hostData_cli_webpack['shared-dependencies']);
61
- const lockFile = (0, _utils.readPackageLock)();
62
- const exposedDependencies = (0, _utils1.getExposedDependencies)(hostSharedDependencies, (dependency)=>{
63
- var _getLockFileVersion;
64
- return (_getLockFileVersion = (0, _utils.getLockFileVersion)(lockFile, dependency)) !== null && _getLockFileVersion !== void 0 ? _getLockFileVersion : hostData.dependencies[dependency];
65
- });
61
+ const exposedDependencies = (0, _utils1.getExposedDependencies)(hostSharedDependencies, hostData.dependencies);
66
62
  const mismatchResult = (0, _startuputils.getVersionMismatches)(exposedDependencies, mfeMetadata.dependencies, mfeSharedDependencies);
67
63
  const isHostMfe = (0, _utils.isWebComponent)(hostData);
68
64
  const isSharedDependenciesEnabled = ((_hostData_cli1 = hostData.cli) === null || _hostData_cli1 === void 0 ? void 0 : (_hostData_cli_webpack1 = _hostData_cli1.webpack) === null || _hostData_cli_webpack1 === void 0 ? void 0 : _hostData_cli_webpack1['expose-shared-dependencies']) === true;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/commands/mfe-check.ts"],"sourcesContent":["import { getVersionMismatches } from '@servicetitan/startup-utils';\nimport path from 'node:path';\nimport {\n getLockFileVersion,\n isWebComponent,\n loadSharedDependencies,\n log,\n logErrors,\n readJson,\n readPackageLock,\n toArray,\n} from '../../utils';\nimport { Metadata } from '../../webpack/configs/types';\nimport { getExposedDependencies } from '../../webpack/configs/utils';\nimport type { entry } from './registry/mfe-check';\nimport { Command } from './types';\n\ninterface HostPackageJSON {\n name: string;\n dependencies: Record<string, string>;\n cli?: {\n 'web-component'?: boolean | string | object;\n 'webpack'?: {\n 'expose-shared-dependencies'?: boolean;\n 'shared-dependencies'?: Record<string, string>;\n };\n };\n}\n\ninterface CompatibilityResult {\n name: string;\n compatible: boolean;\n bundleType: 'light' | 'full';\n mismatches?: Record<string, { host: string; package: string }>;\n isSharedDependenciesEnabled: boolean;\n isHostMfe: boolean;\n}\n\nexport class MfeCheck extends Command<typeof entry> {\n @logErrors\n async execute() {\n const { metadata: metadataPath, hostPackageJson, json } = this.args;\n const mfeMetadata = readJson<Metadata>(path.resolve(metadataPath));\n const hostPackageJsonPaths = toArray(hostPackageJson);\n const hostData = this.getHostPackageData(hostPackageJsonPaths);\n const result = this.checkCompatibility(mfeMetadata, hostData);\n\n if (json) {\n this.outputJson(result);\n } else {\n this.outputHumanReadable(result);\n }\n\n if (!result.compatible) {\n process.exitCode = 1;\n }\n\n return Promise.resolve();\n }\n\n private getHostPackageData(packageJsonPaths: string[]): HostPackageJSON {\n const packages = packageJsonPaths.map(packageJsonPath =>\n readJson<HostPackageJSON>(path.resolve(packageJsonPath))\n );\n const mergedDependencies = packages.reduceRight<HostPackageJSON['dependencies']>(\n (result, currentPackage) => Object.assign(result, currentPackage.dependencies),\n {}\n );\n const mainPackage = packages[0];\n\n return {\n name: mainPackage.name,\n cli: mainPackage.cli,\n dependencies: mergedDependencies,\n };\n }\n\n private checkCompatibility(\n mfeMetadata: Metadata,\n hostData: HostPackageJSON\n ): CompatibilityResult {\n const mfeSharedDependencies = mfeMetadata.sharedDependencies;\n const hostSharedDependencies = loadSharedDependencies(\n hostData.dependencies,\n hostData.cli?.webpack?.['shared-dependencies']\n );\n const lockFile = readPackageLock();\n const exposedDependencies = getExposedDependencies(\n hostSharedDependencies,\n dependency =>\n getLockFileVersion(lockFile, dependency) ?? hostData.dependencies[dependency]\n );\n const mismatchResult = getVersionMismatches(\n exposedDependencies,\n mfeMetadata.dependencies,\n mfeSharedDependencies\n );\n\n const isHostMfe = isWebComponent(hostData);\n const isSharedDependenciesEnabled =\n hostData.cli?.webpack?.['expose-shared-dependencies'] === true;\n const compatible = !isHostMfe && !mismatchResult && isSharedDependenciesEnabled;\n\n return {\n name: mfeMetadata.name,\n compatible,\n bundleType: compatible ? 'light' : 'full',\n isSharedDependenciesEnabled,\n isHostMfe,\n ...(mismatchResult ? { mismatches: mismatchResult } : {}),\n };\n }\n\n private outputJson(result: CompatibilityResult) {\n process.stdout.write(JSON.stringify(result, null, 2) + '\\n');\n }\n\n private outputHumanReadable(result: CompatibilityResult) {\n log.info(`Checking ${result.name}...`);\n\n if (result.isHostMfe) {\n log.error('Skipping compatibility check because host is an MFE');\n return;\n }\n\n if (result.compatible) {\n log.info('Compatible: light bundle can be used');\n return;\n }\n\n if (result.mismatches) {\n log.error('Dependency mismatch found:');\n\n for (const [dep, versions] of Object.entries(result.mismatches)) {\n log.error(` ${dep}: host=${versions.host}, package=${versions.package}`);\n }\n }\n\n if (!result.isSharedDependenciesEnabled) {\n log.error('expose-shared-dependencies is not enabled in host package.json');\n }\n\n log.error('Result: full bundle required');\n }\n}\n"],"names":["MfeCheck","Command","execute","metadata","metadataPath","hostPackageJson","json","args","mfeMetadata","readJson","path","resolve","hostPackageJsonPaths","toArray","hostData","getHostPackageData","result","checkCompatibility","outputJson","outputHumanReadable","compatible","process","exitCode","Promise","packageJsonPaths","packages","map","packageJsonPath","mergedDependencies","reduceRight","currentPackage","Object","assign","dependencies","mainPackage","name","cli","mfeSharedDependencies","sharedDependencies","hostSharedDependencies","loadSharedDependencies","webpack","lockFile","readPackageLock","exposedDependencies","getExposedDependencies","dependency","getLockFileVersion","mismatchResult","getVersionMismatches","isHostMfe","isWebComponent","isSharedDependenciesEnabled","bundleType","mismatches","stdout","write","JSON","stringify","log","info","error","dep","versions","entries","host","package"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/cli/commands/mfe-check.ts"],"sourcesContent":["import { getVersionMismatches } from '@servicetitan/startup-utils';\nimport path from 'node:path';\nimport {\n isWebComponent,\n loadSharedDependencies,\n log,\n logErrors,\n readJson,\n toArray,\n} from '../../utils';\nimport { Metadata } from '../../webpack/configs/types';\nimport { getExposedDependencies } from '../../webpack/configs/utils';\nimport type { entry } from './registry/mfe-check';\nimport { Command } from './types';\n\ninterface HostPackageJSON {\n name: string;\n dependencies: Record<string, string>;\n cli?: {\n 'web-component'?: boolean | string | object;\n 'webpack'?: {\n 'expose-shared-dependencies'?: boolean;\n 'shared-dependencies'?: Record<string, string>;\n };\n };\n}\n\ninterface CompatibilityResult {\n name: string;\n compatible: boolean;\n bundleType: 'light' | 'full';\n mismatches?: Record<string, { host: string; package: string }>;\n isSharedDependenciesEnabled: boolean;\n isHostMfe: boolean;\n}\n\nexport class MfeCheck extends Command<typeof entry> {\n @logErrors\n async execute() {\n const { metadata: metadataPath, hostPackageJson, json } = this.args;\n const mfeMetadata = readJson<Metadata>(path.resolve(metadataPath));\n const hostPackageJsonPaths = toArray(hostPackageJson);\n const hostData = this.getHostPackageData(hostPackageJsonPaths);\n const result = this.checkCompatibility(mfeMetadata, hostData);\n\n if (json) {\n this.outputJson(result);\n } else {\n this.outputHumanReadable(result);\n }\n\n if (!result.compatible) {\n process.exitCode = 1;\n }\n\n return Promise.resolve();\n }\n\n private getHostPackageData(packageJsonPaths: string[]): HostPackageJSON {\n const packages = packageJsonPaths.map(packageJsonPath =>\n readJson<HostPackageJSON>(path.resolve(packageJsonPath))\n );\n const mergedDependencies = packages.reduceRight<HostPackageJSON['dependencies']>(\n (result, currentPackage) => Object.assign(result, currentPackage.dependencies),\n {}\n );\n const mainPackage = packages[0];\n\n return {\n name: mainPackage.name,\n cli: mainPackage.cli,\n dependencies: mergedDependencies,\n };\n }\n\n private checkCompatibility(\n mfeMetadata: Metadata,\n hostData: HostPackageJSON\n ): CompatibilityResult {\n const mfeSharedDependencies = mfeMetadata.sharedDependencies;\n const hostSharedDependencies = loadSharedDependencies(\n hostData.dependencies,\n hostData.cli?.webpack?.['shared-dependencies']\n );\n const exposedDependencies = getExposedDependencies(\n hostSharedDependencies,\n hostData.dependencies\n );\n const mismatchResult = getVersionMismatches(\n exposedDependencies,\n mfeMetadata.dependencies,\n mfeSharedDependencies\n );\n\n const isHostMfe = isWebComponent(hostData);\n const isSharedDependenciesEnabled =\n hostData.cli?.webpack?.['expose-shared-dependencies'] === true;\n const compatible = !isHostMfe && !mismatchResult && isSharedDependenciesEnabled;\n\n return {\n name: mfeMetadata.name,\n compatible,\n bundleType: compatible ? 'light' : 'full',\n isSharedDependenciesEnabled,\n isHostMfe,\n ...(mismatchResult ? { mismatches: mismatchResult } : {}),\n };\n }\n\n private outputJson(result: CompatibilityResult) {\n process.stdout.write(JSON.stringify(result, null, 2) + '\\n');\n }\n\n private outputHumanReadable(result: CompatibilityResult) {\n log.info(`Checking ${result.name}...`);\n\n if (result.isHostMfe) {\n log.error('Skipping compatibility check because host is an MFE');\n return;\n }\n\n if (result.compatible) {\n log.info('Compatible: light bundle can be used');\n return;\n }\n\n if (result.mismatches) {\n log.error('Dependency mismatch found:');\n\n for (const [dep, versions] of Object.entries(result.mismatches)) {\n log.error(` ${dep}: host=${versions.host}, package=${versions.package}`);\n }\n }\n\n if (!result.isSharedDependenciesEnabled) {\n log.error('expose-shared-dependencies is not enabled in host package.json');\n }\n\n log.error('Result: full bundle required');\n }\n}\n"],"names":["MfeCheck","Command","execute","metadata","metadataPath","hostPackageJson","json","args","mfeMetadata","readJson","path","resolve","hostPackageJsonPaths","toArray","hostData","getHostPackageData","result","checkCompatibility","outputJson","outputHumanReadable","compatible","process","exitCode","Promise","packageJsonPaths","packages","map","packageJsonPath","mergedDependencies","reduceRight","currentPackage","Object","assign","dependencies","mainPackage","name","cli","mfeSharedDependencies","sharedDependencies","hostSharedDependencies","loadSharedDependencies","webpack","exposedDependencies","getExposedDependencies","mismatchResult","getVersionMismatches","isHostMfe","isWebComponent","isSharedDependenciesEnabled","bundleType","mismatches","stdout","write","JSON","stringify","log","info","error","dep","versions","entries","host","package"],"mappings":"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"}
@@ -8,21 +8,21 @@ Object.defineProperty(exports, "findUp", {
8
8
  return findUp;
9
9
  }
10
10
  });
11
- const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
11
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
12
12
  function _interop_require_default(obj) {
13
13
  return obj && obj.__esModule ? obj : {
14
14
  default: obj
15
15
  };
16
16
  }
17
17
  function findUp(callback) {
18
- let directory = _nodepath.default.resolve('./');
18
+ let directory = _path.default.resolve('./');
19
19
  do {
20
20
  const result = callback(directory);
21
21
  if (result) {
22
22
  return result;
23
23
  }
24
- directory = _nodepath.default.resolve(_nodepath.default.join(directory, '../'));
25
- }while (_nodepath.default.parse(directory).name)
24
+ directory = _path.default.resolve(_path.default.join(directory, '../'));
25
+ }while (_path.default.parse(directory).name)
26
26
  }
27
27
 
28
28
  //# sourceMappingURL=find-up.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/find-up.ts"],"sourcesContent":["import path from 'node:path';\n\nexport function findUp<T>(callback: (directory: string) => T | undefined) {\n let directory = path.resolve('./');\n do {\n const result = callback(directory);\n if (result) {\n return result;\n }\n directory = path.resolve(path.join(directory, '../'));\n } while (path.parse(directory).name);\n}\n"],"names":["findUp","callback","directory","path","resolve","result","join","parse","name"],"mappings":";;;;+BAEgBA;;;eAAAA;;;iEAFC;;;;;;AAEV,SAASA,OAAUC,QAA8C;IACpE,IAAIC,YAAYC,iBAAI,CAACC,OAAO,CAAC;IAC7B,GAAG;QACC,MAAMC,SAASJ,SAASC;QACxB,IAAIG,QAAQ;YACR,OAAOA;QACX;QACAH,YAAYC,iBAAI,CAACC,OAAO,CAACD,iBAAI,CAACG,IAAI,CAACJ,WAAW;IAClD,QAASC,iBAAI,CAACI,KAAK,CAACL,WAAWM,IAAI,CAAE;AACzC"}
1
+ {"version":3,"sources":["../../src/utils/find-up.ts"],"sourcesContent":["import path from 'path';\n\nexport function findUp<T>(callback: (directory: string) => T | undefined) {\n let directory = path.resolve('./');\n do {\n const result = callback(directory);\n if (result) {\n return result;\n }\n directory = path.resolve(path.join(directory, '../'));\n } while (path.parse(directory).name);\n}\n"],"names":["findUp","callback","directory","path","resolve","result","join","parse","name"],"mappings":";;;;+BAEgBA;;;eAAAA;;;6DAFC;;;;;;AAEV,SAASA,OAAUC,QAA8C;IACpE,IAAIC,YAAYC,aAAI,CAACC,OAAO,CAAC;IAC7B,GAAG;QACC,MAAMC,SAASJ,SAASC;QACxB,IAAIG,QAAQ;YACR,OAAOA;QACX;QACAH,YAAYC,aAAI,CAACC,OAAO,CAACD,aAAI,CAACG,IAAI,CAACJ,WAAW;IAClD,QAASC,aAAI,CAACI,KAAK,CAACL,WAAWM,IAAI,CAAE;AACzC"}
@@ -40,7 +40,7 @@ function getDefaultJestConfiguration() {
40
40
  modulePathIgnorePatterns: [
41
41
  '<rootDir>/.*/__mocks__'
42
42
  ],
43
- preset: _path.default.join(__dirname, '../../jest'),
43
+ preset: '@servicetitan/startup',
44
44
  resolver: '@servicetitan/startup/jest-resolver',
45
45
  setupFiles: [
46
46
  _path.default.join(__dirname, '../../jest/setup.js')
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/get-jest-config.ts"],"sourcesContent":["import { Config } from '@jest/types';\nimport path from 'path';\nimport { getJestConfiguration } from './get-configuration';\nimport { getDefaultTestExcludes } from './get-default-test-excludes';\nimport { omit } from './omit';\nimport { toArray } from './to-array';\n\nfunction getDefaultJestConfiguration() {\n const moduleNameMapper = {\n '\\\\.(css|scss|less|png|jpg|jpeg|gif|woff|woff2|eot|ttf|otf)$': 'identity-obj-proxy',\n };\n\n return {\n collectCoverageFrom: ['**/*.{ts,tsx}'],\n coveragePathIgnorePatterns: [...getDefaultTestExcludes()],\n coverageReporters: ['html-spa', 'text', 'json', 'cobertura', 'lcov'],\n moduleNameMapper,\n modulePathIgnorePatterns: ['<rootDir>/.*/__mocks__'],\n preset: path.join(__dirname, '../../jest'),\n resolver: '@servicetitan/startup/jest-resolver',\n setupFiles: [path.join(__dirname, '../../jest/setup.js')],\n testEnvironment: 'jsdom',\n testPathIgnorePatterns: [...getDefaultTestExcludes()],\n testRunner: 'jest-circus/runner',\n // Under pnpm, dependencies are nested (e.g. node_modules/.pnpm/…/node_modules/pkg); the extra lookahead skips the inner node_modules.\n transformIgnorePatterns: [\n 'node_modules/(?!.*node_modules/)(?!(@servicetitan|@react-hook|nanoid|axios)/)',\n ],\n verbose: true,\n } as Omit<Config.Argv, 'collectCoverageFrom' | 'moduleNameMapper' | 'setupFiles'> & {\n collectCoverageFrom: string[];\n moduleNameMapper: Record<string, string>;\n setupFiles: string[];\n };\n}\n\n/**\n * Get Jest config for running it using jest CLI (see jest runCLI function)\n */\nexport function getJestConfigCLI(args: Config.Argv): Config.Argv {\n const {\n coveragePathIgnorePatterns,\n omitDefault = [],\n setupFiles,\n testPathIgnorePatterns,\n ...config\n } = {\n ...getJestConfiguration(),\n ...args,\n };\n\n const defaultConfig = omit(getDefaultJestConfiguration(), omitDefault);\n\n let moduleNameMapper: Record<string, string> | undefined =\n typeof config.moduleNameMapper === 'string'\n ? JSON.parse(config.moduleNameMapper)\n : config.moduleNameMapper;\n\n if (defaultConfig.moduleNameMapper) {\n moduleNameMapper = { ...moduleNameMapper, ...defaultConfig.moduleNameMapper };\n }\n\n const reporters: string[] | undefined =\n typeof config.reporters === 'string' ? [config.reporters] : config.reporters;\n\n return stringifyForCLI({\n ...mergeArrayValues(defaultConfig, {\n coveragePathIgnorePatterns,\n setupFiles,\n testPathIgnorePatterns,\n }),\n ...config,\n ...(moduleNameMapper ? { moduleNameMapper } : {}),\n ...(reporters ? { reporters } : {}),\n });\n}\n\nfunction mergeArrayValues(\n config: any,\n arrayValues: {\n coveragePathIgnorePatterns?: string | string[];\n setupFiles?: string | string[];\n testPathIgnorePatterns?: string | string[];\n }\n) {\n return Object.keys(arrayValues).reduce((result, key: keyof typeof arrayValues) => {\n const newValue = arrayValues[key];\n if (newValue) {\n result[key] = [...toArray(result[key]), ...toArray(newValue)];\n }\n return result;\n }, config);\n}\n\nfunction stringifyForCLI(config: any): Config.Argv {\n return ['collectCoverageFrom', 'globals', 'moduleNameMapper', 'transform'].reduce(\n (result, key) => {\n const value = result[key];\n if (value && typeof value !== 'string') {\n result[key] = JSON.stringify(result[key]);\n }\n return result;\n },\n config\n );\n}\n"],"names":["getJestConfigCLI","getDefaultJestConfiguration","moduleNameMapper","collectCoverageFrom","coveragePathIgnorePatterns","getDefaultTestExcludes","coverageReporters","modulePathIgnorePatterns","preset","path","join","__dirname","resolver","setupFiles","testEnvironment","testPathIgnorePatterns","testRunner","transformIgnorePatterns","verbose","args","omitDefault","config","getJestConfiguration","defaultConfig","omit","JSON","parse","reporters","stringifyForCLI","mergeArrayValues","arrayValues","Object","keys","reduce","result","key","newValue","toArray","value","stringify"],"mappings":";;;;+BAuCgBA;;;eAAAA;;;6DAtCC;kCACoB;wCACE;sBAClB;yBACG;;;;;;AAExB,SAASC;IACL,MAAMC,mBAAmB;QACrB,+DAA+D;IACnE;IAEA,OAAO;QACHC,qBAAqB;YAAC;SAAgB;QACtCC,4BAA4B;eAAIC,IAAAA,8CAAsB;SAAG;QACzDC,mBAAmB;YAAC;YAAY;YAAQ;YAAQ;YAAa;SAAO;QACpEJ;QACAK,0BAA0B;YAAC;SAAyB;QACpDC,QAAQC,aAAI,CAACC,IAAI,CAACC,WAAW;QAC7BC,UAAU;QACVC,YAAY;YAACJ,aAAI,CAACC,IAAI,CAACC,WAAW;SAAuB;QACzDG,iBAAiB;QACjBC,wBAAwB;eAAIV,IAAAA,8CAAsB;SAAG;QACrDW,YAAY;QACZ,sIAAsI;QACtIC,yBAAyB;YACrB;SACH;QACDC,SAAS;IACb;AAKJ;AAKO,SAASlB,iBAAiBmB,IAAiB;IAC9C,MAAM,EACFf,0BAA0B,EAC1BgB,cAAc,EAAE,EAChBP,UAAU,EACVE,sBAAsB,EACtB,GAAGM,QACN,GAAG;QACA,GAAGC,IAAAA,sCAAoB,GAAE;QACzB,GAAGH,IAAI;IACX;IAEA,MAAMI,gBAAgBC,IAAAA,UAAI,EAACvB,+BAA+BmB;IAE1D,IAAIlB,mBACA,OAAOmB,OAAOnB,gBAAgB,KAAK,WAC7BuB,KAAKC,KAAK,CAACL,OAAOnB,gBAAgB,IAClCmB,OAAOnB,gBAAgB;IAEjC,IAAIqB,cAAcrB,gBAAgB,EAAE;QAChCA,mBAAmB;YAAE,GAAGA,gBAAgB;YAAE,GAAGqB,cAAcrB,gBAAgB;QAAC;IAChF;IAEA,MAAMyB,YACF,OAAON,OAAOM,SAAS,KAAK,WAAW;QAACN,OAAOM,SAAS;KAAC,GAAGN,OAAOM,SAAS;IAEhF,OAAOC,gBAAgB;QACnB,GAAGC,iBAAiBN,eAAe;YAC/BnB;YACAS;YACAE;QACJ,EAAE;QACF,GAAGM,MAAM;QACT,GAAInB,mBAAmB;YAAEA;QAAiB,IAAI,CAAC,CAAC;QAChD,GAAIyB,YAAY;YAAEA;QAAU,IAAI,CAAC,CAAC;IACtC;AACJ;AAEA,SAASE,iBACLR,MAAW,EACXS,WAIC;IAED,OAAOC,OAAOC,IAAI,CAACF,aAAaG,MAAM,CAAC,CAACC,QAAQC;QAC5C,MAAMC,WAAWN,WAAW,CAACK,IAAI;QACjC,IAAIC,UAAU;YACVF,MAAM,CAACC,IAAI,GAAG;mBAAIE,IAAAA,gBAAO,EAACH,MAAM,CAACC,IAAI;mBAAME,IAAAA,gBAAO,EAACD;aAAU;QACjE;QACA,OAAOF;IACX,GAAGb;AACP;AAEA,SAASO,gBAAgBP,MAAW;IAChC,OAAO;QAAC;QAAuB;QAAW;QAAoB;KAAY,CAACY,MAAM,CAC7E,CAACC,QAAQC;QACL,MAAMG,QAAQJ,MAAM,CAACC,IAAI;QACzB,IAAIG,SAAS,OAAOA,UAAU,UAAU;YACpCJ,MAAM,CAACC,IAAI,GAAGV,KAAKc,SAAS,CAACL,MAAM,CAACC,IAAI;QAC5C;QACA,OAAOD;IACX,GACAb;AAER"}
1
+ {"version":3,"sources":["../../src/utils/get-jest-config.ts"],"sourcesContent":["import { Config } from '@jest/types';\nimport path from 'path';\nimport { getJestConfiguration } from './get-configuration';\nimport { getDefaultTestExcludes } from './get-default-test-excludes';\nimport { omit } from './omit';\nimport { toArray } from './to-array';\n\nfunction getDefaultJestConfiguration() {\n const moduleNameMapper = {\n '\\\\.(css|scss|less|png|jpg|jpeg|gif|woff|woff2|eot|ttf|otf)$': 'identity-obj-proxy',\n };\n\n return {\n collectCoverageFrom: ['**/*.{ts,tsx}'],\n coveragePathIgnorePatterns: [...getDefaultTestExcludes()],\n coverageReporters: ['html-spa', 'text', 'json', 'cobertura', 'lcov'],\n moduleNameMapper,\n modulePathIgnorePatterns: ['<rootDir>/.*/__mocks__'],\n preset: '@servicetitan/startup',\n resolver: '@servicetitan/startup/jest-resolver',\n setupFiles: [path.join(__dirname, '../../jest/setup.js')],\n testEnvironment: 'jsdom',\n testPathIgnorePatterns: [...getDefaultTestExcludes()],\n testRunner: 'jest-circus/runner',\n // Under pnpm, dependencies are nested (e.g. node_modules/.pnpm/…/node_modules/pkg); the extra lookahead skips the inner node_modules.\n transformIgnorePatterns: [\n 'node_modules/(?!.*node_modules/)(?!(@servicetitan|@react-hook|nanoid|axios)/)',\n ],\n verbose: true,\n } as Omit<Config.Argv, 'collectCoverageFrom' | 'moduleNameMapper' | 'setupFiles'> & {\n collectCoverageFrom: string[];\n moduleNameMapper: Record<string, string>;\n setupFiles: string[];\n };\n}\n\n/**\n * Get Jest config for running it using jest CLI (see jest runCLI function)\n */\nexport function getJestConfigCLI(args: Config.Argv): Config.Argv {\n const {\n coveragePathIgnorePatterns,\n omitDefault = [],\n setupFiles,\n testPathIgnorePatterns,\n ...config\n } = {\n ...getJestConfiguration(),\n ...args,\n };\n\n const defaultConfig = omit(getDefaultJestConfiguration(), omitDefault);\n\n let moduleNameMapper: Record<string, string> | undefined =\n typeof config.moduleNameMapper === 'string'\n ? JSON.parse(config.moduleNameMapper)\n : config.moduleNameMapper;\n\n if (defaultConfig.moduleNameMapper) {\n moduleNameMapper = { ...moduleNameMapper, ...defaultConfig.moduleNameMapper };\n }\n\n const reporters: string[] | undefined =\n typeof config.reporters === 'string' ? [config.reporters] : config.reporters;\n\n return stringifyForCLI({\n ...mergeArrayValues(defaultConfig, {\n coveragePathIgnorePatterns,\n setupFiles,\n testPathIgnorePatterns,\n }),\n ...config,\n ...(moduleNameMapper ? { moduleNameMapper } : {}),\n ...(reporters ? { reporters } : {}),\n });\n}\n\nfunction mergeArrayValues(\n config: any,\n arrayValues: {\n coveragePathIgnorePatterns?: string | string[];\n setupFiles?: string | string[];\n testPathIgnorePatterns?: string | string[];\n }\n) {\n return Object.keys(arrayValues).reduce((result, key: keyof typeof arrayValues) => {\n const newValue = arrayValues[key];\n if (newValue) {\n result[key] = [...toArray(result[key]), ...toArray(newValue)];\n }\n return result;\n }, config);\n}\n\nfunction stringifyForCLI(config: any): Config.Argv {\n return ['collectCoverageFrom', 'globals', 'moduleNameMapper', 'transform'].reduce(\n (result, key) => {\n const value = result[key];\n if (value && typeof value !== 'string') {\n result[key] = JSON.stringify(result[key]);\n }\n return result;\n },\n config\n );\n}\n"],"names":["getJestConfigCLI","getDefaultJestConfiguration","moduleNameMapper","collectCoverageFrom","coveragePathIgnorePatterns","getDefaultTestExcludes","coverageReporters","modulePathIgnorePatterns","preset","resolver","setupFiles","path","join","__dirname","testEnvironment","testPathIgnorePatterns","testRunner","transformIgnorePatterns","verbose","args","omitDefault","config","getJestConfiguration","defaultConfig","omit","JSON","parse","reporters","stringifyForCLI","mergeArrayValues","arrayValues","Object","keys","reduce","result","key","newValue","toArray","value","stringify"],"mappings":";;;;+BAuCgBA;;;eAAAA;;;6DAtCC;kCACoB;wCACE;sBAClB;yBACG;;;;;;AAExB,SAASC;IACL,MAAMC,mBAAmB;QACrB,+DAA+D;IACnE;IAEA,OAAO;QACHC,qBAAqB;YAAC;SAAgB;QACtCC,4BAA4B;eAAIC,IAAAA,8CAAsB;SAAG;QACzDC,mBAAmB;YAAC;YAAY;YAAQ;YAAQ;YAAa;SAAO;QACpEJ;QACAK,0BAA0B;YAAC;SAAyB;QACpDC,QAAQ;QACRC,UAAU;QACVC,YAAY;YAACC,aAAI,CAACC,IAAI,CAACC,WAAW;SAAuB;QACzDC,iBAAiB;QACjBC,wBAAwB;eAAIV,IAAAA,8CAAsB;SAAG;QACrDW,YAAY;QACZ,sIAAsI;QACtIC,yBAAyB;YACrB;SACH;QACDC,SAAS;IACb;AAKJ;AAKO,SAASlB,iBAAiBmB,IAAiB;IAC9C,MAAM,EACFf,0BAA0B,EAC1BgB,cAAc,EAAE,EAChBV,UAAU,EACVK,sBAAsB,EACtB,GAAGM,QACN,GAAG;QACA,GAAGC,IAAAA,sCAAoB,GAAE;QACzB,GAAGH,IAAI;IACX;IAEA,MAAMI,gBAAgBC,IAAAA,UAAI,EAACvB,+BAA+BmB;IAE1D,IAAIlB,mBACA,OAAOmB,OAAOnB,gBAAgB,KAAK,WAC7BuB,KAAKC,KAAK,CAACL,OAAOnB,gBAAgB,IAClCmB,OAAOnB,gBAAgB;IAEjC,IAAIqB,cAAcrB,gBAAgB,EAAE;QAChCA,mBAAmB;YAAE,GAAGA,gBAAgB;YAAE,GAAGqB,cAAcrB,gBAAgB;QAAC;IAChF;IAEA,MAAMyB,YACF,OAAON,OAAOM,SAAS,KAAK,WAAW;QAACN,OAAOM,SAAS;KAAC,GAAGN,OAAOM,SAAS;IAEhF,OAAOC,gBAAgB;QACnB,GAAGC,iBAAiBN,eAAe;YAC/BnB;YACAM;YACAK;QACJ,EAAE;QACF,GAAGM,MAAM;QACT,GAAInB,mBAAmB;YAAEA;QAAiB,IAAI,CAAC,CAAC;QAChD,GAAIyB,YAAY;YAAEA;QAAU,IAAI,CAAC,CAAC;IACtC;AACJ;AAEA,SAASE,iBACLR,MAAW,EACXS,WAIC;IAED,OAAOC,OAAOC,IAAI,CAACF,aAAaG,MAAM,CAAC,CAACC,QAAQC;QAC5C,MAAMC,WAAWN,WAAW,CAACK,IAAI;QACjC,IAAIC,UAAU;YACVF,MAAM,CAACC,IAAI,GAAG;mBAAIE,IAAAA,gBAAO,EAACH,MAAM,CAACC,IAAI;mBAAME,IAAAA,gBAAO,EAACD;aAAU;QACjE;QACA,OAAOF;IACX,GAAGb;AACP;AAEA,SAASO,gBAAgBP,MAAW;IAChC,OAAO;QAAC;QAAuB;QAAW;QAAoB;KAAY,CAACY,MAAM,CAC7E,CAACC,QAAQC;QACL,MAAMG,QAAQJ,MAAM,CAACC,IAAI;QACzB,IAAIG,SAAS,OAAOA,UAAU,UAAU;YACpCJ,MAAM,CAACC,IAAI,GAAGV,KAAKc,SAAS,CAACL,MAAM,CAACC,IAAI;QAC5C;QACA,OAAOD;IACX,GACAb;AAER"}
@@ -5,5 +5,6 @@ interface PackageData {
5
5
  sharedDependencies?: Record<string, string>;
6
6
  }
7
7
  export declare function getPackageData(): PackageData;
8
+ export declare function getPackageDependencyVersion(dependency: string, defaultVersion?: string): any;
8
9
  export {};
9
10
  //# sourceMappingURL=get-package-data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-package-data.d.ts","sourceRoot":"","sources":["../../src/utils/get-package-data.ts"],"names":[],"mappings":"AAEA,UAAU,WAAW;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C;AAED,wBAAgB,cAAc,IAAI,WAAW,CAY5C"}
1
+ {"version":3,"file":"get-package-data.d.ts","sourceRoot":"","sources":["../../src/utils/get-package-data.ts"],"names":[],"mappings":"AAEA,UAAU,WAAW;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C;AAED,wBAAgB,cAAc,IAAI,WAAW,CAY5C;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,OAYtF"}
@@ -2,10 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "getPackageData", {
6
- enumerable: true,
7
- get: function() {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get getPackageData () {
8
13
  return getPackageData;
14
+ },
15
+ get getPackageDependencyVersion () {
16
+ return getPackageDependencyVersion;
9
17
  }
10
18
  });
11
19
  const _readjson = require("./read-json");
@@ -22,5 +30,16 @@ function getPackageData() {
22
30
  sharedDependencies: (_packageJson_cli = packageJson.cli) === null || _packageJson_cli === void 0 ? void 0 : (_packageJson_cli_webpack = _packageJson_cli.webpack) === null || _packageJson_cli_webpack === void 0 ? void 0 : _packageJson_cli_webpack['shared-dependencies']
23
31
  };
24
32
  }
33
+ function getPackageDependencyVersion(dependency, defaultVersion) {
34
+ try {
35
+ const { version } = require(`${dependency}/package.json`);
36
+ if (version) {
37
+ return version;
38
+ }
39
+ } catch (unused) {
40
+ // skip error
41
+ }
42
+ return defaultVersion;
43
+ }
25
44
 
26
45
  //# sourceMappingURL=get-package-data.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/get-package-data.ts"],"sourcesContent":["import { readJson } from './read-json';\n\ninterface PackageData {\n name: string;\n version: string;\n dependencies: Record<string, string>;\n sharedDependencies?: Record<string, string>;\n}\n\nexport function getPackageData(): PackageData {\n const packageJson = readJson('./package.json');\n\n return {\n name: packageJson.name,\n version: packageJson.version,\n dependencies: {\n ...readJson('../../package.json').dependencies,\n ...packageJson.dependencies,\n },\n sharedDependencies: packageJson.cli?.webpack?.['shared-dependencies'],\n };\n}\n"],"names":["getPackageData","packageJson","readJson","name","version","dependencies","sharedDependencies","cli","webpack"],"mappings":";;;;+BASgBA;;;eAAAA;;;0BATS;AASlB,SAASA;QAUYC,0BAAAA;IATxB,MAAMA,cAAcC,IAAAA,kBAAQ,EAAC;IAE7B,OAAO;QACHC,MAAMF,YAAYE,IAAI;QACtBC,SAASH,YAAYG,OAAO;QAC5BC,cAAc;YACV,GAAGH,IAAAA,kBAAQ,EAAC,sBAAsBG,YAAY;YAC9C,GAAGJ,YAAYI,YAAY;QAC/B;QACAC,kBAAkB,GAAEL,mBAAAA,YAAYM,GAAG,cAAfN,wCAAAA,2BAAAA,iBAAiBO,OAAO,cAAxBP,+CAAAA,wBAA0B,CAAC,sBAAsB;IACzE;AACJ"}
1
+ {"version":3,"sources":["../../src/utils/get-package-data.ts"],"sourcesContent":["import { readJson } from './read-json';\n\ninterface PackageData {\n name: string;\n version: string;\n dependencies: Record<string, string>;\n sharedDependencies?: Record<string, string>;\n}\n\nexport function getPackageData(): PackageData {\n const packageJson = readJson('./package.json');\n\n return {\n name: packageJson.name,\n version: packageJson.version,\n dependencies: {\n ...readJson('../../package.json').dependencies,\n ...packageJson.dependencies,\n },\n sharedDependencies: packageJson.cli?.webpack?.['shared-dependencies'],\n };\n}\n\nexport function getPackageDependencyVersion(dependency: string, defaultVersion?: string) {\n try {\n const { version } = require(`${dependency}/package.json`);\n\n if (version) {\n return version;\n }\n } catch {\n // skip error\n }\n\n return defaultVersion;\n}\n"],"names":["getPackageData","getPackageDependencyVersion","packageJson","readJson","name","version","dependencies","sharedDependencies","cli","webpack","dependency","defaultVersion","require"],"mappings":";;;;;;;;;;;QASgBA;eAAAA;;QAcAC;eAAAA;;;0BAvBS;AASlB,SAASD;QAUYE,0BAAAA;IATxB,MAAMA,cAAcC,IAAAA,kBAAQ,EAAC;IAE7B,OAAO;QACHC,MAAMF,YAAYE,IAAI;QACtBC,SAASH,YAAYG,OAAO;QAC5BC,cAAc;YACV,GAAGH,IAAAA,kBAAQ,EAAC,sBAAsBG,YAAY;YAC9C,GAAGJ,YAAYI,YAAY;QAC/B;QACAC,kBAAkB,GAAEL,mBAAAA,YAAYM,GAAG,cAAfN,wCAAAA,2BAAAA,iBAAiBO,OAAO,cAAxBP,+CAAAA,wBAA0B,CAAC,sBAAsB;IACzE;AACJ;AAEO,SAASD,4BAA4BS,UAAkB,EAAEC,cAAuB;IACnF,IAAI;QACA,MAAM,EAAEN,OAAO,EAAE,GAAGO,QAAQ,GAAGF,WAAW,aAAa,CAAC;QAExD,IAAIL,SAAS;YACT,OAAOA;QACX;IACJ,EAAE,eAAM;IACJ,aAAa;IACjB;IAEA,OAAOM;AACX"}
@@ -19,7 +19,6 @@ export * from './load-shared-dependencies';
19
19
  export * from './log';
20
20
  export * from './log-errors';
21
21
  export * from './omit';
22
- export * from './package-lock';
23
22
  export * from './pick';
24
23
  export * from './prettify';
25
24
  export * from './read-json';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -23,7 +23,6 @@ _export_star(require("./load-shared-dependencies"), exports);
23
23
  _export_star(require("./log"), exports);
24
24
  _export_star(require("./log-errors"), exports);
25
25
  _export_star(require("./omit"), exports);
26
- _export_star(require("./package-lock"), exports);
27
26
  _export_star(require("./pick"), exports);
28
27
  _export_star(require("./prettify"), exports);
29
28
  _export_star(require("./read-json"), exports);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["export * from './find-packages';\nexport * from './find-up';\nexport * from './format-duration';\nexport * from './format-relative-date';\nexport * from './get-base-tsconfig';\nexport * from './get-branch-configs';\nexport * from './get-configuration';\nexport * from './get-default-test-excludes';\nexport * from './get-destination-folders';\nexport * from './get-folders';\nexport * from './get-jest-config';\nexport * from './get-package-data';\nexport * from './get-package-name';\nexport * from './get-packages';\nexport * from './get-startup-version';\nexport * from './get-tsconfig';\nexport * from './get-tsconfig-with-fallback';\nexport * from './load-shared-dependencies';\nexport * from './log';\nexport * from './log-errors';\nexport * from './omit';\nexport * from './package-lock';\nexport * from './pick';\nexport * from './prettify';\nexport * from './read-json';\nexport * from './to-array';\n"],"names":[],"mappings":";;;;qBAAc;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA"}
1
+ {"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["export * from './find-packages';\nexport * from './find-up';\nexport * from './format-duration';\nexport * from './format-relative-date';\nexport * from './get-base-tsconfig';\nexport * from './get-branch-configs';\nexport * from './get-configuration';\nexport * from './get-default-test-excludes';\nexport * from './get-destination-folders';\nexport * from './get-folders';\nexport * from './get-jest-config';\nexport * from './get-package-data';\nexport * from './get-package-name';\nexport * from './get-packages';\nexport * from './get-startup-version';\nexport * from './get-tsconfig';\nexport * from './get-tsconfig-with-fallback';\nexport * from './load-shared-dependencies';\nexport * from './log';\nexport * from './log-errors';\nexport * from './omit';\nexport * from './pick';\nexport * from './prettify';\nexport * from './read-json';\nexport * from './to-array';\n"],"names":[],"mappings":";;;;qBAAc;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA"}
@@ -1 +1 @@
1
- {"version":3,"file":"define-exposed-dependencies-plugin.d.ts","sourceRoot":"","sources":["../../../../src/webpack/configs/plugins/define-exposed-dependencies-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG9C,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,4BAkB7E"}
1
+ {"version":3,"file":"define-exposed-dependencies-plugin.d.ts","sourceRoot":"","sources":["../../../../src/webpack/configs/plugins/define-exposed-dependencies-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG9C,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,4BAe7E"}
@@ -17,11 +17,9 @@ function defineExposedDependenciesPlugin(context, _) {
17
17
  return;
18
18
  }
19
19
  const { packageData, sharedDependencies } = context;
20
- const lockFile = (0, _utils.readPackageLock)();
21
20
  const exposedDependencies = (0, _utils1.getExposedDependencies)(sharedDependencies, (dependency)=>{
22
- var _getLockFileVersion;
23
21
  var _packageData_dependencies;
24
- return (_getLockFileVersion = (0, _utils.getLockFileVersion)(lockFile, dependency)) !== null && _getLockFileVersion !== void 0 ? _getLockFileVersion : (_packageData_dependencies = packageData.dependencies) === null || _packageData_dependencies === void 0 ? void 0 : _packageData_dependencies[dependency];
22
+ return (0, _utils.getPackageDependencyVersion)(dependency, (_packageData_dependencies = packageData.dependencies) === null || _packageData_dependencies === void 0 ? void 0 : _packageData_dependencies[dependency]);
25
23
  });
26
24
  return new _webpack.DefinePlugin({
27
25
  // eslint-disable-next-line @typescript-eslint/naming-convention
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/webpack/configs/plugins/define-exposed-dependencies-plugin.ts"],"sourcesContent":["import { DefinePlugin } from 'webpack';\nimport { getLockFileVersion, readPackageLock } from '../../../utils';\nimport { Context, Overrides } from '../types';\nimport { getExposedDependencies } from '../utils';\n\nexport function defineExposedDependenciesPlugin(context: Context, _: Overrides) {\n const { emitExposedDependencies, isExposeSharedDependencies } = context;\n if (!isExposeSharedDependencies || emitExposedDependencies) {\n return;\n }\n\n const { packageData, sharedDependencies } = context;\n const lockFile = readPackageLock();\n const exposedDependencies = getExposedDependencies(\n sharedDependencies,\n dependency =>\n getLockFileVersion(lockFile, dependency) ?? packageData.dependencies?.[dependency]\n );\n\n return new DefinePlugin({\n // eslint-disable-next-line @typescript-eslint/naming-convention\n EXPOSED_DEPENDENCIES: JSON.stringify(exposedDependencies),\n });\n}\n"],"names":["defineExposedDependenciesPlugin","context","_","emitExposedDependencies","isExposeSharedDependencies","packageData","sharedDependencies","lockFile","readPackageLock","exposedDependencies","getExposedDependencies","dependency","getLockFileVersion","dependencies","DefinePlugin","EXPOSED_DEPENDENCIES","JSON","stringify"],"mappings":";;;;+BAKgBA;;;eAAAA;;;yBALa;uBACuB;wBAEb;AAEhC,SAASA,gCAAgCC,OAAgB,EAAEC,CAAY;IAC1E,MAAM,EAAEC,uBAAuB,EAAEC,0BAA0B,EAAE,GAAGH;IAChE,IAAI,CAACG,8BAA8BD,yBAAyB;QACxD;IACJ;IAEA,MAAM,EAAEE,WAAW,EAAEC,kBAAkB,EAAE,GAAGL;IAC5C,MAAMM,WAAWC,IAAAA,sBAAe;IAChC,MAAMC,sBAAsBC,IAAAA,8BAAsB,EAC9CJ,oBACAK,CAAAA;YACIC;YAA4CP;gBAA5CO,sBAAAA,IAAAA,yBAAkB,EAACL,UAAUI,yBAA7BC,iCAAAA,uBAA4CP,4BAAAA,YAAYQ,YAAY,cAAxBR,gDAAAA,yBAA0B,CAACM,WAAW;;IAG1F,OAAO,IAAIG,qBAAY,CAAC;QACpB,gEAAgE;QAChEC,sBAAsBC,KAAKC,SAAS,CAACR;IACzC;AACJ"}
1
+ {"version":3,"sources":["../../../../src/webpack/configs/plugins/define-exposed-dependencies-plugin.ts"],"sourcesContent":["import { DefinePlugin } from 'webpack';\nimport { getPackageDependencyVersion } from '../../../utils';\nimport { Context, Overrides } from '../types';\nimport { getExposedDependencies } from '../utils';\n\nexport function defineExposedDependenciesPlugin(context: Context, _: Overrides) {\n const { emitExposedDependencies, isExposeSharedDependencies } = context;\n if (!isExposeSharedDependencies || emitExposedDependencies) {\n return;\n }\n\n const { packageData, sharedDependencies } = context;\n const exposedDependencies = getExposedDependencies(sharedDependencies, dependency =>\n getPackageDependencyVersion(dependency, packageData.dependencies?.[dependency])\n );\n\n return new DefinePlugin({\n // eslint-disable-next-line @typescript-eslint/naming-convention\n EXPOSED_DEPENDENCIES: JSON.stringify(exposedDependencies),\n });\n}\n"],"names":["defineExposedDependenciesPlugin","context","_","emitExposedDependencies","isExposeSharedDependencies","packageData","sharedDependencies","exposedDependencies","getExposedDependencies","dependency","getPackageDependencyVersion","dependencies","DefinePlugin","EXPOSED_DEPENDENCIES","JSON","stringify"],"mappings":";;;;+BAKgBA;;;eAAAA;;;yBALa;uBACe;wBAEL;AAEhC,SAASA,gCAAgCC,OAAgB,EAAEC,CAAY;IAC1E,MAAM,EAAEC,uBAAuB,EAAEC,0BAA0B,EAAE,GAAGH;IAChE,IAAI,CAACG,8BAA8BD,yBAAyB;QACxD;IACJ;IAEA,MAAM,EAAEE,WAAW,EAAEC,kBAAkB,EAAE,GAAGL;IAC5C,MAAMM,sBAAsBC,IAAAA,8BAAsB,EAACF,oBAAoBG,CAAAA;YAC3BJ;eAAxCK,IAAAA,kCAA2B,EAACD,aAAYJ,4BAAAA,YAAYM,YAAY,cAAxBN,gDAAAA,yBAA0B,CAACI,WAAW;;IAGlF,OAAO,IAAIG,qBAAY,CAAC;QACpB,gEAAgE;QAChEC,sBAAsBC,KAAKC,SAAS,CAACR;IACzC;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-launchdarkly-sdk-version.d.ts","sourceRoot":"","sources":["../../../../src/webpack/configs/utils/get-launchdarkly-sdk-version.ts"],"names":[],"mappings":"AAEA,wBAAgB,yBAAyB,uBAExC"}
1
+ {"version":3,"file":"get-launchdarkly-sdk-version.d.ts","sourceRoot":"","sources":["../../../../src/webpack/configs/utils/get-launchdarkly-sdk-version.ts"],"names":[],"mappings":"AAGA,wBAAgB,yBAAyB,uBAWxC"}
@@ -8,9 +8,19 @@ Object.defineProperty(exports, "getLaunchDarklySdkVersion", {
8
8
  return getLaunchDarklySdkVersion;
9
9
  }
10
10
  });
11
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
11
12
  const _utils = require("../../../utils");
13
+ function _interop_require_default(obj) {
14
+ return obj && obj.__esModule ? obj : {
15
+ default: obj
16
+ };
17
+ }
12
18
  function getLaunchDarklySdkVersion() {
13
- return (0, _utils.getLockFileVersion)((0, _utils.readPackageLock)(), 'launchdarkly-js-client-sdk');
19
+ try {
20
+ return (0, _utils.readJson)(_path.default.join(_path.default.dirname(require.resolve('launchdarkly-js-client-sdk')), '../package.json')).version;
21
+ } catch (unused) {
22
+ // ignore
23
+ }
14
24
  }
15
25
 
16
26
  //# sourceMappingURL=get-launchdarkly-sdk-version.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/webpack/configs/utils/get-launchdarkly-sdk-version.ts"],"sourcesContent":["import { getLockFileVersion, readPackageLock } from '../../../utils';\n\nexport function getLaunchDarklySdkVersion() {\n return getLockFileVersion(readPackageLock(), 'launchdarkly-js-client-sdk');\n}\n"],"names":["getLaunchDarklySdkVersion","getLockFileVersion","readPackageLock"],"mappings":";;;;+BAEgBA;;;eAAAA;;;uBAFoC;AAE7C,SAASA;IACZ,OAAOC,IAAAA,yBAAkB,EAACC,IAAAA,sBAAe,KAAI;AACjD"}
1
+ {"version":3,"sources":["../../../../src/webpack/configs/utils/get-launchdarkly-sdk-version.ts"],"sourcesContent":["import path from 'path';\nimport { readJson } from '../../../utils';\n\nexport function getLaunchDarklySdkVersion() {\n try {\n return readJson<{ version: string }>(\n path.join(\n path.dirname(require.resolve('launchdarkly-js-client-sdk')),\n '../package.json'\n )\n ).version;\n } catch {\n // ignore\n }\n}\n"],"names":["getLaunchDarklySdkVersion","readJson","path","join","dirname","require","resolve","version"],"mappings":";;;;+BAGgBA;;;eAAAA;;;6DAHC;uBACQ;;;;;;AAElB,SAASA;IACZ,IAAI;QACA,OAAOC,IAAAA,eAAQ,EACXC,aAAI,CAACC,IAAI,CACLD,aAAI,CAACE,OAAO,CAACC,QAAQC,OAAO,CAAC,gCAC7B,oBAENC,OAAO;IACb,EAAE,eAAM;IACJ,SAAS;IACb;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-web-components-version.d.ts","sourceRoot":"","sources":["../../../../src/webpack/configs/utils/get-web-components-version.ts"],"names":[],"mappings":"AAEA,wBAAgB,uBAAuB,WAQtC"}
1
+ {"version":3,"file":"get-web-components-version.d.ts","sourceRoot":"","sources":["../../../../src/webpack/configs/utils/get-web-components-version.ts"],"names":[],"mappings":"AAGA,wBAAgB,uBAAuB,WAItC"}
@@ -8,13 +8,15 @@ Object.defineProperty(exports, "getWebComponentsVersion", {
8
8
  return getWebComponentsVersion;
9
9
  }
10
10
  });
11
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
11
12
  const _utils = require("../../../utils");
13
+ function _interop_require_default(obj) {
14
+ return obj && obj.__esModule ? obj : {
15
+ default: obj
16
+ };
17
+ }
12
18
  function getWebComponentsVersion() {
13
- const version = (0, _utils.getLockFileVersion)((0, _utils.readPackageLock)(), '@servicetitan/web-components');
14
- if (!version) {
15
- throw new Error('Unable to resolve @servicetitan/web-components version from package-lock.json');
16
- }
17
- return version;
19
+ return (0, _utils.readJson)(_path.default.join(_path.default.dirname(require.resolve('@servicetitan/web-components')), '../package.json')).version;
18
20
  }
19
21
 
20
22
  //# sourceMappingURL=get-web-components-version.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/webpack/configs/utils/get-web-components-version.ts"],"sourcesContent":["import { getLockFileVersion, readPackageLock } from '../../../utils';\n\nexport function getWebComponentsVersion() {\n const version = getLockFileVersion(readPackageLock(), '@servicetitan/web-components');\n if (!version) {\n throw new Error(\n 'Unable to resolve @servicetitan/web-components version from package-lock.json'\n );\n }\n return version;\n}\n"],"names":["getWebComponentsVersion","version","getLockFileVersion","readPackageLock","Error"],"mappings":";;;;+BAEgBA;;;eAAAA;;;uBAFoC;AAE7C,SAASA;IACZ,MAAMC,UAAUC,IAAAA,yBAAkB,EAACC,IAAAA,sBAAe,KAAI;IACtD,IAAI,CAACF,SAAS;QACV,MAAM,IAAIG,MACN;IAER;IACA,OAAOH;AACX"}
1
+ {"version":3,"sources":["../../../../src/webpack/configs/utils/get-web-components-version.ts"],"sourcesContent":["import path from 'path';\nimport { readJson } from '../../../utils';\n\nexport function getWebComponentsVersion() {\n return readJson<{ version: string }>(\n path.join(path.dirname(require.resolve('@servicetitan/web-components')), '../package.json')\n ).version;\n}\n"],"names":["getWebComponentsVersion","readJson","path","join","dirname","require","resolve","version"],"mappings":";;;;+BAGgBA;;;eAAAA;;;6DAHC;uBACQ;;;;;;AAElB,SAASA;IACZ,OAAOC,IAAAA,eAAQ,EACXC,aAAI,CAACC,IAAI,CAACD,aAAI,CAACE,OAAO,CAACC,QAAQC,OAAO,CAAC,kCAAkC,oBAC3EC,OAAO;AACb"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/startup",
3
- "version": "36.3.0-far-1776.2",
3
+ "version": "36.3.0",
4
4
  "description": "CLI to create multi-package Lerna projects with TypeScript and React",
5
5
  "homepage": "https://docs.st.dev/docs/frontend/uikit/startup",
6
6
  "repository": {
@@ -94,13 +94,13 @@
94
94
  },
95
95
  "dependencies": {
96
96
  "@babel/preset-env": "~7.29.5",
97
- "@jest/core": "~30.3.0",
98
- "@jest/types": "~30.3.0",
97
+ "@jest/core": "~30.4.2",
98
+ "@jest/types": "~30.4.1",
99
99
  "@jsdevtools/coverage-istanbul-loader": "^3.0.5",
100
- "@servicetitan/eslint-config": "36.2.0",
101
- "@servicetitan/install": "36.2.0",
102
- "@servicetitan/startup-utils": "36.2.0",
103
- "@servicetitan/stylelint-config": "36.2.0",
100
+ "@servicetitan/eslint-config": "36.3.0",
101
+ "@servicetitan/install": "36.3.0",
102
+ "@servicetitan/startup-utils": "36.3.0",
103
+ "@servicetitan/stylelint-config": "36.3.0",
104
104
  "@svgr/webpack": "^8.1.0",
105
105
  "@swc/cli": "^0.8.1",
106
106
  "@swc/core": "1.15.33",
@@ -120,9 +120,9 @@
120
120
  "html-webpack-plugin": "~5.6.7",
121
121
  "html-webpack-tags-plugin": "^3.0.2",
122
122
  "identity-obj-proxy": "~3.0.0",
123
- "jest": "~30.3.0",
124
- "jest-circus": "~30.3.0",
125
- "jest-environment-jsdom": "^30.3.0",
123
+ "jest": "~30.4.2",
124
+ "jest-circus": "~30.4.2",
125
+ "jest-environment-jsdom": "~30.4.1",
126
126
  "jest-fetch-mock": "~3.0.3",
127
127
  "js-yaml": "~4.1.1",
128
128
  "json5": "^2.2.3",
@@ -141,7 +141,7 @@
141
141
  "postcss": "~8.5.14",
142
142
  "prettier": "~3.8.3",
143
143
  "sass": "~1.99.0",
144
- "sass-loader": "~16.0.7",
144
+ "sass-loader": "~16.0.8",
145
145
  "semver": "~7.7.4",
146
146
  "source-map-loader": "~5.0.0",
147
147
  "style-loader": "~4.0.0",
@@ -184,5 +184,6 @@
184
184
  },
185
185
  "cli": {
186
186
  "webpack": false
187
- }
187
+ },
188
+ "gitHead": "5c664540fe1fa530da3b311b28941e2fb26c6cff"
188
189
  }
@@ -8,10 +8,19 @@ jest.mock('fs', () => fs);
8
8
  jest.mock('../../../utils', () => ({
9
9
  ...jest.requireActual('../../../utils'),
10
10
  log: { info: jest.fn(), error: jest.fn(), warning: jest.fn() },
11
- readPackageLock: jest.fn(),
12
11
  }));
13
12
 
14
13
  describe(`[startup] ${MfeCheck.name}`, () => {
14
+ let stdoutWriteSpy: jest.SpyInstance;
15
+ let processExitCodeSpy: jest.SpyInstance;
16
+ let mfeCheckArgs:
17
+ | {
18
+ metadata?: string;
19
+ hostPackageJson?: string[];
20
+ json?: boolean;
21
+ }
22
+ | undefined;
23
+
15
24
  const defaultMfeCheckArgs = {
16
25
  metadata: '/path/to/metadata.json',
17
26
  hostPackageJson: ['/path/to/host/package.json'],
@@ -39,23 +48,12 @@ describe(`[startup] ${MfeCheck.name}`, () => {
39
48
  },
40
49
  };
41
50
 
42
- let stdoutWriteSpy: jest.SpyInstance;
43
- let processExitCodeSpy: jest.SpyInstance;
44
- let mfeCheckArgs:
45
- | {
46
- metadata?: string;
47
- hostPackageJson?: string[];
48
- json?: boolean;
49
- }
50
- | undefined;
51
-
52
51
  beforeEach(() => {
53
52
  jest.clearAllMocks();
54
53
 
55
54
  mfeCheckArgs = undefined;
56
55
  stdoutWriteSpy = jest.spyOn(process.stdout, 'write').mockImplementation(() => true);
57
56
  processExitCodeSpy = jest.spyOn(process, 'exitCode', 'set').mockImplementation(() => {});
58
- jest.mocked(utils.readPackageLock).mockReturnValue({ packages: {} });
59
57
 
60
58
  vol.fromJSON({
61
59
  '/path/to/metadata.json': JSON.stringify(mockMetadata),
@@ -1,13 +1,11 @@
1
1
  import { getVersionMismatches } from '@servicetitan/startup-utils';
2
2
  import path from 'node:path';
3
3
  import {
4
- getLockFileVersion,
5
4
  isWebComponent,
6
5
  loadSharedDependencies,
7
6
  log,
8
7
  logErrors,
9
8
  readJson,
10
- readPackageLock,
11
9
  toArray,
12
10
  } from '../../utils';
13
11
  import { Metadata } from '../../webpack/configs/types';
@@ -84,11 +82,9 @@ export class MfeCheck extends Command<typeof entry> {
84
82
  hostData.dependencies,
85
83
  hostData.cli?.webpack?.['shared-dependencies']
86
84
  );
87
- const lockFile = readPackageLock();
88
85
  const exposedDependencies = getExposedDependencies(
89
86
  hostSharedDependencies,
90
- dependency =>
91
- getLockFileVersion(lockFile, dependency) ?? hostData.dependencies[dependency]
87
+ hostData.dependencies
92
88
  );
93
89
  const mismatchResult = getVersionMismatches(
94
90
  exposedDependencies,
@@ -20,7 +20,7 @@ describe('[startup] Utils', () => {
20
20
  '\\.(css|scss|less|png|jpg|jpeg|gif|woff|woff2|eot|ttf|otf)$': 'identity-obj-proxy',
21
21
  },
22
22
  modulePathIgnorePatterns: ['<rootDir>/.*/__mocks__'],
23
- preset: expect.stringMatching(/startup[\\/]+jest/),
23
+ preset: '@servicetitan/startup',
24
24
  resolver: '@servicetitan/startup/jest-resolver',
25
25
  setupFiles: [expect.stringContaining(path.join('jest', 'setup.js'))],
26
26
  testEnvironment: 'jsdom',
@@ -1,4 +1,4 @@
1
- import { getPackageData } from '../get-package-data';
1
+ import { getPackageData, getPackageDependencyVersion } from '../get-package-data';
2
2
  import { readJson } from '../read-json';
3
3
 
4
4
  jest.mock('../read-json', () => ({ readJson: jest.fn() }));
@@ -46,4 +46,48 @@ describe(`[startup] Utils`, () => {
46
46
  });
47
47
  });
48
48
  });
49
+
50
+ describe(`${getPackageDependencyVersion.name}`, () => {
51
+ const dependency = 'foo';
52
+ let defaultVersion: string | undefined;
53
+
54
+ beforeEach(() => (defaultVersion = undefined));
55
+
56
+ const subject = () => getPackageDependencyVersion(dependency, defaultVersion);
57
+
58
+ function itReturnsUndefinedOrDefaultVersion() {
59
+ test('returns undefined', () => {
60
+ expect(subject()).toBe(undefined);
61
+ });
62
+
63
+ describe('with a default version', () => {
64
+ beforeEach(() => (defaultVersion = '1.2.3'));
65
+
66
+ test('returns default version', () => {
67
+ expect(subject()).toBe(defaultVersion);
68
+ });
69
+ });
70
+ }
71
+
72
+ itReturnsUndefinedOrDefaultVersion();
73
+
74
+ describe('when dependency exists', () => {
75
+ const module: Record<string, any> = {};
76
+
77
+ beforeEach(() => {
78
+ module.version = '2.3.4';
79
+ jest.doMock(`${dependency}/package.json`, () => module, { virtual: true });
80
+ });
81
+
82
+ test('returns dependency version', () => {
83
+ expect(subject()).toBe(module.version);
84
+ });
85
+
86
+ describe('when dependency has no version', () => {
87
+ beforeEach(() => delete module.version);
88
+
89
+ itReturnsUndefinedOrDefaultVersion();
90
+ });
91
+ });
92
+ });
49
93
  });
@@ -1,4 +1,4 @@
1
- import path from 'node:path';
1
+ import path from 'path';
2
2
 
3
3
  export function findUp<T>(callback: (directory: string) => T | undefined) {
4
4
  let directory = path.resolve('./');
@@ -16,7 +16,7 @@ function getDefaultJestConfiguration() {
16
16
  coverageReporters: ['html-spa', 'text', 'json', 'cobertura', 'lcov'],
17
17
  moduleNameMapper,
18
18
  modulePathIgnorePatterns: ['<rootDir>/.*/__mocks__'],
19
- preset: path.join(__dirname, '../../jest'),
19
+ preset: '@servicetitan/startup',
20
20
  resolver: '@servicetitan/startup/jest-resolver',
21
21
  setupFiles: [path.join(__dirname, '../../jest/setup.js')],
22
22
  testEnvironment: 'jsdom',