@servicetitan/startup 36.2.0 → 36.3.0-far-1776.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/get-command.d.ts +4 -0
- package/dist/cli/commands/get-command.d.ts.map +1 -0
- package/dist/cli/commands/get-command.js +68 -0
- package/dist/cli/commands/get-command.js.map +1 -0
- package/dist/cli/commands/index.d.ts +15 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +32 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/mfe-check.d.ts.map +1 -1
- package/dist/cli/commands/mfe-check.js +5 -1
- package/dist/cli/commands/mfe-check.js.map +1 -1
- package/dist/cli/commands/run-task.test.d.ts +2 -0
- package/dist/cli/commands/run-task.test.d.ts.map +1 -0
- package/dist/cli/commands/run-task.test.js +65 -0
- package/dist/cli/commands/run-task.test.js.map +1 -0
- package/dist/cypress-config/index.d.ts +2 -0
- package/dist/cypress-config/index.d.ts.map +1 -0
- package/dist/cypress-config/index.js +20 -0
- package/dist/cypress-config/index.js.map +1 -0
- package/dist/cypress-config/webpack-config.d.ts +4 -0
- package/dist/cypress-config/webpack-config.d.ts.map +1 -0
- package/dist/cypress-config/webpack-config.js +76 -0
- package/dist/cypress-config/webpack-config.js.map +1 -0
- package/dist/utils/__tests__/get-package-version.test.js +180 -0
- package/dist/utils/__tests__/get-package-version.test.js.map +1 -0
- package/dist/utils/find-package-lock.d.ts +2 -0
- package/dist/utils/find-package-lock.d.ts.map +1 -0
- package/dist/utils/find-package-lock.js +26 -0
- package/dist/utils/find-package-lock.js.map +1 -0
- package/dist/utils/find-up.js +4 -4
- package/dist/utils/find-up.js.map +1 -1
- package/dist/utils/get-package-data.d.ts +0 -1
- package/dist/utils/get-package-data.d.ts.map +1 -1
- package/dist/utils/get-package-data.js +3 -22
- package/dist/utils/get-package-data.js.map +1 -1
- package/dist/utils/get-package-version.d.ts +3 -0
- package/dist/utils/get-package-version.d.ts.map +1 -0
- package/dist/utils/get-package-version.js +31 -0
- package/dist/utils/get-package-version.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/package-lock/find-package-lock.d.ts +2 -0
- package/dist/utils/package-lock/find-package-lock.d.ts.map +1 -0
- package/dist/utils/package-lock/find-package-lock.js +26 -0
- package/dist/utils/package-lock/find-package-lock.js.map +1 -0
- package/dist/utils/package-lock/get-lock-file-entry.d.ts +3 -0
- package/dist/utils/package-lock/get-lock-file-entry.d.ts.map +1 -0
- package/dist/utils/package-lock/get-lock-file-entry.js +22 -0
- package/dist/utils/package-lock/get-lock-file-entry.js.map +1 -0
- package/dist/utils/package-lock/get-lock-file-version.d.ts +3 -0
- package/dist/utils/package-lock/get-lock-file-version.d.ts.map +1 -0
- package/dist/utils/package-lock/get-lock-file-version.js +16 -0
- package/dist/utils/package-lock/get-lock-file-version.js.map +1 -0
- package/dist/utils/package-lock/get-package-version.d.ts +3 -0
- package/dist/utils/package-lock/get-package-version.d.ts.map +1 -0
- package/dist/utils/package-lock/get-package-version.js +31 -0
- package/dist/utils/package-lock/get-package-version.js.map +1 -0
- package/dist/utils/package-lock/index.d.ts +6 -0
- package/dist/utils/package-lock/index.d.ts.map +1 -0
- package/dist/utils/package-lock/index.js +23 -0
- package/dist/utils/package-lock/index.js.map +1 -0
- package/dist/utils/package-lock/read-package-lock.d.ts +3 -0
- package/dist/utils/package-lock/read-package-lock.d.ts.map +1 -0
- package/dist/utils/package-lock/read-package-lock.js +22 -0
- package/dist/utils/package-lock/read-package-lock.js.map +1 -0
- package/dist/utils/package-lock/resolve-package-lock-entry.d.ts +3 -0
- package/dist/utils/package-lock/resolve-package-lock-entry.d.ts.map +1 -0
- package/dist/utils/package-lock/resolve-package-lock-entry.js +21 -0
- package/dist/utils/package-lock/resolve-package-lock-entry.js.map +1 -0
- package/dist/utils/package-lock/types.d.ts +12 -0
- package/dist/utils/package-lock/types.d.ts.map +1 -0
- package/dist/utils/package-lock/types.js +6 -0
- package/dist/utils/package-lock/types.js.map +1 -0
- package/dist/utils/package-lock.d.ts +14 -0
- package/dist/utils/package-lock.d.ts.map +1 -0
- package/dist/utils/package-lock.js +63 -0
- package/dist/utils/package-lock.js.map +1 -0
- package/dist/utils/resolve-package-lock-entry.d.ts +11 -0
- package/dist/utils/resolve-package-lock-entry.d.ts.map +1 -0
- package/dist/utils/resolve-package-lock-entry.js +21 -0
- package/dist/utils/resolve-package-lock-entry.js.map +1 -0
- package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.d.ts.map +1 -1
- package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.js +3 -1
- package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.js.map +1 -1
- package/dist/webpack/configs/utils/get-launchdarkly-sdk-version.d.ts.map +1 -1
- package/dist/webpack/configs/utils/get-launchdarkly-sdk-version.js +1 -11
- package/dist/webpack/configs/utils/get-launchdarkly-sdk-version.js.map +1 -1
- package/dist/webpack/configs/utils/get-web-components-version.d.ts.map +1 -1
- package/dist/webpack/configs/utils/get-web-components-version.js +5 -7
- package/dist/webpack/configs/utils/get-web-components-version.js.map +1 -1
- package/package.json +3 -4
- package/src/cli/commands/__tests__/mfe-check.test.ts +12 -10
- package/src/cli/commands/mfe-check.ts +5 -1
- package/src/utils/__tests__/get-package-data.test.ts +1 -45
- package/src/utils/find-up.ts +1 -1
- package/src/utils/get-package-data.ts +0 -14
- package/src/utils/index.ts +1 -0
- package/src/utils/package-lock/__tests__/find-package-lock.test.ts +35 -0
- package/src/utils/package-lock/__tests__/get-lock-file-entry.test.ts +97 -0
- package/src/utils/package-lock/__tests__/get-lock-file-version.test.ts +32 -0
- package/src/utils/package-lock/__tests__/read-package-lock.test.ts +47 -0
- package/src/utils/package-lock/find-package-lock.ts +10 -0
- package/src/utils/package-lock/get-lock-file-entry.ts +14 -0
- package/src/utils/package-lock/get-lock-file-version.ts +6 -0
- package/src/utils/package-lock/index.ts +5 -0
- package/src/utils/package-lock/read-package-lock.ts +13 -0
- package/src/utils/package-lock/types.ts +13 -0
- package/src/webpack/__tests__/create-webpack-config-shared-dependencies.test.ts +4 -6
- package/src/webpack/__tests__/create-webpack-config.test.ts +3 -5
- package/src/webpack/configs/plugins/define-exposed-dependencies-plugin.ts +6 -3
- package/src/webpack/configs/utils/__tests__/get-launchdarkly-sdk-version.test.ts +29 -12
- package/src/webpack/configs/utils/__tests__/get-web-components-version.test.ts +37 -12
- package/src/webpack/configs/utils/get-launchdarkly-sdk-version.ts +2 -12
- package/src/webpack/configs/utils/get-web-components-version.ts +8 -5
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface PackageLockEntry {
|
|
2
|
+
version?: string;
|
|
3
|
+
resolved?: string;
|
|
4
|
+
link?: boolean;
|
|
5
|
+
dependencies?: Record<string, string>;
|
|
6
|
+
peerDependencies?: Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
export type PackageLockPackages = Record<string, PackageLockEntry>;
|
|
9
|
+
export declare function resolvePackageLockEntry(packages: PackageLockPackages, packageName: string, scope?: string): PackageLockEntry;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=resolve-package-lock-entry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-package-lock-entry.d.ts","sourceRoot":"","sources":["../../src/utils/resolve-package-lock-entry.ts"],"names":[],"mappings":"AAAA,UAAU,gBAAgB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAEnE,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE,mBAAmB,EAC7B,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,oBAWjB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "resolvePackageLockEntry", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return resolvePackageLockEntry;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
function resolvePackageLockEntry(packages, packageName, scope) {
|
|
12
|
+
var _ref;
|
|
13
|
+
const entry = (_ref = scope ? packages === null || packages === void 0 ? void 0 : packages[`node_modules/${scope}/node_modules/${packageName}`] : undefined) !== null && _ref !== void 0 ? _ref : packages === null || packages === void 0 ? void 0 : packages[`node_modules/${packageName}`];
|
|
14
|
+
if ((entry === null || entry === void 0 ? void 0 : entry.link) && entry.resolved) {
|
|
15
|
+
var _ref1;
|
|
16
|
+
return (_ref1 = packages === null || packages === void 0 ? void 0 : packages[entry.resolved]) !== null && _ref1 !== void 0 ? _ref1 : {};
|
|
17
|
+
}
|
|
18
|
+
return entry !== null && entry !== void 0 ? entry : {};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=resolve-package-lock-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/resolve-package-lock-entry.ts"],"sourcesContent":["interface PackageLockEntry {\n version?: string;\n resolved?: string;\n link?: boolean;\n dependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n}\n\nexport type PackageLockPackages = Record<string, PackageLockEntry>;\n\nexport function resolvePackageLockEntry(\n packages: PackageLockPackages,\n packageName: string,\n scope?: string\n) {\n const entry =\n (scope ? packages?.[`node_modules/${scope}/node_modules/${packageName}`] : undefined) ??\n packages?.[`node_modules/${packageName}`];\n\n if (entry?.link && entry.resolved) {\n return packages?.[entry.resolved] ?? {};\n }\n\n return entry ?? {};\n}\n"],"names":["resolvePackageLockEntry","packages","packageName","scope","entry","undefined","link","resolved"],"mappings":";;;;+BAUgBA;;;eAAAA;;;AAAT,SAASA,wBACZC,QAA6B,EAC7BC,WAAmB,EACnBC,KAAc;QAGTA;IADL,MAAMC,SACDD,OAAAA,QAAQF,qBAAAA,+BAAAA,QAAU,CAAC,CAAC,aAAa,EAAEE,MAAM,cAAc,EAAED,aAAa,CAAC,GAAGG,uBAA1EF,kBAAAA,OACDF,qBAAAA,+BAAAA,QAAU,CAAC,CAAC,aAAa,EAAEC,aAAa,CAAC;IAE7C,IAAIE,CAAAA,kBAAAA,4BAAAA,MAAOE,IAAI,KAAIF,MAAMG,QAAQ,EAAE;;QAC/B,gBAAON,qBAAAA,+BAAAA,QAAU,CAACG,MAAMG,QAAQ,CAAC,yCAAI,CAAC;IAC1C;IAEA,OAAOH,kBAAAA,mBAAAA,QAAS,CAAC;AACrB"}
|
|
@@ -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,
|
|
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"}
|
|
@@ -17,9 +17,11 @@ function defineExposedDependenciesPlugin(context, _) {
|
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
19
|
const { packageData, sharedDependencies } = context;
|
|
20
|
+
const lockFile = (0, _utils.readPackageLock)();
|
|
20
21
|
const exposedDependencies = (0, _utils1.getExposedDependencies)(sharedDependencies, (dependency)=>{
|
|
22
|
+
var _getLockFileVersion;
|
|
21
23
|
var _packageData_dependencies;
|
|
22
|
-
return (0, _utils.
|
|
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];
|
|
23
25
|
});
|
|
24
26
|
return new _webpack.DefinePlugin({
|
|
25
27
|
// 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 {
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-launchdarkly-sdk-version.d.ts","sourceRoot":"","sources":["../../../../src/webpack/configs/utils/get-launchdarkly-sdk-version.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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.getLockFileVersion)((0, _utils.readPackageLock)(), '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
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-web-components-version.d.ts","sourceRoot":"","sources":["../../../../src/webpack/configs/utils/get-web-components-version.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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;
|
|
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
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/startup",
|
|
3
|
-
"version": "36.
|
|
3
|
+
"version": "36.3.0-far-1776.2",
|
|
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": {
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"@types/yargs": "~17.0.35"
|
|
94
94
|
},
|
|
95
95
|
"dependencies": {
|
|
96
|
-
"@babel/preset-env": "~7.29.
|
|
96
|
+
"@babel/preset-env": "~7.29.5",
|
|
97
97
|
"@jest/core": "~30.3.0",
|
|
98
98
|
"@jest/types": "~30.3.0",
|
|
99
99
|
"@jsdevtools/coverage-istanbul-loader": "^3.0.5",
|
|
@@ -184,6 +184,5 @@
|
|
|
184
184
|
},
|
|
185
185
|
"cli": {
|
|
186
186
|
"webpack": false
|
|
187
|
-
}
|
|
188
|
-
"gitHead": "87254b2caf60b20eb46c33b40ffb4dd05ad3e0f7"
|
|
187
|
+
}
|
|
189
188
|
}
|
|
@@ -8,19 +8,10 @@ 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(),
|
|
11
12
|
}));
|
|
12
13
|
|
|
13
14
|
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
|
-
|
|
24
15
|
const defaultMfeCheckArgs = {
|
|
25
16
|
metadata: '/path/to/metadata.json',
|
|
26
17
|
hostPackageJson: ['/path/to/host/package.json'],
|
|
@@ -48,12 +39,23 @@ describe(`[startup] ${MfeCheck.name}`, () => {
|
|
|
48
39
|
},
|
|
49
40
|
};
|
|
50
41
|
|
|
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
|
+
|
|
51
52
|
beforeEach(() => {
|
|
52
53
|
jest.clearAllMocks();
|
|
53
54
|
|
|
54
55
|
mfeCheckArgs = undefined;
|
|
55
56
|
stdoutWriteSpy = jest.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
56
57
|
processExitCodeSpy = jest.spyOn(process, 'exitCode', 'set').mockImplementation(() => {});
|
|
58
|
+
jest.mocked(utils.readPackageLock).mockReturnValue({ packages: {} });
|
|
57
59
|
|
|
58
60
|
vol.fromJSON({
|
|
59
61
|
'/path/to/metadata.json': JSON.stringify(mockMetadata),
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { getVersionMismatches } from '@servicetitan/startup-utils';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import {
|
|
4
|
+
getLockFileVersion,
|
|
4
5
|
isWebComponent,
|
|
5
6
|
loadSharedDependencies,
|
|
6
7
|
log,
|
|
7
8
|
logErrors,
|
|
8
9
|
readJson,
|
|
10
|
+
readPackageLock,
|
|
9
11
|
toArray,
|
|
10
12
|
} from '../../utils';
|
|
11
13
|
import { Metadata } from '../../webpack/configs/types';
|
|
@@ -82,9 +84,11 @@ export class MfeCheck extends Command<typeof entry> {
|
|
|
82
84
|
hostData.dependencies,
|
|
83
85
|
hostData.cli?.webpack?.['shared-dependencies']
|
|
84
86
|
);
|
|
87
|
+
const lockFile = readPackageLock();
|
|
85
88
|
const exposedDependencies = getExposedDependencies(
|
|
86
89
|
hostSharedDependencies,
|
|
87
|
-
|
|
90
|
+
dependency =>
|
|
91
|
+
getLockFileVersion(lockFile, dependency) ?? hostData.dependencies[dependency]
|
|
88
92
|
);
|
|
89
93
|
const mismatchResult = getVersionMismatches(
|
|
90
94
|
exposedDependencies,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getPackageData
|
|
1
|
+
import { getPackageData } from '../get-package-data';
|
|
2
2
|
import { readJson } from '../read-json';
|
|
3
3
|
|
|
4
4
|
jest.mock('../read-json', () => ({ readJson: jest.fn() }));
|
|
@@ -46,48 +46,4 @@ 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
|
-
});
|
|
93
49
|
});
|
package/src/utils/find-up.ts
CHANGED
|
@@ -20,17 +20,3 @@ export function getPackageData(): PackageData {
|
|
|
20
20
|
sharedDependencies: packageJson.cli?.webpack?.['shared-dependencies'],
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
export function getPackageDependencyVersion(dependency: string, defaultVersion?: string) {
|
|
25
|
-
try {
|
|
26
|
-
const { version } = require(`${dependency}/package.json`);
|
|
27
|
-
|
|
28
|
-
if (version) {
|
|
29
|
-
return version;
|
|
30
|
-
}
|
|
31
|
-
} catch {
|
|
32
|
-
// skip error
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return defaultVersion;
|
|
36
|
-
}
|
package/src/utils/index.ts
CHANGED
|
@@ -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
|
+
});
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { getLockFileEntry } from '../get-lock-file-entry';
|
|
2
|
+
import type { PackageLock } from '../types';
|
|
3
|
+
|
|
4
|
+
describe(`[startup] ${getLockFileEntry.name}`, () => {
|
|
5
|
+
let lockFile: PackageLock;
|
|
6
|
+
let packageName: string;
|
|
7
|
+
let scope: string | undefined;
|
|
8
|
+
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
lockFile = { packages: {} };
|
|
11
|
+
packageName = 'foo';
|
|
12
|
+
scope = undefined;
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
const subject = () => getLockFileEntry(lockFile, packageName, scope);
|
|
16
|
+
|
|
17
|
+
const itReturnsEmptyObject = () => {
|
|
18
|
+
test('returns empty object', () => {
|
|
19
|
+
expect(subject()).toEqual({});
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
describe('when package exists at top level', () => {
|
|
24
|
+
const topLevelEntry = { version: '1.0.0' };
|
|
25
|
+
|
|
26
|
+
beforeEach(() => {
|
|
27
|
+
lockFile.packages['node_modules/foo'] = topLevelEntry;
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test('resolves the entry', () => {
|
|
31
|
+
expect(subject()).toEqual(topLevelEntry);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
describe('when package exists both at top level and under a scope', () => {
|
|
36
|
+
const topLevelEntry = { version: '1.0.0' };
|
|
37
|
+
const scopedEntry = { version: '2.0.0' };
|
|
38
|
+
|
|
39
|
+
beforeEach(() => {
|
|
40
|
+
lockFile.packages['node_modules/foo'] = topLevelEntry;
|
|
41
|
+
lockFile.packages['node_modules/parent/node_modules/foo'] = scopedEntry;
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
describe('when scope is provided', () => {
|
|
45
|
+
beforeEach(() => {
|
|
46
|
+
scope = 'parent';
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test('resolves scoped entry', () => {
|
|
50
|
+
expect(subject()).toEqual(scopedEntry);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('resolves top-level entry', () => {
|
|
55
|
+
expect(subject()).toEqual(topLevelEntry);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
describe('when package has dependencies and peerDependencies', () => {
|
|
60
|
+
const entryWithDeps = {
|
|
61
|
+
version: '1.0.0',
|
|
62
|
+
dependencies: { bar: '^1.0.0' },
|
|
63
|
+
peerDependencies: { baz: '>=2.0.0' },
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
beforeEach(() => {
|
|
67
|
+
lockFile.packages['node_modules/foo'] = entryWithDeps;
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test('returns the full entry', () => {
|
|
71
|
+
expect(subject()).toEqual(entryWithDeps);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
describe('when package is a linked workspace package', () => {
|
|
76
|
+
const linkedResolvedEntry = { version: '3.0.0' };
|
|
77
|
+
|
|
78
|
+
beforeEach(() => {
|
|
79
|
+
lockFile.packages['node_modules/foo'] = { link: true, resolved: 'packages/foo' };
|
|
80
|
+
lockFile.packages['packages/foo'] = linkedResolvedEntry;
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test('follows link to resolved path', () => {
|
|
84
|
+
expect(subject()).toEqual(linkedResolvedEntry);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
describe('when resolved entry does not exist', () => {
|
|
88
|
+
beforeEach(() => {
|
|
89
|
+
delete lockFile.packages['packages/foo'];
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
itReturnsEmptyObject();
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
itReturnsEmptyObject();
|
|
97
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { getLockFileVersion } from '../get-lock-file-version';
|
|
2
|
+
import type { PackageLock } from '../types';
|
|
3
|
+
|
|
4
|
+
describe(`[startup] ${getLockFileVersion.name}`, () => {
|
|
5
|
+
const packageName = '@servicetitan/web-components';
|
|
6
|
+
const version = '1.2.3';
|
|
7
|
+
let lockFile: PackageLock;
|
|
8
|
+
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
lockFile = {
|
|
11
|
+
packages: {
|
|
12
|
+
[`node_modules/${packageName}`]: { version },
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const subject = () => getLockFileVersion(lockFile, packageName);
|
|
18
|
+
|
|
19
|
+
test('returns version for a found package', () => {
|
|
20
|
+
expect(subject()).toBe(version);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
describe('when entry has no version', () => {
|
|
24
|
+
beforeEach(() => {
|
|
25
|
+
delete lockFile.packages[`node_modules/${packageName}`].version;
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('returns undefined', () => {
|
|
29
|
+
expect(subject()).toBeUndefined();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { fs, vol } from 'memfs';
|
|
2
|
+
import { readPackageLock } from '../read-package-lock';
|
|
3
|
+
|
|
4
|
+
jest.mock('fs', () => fs);
|
|
5
|
+
|
|
6
|
+
describe(`[startup] ${readPackageLock.name}`, () => {
|
|
7
|
+
const mockLockFile = {
|
|
8
|
+
packages: { 'node_modules/foo': { version: '1.2.3' } },
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
vol.fromJSON({ './package-lock.json': JSON.stringify(mockLockFile) });
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
jest.resetModules();
|
|
17
|
+
vol.reset();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const subject = async () => {
|
|
21
|
+
const { readPackageLock } = await import('../read-package-lock');
|
|
22
|
+
return readPackageLock();
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
test('returns parsed lock file', async () => {
|
|
26
|
+
expect(await subject()).toEqual(mockLockFile);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
describe('when called multiple times', () => {
|
|
30
|
+
test('reads file only once', async () => {
|
|
31
|
+
jest.spyOn(fs, 'readFileSync');
|
|
32
|
+
|
|
33
|
+
await subject();
|
|
34
|
+
await subject();
|
|
35
|
+
|
|
36
|
+
expect(fs.readFileSync).toHaveBeenCalledTimes(1);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe('when package-lock.json does not exist', () => {
|
|
41
|
+
beforeEach(() => fs.rmSync('package-lock.json'));
|
|
42
|
+
|
|
43
|
+
test('throws error', async () => {
|
|
44
|
+
await expect(subject()).rejects.toThrow();
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
});
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PackageLock } from './types';
|
|
2
|
+
|
|
3
|
+
export function getLockFileEntry(lockFile: PackageLock, packageName: string, scope?: string) {
|
|
4
|
+
const { packages } = lockFile;
|
|
5
|
+
const entry =
|
|
6
|
+
(scope ? packages?.[`node_modules/${scope}/node_modules/${packageName}`] : undefined) ??
|
|
7
|
+
packages?.[`node_modules/${packageName}`];
|
|
8
|
+
|
|
9
|
+
if (entry?.link && entry.resolved) {
|
|
10
|
+
return packages?.[entry.resolved] ?? {};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return entry ?? {};
|
|
14
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { readJson } from '../read-json';
|
|
2
|
+
import { findPackageLock } from './find-package-lock';
|
|
3
|
+
import type { PackageLock } from './types';
|
|
4
|
+
|
|
5
|
+
let cachedLockFile: PackageLock | undefined;
|
|
6
|
+
|
|
7
|
+
export function readPackageLock(): PackageLock {
|
|
8
|
+
if (!cachedLockFile) {
|
|
9
|
+
const lockFilePath = findPackageLock();
|
|
10
|
+
cachedLockFile = readJson<PackageLock>(lockFilePath!);
|
|
11
|
+
}
|
|
12
|
+
return cachedLockFile;
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface PackageLockEntry {
|
|
2
|
+
version?: string;
|
|
3
|
+
resolved?: string;
|
|
4
|
+
link?: boolean;
|
|
5
|
+
dependencies?: Record<string, string>;
|
|
6
|
+
peerDependencies?: Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type PackageLockPackages = Record<string, PackageLockEntry>;
|
|
10
|
+
|
|
11
|
+
export interface PackageLock {
|
|
12
|
+
packages: PackageLockPackages;
|
|
13
|
+
}
|