@ms-cloudpack/cli 0.56.6-beta.0 → 0.56.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/lib/commands/init/InitSummaryData.d.ts.map +1 -1
  2. package/lib/commands/init/InitSummaryData.js +4 -1
  3. package/lib/commands/init/InitSummaryData.js.map +1 -1
  4. package/lib/commands/init/evaluateImportsForOverrides.d.ts +4 -2
  5. package/lib/commands/init/evaluateImportsForOverrides.d.ts.map +1 -1
  6. package/lib/commands/init/evaluateImportsForOverrides.js +39 -19
  7. package/lib/commands/init/evaluateImportsForOverrides.js.map +1 -1
  8. package/lib/commands/init/evaluatePath.js +9 -10
  9. package/lib/commands/init/evaluatePath.js.map +1 -1
  10. package/lib/commands/init/formatInitSummary.d.ts.map +1 -1
  11. package/lib/commands/init/formatInitSummary.js +4 -5
  12. package/lib/commands/init/formatInitSummary.js.map +1 -1
  13. package/lib/commands/init/init.d.ts.map +1 -1
  14. package/lib/commands/init/init.js +5 -2
  15. package/lib/commands/init/init.js.map +1 -1
  16. package/lib/commands/init/neverExclude.d.ts +10 -0
  17. package/lib/commands/init/neverExclude.d.ts.map +1 -0
  18. package/lib/commands/init/neverExclude.js +17 -0
  19. package/lib/commands/init/neverExclude.js.map +1 -0
  20. package/lib/commands/init/optimizeDependencies.d.ts +2 -2
  21. package/lib/commands/init/optimizeDependencies.d.ts.map +1 -1
  22. package/lib/commands/init/optimizeDependencies.js +16 -14
  23. package/lib/commands/init/optimizeDependencies.js.map +1 -1
  24. package/lib/commands/init/types/InitSummary.d.ts +5 -0
  25. package/lib/commands/init/types/InitSummary.d.ts.map +1 -1
  26. package/lib/commands/init/types/InitSummary.js.map +1 -1
  27. package/lib/commands/init/verifyExports.d.ts +7 -3
  28. package/lib/commands/init/verifyExports.d.ts.map +1 -1
  29. package/lib/commands/init/verifyExports.js +64 -63
  30. package/lib/commands/init/verifyExports.js.map +1 -1
  31. package/lib/common/CommandExecutor.d.ts.map +1 -1
  32. package/lib/common/CommandExecutor.js +15 -1
  33. package/lib/common/CommandExecutor.js.map +1 -1
  34. package/package.json +10 -9
@@ -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;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,iBAAiB,CAA0C;IACnE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,MAAM;IAO3B;;;;OAIG;IACI,YAAY,CAAC,OAAO,EAAE;QAAE,aAAa,EAAE,iBAAiB,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IAiBnF;;;OAGG;IACI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAItD;;;;OAIG;IACI,sBAAsB,CAAC,UAAU,EAAE,uBAAuB,EAAE;IASnE;;;OAGG;IACI,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,WAAW;CA4CnE"}
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;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,iBAAiB,CAA0C;IACnE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,MAAM;IAO3B;;;;OAIG;IACI,YAAY,CAAC,OAAO,EAAE;QAAE,aAAa,EAAE,iBAAiB,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IAiBnF;;;OAGG;IACI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAItD;;;;OAIG;IACI,sBAAsB,CAAC,UAAU,EAAE,uBAAuB,EAAE;IASnE;;;OAGG;IACI,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,WAAW;CA+CnE"}
@@ -64,6 +64,7 @@ export class InitSummaryData {
64
64
  let totalErrors = 0;
65
65
  let totalWarnings = 0;
66
66
  let totalChanges = 0;
67
+ let totalRequiredChanges = 0;
67
68
  const packagesWithErrors = [];
68
69
  const packagesWithWarnings = [];
69
70
  for (const packageResult of Object.values(this._packageResults)) {
@@ -82,6 +83,7 @@ export class InitSummaryData {
82
83
  const sortedUpdates = Object.values(this._generatedUpdates).sort((a, b) => a.path.localeCompare(b.path));
83
84
  for (const updates of sortedUpdates) {
84
85
  totalChanges += updates.changes.length;
86
+ totalRequiredChanges += updates.changes.filter((u) => u.type === 'added-export').length;
85
87
  updates.changes = updates.changes.sort((a, b) => a.change.localeCompare(b.change));
86
88
  }
87
89
  return {
@@ -92,7 +94,8 @@ export class InitSummaryData {
92
94
  totalErrors,
93
95
  totalWarnings,
94
96
  totalChanges,
95
- failed: totalErrors > 0 || (!!options.check && totalChanges > 0),
97
+ totalRequiredChanges,
98
+ failed: totalErrors > 0 || (!!options.check && totalRequiredChanges > 0),
96
99
  packagesWithErrors,
97
100
  packagesWithWarnings,
98
101
  generatedFileUpdates: sortedUpdates,
@@ -1 +1 @@
1
- {"version":3,"file":"InitSummaryData.js","sourceRoot":"","sources":["../../../src/commands/init/InitSummaryData.ts"],"names":[],"mappings":"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","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';\nimport type { InitOptions } from './types/InitOptions.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 *\n * The `getMissingExportsMessage` method can be used to check that the imports/exports of packages match.\n */\nexport class InitSummaryData {\n private _packageResults: Record<string, InitPackageResult>;\n private _generatedUpdates: Record<string, GeneratedPackageChanges>;\n private _startTime: number;\n private _appPath: string;\n\n constructor(appPath: string) {\n this._packageResults = {};\n this._generatedUpdates = {};\n this._startTime = Date.now();\n this._appPath = appPath;\n }\n\n /**\n * Saves a package result.\n * @param packageResult - The package result to save.\n * @returns void.\n */\n public recordResult(options: { packageResult: InitPackageResult; append?: boolean }) {\n const { packageResult, append } = options;\n if (append && this._packageResults[packageResult.path]) {\n // Merge previous errors and warnings if any.\n if (packageResult.errors?.length) {\n this._packageResults[packageResult.path].errors ??= [];\n this._packageResults[packageResult.path].errors?.push(...packageResult.errors);\n }\n if (packageResult.warnings?.length) {\n this._packageResults[packageResult.path].warnings ??= [];\n this._packageResults[packageResult.path].warnings?.push(...packageResult.warnings);\n }\n } else {\n this._packageResults[packageResult.path] = packageResult;\n }\n }\n\n /**\n * Returns the package results.\n * @returns The package results.\n */\n public getResults(): Record<string, InitPackageResult> {\n return this._packageResults;\n }\n\n /**\n * Saves a generated file update.\n * @param allChanges - The generated file update to save.\n * @returns void.\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 /**\n * Returns the summary of the results.\n * @returns The summary of the results.\n */\n public summarize(options: Pick<InitOptions, 'check'>): 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 appPath: this._appPath,\n duration,\n totalPackages: Object.keys(this._packageResults).length,\n totalSuccess,\n totalErrors,\n totalWarnings,\n totalChanges,\n failed: totalErrors > 0 || (!!options.check && totalChanges > 0),\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates: sortedUpdates,\n };\n }\n}\n"]}
1
+ {"version":3,"file":"InitSummaryData.js","sourceRoot":"","sources":["../../../src/commands/init/InitSummaryData.ts"],"names":[],"mappings":"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","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';\nimport type { InitOptions } from './types/InitOptions.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 *\n * The `getMissingExportsMessage` method can be used to check that the imports/exports of packages match.\n */\nexport class InitSummaryData {\n private _packageResults: Record<string, InitPackageResult>;\n private _generatedUpdates: Record<string, GeneratedPackageChanges>;\n private _startTime: number;\n private _appPath: string;\n\n constructor(appPath: string) {\n this._packageResults = {};\n this._generatedUpdates = {};\n this._startTime = Date.now();\n this._appPath = appPath;\n }\n\n /**\n * Saves a package result.\n * @param packageResult - The package result to save.\n * @returns void.\n */\n public recordResult(options: { packageResult: InitPackageResult; append?: boolean }) {\n const { packageResult, append } = options;\n if (append && this._packageResults[packageResult.path]) {\n // Merge previous errors and warnings if any.\n if (packageResult.errors?.length) {\n this._packageResults[packageResult.path].errors ??= [];\n this._packageResults[packageResult.path].errors?.push(...packageResult.errors);\n }\n if (packageResult.warnings?.length) {\n this._packageResults[packageResult.path].warnings ??= [];\n this._packageResults[packageResult.path].warnings?.push(...packageResult.warnings);\n }\n } else {\n this._packageResults[packageResult.path] = packageResult;\n }\n }\n\n /**\n * Returns the package results.\n * @returns The package results.\n */\n public getResults(): Record<string, InitPackageResult> {\n return this._packageResults;\n }\n\n /**\n * Saves a generated file update.\n * @param allChanges - The generated file update to save.\n * @returns void.\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 /**\n * Returns the summary of the results.\n * @returns The summary of the results.\n */\n public summarize(options: Pick<InitOptions, 'check'>): 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 let totalRequiredChanges = 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 totalRequiredChanges += updates.changes.filter((u) => u.type === 'added-export').length;\n updates.changes = updates.changes.sort((a, b) => a.change.localeCompare(b.change));\n }\n\n return {\n appPath: this._appPath,\n duration,\n totalPackages: Object.keys(this._packageResults).length,\n totalSuccess,\n totalErrors,\n totalWarnings,\n totalChanges,\n totalRequiredChanges,\n failed: totalErrors > 0 || (!!options.check && totalRequiredChanges > 0),\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates: sortedUpdates,\n };\n }\n}\n"]}
@@ -17,8 +17,10 @@ export declare function evaluateImportsForOverrides(options: {
17
17
  resolveMap: ResolveMap;
18
18
  importerContext: PackageImporterContext | undefined;
19
19
  }): Promise<{
20
- /** Changes made to the generated config */
21
- changes: GeneratedPackageChanges[];
20
+ /** Export changes made to the generated config */
21
+ exportsChanges: GeneratedPackageChanges[];
22
+ /** Included dependencies changes made to the generated config */
23
+ includedDependenciesChanges: GeneratedPackageChanges[];
22
24
  /** Any errors encountered */
23
25
  errors: string[];
24
26
  /** Any warnings generated */
@@ -1 +1 @@
1
- {"version":3,"file":"evaluateImportsForOverrides.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACnG,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAmB,MAAM,4BAA4B,CAAC;AAEhG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAUlE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAIlF;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,sBAAsB,GAAG,SAAS,CAAC;CACrD,GAAG,OAAO,CAAC;IACV,2CAA2C;IAC3C,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,6BAA6B;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,GAAG,SAAS,CAAC,CAAC;IACjE,6FAA6F;IAC7F,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B,CAAC,CAkLD"}
1
+ {"version":3,"file":"evaluateImportsForOverrides.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACnG,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAmB,MAAM,4BAA4B,CAAC;AAEhG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAWlE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAKlF;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,sBAAsB,GAAG,SAAS,CAAC;CACrD,GAAG,OAAO,CAAC;IACV,kDAAkD;IAClD,cAAc,EAAE,uBAAuB,EAAE,CAAC;IAC1C,iEAAiE;IACjE,2BAA2B,EAAE,uBAAuB,EAAE,CAAC;IACvD,6BAA6B;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,GAAG,SAAS,CAAC,CAAC;IACjE,6FAA6F;IAC7F,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B,CAAC,CAiMD"}
@@ -1,8 +1,9 @@
1
1
  import { getPackageSettings } from '@ms-cloudpack/config';
2
- import { addExportsMapEntry, findResolveMapEntry, flattenExportsMap, getDependencies, getUnusedDependencies, getExportsMap, } from '@ms-cloudpack/package-utilities';
2
+ import { addExportsMapEntry, findResolveMapEntry, flattenExportsMap, getDependencies, getUnusedDependencies, getExportsMap, isExternalPackage, } from '@ms-cloudpack/package-utilities';
3
3
  import { bulletedList, cyan } from '@ms-cloudpack/task-reporter';
4
4
  import { isBuiltin } from 'module';
5
5
  import { getConsumedPaths } from '@ms-cloudpack/api-server';
6
+ import { neverExclude } from './neverExclude.js';
6
7
  /**
7
8
  * Evaluate the imports depended on by a package to determine if missing exports map paths need to be added.
8
9
  * If so, updates package overrides in the config.
@@ -14,7 +15,8 @@ export async function evaluateImportsForOverrides(options) {
14
15
  if (!packageName || !packageVersion) {
15
16
  throw new Error(`Package "${displayName}" is missing a name or version.`);
16
17
  }
17
- const changes = [];
18
+ const exportsChanges = [];
19
+ const includedDependenciesChanges = [];
18
20
  const errors = [];
19
21
  const warnings = [];
20
22
  const pathsToEvaluate = new Map();
@@ -27,11 +29,10 @@ export async function evaluateImportsForOverrides(options) {
27
29
  const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });
28
30
  const dependencyPath = resolveEntry?.path;
29
31
  const dependencyDefinition = dependencyPath ? await packages.get(dependencyPath) : undefined;
30
- const message = `Package "${displayName}" imports from the package "${dependencyName}" but it couldn't be found. ` +
31
- `Ensure that "${dependencyName}" is listed in dependencies of "${displayName}".`;
32
- // If the dependency is a node built-in, add a special error message.
33
- const messageBuiltin = `Package "${displayName}" imports from the node built-in "${dependencyName}" but no browser-friendly version was found in dependencies. ` +
34
- `This can be fixed by forcing package "${displayName}" to use "bundlerType": of "rollup" in package settings, or by adding a polyfill browser-friendly dependency.`;
32
+ const message = `The package "${dependencyName}" couldn't be found, but it's being imported by the package "${displayName}". ` +
33
+ `Please ensure that "${dependencyName}" is listed in the dependencies of "${displayName}".`;
34
+ const messageBuiltin = `The node built-in "${dependencyName}" is being imported by the package "${displayName}", but no browser-friendly version was found in dependencies. ` +
35
+ `This can be fixed by forcing the package "${displayName}" to use "bundlerType": "rollup" in package settings, or by adding a polyfill browser-friendly dependency.`;
35
36
  // If the dependency is not resolved, add an error.
36
37
  if (!dependencyPath || !dependencyDefinition) {
37
38
  isBuiltin(dependencyName) ? errors.push(messageBuiltin) : errors.push(message);
@@ -39,7 +40,7 @@ export async function evaluateImportsForOverrides(options) {
39
40
  continue;
40
41
  }
41
42
  // If the dependency is not listed as a dependency add to includedDependencies.
42
- if (!dependencies[dependencyName] && dependencyName !== definition.name) {
43
+ if (!dependencies[dependencyName] && dependencyName !== definition.name && !neverExclude(dependencyName, config)) {
43
44
  // Survive from the case where it is not a dependency in the package.json
44
45
  // and it is resolvable, but warn the user.
45
46
  if (!unusedDependencies[dependencyName]) {
@@ -56,9 +57,16 @@ export async function evaluateImportsForOverrides(options) {
56
57
  firstMatch: true,
57
58
  }).generatedPackageSettings;
58
59
  if (!generatedPackageSettings) {
59
- generatedPackageSettings = {
60
- match: { name: packageName, version: `^${packageVersion}` },
61
- };
60
+ if (isExternalPackage(packagePath)) {
61
+ generatedPackageSettings = {
62
+ match: { name: packageName, version: `^${packageVersion}` },
63
+ };
64
+ }
65
+ else {
66
+ generatedPackageSettings = {
67
+ match: packageName,
68
+ };
69
+ }
62
70
  packageSettings.push(generatedPackageSettings);
63
71
  }
64
72
  generatedPackageSettings.includedDependencies ??= [];
@@ -67,7 +75,7 @@ export async function evaluateImportsForOverrides(options) {
67
75
  continue;
68
76
  }
69
77
  generatedPackageSettings.includedDependencies.push(dependencyName);
70
- changes.push({
78
+ includedDependenciesChanges.push({
71
79
  name: packageName,
72
80
  version: packageVersion,
73
81
  path: packagePath,
@@ -115,10 +123,18 @@ export async function evaluateImportsForOverrides(options) {
115
123
  firstMatch: true,
116
124
  }).generatedPackageSettings;
117
125
  if (!generatedPackageSettings) {
118
- generatedPackageSettings = {
119
- match: { name, version: `^${version}` },
120
- exports: {},
121
- };
126
+ if (isExternalPackage(dependencyPath)) {
127
+ generatedPackageSettings = {
128
+ match: { name, version: `^${version}` },
129
+ exports: {},
130
+ };
131
+ }
132
+ else {
133
+ generatedPackageSettings = {
134
+ match: name,
135
+ exports: {},
136
+ };
137
+ }
122
138
  packageSettings.push(generatedPackageSettings);
123
139
  }
124
140
  generatedPackageSettings.exports ??= {};
@@ -128,7 +144,7 @@ export async function evaluateImportsForOverrides(options) {
128
144
  importPath: dependencyImportPath,
129
145
  }, { packages, config });
130
146
  if (addedEntry) {
131
- changes.push({
147
+ exportsChanges.push({
132
148
  name: dependencyName,
133
149
  version: dependencyDefinition.version || '',
134
150
  path: dependencyPath,
@@ -144,11 +160,15 @@ export async function evaluateImportsForOverrides(options) {
144
160
  pathsToRefresh.add(dependencyPath);
145
161
  }
146
162
  else {
147
- const errorMessage = `Imported "${cyan(dependencyImportPath.replace('.', dependencyName))}" but a corresponding file couldn't be found. Either correct the import or adjust the "${cyan(dependencyName)}" package version to one that supports this import path.\n${bulletedList([`${cyan(displayName)}: ${packagePath}`, `${cyan(dependencyName)}: ${dependencyPath}`], 2)}`;
163
+ const errorMessage = `An import couldn't be resolved to a physical file. Check that the import refers to a file that's exported by the package or adjust the "${cyan(dependencyName)}" package version to one that supports this import path.\n${bulletedList([
164
+ `Import: ${cyan(dependencyImportPath.replace('.', dependencyName))}`,
165
+ `Location: ${packagePath}`,
166
+ `Resolved to: ${dependencyName}@${version} (${dependencyImportPath})`,
167
+ ], 2)}`;
148
168
  errors.push(errorMessage);
149
169
  }
150
170
  }
151
171
  }
152
- return { changes, errors, warnings, pathsToEvaluate, pathsToRefresh };
172
+ return { exportsChanges, includedDependenciesChanges, errors, warnings, pathsToEvaluate, pathsToRefresh };
153
173
  }
154
174
  //# sourceMappingURL=evaluateImportsForOverrides.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluateImportsForOverrides.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BundleInfo } from '@ms-cloudpack/api-server';\nimport type { PackageDefinitionsCache, PackageImporterContext } from '@ms-cloudpack/bundler-types';\nimport type { CloudpackConfig, PackageJson, PackageSettings } from '@ms-cloudpack/config-types';\nimport { getPackageSettings } from '@ms-cloudpack/config';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport {\n addExportsMapEntry,\n findResolveMapEntry,\n flattenExportsMap,\n getDependencies,\n getUnusedDependencies,\n getExportsMap,\n} from '@ms-cloudpack/package-utilities';\nimport { bulletedList, cyan } from '@ms-cloudpack/task-reporter';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport { isBuiltin } from 'module';\nimport { getConsumedPaths } from '@ms-cloudpack/api-server';\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 in the config.\n */\nexport async function evaluateImportsForOverrides(options: {\n packages: PackageDefinitionsCache;\n info: BundleInfo;\n definition: PackageJson;\n packagePath: string;\n /** Config so far. This will be modified if new overrides are needed. */\n config: CloudpackConfig;\n resolveMap: ResolveMap;\n importerContext: PackageImporterContext | undefined;\n}): Promise<{\n /** Changes made to the generated config */\n changes: GeneratedPackageChanges[];\n /** Any errors encountered */\n errors: string[];\n /** Any warnings generated */\n warnings: string[];\n /** Map from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate: Map<string, PackageImporterContext | undefined>;\n /** Package paths for which new exports were added, so the package should be re-processed. */\n pathsToRefresh: Set<string>;\n}> {\n const { packages, info, definition, packagePath, config, resolveMap, importerContext } = options;\n\n const { name: packageName, version: packageVersion } = definition;\n const displayName = `${packageName}@${packageVersion}`;\n if (!packageName || !packageVersion) {\n throw new Error(`Package \"${displayName}\" is missing a name or version.`);\n }\n\n const changes: GeneratedPackageChanges[] = [];\n const errors = [];\n const warnings = [];\n const pathsToEvaluate = new Map<string, PackageImporterContext | undefined>();\n const pathsToRefresh = new Set<string>();\n const dependencies = getDependencies(definition);\n const unusedDependencies = getUnusedDependencies(definition);\n const consumedPaths = getConsumedPaths(info);\n\n // Iterate through imports and find their path from the resolve map.\n for (const [dependencyName, dependencyImportPaths] of Object.entries(consumedPaths)) {\n const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });\n const dependencyPath = resolveEntry?.path;\n const dependencyDefinition = dependencyPath ? await packages.get(dependencyPath) : undefined;\n\n const message =\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 // If the dependency is a node built-in, add a special error message.\n const messageBuiltin =\n `Package \"${displayName}\" imports from the node built-in \"${dependencyName}\" but no browser-friendly version was found in dependencies. ` +\n `This can be fixed by forcing package \"${displayName}\" to use \"bundlerType\": of \"rollup\" in package settings, or by adding a polyfill browser-friendly dependency.`;\n\n // If the dependency is not resolved, add an error.\n if (!dependencyPath || !dependencyDefinition) {\n isBuiltin(dependencyName) ? errors.push(messageBuiltin) : errors.push(message);\n // If the dependency is not resolved, we can't continue to evaluate it.\n continue;\n }\n\n // If the dependency is not listed as a dependency add to includedDependencies.\n if (!dependencies[dependencyName] && dependencyName !== definition.name) {\n // Survive from the case where it is not a dependency in the package.json\n // and it is resolvable, but warn the user.\n if (!unusedDependencies[dependencyName]) {\n isBuiltin(dependencyName) ? warnings.push(messageBuiltin) : warnings.push(message);\n }\n // Make sure to add the package to the list of packages to evaluate.\n pathsToEvaluate.set(packagePath, importerContext);\n\n // Add to includedDependencies\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings = getPackageSettings({\n config: { generated: { packageSettings } },\n name: packageName,\n version: packageVersion,\n firstMatch: true,\n }).generatedPackageSettings;\n\n if (!generatedPackageSettings) {\n generatedPackageSettings = {\n match: { name: packageName, version: `^${packageVersion}` },\n };\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.includedDependencies ??= [];\n\n // Add to includedDependencies if it is not already included.\n if (generatedPackageSettings.includedDependencies.includes(dependencyName)) {\n continue;\n }\n\n generatedPackageSettings.includedDependencies.push(dependencyName);\n\n changes.push({\n name: packageName,\n version: packageVersion,\n path: packagePath,\n changes: [\n {\n type: 'included-dependency',\n change: dependencyName,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n\n pathsToRefresh.add(packagePath);\n }\n\n const { name, version } = dependencyDefinition as Required<PackageJson>;\n if (!name || !version) {\n throw new Error(`Package \"${displayName}\" depends on \"${dependencyName}\" but it is missing a name or version.`);\n }\n\n let dependencyImporterContext: PackageImporterContext | undefined;\n const versionRequirement = dependencies[dependencyName];\n if (versionRequirement && definition.name && definition.version) {\n dependencyImporterContext = {\n parentName: definition.name,\n parentVersion: definition.version,\n importedName: dependencyName,\n versionRequirement,\n };\n }\n\n // Make sure to add the package to the list of packages to evaluate.\n pathsToEvaluate.set(dependencyPath, dependencyImporterContext);\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, config });\n const flattenedExports = flattenExportsMap(exports);\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings: PackageSettings | undefined;\n // iterate through all the import paths.\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: { name, version: `^${version}` },\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 { packages, config },\n );\n\n if (addedEntry) {\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 export, we need to re-enqueue the dependency for evaluation.\n pathsToRefresh.add(dependencyPath);\n } else {\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 errors.push(errorMessage);\n }\n }\n }\n\n return { changes, errors, warnings, pathsToEvaluate, pathsToRefresh };\n}\n"]}
1
+ {"version":3,"file":"evaluateImportsForOverrides.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BundleInfo } from '@ms-cloudpack/api-server';\nimport type { PackageDefinitionsCache, PackageImporterContext } from '@ms-cloudpack/bundler-types';\nimport type { CloudpackConfig, PackageJson, PackageSettings } from '@ms-cloudpack/config-types';\nimport { getPackageSettings } from '@ms-cloudpack/config';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport {\n addExportsMapEntry,\n findResolveMapEntry,\n flattenExportsMap,\n getDependencies,\n getUnusedDependencies,\n getExportsMap,\n isExternalPackage,\n} from '@ms-cloudpack/package-utilities';\nimport { bulletedList, cyan } from '@ms-cloudpack/task-reporter';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport { isBuiltin } from 'module';\nimport { getConsumedPaths } from '@ms-cloudpack/api-server';\nimport { neverExclude } from './neverExclude.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 in the config.\n */\nexport async function evaluateImportsForOverrides(options: {\n packages: PackageDefinitionsCache;\n info: BundleInfo;\n definition: PackageJson;\n packagePath: string;\n /** Config so far. This will be modified if new overrides are needed. */\n config: CloudpackConfig;\n resolveMap: ResolveMap;\n importerContext: PackageImporterContext | undefined;\n}): Promise<{\n /** Export changes made to the generated config */\n exportsChanges: GeneratedPackageChanges[];\n /** Included dependencies changes made to the generated config */\n includedDependenciesChanges: GeneratedPackageChanges[];\n /** Any errors encountered */\n errors: string[];\n /** Any warnings generated */\n warnings: string[];\n /** Map from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate: Map<string, PackageImporterContext | undefined>;\n /** Package paths for which new exports were added, so the package should be re-processed. */\n pathsToRefresh: Set<string>;\n}> {\n const { packages, info, definition, packagePath, config, resolveMap, importerContext } = options;\n\n const { name: packageName, version: packageVersion } = definition;\n const displayName = `${packageName}@${packageVersion}`;\n if (!packageName || !packageVersion) {\n throw new Error(`Package \"${displayName}\" is missing a name or version.`);\n }\n\n const exportsChanges: GeneratedPackageChanges[] = [];\n const includedDependenciesChanges: GeneratedPackageChanges[] = [];\n const errors = [];\n const warnings = [];\n const pathsToEvaluate = new Map<string, PackageImporterContext | undefined>();\n const pathsToRefresh = new Set<string>();\n const dependencies = getDependencies(definition);\n const unusedDependencies = getUnusedDependencies(definition);\n const consumedPaths = getConsumedPaths(info);\n\n // Iterate through imports and find their path from the resolve map.\n for (const [dependencyName, dependencyImportPaths] of Object.entries(consumedPaths)) {\n const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });\n const dependencyPath = resolveEntry?.path;\n const dependencyDefinition = dependencyPath ? await packages.get(dependencyPath) : undefined;\n\n const message =\n `The package \"${dependencyName}\" couldn't be found, but it's being imported by the package \"${displayName}\". ` +\n `Please ensure that \"${dependencyName}\" is listed in the dependencies of \"${displayName}\".`;\n const messageBuiltin =\n `The node built-in \"${dependencyName}\" is being imported by the package \"${displayName}\", but no browser-friendly version was found in dependencies. ` +\n `This can be fixed by forcing the package \"${displayName}\" to use \"bundlerType\": \"rollup\" in package settings, or by adding a polyfill browser-friendly dependency.`;\n\n // If the dependency is not resolved, add an error.\n if (!dependencyPath || !dependencyDefinition) {\n isBuiltin(dependencyName) ? errors.push(messageBuiltin) : errors.push(message);\n // If the dependency is not resolved, we can't continue to evaluate it.\n continue;\n }\n\n // If the dependency is not listed as a dependency add to includedDependencies.\n if (!dependencies[dependencyName] && dependencyName !== definition.name && !neverExclude(dependencyName, config)) {\n // Survive from the case where it is not a dependency in the package.json\n // and it is resolvable, but warn the user.\n if (!unusedDependencies[dependencyName]) {\n isBuiltin(dependencyName) ? warnings.push(messageBuiltin) : warnings.push(message);\n }\n // Make sure to add the package to the list of packages to evaluate.\n pathsToEvaluate.set(packagePath, importerContext);\n\n // Add to includedDependencies\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings = getPackageSettings({\n config: { generated: { packageSettings } },\n name: packageName,\n version: packageVersion,\n firstMatch: true,\n }).generatedPackageSettings;\n\n if (!generatedPackageSettings) {\n if (isExternalPackage(packagePath)) {\n generatedPackageSettings = {\n match: { name: packageName, version: `^${packageVersion}` },\n };\n } else {\n generatedPackageSettings = {\n match: packageName,\n };\n }\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.includedDependencies ??= [];\n\n // Add to includedDependencies if it is not already included.\n if (generatedPackageSettings.includedDependencies.includes(dependencyName)) {\n continue;\n }\n\n generatedPackageSettings.includedDependencies.push(dependencyName);\n\n includedDependenciesChanges.push({\n name: packageName,\n version: packageVersion,\n path: packagePath,\n changes: [\n {\n type: 'included-dependency',\n change: dependencyName,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n\n pathsToRefresh.add(packagePath);\n }\n\n const { name, version } = dependencyDefinition as Required<PackageJson>;\n if (!name || !version) {\n throw new Error(`Package \"${displayName}\" depends on \"${dependencyName}\" but it is missing a name or version.`);\n }\n\n let dependencyImporterContext: PackageImporterContext | undefined;\n const versionRequirement = dependencies[dependencyName];\n if (versionRequirement && definition.name && definition.version) {\n dependencyImporterContext = {\n parentName: definition.name,\n parentVersion: definition.version,\n importedName: dependencyName,\n versionRequirement,\n };\n }\n\n // Make sure to add the package to the list of packages to evaluate.\n pathsToEvaluate.set(dependencyPath, dependencyImporterContext);\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, config });\n const flattenedExports = flattenExportsMap(exports);\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings: PackageSettings | undefined;\n // iterate through all the import paths.\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 if (isExternalPackage(dependencyPath)) {\n generatedPackageSettings = {\n match: { name, version: `^${version}` },\n exports: {},\n };\n } else {\n generatedPackageSettings = {\n match: name,\n exports: {},\n };\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 { packages, config },\n );\n\n if (addedEntry) {\n exportsChanges.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 export, we need to re-enqueue the dependency for evaluation.\n pathsToRefresh.add(dependencyPath);\n } else {\n const errorMessage = `An import couldn't be resolved to a physical file. Check that the import refers to a file that's exported by the package or adjust the \"${cyan(\n dependencyName,\n )}\" package version to one that supports this import path.\\n${bulletedList(\n [\n `Import: ${cyan(dependencyImportPath.replace('.', dependencyName))}`,\n `Location: ${packagePath}`,\n `Resolved to: ${dependencyName}@${version} (${dependencyImportPath})`,\n ],\n 2,\n )}`;\n errors.push(errorMessage);\n }\n }\n }\n\n return { exportsChanges, includedDependenciesChanges, errors, warnings, pathsToEvaluate, pathsToRefresh };\n}\n"]}
@@ -44,7 +44,7 @@ export async function evaluatePath(options) {
44
44
  return {};
45
45
  }
46
46
  // Given the package imports, find the missing exports maps and update packageOverrides.
47
- const { changes, errors: evalErrors, pathsToEvaluate, pathsToRefresh, } = await evaluateImportsForOverrides({
47
+ const { exportsChanges, includedDependenciesChanges, errors: evalErrors, pathsToEvaluate, pathsToRefresh, } = await evaluateImportsForOverrides({
48
48
  definition,
49
49
  packagePath,
50
50
  packages,
@@ -62,33 +62,32 @@ export async function evaluatePath(options) {
62
62
  append: true,
63
63
  });
64
64
  }
65
- summaryData.recordGeneratedChanges(changes);
65
+ summaryData.recordGeneratedChanges(exportsChanges);
66
+ summaryData.recordGeneratedChanges(includedDependenciesChanges);
66
67
  // Conditionally scan dependency usage so that we can populate
67
68
  // include/excludeDependencies automatically, ensuring the dep list
68
69
  // is both minimal (remove unused deps) and complete (include
69
70
  // specific devDeps.)
70
- let importWarnings = [];
71
- let importChanges = [];
72
71
  if (features?.optimizeDependencies) {
73
- ({ warnings: importWarnings, changes: importChanges } = optimizeDependencies({ definition, packagePath, info, resolveMap }, { packages, config }));
74
- if (importWarnings.length) {
72
+ const { warnings: excludedDependenciesWarnings, excludedDependenciesChanges } = optimizeDependencies({ definition, packagePath, info, resolveMap }, { packages, config });
73
+ if (excludedDependenciesWarnings.length) {
75
74
  summaryData.recordResult({
76
75
  packageResult: {
77
76
  ...resultIdentifier,
78
- warnings: importWarnings.map((text) => ({ text })),
77
+ warnings: excludedDependenciesWarnings.map((text) => ({ text })),
79
78
  },
80
79
  append: true,
81
80
  });
82
81
  }
83
- summaryData.recordGeneratedChanges(importChanges);
82
+ summaryData.recordGeneratedChanges(excludedDependenciesChanges);
84
83
  }
85
84
  // Uncomment this when #1694 init does not cache packages correctly after editing config is fixed
86
85
  // and the heap does not reach the limit as almost every package is enqueued.
87
86
  // importPathsToEvaluate?.forEach((path) => pathsToEvaluate.set(path, importerContext));
88
87
  // importPathsToRefresh?.forEach((path) => pathsToRefresh.add(path));
89
- if (initOptions.check && (changes.length || evalErrors.length || importChanges.length)) {
88
+ if (initOptions.check && (exportsChanges.length || evalErrors.length)) {
90
89
  telemetryClient.rootSpan.addEvent('INIT_CHECK_FAILED', {
91
- reason: changes.length || importChanges.length ? 'Config needs to be updated.' : evalErrors,
90
+ reason: exportsChanges ? 'Config needs to be updated.' : evalErrors,
92
91
  });
93
92
  return { shouldExit: true };
94
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"evaluatePath.js","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EnsurePackageBundledContext } from '@ms-cloudpack/api-server/apis';\nimport type { CloudpackConfig } from '@ms-cloudpack/config-types';\nimport type { PackageImporterContext } from '@ms-cloudpack/bundler-types';\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';\nimport { optimizeDependencies } from './optimizeDependencies.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 /** Path to evaluate. */\n packagePath: string;\n /** Info about how the parent package */\n importerContext: PackageImporterContext | undefined;\n /** Config so far. This will be modified if new overrides are needed. */\n config: CloudpackConfig;\n resolveMap: ResolveMap;\n telemetryClient: TelemetryClient;\n initOptions: InitOptions;\n summaryData: InitSummaryData;\n shouldForce: boolean;\n ctx: EnsurePackageBundledContext;\n}): Promise<{\n /** Map from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate?: Map<string, PackageImporterContext | undefined>;\n /** Package paths for which new exports were added, so the package should be re-processed. */\n pathsToRefresh?: Set<string>;\n /** Whether a fatal error was encountered. */\n shouldExit?: boolean;\n}> {\n const {\n packagePath,\n config,\n initOptions,\n telemetryClient,\n resolveMap,\n summaryData,\n shouldForce,\n ctx,\n importerContext,\n } = options;\n const { packages } = ctx;\n const { features } = config;\n\n // This line is the reason we have to track the importerContext for packages to evaluate:\n // otherwise if a non-semver package is read here, we'd lose the modifications from the initial\n // time the package was read (and getNonSemverTransform was called) when building the resolve map.\n const definition = await packages.get(packagePath, { refresh: true, importerContext });\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 isIncremental: false,\n shouldGetBundleInfo: true,\n shouldForce,\n shouldRerun: shouldForce,\n },\n ctx,\n });\n\n const { errors, warnings, info } = 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({ packageResult: { ...resultIdentifier, errors, warnings, info } });\n\n // If there were errors or no imports, return early.\n if (errors?.length || !info?.entry) {\n return {};\n }\n\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 info,\n config,\n resolveMap,\n importerContext,\n });\n\n if (evalErrors.length) {\n summaryData.recordResult({\n packageResult: {\n ...resultIdentifier,\n errors: evalErrors.map((text) => ({ text })),\n },\n append: true,\n });\n }\n summaryData.recordGeneratedChanges(changes);\n\n // Conditionally scan dependency usage so that we can populate\n // include/excludeDependencies automatically, ensuring the dep list\n // is both minimal (remove unused deps) and complete (include\n // specific devDeps.)\n let importWarnings = [];\n let importChanges = [];\n if (features?.optimizeDependencies) {\n ({ warnings: importWarnings, changes: importChanges } = optimizeDependencies(\n { definition, packagePath, info, resolveMap },\n { packages, config },\n ));\n\n if (importWarnings.length) {\n summaryData.recordResult({\n packageResult: {\n ...resultIdentifier,\n warnings: importWarnings.map((text) => ({ text })),\n },\n append: true,\n });\n }\n summaryData.recordGeneratedChanges(importChanges);\n }\n\n // Uncomment this when #1694 init does not cache packages correctly after editing config is fixed\n // and the heap does not reach the limit as almost every package is enqueued.\n // importPathsToEvaluate?.forEach((path) => pathsToEvaluate.set(path, importerContext));\n // importPathsToRefresh?.forEach((path) => pathsToRefresh.add(path));\n\n if (initOptions.check && (changes.length || evalErrors.length || importChanges.length)) {\n telemetryClient.rootSpan.addEvent('INIT_CHECK_FAILED', {\n reason: changes.length || importChanges.length ? 'Config needs to be updated.' : evalErrors,\n });\n\n return { shouldExit: true };\n }\n\n return {\n pathsToEvaluate,\n pathsToRefresh,\n };\n}\n"]}
1
+ {"version":3,"file":"evaluatePath.js","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EnsurePackageBundledContext } from '@ms-cloudpack/api-server/apis';\nimport type { CloudpackConfig } from '@ms-cloudpack/config-types';\nimport type { PackageImporterContext } from '@ms-cloudpack/bundler-types';\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';\nimport { optimizeDependencies } from './optimizeDependencies.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 /** Path to evaluate. */\n packagePath: string;\n /** Info about how the parent package */\n importerContext: PackageImporterContext | undefined;\n /** Config so far. This will be modified if new overrides are needed. */\n config: CloudpackConfig;\n resolveMap: ResolveMap;\n telemetryClient: TelemetryClient;\n initOptions: InitOptions;\n summaryData: InitSummaryData;\n shouldForce: boolean;\n ctx: EnsurePackageBundledContext;\n}): Promise<{\n /** Map from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate?: Map<string, PackageImporterContext | undefined>;\n /** Package paths for which new exports were added, so the package should be re-processed. */\n pathsToRefresh?: Set<string>;\n /** Whether a fatal error was encountered. */\n shouldExit?: boolean;\n}> {\n const {\n packagePath,\n config,\n initOptions,\n telemetryClient,\n resolveMap,\n summaryData,\n shouldForce,\n ctx,\n importerContext,\n } = options;\n const { packages } = ctx;\n const { features } = config;\n\n // This line is the reason we have to track the importerContext for packages to evaluate:\n // otherwise if a non-semver package is read here, we'd lose the modifications from the initial\n // time the package was read (and getNonSemverTransform was called) when building the resolve map.\n const definition = await packages.get(packagePath, { refresh: true, importerContext });\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 isIncremental: false,\n shouldGetBundleInfo: true,\n shouldForce,\n shouldRerun: shouldForce,\n },\n ctx,\n });\n\n const { errors, warnings, info } = 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({ packageResult: { ...resultIdentifier, errors, warnings, info } });\n\n // If there were errors or no imports, return early.\n if (errors?.length || !info?.entry) {\n return {};\n }\n\n // Given the package imports, find the missing exports maps and update packageOverrides.\n const {\n exportsChanges,\n includedDependenciesChanges,\n errors: evalErrors,\n pathsToEvaluate,\n pathsToRefresh,\n } = await evaluateImportsForOverrides({\n definition,\n packagePath,\n packages,\n info,\n config,\n resolveMap,\n importerContext,\n });\n\n if (evalErrors.length) {\n summaryData.recordResult({\n packageResult: {\n ...resultIdentifier,\n errors: evalErrors.map((text) => ({ text })),\n },\n append: true,\n });\n }\n summaryData.recordGeneratedChanges(exportsChanges);\n summaryData.recordGeneratedChanges(includedDependenciesChanges);\n\n // Conditionally scan dependency usage so that we can populate\n // include/excludeDependencies automatically, ensuring the dep list\n // is both minimal (remove unused deps) and complete (include\n // specific devDeps.)\n if (features?.optimizeDependencies) {\n const { warnings: excludedDependenciesWarnings, excludedDependenciesChanges } = optimizeDependencies(\n { definition, packagePath, info, resolveMap },\n { packages, config },\n );\n\n if (excludedDependenciesWarnings.length) {\n summaryData.recordResult({\n packageResult: {\n ...resultIdentifier,\n warnings: excludedDependenciesWarnings.map((text) => ({ text })),\n },\n append: true,\n });\n }\n summaryData.recordGeneratedChanges(excludedDependenciesChanges);\n }\n\n // Uncomment this when #1694 init does not cache packages correctly after editing config is fixed\n // and the heap does not reach the limit as almost every package is enqueued.\n // importPathsToEvaluate?.forEach((path) => pathsToEvaluate.set(path, importerContext));\n // importPathsToRefresh?.forEach((path) => pathsToRefresh.add(path));\n\n if (initOptions.check && (exportsChanges.length || evalErrors.length)) {\n telemetryClient.rootSpan.addEvent('INIT_CHECK_FAILED', {\n reason: exportsChanges ? 'Config needs to be updated.' : evalErrors,\n });\n\n return { shouldExit: true };\n }\n\n return {\n pathsToEvaluate,\n pathsToRefresh,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"formatInitSummary.d.ts","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,UA0GhF"}
1
+ {"version":3,"file":"formatInitSummary.d.ts","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,UAyGhF"}
@@ -8,7 +8,7 @@ export function formatInitSummary(summaries, options) {
8
8
  const summaryString = [];
9
9
  const isMultiApp = summaries.length > 1;
10
10
  for (const summary of summaries) {
11
- const { totalPackages, totalErrors, totalWarnings, totalChanges, packagesWithErrors, packagesWithWarnings, generatedFileUpdates, } = summary;
11
+ const { totalPackages, totalErrors, totalWarnings, totalRequiredChanges, packagesWithErrors, packagesWithWarnings, generatedFileUpdates, } = summary;
12
12
  const { check } = options || {};
13
13
  // Report the "Summary" title if no errors or warnings are listed (seems redundant otherwise.
14
14
  if ((!packagesWithErrors.length && !packagesWithWarnings.length) || isMultiApp) {
@@ -45,19 +45,18 @@ export function formatInitSummary(summaries, options) {
45
45
  summaryString.push(formatBundleMessages(packageWithErrors, true), '');
46
46
  }
47
47
  }
48
- const generatedUpdateCount = (check && !!generatedFileUpdates.length) || 0;
49
48
  const blockingIssueCount = packagesWithErrors.length || 0;
50
- const requiresChanges = (check && totalChanges) || 0;
49
+ const requiresChanges = (check && totalRequiredChanges) || 0;
51
50
  // Add summary.
52
51
  summaryString.push(`${cyan(plural(totalPackages, 'total package'))} evaluated in ${formatTime(summary.duration)}:`, bulletedList([
53
- requiresChanges ? `${red(plural(totalChanges, 'change'))} required` : undefined,
52
+ requiresChanges ? `${red(plural(totalRequiredChanges, 'change'))} required` : undefined,
54
53
  `${green(plural(totalPackages - blockingIssueCount, 'package'))} built successfully${packagesWithWarnings.length
55
54
  ? ` (${yellow(plural(packagesWithWarnings.length, 'package'))} with warnings)`
56
55
  : ''}`,
57
56
  blockingIssueCount ? `${red(plural(blockingIssueCount, 'package'))} failed to build` : undefined,
58
57
  `Totals: ${red(plural(totalErrors, 'error'))}, ${yellow(plural(totalWarnings, 'warning'))}`,
59
58
  ].filter(Boolean)));
60
- if (generatedUpdateCount) {
59
+ if (requiresChanges) {
61
60
  summaryString.push(`Run "${yellow('cloudpack init')}" in your application folder to apply changes to the ${cyan('cloudpack.generated.json')} file.`);
62
61
  }
63
62
  summaryString.push('\n');
@@ -1 +1 @@
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 statusCharacter,\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(summaries: InitSummary[], options?: InitOptions) {\n const summaryString: (string | undefined)[] = [];\n const isMultiApp = summaries.length > 1;\n\n for (const summary of summaries) {\n const {\n totalPackages,\n totalErrors,\n totalWarnings,\n totalChanges,\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates,\n } = summary;\n const { check } = options || {};\n\n // Report the \"Summary\" title if no errors or warnings are listed (seems redundant otherwise.\n if ((!packagesWithErrors.length && !packagesWithWarnings.length) || isMultiApp) {\n summaryString.push(bold(`:: Summary for ${summary.appPath} ::`));\n }\n\n if (!isMultiApp) {\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 let currentCount = 1;\n\n for (const packageWithWarnings of packagesWithWarnings) {\n summaryString.push(\n `${yellow(`${statusCharacter.warn} ${currentCount++}.`)} ${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\n // Report packages with errors.\n if (packagesWithErrors.length) {\n summaryString.push(`${plural(packagesWithErrors.length, 'package')} ${red('failed')}:\\n`);\n let currentCount = 1;\n for (const packageWithErrors of packagesWithErrors) {\n summaryString.push(\n `${red(`${statusCharacter.fail} ${currentCount++}.`)} ${formatPackageName(packageWithErrors)} - ${red(\n plural(packageWithErrors.errors.length, 'error'),\n )}, ${packageWithErrors.path}:`,\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) || 0;\n\n // Add summary.\n summaryString.push(\n `${cyan(plural(totalPackages, 'total package'))} evaluated in ${formatTime(summary.duration)}:`,\n bulletedList(\n [\n requiresChanges ? `${red(plural(totalChanges, 'change'))} required` : undefined,\n `${green(plural(totalPackages - blockingIssueCount, 'package'))} built successfully${\n packagesWithWarnings.length\n ? ` (${yellow(plural(packagesWithWarnings.length, 'package'))} with warnings)`\n : ''\n }`,\n blockingIssueCount ? `${red(plural(blockingIssueCount, 'package'))} failed to build` : undefined,\n `Totals: ${red(plural(totalErrors, 'error'))}, ${yellow(plural(totalWarnings, 'warning'))}`,\n ].filter(Boolean),\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 summaryString.push('\\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 const prefix = formatErrors ? red('Error') : yellow('Warning');\n\n if (!location?.file) {\n messages.push(`${prefix}: ${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(`${prefix}: ${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
+ {"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 statusCharacter,\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(summaries: InitSummary[], options?: InitOptions) {\n const summaryString: (string | undefined)[] = [];\n const isMultiApp = summaries.length > 1;\n\n for (const summary of summaries) {\n const {\n totalPackages,\n totalErrors,\n totalWarnings,\n totalRequiredChanges,\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates,\n } = summary;\n const { check } = options || {};\n\n // Report the \"Summary\" title if no errors or warnings are listed (seems redundant otherwise.\n if ((!packagesWithErrors.length && !packagesWithWarnings.length) || isMultiApp) {\n summaryString.push(bold(`:: Summary for ${summary.appPath} ::`));\n }\n\n if (!isMultiApp) {\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 let currentCount = 1;\n\n for (const packageWithWarnings of packagesWithWarnings) {\n summaryString.push(\n `${yellow(`${statusCharacter.warn} ${currentCount++}.`)} ${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\n // Report packages with errors.\n if (packagesWithErrors.length) {\n summaryString.push(`${plural(packagesWithErrors.length, 'package')} ${red('failed')}:\\n`);\n let currentCount = 1;\n for (const packageWithErrors of packagesWithErrors) {\n summaryString.push(\n `${red(`${statusCharacter.fail} ${currentCount++}.`)} ${formatPackageName(packageWithErrors)} - ${red(\n plural(packageWithErrors.errors.length, 'error'),\n )}, ${packageWithErrors.path}:`,\n );\n summaryString.push(formatBundleMessages(packageWithErrors as InitPackageResult, true), '');\n }\n }\n\n const blockingIssueCount = packagesWithErrors.length || 0;\n const requiresChanges = (check && totalRequiredChanges) || 0;\n\n // Add summary.\n summaryString.push(\n `${cyan(plural(totalPackages, 'total package'))} evaluated in ${formatTime(summary.duration)}:`,\n bulletedList(\n [\n requiresChanges ? `${red(plural(totalRequiredChanges, 'change'))} required` : undefined,\n `${green(plural(totalPackages - blockingIssueCount, 'package'))} built successfully${\n packagesWithWarnings.length\n ? ` (${yellow(plural(packagesWithWarnings.length, 'package'))} with warnings)`\n : ''\n }`,\n blockingIssueCount ? `${red(plural(blockingIssueCount, 'package'))} failed to build` : undefined,\n `Totals: ${red(plural(totalErrors, 'error'))}, ${yellow(plural(totalWarnings, 'warning'))}`,\n ].filter(Boolean),\n ),\n );\n\n if (requiresChanges) {\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 summaryString.push('\\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 const prefix = formatErrors ? red('Error') : yellow('Warning');\n\n if (!location?.file) {\n messages.push(`${prefix}: ${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(`${prefix}: ${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 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,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;AAQ1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAIhE;;GAEG;AACH,wBAAsB,IAAI,CAAC,UAAU,EAAE;IACrC,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;CACxB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAgIzB"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,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;AAQ1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAKhE;;GAEG;AACH,wBAAsB,IAAI,CAAC,UAAU,EAAE;IACrC,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;CACxB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAmIzB"}
@@ -6,6 +6,7 @@ import { evaluatePath } from './evaluatePath.js';
6
6
  import { verifyExports } from './verifyExports.js';
7
7
  import path from 'path';
8
8
  import { writeJson } from '@ms-cloudpack/json-utilities';
9
+ import { runPrerequisites } from '../../common/runPrerequisites.js';
9
10
  /**
10
11
  * Init execution function.
11
12
  */
@@ -15,6 +16,8 @@ export async function init(parameters) {
15
16
  let taskRunner = undefined;
16
17
  for (const initContext of contexts) {
17
18
  const { appPath, config, telemetryClient } = initContext;
19
+ // Run prerequisites for the app.
20
+ runPrerequisites(config, appPath);
18
21
  // Don't allow --check and --reset together.
19
22
  if (options.check && options.reset) {
20
23
  throw Error('Cannot use --check and --reset together.');
@@ -99,8 +102,8 @@ export async function init(parameters) {
99
102
  }
100
103
  });
101
104
  if (config.features?.verifyExports) {
102
- const warnings = verifyExports(summaryData.getResults(), resolveMap);
103
- warnings.forEach((warning) => summaryData.recordResult({ packageResult: warning, append: true }));
105
+ const packageResults = await verifyExports(summaryData.getResults(), apiContext);
106
+ packageResults.forEach((packageResult) => summaryData.recordResult({ packageResult, append: true }));
104
107
  }
105
108
  const summary = summaryData.summarize(options);
106
109
  summaries.push(summary);
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context, TaskRunner } from '@ms-cloudpack/api-server';\nimport type { GeneratedConfig, PackageJsonExportsObject } from '@ms-cloudpack/config-types';\nimport type { PackageImporterContext } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { TaskReporter } from '@ms-cloudpack/task-reporter';\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 { bold, bulletedList, formatPackageName, plural } from '@ms-cloudpack/task-reporter';\nimport { InitSummaryData } from './InitSummaryData.js';\nimport { evaluatePath } from './evaluatePath.js';\nimport { verifyExports } from './verifyExports.js';\nimport type { InitContext } from '../../types/CommandAction.js';\nimport path from 'path';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\n\n/**\n * Init execution function.\n */\nexport async function init(parameters: {\n options: InitOptions;\n contexts: InitContext[];\n autoDispose: AutoDispose;\n reporter: TaskReporter;\n}): Promise<InitSummary[]> {\n const { options, contexts, reporter, autoDispose } = parameters;\n\n const summaries = [];\n\n let taskRunner: TaskRunner | undefined = undefined;\n\n for (const initContext of contexts) {\n const { appPath, config, telemetryClient } = initContext;\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 apiContext: Context = await createPartialApiContext({\n appPath,\n config,\n reporter,\n telemetryClient,\n items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n taskRunner,\n });\n taskRunner ??= apiContext.taskRunner;\n autoDispose(apiContext);\n const resolveMap = apiContext.session.resolveMap;\n\n // Ensure config.generated.packageSettings is initialized.\n config.generated.packageSettings ??= [];\n\n const summaryData = new InitSummaryData(appPath);\n\n await new Promise<void>((resolve, reject) => {\n let pending = 0;\n let isExitingPrematurely = false;\n const visitedSet = new Set<string>();\n const refreshPaths = new Set<string>();\n\n // Start with the app path or requested matches\n enqueuePaths(getInitialPaths({ appPath, match: options.match, resolveMap, reporter }));\n\n /**\n * Enqueue more paths.\n * @param newPaths Mapping from package path to importer context.\n */\n function enqueuePaths(newPaths: Map<string, PackageImporterContext | undefined>) {\n if (isExitingPrematurely) {\n return;\n }\n\n // Iterate through the given paths.\n for (const [packagePath, importerContext] of newPaths) {\n if (visitedSet.has(packagePath)) {\n continue;\n }\n\n const shouldForce = refreshPaths.delete(packagePath);\n\n visitedSet.add(packagePath);\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,\n importerContext,\n config,\n telemetryClient,\n resolveMap,\n shouldForce,\n initOptions: options,\n summaryData,\n ctx: apiContext,\n })\n .then(({ pathsToEvaluate, pathsToRefresh, shouldExit }) => {\n pending--;\n\n if (shouldExit) {\n isExitingPrematurely = true;\n } else if (pathsToEvaluate?.size && !options.match) {\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(pathsToEvaluate);\n }\n\n // If nothing is pending after this call, we're complete.\n if (!pending) {\n resolve();\n }\n })\n .catch((error) => {\n reject(error);\n });\n }\n }\n });\n\n if (config.features?.verifyExports) {\n const warnings = verifyExports(summaryData.getResults(), resolveMap);\n warnings.forEach((warning) => summaryData.recordResult({ packageResult: warning, append: true }));\n }\n\n const summary = summaryData.summarize(options);\n summaries.push(summary);\n\n if (!options.check && summary.totalChanges && config.generated.packageSettings?.length) {\n sortExportKeys(config.generated);\n\n await writeGeneratedConfig(config.generated, appPath);\n }\n\n if (options.logResolveMap) {\n reporter.log('\\nWriting resolve map to `resolve-map.json`.');\n await writeJson(path.join(appPath, 'resolve-map.json'), resolveMap);\n }\n }\n\n return summaries;\n}\n\n/**\n * Get initial package paths to process: either the app path, or packages matching `match` in the init options.\n */\nfunction getInitialPaths(params: {\n appPath: string;\n /** Only evaluate packages matching this string (from init options). */\n match: string | undefined;\n resolveMap: ResolveMap;\n reporter: TaskReporter;\n}): Map<string, PackageImporterContext | undefined> {\n const { appPath, match, resolveMap, reporter } = params;\n\n if (!match) {\n return new Map([[appPath, undefined]]);\n }\n\n // Find matching packages in the resolve map\n const resolveMapEntries = Object.values(resolveMap).filter((entry) => entry.name.includes(match));\n\n reporter.log(\n `\\nFound ${plural(resolveMapEntries.length, 'package')} matching \"${bold(match)}\":\\n`,\n bulletedList(resolveMapEntries.map((entry) => `${formatPackageName(entry)}: ${entry.path}`)),\n );\n\n return new Map(resolveMapEntries.map((entry) => [entry.path, undefined]));\n}\n\nfunction sortExportKeys({ packageSettings = [] }: GeneratedConfig) {\n for (const settings of packageSettings) {\n if (!settings.exports) {\n continue;\n }\n\n const unsortedExports = settings.exports as PackageJsonExportsObject;\n\n settings.exports = Object.fromEntries(\n Object.keys(unsortedExports)\n .sort()\n .map((k) => [k, unsortedExports[k]]),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context, TaskRunner } from '@ms-cloudpack/api-server';\nimport type { GeneratedConfig, PackageJsonExportsObject } from '@ms-cloudpack/config-types';\nimport type { PackageImporterContext } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { TaskReporter } from '@ms-cloudpack/task-reporter';\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 { bold, bulletedList, formatPackageName, plural } from '@ms-cloudpack/task-reporter';\nimport { InitSummaryData } from './InitSummaryData.js';\nimport { evaluatePath } from './evaluatePath.js';\nimport { verifyExports } from './verifyExports.js';\nimport type { InitContext } from '../../types/CommandAction.js';\nimport path from 'path';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { runPrerequisites } from '../../common/runPrerequisites.js';\n\n/**\n * Init execution function.\n */\nexport async function init(parameters: {\n options: InitOptions;\n contexts: InitContext[];\n autoDispose: AutoDispose;\n reporter: TaskReporter;\n}): Promise<InitSummary[]> {\n const { options, contexts, reporter, autoDispose } = parameters;\n\n const summaries = [];\n\n let taskRunner: TaskRunner | undefined = undefined;\n\n for (const initContext of contexts) {\n const { appPath, config, telemetryClient } = initContext;\n\n // Run prerequisites for the app.\n runPrerequisites(config, appPath);\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 apiContext: Context = await createPartialApiContext({\n appPath,\n config,\n reporter,\n telemetryClient,\n items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n taskRunner,\n });\n taskRunner ??= apiContext.taskRunner;\n autoDispose(apiContext);\n const resolveMap = apiContext.session.resolveMap;\n\n // Ensure config.generated.packageSettings is initialized.\n config.generated.packageSettings ??= [];\n\n const summaryData = new InitSummaryData(appPath);\n\n await new Promise<void>((resolve, reject) => {\n let pending = 0;\n let isExitingPrematurely = false;\n const visitedSet = new Set<string>();\n const refreshPaths = new Set<string>();\n\n // Start with the app path or requested matches\n enqueuePaths(getInitialPaths({ appPath, match: options.match, resolveMap, reporter }));\n\n /**\n * Enqueue more paths.\n * @param newPaths Mapping from package path to importer context.\n */\n function enqueuePaths(newPaths: Map<string, PackageImporterContext | undefined>) {\n if (isExitingPrematurely) {\n return;\n }\n\n // Iterate through the given paths.\n for (const [packagePath, importerContext] of newPaths) {\n if (visitedSet.has(packagePath)) {\n continue;\n }\n\n const shouldForce = refreshPaths.delete(packagePath);\n\n visitedSet.add(packagePath);\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,\n importerContext,\n config,\n telemetryClient,\n resolveMap,\n shouldForce,\n initOptions: options,\n summaryData,\n ctx: apiContext,\n })\n .then(({ pathsToEvaluate, pathsToRefresh, shouldExit }) => {\n pending--;\n\n if (shouldExit) {\n isExitingPrematurely = true;\n } else if (pathsToEvaluate?.size && !options.match) {\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(pathsToEvaluate);\n }\n\n // If nothing is pending after this call, we're complete.\n if (!pending) {\n resolve();\n }\n })\n .catch((error) => {\n reject(error);\n });\n }\n }\n });\n\n if (config.features?.verifyExports) {\n const packageResults = await verifyExports(summaryData.getResults(), apiContext);\n packageResults.forEach((packageResult) => summaryData.recordResult({ packageResult, append: true }));\n }\n\n const summary = summaryData.summarize(options);\n summaries.push(summary);\n\n if (!options.check && summary.totalChanges && config.generated.packageSettings?.length) {\n sortExportKeys(config.generated);\n\n await writeGeneratedConfig(config.generated, appPath);\n }\n\n if (options.logResolveMap) {\n reporter.log('\\nWriting resolve map to `resolve-map.json`.');\n await writeJson(path.join(appPath, 'resolve-map.json'), resolveMap);\n }\n }\n\n return summaries;\n}\n\n/**\n * Get initial package paths to process: either the app path, or packages matching `match` in the init options.\n */\nfunction getInitialPaths(params: {\n appPath: string;\n /** Only evaluate packages matching this string (from init options). */\n match: string | undefined;\n resolveMap: ResolveMap;\n reporter: TaskReporter;\n}): Map<string, PackageImporterContext | undefined> {\n const { appPath, match, resolveMap, reporter } = params;\n\n if (!match) {\n return new Map([[appPath, undefined]]);\n }\n\n // Find matching packages in the resolve map\n const resolveMapEntries = Object.values(resolveMap).filter((entry) => entry.name.includes(match));\n\n reporter.log(\n `\\nFound ${plural(resolveMapEntries.length, 'package')} matching \"${bold(match)}\":\\n`,\n bulletedList(resolveMapEntries.map((entry) => `${formatPackageName(entry)}: ${entry.path}`)),\n );\n\n return new Map(resolveMapEntries.map((entry) => [entry.path, undefined]));\n}\n\nfunction sortExportKeys({ packageSettings = [] }: GeneratedConfig) {\n for (const settings of packageSettings) {\n if (!settings.exports) {\n continue;\n }\n\n const unsortedExports = settings.exports as PackageJsonExportsObject;\n\n settings.exports = Object.fromEntries(\n Object.keys(unsortedExports)\n .sort()\n .map((k) => [k, unsortedExports[k]]),\n );\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { CloudpackConfig } from '@ms-cloudpack/config-types';
2
+ /**
3
+ * Checks if a package should never be excluded.
4
+ * Uses the `neverExcludeDependencies` field in the config or the default list.
5
+ * @param packageName Name of the package to check.
6
+ * @param config Cloudpack configuration.
7
+ * @returns True if the package should never be excluded.
8
+ */
9
+ export declare function neverExclude(packageName: string, config: CloudpackConfig): boolean;
10
+ //# sourceMappingURL=neverExclude.d.ts.map