@servicetitan/startup 35.1.0 → 35.2.0-far-1776.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 (45) hide show
  1. package/dist/cli/commands/mfe-generate-metadata.d.ts.map +1 -1
  2. package/dist/cli/commands/mfe-generate-metadata.js +6 -4
  3. package/dist/cli/commands/mfe-generate-metadata.js.map +1 -1
  4. package/dist/utils/find-package-lock.d.ts +2 -0
  5. package/dist/utils/find-package-lock.d.ts.map +1 -0
  6. package/dist/utils/find-package-lock.js +26 -0
  7. package/dist/utils/find-package-lock.js.map +1 -0
  8. package/dist/utils/find-up.js +4 -4
  9. package/dist/utils/find-up.js.map +1 -1
  10. package/dist/utils/get-package-data.d.ts.map +1 -1
  11. package/dist/utils/get-package-data.js +28 -1
  12. package/dist/utils/get-package-data.js.map +1 -1
  13. package/dist/utils/get-package-version.d.ts +2 -0
  14. package/dist/utils/get-package-version.d.ts.map +1 -0
  15. package/dist/utils/get-package-version.js +31 -0
  16. package/dist/utils/get-package-version.js.map +1 -0
  17. package/dist/utils/index.d.ts +2 -0
  18. package/dist/utils/index.d.ts.map +1 -1
  19. package/dist/utils/index.js +2 -0
  20. package/dist/utils/index.js.map +1 -1
  21. package/dist/webpack/configs/cache-config.d.ts.map +1 -1
  22. package/dist/webpack/configs/cache-config.js +1 -14
  23. package/dist/webpack/configs/cache-config.js.map +1 -1
  24. package/dist/webpack/configs/utils/get-launchdarkly-sdk-version.d.ts.map +1 -1
  25. package/dist/webpack/configs/utils/get-launchdarkly-sdk-version.js +1 -11
  26. package/dist/webpack/configs/utils/get-launchdarkly-sdk-version.js.map +1 -1
  27. package/dist/webpack/configs/utils/get-web-components-version.d.ts.map +1 -1
  28. package/dist/webpack/configs/utils/get-web-components-version.js +5 -7
  29. package/dist/webpack/configs/utils/get-web-components-version.js.map +1 -1
  30. package/package.json +2 -3
  31. package/src/cli/commands/__tests__/mfe-generate-metadata.test.ts +23 -4
  32. package/src/cli/commands/mfe-generate-metadata.ts +6 -6
  33. package/src/utils/__tests__/find-package-lock.test.ts +35 -0
  34. package/src/utils/__tests__/get-package-data.test.ts +97 -26
  35. package/src/utils/__tests__/get-package-version.test.ts +120 -0
  36. package/src/utils/find-package-lock.ts +10 -0
  37. package/src/utils/find-up.ts +1 -1
  38. package/src/utils/get-package-data.ts +27 -2
  39. package/src/utils/get-package-version.ts +31 -0
  40. package/src/utils/index.ts +2 -0
  41. package/src/webpack/configs/cache-config.ts +1 -10
  42. package/src/webpack/configs/utils/__tests__/get-launchdarkly-sdk-version.test.ts +24 -8
  43. package/src/webpack/configs/utils/__tests__/get-web-components-version.test.ts +30 -10
  44. package/src/webpack/configs/utils/get-launchdarkly-sdk-version.ts +2 -12
  45. package/src/webpack/configs/utils/get-web-components-version.ts +8 -5
@@ -1 +1 @@
1
- {"version":3,"file":"mfe-generate-metadata.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mfe-generate-metadata.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAkB,MAAM,SAAS,CAAC;AAElD,QAAA,MAAM,OAAO;;;;;CAKa,CAAC;AAE3B,qBAAa,mBAAoB,SAAQ,OAAO,CAAC,OAAO,OAAO,CAAC;IAC5D,MAAM,CAAC,QAAQ,CAAC,kBAAkB,QAAQ;IAC1C,MAAM,CAAC,QAAQ,CAAC,WAAW,sDAAsD;IACjF,MAAM,CAAC,QAAQ,CAAC,OAAO;;;;;MAAW;IAG5B,OAAO;CAyChB"}
1
+ {"version":3,"file":"mfe-generate-metadata.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mfe-generate-metadata.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAkB,MAAM,SAAS,CAAC;AAElD,QAAA,MAAM,OAAO;;;;;CAKa,CAAC;AAE3B,qBAAa,mBAAoB,SAAQ,OAAO,CAAC,OAAO,OAAO,CAAC;IAC5D,MAAM,CAAC,QAAQ,CAAC,kBAAkB,QAAQ;IAC1C,MAAM,CAAC,QAAQ,CAAC,WAAW,sDAAsD;IACjF,MAAM,CAAC,QAAQ,CAAC,OAAO;;;;;MAAW;IAG5B,OAAO;CA0ChB"}
@@ -48,11 +48,13 @@ const options = {
48
48
  };
49
49
  class MfeGenerateMetadata extends _types.Command {
50
50
  async execute() {
51
- if (!(0, _utils.isWebComponent)()) {
52
- throw new Error('this command must be run inside a web-component directory');
53
- }
54
51
  const { output } = this.args;
55
- const { destination } = (0, _utils.getFolders)();
52
+ let destination;
53
+ try {
54
+ ({ destination } = (0, _utils.getFolders)());
55
+ } catch (unused) {
56
+ destination = 'dist';
57
+ }
56
58
  const name = (0, _utils.getPackageName)();
57
59
  const packageData = (0, _utils.getPackageData)();
58
60
  const sharedDependencies = (0, _utils.loadSharedDependencies)(packageData.dependencies, packageData.sharedDependencies);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/commands/mfe-generate-metadata.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport {\n getFolders,\n getPackageData,\n getPackageName,\n isWebComponent,\n loadSharedDependencies,\n log,\n logErrors,\n} from '../../utils';\nimport { buildMetadata } from '../../webpack/configs/utils/build-metadata';\nimport { Command, CommandOptions } from './types';\n\nconst options = {\n output: {\n description: 'Output file path (outputs to stdout if not specified)',\n string: true,\n },\n} satisfies CommandOptions;\n\nexport class MfeGenerateMetadata extends Command<typeof options> {\n static readonly allowRunFromGlobal = true;\n static readonly description = 'Generate MFE metadata for compatibility checking';\n static readonly options = options;\n\n @logErrors\n async execute() {\n if (!isWebComponent()) {\n throw new Error('this command must be run inside a web-component directory');\n }\n\n const { output } = this.args;\n\n const { destination } = getFolders();\n const name = getPackageName();\n const packageData = getPackageData();\n const sharedDependencies = loadSharedDependencies(\n packageData.dependencies,\n packageData.sharedDependencies\n );\n\n const metadata = buildMetadata({\n destination,\n name,\n version: packageData.version,\n dependencies: packageData.dependencies,\n sharedDependencies,\n });\n\n const jsonOutput = JSON.stringify(metadata, null, 2);\n\n if (output) {\n const outputPath = path.resolve(output);\n const outputDir = path.dirname(outputPath);\n\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n fs.writeFileSync(outputPath, jsonOutput, 'utf8');\n log.info(`Metadata written to ${outputPath}`);\n } else {\n process.stdout.write(jsonOutput + '\\n');\n }\n\n return Promise.resolve();\n }\n}\n"],"names":["MfeGenerateMetadata","options","output","description","string","Command","execute","isWebComponent","Error","args","destination","getFolders","name","getPackageName","packageData","getPackageData","sharedDependencies","loadSharedDependencies","dependencies","metadata","buildMetadata","version","jsonOutput","JSON","stringify","outputPath","path","resolve","outputDir","dirname","fs","existsSync","mkdirSync","recursive","writeFileSync","log","info","process","stdout","write","Promise","allowRunFromGlobal"],"mappings":";;;;+BAqBaA;;;eAAAA;;;+DArBE;iEACE;uBASV;+BACuB;uBACU;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAExC,MAAMC,UAAU;IACZC,QAAQ;QACJC,aAAa;QACbC,QAAQ;IACZ;AACJ;AAEO,MAAMJ,4BAA4BK,cAAO;IAK5C,MACMC,UAAU;QACZ,IAAI,CAACC,IAAAA,qBAAc,KAAI;YACnB,MAAM,IAAIC,MAAM;QACpB;QAEA,MAAM,EAAEN,MAAM,EAAE,GAAG,IAAI,CAACO,IAAI;QAE5B,MAAM,EAAEC,WAAW,EAAE,GAAGC,IAAAA,iBAAU;QAClC,MAAMC,OAAOC,IAAAA,qBAAc;QAC3B,MAAMC,cAAcC,IAAAA,qBAAc;QAClC,MAAMC,qBAAqBC,IAAAA,6BAAsB,EAC7CH,YAAYI,YAAY,EACxBJ,YAAYE,kBAAkB;QAGlC,MAAMG,WAAWC,IAAAA,4BAAa,EAAC;YAC3BV;YACAE;YACAS,SAASP,YAAYO,OAAO;YAC5BH,cAAcJ,YAAYI,YAAY;YACtCF;QACJ;QAEA,MAAMM,aAAaC,KAAKC,SAAS,CAACL,UAAU,MAAM;QAElD,IAAIjB,QAAQ;YACR,MAAMuB,aAAaC,iBAAI,CAACC,OAAO,CAACzB;YAChC,MAAM0B,YAAYF,iBAAI,CAACG,OAAO,CAACJ;YAE/B,IAAI,CAACK,eAAE,CAACC,UAAU,CAACH,YAAY;gBAC3BE,eAAE,CAACE,SAAS,CAACJ,WAAW;oBAAEK,WAAW;gBAAK;YAC9C;YAEAH,eAAE,CAACI,aAAa,CAACT,YAAYH,YAAY;YACzCa,UAAG,CAACC,IAAI,CAAC,CAAC,oBAAoB,EAAEX,YAAY;QAChD,OAAO;YACHY,QAAQC,MAAM,CAACC,KAAK,CAACjB,aAAa;QACtC;QAEA,OAAOkB,QAAQb,OAAO;IAC1B;AACJ;AA9CI,iBADS3B,qBACOyC,sBAAqB;AACrC,iBAFSzC,qBAEOG,eAAc;AAC9B,iBAHSH,qBAGOC,WAAUA"}
1
+ {"version":3,"sources":["../../../src/cli/commands/mfe-generate-metadata.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport {\n getFolders,\n getPackageData,\n getPackageName,\n loadSharedDependencies,\n log,\n logErrors,\n} from '../../utils';\nimport { buildMetadata } from '../../webpack/configs/utils/build-metadata';\nimport { Command, CommandOptions } from './types';\n\nconst options = {\n output: {\n description: 'Output file path (outputs to stdout if not specified)',\n string: true,\n },\n} satisfies CommandOptions;\n\nexport class MfeGenerateMetadata extends Command<typeof options> {\n static readonly allowRunFromGlobal = true;\n static readonly description = 'Generate MFE metadata for compatibility checking';\n static readonly options = options;\n\n @logErrors\n async execute() {\n const { output } = this.args;\n\n let destination: string;\n try {\n ({ destination } = getFolders());\n } catch {\n destination = 'dist';\n }\n const name = getPackageName();\n const packageData = getPackageData();\n const sharedDependencies = loadSharedDependencies(\n packageData.dependencies,\n packageData.sharedDependencies\n );\n\n const metadata = buildMetadata({\n destination,\n name,\n version: packageData.version,\n dependencies: packageData.dependencies,\n sharedDependencies,\n });\n\n const jsonOutput = JSON.stringify(metadata, null, 2);\n\n if (output) {\n const outputPath = path.resolve(output);\n const outputDir = path.dirname(outputPath);\n\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n fs.writeFileSync(outputPath, jsonOutput, 'utf8');\n log.info(`Metadata written to ${outputPath}`);\n } else {\n process.stdout.write(jsonOutput + '\\n');\n }\n\n return Promise.resolve();\n }\n}\n"],"names":["MfeGenerateMetadata","options","output","description","string","Command","execute","args","destination","getFolders","name","getPackageName","packageData","getPackageData","sharedDependencies","loadSharedDependencies","dependencies","metadata","buildMetadata","version","jsonOutput","JSON","stringify","outputPath","path","resolve","outputDir","dirname","fs","existsSync","mkdirSync","recursive","writeFileSync","log","info","process","stdout","write","Promise","allowRunFromGlobal"],"mappings":";;;;+BAoBaA;;;eAAAA;;;+DApBE;iEACE;uBAQV;+BACuB;uBACU;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAExC,MAAMC,UAAU;IACZC,QAAQ;QACJC,aAAa;QACbC,QAAQ;IACZ;AACJ;AAEO,MAAMJ,4BAA4BK,cAAO;IAK5C,MACMC,UAAU;QACZ,MAAM,EAAEJ,MAAM,EAAE,GAAG,IAAI,CAACK,IAAI;QAE5B,IAAIC;QACJ,IAAI;YACC,CAAA,EAAEA,WAAW,EAAE,GAAGC,IAAAA,iBAAU,GAAC;QAClC,EAAE,eAAM;YACJD,cAAc;QAClB;QACA,MAAME,OAAOC,IAAAA,qBAAc;QAC3B,MAAMC,cAAcC,IAAAA,qBAAc;QAClC,MAAMC,qBAAqBC,IAAAA,6BAAsB,EAC7CH,YAAYI,YAAY,EACxBJ,YAAYE,kBAAkB;QAGlC,MAAMG,WAAWC,IAAAA,4BAAa,EAAC;YAC3BV;YACAE;YACAS,SAASP,YAAYO,OAAO;YAC5BH,cAAcJ,YAAYI,YAAY;YACtCF;QACJ;QAEA,MAAMM,aAAaC,KAAKC,SAAS,CAACL,UAAU,MAAM;QAElD,IAAIf,QAAQ;YACR,MAAMqB,aAAaC,iBAAI,CAACC,OAAO,CAACvB;YAChC,MAAMwB,YAAYF,iBAAI,CAACG,OAAO,CAACJ;YAE/B,IAAI,CAACK,eAAE,CAACC,UAAU,CAACH,YAAY;gBAC3BE,eAAE,CAACE,SAAS,CAACJ,WAAW;oBAAEK,WAAW;gBAAK;YAC9C;YAEAH,eAAE,CAACI,aAAa,CAACT,YAAYH,YAAY;YACzCa,UAAG,CAACC,IAAI,CAAC,CAAC,oBAAoB,EAAEX,YAAY;QAChD,OAAO;YACHY,QAAQC,MAAM,CAACC,KAAK,CAACjB,aAAa;QACtC;QAEA,OAAOkB,QAAQb,OAAO;IAC1B;AACJ;AA/CI,iBADSzB,qBACOuC,sBAAqB;AACrC,iBAFSvC,qBAEOG,eAAc;AAC9B,iBAHSH,qBAGOC,WAAUA"}
@@ -0,0 +1,2 @@
1
+ export declare function findPackageLock(): string | undefined;
2
+ //# sourceMappingURL=find-package-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-package-lock.d.ts","sourceRoot":"","sources":["../../src/utils/find-package-lock.ts"],"names":[],"mappings":"AAIA,wBAAgB,eAAe,uBAK9B"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "findPackageLock", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return findPackageLock;
9
+ }
10
+ });
11
+ const _nodefs = /*#__PURE__*/ _interop_require_default(require("node:fs"));
12
+ const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
13
+ const _findup = require("./find-up");
14
+ function _interop_require_default(obj) {
15
+ return obj && obj.__esModule ? obj : {
16
+ default: obj
17
+ };
18
+ }
19
+ function findPackageLock() {
20
+ return (0, _findup.findUp)((directory)=>{
21
+ const lockFile = _nodepath.default.resolve(directory, 'package-lock.json');
22
+ return _nodefs.default.existsSync(lockFile) ? lockFile : undefined;
23
+ });
24
+ }
25
+
26
+ //# sourceMappingURL=find-package-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/find-package-lock.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { findUp } from './find-up';\n\nexport function findPackageLock() {\n return findUp(directory => {\n const lockFile = path.resolve(directory, 'package-lock.json');\n return fs.existsSync(lockFile) ? lockFile : undefined;\n });\n}\n"],"names":["findPackageLock","findUp","directory","lockFile","path","resolve","fs","existsSync","undefined"],"mappings":";;;;+BAIgBA;;;eAAAA;;;+DAJD;iEACE;wBACM;;;;;;AAEhB,SAASA;IACZ,OAAOC,IAAAA,cAAM,EAACC,CAAAA;QACV,MAAMC,WAAWC,iBAAI,CAACC,OAAO,CAACH,WAAW;QACzC,OAAOI,eAAE,CAACC,UAAU,CAACJ,YAAYA,WAAWK;IAChD;AACJ"}
@@ -8,21 +8,21 @@ Object.defineProperty(exports, "findUp", {
8
8
  return findUp;
9
9
  }
10
10
  });
11
- const _path = /*#__PURE__*/ _interop_require_default(require("path"));
11
+ const _nodepath = /*#__PURE__*/ _interop_require_default(require("node: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 = _path.default.resolve('./');
18
+ let directory = _nodepath.default.resolve('./');
19
19
  do {
20
20
  const result = callback(directory);
21
21
  if (result) {
22
22
  return result;
23
23
  }
24
- directory = _path.default.resolve(_path.default.join(directory, '../'));
25
- }while (_path.default.parse(directory).name)
24
+ directory = _nodepath.default.resolve(_nodepath.default.join(directory, '../'));
25
+ }while (_nodepath.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 '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"}
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 +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;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,OAYtF"}
1
+ {"version":3,"file":"get-package-data.d.ts","sourceRoot":"","sources":["../../src/utils/get-package-data.ts"],"names":[],"mappings":"AAIA,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;AAyBD,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,OAYtF"}
@@ -16,7 +16,14 @@ _export(exports, {
16
16
  return getPackageDependencyVersion;
17
17
  }
18
18
  });
19
+ const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
20
+ const _findup = require("./find-up");
19
21
  const _readjson = require("./read-json");
22
+ function _interop_require_default(obj) {
23
+ return obj && obj.__esModule ? obj : {
24
+ default: obj
25
+ };
26
+ }
20
27
  function getPackageData() {
21
28
  var _packageJson_cli_webpack, _packageJson_cli;
22
29
  const packageJson = (0, _readjson.readJson)('./package.json');
@@ -24,12 +31,32 @@ function getPackageData() {
24
31
  name: packageJson.name,
25
32
  version: packageJson.version,
26
33
  dependencies: {
27
- ...(0, _readjson.readJson)('../../package.json').dependencies,
34
+ ...findRootDependencies(),
28
35
  ...packageJson.dependencies
29
36
  },
30
37
  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']
31
38
  };
32
39
  }
40
+ function findRootDependencies() {
41
+ var _ref;
42
+ const cwd = _nodepath.default.resolve('./');
43
+ const root = (0, _findup.findUp)((directory)=>{
44
+ var _readJsonSafe;
45
+ if (directory === cwd) {
46
+ return undefined;
47
+ }
48
+ const pkgPath = _nodepath.default.join(directory, 'package.json');
49
+ const pkg = (0, _readjson.readJsonSafe)(pkgPath);
50
+ if (pkg === null || pkg === void 0 ? void 0 : pkg.workspaces) {
51
+ return pkg;
52
+ }
53
+ const lernaPath = _nodepath.default.join(directory, 'lerna.json');
54
+ if ((_readJsonSafe = (0, _readjson.readJsonSafe)(lernaPath)) === null || _readJsonSafe === void 0 ? void 0 : _readJsonSafe.packages) {
55
+ return pkg !== null && pkg !== void 0 ? pkg : {};
56
+ }
57
+ });
58
+ return (_ref = root === null || root === void 0 ? void 0 : root.dependencies) !== null && _ref !== void 0 ? _ref : {};
59
+ }
33
60
  function getPackageDependencyVersion(dependency, defaultVersion) {
34
61
  try {
35
62
  const { version } = require(`${dependency}/package.json`);
@@ -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\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"}
1
+ {"version":3,"sources":["../../src/utils/get-package-data.ts"],"sourcesContent":["import path from 'node:path';\nimport { findUp } from './find-up';\nimport { readJson, readJsonSafe } 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 ...findRootDependencies(),\n ...packageJson.dependencies,\n },\n sharedDependencies: packageJson.cli?.webpack?.['shared-dependencies'],\n };\n}\n\nfunction findRootDependencies() {\n const cwd = path.resolve('./');\n const root = findUp(directory => {\n if (directory === cwd) {\n return undefined;\n }\n const pkgPath = path.join(directory, 'package.json');\n const pkg = readJsonSafe<{ workspaces?: string[]; dependencies?: Record<string, string> }>(\n pkgPath\n );\n if (pkg?.workspaces) {\n return pkg;\n }\n\n const lernaPath = path.join(directory, 'lerna.json');\n if (readJsonSafe<{ packages?: string[] }>(lernaPath)?.packages) {\n return pkg ?? {};\n }\n });\n\n return root?.dependencies ?? {};\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","findRootDependencies","sharedDependencies","cli","webpack","cwd","path","resolve","root","findUp","directory","readJsonSafe","undefined","pkgPath","join","pkg","workspaces","lernaPath","packages","dependency","defaultVersion","require"],"mappings":";;;;;;;;;;;QAWgBA;eAAAA;;QAqCAC;eAAAA;;;iEAhDC;wBACM;0BACgB;;;;;;AAShC,SAASD;QAUYE,0BAAAA;IATxB,MAAMA,cAAcC,IAAAA,kBAAQ,EAAC;IAE7B,OAAO;QACHC,MAAMF,YAAYE,IAAI;QACtBC,SAASH,YAAYG,OAAO;QAC5BC,cAAc;YACV,GAAGC,sBAAsB;YACzB,GAAGL,YAAYI,YAAY;QAC/B;QACAE,kBAAkB,GAAEN,mBAAAA,YAAYO,GAAG,cAAfP,wCAAAA,2BAAAA,iBAAiBQ,OAAO,cAAxBR,+CAAAA,wBAA0B,CAAC,sBAAsB;IACzE;AACJ;AAEA,SAASK;;IACL,MAAMI,MAAMC,iBAAI,CAACC,OAAO,CAAC;IACzB,MAAMC,OAAOC,IAAAA,cAAM,EAACC,CAAAA;YAaZC;QAZJ,IAAID,cAAcL,KAAK;YACnB,OAAOO;QACX;QACA,MAAMC,UAAUP,iBAAI,CAACQ,IAAI,CAACJ,WAAW;QACrC,MAAMK,MAAMJ,IAAAA,sBAAY,EACpBE;QAEJ,IAAIE,gBAAAA,0BAAAA,IAAKC,UAAU,EAAE;YACjB,OAAOD;QACX;QAEA,MAAME,YAAYX,iBAAI,CAACQ,IAAI,CAACJ,WAAW;QACvC,KAAIC,gBAAAA,IAAAA,sBAAY,EAA0BM,wBAAtCN,oCAAAA,cAAkDO,QAAQ,EAAE;YAC5D,OAAOH,gBAAAA,iBAAAA,MAAO,CAAC;QACnB;IACJ;IAEA,eAAOP,iBAAAA,2BAAAA,KAAMR,YAAY,uCAAI,CAAC;AAClC;AAEO,SAASL,4BAA4BwB,UAAkB,EAAEC,cAAuB;IACnF,IAAI;QACA,MAAM,EAAErB,OAAO,EAAE,GAAGsB,QAAQ,GAAGF,WAAW,aAAa,CAAC;QAExD,IAAIpB,SAAS;YACT,OAAOA;QACX;IACJ,EAAE,eAAM;IACJ,aAAa;IACjB;IAEA,OAAOqB;AACX"}
@@ -0,0 +1,2 @@
1
+ export declare function getPackageVersion(packageName: string): string | undefined;
2
+ //# sourceMappingURL=get-package-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-version.d.ts","sourceRoot":"","sources":["../../src/utils/get-package-version.ts"],"names":[],"mappings":"AAaA,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,sBAiBpD"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "getPackageVersion", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return getPackageVersion;
9
+ }
10
+ });
11
+ const _findpackagelock = require("./find-package-lock");
12
+ const _readjson = require("./read-json");
13
+ function getPackageVersion(packageName) {
14
+ var _lockFile_packages;
15
+ const lockFilePath = (0, _findpackagelock.findPackageLock)();
16
+ if (!lockFilePath) {
17
+ return undefined;
18
+ }
19
+ const lockFile = (0, _readjson.readJsonSafe)(lockFilePath);
20
+ const entry = lockFile === null || lockFile === void 0 ? void 0 : (_lockFile_packages = lockFile.packages) === null || _lockFile_packages === void 0 ? void 0 : _lockFile_packages[`node_modules/${packageName}`];
21
+ if (!entry) {
22
+ return undefined;
23
+ }
24
+ if (entry.link && entry.resolved) {
25
+ var _lockFile_packages_entry_resolved, _lockFile_packages1;
26
+ return lockFile === null || lockFile === void 0 ? void 0 : (_lockFile_packages1 = lockFile.packages) === null || _lockFile_packages1 === void 0 ? void 0 : (_lockFile_packages_entry_resolved = _lockFile_packages1[entry.resolved]) === null || _lockFile_packages_entry_resolved === void 0 ? void 0 : _lockFile_packages_entry_resolved.version;
27
+ }
28
+ return entry.version;
29
+ }
30
+
31
+ //# sourceMappingURL=get-package-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/get-package-version.ts"],"sourcesContent":["import { findPackageLock } from './find-package-lock';\nimport { readJsonSafe } from './read-json';\n\ninterface PackageLockEntry {\n version?: string;\n resolved?: string;\n link?: boolean;\n}\n\ninterface PackageLock {\n packages: Record<string, PackageLockEntry>;\n}\n\nexport function getPackageVersion(packageName: string) {\n const lockFilePath = findPackageLock();\n if (!lockFilePath) {\n return undefined;\n }\n\n const lockFile = readJsonSafe<PackageLock>(lockFilePath);\n const entry = lockFile?.packages?.[`node_modules/${packageName}`];\n if (!entry) {\n return undefined;\n }\n\n if (entry.link && entry.resolved) {\n return lockFile?.packages?.[entry.resolved]?.version;\n }\n\n return entry.version;\n}\n"],"names":["getPackageVersion","packageName","lockFile","lockFilePath","findPackageLock","undefined","readJsonSafe","entry","packages","link","resolved","version"],"mappings":";;;;+BAagBA;;;eAAAA;;;iCAbgB;0BACH;AAYtB,SAASA,kBAAkBC,WAAmB;QAOnCC;IANd,MAAMC,eAAeC,IAAAA,gCAAe;IACpC,IAAI,CAACD,cAAc;QACf,OAAOE;IACX;IAEA,MAAMH,WAAWI,IAAAA,sBAAY,EAAcH;IAC3C,MAAMI,QAAQL,qBAAAA,gCAAAA,qBAAAA,SAAUM,QAAQ,cAAlBN,yCAAAA,kBAAoB,CAAC,CAAC,aAAa,EAAED,aAAa,CAAC;IACjE,IAAI,CAACM,OAAO;QACR,OAAOF;IACX;IAEA,IAAIE,MAAME,IAAI,IAAIF,MAAMG,QAAQ,EAAE;YACvBR,mCAAAA;QAAP,OAAOA,qBAAAA,gCAAAA,sBAAAA,SAAUM,QAAQ,cAAlBN,2CAAAA,oCAAAA,mBAAoB,CAACK,MAAMG,QAAQ,CAAC,cAApCR,wDAAAA,kCAAsCS,OAAO;IACxD;IAEA,OAAOJ,MAAMI,OAAO;AACxB"}
@@ -1,3 +1,4 @@
1
+ export * from './find-package-lock';
1
2
  export * from './find-packages';
2
3
  export * from './find-up';
3
4
  export * from './format-duration';
@@ -10,6 +11,7 @@ export * from './get-folders';
10
11
  export * from './get-jest-config';
11
12
  export * from './get-package-data';
12
13
  export * from './get-package-name';
14
+ export * from './get-package-version';
13
15
  export * from './get-packages';
14
16
  export * from './get-startup-version';
15
17
  export * from './get-tsconfig';
@@ -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,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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,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,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
+ _export_star(require("./find-package-lock"), exports);
5
6
  _export_star(require("./find-packages"), exports);
6
7
  _export_star(require("./find-up"), exports);
7
8
  _export_star(require("./format-duration"), exports);
@@ -14,6 +15,7 @@ _export_star(require("./get-folders"), exports);
14
15
  _export_star(require("./get-jest-config"), exports);
15
16
  _export_star(require("./get-package-data"), exports);
16
17
  _export_star(require("./get-package-name"), exports);
18
+ _export_star(require("./get-package-version"), exports);
17
19
  _export_star(require("./get-packages"), exports);
18
20
  _export_star(require("./get-startup-version"), exports);
19
21
  _export_star(require("./get-tsconfig"), 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-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"}
1
+ {"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["export * from './find-package-lock';\nexport * 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-destination-folders';\nexport * from './get-folders';\nexport * from './get-jest-config';\nexport * from './get-package-data';\nexport * from './get-package-name';\nexport * from './get-package-version';\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;qBACA"}
@@ -1 +1 @@
1
- {"version":3,"file":"cache-config.d.ts","sourceRoot":"","sources":["../../../src/webpack/configs/cache-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAG7C,KAAK,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,uBAAuB,CAAC,GAAG,SAAS,CAAC;AAIjF,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,GAAG,MAAM,CAkB3E"}
1
+ {"version":3,"file":"cache-config.d.ts","sourceRoot":"","sources":["../../../src/webpack/configs/cache-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAG7C,KAAK,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,uBAAuB,CAAC,GAAG,SAAS,CAAC;AAIjF,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,GAAG,MAAM,CAkB3E"}
@@ -8,21 +8,14 @@ Object.defineProperty(exports, "cacheConfig", {
8
8
  return cacheConfig;
9
9
  }
10
10
  });
11
- const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
12
- const _path = /*#__PURE__*/ _interop_require_default(require("path"));
13
11
  const _utils = require("../../utils");
14
- function _interop_require_default(obj) {
15
- return obj && obj.__esModule ? obj : {
16
- default: obj
17
- };
18
- }
19
12
  const CACHE_VERSION = '1';
20
13
  function cacheConfig(context, _overrides) {
21
14
  const { emitExposedDependencies } = context;
22
15
  if (!emitExposedDependencies) {
23
16
  return;
24
17
  }
25
- const packageLock = findPackageLock();
18
+ const packageLock = (0, _utils.findPackageLock)();
26
19
  const cache = {
27
20
  type: 'filesystem',
28
21
  version: CACHE_VERSION,
@@ -42,11 +35,5 @@ function cacheConfig(context, _overrides) {
42
35
  }
43
36
  };
44
37
  }
45
- function findPackageLock() {
46
- return (0, _utils.findUp)((directory)=>{
47
- const lockFile = _path.default.resolve(_path.default.join(directory), 'package-lock.json');
48
- return _fs.default.existsSync(lockFile) ? lockFile : undefined;
49
- });
50
- }
51
38
 
52
39
  //# sourceMappingURL=cache-config.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/webpack/configs/cache-config.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { Configuration } from 'webpack';\nimport { findUp } from '../../utils';\nimport { Context, Overrides } from './types';\n\ntype Config = Configuration['cache'];\ntype Result = Pick<Configuration, 'cache' | 'infrastructureLogging'> | undefined;\n\nconst CACHE_VERSION = '1';\n\nexport function cacheConfig(context: Context, _overrides: Overrides): Result {\n const { emitExposedDependencies } = context;\n if (!emitExposedDependencies) {\n return;\n }\n\n const packageLock = findPackageLock();\n const cache: Config = {\n type: 'filesystem',\n version: CACHE_VERSION,\n ...(packageLock ? { buildDependencies: { packageLock: [packageLock] } } : {}),\n };\n\n return {\n cache,\n // Suppress \"Serializing big strings impacts deserialization performance\" warnings\n infrastructureLogging: { level: 'error' },\n };\n}\n\nfunction findPackageLock() {\n return findUp(directory => {\n const lockFile = path.resolve(path.join(directory), 'package-lock.json');\n return fs.existsSync(lockFile) ? lockFile : undefined;\n });\n}\n"],"names":["cacheConfig","CACHE_VERSION","context","_overrides","emitExposedDependencies","packageLock","findPackageLock","cache","type","version","buildDependencies","infrastructureLogging","level","findUp","directory","lockFile","path","resolve","join","fs","existsSync","undefined"],"mappings":";;;;+BAWgBA;;;eAAAA;;;2DAXD;6DACE;uBAEM;;;;;;AAMvB,MAAMC,gBAAgB;AAEf,SAASD,YAAYE,OAAgB,EAAEC,UAAqB;IAC/D,MAAM,EAAEC,uBAAuB,EAAE,GAAGF;IACpC,IAAI,CAACE,yBAAyB;QAC1B;IACJ;IAEA,MAAMC,cAAcC;IACpB,MAAMC,QAAgB;QAClBC,MAAM;QACNC,SAASR;QACT,GAAII,cAAc;YAAEK,mBAAmB;gBAAEL,aAAa;oBAACA;iBAAY;YAAC;QAAE,IAAI,CAAC,CAAC;IAChF;IAEA,OAAO;QACHE;QACA,kFAAkF;QAClFI,uBAAuB;YAAEC,OAAO;QAAQ;IAC5C;AACJ;AAEA,SAASN;IACL,OAAOO,IAAAA,aAAM,EAACC,CAAAA;QACV,MAAMC,WAAWC,aAAI,CAACC,OAAO,CAACD,aAAI,CAACE,IAAI,CAACJ,YAAY;QACpD,OAAOK,WAAE,CAACC,UAAU,CAACL,YAAYA,WAAWM;IAChD;AACJ"}
1
+ {"version":3,"sources":["../../../src/webpack/configs/cache-config.ts"],"sourcesContent":["import { Configuration } from 'webpack';\nimport { findPackageLock } from '../../utils';\nimport { Context, Overrides } from './types';\n\ntype Config = Configuration['cache'];\ntype Result = Pick<Configuration, 'cache' | 'infrastructureLogging'> | undefined;\n\nconst CACHE_VERSION = '1';\n\nexport function cacheConfig(context: Context, _overrides: Overrides): Result {\n const { emitExposedDependencies } = context;\n if (!emitExposedDependencies) {\n return;\n }\n\n const packageLock = findPackageLock();\n const cache: Config = {\n type: 'filesystem',\n version: CACHE_VERSION,\n ...(packageLock ? { buildDependencies: { packageLock: [packageLock] } } : {}),\n };\n\n return {\n cache,\n // Suppress \"Serializing big strings impacts deserialization performance\" warnings\n infrastructureLogging: { level: 'error' },\n };\n}\n"],"names":["cacheConfig","CACHE_VERSION","context","_overrides","emitExposedDependencies","packageLock","findPackageLock","cache","type","version","buildDependencies","infrastructureLogging","level"],"mappings":";;;;+BASgBA;;;eAAAA;;;uBARgB;AAMhC,MAAMC,gBAAgB;AAEf,SAASD,YAAYE,OAAgB,EAAEC,UAAqB;IAC/D,MAAM,EAAEC,uBAAuB,EAAE,GAAGF;IACpC,IAAI,CAACE,yBAAyB;QAC1B;IACJ;IAEA,MAAMC,cAAcC,IAAAA,sBAAe;IACnC,MAAMC,QAAgB;QAClBC,MAAM;QACNC,SAASR;QACT,GAAII,cAAc;YAAEK,mBAAmB;gBAAEL,aAAa;oBAACA;iBAAY;YAAC;QAAE,IAAI,CAAC,CAAC;IAChF;IAEA,OAAO;QACHE;QACA,kFAAkF;QAClFI,uBAAuB;YAAEC,OAAO;QAAQ;IAC5C;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":"AAGA,wBAAgB,yBAAyB,uBAWxC"}
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"}
@@ -8,19 +8,9 @@ Object.defineProperty(exports, "getLaunchDarklySdkVersion", {
8
8
  return getLaunchDarklySdkVersion;
9
9
  }
10
10
  });
11
- const _path = /*#__PURE__*/ _interop_require_default(require("path"));
12
11
  const _utils = require("../../../utils");
13
- function _interop_require_default(obj) {
14
- return obj && obj.__esModule ? obj : {
15
- default: obj
16
- };
17
- }
18
12
  function getLaunchDarklySdkVersion() {
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
- }
13
+ return (0, _utils.getPackageVersion)('launchdarkly-js-client-sdk');
24
14
  }
25
15
 
26
16
  //# sourceMappingURL=get-launchdarkly-sdk-version.js.map
@@ -1 +1 @@
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
+ {"version":3,"sources":["../../../../src/webpack/configs/utils/get-launchdarkly-sdk-version.ts"],"sourcesContent":["import { getPackageVersion } from '../../../utils';\n\nexport function getLaunchDarklySdkVersion() {\n return getPackageVersion('launchdarkly-js-client-sdk');\n}\n"],"names":["getLaunchDarklySdkVersion","getPackageVersion"],"mappings":";;;;+BAEgBA;;;eAAAA;;;uBAFkB;AAE3B,SAASA;IACZ,OAAOC,IAAAA,wBAAiB,EAAC;AAC7B"}
@@ -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":"AAGA,wBAAgB,uBAAuB,WAItC"}
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"}
@@ -8,15 +8,13 @@ Object.defineProperty(exports, "getWebComponentsVersion", {
8
8
  return getWebComponentsVersion;
9
9
  }
10
10
  });
11
- const _path = /*#__PURE__*/ _interop_require_default(require("path"));
12
11
  const _utils = require("../../../utils");
13
- function _interop_require_default(obj) {
14
- return obj && obj.__esModule ? obj : {
15
- default: obj
16
- };
17
- }
18
12
  function getWebComponentsVersion() {
19
- return (0, _utils.readJson)(_path.default.join(_path.default.dirname(require.resolve('@servicetitan/web-components')), '../package.json')).version;
13
+ const version = (0, _utils.getPackageVersion)('@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;
20
18
  }
21
19
 
22
20
  //# sourceMappingURL=get-web-components-version.js.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"sources":["../../../../src/webpack/configs/utils/get-web-components-version.ts"],"sourcesContent":["import { getPackageVersion } from '../../../utils';\n\nexport function getWebComponentsVersion() {\n const version = getPackageVersion('@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","getPackageVersion","Error"],"mappings":";;;;+BAEgBA;;;eAAAA;;;uBAFkB;AAE3B,SAASA;IACZ,MAAMC,UAAUC,IAAAA,wBAAiB,EAAC;IAClC,IAAI,CAACD,SAAS;QACV,MAAM,IAAIE,MACN;IAER;IACA,OAAOF;AACX"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/startup",
3
- "version": "35.1.0",
3
+ "version": "35.2.0-far-1776.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": {
@@ -145,6 +145,5 @@
145
145
  },
146
146
  "cli": {
147
147
  "webpack": false
148
- },
149
- "gitHead": "f1d49b43f27789cf5cd4bea3e065cd9e33bf5876"
148
+ }
150
149
  }
@@ -35,6 +35,7 @@ describe(`[startup] ${MfeGenerateMetadata.name}`, () => {
35
35
 
36
36
  const mockParentPackageJson = {
37
37
  name: 'parent-package',
38
+ workspaces: ['packages/*'],
38
39
  dependencies: { 'some-dep': '^1.0.0' },
39
40
  };
40
41
 
@@ -109,10 +110,28 @@ describe(`[startup] ${MfeGenerateMetadata.name}`, () => {
109
110
  });
110
111
  });
111
112
 
112
- test('throws error', async () => {
113
- await expect(subject()).rejects.toThrow(
114
- 'this command must be run inside a web-component directory'
115
- );
113
+ test('does not throw error', async () => {
114
+ await expect(subject()).resolves.not.toThrow();
115
+ });
116
+ });
117
+
118
+ describe('when tsconfig.json does not exist', () => {
119
+ beforeEach(() => {
120
+ vol.reset();
121
+ vol.fromJSON({
122
+ './package.json': JSON.stringify(mockPackageJson),
123
+ '../../package.json': JSON.stringify(mockParentPackageJson),
124
+ });
125
+ });
126
+
127
+ test('does not throw error', async () => {
128
+ await expect(subject()).resolves.not.toThrow();
129
+ });
130
+
131
+ test('outputs metadata with empty entrypoints', async () => {
132
+ await subject();
133
+
134
+ expect(getMetadataFromStdout().entrypoints).toEqual({});
116
135
  });
117
136
  });
118
137
 
@@ -4,7 +4,6 @@ import {
4
4
  getFolders,
5
5
  getPackageData,
6
6
  getPackageName,
7
- isWebComponent,
8
7
  loadSharedDependencies,
9
8
  log,
10
9
  logErrors,
@@ -26,13 +25,14 @@ export class MfeGenerateMetadata extends Command<typeof options> {
26
25
 
27
26
  @logErrors
28
27
  async execute() {
29
- if (!isWebComponent()) {
30
- throw new Error('this command must be run inside a web-component directory');
31
- }
32
-
33
28
  const { output } = this.args;
34
29
 
35
- const { destination } = getFolders();
30
+ let destination: string;
31
+ try {
32
+ ({ destination } = getFolders());
33
+ } catch {
34
+ destination = 'dist';
35
+ }
36
36
  const name = getPackageName();
37
37
  const packageData = getPackageData();
38
38
  const sharedDependencies = loadSharedDependencies(
@@ -0,0 +1,35 @@
1
+ import { fs, vol } from 'memfs';
2
+ import path from 'node:path';
3
+ import { findPackageLock } from '../find-package-lock';
4
+
5
+ jest.mock('fs', () => fs);
6
+
7
+ describe(`[startup] ${findPackageLock.name}`, () => {
8
+ afterEach(() => vol.reset());
9
+
10
+ const subject = () => findPackageLock();
11
+
12
+ describe('when package-lock.json exists in cwd', () => {
13
+ beforeEach(() => {
14
+ vol.fromJSON({ './package-lock.json': '{}' });
15
+ });
16
+
17
+ test('returns path', () => {
18
+ expect(subject()).toBe(path.resolve('./package-lock.json'));
19
+ });
20
+ });
21
+
22
+ describe('when package-lock.json exists in parent directory', () => {
23
+ beforeEach(() => {
24
+ vol.fromJSON({ '../package-lock.json': '{}' });
25
+ });
26
+
27
+ test('returns path', () => {
28
+ expect(subject()).toBe(path.resolve('../package-lock.json'));
29
+ });
30
+ });
31
+
32
+ test('returns undefined when no package-lock.json exists', () => {
33
+ expect(subject()).toBeUndefined();
34
+ });
35
+ });
@@ -1,47 +1,118 @@
1
+ import { fs, vol } from 'memfs';
1
2
  import { getPackageData, getPackageDependencyVersion } from '../get-package-data';
2
- import { readJson } from '../read-json';
3
3
 
4
- jest.mock('../read-json', () => ({ readJson: jest.fn() }));
4
+ jest.mock('fs', () => fs);
5
5
 
6
6
  describe(`[startup] Utils`, () => {
7
7
  describe(`${getPackageData.name}`, () => {
8
- const packageJson = './package.json';
9
- const ancestorPackageJson = '../../package.json';
10
- let packages: Record<string, Record<string, any>>;
11
-
12
- beforeEach(() => {
13
- packages = {
14
- [ancestorPackageJson]: { dependencies: { foo: '1.0.0', bar: '2.0.0' } },
15
- [packageJson]: {
8
+ afterEach(() => vol.reset());
9
+
10
+ const subject = () => getPackageData();
11
+
12
+ describe('when root package.json with workspaces exists', () => {
13
+ beforeEach(() => {
14
+ vol.fromJSON({
15
+ './package.json': JSON.stringify({
16
+ name: 'packageName',
17
+ dependencies: { foo: '1.1.0', baz: '3.0.0' },
18
+ }),
19
+ '../package.json': JSON.stringify({
20
+ workspaces: ['packages/*'],
21
+ dependencies: { foo: '1.0.0', bar: '2.0.0' },
22
+ }),
23
+ });
24
+ });
25
+
26
+ test('returns merged dependencies (local overrides root)', () => {
27
+ expect(subject()).toEqual({
16
28
  name: 'packageName',
17
- dependencies: { foo: '1.1.0', baz: '3.0.0' },
18
- },
19
- };
20
- jest.mocked(readJson).mockImplementation(path => packages[path] ?? {});
29
+ dependencies: { foo: '1.1.0', bar: '2.0.0', baz: '3.0.0' },
30
+ });
31
+ });
21
32
  });
22
33
 
23
- const subject = () => getPackageData();
34
+ describe('when no root package.json found', () => {
35
+ beforeEach(() => {
36
+ vol.fromJSON({
37
+ './package.json': JSON.stringify({
38
+ name: 'rootPackage',
39
+ workspaces: ['packages/*'],
40
+ dependencies: { foo: '1.0.0' },
41
+ }),
42
+ });
43
+ });
44
+
45
+ test('returns only local dependencies', () => {
46
+ expect(subject()).toEqual({
47
+ name: 'rootPackage',
48
+ dependencies: { foo: '1.0.0' },
49
+ });
50
+ });
51
+ });
52
+
53
+ describe('when root has lerna.json with packages instead of workspaces', () => {
54
+ beforeEach(() => {
55
+ vol.fromJSON({
56
+ './package.json': JSON.stringify({
57
+ name: 'packageName',
58
+ version: '2.0.0',
59
+ dependencies: { foo: '1.0.0' },
60
+ }),
61
+ '../package.json': JSON.stringify({
62
+ dependencies: { bar: '2.0.0' },
63
+ }),
64
+ '../lerna.json': JSON.stringify({
65
+ packages: ['packages/*'],
66
+ }),
67
+ });
68
+ });
69
+
70
+ test('returns dependencies from root discovered via lerna.json', () => {
71
+ expect(subject()).toEqual({
72
+ name: 'packageName',
73
+ version: '2.0.0',
74
+ dependencies: { bar: '2.0.0', foo: '1.0.0' },
75
+ });
76
+ });
77
+ });
78
+
79
+ describe('when root has lerna.json but no package.json at root level', () => {
80
+ beforeEach(() => {
81
+ vol.fromJSON({
82
+ './package.json': JSON.stringify({
83
+ name: 'packageName',
84
+ version: '3.0.0',
85
+ dependencies: { foo: '1.0.0' },
86
+ }),
87
+ '../lerna.json': JSON.stringify({
88
+ packages: ['packages/*'],
89
+ }),
90
+ });
91
+ });
24
92
 
25
- test(`returns merged dependencies from ${packageJson} and ${ancestorPackageJson}`, () => {
26
- expect(subject()).toEqual({
27
- name: packages[packageJson].name,
28
- dependencies: {
29
- ...packages[ancestorPackageJson].dependencies,
30
- ...packages[packageJson].dependencies,
31
- },
93
+ test('returns only local dependencies', () => {
94
+ expect(subject()).toEqual({
95
+ name: 'packageName',
96
+ version: '3.0.0',
97
+ dependencies: { foo: '1.0.0' },
98
+ });
32
99
  });
33
100
  });
34
101
 
35
- describe(`when ${packageJson} contains sharedDependencies`, () => {
102
+ describe('when package.json contains sharedDependencies', () => {
36
103
  const sharedDependencies = { react: 'SharedDependencies.React' };
37
104
 
38
105
  beforeEach(() => {
39
- Object.assign(packages[packageJson], {
40
- cli: { webpack: { 'shared-dependencies': sharedDependencies } },
106
+ vol.fromJSON({
107
+ './package.json': JSON.stringify({
108
+ name: 'packageName',
109
+ dependencies: { foo: '1.0.0' },
110
+ cli: { webpack: { 'shared-dependencies': sharedDependencies } },
111
+ }),
41
112
  });
42
113
  });
43
114
 
44
- test('returns sharedDependencies', () => {
115
+ test('result contains sharedDependencies', () => {
45
116
  expect(subject()).toEqual(expect.objectContaining({ sharedDependencies }));
46
117
  });
47
118
  });
@@ -0,0 +1,120 @@
1
+ import { fs, vol } from 'memfs';
2
+ import { getPackageVersion } from '../get-package-version';
3
+
4
+ jest.mock('fs', () => fs);
5
+
6
+ describe(`[startup] ${getPackageVersion.name}`, () => {
7
+ afterEach(() => vol.reset());
8
+
9
+ const subject = (packageName: string) => getPackageVersion(packageName);
10
+
11
+ describe('when package-lock.json exists', () => {
12
+ beforeEach(() => {
13
+ vol.fromJSON({
14
+ './package-lock.json': JSON.stringify({
15
+ packages: {
16
+ 'node_modules/@servicetitan/web-components': { version: '1.2.3' },
17
+ 'node_modules/launchdarkly-js-client-sdk': { version: '4.5.6' },
18
+ },
19
+ }),
20
+ });
21
+ });
22
+
23
+ test('returns version for a found package', () => {
24
+ expect(subject('@servicetitan/web-components')).toBe('1.2.3');
25
+ });
26
+
27
+ test('returns version for another found package', () => {
28
+ expect(subject('launchdarkly-js-client-sdk')).toBe('4.5.6');
29
+ });
30
+
31
+ test('returns undefined for a package not in lock file', () => {
32
+ expect(subject('nonexistent-package')).toBeUndefined();
33
+ });
34
+ });
35
+
36
+ describe('when package is a linked workspace package', () => {
37
+ beforeEach(() => {
38
+ vol.fromJSON({
39
+ './package-lock.json': JSON.stringify({
40
+ packages: {
41
+ 'node_modules/@servicetitan/web-components': {
42
+ resolved: 'packages/web-components',
43
+ link: true,
44
+ },
45
+ 'packages/web-components': {
46
+ version: '35.1.0',
47
+ },
48
+ },
49
+ }),
50
+ });
51
+ });
52
+
53
+ test('follows link to resolve version from source path', () => {
54
+ expect(subject('@servicetitan/web-components')).toBe('35.1.0');
55
+ });
56
+ });
57
+
58
+ describe('when entry has link but no resolved path', () => {
59
+ beforeEach(() => {
60
+ vol.fromJSON({
61
+ './package-lock.json': JSON.stringify({
62
+ packages: {
63
+ 'node_modules/some-package': { link: true, version: '1.0.0' },
64
+ },
65
+ }),
66
+ });
67
+ });
68
+
69
+ test('returns entry version', () => {
70
+ expect(subject('some-package')).toBe('1.0.0');
71
+ });
72
+ });
73
+
74
+ describe('when linked package resolved path does not exist in packages', () => {
75
+ beforeEach(() => {
76
+ vol.fromJSON({
77
+ './package-lock.json': JSON.stringify({
78
+ packages: {
79
+ 'node_modules/some-package': {
80
+ resolved: 'packages/some-package',
81
+ link: true,
82
+ },
83
+ },
84
+ }),
85
+ });
86
+ });
87
+
88
+ test('returns undefined', () => {
89
+ expect(subject('some-package')).toBeUndefined();
90
+ });
91
+ });
92
+
93
+ describe('when lock file contains invalid JSON', () => {
94
+ beforeEach(() => {
95
+ vol.fromJSON({
96
+ './package-lock.json': 'not valid json',
97
+ });
98
+ });
99
+
100
+ test('returns undefined', () => {
101
+ expect(subject('some-package')).toBeUndefined();
102
+ });
103
+ });
104
+
105
+ describe('when lock file has no packages property', () => {
106
+ beforeEach(() => {
107
+ vol.fromJSON({
108
+ './package-lock.json': JSON.stringify({}),
109
+ });
110
+ });
111
+
112
+ test('returns undefined', () => {
113
+ expect(subject('some-package')).toBeUndefined();
114
+ });
115
+ });
116
+
117
+ test('returns undefined when no package-lock.json exists', () => {
118
+ expect(subject('@servicetitan/web-components')).toBeUndefined();
119
+ });
120
+ });
@@ -0,0 +1,10 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { findUp } from './find-up';
4
+
5
+ export function findPackageLock() {
6
+ return findUp(directory => {
7
+ const lockFile = path.resolve(directory, 'package-lock.json');
8
+ return fs.existsSync(lockFile) ? lockFile : undefined;
9
+ });
10
+ }
@@ -1,4 +1,4 @@
1
- import path from 'path';
1
+ import path from 'node:path';
2
2
 
3
3
  export function findUp<T>(callback: (directory: string) => T | undefined) {
4
4
  let directory = path.resolve('./');
@@ -1,4 +1,6 @@
1
- import { readJson } from './read-json';
1
+ import path from 'node:path';
2
+ import { findUp } from './find-up';
3
+ import { readJson, readJsonSafe } from './read-json';
2
4
 
3
5
  interface PackageData {
4
6
  name: string;
@@ -14,13 +16,36 @@ export function getPackageData(): PackageData {
14
16
  name: packageJson.name,
15
17
  version: packageJson.version,
16
18
  dependencies: {
17
- ...readJson('../../package.json').dependencies,
19
+ ...findRootDependencies(),
18
20
  ...packageJson.dependencies,
19
21
  },
20
22
  sharedDependencies: packageJson.cli?.webpack?.['shared-dependencies'],
21
23
  };
22
24
  }
23
25
 
26
+ function findRootDependencies() {
27
+ const cwd = path.resolve('./');
28
+ const root = findUp(directory => {
29
+ if (directory === cwd) {
30
+ return undefined;
31
+ }
32
+ const pkgPath = path.join(directory, 'package.json');
33
+ const pkg = readJsonSafe<{ workspaces?: string[]; dependencies?: Record<string, string> }>(
34
+ pkgPath
35
+ );
36
+ if (pkg?.workspaces) {
37
+ return pkg;
38
+ }
39
+
40
+ const lernaPath = path.join(directory, 'lerna.json');
41
+ if (readJsonSafe<{ packages?: string[] }>(lernaPath)?.packages) {
42
+ return pkg ?? {};
43
+ }
44
+ });
45
+
46
+ return root?.dependencies ?? {};
47
+ }
48
+
24
49
  export function getPackageDependencyVersion(dependency: string, defaultVersion?: string) {
25
50
  try {
26
51
  const { version } = require(`${dependency}/package.json`);
@@ -0,0 +1,31 @@
1
+ import { findPackageLock } from './find-package-lock';
2
+ import { readJsonSafe } from './read-json';
3
+
4
+ interface PackageLockEntry {
5
+ version?: string;
6
+ resolved?: string;
7
+ link?: boolean;
8
+ }
9
+
10
+ interface PackageLock {
11
+ packages: Record<string, PackageLockEntry>;
12
+ }
13
+
14
+ export function getPackageVersion(packageName: string) {
15
+ const lockFilePath = findPackageLock();
16
+ if (!lockFilePath) {
17
+ return undefined;
18
+ }
19
+
20
+ const lockFile = readJsonSafe<PackageLock>(lockFilePath);
21
+ const entry = lockFile?.packages?.[`node_modules/${packageName}`];
22
+ if (!entry) {
23
+ return undefined;
24
+ }
25
+
26
+ if (entry.link && entry.resolved) {
27
+ return lockFile?.packages?.[entry.resolved]?.version;
28
+ }
29
+
30
+ return entry.version;
31
+ }
@@ -1,3 +1,4 @@
1
+ export * from './find-package-lock';
1
2
  export * from './find-packages';
2
3
  export * from './find-up';
3
4
  export * from './format-duration';
@@ -10,6 +11,7 @@ export * from './get-folders';
10
11
  export * from './get-jest-config';
11
12
  export * from './get-package-data';
12
13
  export * from './get-package-name';
14
+ export * from './get-package-version';
13
15
  export * from './get-packages';
14
16
  export * from './get-startup-version';
15
17
  export * from './get-tsconfig';
@@ -1,7 +1,5 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
1
  import { Configuration } from 'webpack';
4
- import { findUp } from '../../utils';
2
+ import { findPackageLock } from '../../utils';
5
3
  import { Context, Overrides } from './types';
6
4
 
7
5
  type Config = Configuration['cache'];
@@ -28,10 +26,3 @@ export function cacheConfig(context: Context, _overrides: Overrides): Result {
28
26
  infrastructureLogging: { level: 'error' },
29
27
  };
30
28
  }
31
-
32
- function findPackageLock() {
33
- return findUp(directory => {
34
- const lockFile = path.resolve(path.join(directory), 'package-lock.json');
35
- return fs.existsSync(lockFile) ? lockFile : undefined;
36
- });
37
- }
@@ -6,25 +6,41 @@ jest.mock('fs', () => fs);
6
6
  describe(`[startup] ${getLaunchDarklySdkVersion.name}`, () => {
7
7
  const launchDarklySdkVersion = '1.2.3';
8
8
 
9
+ afterEach(() => vol.reset());
10
+
9
11
  const subject = () => getLaunchDarklySdkVersion();
10
12
 
11
- test('returns undefined', () => {
12
- expect(subject()).toBeUndefined();
13
+ describe('when package is not in package-lock.json', () => {
14
+ beforeEach(() => {
15
+ vol.fromJSON({
16
+ './package-lock.json': JSON.stringify({ packages: {} }),
17
+ });
18
+ });
19
+
20
+ test('returns undefined', () => {
21
+ expect(subject()).toBeUndefined();
22
+ });
13
23
  });
14
24
 
15
- describe('when package is present', () => {
25
+ describe('when package is in package-lock.json', () => {
16
26
  beforeEach(() => {
17
27
  vol.fromJSON({
18
- 'node_modules/launchdarkly-js-client-sdk/package.json': JSON.stringify({
19
- version: launchDarklySdkVersion,
28
+ './package-lock.json': JSON.stringify({
29
+ packages: {
30
+ 'node_modules/launchdarkly-js-client-sdk': {
31
+ version: launchDarklySdkVersion,
32
+ },
33
+ },
20
34
  }),
21
35
  });
22
36
  });
23
37
 
24
- afterEach(() => vol.reset());
25
-
26
- test('returns version from launchdarkly-js-client-sdk package', () => {
38
+ test('returns version from package-lock.json', () => {
27
39
  expect(subject()).toEqual(launchDarklySdkVersion);
28
40
  });
29
41
  });
42
+
43
+ test('returns undefined when no package-lock.json exists', () => {
44
+ expect(subject()).toBeUndefined();
45
+ });
30
46
  });
@@ -6,19 +6,39 @@ jest.mock('fs', () => fs);
6
6
  describe(`[startup] ${getWebComponentsVersion.name}`, () => {
7
7
  const webComponentsVersion = '1.2.3';
8
8
 
9
- beforeEach(() => {
10
- vol.fromJSON({
11
- 'packages/web-components/package.json': JSON.stringify({
12
- version: webComponentsVersion,
13
- }),
14
- });
15
- });
16
-
17
9
  afterEach(() => vol.reset());
18
10
 
19
11
  const subject = () => getWebComponentsVersion();
20
12
 
21
- test('returns version from @servicetitan/web-components package', () => {
22
- expect(subject()).toEqual(webComponentsVersion);
13
+ describe('when package is in package-lock.json', () => {
14
+ beforeEach(() => {
15
+ vol.fromJSON({
16
+ './package-lock.json': JSON.stringify({
17
+ packages: {
18
+ 'node_modules/@servicetitan/web-components': {
19
+ version: webComponentsVersion,
20
+ },
21
+ },
22
+ }),
23
+ });
24
+ });
25
+
26
+ test('returns version from package-lock.json', () => {
27
+ expect(subject()).toEqual(webComponentsVersion);
28
+ });
29
+ });
30
+
31
+ describe('when package is not in package-lock.json', () => {
32
+ beforeEach(() => {
33
+ vol.fromJSON({
34
+ './package-lock.json': JSON.stringify({ packages: {} }),
35
+ });
36
+ });
37
+
38
+ test('throws', () => {
39
+ expect(subject).toThrow(
40
+ 'Unable to resolve @servicetitan/web-components version from package-lock.json'
41
+ );
42
+ });
23
43
  });
24
44
  });
@@ -1,15 +1,5 @@
1
- import path from 'path';
2
- import { readJson } from '../../../utils';
1
+ import { getPackageVersion } from '../../../utils';
3
2
 
4
3
  export function getLaunchDarklySdkVersion() {
5
- try {
6
- return readJson<{ version: string }>(
7
- path.join(
8
- path.dirname(require.resolve('launchdarkly-js-client-sdk')),
9
- '../package.json'
10
- )
11
- ).version;
12
- } catch {
13
- // ignore
14
- }
4
+ return getPackageVersion('launchdarkly-js-client-sdk');
15
5
  }
@@ -1,8 +1,11 @@
1
- import path from 'path';
2
- import { readJson } from '../../../utils';
1
+ import { getPackageVersion } from '../../../utils';
3
2
 
4
3
  export function getWebComponentsVersion() {
5
- return readJson<{ version: string }>(
6
- path.join(path.dirname(require.resolve('@servicetitan/web-components')), '../package.json')
7
- ).version;
4
+ const version = getPackageVersion('@servicetitan/web-components');
5
+ if (!version) {
6
+ throw new Error(
7
+ 'Unable to resolve @servicetitan/web-components version from package-lock.json'
8
+ );
9
+ }
10
+ return version;
8
11
  }