@ms-cloudpack/cli 0.46.2 → 0.47.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.
- package/lib/commands/init/InitSummaryData.d.ts +1 -0
- package/lib/commands/init/InitSummaryData.d.ts.map +1 -1
- package/lib/commands/init/InitSummaryData.js +7 -2
- package/lib/commands/init/InitSummaryData.js.map +1 -1
- package/lib/commands/init/evaluateImportsForOverrides.d.ts +3 -3
- package/lib/commands/init/evaluateImportsForOverrides.d.ts.map +1 -1
- package/lib/commands/init/evaluateImportsForOverrides.js +7 -16
- package/lib/commands/init/evaluateImportsForOverrides.js.map +1 -1
- package/lib/commands/init/evaluatePath.d.ts +26 -0
- package/lib/commands/init/evaluatePath.d.ts.map +1 -0
- package/lib/commands/init/evaluatePath.js +72 -0
- package/lib/commands/init/evaluatePath.js.map +1 -0
- package/lib/commands/init/formatInitSummary.d.ts.map +1 -1
- package/lib/commands/init/formatInitSummary.js +9 -6
- package/lib/commands/init/formatInitSummary.js.map +1 -1
- package/lib/commands/init/init.d.ts +5 -5
- package/lib/commands/init/init.d.ts.map +1 -1
- package/lib/commands/init/init.js +83 -79
- package/lib/commands/init/init.js.map +1 -1
- package/lib/commands/init/types/InitSummary.d.ts +1 -0
- package/lib/commands/init/types/InitSummary.d.ts.map +1 -1
- package/lib/commands/init/types/InitSummary.js.map +1 -1
- package/lib/commands/start/startBundleServer.js +2 -2
- package/lib/commands/start/startBundleServer.js.map +1 -1
- package/package.json +6 -7
- package/lib/commands/init/bundleAndGetImports.d.ts +0 -21
- package/lib/commands/init/bundleAndGetImports.d.ts.map +0 -1
- package/lib/commands/init/bundleAndGetImports.js +0 -56
- package/lib/commands/init/bundleAndGetImports.js.map +0 -1
|
@@ -10,6 +10,7 @@ import type { InitPackageResult } from './types/InitPackageResult.js';
|
|
|
10
10
|
export declare class InitSummaryData {
|
|
11
11
|
private _packageResults;
|
|
12
12
|
private _generatedUpdates;
|
|
13
|
+
private _startTime;
|
|
13
14
|
constructor();
|
|
14
15
|
recordResult(packageResult: InitPackageResult): void;
|
|
15
16
|
recordGeneratedChanges(allChanges: GeneratedPackageChanges[]): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InitSummaryData.d.ts","sourceRoot":"","sources":["../../../src/commands/init/InitSummaryData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAGlF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,iBAAiB,CAA0C;;
|
|
1
|
+
{"version":3,"file":"InitSummaryData.d.ts","sourceRoot":"","sources":["../../../src/commands/init/InitSummaryData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAGlF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,iBAAiB,CAA0C;IACnE,OAAO,CAAC,UAAU,CAAS;;IAQpB,YAAY,CAAC,aAAa,EAAE,iBAAiB;IAI7C,sBAAsB,CAAC,UAAU,EAAE,uBAAuB,EAAE;IAS5D,SAAS,IAAI,WAAW;CA0ChC"}
|
|
@@ -8,6 +8,7 @@ export class InitSummaryData {
|
|
|
8
8
|
constructor() {
|
|
9
9
|
this._packageResults = {};
|
|
10
10
|
this._generatedUpdates = {};
|
|
11
|
+
this._startTime = Date.now();
|
|
11
12
|
}
|
|
12
13
|
recordResult(packageResult) {
|
|
13
14
|
this._packageResults[packageResult.path] = packageResult;
|
|
@@ -20,6 +21,7 @@ export class InitSummaryData {
|
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
summarize() {
|
|
24
|
+
const duration = Date.now() - this._startTime;
|
|
23
25
|
let totalSuccess = 0;
|
|
24
26
|
let totalErrors = 0;
|
|
25
27
|
let totalWarnings = 0;
|
|
@@ -39,10 +41,13 @@ export class InitSummaryData {
|
|
|
39
41
|
totalWarnings += packageResult.warnings.length;
|
|
40
42
|
}
|
|
41
43
|
}
|
|
42
|
-
|
|
44
|
+
const sortedUpdates = Object.values(this._generatedUpdates).sort((a, b) => a.path.localeCompare(b.path));
|
|
45
|
+
for (const updates of sortedUpdates) {
|
|
43
46
|
totalChanges += updates.changes.length;
|
|
47
|
+
updates.changes = updates.changes.sort((a, b) => a.change.localeCompare(b.change));
|
|
44
48
|
}
|
|
45
49
|
return {
|
|
50
|
+
duration,
|
|
46
51
|
totalPackages: Object.keys(this._packageResults).length,
|
|
47
52
|
totalSuccess,
|
|
48
53
|
totalErrors,
|
|
@@ -50,7 +55,7 @@ export class InitSummaryData {
|
|
|
50
55
|
totalChanges,
|
|
51
56
|
packagesWithErrors,
|
|
52
57
|
packagesWithWarnings,
|
|
53
|
-
generatedFileUpdates:
|
|
58
|
+
generatedFileUpdates: sortedUpdates,
|
|
54
59
|
};
|
|
55
60
|
}
|
|
56
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InitSummaryData.js","sourceRoot":"","sources":["../../../src/commands/init/InitSummaryData.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,OAAO,eAAe;
|
|
1
|
+
{"version":3,"file":"InitSummaryData.js","sourceRoot":"","sources":["../../../src/commands/init/InitSummaryData.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAK1B;QACE,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC;IAEM,YAAY,CAAC,aAAgC;QAClD,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;IAC3D,CAAC;IAEM,sBAAsB,CAAC,UAAqC;QACjE,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE;YAC/B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;YAChD,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAElG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;SAC5C;IACH,CAAC;IAEM,SAAS;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC9C,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,kBAAkB,GAA8B,EAAE,CAAC;QACzD,MAAM,oBAAoB,GAAgC,EAAE,CAAC;QAE7D,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;YAC/D,IAAI,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE;gBAChC,kBAAkB,CAAC,IAAI,CAAC,aAAwC,CAAC,CAAC;gBAClE,WAAW,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;aAC5C;iBAAM;gBACL,YAAY,EAAE,CAAC;aAChB;YAED,IAAI,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE;gBAClC,oBAAoB,CAAC,IAAI,CAAC,aAA0C,CAAC,CAAC;gBACtE,aAAa,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;aAChD;SACF;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzG,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE;YACnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YACvC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;SACpF;QAED,OAAO;YACL,QAAQ;YACR,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM;YACvD,YAAY;YACZ,WAAW;YACX,aAAa;YACb,YAAY;YACZ,kBAAkB;YAClB,oBAAoB;YACpB,oBAAoB,EAAE,aAAa;SACpC,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type { InitSummary } from './types/InitSummary.js';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport type { InitPackageResultWarnings } from './types/InitPackageResultWarnings.js';\nimport type { InitPackageResultErrors } from './types/InitPackageResultErrors.js';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\n\n/**\n * Creates a summary tracking helper for the `init` verb to use to record statistics about results and needed\n * changes. The `record*` methods of the returned object will be used within init to add the stats, and the\n * `get` method will return the final tally. The resulting `InitSummary` object can be used in the `formatInitSummary`\n * helper to convert it to a string for the user.\n */\nexport class InitSummaryData {\n private _packageResults: Record<string, InitPackageResult>;\n private _generatedUpdates: Record<string, GeneratedPackageChanges>;\n private _startTime: number;\n\n constructor() {\n this._packageResults = {};\n this._generatedUpdates = {};\n this._startTime = Date.now();\n }\n\n public recordResult(packageResult: InitPackageResult) {\n this._packageResults[packageResult.path] = packageResult;\n }\n\n public recordGeneratedChanges(allChanges: GeneratedPackageChanges[]) {\n for (const update of allChanges) {\n const { name, version, path, changes } = update;\n const updatesForPackage = (this._generatedUpdates[path] ??= { name, version, path, changes: [] });\n\n updatesForPackage.changes.push(...changes);\n }\n }\n\n public summarize(): InitSummary {\n const duration = Date.now() - this._startTime;\n let totalSuccess = 0;\n let totalErrors = 0;\n let totalWarnings = 0;\n let totalChanges = 0;\n const packagesWithErrors: InitPackageResultErrors[] = [];\n const packagesWithWarnings: InitPackageResultWarnings[] = [];\n\n for (const packageResult of Object.values(this._packageResults)) {\n if (packageResult.errors?.length) {\n packagesWithErrors.push(packageResult as InitPackageResultErrors);\n totalErrors += packageResult.errors.length;\n } else {\n totalSuccess++;\n }\n\n if (packageResult.warnings?.length) {\n packagesWithWarnings.push(packageResult as InitPackageResultWarnings);\n totalWarnings += packageResult.warnings.length;\n }\n }\n\n const sortedUpdates = Object.values(this._generatedUpdates).sort((a, b) => a.path.localeCompare(b.path));\n\n for (const updates of sortedUpdates) {\n totalChanges += updates.changes.length;\n updates.changes = updates.changes.sort((a, b) => a.change.localeCompare(b.change));\n }\n\n return {\n duration,\n totalPackages: Object.keys(this._packageResults).length,\n totalSuccess,\n totalErrors,\n totalWarnings,\n totalChanges,\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates: sortedUpdates,\n };\n }\n}\n"]}
|
|
@@ -8,15 +8,15 @@ import type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js
|
|
|
8
8
|
*/
|
|
9
9
|
export declare function evaluateImportsForOverrides(options: {
|
|
10
10
|
packages: PackageDefinitionsCache;
|
|
11
|
-
imports:
|
|
11
|
+
imports: Record<string, string[]>;
|
|
12
12
|
definition: PackageJson;
|
|
13
13
|
packagePath: string;
|
|
14
14
|
generatedConfig: GeneratedConfig;
|
|
15
|
-
packagePathsToEvaluate: Set<string>;
|
|
16
|
-
evaluatedPackages: Set<string>;
|
|
17
15
|
resolveMap: ResolveMap;
|
|
18
16
|
}): Promise<{
|
|
19
17
|
changes: GeneratedPackageChanges[];
|
|
20
18
|
errors: string[];
|
|
19
|
+
pathsToEvaluate: Set<string>;
|
|
20
|
+
pathsToRefresh: Set<string>;
|
|
21
21
|
}>;
|
|
22
22
|
//# sourceMappingURL=evaluateImportsForOverrides.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluateImportsForOverrides.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"evaluateImportsForOverrides.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,sBAAsB,CAAC;AAE7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAQlE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAElF;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC;CACxB,GAAG,OAAO,CAAC;IACV,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B,CAAC,CAmHD"}
|
|
@@ -6,12 +6,14 @@ import { bulletedList, cyan } from '@ms-cloudpack/task-reporter';
|
|
|
6
6
|
* If so, updates package overrides to the given packageOverrides array.
|
|
7
7
|
*/
|
|
8
8
|
export async function evaluateImportsForOverrides(options) {
|
|
9
|
-
const { packages, imports, definition, packagePath, generatedConfig,
|
|
9
|
+
const { packages, imports, definition, packagePath, generatedConfig, resolveMap, } = options;
|
|
10
10
|
const displayName = `${definition.name}@${definition.version}`;
|
|
11
11
|
const changes = [];
|
|
12
12
|
const errors = [];
|
|
13
|
+
const pathsToEvaluate = new Set();
|
|
14
|
+
const pathsToRefresh = new Set();
|
|
13
15
|
// Iterate through imports and find their path from the resolve map.
|
|
14
|
-
for (const [dependencyName, dependencyImportPaths] of
|
|
16
|
+
for (const [dependencyName, dependencyImportPaths] of Object.entries(imports)) {
|
|
15
17
|
const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });
|
|
16
18
|
const dependencyPath = resolveEntry?.path;
|
|
17
19
|
const dependencyDefinition = dependencyPath ? await packages.get(dependencyPath) : undefined;
|
|
@@ -23,7 +25,7 @@ export async function evaluateImportsForOverrides(options) {
|
|
|
23
25
|
continue;
|
|
24
26
|
}
|
|
25
27
|
// Make sure to add the package to the list of packages to evaluate.
|
|
26
|
-
|
|
28
|
+
pathsToEvaluate.add(dependencyPath);
|
|
27
29
|
// Get the flattened bundle-able exports map for this dependency and iterate through our import paths to ensure nothing is missing.
|
|
28
30
|
const exports = await getExportsMap({ packagePath: dependencyPath }, { packages });
|
|
29
31
|
const flattenedExports = flattenExportsMap(exports);
|
|
@@ -80,22 +82,11 @@ export async function evaluateImportsForOverrides(options) {
|
|
|
80
82
|
},
|
|
81
83
|
],
|
|
82
84
|
});
|
|
83
|
-
generatedPackageSettings.exports = alphabetizeObject(generatedPackageSettings.exports);
|
|
84
85
|
// Since we've found a missing exports, we need to re-enqueue the dependency for evaluation.
|
|
85
|
-
|
|
86
|
-
evaluatedPackages.delete(dependencyPath);
|
|
86
|
+
pathsToRefresh.add(dependencyPath);
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
-
return { changes, errors };
|
|
91
|
-
}
|
|
92
|
-
/** Quick helper to alphabetize the exports. */
|
|
93
|
-
function alphabetizeObject(obj) {
|
|
94
|
-
const sortedKeys = Object.keys(obj).sort();
|
|
95
|
-
const alphabetizedObj = {};
|
|
96
|
-
for (const key of sortedKeys) {
|
|
97
|
-
alphabetizedObj[key] = obj[key];
|
|
98
|
-
}
|
|
99
|
-
return alphabetizedObj;
|
|
90
|
+
return { changes, errors, pathsToEvaluate, pathsToRefresh };
|
|
100
91
|
}
|
|
101
92
|
//# sourceMappingURL=evaluateImportsForOverrides.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluateImportsForOverrides.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAGjE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,
|
|
1
|
+
{"version":3,"file":"evaluateImportsForOverrides.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache, PackageJson } from '@ms-cloudpack/bundler-types';\nimport type { GeneratedConfig, PackageSettings } from '@ms-cloudpack/config';\nimport { getPackageSettings } from '@ms-cloudpack/config';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport {\n addExportsMapEntry,\n findResolveMapEntry,\n flattenExportsMap,\n getExportsMap,\n} from '@ms-cloudpack/package-utilities';\nimport { bulletedList, cyan } from '@ms-cloudpack/task-reporter';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\n\n/**\n * Evaluate the imports depended on by a package to determine if missing exports map paths need to be added.\n * If so, updates package overrides to the given packageOverrides array.\n */\nexport async function evaluateImportsForOverrides(options: {\n packages: PackageDefinitionsCache;\n imports: Record<string, string[]>;\n definition: PackageJson;\n packagePath: string;\n generatedConfig: GeneratedConfig;\n resolveMap: ResolveMap;\n}): Promise<{\n changes: GeneratedPackageChanges[];\n errors: string[];\n pathsToEvaluate: Set<string>;\n pathsToRefresh: Set<string>;\n}> {\n const {\n packages,\n imports,\n definition,\n packagePath,\n generatedConfig,\n\n resolveMap,\n } = options;\n const displayName = `${definition.name}@${definition.version}`;\n const changes: GeneratedPackageChanges[] = [];\n const errors: string[] = [];\n const pathsToEvaluate = new Set<string>();\n const pathsToRefresh = new Set<string>();\n\n // Iterate through imports and find their path from the resolve map.\n for (const [dependencyName, dependencyImportPaths] of Object.entries(imports)) {\n const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });\n const dependencyPath = resolveEntry?.path;\n const dependencyDefinition = dependencyPath ? await packages.get(dependencyPath) : undefined;\n\n if (!dependencyPath || !dependencyDefinition) {\n const errorMessage =\n `Package \"${displayName}\" imports from the package \"${dependencyName}\" but it couldn't be found. ` +\n `Ensure that \"${dependencyName}\" is listed in dependencies of \"${displayName}\".`;\n console.error(errorMessage);\n errors.push(errorMessage);\n\n continue;\n }\n\n // Make sure to add the package to the list of packages to evaluate.\n pathsToEvaluate.add(dependencyPath);\n\n // Get the flattened bundle-able exports map for this dependency and iterate through our import paths to ensure nothing is missing.\n const exports = await getExportsMap({ packagePath: dependencyPath }, { packages });\n const flattenedExports = flattenExportsMap(exports);\n const packageSettings = (generatedConfig.packageSettings ??= []);\n const { name, version } = dependencyDefinition;\n let generatedPackageSettings: PackageSettings | undefined;\n\n if (!name || !version) {\n throw new Error(`Package \"${displayName}\" depends on \"${dependencyName}\" but it is missing a name or version.`);\n }\n\n for (const dependencyImportPath of dependencyImportPaths) {\n if (flattenedExports[dependencyImportPath]) {\n continue;\n }\n\n // We are missing an import path. We need to add this entry to the exports map in package settings.\n generatedPackageSettings ??= getPackageSettings({\n config: { generated: { packageSettings } },\n name,\n version,\n firstMatch: true,\n }).generatedPackageSettings;\n\n if (!generatedPackageSettings) {\n generatedPackageSettings = {\n match: {\n name,\n version: `^${version}`,\n },\n exports: {},\n };\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.exports ??= {};\n\n const addedEntry = await addExportsMapEntry(\n {\n exports: generatedPackageSettings.exports,\n packagePath: dependencyPath,\n importPath: dependencyImportPath,\n },\n {\n packages,\n },\n );\n\n if (!addedEntry) {\n const errorMessage = `Imported \"${cyan(\n dependencyImportPath.replace('.', dependencyName),\n )}\" but a corresponding file couldn't be found. Either correct the import or adjust the \"${cyan(\n dependencyName,\n )}\" package version to one that supports this import path.\\n${bulletedList(\n [`${cyan(displayName)}: ${packagePath}`, `${cyan(dependencyName)}: ${dependencyPath}`],\n 2,\n )}`;\n console.error(errorMessage);\n errors.push(errorMessage);\n } else {\n changes.push({\n name: dependencyName,\n version: dependencyDefinition.version || '',\n path: dependencyPath,\n changes: [\n {\n type: 'added-export',\n change: dependencyImportPath,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n\n // Since we've found a missing exports, we need to re-enqueue the dependency for evaluation.\n pathsToRefresh.add(dependencyPath);\n }\n }\n }\n\n return { changes, errors, pathsToEvaluate, pathsToRefresh };\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { EnsurePackageBundledContext } from '@ms-cloudpack/api-server/apis';
|
|
2
|
+
import type { GeneratedConfig } from '@ms-cloudpack/config';
|
|
3
|
+
import type { ResolveMap } from '@ms-cloudpack/package-utilities';
|
|
4
|
+
import type { TelemetryClient } from '@ms-cloudpack/telemetry';
|
|
5
|
+
import type { InitSummaryData } from './InitSummaryData.js';
|
|
6
|
+
import type { InitOptions } from './types/InitOptions.js';
|
|
7
|
+
/**
|
|
8
|
+
* A helper which given the packagePath, tries to evaluate the path by bundling things, finding imports,
|
|
9
|
+
* and cross checking the imports with explicit exports. If any exports are missing, they are documented
|
|
10
|
+
* in the generated config.
|
|
11
|
+
*/
|
|
12
|
+
export declare function evaluatePath(options: {
|
|
13
|
+
packagePath: string;
|
|
14
|
+
generatedConfig: GeneratedConfig;
|
|
15
|
+
resolveMap: ResolveMap;
|
|
16
|
+
telemetryClient: TelemetryClient;
|
|
17
|
+
initOptions: InitOptions;
|
|
18
|
+
summaryData: InitSummaryData;
|
|
19
|
+
shouldForce: boolean;
|
|
20
|
+
ctx: EnsurePackageBundledContext;
|
|
21
|
+
}): Promise<{
|
|
22
|
+
pathsToEvaluate?: Set<string>;
|
|
23
|
+
pathsToRefresh?: Set<string>;
|
|
24
|
+
shouldExit?: boolean;
|
|
25
|
+
}>;
|
|
26
|
+
//# sourceMappingURL=evaluatePath.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluatePath.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAK1D;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,2BAA2B,CAAC;CAClC,GAAG,OAAO,CAAC;IAAE,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAiFjG"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { ensurePackageBundled } from '@ms-cloudpack/api-server/apis';
|
|
2
|
+
import { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';
|
|
3
|
+
/**
|
|
4
|
+
* A helper which given the packagePath, tries to evaluate the path by bundling things, finding imports,
|
|
5
|
+
* and cross checking the imports with explicit exports. If any exports are missing, they are documented
|
|
6
|
+
* in the generated config.
|
|
7
|
+
*/
|
|
8
|
+
export async function evaluatePath(options) {
|
|
9
|
+
const { packagePath, generatedConfig, initOptions, telemetryClient, resolveMap, summaryData, shouldForce, ctx } = options;
|
|
10
|
+
const { packages } = ctx;
|
|
11
|
+
const definition = await packages.get(packagePath, { refresh: true });
|
|
12
|
+
const { name, version } = definition || {};
|
|
13
|
+
if (!definition || !name || !version) {
|
|
14
|
+
// Unsure why a package would be missing a definition/name/version - we've built the resolve map already.
|
|
15
|
+
throw new Error(`${packagePath} evaluation failed because the package.json with a name/version was not found or not readable.`);
|
|
16
|
+
}
|
|
17
|
+
// Bundle the package and find the imports it depends on.
|
|
18
|
+
const { result } = await ensurePackageBundled({
|
|
19
|
+
input: {
|
|
20
|
+
name,
|
|
21
|
+
version,
|
|
22
|
+
shouldFindImports: true,
|
|
23
|
+
shouldForce,
|
|
24
|
+
},
|
|
25
|
+
ctx,
|
|
26
|
+
});
|
|
27
|
+
const { errors, warnings, imports } = result;
|
|
28
|
+
// Record the results for the summary.
|
|
29
|
+
const resultIdentifier = {
|
|
30
|
+
name: definition.name || '',
|
|
31
|
+
version: definition.version || '',
|
|
32
|
+
path: packagePath,
|
|
33
|
+
};
|
|
34
|
+
summaryData.recordResult({
|
|
35
|
+
...resultIdentifier,
|
|
36
|
+
errors,
|
|
37
|
+
warnings,
|
|
38
|
+
});
|
|
39
|
+
// If no errors came from the bundle attempt, move on to evaluating the imports.
|
|
40
|
+
if (!errors?.length && imports) {
|
|
41
|
+
// Given the package imports, find the missing exports maps and update packageOverrides.
|
|
42
|
+
const { changes, errors: evalErrors, pathsToEvaluate, pathsToRefresh, } = await evaluateImportsForOverrides({
|
|
43
|
+
definition,
|
|
44
|
+
packagePath,
|
|
45
|
+
packages,
|
|
46
|
+
imports,
|
|
47
|
+
generatedConfig,
|
|
48
|
+
resolveMap,
|
|
49
|
+
});
|
|
50
|
+
if (evalErrors.length) {
|
|
51
|
+
summaryData.recordResult({
|
|
52
|
+
...resultIdentifier,
|
|
53
|
+
errors: evalErrors.map((text) => ({ text })),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
summaryData.recordGeneratedChanges(changes);
|
|
58
|
+
}
|
|
59
|
+
if (initOptions.check && (changes.length || evalErrors.length)) {
|
|
60
|
+
telemetryClient.rootSpan.addEvent('INIT_CHECK_FAILED', {
|
|
61
|
+
reason: changes.length ? 'Config needs to be updated.' : evalErrors,
|
|
62
|
+
});
|
|
63
|
+
return { shouldExit: true };
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
pathsToEvaluate,
|
|
67
|
+
pathsToRefresh,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return {};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=evaluatePath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluatePath.js","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OASlC;IACC,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,GAC7G,OAAO,CAAC;IACV,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IACzB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,UAAU,IAAI,EAAE,CAAC;IAE3C,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;QACpC,yGAAyG;QACzG,MAAM,IAAI,KAAK,CACb,GAAG,WAAW,gGAAgG,CAC/G,CAAC;KACH;IAED,yDAAyD;IACzD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC;QAC5C,KAAK,EAAE;YACL,IAAI;YACJ,OAAO;YACP,iBAAiB,EAAE,IAAI;YACvB,WAAW;SACZ;QACD,GAAG;KACJ,CAAC,CAAC;IAEH,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAE7C,sCAAsC;IACtC,MAAM,gBAAgB,GAAG;QACvB,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE;QAC3B,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,EAAE;QACjC,IAAI,EAAE,WAAW;KAClB,CAAC;IAEF,WAAW,CAAC,YAAY,CAAC;QACvB,GAAG,gBAAgB;QACnB,MAAM;QACN,QAAQ;KACT,CAAC,CAAC;IAEH,gFAAgF;IAChF,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,OAAO,EAAE;QAC9B,wFAAwF;QACxF,MAAM,EACJ,OAAO,EACP,MAAM,EAAE,UAAU,EAClB,eAAe,EACf,cAAc,GACf,GAAG,MAAM,2BAA2B,CAAC;YACpC,UAAU;YACV,WAAW;YACX,QAAQ;YACR,OAAO;YACP,eAAe;YACf,UAAU;SACX,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,MAAM,EAAE;YACrB,WAAW,CAAC,YAAY,CAAC;gBACvB,GAAG,gBAAgB;gBACnB,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aAC7C,CAAC,CAAC;SACJ;aAAM;YACL,WAAW,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;SAC7C;QAED,IAAI,WAAW,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE;YAC9D,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,EAAE;gBACrD,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,UAAU;aACpE,CAAC,CAAC;YAEH,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;SAC7B;QAED,OAAO;YACL,eAAe;YACf,cAAc;SACf,CAAC;KACH;IAED,OAAO,EAAE,CAAC;AACZ,CAAC","sourcesContent":["import type { EnsurePackageBundledContext } from '@ms-cloudpack/api-server/apis';\nimport type { GeneratedConfig } from '@ms-cloudpack/config';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { TelemetryClient } from '@ms-cloudpack/telemetry';\nimport type { InitSummaryData } from './InitSummaryData.js';\nimport type { InitOptions } from './types/InitOptions.js';\n\nimport { ensurePackageBundled } from '@ms-cloudpack/api-server/apis';\nimport { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';\n\n/**\n * A helper which given the packagePath, tries to evaluate the path by bundling things, finding imports,\n * and cross checking the imports with explicit exports. If any exports are missing, they are documented\n * in the generated config.\n */\nexport async function evaluatePath(options: {\n packagePath: string;\n generatedConfig: GeneratedConfig;\n resolveMap: ResolveMap;\n telemetryClient: TelemetryClient;\n initOptions: InitOptions;\n summaryData: InitSummaryData;\n shouldForce: boolean;\n ctx: EnsurePackageBundledContext;\n}): Promise<{ pathsToEvaluate?: Set<string>; pathsToRefresh?: Set<string>; shouldExit?: boolean }> {\n const { packagePath, generatedConfig, initOptions, telemetryClient, resolveMap, summaryData, shouldForce, ctx } =\n options;\n const { packages } = ctx;\n const definition = await packages.get(packagePath, { refresh: true });\n const { name, version } = definition || {};\n\n if (!definition || !name || !version) {\n // Unsure why a package would be missing a definition/name/version - we've built the resolve map already.\n throw new Error(\n `${packagePath} evaluation failed because the package.json with a name/version was not found or not readable.`,\n );\n }\n\n // Bundle the package and find the imports it depends on.\n const { result } = await ensurePackageBundled({\n input: {\n name,\n version,\n shouldFindImports: true,\n shouldForce,\n },\n ctx,\n });\n\n const { errors, warnings, imports } = result;\n\n // Record the results for the summary.\n const resultIdentifier = {\n name: definition.name || '',\n version: definition.version || '',\n path: packagePath,\n };\n\n summaryData.recordResult({\n ...resultIdentifier,\n errors,\n warnings,\n });\n\n // If no errors came from the bundle attempt, move on to evaluating the imports.\n if (!errors?.length && imports) {\n // Given the package imports, find the missing exports maps and update packageOverrides.\n const {\n changes,\n errors: evalErrors,\n pathsToEvaluate,\n pathsToRefresh,\n } = await evaluateImportsForOverrides({\n definition,\n packagePath,\n packages,\n imports,\n generatedConfig,\n resolveMap,\n });\n\n if (evalErrors.length) {\n summaryData.recordResult({\n ...resultIdentifier,\n errors: evalErrors.map((text) => ({ text })),\n });\n } else {\n summaryData.recordGeneratedChanges(changes);\n }\n\n if (initOptions.check && (changes.length || evalErrors.length)) {\n telemetryClient.rootSpan.addEvent('INIT_CHECK_FAILED', {\n reason: changes.length ? 'Config needs to be updated.' : evalErrors,\n });\n\n return { shouldExit: true };\n }\n\n return {\n pathsToEvaluate,\n pathsToRefresh,\n };\n }\n\n return {};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatInitSummary.d.ts","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"formatInitSummary.d.ts","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,WAAW,UA4F5E"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { slash } from '@ms-cloudpack/path-string-parsing';
|
|
2
|
-
import { bold, bulletedList, cyan, green, lightCyan, plural, red, yellow } from '@ms-cloudpack/task-reporter';
|
|
2
|
+
import { bold, bulletedList, cyan, green, lightCyan, plural, red, yellow, formatTime, } from '@ms-cloudpack/task-reporter';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
/**
|
|
5
5
|
* Given an init summary and init options, returns a formatted string message to display to the user via console.
|
|
@@ -14,7 +14,7 @@ export function formatInitSummary(summary, options) {
|
|
|
14
14
|
}
|
|
15
15
|
// Report work done to the generated file.
|
|
16
16
|
if (!packagesWithErrors.length && generatedFileUpdates.length) {
|
|
17
|
-
summaryString.push(
|
|
17
|
+
summaryString.push(`Updates ${check ? 'needed for' : 'made to'} ${cyan(`cloudpack.generated.json`)}:\n`);
|
|
18
18
|
for (const packageUpdates of generatedFileUpdates) {
|
|
19
19
|
const exportsUpdates = packageUpdates.changes.filter((u) => u.type === 'added-export');
|
|
20
20
|
if (exportsUpdates.length) {
|
|
@@ -40,11 +40,14 @@ export function formatInitSummary(summary, options) {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
const generatedUpdateCount = (check && !!generatedFileUpdates.length) || 0;
|
|
43
|
-
const blockingIssueCount = packagesWithErrors.length ||
|
|
43
|
+
const blockingIssueCount = packagesWithErrors.length || 0;
|
|
44
|
+
const requiresChanges = check && totalChanges;
|
|
44
45
|
// Add summary.
|
|
45
|
-
summaryString.push(`${cyan(plural(totalPackages, 'package'))} evaluated, ${blockingIssueCount
|
|
46
|
-
?
|
|
47
|
-
:
|
|
46
|
+
summaryString.push(`${cyan(plural(totalPackages, 'package'))} evaluated in ${formatTime(summary.duration)}${requiresChanges ? `, ${red(plural(totalChanges, 'change'))} required` : ''}${blockingIssueCount
|
|
47
|
+
? `, ${blockingIssueCount} with ${red('blocking issues')}`
|
|
48
|
+
: requiresChanges
|
|
49
|
+
? ''
|
|
50
|
+
: `, ${green('no blocking issues found')}`}. (Total: ${plural(totalErrors, 'error')}, ${plural(totalWarnings, 'warning')})`, '');
|
|
48
51
|
if (generatedUpdateCount) {
|
|
49
52
|
summaryString.push(`Run "${yellow('cloudpack init')}" in your application folder to apply changes to the ${cyan('cloudpack.generated.json')} file.`);
|
|
50
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatInitSummary.js","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"formatInitSummary.js","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"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","sourcesContent":["import { slash } from '@ms-cloudpack/path-string-parsing';\nimport {\n bold,\n bulletedList,\n cyan,\n green,\n lightCyan,\n plural,\n red,\n yellow,\n formatTime,\n} from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitPackageIdentifier } from './types/InitPackageIdentifier.js';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\nimport type { InitSummary } from './types/InitSummary.js';\n\n/**\n * Given an init summary and init options, returns a formatted string message to display to the user via console.\n */\nexport function formatInitSummary(summary: InitSummary, options?: InitOptions) {\n const {\n totalPackages,\n totalErrors,\n totalWarnings,\n totalChanges,\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates,\n } = summary;\n const { check } = options || {};\n const summaryString: (string | undefined)[] = [];\n\n // Report the \"Summary\" title if no errors or warnings are listed (seems redundant otherwise.\n if (!packagesWithErrors.length && !packagesWithWarnings.length) {\n summaryString.push('Summary:\\n');\n }\n\n // Report work done to the generated file.\n if (!packagesWithErrors.length && generatedFileUpdates.length) {\n summaryString.push(`Updates ${check ? 'needed for' : 'made to'} ${cyan(`cloudpack.generated.json`)}:\\n`);\n\n for (const packageUpdates of generatedFileUpdates) {\n const exportsUpdates = packageUpdates.changes.filter((u) => u.type === 'added-export');\n\n if (exportsUpdates.length) {\n summaryString.push(\n `${formatPackageName(packageUpdates)} - ${yellow(\n plural(exportsUpdates.length, 'path'),\n )} missing from exports map`,\n );\n summaryString.push(\n bulletedList(exportsUpdates.map((u) => `${cyan(u.change)}${u.reason ? ` - ${u.reason}` : ``}`)),\n '',\n );\n }\n }\n }\n\n // Report packages with warnings.\n if (packagesWithWarnings.length) {\n summaryString.push(`${plural(packagesWithWarnings.length, 'package')} with ${yellow('warnings')}:\\n`);\n for (const packageWithWarnings of packagesWithWarnings) {\n summaryString.push(\n `${formatPackageName(packageWithWarnings)} - ${yellow(\n plural(packageWithWarnings.warnings.length, 'warning'),\n )}, ${packageWithWarnings.path}:`,\n );\n summaryString.push(formatBundleMessages(packageWithWarnings as InitPackageResult, false), '');\n }\n }\n\n // Report packages with errors.\n if (packagesWithErrors.length) {\n summaryString.push(`${plural(packagesWithErrors.length, 'package')} ${red('failed')}:\\n`);\n for (const packageWithErrors of packagesWithErrors) {\n summaryString.push(\n `${formatPackageName(packageWithErrors)} - ${red(plural(packageWithErrors.errors.length, 'error'))}, ${\n packageWithErrors.path\n }:`,\n );\n summaryString.push(formatBundleMessages(packageWithErrors as InitPackageResult, true), '');\n }\n }\n\n const generatedUpdateCount = (check && !!generatedFileUpdates.length) || 0;\n const blockingIssueCount = packagesWithErrors.length || 0;\n const requiresChanges = check && totalChanges;\n\n // Add summary.\n summaryString.push(\n `${cyan(plural(totalPackages, 'package'))} evaluated in ${formatTime(summary.duration)}${\n requiresChanges ? `, ${red(plural(totalChanges, 'change'))} required` : ''\n }${\n blockingIssueCount\n ? `, ${blockingIssueCount} with ${red('blocking issues')}`\n : requiresChanges\n ? ''\n : `, ${green('no blocking issues found')}`\n }. (Total: ${plural(totalErrors, 'error')}, ${plural(totalWarnings, 'warning')})`,\n '',\n );\n\n if (generatedUpdateCount) {\n summaryString.push(\n `Run \"${yellow('cloudpack init')}\" in your application folder to apply changes to the ${cyan(\n 'cloudpack.generated.json',\n )} file.`,\n );\n }\n\n return summaryString.filter((a) => a !== undefined).join('\\n');\n}\n\n/** Helper to format bundle messages. */\nfunction formatBundleMessages(result: InitPackageResult, formatErrors: boolean) {\n const messages: string[] = [];\n const unformattedMessages = (formatErrors ? result.errors : result.warnings) || [];\n\n for (const message of unformattedMessages) {\n const { location, text } = message;\n\n if (!location?.file) {\n messages.push(text);\n } else {\n const relativeFilePath = cyan(slash(path.relative(result.path, location.file)));\n const characterLocation =\n location.line !== undefined && location.column !== undefined\n ? yellow(`:${location.line}:${location.column}`)\n : ``;\n\n messages.push(`${relativeFilePath}${characterLocation} - ${text}`);\n }\n }\n\n return messages.length ? bulletedList(messages) : undefined;\n}\n\n/** Helper to format package names. */\nfunction formatPackageName(packageIdentifier: InitPackageIdentifier) {\n const { name, version } = packageIdentifier;\n\n return bold(lightCyan(`${name}@${version || `<no-version>`}`));\n}\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { InitSummary } from './types/InitSummary.js';
|
|
3
|
-
import { type CloudpackConfig } from '@ms-cloudpack/config';
|
|
1
|
+
import type { CloudpackConfig } from '@ms-cloudpack/config';
|
|
4
2
|
import type { TaskReporter } from '@ms-cloudpack/task-reporter';
|
|
5
|
-
import type { AutoDispose } from '../../types/AutoDispose.js';
|
|
6
3
|
import type { TelemetryClient } from '@ms-cloudpack/telemetry';
|
|
4
|
+
import type { AutoDispose } from '../../types/AutoDispose.js';
|
|
5
|
+
import type { InitOptions } from './types/InitOptions.js';
|
|
6
|
+
import type { InitSummary } from './types/InitSummary.js';
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Init execution function.
|
|
9
9
|
*/
|
|
10
10
|
export declare function init(parameters: {
|
|
11
11
|
options: InitOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAO1D;;GAEG;AACH,wBAAsB,IAAI,CAAC,UAAU,EAAE;IACrC,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;CAClC,GAAG,OAAO,CAAC,WAAW,CAAC,CAyGvB"}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import { createPartialApiContext } from '@ms-cloudpack/api-server/apis';
|
|
2
2
|
import { writeGeneratedConfig } from '@ms-cloudpack/config';
|
|
3
|
-
import { bundleAndGetImports } from './bundleAndGetImports.js';
|
|
4
3
|
import { InitSummaryData } from './InitSummaryData.js';
|
|
5
|
-
import {
|
|
4
|
+
import { evaluatePath } from './evaluatePath.js';
|
|
6
5
|
/**
|
|
7
|
-
*
|
|
6
|
+
* Init execution function.
|
|
8
7
|
*/
|
|
9
8
|
export async function init(parameters) {
|
|
10
9
|
const { options, appPath, config, reporter, autoDispose, telemetryClient } = parameters;
|
|
10
|
+
let isExitingPrematurely = false;
|
|
11
|
+
// Don't allow --check and --reset together.
|
|
12
|
+
if (options.check && options.reset) {
|
|
13
|
+
throw Error('Cannot use --check and --reset together.');
|
|
14
|
+
}
|
|
15
|
+
// If --reset is specified, reset the generated config.
|
|
16
|
+
if (options.reset) {
|
|
17
|
+
config.generated = {};
|
|
18
|
+
}
|
|
11
19
|
const summaryData = new InitSummaryData();
|
|
12
20
|
const [ctx] = autoDispose(await createPartialApiContext({
|
|
13
21
|
appPath,
|
|
@@ -16,88 +24,84 @@ export async function init(parameters) {
|
|
|
16
24
|
telemetryClient,
|
|
17
25
|
items: ['bus', 'taskRunner', 'watcher', 'packages', 'session'],
|
|
18
26
|
}));
|
|
19
|
-
const {
|
|
27
|
+
const { session } = ctx;
|
|
20
28
|
const { resolveMap } = session;
|
|
21
|
-
|
|
22
|
-
throw Error('Cannot use --check and --reset together.');
|
|
23
|
-
}
|
|
24
|
-
// If --reset is specified we ignore generated config.
|
|
25
|
-
if (options.reset) {
|
|
26
|
-
config.generated = {};
|
|
27
|
-
}
|
|
29
|
+
const refreshPaths = new Set();
|
|
28
30
|
const generatedConfig = config.generated;
|
|
31
|
+
// Ensure generatedConfig.packageSettings is initialized.
|
|
29
32
|
generatedConfig.packageSettings ??= [];
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (!packagePath || evaluatedPackages.has(packagePath)) {
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
evaluatedPackages.add(packagePath);
|
|
41
|
-
const definition = await packages.get(packagePath, { refresh: true });
|
|
42
|
-
if (!definition) {
|
|
43
|
-
// This is very weird and probably won't happen.
|
|
44
|
-
console.error(`Skipping ${packagePath} evaluation because the package.json was not found or not readable.`);
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
// Bundle the package and find the imports it depends on.
|
|
48
|
-
const { errors, warnings, imports } = await bundleAndGetImports({
|
|
49
|
-
packagePath,
|
|
50
|
-
definition,
|
|
51
|
-
packages,
|
|
52
|
-
reporter,
|
|
53
|
-
config,
|
|
54
|
-
ctx,
|
|
55
|
-
});
|
|
56
|
-
// Record the results for the summary.
|
|
57
|
-
const resultIdentifier = {
|
|
58
|
-
name: definition.name || '',
|
|
59
|
-
version: definition.version || '',
|
|
60
|
-
path: packagePath,
|
|
61
|
-
};
|
|
62
|
-
summaryData.recordResult({
|
|
63
|
-
...resultIdentifier,
|
|
64
|
-
errors,
|
|
65
|
-
warnings,
|
|
66
|
-
});
|
|
67
|
-
// If no errors came from the bundle attempt, move on to evaluating the imports.
|
|
68
|
-
if (errors.length === 0) {
|
|
69
|
-
// Given the package imports, find the missing exports maps and update packageOverrides.
|
|
70
|
-
const { changes, errors: evalErrors } = await evaluateImportsForOverrides({
|
|
71
|
-
definition,
|
|
72
|
-
packagePath,
|
|
73
|
-
packages,
|
|
74
|
-
packagePathsToEvaluate,
|
|
75
|
-
evaluatedPackages,
|
|
76
|
-
imports,
|
|
77
|
-
generatedConfig,
|
|
78
|
-
resolveMap,
|
|
79
|
-
});
|
|
80
|
-
if (evalErrors.length) {
|
|
81
|
-
summaryData.recordResult({
|
|
82
|
-
...resultIdentifier,
|
|
83
|
-
errors: evalErrors.map((text) => ({ text })),
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
summaryData.recordGeneratedChanges(changes);
|
|
33
|
+
return new Promise((resolve, reject) => {
|
|
34
|
+
let pending = 0;
|
|
35
|
+
const visitedSet = new Set();
|
|
36
|
+
// Create a function to enqueue more paths.
|
|
37
|
+
function enqueuePaths(newPaths) {
|
|
38
|
+
if (isExitingPrematurely) {
|
|
39
|
+
return;
|
|
88
40
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
41
|
+
// Iterate through the given paths.
|
|
42
|
+
for (const path of newPaths) {
|
|
43
|
+
if (!visitedSet.has(path)) {
|
|
44
|
+
const shouldForce = refreshPaths.delete(path);
|
|
45
|
+
visitedSet.add(path);
|
|
46
|
+
pending++;
|
|
47
|
+
// Evaluate this path, but don't await - when we're done, we'll re-enqueue newly discovered paths.
|
|
48
|
+
evaluatePath({
|
|
49
|
+
packagePath: path,
|
|
50
|
+
generatedConfig,
|
|
51
|
+
telemetryClient,
|
|
52
|
+
resolveMap,
|
|
53
|
+
shouldForce,
|
|
54
|
+
initOptions: options,
|
|
55
|
+
summaryData,
|
|
56
|
+
ctx,
|
|
57
|
+
})
|
|
58
|
+
.then(({ pathsToEvaluate, pathsToRefresh, shouldExit }) => {
|
|
59
|
+
pending--;
|
|
60
|
+
if (shouldExit) {
|
|
61
|
+
isExitingPrematurely = true;
|
|
62
|
+
}
|
|
63
|
+
if (!isExitingPrematurely && pathsToEvaluate?.size) {
|
|
64
|
+
// If there are paths that need to be rebuilt, add them to the refresh set so that on re-enqueuing
|
|
65
|
+
// we pass the `shouldRerun` flag through
|
|
66
|
+
pathsToRefresh?.forEach((refreshPath) => {
|
|
67
|
+
refreshPaths.add(refreshPath);
|
|
68
|
+
visitedSet.delete(refreshPath);
|
|
69
|
+
});
|
|
70
|
+
// Try to enqueue the new paths.
|
|
71
|
+
enqueuePaths(Array.from(pathsToEvaluate));
|
|
72
|
+
}
|
|
73
|
+
// If nothing is pending after this call, we're complete.
|
|
74
|
+
if (!pending) {
|
|
75
|
+
resolve(summaryData.summarize());
|
|
76
|
+
}
|
|
77
|
+
})
|
|
78
|
+
.catch((error) => {
|
|
79
|
+
reject(error);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
94
82
|
}
|
|
95
|
-
|
|
83
|
+
}
|
|
84
|
+
// Start with the app path.
|
|
85
|
+
enqueuePaths([appPath]);
|
|
86
|
+
}).then(async (summary) => {
|
|
87
|
+
const { totalChanges } = summary;
|
|
88
|
+
if (!options.check && totalChanges && generatedConfig.packageSettings?.length) {
|
|
89
|
+
sortExportKeys(generatedConfig);
|
|
90
|
+
await writeGeneratedConfig(generatedConfig, appPath);
|
|
91
|
+
}
|
|
92
|
+
return summary;
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function sortExportKeys({ packageSettings = [] }) {
|
|
96
|
+
for (const settings of packageSettings) {
|
|
97
|
+
if (settings.exports) {
|
|
98
|
+
const unsortedExports = settings.exports;
|
|
99
|
+
const sortedKeys = Object.keys(settings.exports).sort();
|
|
100
|
+
settings.exports = sortedKeys.reduce((p, n) => {
|
|
101
|
+
p[n] = unsortedExports[n];
|
|
102
|
+
return p;
|
|
103
|
+
}, {});
|
|
96
104
|
}
|
|
97
105
|
}
|
|
98
|
-
if (totalChangeCount && generatedConfig.packageSettings?.length) {
|
|
99
|
-
await writeGeneratedConfig(generatedConfig, appPath);
|
|
100
|
-
}
|
|
101
|
-
return summaryData.summarize();
|
|
102
106
|
}
|
|
103
107
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageJsonExportsObject, PackageJsonExportsValue } from '@ms-cloudpack/bundler-types';\nimport type { CloudpackConfig, GeneratedConfig } from '@ms-cloudpack/config';\nimport type { TaskReporter } from '@ms-cloudpack/task-reporter';\nimport type { TelemetryClient } from '@ms-cloudpack/telemetry';\nimport type { AutoDispose } from '../../types/AutoDispose.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitSummary } from './types/InitSummary.js';\n\nimport { createPartialApiContext } from '@ms-cloudpack/api-server/apis';\nimport { writeGeneratedConfig } from '@ms-cloudpack/config';\nimport { InitSummaryData } from './InitSummaryData.js';\nimport { evaluatePath } from './evaluatePath.js';\n\n/**\n * Init execution function.\n */\nexport async function init(parameters: {\n options: InitOptions;\n appPath: string;\n config: CloudpackConfig;\n autoDispose: AutoDispose;\n reporter: TaskReporter;\n telemetryClient: TelemetryClient;\n}): Promise<InitSummary> {\n const { options, appPath, config, reporter, autoDispose, telemetryClient } = parameters;\n let isExitingPrematurely = false;\n\n // Don't allow --check and --reset together.\n if (options.check && options.reset) {\n throw Error('Cannot use --check and --reset together.');\n }\n\n // If --reset is specified, reset the generated config.\n if (options.reset) {\n config.generated = {};\n }\n\n const summaryData = new InitSummaryData();\n const [ctx] = autoDispose(\n await createPartialApiContext({\n appPath,\n config,\n reporter,\n telemetryClient,\n items: ['bus', 'taskRunner', 'watcher', 'packages', 'session'],\n }),\n );\n const { session } = ctx;\n const { resolveMap } = session;\n const refreshPaths = new Set<string>();\n const generatedConfig = config.generated;\n\n // Ensure generatedConfig.packageSettings is initialized.\n generatedConfig.packageSettings ??= [];\n\n return new Promise<InitSummary>((resolve, reject) => {\n let pending = 0;\n const visitedSet = new Set<string>();\n\n // Create a function to enqueue more paths.\n function enqueuePaths(newPaths: string[]) {\n if (isExitingPrematurely) {\n return;\n }\n\n // Iterate through the given paths.\n for (const path of newPaths) {\n if (!visitedSet.has(path)) {\n const shouldForce = refreshPaths.delete(path);\n\n visitedSet.add(path);\n pending++;\n\n // Evaluate this path, but don't await - when we're done, we'll re-enqueue newly discovered paths.\n evaluatePath({\n packagePath: path,\n generatedConfig,\n telemetryClient,\n resolveMap,\n shouldForce,\n initOptions: options,\n summaryData,\n ctx,\n })\n .then(({ pathsToEvaluate, pathsToRefresh, shouldExit }) => {\n pending--;\n\n if (shouldExit) {\n isExitingPrematurely = true;\n }\n\n if (!isExitingPrematurely && pathsToEvaluate?.size) {\n // If there are paths that need to be rebuilt, add them to the refresh set so that on re-enqueuing\n // we pass the `shouldRerun` flag through\n pathsToRefresh?.forEach((refreshPath) => {\n refreshPaths.add(refreshPath);\n visitedSet.delete(refreshPath);\n });\n\n // Try to enqueue the new paths.\n enqueuePaths(Array.from(pathsToEvaluate));\n }\n\n // If nothing is pending after this call, we're complete.\n if (!pending) {\n resolve(summaryData.summarize());\n }\n })\n .catch((error) => {\n reject(error);\n });\n }\n }\n }\n\n // Start with the app path.\n enqueuePaths([appPath]);\n }).then(async (summary: InitSummary) => {\n const { totalChanges } = summary;\n\n if (!options.check && totalChanges && generatedConfig.packageSettings?.length) {\n sortExportKeys(generatedConfig);\n\n await writeGeneratedConfig(generatedConfig, appPath);\n }\n\n return summary;\n });\n}\n\nfunction sortExportKeys({ packageSettings = [] }: GeneratedConfig) {\n for (const settings of packageSettings) {\n if (settings.exports) {\n const unsortedExports = settings.exports as Record<string, PackageJsonExportsValue>;\n const sortedKeys = Object.keys(settings.exports).sort();\n\n settings.exports = sortedKeys.reduce((p, n) => {\n p[n] = unsortedExports[n];\n return p;\n }, {} as PackageJsonExportsObject);\n }\n }\n}\n"]}
|
|
@@ -2,6 +2,7 @@ import type { InitPackageResultErrors } from './InitPackageResultErrors.js';
|
|
|
2
2
|
import type { InitPackageResultWarnings } from './InitPackageResultWarnings.js';
|
|
3
3
|
import type { GeneratedPackageChanges } from './GeneratedPackageChanges.js';
|
|
4
4
|
export interface InitSummary {
|
|
5
|
+
duration: number;
|
|
5
6
|
totalPackages: number;
|
|
6
7
|
totalSuccess: number;
|
|
7
8
|
totalErrors: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InitSummary.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/InitSummary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5E,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IAErB,oBAAoB,EAAE,uBAAuB,EAAE,CAAC;IAChD,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;IAC9C,oBAAoB,EAAE,yBAAyB,EAAE,CAAC;CACnD"}
|
|
1
|
+
{"version":3,"file":"InitSummary.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/InitSummary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5E,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IAErB,oBAAoB,EAAE,uBAAuB,EAAE,CAAC;IAChD,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;IAC9C,oBAAoB,EAAE,yBAAyB,EAAE,CAAC;CACnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InitSummary.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitSummary.ts"],"names":[],"mappings":"","sourcesContent":["import type { InitPackageResultErrors } from './InitPackageResultErrors.js';\nimport type { InitPackageResultWarnings } from './InitPackageResultWarnings.js';\nimport type { GeneratedPackageChanges } from './GeneratedPackageChanges.js';\n\nexport interface InitSummary {\n totalPackages: number;\n totalSuccess: number;\n totalErrors: number;\n totalWarnings: number;\n totalChanges: number;\n\n generatedFileUpdates: GeneratedPackageChanges[];\n packagesWithErrors: InitPackageResultErrors[];\n packagesWithWarnings: InitPackageResultWarnings[];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"InitSummary.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitSummary.ts"],"names":[],"mappings":"","sourcesContent":["import type { InitPackageResultErrors } from './InitPackageResultErrors.js';\nimport type { InitPackageResultWarnings } from './InitPackageResultWarnings.js';\nimport type { GeneratedPackageChanges } from './GeneratedPackageChanges.js';\n\nexport interface InitSummary {\n duration: number;\n totalPackages: number;\n totalSuccess: number;\n totalErrors: number;\n totalWarnings: number;\n totalChanges: number;\n\n generatedFileUpdates: GeneratedPackageChanges[];\n packagesWithErrors: InitPackageResultErrors[];\n packagesWithWarnings: InitPackageResultWarnings[];\n}\n"]}
|
|
@@ -106,9 +106,9 @@ async function handleRequest(options, context) {
|
|
|
106
106
|
res.status(500).type('json').send(bundleRequest);
|
|
107
107
|
}
|
|
108
108
|
else {
|
|
109
|
-
if (features.enqueueDependencies && bundleRequest.result?.
|
|
109
|
+
if (features.enqueueDependencies && bundleRequest.result?.imports) {
|
|
110
110
|
// Enqueue all dependencies to be bundled.
|
|
111
|
-
for (const dependency of bundleRequest.result.
|
|
111
|
+
for (const dependency of Object.keys(bundleRequest.result.imports)) {
|
|
112
112
|
const dependencyBundleRequest = await createBundleRequestForPackage({ packageEntry: resolveMap[dependency] }, { ...context, config, resolveMap });
|
|
113
113
|
// No need to await, we don't want to wait until the bundle is completed.
|
|
114
114
|
void apiServer.addTask(createBundleTask({ bundleRequest: dependencyBundleRequest, resolveMap, options: { force }, reporter }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startBundleServer.js","sourceRoot":"","sources":["../../../src/commands/start/startBundleServer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ApiServer, Session } from '@ms-cloudpack/api-server';\nimport { createExpressApp, type Express, type Request, type Response } from '@ms-cloudpack/create-express-app';\nimport { isExternalPackage, findResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\nimport { isFolder } from '@ms-cloudpack/path-utilities';\nimport path from 'path';\nimport type { BundleServer } from '../../types/BundleServer.js';\nimport { createBundleTask, createBundleRequestForPackage, parseRequestInfo } from '@ms-cloudpack/api-server';\nimport { fileURLToPath } from 'url';\nimport type { TaskReporter } from '@ms-cloudpack/task-reporter';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\n\nconst currentPath = fileURLToPath(import.meta.url);\n\n/**\n * The bundle server handles package requests and returns bundled resources.\n * Resources are bundled on demand and cached locally to avoid re-bundling\n * on each request.\n */\nexport async function startBundleServer(options: {\n apiServer: ApiServer;\n session: Session;\n reporter: TaskReporter;\n packages: PackageDefinitionsCache;\n}): Promise<BundleServer> {\n const { apiServer, session, reporter, packages } = options;\n const { config } = session;\n const { port, close, url } = await createExpressApp({\n portRange: [5500, 5501, 5502, 5503],\n hostname: config.devServer?.domain,\n sslOptions: config.devServer?.https,\n setupCallback: (app: Express) => {\n // Set up the express app routes.\n app.get('*', (req, res) => {\n handleRequest({ req, res }, { session, apiServer, reporter, packages }).catch((err) => {\n console.error((err as Error)?.stack || err);\n res.status(500).send(`Error bundling: ${err}`);\n });\n });\n },\n });\n\n return {\n close,\n port,\n url,\n };\n}\n\nasync function handleRequest(\n options: {\n req: Request;\n res: Response;\n },\n context: {\n session: Session;\n apiServer: ApiServer;\n reporter: TaskReporter;\n packages: PackageDefinitionsCache;\n },\n) {\n const { req, res } = options;\n const { session, apiServer, reporter, packages } = context;\n const { resolveMap, config } = session;\n const { features = {} } = config;\n const requestPath = slash(req.path.substring(1));\n const force = req.query.force !== undefined;\n const { packageName, version, bundled, filePath } = parseRequestInfo(requestPath);\n const packageEntry = findResolveMapEntry({ packageName, version, resolveMap });\n\n if (!packageEntry) {\n // If the package is missing, invalid arguments.\n console.debug(`Response (404): Unrecognized package \"${packageName}\"`);\n res.status(404).send(`Unrecognized package \"${packageName}\".`);\n return;\n }\n\n console.debug(`Request: \"${packageName}@${version}${filePath}\"`);\n\n // If the package is missing, invalid arguments.\n if (!requestPath || !packageName) {\n console.debug(`Response (400): \"${packageName}@${version}${filePath}\"`);\n\n res.status(400).send(`Requests must be in the format \"/{packageName}@{version}/{type}/path/file.ext\".`);\n return;\n }\n\n // If the version is missing, redirect to the primary version.\n if (!version) {\n res.redirect(`/${packageName}@${packageEntry.version}${filePath}`);\n return;\n }\n\n // If we are accessing a non-bundled asset, return the file directly.\n if (!bundled) {\n const fullPath = path.join(packageEntry.path, filePath);\n\n if (fullPath.length < packageEntry.path.length) {\n console.debug(`Response (400): \"${packageName}@${version}${filePath}\"`);\n\n res.status(400).send(`Invalid file path.`);\n return;\n }\n\n console.debug(`Unbundled response returning: \"${packageName}@${version}${filePath}\"`);\n // If the package is external, set cache headers.\n if (isExternalPackage(packageEntry.path)) {\n res.setHeader('Cache-Control', 'public, max-age=31536000');\n }\n\n res.sendFile(path.join(packageEntry.path, filePath));\n return;\n }\n\n const bundleRequest = await createBundleRequestForPackage({ packageEntry }, { config, packages, resolveMap });\n\n // Set up for bundling.\n const rerun = !(await isFolder(bundleRequest.outputPath)) || force;\n\n if (features.enableLage) {\n console.debug(`Trying to bundle \"${packageName}@${version}\" with lage task scheduler`);\n\n try {\n await apiServer.scheduleTask(\n bundleRequest,\n {\n // TODO: we may want to have away to let users add more types of tasks here\n bundle: path.resolve(currentPath, '../../../tasks/bundleTaskWorker.js'),\n },\n { rerun },\n );\n\n console.debug(`Bundle returning: \"${packageName}@${version}${filePath}\"`);\n // Try to return the result.\n if (bundleRequest.isExternal) {\n res.setHeader('Cache-Control', 'public, max-age=31536000');\n }\n\n return res.sendFile(path.join(bundleRequest.outputPath, filePath));\n } catch (err) {\n return res.status(500).type('json').send(bundleRequest);\n }\n }\n\n console.debug(`Trying to bundle \"${packageName}@${version}\"`);\n\n const bundleTask = createBundleTask({ bundleRequest, resolveMap, options: { force }, reporter });\n await apiServer.addTask(bundleTask, { rerun });\n\n // At this point we should have a Task completed.\n if ((bundleRequest.result?.errors?.length || 0) > 0) {\n res.status(500).type('json').send(bundleRequest);\n } else {\n if (features.enqueueDependencies && bundleRequest.result?.dependencies) {\n // Enqueue all dependencies to be bundled.\n for (const dependency of bundleRequest.result.dependencies) {\n const dependencyBundleRequest = await createBundleRequestForPackage(\n { packageEntry: resolveMap[dependency] },\n { ...context, config, resolveMap },\n );\n\n // No need to await, we don't want to wait until the bundle is completed.\n void apiServer.addTask(\n createBundleTask({ bundleRequest: dependencyBundleRequest, resolveMap, options: { force }, reporter }),\n );\n }\n }\n\n console.debug(`Bundle returning: \"${packageName}@${version}${filePath}\"`);\n // Try to return the result.\n if (bundleRequest.isExternal) {\n res.setHeader('Cache-Control', 'public, max-age=31536000');\n }\n\n res.sendFile(path.join(bundleRequest.outputPath, filePath));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"startBundleServer.js","sourceRoot":"","sources":["../../../src/commands/start/startBundleServer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ApiServer, Session } from '@ms-cloudpack/api-server';\nimport { createExpressApp, type Express, type Request, type Response } from '@ms-cloudpack/create-express-app';\nimport { isExternalPackage, findResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\nimport { isFolder } from '@ms-cloudpack/path-utilities';\nimport path from 'path';\nimport type { BundleServer } from '../../types/BundleServer.js';\nimport { createBundleTask, createBundleRequestForPackage, parseRequestInfo } from '@ms-cloudpack/api-server';\nimport { fileURLToPath } from 'url';\nimport type { TaskReporter } from '@ms-cloudpack/task-reporter';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\n\nconst currentPath = fileURLToPath(import.meta.url);\n\n/**\n * The bundle server handles package requests and returns bundled resources.\n * Resources are bundled on demand and cached locally to avoid re-bundling\n * on each request.\n */\nexport async function startBundleServer(options: {\n apiServer: ApiServer;\n session: Session;\n reporter: TaskReporter;\n packages: PackageDefinitionsCache;\n}): Promise<BundleServer> {\n const { apiServer, session, reporter, packages } = options;\n const { config } = session;\n const { port, close, url } = await createExpressApp({\n portRange: [5500, 5501, 5502, 5503],\n hostname: config.devServer?.domain,\n sslOptions: config.devServer?.https,\n setupCallback: (app: Express) => {\n // Set up the express app routes.\n app.get('*', (req, res) => {\n handleRequest({ req, res }, { session, apiServer, reporter, packages }).catch((err) => {\n console.error((err as Error)?.stack || err);\n res.status(500).send(`Error bundling: ${err}`);\n });\n });\n },\n });\n\n return {\n close,\n port,\n url,\n };\n}\n\nasync function handleRequest(\n options: {\n req: Request;\n res: Response;\n },\n context: {\n session: Session;\n apiServer: ApiServer;\n reporter: TaskReporter;\n packages: PackageDefinitionsCache;\n },\n) {\n const { req, res } = options;\n const { session, apiServer, reporter, packages } = context;\n const { resolveMap, config } = session;\n const { features = {} } = config;\n const requestPath = slash(req.path.substring(1));\n const force = req.query.force !== undefined;\n const { packageName, version, bundled, filePath } = parseRequestInfo(requestPath);\n const packageEntry = findResolveMapEntry({ packageName, version, resolveMap });\n\n if (!packageEntry) {\n // If the package is missing, invalid arguments.\n console.debug(`Response (404): Unrecognized package \"${packageName}\"`);\n res.status(404).send(`Unrecognized package \"${packageName}\".`);\n return;\n }\n\n console.debug(`Request: \"${packageName}@${version}${filePath}\"`);\n\n // If the package is missing, invalid arguments.\n if (!requestPath || !packageName) {\n console.debug(`Response (400): \"${packageName}@${version}${filePath}\"`);\n\n res.status(400).send(`Requests must be in the format \"/{packageName}@{version}/{type}/path/file.ext\".`);\n return;\n }\n\n // If the version is missing, redirect to the primary version.\n if (!version) {\n res.redirect(`/${packageName}@${packageEntry.version}${filePath}`);\n return;\n }\n\n // If we are accessing a non-bundled asset, return the file directly.\n if (!bundled) {\n const fullPath = path.join(packageEntry.path, filePath);\n\n if (fullPath.length < packageEntry.path.length) {\n console.debug(`Response (400): \"${packageName}@${version}${filePath}\"`);\n\n res.status(400).send(`Invalid file path.`);\n return;\n }\n\n console.debug(`Unbundled response returning: \"${packageName}@${version}${filePath}\"`);\n // If the package is external, set cache headers.\n if (isExternalPackage(packageEntry.path)) {\n res.setHeader('Cache-Control', 'public, max-age=31536000');\n }\n\n res.sendFile(path.join(packageEntry.path, filePath));\n return;\n }\n\n const bundleRequest = await createBundleRequestForPackage({ packageEntry }, { config, packages, resolveMap });\n\n // Set up for bundling.\n const rerun = !(await isFolder(bundleRequest.outputPath)) || force;\n\n if (features.enableLage) {\n console.debug(`Trying to bundle \"${packageName}@${version}\" with lage task scheduler`);\n\n try {\n await apiServer.scheduleTask(\n bundleRequest,\n {\n // TODO: we may want to have away to let users add more types of tasks here\n bundle: path.resolve(currentPath, '../../../tasks/bundleTaskWorker.js'),\n },\n { rerun },\n );\n\n console.debug(`Bundle returning: \"${packageName}@${version}${filePath}\"`);\n // Try to return the result.\n if (bundleRequest.isExternal) {\n res.setHeader('Cache-Control', 'public, max-age=31536000');\n }\n\n return res.sendFile(path.join(bundleRequest.outputPath, filePath));\n } catch (err) {\n return res.status(500).type('json').send(bundleRequest);\n }\n }\n\n console.debug(`Trying to bundle \"${packageName}@${version}\"`);\n\n const bundleTask = createBundleTask({ bundleRequest, resolveMap, options: { force }, reporter });\n await apiServer.addTask(bundleTask, { rerun });\n\n // At this point we should have a Task completed.\n if ((bundleRequest.result?.errors?.length || 0) > 0) {\n res.status(500).type('json').send(bundleRequest);\n } else {\n if (features.enqueueDependencies && bundleRequest.result?.imports) {\n // Enqueue all dependencies to be bundled.\n for (const dependency of Object.keys(bundleRequest.result.imports)) {\n const dependencyBundleRequest = await createBundleRequestForPackage(\n { packageEntry: resolveMap[dependency] },\n { ...context, config, resolveMap },\n );\n\n // No need to await, we don't want to wait until the bundle is completed.\n void apiServer.addTask(\n createBundleTask({ bundleRequest: dependencyBundleRequest, resolveMap, options: { force }, reporter }),\n );\n }\n }\n\n console.debug(`Bundle returning: \"${packageName}@${version}${filePath}\"`);\n // Try to return the result.\n if (bundleRequest.isExternal) {\n res.setHeader('Cache-Control', 'public, max-age=31536000');\n }\n\n res.sendFile(path.join(bundleRequest.outputPath, filePath));\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ms-cloudpack/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.47.0",
|
|
4
4
|
"description": "The Cloudpack command line interface - a tool for managing fast inner and outer looping in web apps.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -11,16 +11,15 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@lage-run/target-graph": "^0.8.6",
|
|
14
|
-
"@ms-cloudpack/api-server": "^0.
|
|
15
|
-
"@ms-cloudpack/
|
|
16
|
-
"@ms-cloudpack/config": "^0.12.2",
|
|
14
|
+
"@ms-cloudpack/api-server": "^0.18.0",
|
|
15
|
+
"@ms-cloudpack/config": "^0.12.3",
|
|
17
16
|
"@ms-cloudpack/create-express-app": "^1.3.9",
|
|
18
17
|
"@ms-cloudpack/json-utilities": "^0.0.7",
|
|
19
|
-
"@ms-cloudpack/overlay": "^0.14.
|
|
20
|
-
"@ms-cloudpack/package-utilities": "^5.1.
|
|
18
|
+
"@ms-cloudpack/overlay": "^0.14.18",
|
|
19
|
+
"@ms-cloudpack/package-utilities": "^5.1.5",
|
|
21
20
|
"@ms-cloudpack/path-string-parsing": "^1.0.3",
|
|
22
21
|
"@ms-cloudpack/path-utilities": "^2.3.2",
|
|
23
|
-
"@ms-cloudpack/task-reporter": "^0.
|
|
22
|
+
"@ms-cloudpack/task-reporter": "^0.8.0",
|
|
24
23
|
"@ms-cloudpack/telemetry": "^0.3.8",
|
|
25
24
|
"commander": "^11.0.0",
|
|
26
25
|
"cross-spawn": "^7.0.3",
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { PackageJson, PackageDefinitionsCache, BundleMessage } from '@ms-cloudpack/bundler-types';
|
|
2
|
-
import { type TaskReporter } from '@ms-cloudpack/task-reporter';
|
|
3
|
-
import type { CloudpackConfig } from '@ms-cloudpack/config';
|
|
4
|
-
import { ensurePackageBundled } from '@ms-cloudpack/api-server/apis';
|
|
5
|
-
/**
|
|
6
|
-
* Bundle the package and return the imports it depends on.
|
|
7
|
-
*/
|
|
8
|
-
export declare function bundleAndGetImports(options: {
|
|
9
|
-
packages: PackageDefinitionsCache;
|
|
10
|
-
config: CloudpackConfig;
|
|
11
|
-
reporter: TaskReporter;
|
|
12
|
-
packagePath: string;
|
|
13
|
-
definition: PackageJson;
|
|
14
|
-
ctx: Parameters<typeof ensurePackageBundled>[0]['ctx'];
|
|
15
|
-
}): Promise<{
|
|
16
|
-
warnings: BundleMessage[];
|
|
17
|
-
errors: BundleMessage[];
|
|
18
|
-
/** Map from package name to set of required relative paths */
|
|
19
|
-
imports: Map<string, Set<string>>;
|
|
20
|
-
}>;
|
|
21
|
-
//# sourceMappingURL=bundleAndGetImports.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bundleAndGetImports.d.ts","sourceRoot":"","sources":["../../../src/commands/init/bundleAndGetImports.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvG,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AACnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IACjD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,WAAW,CAAC;IACxB,GAAG,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;CACxD,GAAG,OAAO,CAAC;IACV,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,8DAA8D;IAC9D,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CACnC,CAAC,CA+DD"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import { getEntriesMapFromPackage } from '@ms-cloudpack/bundler';
|
|
3
|
-
import { getBundleDetails, findImports } from '@ms-cloudpack/api-server';
|
|
4
|
-
import { formatPackageName } from '@ms-cloudpack/task-reporter';
|
|
5
|
-
import { ensurePackageBundled } from '@ms-cloudpack/api-server/apis';
|
|
6
|
-
/**
|
|
7
|
-
* Bundle the package and return the imports it depends on.
|
|
8
|
-
*/
|
|
9
|
-
export async function bundleAndGetImports(options) {
|
|
10
|
-
const { packagePath, definition, packages, reporter, ctx } = options;
|
|
11
|
-
const { session } = ctx;
|
|
12
|
-
const { resolveMap } = session;
|
|
13
|
-
const { outputLocation, isExternal } = await getBundleDetails({ packagePath }, { packages, resolveMap });
|
|
14
|
-
const outputPath = outputLocation.path;
|
|
15
|
-
if (!isExternal && !definition.exports) {
|
|
16
|
-
console.debug(`${path.join(packagePath, 'package.json')} does not have an "exports" field.`);
|
|
17
|
-
}
|
|
18
|
-
const { name, version } = definition;
|
|
19
|
-
if (!name || !version) {
|
|
20
|
-
throw new Error(`Package at "${packagePath}" does not have a name or version.`);
|
|
21
|
-
}
|
|
22
|
-
// Determine entries.
|
|
23
|
-
const entriesMap = await getEntriesMapFromPackage({ inputPath: packagePath }, { packages });
|
|
24
|
-
if (!Object.keys(entriesMap).length) {
|
|
25
|
-
return {
|
|
26
|
-
imports: new Map(),
|
|
27
|
-
errors: [],
|
|
28
|
-
warnings: [
|
|
29
|
-
{
|
|
30
|
-
text: `No valid entry points were found when evaluating ${path.join(packagePath, 'package.json')}. Check that has an exports, main, or module entry and the referenced files exist.`,
|
|
31
|
-
},
|
|
32
|
-
],
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
const { result } = await ensurePackageBundled({
|
|
36
|
-
input: {
|
|
37
|
-
name,
|
|
38
|
-
version,
|
|
39
|
-
},
|
|
40
|
-
ctx,
|
|
41
|
-
});
|
|
42
|
-
// For each outputFile, find all imports.
|
|
43
|
-
let imports;
|
|
44
|
-
await reporter.runTask(`Evaluate ${formatPackageName(definition)}`, async () => {
|
|
45
|
-
imports = new Map(Object.entries((await findImports(result?.outputFiles?.map((file) => path.resolve(outputPath, file.outputPath)) || [])) || {}));
|
|
46
|
-
return {
|
|
47
|
-
status: 'complete',
|
|
48
|
-
};
|
|
49
|
-
});
|
|
50
|
-
return {
|
|
51
|
-
warnings: result?.warnings || [],
|
|
52
|
-
errors: result?.errors || [],
|
|
53
|
-
imports: imports || new Map(),
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=bundleAndGetImports.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bundleAndGetImports.js","sourceRoot":"","sources":["../../../src/commands/init/bundleAndGetImports.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAqB,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAOzC;IAMC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACrE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;IACxB,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC/B,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,MAAM,gBAAgB,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;IACzG,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC;IAEvC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QACtC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,oCAAoC,CAAC,CAAC;KAC9F;IAED,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IAErC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,eAAe,WAAW,oCAAoC,CAAC,CAAC;KACjF;IAED,qBAAqB;IACrB,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE5F,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;QACnC,OAAO;YACL,OAAO,EAAE,IAAI,GAAG,EAAuB;YACvC,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,oDAAoD,IAAI,CAAC,IAAI,CACjE,WAAW,EACX,cAAc,CACf,oFAAoF;iBACtF;aACF;SACF,CAAC;KACH;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC;QAC5C,KAAK,EAAE;YACL,IAAI;YACJ,OAAO;SACR;QACD,GAAG;KACJ,CAAC,CAAC;IAEH,yCAAyC;IACzC,IAAI,OAA6C,CAAC;IAElD,MAAM,QAAQ,CAAC,OAAO,CAAC,YAAY,iBAAiB,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;QAC7E,OAAO,GAAG,IAAI,GAAG,CACf,MAAM,CAAC,OAAO,CACZ,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAC/G,CACF,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,UAAU;SACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,EAAE;QAChC,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE;QAC5B,OAAO,EAAE,OAAO,IAAI,IAAI,GAAG,EAAuB;KACnD,CAAC;AACJ,CAAC","sourcesContent":["import path from 'path';\nimport { getEntriesMapFromPackage } from '@ms-cloudpack/bundler';\nimport { getBundleDetails, findImports } from '@ms-cloudpack/api-server';\nimport type { PackageJson, PackageDefinitionsCache, BundleMessage } from '@ms-cloudpack/bundler-types';\nimport { type TaskReporter, formatPackageName } from '@ms-cloudpack/task-reporter';\nimport type { CloudpackConfig } from '@ms-cloudpack/config';\nimport { ensurePackageBundled } from '@ms-cloudpack/api-server/apis';\n\n/**\n * Bundle the package and return the imports it depends on.\n */\nexport async function bundleAndGetImports(options: {\n packages: PackageDefinitionsCache;\n config: CloudpackConfig;\n reporter: TaskReporter;\n packagePath: string;\n definition: PackageJson;\n ctx: Parameters<typeof ensurePackageBundled>[0]['ctx'];\n}): Promise<{\n warnings: BundleMessage[];\n errors: BundleMessage[];\n /** Map from package name to set of required relative paths */\n imports: Map<string, Set<string>>;\n}> {\n const { packagePath, definition, packages, reporter, ctx } = options;\n const { session } = ctx;\n const { resolveMap } = session;\n const { outputLocation, isExternal } = await getBundleDetails({ packagePath }, { packages, resolveMap });\n const outputPath = outputLocation.path;\n\n if (!isExternal && !definition.exports) {\n console.debug(`${path.join(packagePath, 'package.json')} does not have an \"exports\" field.`);\n }\n\n const { name, version } = definition;\n\n if (!name || !version) {\n throw new Error(`Package at \"${packagePath}\" does not have a name or version.`);\n }\n\n // Determine entries.\n const entriesMap = await getEntriesMapFromPackage({ inputPath: packagePath }, { packages });\n\n if (!Object.keys(entriesMap).length) {\n return {\n imports: new Map<string, Set<string>>(),\n errors: [],\n warnings: [\n {\n text: `No valid entry points were found when evaluating ${path.join(\n packagePath,\n 'package.json',\n )}. Check that has an exports, main, or module entry and the referenced files exist.`,\n },\n ],\n };\n }\n\n const { result } = await ensurePackageBundled({\n input: {\n name,\n version,\n },\n ctx,\n });\n\n // For each outputFile, find all imports.\n let imports: Map<string, Set<string>> | undefined;\n\n await reporter.runTask(`Evaluate ${formatPackageName(definition)}`, async () => {\n imports = new Map(\n Object.entries(\n (await findImports(result?.outputFiles?.map((file) => path.resolve(outputPath, file.outputPath)) || [])) || {},\n ),\n );\n\n return {\n status: 'complete',\n };\n });\n\n return {\n warnings: result?.warnings || [],\n errors: result?.errors || [],\n imports: imports || new Map<string, Set<string>>(),\n };\n}\n"]}
|