@ms-cloudpack/cli 0.73.1 → 0.73.3

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.
@@ -49,6 +49,10 @@ export declare class InitSummaryData {
49
49
  * Record more errors for a given package path.
50
50
  */
51
51
  addErrors(packagePath: string, errors: BundleMessage[]): void;
52
+ /**
53
+ * Record more warnings for a given package path.
54
+ */
55
+ addWarnings(packagePath: string, warnings: BundleMessage[]): void;
52
56
  /**
53
57
  * Returns the package results.
54
58
  * @returns The package results.
@@ -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;AAClF,OAAO,KAAK,EACV,iBAAiB,EAGlB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAE3E;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,kEAAkE;IAC3D,sBAAsB,UAAS;IAEtC,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,iBAAiB,CAA0C;IACnE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAU;gBAGtB,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG;QACnC,OAAO,EAAE,MAAM,CAAC;KACjB;IASH;;OAEG;IACI,UAAU,IAAI,OAAO;IAI5B;;OAEG;IACI,YAAY,CACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,IAAI,CAAC,0BAA0B,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC,GAC3G,IAAI;IAYP;;;;OAIG;IACI,eAAe,CAAC,MAAM,EAAE;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,0FAA0F;QAC1F,OAAO,EAAE,MAAM,CAAC;QAChB,4EAA4E;QAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,+EAA+E;QAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;IAUR;;OAEG;IACI,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IASpE;;;OAGG;IACI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAItD;;;OAGG;IACI,sBAAsB,CAAC,UAAU,EAAE,uBAAuB,EAAE,GAAG,IAAI;IAY1E;;OAEG;IACI,SAAS,IAAI,WAAW;CAgDhC"}
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;AAClF,OAAO,KAAK,EACV,iBAAiB,EAGlB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAE3E;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,kEAAkE;IAC3D,sBAAsB,UAAS;IAEtC,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,iBAAiB,CAA0C;IACnE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAU;gBAGtB,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG;QACnC,OAAO,EAAE,MAAM,CAAC;KACjB;IASH;;OAEG;IACI,UAAU,IAAI,OAAO;IAI5B;;OAEG;IACI,YAAY,CACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,IAAI,CAAC,0BAA0B,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC,GAC3G,IAAI;IAYP;;;;OAIG;IACI,eAAe,CAAC,MAAM,EAAE;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,0FAA0F;QAC1F,OAAO,EAAE,MAAM,CAAC;QAChB,4EAA4E;QAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,+EAA+E;QAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;IAUR;;OAEG;IACI,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IASpE;;OAEG;IACI,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI;IASxE;;;OAGG;IACI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAItD;;;OAGG;IACI,sBAAsB,CAAC,UAAU,EAAE,uBAAuB,EAAE,GAAG,IAAI;IAY1E;;OAEG;IACI,SAAS,IAAI,WAAW;CAgDhC"}
@@ -63,6 +63,16 @@ export class InitSummaryData {
63
63
  }
64
64
  packageResult.errors = [...(packageResult.errors || []), ...errors];
65
65
  }
66
+ /**
67
+ * Record more warnings for a given package path.
68
+ */
69
+ addWarnings(packagePath, warnings) {
70
+ const packageResult = this._packageResults[packagePath];
71
+ if (!packageResult) {
72
+ throw new Error(`Package result not found for path ${packagePath}`);
73
+ }
74
+ packageResult.warnings = [...(packageResult.warnings || []), ...warnings];
75
+ }
66
76
  /**
67
77
  * Returns the package results.
68
78
  * @returns The package results.
@@ -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 {\n InitPackageResult,\n InitPackageResultErrors,\n InitPackageResultWarnings,\n} from './types/InitPackageResult.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { BundleMessage } from '@ms-cloudpack/common-types';\nimport { requiredChangeTypes } from './types/GeneratedChange.js';\nimport type { EnsurePackageBundledResult } from '@ms-cloudpack/api-server';\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 * `summarize` method will return the final tally. The resulting `InitSummary` object can be used in the\n * `formatInitSummary` helper to convert it to a string for the user.\n */\nexport class InitSummaryData {\n /** Set this to indicate that the generated config was deleted. */\n public deletedGeneratedConfig = false;\n\n private _packageResults: Record<string, InitPackageResult>;\n private _generatedUpdates: Record<string, GeneratedPackageChanges>;\n private _startTime: number;\n private _appPath: string;\n private _check: boolean;\n\n constructor(\n params: Pick<InitOptions, 'check'> & {\n appPath: string;\n },\n ) {\n this._packageResults = {};\n this._generatedUpdates = {};\n this._startTime = Date.now();\n this._appPath = params.appPath;\n this._check = !!params.check;\n }\n\n /**\n * Returns whether any generated changes have been recorded.\n */\n public hasChanges(): boolean {\n return Object.values(this._generatedUpdates).length > 0;\n }\n\n /**\n * Saves a package result.\n */\n public recordResult(\n packagePath: string,\n result: Pick<EnsurePackageBundledResult, 'name' | 'version' | 'info' | 'outputPath' | 'errors' | 'warnings'>,\n ): void {\n this._packageResults[packagePath] = {\n path: packagePath,\n name: result.name,\n version: result.version,\n info: result.info,\n outputPath: result.outputPath,\n errors: result.errors,\n warnings: result.warnings,\n };\n }\n\n /**\n * Record an exception for a given package path.\n * This creates a bundle message like \"Error thrown while (context): (error)\".\n * (Unlike `addErrors`, this will create an overall package result if one doesn't exist yet.)\n */\n public recordException(params: {\n packagePath: string;\n error: unknown;\n source: string;\n /** Description of the context in which the error was thrown, e.g. \"evaluating package\" */\n context: string;\n /** Package name in case no result has been recorded for this package yet */\n name?: string;\n /** Package version in case no result has been recorded for this package yet */\n version?: string;\n }): void {\n const { packagePath, error, source, context, name = '<unknown>', version = '<unknown>' } = params;\n if (!this._packageResults[packagePath]) {\n this.recordResult(packagePath, { name, version });\n }\n\n const text = `Error thrown while ${context}: ${(error as Error).stack || error}`;\n this.addErrors(packagePath, [{ text, source }]);\n }\n\n /**\n * Record more errors for a given package path.\n */\n public addErrors(packagePath: string, errors: BundleMessage[]): void {\n const packageResult = this._packageResults[packagePath];\n if (!packageResult) {\n throw new Error(`Package result not found for path ${packagePath}`);\n }\n\n packageResult.errors = [...(packageResult.errors || []), ...errors];\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 */\n public recordGeneratedChanges(allChanges: GeneratedPackageChanges[]): void {\n for (const update of allChanges) {\n const { name, version, path, changes } = update;\n // Only record changes if there are any, so that hasChanges() is accurate.\n if (changes.length) {\n const updatesForPackage = (this._generatedUpdates[path] ??= { name, version, path, changes: [] });\n\n updatesForPackage.changes.push(...changes);\n }\n }\n }\n\n /**\n * Returns the summary of the results.\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 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) => requiredChangeTypes[u.type]).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 || (this._check && totalRequiredChanges > 0),\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates: sortedUpdates,\n deletedGeneratedConfig: this.deletedGeneratedConfig,\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 {\n InitPackageResult,\n InitPackageResultErrors,\n InitPackageResultWarnings,\n} from './types/InitPackageResult.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { BundleMessage } from '@ms-cloudpack/common-types';\nimport { requiredChangeTypes } from './types/GeneratedChange.js';\nimport type { EnsurePackageBundledResult } from '@ms-cloudpack/api-server';\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 * `summarize` method will return the final tally. The resulting `InitSummary` object can be used in the\n * `formatInitSummary` helper to convert it to a string for the user.\n */\nexport class InitSummaryData {\n /** Set this to indicate that the generated config was deleted. */\n public deletedGeneratedConfig = false;\n\n private _packageResults: Record<string, InitPackageResult>;\n private _generatedUpdates: Record<string, GeneratedPackageChanges>;\n private _startTime: number;\n private _appPath: string;\n private _check: boolean;\n\n constructor(\n params: Pick<InitOptions, 'check'> & {\n appPath: string;\n },\n ) {\n this._packageResults = {};\n this._generatedUpdates = {};\n this._startTime = Date.now();\n this._appPath = params.appPath;\n this._check = !!params.check;\n }\n\n /**\n * Returns whether any generated changes have been recorded.\n */\n public hasChanges(): boolean {\n return Object.values(this._generatedUpdates).length > 0;\n }\n\n /**\n * Saves a package result.\n */\n public recordResult(\n packagePath: string,\n result: Pick<EnsurePackageBundledResult, 'name' | 'version' | 'info' | 'outputPath' | 'errors' | 'warnings'>,\n ): void {\n this._packageResults[packagePath] = {\n path: packagePath,\n name: result.name,\n version: result.version,\n info: result.info,\n outputPath: result.outputPath,\n errors: result.errors,\n warnings: result.warnings,\n };\n }\n\n /**\n * Record an exception for a given package path.\n * This creates a bundle message like \"Error thrown while (context): (error)\".\n * (Unlike `addErrors`, this will create an overall package result if one doesn't exist yet.)\n */\n public recordException(params: {\n packagePath: string;\n error: unknown;\n source: string;\n /** Description of the context in which the error was thrown, e.g. \"evaluating package\" */\n context: string;\n /** Package name in case no result has been recorded for this package yet */\n name?: string;\n /** Package version in case no result has been recorded for this package yet */\n version?: string;\n }): void {\n const { packagePath, error, source, context, name = '<unknown>', version = '<unknown>' } = params;\n if (!this._packageResults[packagePath]) {\n this.recordResult(packagePath, { name, version });\n }\n\n const text = `Error thrown while ${context}: ${(error as Error).stack || error}`;\n this.addErrors(packagePath, [{ text, source }]);\n }\n\n /**\n * Record more errors for a given package path.\n */\n public addErrors(packagePath: string, errors: BundleMessage[]): void {\n const packageResult = this._packageResults[packagePath];\n if (!packageResult) {\n throw new Error(`Package result not found for path ${packagePath}`);\n }\n\n packageResult.errors = [...(packageResult.errors || []), ...errors];\n }\n\n /**\n * Record more warnings for a given package path.\n */\n public addWarnings(packagePath: string, warnings: BundleMessage[]): void {\n const packageResult = this._packageResults[packagePath];\n if (!packageResult) {\n throw new Error(`Package result not found for path ${packagePath}`);\n }\n\n packageResult.warnings = [...(packageResult.warnings || []), ...warnings];\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 */\n public recordGeneratedChanges(allChanges: GeneratedPackageChanges[]): void {\n for (const update of allChanges) {\n const { name, version, path, changes } = update;\n // Only record changes if there are any, so that hasChanges() is accurate.\n if (changes.length) {\n const updatesForPackage = (this._generatedUpdates[path] ??= { name, version, path, changes: [] });\n\n updatesForPackage.changes.push(...changes);\n }\n }\n }\n\n /**\n * Returns the summary of the results.\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 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) => requiredChangeTypes[u.type]).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 || (this._check && totalRequiredChanges > 0),\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates: sortedUpdates,\n deletedGeneratedConfig: this.deletedGeneratedConfig,\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"evaluatePath.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAI5E,OAAO,EAEL,KAAK,kCAAkC,EACvC,KAAK,iCAAiC,EACvC,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,GACrB,IAAI,CAAC,kCAAkC,EAAE,aAAa,GAAG,iBAAiB,CAAC,GAAG;IAC5E,WAAW,EAAE,OAAO,CAAC;IACrB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;CAClB,EACH,GAAG,EAAE,2BAA2B,GAC/B,OAAO,CACR,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,iBAAiB,GAAG,gBAAgB,CAAC,CAAC,GAAG;IACvF,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CACF,CAwFA"}
1
+ {"version":3,"file":"evaluatePath.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAI5E,OAAO,EAEL,KAAK,kCAAkC,EACvC,KAAK,iCAAiC,EACvC,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,GACrB,IAAI,CAAC,kCAAkC,EAAE,aAAa,GAAG,iBAAiB,CAAC,GAAG;IAC5E,WAAW,EAAE,OAAO,CAAC;IACrB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;CAClB,EACH,GAAG,EAAE,2BAA2B,GAC/B,OAAO,CACR,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,iBAAiB,GAAG,gBAAgB,CAAC,CAAC,GAAG;IACvF,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CACF,CA4FA"}
@@ -37,10 +37,13 @@ export async function evaluatePath(options, ctx) {
37
37
  return {};
38
38
  }
39
39
  // Given the package imports, find the missing exports maps and update packageOverrides.
40
- const { exportsChanges, includedDependenciesChanges, errors: evalErrors, pathsToEvaluate, pathsToRefresh, } = await evaluateImportsForOverrides({ definition, packagePath, info, importerContext }, ctx);
40
+ const { exportsChanges, includedDependenciesChanges, errors: evalErrors, warnings: evalWarnings, pathsToEvaluate, pathsToRefresh, } = await evaluateImportsForOverrides({ definition, packagePath, info, importerContext }, ctx);
41
41
  if (evalErrors.length) {
42
42
  summaryData.addErrors(packagePath, evalErrors);
43
43
  }
44
+ if (evalWarnings.length) {
45
+ summaryData.addWarnings(packagePath, evalWarnings);
46
+ }
44
47
  summaryData.recordGeneratedChanges(exportsChanges);
45
48
  summaryData.recordGeneratedChanges(includedDependenciesChanges);
46
49
  let dynamicImportsChanges = undefined;
@@ -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';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\n\nimport { ensurePackageBundled } from '@ms-cloudpack/api-server';\nimport {\n evaluateImportsForOverrides,\n type EvaluateImportsForOverridesOptions,\n type EvaluateImportsForOverridesResult,\n} from './evaluateImportsForOverrides.js';\nimport { evaluateDynamicImports } from './evaluateDynamicImports.js';\nimport type { InitAppOptions } from './types/InitAppOptions.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(\n options: InitAppOptions &\n Pick<EvaluateImportsForOverridesOptions, 'packagePath' | 'importerContext'> & {\n shouldForce: boolean;\n /** The priority of the package being evaluated. To be used in the task runner. */\n priority: number;\n },\n ctx: EnsurePackageBundledContext,\n): Promise<\n Partial<Pick<EvaluateImportsForOverridesResult, 'pathsToEvaluate' | 'pathsToRefresh'>> & {\n /** Whether a fatal error was encountered. */\n shouldExit?: boolean;\n }\n> {\n const { packagePath, initOptions, span, summaryData, importerContext, shouldForce, isMultiApp, priority } = options;\n const { packages, session } = ctx;\n const { config } = session;\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 console.debug(`Evaluating ${packagePath} with context ${JSON.stringify(importerContext)}`);\n\n // Bundle the package and find the imports it depends on.\n const { result } = await ensurePackageBundled(\n {\n name,\n version,\n isIncremental: false,\n shouldGetBundleInfo: true,\n shouldForce,\n shouldRerun: shouldForce,\n useHashAsId: isMultiApp,\n priority,\n disableCache: !initOptions.cache,\n },\n ctx,\n );\n\n // Record the results for the summary.\n summaryData.recordResult(packagePath, result);\n\n // If there were errors or no imports, return early.\n const { info } = result;\n if (result.errors?.length || !info) {\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({ definition, packagePath, info, importerContext }, ctx);\n\n if (evalErrors.length) {\n summaryData.addErrors(packagePath, evalErrors);\n }\n summaryData.recordGeneratedChanges(exportsChanges);\n summaryData.recordGeneratedChanges(includedDependenciesChanges);\n\n let dynamicImportsChanges: undefined | GeneratedPackageChanges[] = undefined;\n if (features?.evaluateDynamicImports) {\n const dynamicImportsResult = await evaluateDynamicImports({ definition, packagePath, info }, ctx);\n\n dynamicImportsChanges = dynamicImportsResult.dynamicImportsChanges;\n\n summaryData.recordGeneratedChanges(dynamicImportsChanges);\n\n if (dynamicImportsResult.shouldReevaluate) {\n pathsToEvaluate.set(packagePath, importerContext);\n }\n if (dynamicImportsResult.shouldRefresh) {\n pathsToRefresh.add(packagePath);\n }\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 || dynamicImportsChanges?.length)) {\n span.addEvent('INIT_CHECK_FAILED', {\n // Don't log the specific errors to telemetry, as they may contain sensitive information.\n reason: exportsChanges || dynamicImportsChanges ? 'Config needs to be updated.' : 'Errors found with imports.',\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';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\n\nimport { ensurePackageBundled } from '@ms-cloudpack/api-server';\nimport {\n evaluateImportsForOverrides,\n type EvaluateImportsForOverridesOptions,\n type EvaluateImportsForOverridesResult,\n} from './evaluateImportsForOverrides.js';\nimport { evaluateDynamicImports } from './evaluateDynamicImports.js';\nimport type { InitAppOptions } from './types/InitAppOptions.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(\n options: InitAppOptions &\n Pick<EvaluateImportsForOverridesOptions, 'packagePath' | 'importerContext'> & {\n shouldForce: boolean;\n /** The priority of the package being evaluated. To be used in the task runner. */\n priority: number;\n },\n ctx: EnsurePackageBundledContext,\n): Promise<\n Partial<Pick<EvaluateImportsForOverridesResult, 'pathsToEvaluate' | 'pathsToRefresh'>> & {\n /** Whether a fatal error was encountered. */\n shouldExit?: boolean;\n }\n> {\n const { packagePath, initOptions, span, summaryData, importerContext, shouldForce, isMultiApp, priority } = options;\n const { packages, session } = ctx;\n const { config } = session;\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 console.debug(`Evaluating ${packagePath} with context ${JSON.stringify(importerContext)}`);\n\n // Bundle the package and find the imports it depends on.\n const { result } = await ensurePackageBundled(\n {\n name,\n version,\n isIncremental: false,\n shouldGetBundleInfo: true,\n shouldForce,\n shouldRerun: shouldForce,\n useHashAsId: isMultiApp,\n priority,\n disableCache: !initOptions.cache,\n },\n ctx,\n );\n\n // Record the results for the summary.\n summaryData.recordResult(packagePath, result);\n\n // If there were errors or no imports, return early.\n const { info } = result;\n if (result.errors?.length || !info) {\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 warnings: evalWarnings,\n pathsToEvaluate,\n pathsToRefresh,\n } = await evaluateImportsForOverrides({ definition, packagePath, info, importerContext }, ctx);\n\n if (evalErrors.length) {\n summaryData.addErrors(packagePath, evalErrors);\n }\n if (evalWarnings.length) {\n summaryData.addWarnings(packagePath, evalWarnings);\n }\n summaryData.recordGeneratedChanges(exportsChanges);\n summaryData.recordGeneratedChanges(includedDependenciesChanges);\n\n let dynamicImportsChanges: undefined | GeneratedPackageChanges[] = undefined;\n if (features?.evaluateDynamicImports) {\n const dynamicImportsResult = await evaluateDynamicImports({ definition, packagePath, info }, ctx);\n\n dynamicImportsChanges = dynamicImportsResult.dynamicImportsChanges;\n\n summaryData.recordGeneratedChanges(dynamicImportsChanges);\n\n if (dynamicImportsResult.shouldReevaluate) {\n pathsToEvaluate.set(packagePath, importerContext);\n }\n if (dynamicImportsResult.shouldRefresh) {\n pathsToRefresh.add(packagePath);\n }\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 || dynamicImportsChanges?.length)) {\n span.addEvent('INIT_CHECK_FAILED', {\n // Don't log the specific errors to telemetry, as they may contain sensitive information.\n reason: exportsChanges || dynamicImportsChanges ? 'Config needs to be updated.' : 'Errors found with imports.',\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;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,UAAU,mBAAoB,SAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9D,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAyFrE"}
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;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,UAAU,mBAAoB,SAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9D,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAiBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CA0GrE"}
@@ -1,5 +1,17 @@
1
1
  import { bold, bulletedList, cyan, formatTime, green, darkGrey, indent, lightCyan, plural, red, prefixCharacters, yellow, } from '@ms-cloudpack/task-reporter';
2
2
  import { formatLocation } from '@ms-cloudpack/path-utilities';
3
+ const colorsByType = {
4
+ error: red,
5
+ warn: yellow,
6
+ add: (str) => str, // no color
7
+ success: green,
8
+ };
9
+ const statusByType = {
10
+ error: prefixCharacters.error,
11
+ warn: prefixCharacters.warn,
12
+ add: '+',
13
+ success: prefixCharacters.complete,
14
+ };
3
15
  /**
4
16
  * Given a summary and options, returns a formatted string message to display to the user via console.
5
17
  */
@@ -28,25 +40,43 @@ export function formatInitSummary(params) {
28
40
  if (deletedGeneratedConfig) {
29
41
  summaryString.push(`Deleted the ${cyan('cloudpack.generated.json')} file because it is no longer needed.`, '');
30
42
  }
31
- const actualRequiredChanges = check ? totalRequiredChanges : 0;
32
43
  if (totalPackages > 1 || verb === 'init') {
33
44
  const action = verb === 'init' ? 'evaluated' : 'bundled';
45
+ summaryString.push(`${cyan(plural(totalPackages, 'total package'))} ${action} in ${formatTime(summary.duration)}${incompleteText}:`);
34
46
  const errorPkgCount = packagesWithErrors.length;
35
47
  const succesPkgCount = totalPackages - errorPkgCount;
36
- const pkgWarningsMessage = packagesWithWarnings.length
37
- ? ` (${formatCount(packagesWithWarnings.length, 'package', 'with warnings', yellow)})`
38
- : '';
39
- summaryString.push(`${cyan(plural(totalPackages, 'total package'))} ${action} in ${formatTime(summary.duration)}${incompleteText}:`, bulletedList([
40
- formatCount(actualRequiredChanges, 'change', 'required', red),
41
- formatCount(succesPkgCount, 'package', `${action} successfully${pkgWarningsMessage}`, green),
42
- formatCount(errorPkgCount, 'package', 'failed', red),
43
- `Totals: ${formatTotal(totalErrors, 'error', red)}, ${formatTotal(totalWarnings, 'warning', yellow)}`,
44
- ].filter(Boolean)));
48
+ const warningPkgCount = packagesWithWarnings.length;
49
+ const optionalChangesCount = totalChanges - totalRequiredChanges;
50
+ // Add totals. Without --check:
51
+ // ✓ 5 packages evaluated without errors
52
+ // + 2 changes made to generated config
53
+ // ! 3 packages with warnings (5 total warnings)
54
+ // ✗ 1 package with errors (2 total errors)
55
+ // With --check:
56
+ // ✓ 5 packages evaluated without errors
57
+ // ! 2 optional changes could be made to generated config
58
+ // ! 3 packages with warnings (5 total warnings)
59
+ // ✗ 1 required change missing from generated config
60
+ // ✗ 1 package with errors (2 total errors)
61
+ // (bundle will only ever show the main warnings)
62
+ summaryString.push(...[
63
+ // "without errors" because they might have warnings
64
+ formatCount('success', succesPkgCount, 'package', `${action} without errors`),
65
+ // For check, show optional changes as warnings. (required changes will be shown below)
66
+ // If updating, show the total changes made.
67
+ // (these messages won't show for bundle since the change counts there are 0)
68
+ check
69
+ ? formatCount('warn', optionalChangesCount, 'optional change', 'could be made to generated config')
70
+ : formatCount('add', totalChanges, 'change', 'made to generated config'),
71
+ formatCount('warn', warningPkgCount, 'package', 'with warnings', totalWarnings, 'total warning'),
72
+ check && formatCount('error', totalRequiredChanges, 'required change', 'missing from generated config'),
73
+ formatCount('error', errorPkgCount, 'package', 'with errors', totalErrors, 'total error'),
74
+ ].filter(Boolean));
45
75
  }
46
76
  if (isInterrupted) {
47
77
  summaryString.push('', yellow(bold('Process was interrupted before all tasks could complete.')));
48
78
  }
49
- else if (actualRequiredChanges) {
79
+ else if (check && totalRequiredChanges) {
50
80
  summaryString.push(`Run "${yellow('cloudpack init')}" in your application folder to apply changes to the ${cyan('cloudpack.generated.json')} file.`);
51
81
  }
52
82
  // Skip the header if there was nothing to report.
@@ -61,25 +91,29 @@ export function formatInitSummary(params) {
61
91
  .replace(/\n{3,}/g, '\n\n'));
62
92
  }
63
93
  /**
64
- * If `count` is positive, returns a pluralized formatted string like "5 items description"
65
- * (otherwise return undefined). The "5 items" part is formatted with `color`.
66
- */
67
- function formatCount(count, item, description, color) {
68
- return count > 0 ? `${color(plural(count, item))} ${description}` : undefined;
69
- }
70
- /**
71
- * Format a total (e.g. "5 items"). The color is only used if the total is non-zero.
94
+ * If `count > 0`, return a pluralized formatted string like "+ 5 items description"
95
+ * (otherwise ignore). `type` determines the status character used, and the color for the
96
+ * status character and item count.
97
+ *
98
+ * `extraCount` and `extraItem` are optional and will be added to the end in parentheses
99
+ * if both are provided.
72
100
  */
73
- function formatTotal(total, item, color) {
74
- const pluralStr = plural(total, item);
75
- return total ? color(pluralStr) : pluralStr;
101
+ function formatCount(type, count, item, description, extraCount, extraItem) {
102
+ if (count > 0) {
103
+ const color = colorsByType[type];
104
+ const statusChar = bold(color(statusByType[type]));
105
+ const itemCount = color(plural(count, item));
106
+ const extra = extraCount && extraItem ? ` (${plural(extraCount, extraItem)})` : '';
107
+ return ` ${statusChar} ${itemCount} ${description}${extra}`;
108
+ }
109
+ return undefined;
76
110
  }
77
111
  function formatPackageUpdates(params) {
78
112
  const { generatedFileUpdates, check, isInterrupted } = params;
79
113
  const descriptions = {
80
114
  'added-export': `path$s ${check ? 'missing from' : 'added to'} exports map`,
81
115
  'included-dependency-required': 'dependency$s required to be included',
82
- 'changed-export': 'previously unused export path$s are now used',
116
+ 'changed-export': 'previously unused export path(s) are now used',
83
117
  'added-dynamic-import': 'dynamic import$s added',
84
118
  };
85
119
  const summaryString = [];
@@ -127,16 +161,6 @@ function formatPackageResults(params) {
127
161
  }
128
162
  return summaryString.join('\n');
129
163
  }
130
- const colorsByType = {
131
- error: red,
132
- warn: yellow,
133
- add: (str) => str,
134
- };
135
- const statusByType = {
136
- error: prefixCharacters.error,
137
- warn: prefixCharacters.warn,
138
- add: '+',
139
- };
140
164
  /**
141
165
  * Helper to format the header for a list of issues in a package:
142
166
  * status character, `name@version`, issue description, package path.
@@ -1 +1 @@
1
- {"version":3,"file":"formatInitSummary.js","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n bold,\n bulletedList,\n cyan,\n formatTime,\n green,\n darkGrey,\n indent,\n lightCyan,\n plural,\n red,\n prefixCharacters,\n yellow,\n} from '@ms-cloudpack/task-reporter';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\nimport type { InitSummary } from './types/InitSummary.js';\nimport { formatLocation } from '@ms-cloudpack/path-utilities';\nimport type { RequiredGeneratedChangeType } from './types/GeneratedChange.js';\n\ninterface FormatSummaryParams extends Pick<InitOptions, 'check'> {\n summary: InitSummary;\n isMultiApp?: boolean;\n verb: 'init' | 'bundle';\n isInterrupted?: boolean;\n}\n\n/**\n * Given a summary and options, returns a formatted string message to display to the user via console.\n */\nexport function formatInitSummary(params: FormatSummaryParams): string {\n const { summary, check, isInterrupted, isMultiApp, verb } = params;\n const summaryString: string[] = [];\n\n const {\n totalPackages,\n totalErrors,\n totalWarnings,\n totalChanges,\n totalRequiredChanges,\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates,\n deletedGeneratedConfig,\n } = summary;\n\n const incompleteText = isInterrupted ? bold(` (incomplete)`) : ``;\n\n // If there are required changes, updates will be \"made\" or \"needed\" with check,\n // else if the changes are not required, only report work done when updates are \"made\" (check is disabled).\n const updatesRequired = totalRequiredChanges || (totalChanges && !check);\n\n // Report updates that were or should be added to the generated config.\n if (!packagesWithErrors.length && updatesRequired) {\n summaryString.push(formatPackageUpdates({ generatedFileUpdates, check }));\n }\n\n if (!isMultiApp) {\n // Report packages with warnings.\n if (packagesWithWarnings.length) {\n summaryString.push(formatPackageResults({ results: packagesWithWarnings, issueType: 'warn' }), '');\n }\n }\n\n // Report packages with errors.\n if (packagesWithErrors.length) {\n summaryString.push(formatPackageResults({ results: packagesWithErrors, issueType: 'error' }), '');\n }\n\n if (deletedGeneratedConfig) {\n summaryString.push(`Deleted the ${cyan('cloudpack.generated.json')} file because it is no longer needed.`, '');\n }\n\n const actualRequiredChanges = check ? totalRequiredChanges : 0;\n\n if (totalPackages > 1 || verb === 'init') {\n const action = verb === 'init' ? 'evaluated' : 'bundled';\n const errorPkgCount = packagesWithErrors.length;\n const succesPkgCount = totalPackages - errorPkgCount;\n const pkgWarningsMessage = packagesWithWarnings.length\n ? ` (${formatCount(packagesWithWarnings.length, 'package', 'with warnings', yellow)})`\n : '';\n\n summaryString.push(\n `${cyan(plural(totalPackages, 'total package'))} ${action} in ${formatTime(summary.duration)}${incompleteText}:`,\n bulletedList(\n [\n formatCount(actualRequiredChanges, 'change', 'required', red),\n formatCount(succesPkgCount, 'package', `${action} successfully${pkgWarningsMessage}`, green),\n formatCount(errorPkgCount, 'package', 'failed', red),\n `Totals: ${formatTotal(totalErrors, 'error', red)}, ${formatTotal(totalWarnings, 'warning', yellow)}`,\n ].filter(Boolean),\n ),\n );\n }\n\n if (isInterrupted) {\n summaryString.push('', yellow(bold('Process was interrupted before all tasks could complete.')));\n } else if (actualRequiredChanges) {\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 // Skip the header if there was nothing to report.\n if (summaryString.length) {\n // For bundle, we just say \"summary\" since `appPath` might not actually be the path that was bundled.\n summaryString.unshift(bold(`==== ${verb === 'bundle' ? 'Summary' : `Summary for ${summary.appPath}`} ====`));\n summaryString.push('\\n');\n }\n\n return (\n summaryString\n .join('\\n')\n // replace >= 3 newlines with 2 newlines\n .replace(/\\n{3,}/g, '\\n\\n')\n );\n}\n\n/**\n * If `count` is positive, returns a pluralized formatted string like \"5 items description\"\n * (otherwise return undefined). The \"5 items\" part is formatted with `color`.\n */\nfunction formatCount(\n count: number,\n item: string,\n description: string,\n color: (str: string) => string,\n): string | undefined {\n return count > 0 ? `${color(plural(count, item))} ${description}` : undefined;\n}\n\n/**\n * Format a total (e.g. \"5 items\"). The color is only used if the total is non-zero.\n */\nfunction formatTotal(total: number, item: string, color: (str: string) => string): string {\n const pluralStr = plural(total, item);\n return total ? color(pluralStr) : pluralStr;\n}\n\nfunction formatPackageUpdates(\n params: Pick<InitSummary, 'generatedFileUpdates'> & Pick<FormatSummaryParams, 'isInterrupted' | 'check'>,\n): string {\n const { generatedFileUpdates, check, isInterrupted } = params;\n\n const descriptions: Record<RequiredGeneratedChangeType, string> = {\n 'added-export': `path$s ${check ? 'missing from' : 'added to'} exports map`,\n 'included-dependency-required': 'dependency$s required to be included',\n 'changed-export': 'previously unused export path$s are now used',\n 'added-dynamic-import': 'dynamic import$s added',\n };\n\n const summaryString: string[] = [];\n\n for (const packageUpdates of generatedFileUpdates) {\n for (const type of Object.keys(descriptions) as RequiredGeneratedChangeType[]) {\n const typeUpdates = packageUpdates.changes.filter((u) => u.type === type);\n\n if (typeUpdates.length) {\n const description = plural(typeUpdates.length, descriptions[type]);\n // If we already made the updates, don't make them look like warnings.\n const issueType = check ? 'warn' : 'add';\n summaryString.push(\n formatPackageHeader({ ...packageUpdates, issueType, description }),\n bulletedList(typeUpdates.map((u) => `${cyan(u.change)}${u.reason ? ` - ${u.reason}` : ''}`)),\n '',\n );\n }\n }\n }\n\n if (summaryString.length) {\n summaryString.unshift(\n bold(`Updates ${check || isInterrupted ? 'needed for' : 'made to'} ${cyan(`cloudpack.generated.json`)}:\\n`),\n );\n }\n return summaryString.join('\\n');\n}\n\n/** Helper to format `packagesWithWarnings` or `packagesWithErrors`. */\nfunction formatPackageResults(params: { results: InitPackageResult[]; issueType: 'error' | 'warn' }): string {\n const { results, issueType } = params;\n if (!results.length) {\n return '';\n }\n\n const color = colorsByType[issueType];\n const messageType = issueType === 'error' ? 'errors' : 'warnings';\n const statusChar = bold(color(prefixCharacters[issueType]));\n\n const summaryString = [bold(color(`${plural(results.length, 'package')} with ${messageType}:`)), ''];\n\n for (const result of results) {\n const unformattedMessages = result[messageType];\n if (!unformattedMessages?.length) {\n continue;\n }\n\n const description = plural(unformattedMessages.length, messageType.slice(0, -1) + '$s');\n summaryString.push(formatPackageHeader({ ...result, issueType, description }));\n\n const messages = unformattedMessages.map(({ location, text, source }) => {\n // Show the whole path so it can be easily opened with ctrl+click.\n // NOTE: location.file should be relative to the package path, not the app path.\n const filePath = location ? ` ${formatLocation({ ...location, fromPath: result.path })}` : '';\n // Indent the message for readability.\n return `[${source}]${filePath}\\n${color(indent(text, 1))}`;\n });\n\n summaryString.push(bulletedList(messages, undefined, statusChar), '');\n }\n\n return summaryString.join('\\n');\n}\n\nconst colorsByType = {\n error: red,\n warn: yellow,\n add: (str: string) => str,\n};\nconst statusByType = {\n error: prefixCharacters.error,\n warn: prefixCharacters.warn,\n add: '+',\n};\n\n/**\n * Helper to format the header for a list of issues in a package:\n * status character, `name@version`, issue description, package path.\n */\nfunction formatPackageHeader(\n params: InitPackageResult & {\n description: string;\n issueType: 'error' | 'warn' | 'add';\n },\n): string {\n const { name, version, path: packagePath, outputPath, description, issueType } = params;\n const color = colorsByType[issueType];\n const statusChar = bold(color(statusByType[issueType]));\n const packageName = bold(lightCyan(`${name}@${version || `<unknown>`}`));\n\n return (\n `${packageName} - ${packagePath}\\n` +\n (outputPath ? darkGrey(`(output: ${outputPath})\\n`) : '') +\n `${statusChar} ${bold(color(description))}`\n );\n}\n"]}
1
+ {"version":3,"file":"formatInitSummary.js","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n bold,\n bulletedList,\n cyan,\n formatTime,\n green,\n darkGrey,\n indent,\n lightCyan,\n plural,\n red,\n prefixCharacters,\n yellow,\n} from '@ms-cloudpack/task-reporter';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\nimport type { InitSummary } from './types/InitSummary.js';\nimport { formatLocation } from '@ms-cloudpack/path-utilities';\nimport type { RequiredGeneratedChangeType } from './types/GeneratedChange.js';\n\ninterface FormatSummaryParams extends Pick<InitOptions, 'check'> {\n summary: InitSummary;\n isMultiApp?: boolean;\n verb: 'init' | 'bundle';\n isInterrupted?: boolean;\n}\n\n/** Result types with different colors and symbols for logging purposes */\ntype ResultType = 'error' | 'warn' | 'add' | 'success';\nconst colorsByType: Record<ResultType, (str: string) => string> = {\n error: red,\n warn: yellow,\n add: (str) => str, // no color\n success: green,\n};\nconst statusByType: Record<ResultType, string> = {\n error: prefixCharacters.error,\n warn: prefixCharacters.warn,\n add: '+',\n success: prefixCharacters.complete,\n};\n\n/**\n * Given a summary and options, returns a formatted string message to display to the user via console.\n */\nexport function formatInitSummary(params: FormatSummaryParams): string {\n const { summary, check, isInterrupted, isMultiApp, verb } = params;\n const summaryString: string[] = [];\n\n const {\n totalPackages,\n totalErrors,\n totalWarnings,\n totalChanges,\n totalRequiredChanges,\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates,\n deletedGeneratedConfig,\n } = summary;\n\n const incompleteText = isInterrupted ? bold(` (incomplete)`) : ``;\n\n // If there are required changes, updates will be \"made\" or \"needed\" with check,\n // else if the changes are not required, only report work done when updates are \"made\" (check is disabled).\n const updatesRequired = totalRequiredChanges || (totalChanges && !check);\n\n // Report updates that were or should be added to the generated config.\n if (!packagesWithErrors.length && updatesRequired) {\n summaryString.push(formatPackageUpdates({ generatedFileUpdates, check }));\n }\n\n if (!isMultiApp) {\n // Report packages with warnings.\n if (packagesWithWarnings.length) {\n summaryString.push(formatPackageResults({ results: packagesWithWarnings, issueType: 'warn' }), '');\n }\n }\n\n // Report packages with errors.\n if (packagesWithErrors.length) {\n summaryString.push(formatPackageResults({ results: packagesWithErrors, issueType: 'error' }), '');\n }\n\n if (deletedGeneratedConfig) {\n summaryString.push(`Deleted the ${cyan('cloudpack.generated.json')} file because it is no longer needed.`, '');\n }\n\n if (totalPackages > 1 || verb === 'init') {\n const action = verb === 'init' ? 'evaluated' : 'bundled';\n summaryString.push(\n `${cyan(plural(totalPackages, 'total package'))} ${action} in ${formatTime(summary.duration)}${incompleteText}:`,\n );\n\n const errorPkgCount = packagesWithErrors.length;\n const succesPkgCount = totalPackages - errorPkgCount;\n const warningPkgCount = packagesWithWarnings.length;\n const optionalChangesCount = totalChanges - totalRequiredChanges;\n\n // Add totals. Without --check:\n // ✓ 5 packages evaluated without errors\n // + 2 changes made to generated config\n // ! 3 packages with warnings (5 total warnings)\n // ✗ 1 package with errors (2 total errors)\n // With --check:\n // ✓ 5 packages evaluated without errors\n // ! 2 optional changes could be made to generated config\n // ! 3 packages with warnings (5 total warnings)\n // ✗ 1 required change missing from generated config\n // ✗ 1 package with errors (2 total errors)\n // (bundle will only ever show the main warnings)\n summaryString.push(\n ...([\n // \"without errors\" because they might have warnings\n formatCount('success', succesPkgCount, 'package', `${action} without errors`),\n // For check, show optional changes as warnings. (required changes will be shown below)\n // If updating, show the total changes made.\n // (these messages won't show for bundle since the change counts there are 0)\n check\n ? formatCount('warn', optionalChangesCount, 'optional change', 'could be made to generated config')\n : formatCount('add', totalChanges, 'change', 'made to generated config'),\n formatCount('warn', warningPkgCount, 'package', 'with warnings', totalWarnings, 'total warning'),\n check && formatCount('error', totalRequiredChanges, 'required change', 'missing from generated config'),\n formatCount('error', errorPkgCount, 'package', 'with errors', totalErrors, 'total error'),\n ].filter(Boolean) as string[]),\n );\n }\n\n if (isInterrupted) {\n summaryString.push('', yellow(bold('Process was interrupted before all tasks could complete.')));\n } else if (check && totalRequiredChanges) {\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 // Skip the header if there was nothing to report.\n if (summaryString.length) {\n // For bundle, we just say \"summary\" since `appPath` might not actually be the path that was bundled.\n summaryString.unshift(bold(`==== ${verb === 'bundle' ? 'Summary' : `Summary for ${summary.appPath}`} ====`));\n summaryString.push('\\n');\n }\n\n return (\n summaryString\n .join('\\n')\n // replace >= 3 newlines with 2 newlines\n .replace(/\\n{3,}/g, '\\n\\n')\n );\n}\n\n/**\n * If `count > 0`, return a pluralized formatted string like \"+ 5 items description\"\n * (otherwise ignore). `type` determines the status character used, and the color for the\n * status character and item count.\n *\n * `extraCount` and `extraItem` are optional and will be added to the end in parentheses\n * if both are provided.\n */\nfunction formatCount(\n type: ResultType,\n count: number,\n item: string,\n description: string,\n extraCount?: number,\n extraItem?: string,\n): string | undefined {\n if (count > 0) {\n const color = colorsByType[type];\n const statusChar = bold(color(statusByType[type]));\n const itemCount = color(plural(count, item));\n const extra = extraCount && extraItem ? ` (${plural(extraCount, extraItem)})` : '';\n return ` ${statusChar} ${itemCount} ${description}${extra}`;\n }\n return undefined;\n}\n\nfunction formatPackageUpdates(\n params: Pick<InitSummary, 'generatedFileUpdates'> & Pick<FormatSummaryParams, 'isInterrupted' | 'check'>,\n): string {\n const { generatedFileUpdates, check, isInterrupted } = params;\n\n const descriptions: Record<RequiredGeneratedChangeType, string> = {\n 'added-export': `path$s ${check ? 'missing from' : 'added to'} exports map`,\n 'included-dependency-required': 'dependency$s required to be included',\n 'changed-export': 'previously unused export path(s) are now used',\n 'added-dynamic-import': 'dynamic import$s added',\n };\n\n const summaryString: string[] = [];\n\n for (const packageUpdates of generatedFileUpdates) {\n for (const type of Object.keys(descriptions) as RequiredGeneratedChangeType[]) {\n const typeUpdates = packageUpdates.changes.filter((u) => u.type === type);\n\n if (typeUpdates.length) {\n const description = plural(typeUpdates.length, descriptions[type]);\n // If we already made the updates, don't make them look like warnings.\n const issueType = check ? 'warn' : 'add';\n summaryString.push(\n formatPackageHeader({ ...packageUpdates, issueType, description }),\n bulletedList(typeUpdates.map((u) => `${cyan(u.change)}${u.reason ? ` - ${u.reason}` : ''}`)),\n '',\n );\n }\n }\n }\n\n if (summaryString.length) {\n summaryString.unshift(\n bold(`Updates ${check || isInterrupted ? 'needed for' : 'made to'} ${cyan(`cloudpack.generated.json`)}:\\n`),\n );\n }\n return summaryString.join('\\n');\n}\n\n/** Helper to format `packagesWithWarnings` or `packagesWithErrors`. */\nfunction formatPackageResults(params: { results: InitPackageResult[]; issueType: 'error' | 'warn' }): string {\n const { results, issueType } = params;\n if (!results.length) {\n return '';\n }\n\n const color = colorsByType[issueType];\n const messageType = issueType === 'error' ? 'errors' : 'warnings';\n const statusChar = bold(color(prefixCharacters[issueType]));\n\n const summaryString = [bold(color(`${plural(results.length, 'package')} with ${messageType}:`)), ''];\n\n for (const result of results) {\n const unformattedMessages = result[messageType];\n if (!unformattedMessages?.length) {\n continue;\n }\n\n const description = plural(unformattedMessages.length, messageType.slice(0, -1) + '$s');\n summaryString.push(formatPackageHeader({ ...result, issueType, description }));\n\n const messages = unformattedMessages.map(({ location, text, source }) => {\n // Show the whole path so it can be easily opened with ctrl+click.\n // NOTE: location.file should be relative to the package path, not the app path.\n const filePath = location ? ` ${formatLocation({ ...location, fromPath: result.path })}` : '';\n // Indent the message for readability.\n return `[${source}]${filePath}\\n${color(indent(text, 1))}`;\n });\n\n summaryString.push(bulletedList(messages, undefined, statusChar), '');\n }\n\n return summaryString.join('\\n');\n}\n\n/**\n * Helper to format the header for a list of issues in a package:\n * status character, `name@version`, issue description, package path.\n */\nfunction formatPackageHeader(\n params: InitPackageResult & {\n description: string;\n issueType: 'error' | 'warn' | 'add';\n },\n): string {\n const { name, version, path: packagePath, outputPath, description, issueType } = params;\n const color = colorsByType[issueType];\n const statusChar = bold(color(statusByType[issueType]));\n const packageName = bold(lightCyan(`${name}@${version || `<unknown>`}`));\n\n return (\n `${packageName} - ${packagePath}\\n` +\n (outputPath ? darkGrey(`(output: ${outputPath})\\n`) : '') +\n `${statusChar} ${bold(color(description))}`\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/cli",
3
- "version": "0.73.1",
3
+ "version": "0.73.3",
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",
@@ -10,22 +10,22 @@
10
10
  "cloudpack": "./bin/cloudpack.js"
11
11
  },
12
12
  "dependencies": {
13
- "@ms-cloudpack/api-server": "^0.61.30",
14
- "@ms-cloudpack/app-server": "^0.17.83",
15
- "@ms-cloudpack/bundler": "^0.24.25",
13
+ "@ms-cloudpack/api-server": "^0.61.32",
14
+ "@ms-cloudpack/app-server": "^0.17.85",
15
+ "@ms-cloudpack/bundler": "^0.24.27",
16
16
  "@ms-cloudpack/common-types": "^0.24.16",
17
- "@ms-cloudpack/config": "^0.34.0",
17
+ "@ms-cloudpack/config": "^0.34.2",
18
18
  "@ms-cloudpack/environment": "^0.1.1",
19
19
  "@ms-cloudpack/json-utilities": "^0.1.10",
20
- "@ms-cloudpack/link-proxy": "^0.1.2",
21
- "@ms-cloudpack/overlay": "^0.17.163",
22
- "@ms-cloudpack/package-utilities": "^12.3.0",
20
+ "@ms-cloudpack/link-proxy": "^0.1.4",
21
+ "@ms-cloudpack/overlay": "^0.17.165",
22
+ "@ms-cloudpack/package-utilities": "^12.3.2",
23
23
  "@ms-cloudpack/path-string-parsing": "^1.2.7",
24
24
  "@ms-cloudpack/path-utilities": "^3.0.13",
25
- "@ms-cloudpack/remote-cache": "^0.11.8",
25
+ "@ms-cloudpack/remote-cache": "^0.11.10",
26
26
  "@ms-cloudpack/setup-utilities": "^0.5.23",
27
- "@ms-cloudpack/task-reporter": "^0.16.1",
28
- "@ms-cloudpack/telemetry": "^0.11.12",
27
+ "@ms-cloudpack/task-reporter": "^0.16.2",
28
+ "@ms-cloudpack/telemetry": "^0.11.14",
29
29
  "@yarnpkg/lockfile": "^1.1.0",
30
30
  "commander": "^13.0.0",
31
31
  "cross-spawn": "^7.0.3",