@ms-cloudpack/cli 0.73.8 → 0.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,6 +17,8 @@ export interface EvaluateImportsForOverridesResult {
17
17
  exportsChanges: GeneratedPackageChanges[];
18
18
  /** Included dependencies changes made to the generated config */
19
19
  includedDependenciesChanges: GeneratedPackageChanges[];
20
+ /** Required removed excluded dependencies changes made to the generated config */
21
+ removedExcludedDependenciesChanges: GeneratedPackageChanges[];
20
22
  /** Any errors encountered */
21
23
  errors: BundleMessage[];
22
24
  /** 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,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EACtB,WAAW,EAEZ,MAAM,4BAA4B,CAAC;AAcpC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAMlF,MAAM,WAAW,kCAAkC;IACjD,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,IAAI,EAAE,UAAU,CAAC;IACjB,2CAA2C;IAC3C,UAAU,EAAE,WAAW,CAAC;IACxB,uFAAuF;IACvF,eAAe,EAAE,sBAAsB,GAAG,SAAS,CAAC;CACrD;AAED,MAAM,MAAM,kCAAkC,GAAG,cAAc,CAAC,UAAU,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC;AAErG,MAAM,WAAW,iCAAiC;IAChD,kDAAkD;IAClD,cAAc,EAAE,uBAAuB,EAAE,CAAC;IAC1C,iEAAiE;IACjE,2BAA2B,EAAE,uBAAuB,EAAE,CAAC;IACvD,6BAA6B;IAC7B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,6BAA6B;IAC7B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,4EAA4E;IAC5E,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,GAAG,SAAS,CAAC,CAAC;IACjE,6FAA6F;IAC7F,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kCAAkC,EAC3C,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CAAC,iCAAiC,CAAC,CAyR5C"}
1
+ {"version":3,"file":"evaluateImportsForOverrides.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EACtB,WAAW,EAEZ,MAAM,4BAA4B,CAAC;AAcpC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAMlF,MAAM,WAAW,kCAAkC;IACjD,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,IAAI,EAAE,UAAU,CAAC;IACjB,2CAA2C;IAC3C,UAAU,EAAE,WAAW,CAAC;IACxB,uFAAuF;IACvF,eAAe,EAAE,sBAAsB,GAAG,SAAS,CAAC;CACrD;AAED,MAAM,MAAM,kCAAkC,GAAG,cAAc,CAAC,UAAU,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC;AAErG,MAAM,WAAW,iCAAiC;IAChD,kDAAkD;IAClD,cAAc,EAAE,uBAAuB,EAAE,CAAC;IAC1C,iEAAiE;IACjE,2BAA2B,EAAE,uBAAuB,EAAE,CAAC;IACvD,kFAAkF;IAClF,kCAAkC,EAAE,uBAAuB,EAAE,CAAC;IAC9D,6BAA6B;IAC7B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,6BAA6B;IAC7B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,4EAA4E;IAC5E,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,GAAG,SAAS,CAAC,CAAC;IACjE,6FAA6F;IAC7F,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kCAAkC,EAC3C,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CAAC,iCAAiC,CAAC,CAuT5C"}
@@ -23,12 +23,15 @@ export async function evaluateImportsForOverrides(options, context) {
23
23
  }
24
24
  const exportsChanges = [];
25
25
  const includedDependenciesChanges = [];
26
+ const removedExcludedDependenciesChanges = [];
26
27
  const errors = [];
27
28
  const warnings = [];
28
29
  const pathsToEvaluate = new Map();
29
30
  const pathsToRefresh = new Set();
30
31
  const dependencies = getDependencies(definition);
31
32
  const allDependencies = getDependencies(definition, { includeAll: true });
33
+ const originalDefinition = await packages.get(packagePath, { disableTransforms: true });
34
+ const allOriginalDependencies = getDependencies(originalDefinition, { includeAll: true });
32
35
  const consumedPaths = getConsumedPaths(info);
33
36
  const userExcludedDependencies = getPackageSettings({
34
37
  name: packageName,
@@ -69,7 +72,9 @@ export async function evaluateImportsForOverrides(options, context) {
69
72
  if (!dependencies[dependencyName] && dependencyName !== packageName && !neverExclude(dependencyName, config)) {
70
73
  // Survive from the case where it is not a dependency in the package.json
71
74
  // and it is resolvable, but warn the user.
72
- if (!allDependencies[dependencyName]) {
75
+ // The parent if-condition (!dependencies[dependencyName]) already checks if it was added
76
+ // in either user or generated configuration, so we only need to warn for truly undeclared deps.
77
+ if (!allOriginalDependencies[dependencyName]) {
73
78
  warnings.push(getMissingDepMessage({ dependencyName, displayName, issueType: 'undeclared', packagePath }));
74
79
  }
75
80
  // Make sure to add the package to the list of packages to evaluate.
@@ -79,11 +84,27 @@ export async function evaluateImportsForOverrides(options, context) {
79
84
  pathsToEvaluate.set(packagePath, importerContext);
80
85
  // Add to includedDependencies if appropriate.
81
86
  generatedPackageSettings ??= await ensureGeneratedSettingsForPackage({ packagePath }, { config, packages });
82
- // We can skip including the dependency if it is already excluded.
83
- // This will be handled later during optimize dependencies.
84
- const handledByOptimize = generatedPackageSettings.excludedDependencies?.includes(dependencyName);
85
- // Add to includedDependencies if it is not already included.
86
- if (!handledByOptimize && !generatedPackageSettings.includedDependencies?.includes(dependencyName)) {
87
+ const isExcludedDependency = generatedPackageSettings.excludedDependencies?.includes(dependencyName);
88
+ // Excluded dependencies that don't update resolution will be handled later during optimize dependencies.
89
+ if (updatedResolution && isExcludedDependency && generatedPackageSettings.excludedDependencies) {
90
+ const indexOfDependency = generatedPackageSettings.excludedDependencies.indexOf(dependencyName);
91
+ generatedPackageSettings.excludedDependencies.splice(indexOfDependency, 1);
92
+ // Report that we removed a dependency from excluded as it is now imported by the package.
93
+ removedExcludedDependenciesChanges.push({
94
+ name: packageName,
95
+ version: packageVersion,
96
+ path: packagePath,
97
+ changes: [
98
+ {
99
+ type: 'removed-excluded-dependency-required',
100
+ change: dependencyName,
101
+ reason: `Imported by "${displayName}"`,
102
+ },
103
+ ],
104
+ });
105
+ }
106
+ else if (!isExcludedDependency && !generatedPackageSettings.includedDependencies?.includes(dependencyName)) {
107
+ // If the dependency is not excluded, we need to add it to includedDependencies.
87
108
  generatedPackageSettings.includedDependencies ??= [];
88
109
  generatedPackageSettings.includedDependencies.push(dependencyName);
89
110
  includedDependenciesChanges.push({
@@ -92,6 +113,7 @@ export async function evaluateImportsForOverrides(options, context) {
92
113
  path: packagePath,
93
114
  changes: [
94
115
  {
116
+ // If the resolution was updated, this is a required change.
95
117
  type: `included-dependency${updatedResolution ? '-required' : '-optional'}`,
96
118
  change: dependencyName,
97
119
  reason: `Imported by "${displayName}"`,
@@ -238,7 +260,15 @@ export async function evaluateImportsForOverrides(options, context) {
238
260
  }
239
261
  }
240
262
  }
241
- return { exportsChanges, includedDependenciesChanges, errors, warnings, pathsToEvaluate, pathsToRefresh };
263
+ return {
264
+ exportsChanges,
265
+ includedDependenciesChanges,
266
+ removedExcludedDependenciesChanges,
267
+ errors,
268
+ warnings,
269
+ pathsToEvaluate,
270
+ pathsToRefresh,
271
+ };
242
272
  }
243
273
  function getMissingDepMessage(params) {
244
274
  const { dependencyName, displayName, issueType, packagePath } = params;
@@ -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, PartialContext } from '@ms-cloudpack/api-server';\nimport type {\n BundleMessage,\n PackageImporterContext,\n PackageJson,\n GeneratedPackageSettings,\n} from '@ms-cloudpack/common-types';\nimport {\n ensureGeneratedSettingsForPackage,\n getGeneratedPackageSettings,\n getPackageSettings,\n} from '@ms-cloudpack/config';\nimport {\n addExportsMapEntry,\n ensureResolveMapEntry,\n flattenExportsMap,\n getDependencies,\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';\nimport { neverExclude } from './neverExclude.js';\nimport path from 'path';\n\nexport interface EvaluateImportsForOverridesOptions {\n /** Path being evaluated */\n packagePath: string;\n /** Bundle result info for `packagePath` */\n info: BundleInfo;\n /** Package definition for `packagePath` */\n definition: PackageJson;\n /** Info about how the parent package imported `packagePath` (name and version used) */\n importerContext: PackageImporterContext | undefined;\n}\n\nexport type EvaluateImportsForOverridesContext = PartialContext<'packages', 'config' | 'resolveMap'>;\n\nexport interface EvaluateImportsForOverridesResult {\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: BundleMessage[];\n /** Any warnings generated */\n warnings: BundleMessage[];\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\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 *\n * **Mutates `context.session.config.generated.packageSettings` and potentially `context.session.resolveMap`.**\n */\nexport async function evaluateImportsForOverrides(\n options: EvaluateImportsForOverridesOptions,\n context: EvaluateImportsForOverridesContext,\n): Promise<EvaluateImportsForOverridesResult> {\n const { info, definition, packagePath, importerContext } = options;\n const { packages, session } = context;\n const { config, resolveMap } = session;\n const { appPath } = config;\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: BundleMessage[] = [];\n const warnings: BundleMessage[] = [];\n const pathsToEvaluate = new Map<string, PackageImporterContext | undefined>();\n const pathsToRefresh = new Set<string>();\n const dependencies = getDependencies(definition);\n const allDependencies = getDependencies(definition, { includeAll: true });\n const consumedPaths = getConsumedPaths(info);\n const userExcludedDependencies = getPackageSettings({\n name: packageName,\n version: packageVersion,\n userPackageSettings: config.packageSettings,\n generatedPackageSettings: undefined,\n }).userPackageSettings?.excludedDependencies;\n\n let generatedPackageSettings: GeneratedPackageSettings | undefined;\n\n // Iterate through imports and find their path from the resolve map.\n for (const [dependencyName, dependencyImportPaths] of Object.entries(consumedPaths)) {\n // If the dependency is excluded in the user settings, entirely ignore it.\n if (userExcludedDependencies?.includes(dependencyName)) {\n continue;\n }\n\n // Check if we can resolve the dependency.\n let dependencyPath: string | undefined;\n let updatedResolution = false;\n if (dependencyName === packageName) {\n dependencyPath = packagePath;\n } else {\n // If we included or removed an excluded dependency, we need to ensure it is in the resolve map.\n // TODO: this is somewhat broken https://github.com/microsoft/cloudpack/issues/2390\n ({ dependencyPath, updatedResolution } = await ensureResolveMapEntry(\n { definition, packagePath, dependencyName, resolveMap, appPath },\n { packages },\n ));\n }\n\n // If the dependency is not resolved, add an error.\n if (!dependencyPath) {\n errors.push(getMissingDepMessage({ dependencyName, displayName, issueType: 'not-found', packagePath }));\n // If the dependency is not resolved, we can't continue to evaluate it.\n continue;\n }\n\n const dependencyDefinition = await packages.get(dependencyPath);\n\n const { bundlerCapabilities } = dependencyDefinition.cloudpack || {};\n const dependencyResolveWebExtensions =\n // eslint-disable-next-line etc/no-deprecated\n bundlerCapabilities?.['resolve-web-extensions'] ?? Boolean(config.features?.resolveWebExtensions);\n\n // If the dependency is not listed, add to includedDependencies.\n if (!dependencies[dependencyName] && dependencyName !== packageName && !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 (!allDependencies[dependencyName]) {\n warnings.push(getMissingDepMessage({ dependencyName, displayName, issueType: 'undeclared', packagePath }));\n }\n // Make sure to add the package to the list of packages to evaluate.\n // This ensures its PackageJson.cloudpack is updated accounting for the new dependency.\n // TODO could we just refresh the package definition here and skip this step?\n // (does it do anything else besides refreshing the package definition?)\n pathsToEvaluate.set(packagePath, importerContext);\n\n // Add to includedDependencies if appropriate.\n generatedPackageSettings ??= await ensureGeneratedSettingsForPackage({ packagePath }, { config, packages });\n\n // We can skip including the dependency if it is already excluded.\n // This will be handled later during optimize dependencies.\n const handledByOptimize = generatedPackageSettings.excludedDependencies?.includes(dependencyName);\n\n // Add to includedDependencies if it is not already included.\n if (!handledByOptimize && !generatedPackageSettings.includedDependencies?.includes(dependencyName)) {\n generatedPackageSettings.includedDependencies ??= [];\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${updatedResolution ? '-required' : '-optional'}`,\n change: dependencyName,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n }\n }\n\n const { version } = dependencyDefinition;\n\n // Ensure we use the correct context when evaluating this dependency.\n let dependencyImporterContext: PackageImporterContext | undefined;\n if (dependencyName === packageName) {\n // Self-import (we may still need to evaluate the paths). Use the importer context from options.\n dependencyImporterContext = importerContext;\n } else if (allDependencies[dependencyName]) {\n dependencyImporterContext = {\n parentName: packageName,\n parentVersion: packageVersion,\n importedName: dependencyName,\n // TODO should this use the original version requirement even for dev deps (which might not\n // be installed at that version)?\n versionRequirement: allDependencies[dependencyName],\n };\n }\n\n // Add the dependency to the list of packages to evaluate.\n pathsToEvaluate.set(dependencyPath, dependencyImporterContext);\n\n // A flattened, bundle-able exports map for this dependency, which is \"built up\" over the course of bundling.\n const workingDependencyExportsList = flattenExportsMap(\n await getExportsMap({ packagePath: dependencyPath }, { packages, config }),\n );\n // The official list of exports claimed by this dependency -- used to determine which exports are never used, so we can drop them.\n const canonicalDependencyExports = flattenExportsMap(\n await getExportsMap(\n { packagePath: dependencyPath, disableTransforms: true, resolveWebExtensions: dependencyResolveWebExtensions },\n { packages, config },\n ),\n );\n\n const initiallyNullExports = getGeneratedPackageSettings({\n name: dependencyName,\n version,\n // Use the generated snapshot to get the previous package settings.\n generatedPackageSettings: config.generatedSnapshot?.packageSettings,\n })?.exports;\n\n let dependencyGeneratedPackageSettings: GeneratedPackageSettings | undefined;\n // iterate through all the import paths.\n for (const dependencyImportPath of dependencyImportPaths) {\n // Imports from paths with trailing slashes are not supported in the exports map.\n if (dependencyImportPath.endsWith('/')) {\n errors.push({\n text: `The import path \"${dependencyImportPath}\" from \"${dependencyName}\" has a trailing slash, which is not supported.`,\n source: 'evaluate imports',\n location: { file: packagePath },\n });\n continue;\n }\n\n if (!config.features?.removeUnusedExports) {\n const dependencyAlreadyBundled = workingDependencyExportsList[dependencyImportPath];\n if (dependencyAlreadyBundled) {\n continue;\n }\n }\n\n if (!dependencyGeneratedPackageSettings) {\n // Start with the package's exports all set to null (indicating they are never imported)\n // If this changes, we'll update the generatedPackageSetting accordingly later.\n const nullifiedExports = config.features?.removeUnusedExports\n ? Object.fromEntries(Object.keys(canonicalDependencyExports).map((k) => [k, null]))\n : {};\n\n dependencyGeneratedPackageSettings = await ensureGeneratedSettingsForPackage(\n {\n packagePath: dependencyPath,\n defaultExportsMap: Object.keys(nullifiedExports).length > 0 ? nullifiedExports : undefined,\n },\n { config, packages },\n );\n }\n\n if (config.features?.removeUnusedExports) {\n const importHasCorrespondingExport = !!canonicalDependencyExports[dependencyImportPath];\n if (importHasCorrespondingExport) {\n // We're about to remove a null export. Before we do, check if it was initially null in\n // the generated config; if so, we need to track the change so that --check exits correctly\n if (dependencyImportPath in (initiallyNullExports || {})) {\n exportsChanges.push({\n name: dependencyName,\n version: dependencyDefinition.version,\n path: dependencyPath,\n changes: [\n {\n type: 'changed-export',\n change: dependencyImportPath,\n reason: `\"${dependencyImportPath}\" was previously an unused export; is now used.`,\n },\n ],\n });\n }\n\n // Since dependencyImportPath is used (and presently set to null),\n // and since we now know it has a corresponding export,\n // delete it from generatePackageSettings.exports so it doesn't get dropped from the bundle\n let deleteSucceeded = false;\n if (\n dependencyGeneratedPackageSettings.exports &&\n dependencyImportPath in dependencyGeneratedPackageSettings.exports\n ) {\n deleteSucceeded = true;\n delete dependencyGeneratedPackageSettings.exports[dependencyImportPath];\n }\n\n if (deleteSucceeded) {\n // If there was actually an export to delete, mark this path for re-evaluation.\n pathsToRefresh.add(dependencyPath);\n\n // Delete the entire exports key if it now has zero entries\n if (Object.keys(dependencyGeneratedPackageSettings.exports ?? {}).length === 0) {\n delete dependencyGeneratedPackageSettings.exports;\n }\n }\n continue;\n }\n }\n\n const dependencyAlreadyBundled = workingDependencyExportsList[dependencyImportPath];\n if (dependencyAlreadyBundled) {\n continue;\n }\n\n dependencyGeneratedPackageSettings.exports ??= {};\n\n const addedEntry = await addExportsMapEntry(\n {\n exports: dependencyGeneratedPackageSettings.exports,\n packagePath: dependencyPath,\n importPath: dependencyImportPath,\n resolveWebExtensions: dependencyResolveWebExtensions,\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 text =\n `An import couldn't be resolved to a physical file. ` +\n `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 `Resolved to: ${dependencyName}@${version} (${dependencyImportPath})`,\n ],\n 2,\n )}`;\n errors.push({\n text,\n source: 'evaluate imports',\n location: { file: packagePath },\n });\n }\n }\n }\n\n return { exportsChanges, includedDependenciesChanges, errors, warnings, pathsToEvaluate, pathsToRefresh };\n}\n\nfunction getMissingDepMessage(params: {\n dependencyName: string;\n displayName: string;\n issueType: 'not-found' | 'undeclared';\n packagePath: string;\n}): BundleMessage {\n const { dependencyName, displayName, issueType, packagePath } = params;\n\n let text: string;\n if (isBuiltin(dependencyName)) {\n text =\n `The node built-in \"${dependencyName}\" is being imported by \"${displayName}\", ` +\n `but no browser-friendly version was found in the package's dependencies. ` +\n `This can be fixed by forcing \"${displayName}\" to use \"bundler\": \"rollup\" in package settings, ` +\n `or by adding a polyfill browser-friendly dependency.`;\n } else {\n text = `The package \"${dependencyName}\" is imported by \"${displayName}\", but ${\n issueType === 'not-found' ? \"it couldn't be found\" : \"it's not included in the package's dependencies\"\n }. Please ensure that \"${dependencyName}\" is listed in the dependencies of \"${displayName}\"${\n issueType === 'undeclared' ? ` or add it to \"includedDependencies\" for \"${displayName}\" in package settings.` : ''\n }.`;\n }\n\n return {\n text,\n source: 'evaluate imports',\n location: { file: path.join(packagePath, 'package.json') },\n };\n}\n"]}
1
+ {"version":3,"file":"evaluateImportsForOverrides.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,iCAAiC,EACjC,2BAA2B,EAC3B,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,aAAa,GACd,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAEjE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,IAAI,MAAM,MAAM,CAAC;AAgCxB;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,OAA2C,EAC3C,OAA2C;IAE3C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IACnE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAE3B,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC;IAClE,MAAM,WAAW,GAAG,GAAG,WAAW,IAAI,cAAc,EAAE,CAAC;IACvD,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,YAAY,WAAW,iCAAiC,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,cAAc,GAA8B,EAAE,CAAC;IACrD,MAAM,2BAA2B,GAA8B,EAAE,CAAC;IAClE,MAAM,kCAAkC,GAA8B,EAAE,CAAC;IACzE,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,eAAe,GAAG,IAAI,GAAG,EAA8C,CAAC;IAC9E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,eAAe,GAAG,eAAe,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,kBAAkB,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,MAAM,uBAAuB,GAAG,eAAe,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1F,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;QAClD,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;QACvB,mBAAmB,EAAE,MAAM,CAAC,eAAe;QAC3C,wBAAwB,EAAE,SAAS;KACpC,CAAC,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;IAE7C,IAAI,wBAA8D,CAAC;IAEnE,oEAAoE;IACpE,KAAK,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACpF,0EAA0E;QAC1E,IAAI,wBAAwB,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACvD,SAAS;QACX,CAAC;QAED,0CAA0C;QAC1C,IAAI,cAAkC,CAAC;QACvC,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAC9B,IAAI,cAAc,KAAK,WAAW,EAAE,CAAC;YACnC,cAAc,GAAG,WAAW,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,gGAAgG;YAChG,mFAAmF;YACnF,CAAC,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,MAAM,qBAAqB,CAClE,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,EAChE,EAAE,QAAQ,EAAE,CACb,CAAC,CAAC;QACL,CAAC;QAED,mDAAmD;QACnD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YACxG,uEAAuE;YACvE,SAAS;QACX,CAAC;QAED,MAAM,oBAAoB,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAEhE,MAAM,EAAE,mBAAmB,EAAE,GAAG,oBAAoB,CAAC,SAAS,IAAI,EAAE,CAAC;QACrE,MAAM,8BAA8B;QAClC,6CAA6C;QAC7C,mBAAmB,EAAE,CAAC,wBAAwB,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;QAEpG,gEAAgE;QAChE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,cAAc,KAAK,WAAW,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7G,yEAAyE;YACzE,2CAA2C;YAC3C,yFAAyF;YACzF,gGAAgG;YAChG,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC7C,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YAC7G,CAAC;YACD,oEAAoE;YACpE,uFAAuF;YACvF,6EAA6E;YAC7E,wEAAwE;YACxE,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YAElD,8CAA8C;YAC9C,wBAAwB,KAAK,MAAM,iCAAiC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE5G,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;YAErG,yGAAyG;YACzG,IAAI,iBAAiB,IAAI,oBAAoB,IAAI,wBAAwB,CAAC,oBAAoB,EAAE,CAAC;gBAC/F,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,oBAAoB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAChG,wBAAwB,CAAC,oBAAoB,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;gBAE3E,0FAA0F;gBAC1F,kCAAkC,CAAC,IAAI,CAAC;oBACtC,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,cAAc;oBACvB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,sCAAsC;4BAC5C,MAAM,EAAE,cAAc;4BACtB,MAAM,EAAE,gBAAgB,WAAW,GAAG;yBACvC;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,CAAC,oBAAoB,IAAI,CAAC,wBAAwB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC7G,gFAAgF;gBAChF,wBAAwB,CAAC,oBAAoB,KAAK,EAAE,CAAC;gBACrD,wBAAwB,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAEnE,2BAA2B,CAAC,IAAI,CAAC;oBAC/B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,cAAc;oBACvB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE;wBACP;4BACE,4DAA4D;4BAC5D,IAAI,EAAE,sBAAsB,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE;4BAC3E,MAAM,EAAE,cAAc;4BACtB,MAAM,EAAE,gBAAgB,WAAW,GAAG;yBACvC;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC;QAEzC,qEAAqE;QACrE,IAAI,yBAA6D,CAAC;QAClE,IAAI,cAAc,KAAK,WAAW,EAAE,CAAC;YACnC,gGAAgG;YAChG,yBAAyB,GAAG,eAAe,CAAC;QAC9C,CAAC;aAAM,IAAI,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;YAC3C,yBAAyB,GAAG;gBAC1B,UAAU,EAAE,WAAW;gBACvB,aAAa,EAAE,cAAc;gBAC7B,YAAY,EAAE,cAAc;gBAC5B,2FAA2F;gBAC3F,iCAAiC;gBACjC,kBAAkB,EAAE,eAAe,CAAC,cAAc,CAAC;aACpD,CAAC;QACJ,CAAC;QAED,0DAA0D;QAC1D,eAAe,CAAC,GAAG,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC;QAE/D,6GAA6G;QAC7G,MAAM,4BAA4B,GAAG,iBAAiB,CACpD,MAAM,aAAa,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAC3E,CAAC;QACF,kIAAkI;QAClI,MAAM,0BAA0B,GAAG,iBAAiB,CAClD,MAAM,aAAa,CACjB,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,IAAI,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,EAC9G,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CACF,CAAC;QAEF,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;YACvD,IAAI,EAAE,cAAc;YACpB,OAAO;YACP,mEAAmE;YACnE,wBAAwB,EAAE,MAAM,CAAC,iBAAiB,EAAE,eAAe;SACpE,CAAC,EAAE,OAAO,CAAC;QAEZ,IAAI,kCAAwE,CAAC;QAC7E,wCAAwC;QACxC,KAAK,MAAM,oBAAoB,IAAI,qBAAqB,EAAE,CAAC;YACzD,iFAAiF;YACjF,IAAI,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,oBAAoB,oBAAoB,WAAW,cAAc,iDAAiD;oBACxH,MAAM,EAAE,kBAAkB;oBAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;iBAChC,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;gBAC1C,MAAM,wBAAwB,GAAG,4BAA4B,CAAC,oBAAoB,CAAC,CAAC;gBACpF,IAAI,wBAAwB,EAAE,CAAC;oBAC7B,SAAS;gBACX,CAAC;YACH,CAAC;YAED,IAAI,CAAC,kCAAkC,EAAE,CAAC;gBACxC,wFAAwF;gBACxF,+EAA+E;gBAC/E,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,mBAAmB;oBAC3D,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;oBACnF,CAAC,CAAC,EAAE,CAAC;gBAEP,kCAAkC,GAAG,MAAM,iCAAiC,CAC1E;oBACE,WAAW,EAAE,cAAc;oBAC3B,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;iBAC3F,EACD,EAAE,MAAM,EAAE,QAAQ,EAAE,CACrB,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,CAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;gBACzC,MAAM,4BAA4B,GAAG,CAAC,CAAC,0BAA0B,CAAC,oBAAoB,CAAC,CAAC;gBACxF,IAAI,4BAA4B,EAAE,CAAC;oBACjC,uFAAuF;oBACvF,2FAA2F;oBAC3F,IAAI,oBAAoB,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,EAAE,CAAC;wBACzD,cAAc,CAAC,IAAI,CAAC;4BAClB,IAAI,EAAE,cAAc;4BACpB,OAAO,EAAE,oBAAoB,CAAC,OAAO;4BACrC,IAAI,EAAE,cAAc;4BACpB,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,gBAAgB;oCACtB,MAAM,EAAE,oBAAoB;oCAC5B,MAAM,EAAE,IAAI,oBAAoB,iDAAiD;iCAClF;6BACF;yBACF,CAAC,CAAC;oBACL,CAAC;oBAED,kEAAkE;oBAClE,uDAAuD;oBACvD,2FAA2F;oBAC3F,IAAI,eAAe,GAAG,KAAK,CAAC;oBAC5B,IACE,kCAAkC,CAAC,OAAO;wBAC1C,oBAAoB,IAAI,kCAAkC,CAAC,OAAO,EAClE,CAAC;wBACD,eAAe,GAAG,IAAI,CAAC;wBACvB,OAAO,kCAAkC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;oBAC1E,CAAC;oBAED,IAAI,eAAe,EAAE,CAAC;wBACpB,+EAA+E;wBAC/E,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;wBAEnC,2DAA2D;wBAC3D,IAAI,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAC/E,OAAO,kCAAkC,CAAC,OAAO,CAAC;wBACpD,CAAC;oBACH,CAAC;oBACD,SAAS;gBACX,CAAC;YACH,CAAC;YAED,MAAM,wBAAwB,GAAG,4BAA4B,CAAC,oBAAoB,CAAC,CAAC;YACpF,IAAI,wBAAwB,EAAE,CAAC;gBAC7B,SAAS;YACX,CAAC;YAED,kCAAkC,CAAC,OAAO,KAAK,EAAE,CAAC;YAElD,MAAM,UAAU,GAAG,MAAM,kBAAkB,CACzC;gBACE,OAAO,EAAE,kCAAkC,CAAC,OAAO;gBACnD,WAAW,EAAE,cAAc;gBAC3B,UAAU,EAAE,oBAAoB;gBAChC,oBAAoB,EAAE,8BAA8B;aACrD,EACD,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;YAEF,IAAI,UAAU,EAAE,CAAC;gBACf,cAAc,CAAC,IAAI,CAAC;oBAClB,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,oBAAoB,CAAC,OAAO;oBACrC,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,cAAc;4BACpB,MAAM,EAAE,oBAAoB;4BAC5B,MAAM,EAAE,gBAAgB,WAAW,GAAG;yBACvC;qBACF;iBACF,CAAC,CAAC;gBAEH,2FAA2F;gBAC3F,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GACR,qDAAqD;oBACrD,wFAAwF,IAAI,CAC1F,cAAc,CACf,6DAA6D,YAAY,CACxE;wBACE,WAAW,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE;wBACpE,gBAAgB,cAAc,IAAI,OAAO,KAAK,oBAAoB,GAAG;qBACtE,EACD,CAAC,CACF,EAAE,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI;oBACJ,MAAM,EAAE,kBAAkB;oBAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;iBAChC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,cAAc;QACd,2BAA2B;QAC3B,kCAAkC;QAClC,MAAM;QACN,QAAQ;QACR,eAAe;QACf,cAAc;KACf,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,MAK7B;IACC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAEvE,IAAI,IAAY,CAAC;IACjB,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QAC9B,IAAI;YACF,sBAAsB,cAAc,2BAA2B,WAAW,KAAK;gBAC/E,2EAA2E;gBAC3E,iCAAiC,WAAW,oDAAoD;gBAChG,sDAAsD,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,gBAAgB,cAAc,qBAAqB,WAAW,UACnE,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,iDACvD,yBAAyB,cAAc,uCAAuC,WAAW,IACvF,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,6CAA6C,WAAW,wBAAwB,CAAC,CAAC,CAAC,EAClH,GAAG,CAAC;IACN,CAAC;IAED,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,kBAAkB;QAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE;KAC3D,CAAC;AACJ,CAAC","sourcesContent":["import type { BundleInfo, PartialContext } from '@ms-cloudpack/api-server';\nimport type {\n BundleMessage,\n PackageImporterContext,\n PackageJson,\n GeneratedPackageSettings,\n} from '@ms-cloudpack/common-types';\nimport {\n ensureGeneratedSettingsForPackage,\n getGeneratedPackageSettings,\n getPackageSettings,\n} from '@ms-cloudpack/config';\nimport {\n addExportsMapEntry,\n ensureResolveMapEntry,\n flattenExportsMap,\n getDependencies,\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';\nimport { neverExclude } from './neverExclude.js';\nimport path from 'path';\n\nexport interface EvaluateImportsForOverridesOptions {\n /** Path being evaluated */\n packagePath: string;\n /** Bundle result info for `packagePath` */\n info: BundleInfo;\n /** Package definition for `packagePath` */\n definition: PackageJson;\n /** Info about how the parent package imported `packagePath` (name and version used) */\n importerContext: PackageImporterContext | undefined;\n}\n\nexport type EvaluateImportsForOverridesContext = PartialContext<'packages', 'config' | 'resolveMap'>;\n\nexport interface EvaluateImportsForOverridesResult {\n /** Export changes made to the generated config */\n exportsChanges: GeneratedPackageChanges[];\n /** Included dependencies changes made to the generated config */\n includedDependenciesChanges: GeneratedPackageChanges[];\n /** Required removed excluded dependencies changes made to the generated config */\n removedExcludedDependenciesChanges: GeneratedPackageChanges[];\n /** Any errors encountered */\n errors: BundleMessage[];\n /** Any warnings generated */\n warnings: BundleMessage[];\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\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 *\n * **Mutates `context.session.config.generated.packageSettings` and potentially `context.session.resolveMap`.**\n */\nexport async function evaluateImportsForOverrides(\n options: EvaluateImportsForOverridesOptions,\n context: EvaluateImportsForOverridesContext,\n): Promise<EvaluateImportsForOverridesResult> {\n const { info, definition, packagePath, importerContext } = options;\n const { packages, session } = context;\n const { config, resolveMap } = session;\n const { appPath } = config;\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 removedExcludedDependenciesChanges: GeneratedPackageChanges[] = [];\n const errors: BundleMessage[] = [];\n const warnings: BundleMessage[] = [];\n const pathsToEvaluate = new Map<string, PackageImporterContext | undefined>();\n const pathsToRefresh = new Set<string>();\n const dependencies = getDependencies(definition);\n const allDependencies = getDependencies(definition, { includeAll: true });\n const originalDefinition = await packages.get(packagePath, { disableTransforms: true });\n const allOriginalDependencies = getDependencies(originalDefinition, { includeAll: true });\n const consumedPaths = getConsumedPaths(info);\n const userExcludedDependencies = getPackageSettings({\n name: packageName,\n version: packageVersion,\n userPackageSettings: config.packageSettings,\n generatedPackageSettings: undefined,\n }).userPackageSettings?.excludedDependencies;\n\n let generatedPackageSettings: GeneratedPackageSettings | undefined;\n\n // Iterate through imports and find their path from the resolve map.\n for (const [dependencyName, dependencyImportPaths] of Object.entries(consumedPaths)) {\n // If the dependency is excluded in the user settings, entirely ignore it.\n if (userExcludedDependencies?.includes(dependencyName)) {\n continue;\n }\n\n // Check if we can resolve the dependency.\n let dependencyPath: string | undefined;\n let updatedResolution = false;\n if (dependencyName === packageName) {\n dependencyPath = packagePath;\n } else {\n // If we included or removed an excluded dependency, we need to ensure it is in the resolve map.\n // TODO: this is somewhat broken https://github.com/microsoft/cloudpack/issues/2390\n ({ dependencyPath, updatedResolution } = await ensureResolveMapEntry(\n { definition, packagePath, dependencyName, resolveMap, appPath },\n { packages },\n ));\n }\n\n // If the dependency is not resolved, add an error.\n if (!dependencyPath) {\n errors.push(getMissingDepMessage({ dependencyName, displayName, issueType: 'not-found', packagePath }));\n // If the dependency is not resolved, we can't continue to evaluate it.\n continue;\n }\n\n const dependencyDefinition = await packages.get(dependencyPath);\n\n const { bundlerCapabilities } = dependencyDefinition.cloudpack || {};\n const dependencyResolveWebExtensions =\n // eslint-disable-next-line etc/no-deprecated\n bundlerCapabilities?.['resolve-web-extensions'] ?? Boolean(config.features?.resolveWebExtensions);\n\n // If the dependency is not listed, add to includedDependencies.\n if (!dependencies[dependencyName] && dependencyName !== packageName && !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 // The parent if-condition (!dependencies[dependencyName]) already checks if it was added\n // in either user or generated configuration, so we only need to warn for truly undeclared deps.\n if (!allOriginalDependencies[dependencyName]) {\n warnings.push(getMissingDepMessage({ dependencyName, displayName, issueType: 'undeclared', packagePath }));\n }\n // Make sure to add the package to the list of packages to evaluate.\n // This ensures its PackageJson.cloudpack is updated accounting for the new dependency.\n // TODO could we just refresh the package definition here and skip this step?\n // (does it do anything else besides refreshing the package definition?)\n pathsToEvaluate.set(packagePath, importerContext);\n\n // Add to includedDependencies if appropriate.\n generatedPackageSettings ??= await ensureGeneratedSettingsForPackage({ packagePath }, { config, packages });\n\n const isExcludedDependency = generatedPackageSettings.excludedDependencies?.includes(dependencyName);\n\n // Excluded dependencies that don't update resolution will be handled later during optimize dependencies.\n if (updatedResolution && isExcludedDependency && generatedPackageSettings.excludedDependencies) {\n const indexOfDependency = generatedPackageSettings.excludedDependencies.indexOf(dependencyName);\n generatedPackageSettings.excludedDependencies.splice(indexOfDependency, 1);\n\n // Report that we removed a dependency from excluded as it is now imported by the package.\n removedExcludedDependenciesChanges.push({\n name: packageName,\n version: packageVersion,\n path: packagePath,\n changes: [\n {\n type: 'removed-excluded-dependency-required',\n change: dependencyName,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n } else if (!isExcludedDependency && !generatedPackageSettings.includedDependencies?.includes(dependencyName)) {\n // If the dependency is not excluded, we need to add it to includedDependencies.\n generatedPackageSettings.includedDependencies ??= [];\n generatedPackageSettings.includedDependencies.push(dependencyName);\n\n includedDependenciesChanges.push({\n name: packageName,\n version: packageVersion,\n path: packagePath,\n changes: [\n {\n // If the resolution was updated, this is a required change.\n type: `included-dependency${updatedResolution ? '-required' : '-optional'}`,\n change: dependencyName,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n }\n }\n\n const { version } = dependencyDefinition;\n\n // Ensure we use the correct context when evaluating this dependency.\n let dependencyImporterContext: PackageImporterContext | undefined;\n if (dependencyName === packageName) {\n // Self-import (we may still need to evaluate the paths). Use the importer context from options.\n dependencyImporterContext = importerContext;\n } else if (allDependencies[dependencyName]) {\n dependencyImporterContext = {\n parentName: packageName,\n parentVersion: packageVersion,\n importedName: dependencyName,\n // TODO should this use the original version requirement even for dev deps (which might not\n // be installed at that version)?\n versionRequirement: allDependencies[dependencyName],\n };\n }\n\n // Add the dependency to the list of packages to evaluate.\n pathsToEvaluate.set(dependencyPath, dependencyImporterContext);\n\n // A flattened, bundle-able exports map for this dependency, which is \"built up\" over the course of bundling.\n const workingDependencyExportsList = flattenExportsMap(\n await getExportsMap({ packagePath: dependencyPath }, { packages, config }),\n );\n // The official list of exports claimed by this dependency -- used to determine which exports are never used, so we can drop them.\n const canonicalDependencyExports = flattenExportsMap(\n await getExportsMap(\n { packagePath: dependencyPath, disableTransforms: true, resolveWebExtensions: dependencyResolveWebExtensions },\n { packages, config },\n ),\n );\n\n const initiallyNullExports = getGeneratedPackageSettings({\n name: dependencyName,\n version,\n // Use the generated snapshot to get the previous package settings.\n generatedPackageSettings: config.generatedSnapshot?.packageSettings,\n })?.exports;\n\n let dependencyGeneratedPackageSettings: GeneratedPackageSettings | undefined;\n // iterate through all the import paths.\n for (const dependencyImportPath of dependencyImportPaths) {\n // Imports from paths with trailing slashes are not supported in the exports map.\n if (dependencyImportPath.endsWith('/')) {\n errors.push({\n text: `The import path \"${dependencyImportPath}\" from \"${dependencyName}\" has a trailing slash, which is not supported.`,\n source: 'evaluate imports',\n location: { file: packagePath },\n });\n continue;\n }\n\n if (!config.features?.removeUnusedExports) {\n const dependencyAlreadyBundled = workingDependencyExportsList[dependencyImportPath];\n if (dependencyAlreadyBundled) {\n continue;\n }\n }\n\n if (!dependencyGeneratedPackageSettings) {\n // Start with the package's exports all set to null (indicating they are never imported)\n // If this changes, we'll update the generatedPackageSetting accordingly later.\n const nullifiedExports = config.features?.removeUnusedExports\n ? Object.fromEntries(Object.keys(canonicalDependencyExports).map((k) => [k, null]))\n : {};\n\n dependencyGeneratedPackageSettings = await ensureGeneratedSettingsForPackage(\n {\n packagePath: dependencyPath,\n defaultExportsMap: Object.keys(nullifiedExports).length > 0 ? nullifiedExports : undefined,\n },\n { config, packages },\n );\n }\n\n if (config.features?.removeUnusedExports) {\n const importHasCorrespondingExport = !!canonicalDependencyExports[dependencyImportPath];\n if (importHasCorrespondingExport) {\n // We're about to remove a null export. Before we do, check if it was initially null in\n // the generated config; if so, we need to track the change so that --check exits correctly\n if (dependencyImportPath in (initiallyNullExports || {})) {\n exportsChanges.push({\n name: dependencyName,\n version: dependencyDefinition.version,\n path: dependencyPath,\n changes: [\n {\n type: 'changed-export',\n change: dependencyImportPath,\n reason: `\"${dependencyImportPath}\" was previously an unused export; is now used.`,\n },\n ],\n });\n }\n\n // Since dependencyImportPath is used (and presently set to null),\n // and since we now know it has a corresponding export,\n // delete it from generatePackageSettings.exports so it doesn't get dropped from the bundle\n let deleteSucceeded = false;\n if (\n dependencyGeneratedPackageSettings.exports &&\n dependencyImportPath in dependencyGeneratedPackageSettings.exports\n ) {\n deleteSucceeded = true;\n delete dependencyGeneratedPackageSettings.exports[dependencyImportPath];\n }\n\n if (deleteSucceeded) {\n // If there was actually an export to delete, mark this path for re-evaluation.\n pathsToRefresh.add(dependencyPath);\n\n // Delete the entire exports key if it now has zero entries\n if (Object.keys(dependencyGeneratedPackageSettings.exports ?? {}).length === 0) {\n delete dependencyGeneratedPackageSettings.exports;\n }\n }\n continue;\n }\n }\n\n const dependencyAlreadyBundled = workingDependencyExportsList[dependencyImportPath];\n if (dependencyAlreadyBundled) {\n continue;\n }\n\n dependencyGeneratedPackageSettings.exports ??= {};\n\n const addedEntry = await addExportsMapEntry(\n {\n exports: dependencyGeneratedPackageSettings.exports,\n packagePath: dependencyPath,\n importPath: dependencyImportPath,\n resolveWebExtensions: dependencyResolveWebExtensions,\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 text =\n `An import couldn't be resolved to a physical file. ` +\n `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 `Resolved to: ${dependencyName}@${version} (${dependencyImportPath})`,\n ],\n 2,\n )}`;\n errors.push({\n text,\n source: 'evaluate imports',\n location: { file: packagePath },\n });\n }\n }\n }\n\n return {\n exportsChanges,\n includedDependenciesChanges,\n removedExcludedDependenciesChanges,\n errors,\n warnings,\n pathsToEvaluate,\n pathsToRefresh,\n };\n}\n\nfunction getMissingDepMessage(params: {\n dependencyName: string;\n displayName: string;\n issueType: 'not-found' | 'undeclared';\n packagePath: string;\n}): BundleMessage {\n const { dependencyName, displayName, issueType, packagePath } = params;\n\n let text: string;\n if (isBuiltin(dependencyName)) {\n text =\n `The node built-in \"${dependencyName}\" is being imported by \"${displayName}\", ` +\n `but no browser-friendly version was found in the package's dependencies. ` +\n `This can be fixed by forcing \"${displayName}\" to use \"bundler\": \"rollup\" in package settings, ` +\n `or by adding a polyfill browser-friendly dependency.`;\n } else {\n text = `The package \"${dependencyName}\" is imported by \"${displayName}\", but ${\n issueType === 'not-found' ? \"it couldn't be found\" : \"it's not included in the package's dependencies\"\n }. Please ensure that \"${dependencyName}\" is listed in the dependencies of \"${displayName}\"${\n issueType === 'undeclared' ? ` or add it to \"includedDependencies\" for \"${displayName}\" in package settings.` : ''\n }.`;\n }\n\n return {\n text,\n source: 'evaluate imports',\n location: { file: path.join(packagePath, 'package.json') },\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,CA4FA"}
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,CA8FA"}
@@ -37,7 +37,7 @@ 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, warnings: evalWarnings, pathsToEvaluate, pathsToRefresh, } = await evaluateImportsForOverrides({ definition, packagePath, info, importerContext }, ctx);
40
+ const { exportsChanges, includedDependenciesChanges, removedExcludedDependenciesChanges, 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
  }
@@ -46,6 +46,7 @@ export async function evaluatePath(options, ctx) {
46
46
  }
47
47
  summaryData.recordGeneratedChanges(exportsChanges);
48
48
  summaryData.recordGeneratedChanges(includedDependenciesChanges);
49
+ summaryData.recordGeneratedChanges(removedExcludedDependenciesChanges);
49
50
  let dynamicImportsChanges = undefined;
50
51
  if (features?.evaluateDynamicImports) {
51
52
  const dynamicImportsResult = await evaluateDynamicImports({ definition, packagePath, info }, ctx);
@@ -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 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
+ {"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 removedExcludedDependenciesChanges,\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 summaryData.recordGeneratedChanges(removedExcludedDependenciesChanges);\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"]}
@@ -136,6 +136,7 @@ function formatPackageUpdates(params) {
136
136
  'included-dependency-required': ['dependency required to be included', 'dependencies required to be included'],
137
137
  'changed-export': ['previously unused export path$s now used'],
138
138
  'added-dynamic-import': ['dynamic import$s added'],
139
+ 'removed-excluded-dependency-required': ['dependency is no longer excluded', 'dependencies are no longer excluded'],
139
140
  };
140
141
  const summaryString = [];
141
142
  for (const packageUpdates of generatedFileUpdates) {
@@ -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 { GeneratedChange, RequiredGeneratedChangeType } from './types/GeneratedChange.js';\n\nexport interface 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/** \"cloudpack.generated.json\" with color */\nconst generatedConfigFile = cyan('cloudpack.generated.json');\n/** \"cloudpack init\" with color and quotes */\nconst cloudpackInit = `\"${yellow('cloudpack init')}\"`;\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 /** Sections of the summary that will be joined with two newlines */\n const summarySections: 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 // With --check, show required changes even if there are errors.\n // Otherwise, skip since they'll be applied automatically once errors are fixed.\n const showRequiredChanges = !!(totalRequiredChanges && (!totalErrors || check));\n\n const incompleteText = isInterrupted ? bold(` (incomplete)`) : ``;\n\n let warnings: string | undefined;\n let generatedChanges: string | undefined;\n\n // In single-app mode, report packages with warnings.\n if (!isMultiApp && packagesWithWarnings.length) {\n warnings = formatPackageResults({ results: packagesWithWarnings, issueType: 'warn' });\n }\n\n // Report required changes if appropriate (see showRequiredChanges)\n if (showRequiredChanges) {\n generatedChanges = formatPackageUpdates({ generatedFileUpdates, check, hasErrors: !!totalErrors });\n }\n\n if (check) {\n // With --check, it's most helpful to show warnings then generated changes. Required changes\n // are errors in that context, and if they're listed above warnings, it's easy to miss them,\n // which might lead to confusion.\n warnings && summarySections.push(warnings);\n generatedChanges && summarySections.push(generatedChanges);\n } else {\n // Without --check, show generated changes first, then warnings. In this case, any generated\n // change listing is just informational (the changes were already made), but the warnings\n // require manual intervention if the user wants to fix them.\n generatedChanges && summarySections.push(generatedChanges);\n warnings && summarySections.push(warnings);\n }\n\n // Report packages with errors.\n if (packagesWithErrors.length) {\n summarySections.push(formatPackageResults({ results: packagesWithErrors, issueType: 'error' }));\n }\n\n if (deletedGeneratedConfig) {\n summarySections.push(`Deleted the ${generatedConfigFile} file because it is no longer needed.`);\n }\n\n if (totalPackages > 1 || verb === 'init') {\n // Report totals\n const action = verb === 'init' ? 'evaluated' : 'bundled';\n const totalLines = [\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 // See snapshots for examples of this output\n totalLines.push(\n ...([\n // \"without errors\" because they might have warnings\n formatCount('success', succesPkgCount, 'package', `${action} without errors`),\n !errorPkgCount &&\n (check\n ? // For --check, only show optional changes if there are no errors, and format the\n // optional changes as warnings. (required changes will be shown below)\n formatCount('warn', optionalChangesCount, 'optional change', 'could be made to generated config')\n : // If updating, show the total changes made.\n formatCount('add', totalChanges, 'change', 'made to generated config')),\n formatCount('warn', warningPkgCount, 'package', 'with warnings', totalWarnings, 'total warning'),\n // For --check, show required changes as errors.\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 if (totalLines.length > 1) {\n // add a colon to the first line if there are other lines\n totalLines[0] += ':';\n }\n\n summarySections.push(totalLines.join('\\n'));\n }\n\n if (isInterrupted) {\n summarySections.push(yellow(bold('Process was interrupted before all tasks could complete.')));\n } else if (check && totalRequiredChanges && !totalErrors) {\n // Skip the instruction to update the generated config if there were errors.\n summarySections.push(\n `Run ${cloudpackInit} in ${summary.appPath} to apply missing changes to the ${generatedConfigFile} file.`,\n );\n }\n\n // Skip the header if there was nothing to report.\n if (summarySections.length) {\n // For bundle, we just say \"summary\" since `appPath` might not actually be the path that was bundled.\n summarySections.unshift(bold(`==== ${verb === 'bundle' ? 'Summary' : `Summary for ${summary.appPath}`} ====`));\n }\n\n const summaryString = summarySections\n .join('\\n\\n')\n // replace >= 3 newlines with 2 newlines\n .replace(/\\n{3,}/g, '\\n\\n');\n // Ensure a final newline for readability, unless it's empty.\n return !summaryString || summaryString.endsWith('\\n') ? summaryString : summaryString + '\\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'> &\n Pick<FormatSummaryParams, 'isInterrupted' | 'check'> & {\n hasErrors: boolean;\n },\n): string {\n const { generatedFileUpdates, check, isInterrupted, hasErrors } = params;\n\n // mapping from change type to [description, optional plural description]\n const descriptions: Record<RequiredGeneratedChangeType, [string, string?]> = {\n 'added-export': [`path$s ${check ? 'missing from' : 'added to'} exports map`],\n 'included-dependency-required': ['dependency required to be included', 'dependencies required to be included'],\n 'changed-export': ['previously unused export path$s now used'],\n 'added-dynamic-import': ['dynamic import$s added'],\n };\n\n const summaryString: string[] = [];\n\n for (const packageUpdates of generatedFileUpdates) {\n // list of update type descriptions and updates of that type\n const updates: [string, GeneratedChange[]][] = [];\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 updates.push([description, typeUpdates]);\n }\n }\n\n if (updates.length) {\n summaryString.push(formatPackageHeader(packageUpdates));\n for (const [description, typeUpdates] of updates) {\n summaryString.push(\n // If updates are required, format them as errors.\n formatPackageSubhead({ issueType: check ? 'error' : 'add', description }),\n bulletedList(typeUpdates.map((u) => `${cyan(u.change)}${u.reason ? ` - ${u.reason}` : ''}`)),\n );\n }\n summaryString.push('');\n }\n }\n\n if (summaryString.length) {\n const needsUpdates = check || isInterrupted;\n const extraInstructions = needsUpdates\n ? hasErrors\n ? `fix errors first, then run ${cloudpackInit}`\n : `run ${cloudpackInit} to fix`\n : '';\n summaryString.unshift(\n bold(`Updates ${needsUpdates ? 'needed for' : 'made to'} ${generatedConfigFile}`) +\n `${extraInstructions ? ` (${extraInstructions})` : ''}:\\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), formatPackageSubhead({ 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 package `name@version` and output path.\n */\nfunction formatPackageHeader(params: InitPackageResult): string {\n const { name, version, path: packagePath, outputPath } = params;\n const packageName = bold(lightCyan(`${name}@${version}`));\n\n return `${packageName} - ${packagePath}${outputPath ? '\\n' + darkGrey(`(output: ${outputPath})`) : ''}`;\n}\n\n/**\n * Add a status character and formatting to the subhead description.\n */\nfunction formatPackageSubhead(params: { description: string; issueType: ResultType }): string {\n const { description, issueType } = params;\n const color = colorsByType[issueType];\n const statusChar = bold(color(statusByType[issueType]));\n return `${statusChar} ${bold(color(description))}`;\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 { GeneratedChange, RequiredGeneratedChangeType } from './types/GeneratedChange.js';\n\nexport interface 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/** \"cloudpack.generated.json\" with color */\nconst generatedConfigFile = cyan('cloudpack.generated.json');\n/** \"cloudpack init\" with color and quotes */\nconst cloudpackInit = `\"${yellow('cloudpack init')}\"`;\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 /** Sections of the summary that will be joined with two newlines */\n const summarySections: 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 // With --check, show required changes even if there are errors.\n // Otherwise, skip since they'll be applied automatically once errors are fixed.\n const showRequiredChanges = !!(totalRequiredChanges && (!totalErrors || check));\n\n const incompleteText = isInterrupted ? bold(` (incomplete)`) : ``;\n\n let warnings: string | undefined;\n let generatedChanges: string | undefined;\n\n // In single-app mode, report packages with warnings.\n if (!isMultiApp && packagesWithWarnings.length) {\n warnings = formatPackageResults({ results: packagesWithWarnings, issueType: 'warn' });\n }\n\n // Report required changes if appropriate (see showRequiredChanges)\n if (showRequiredChanges) {\n generatedChanges = formatPackageUpdates({ generatedFileUpdates, check, hasErrors: !!totalErrors });\n }\n\n if (check) {\n // With --check, it's most helpful to show warnings then generated changes. Required changes\n // are errors in that context, and if they're listed above warnings, it's easy to miss them,\n // which might lead to confusion.\n warnings && summarySections.push(warnings);\n generatedChanges && summarySections.push(generatedChanges);\n } else {\n // Without --check, show generated changes first, then warnings. In this case, any generated\n // change listing is just informational (the changes were already made), but the warnings\n // require manual intervention if the user wants to fix them.\n generatedChanges && summarySections.push(generatedChanges);\n warnings && summarySections.push(warnings);\n }\n\n // Report packages with errors.\n if (packagesWithErrors.length) {\n summarySections.push(formatPackageResults({ results: packagesWithErrors, issueType: 'error' }));\n }\n\n if (deletedGeneratedConfig) {\n summarySections.push(`Deleted the ${generatedConfigFile} file because it is no longer needed.`);\n }\n\n if (totalPackages > 1 || verb === 'init') {\n // Report totals\n const action = verb === 'init' ? 'evaluated' : 'bundled';\n const totalLines = [\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 // See snapshots for examples of this output\n totalLines.push(\n ...([\n // \"without errors\" because they might have warnings\n formatCount('success', succesPkgCount, 'package', `${action} without errors`),\n !errorPkgCount &&\n (check\n ? // For --check, only show optional changes if there are no errors, and format the\n // optional changes as warnings. (required changes will be shown below)\n formatCount('warn', optionalChangesCount, 'optional change', 'could be made to generated config')\n : // If updating, show the total changes made.\n formatCount('add', totalChanges, 'change', 'made to generated config')),\n formatCount('warn', warningPkgCount, 'package', 'with warnings', totalWarnings, 'total warning'),\n // For --check, show required changes as errors.\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 if (totalLines.length > 1) {\n // add a colon to the first line if there are other lines\n totalLines[0] += ':';\n }\n\n summarySections.push(totalLines.join('\\n'));\n }\n\n if (isInterrupted) {\n summarySections.push(yellow(bold('Process was interrupted before all tasks could complete.')));\n } else if (check && totalRequiredChanges && !totalErrors) {\n // Skip the instruction to update the generated config if there were errors.\n summarySections.push(\n `Run ${cloudpackInit} in ${summary.appPath} to apply missing changes to the ${generatedConfigFile} file.`,\n );\n }\n\n // Skip the header if there was nothing to report.\n if (summarySections.length) {\n // For bundle, we just say \"summary\" since `appPath` might not actually be the path that was bundled.\n summarySections.unshift(bold(`==== ${verb === 'bundle' ? 'Summary' : `Summary for ${summary.appPath}`} ====`));\n }\n\n const summaryString = summarySections\n .join('\\n\\n')\n // replace >= 3 newlines with 2 newlines\n .replace(/\\n{3,}/g, '\\n\\n');\n // Ensure a final newline for readability, unless it's empty.\n return !summaryString || summaryString.endsWith('\\n') ? summaryString : summaryString + '\\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'> &\n Pick<FormatSummaryParams, 'isInterrupted' | 'check'> & {\n hasErrors: boolean;\n },\n): string {\n const { generatedFileUpdates, check, isInterrupted, hasErrors } = params;\n\n // mapping from change type to [description, optional plural description]\n const descriptions: Record<RequiredGeneratedChangeType, [string, string?]> = {\n 'added-export': [`path$s ${check ? 'missing from' : 'added to'} exports map`],\n 'included-dependency-required': ['dependency required to be included', 'dependencies required to be included'],\n 'changed-export': ['previously unused export path$s now used'],\n 'added-dynamic-import': ['dynamic import$s added'],\n 'removed-excluded-dependency-required': ['dependency is no longer excluded', 'dependencies are no longer excluded'],\n };\n\n const summaryString: string[] = [];\n\n for (const packageUpdates of generatedFileUpdates) {\n // list of update type descriptions and updates of that type\n const updates: [string, GeneratedChange[]][] = [];\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 updates.push([description, typeUpdates]);\n }\n }\n\n if (updates.length) {\n summaryString.push(formatPackageHeader(packageUpdates));\n for (const [description, typeUpdates] of updates) {\n summaryString.push(\n // If updates are required, format them as errors.\n formatPackageSubhead({ issueType: check ? 'error' : 'add', description }),\n bulletedList(typeUpdates.map((u) => `${cyan(u.change)}${u.reason ? ` - ${u.reason}` : ''}`)),\n );\n }\n summaryString.push('');\n }\n }\n\n if (summaryString.length) {\n const needsUpdates = check || isInterrupted;\n const extraInstructions = needsUpdates\n ? hasErrors\n ? `fix errors first, then run ${cloudpackInit}`\n : `run ${cloudpackInit} to fix`\n : '';\n summaryString.unshift(\n bold(`Updates ${needsUpdates ? 'needed for' : 'made to'} ${generatedConfigFile}`) +\n `${extraInstructions ? ` (${extraInstructions})` : ''}:\\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), formatPackageSubhead({ 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 package `name@version` and output path.\n */\nfunction formatPackageHeader(params: InitPackageResult): string {\n const { name, version, path: packagePath, outputPath } = params;\n const packageName = bold(lightCyan(`${name}@${version}`));\n\n return `${packageName} - ${packagePath}${outputPath ? '\\n' + darkGrey(`(output: ${outputPath})`) : ''}`;\n}\n\n/**\n * Add a status character and formatting to the subhead description.\n */\nfunction formatPackageSubhead(params: { description: string; issueType: ResultType }): string {\n const { description, issueType } = params;\n const color = colorsByType[issueType];\n const statusChar = bold(color(statusByType[issueType]));\n return `${statusChar} ${bold(color(description))}`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"optimizeDependencies.d.ts","sourceRoot":"","sources":["../../../src/commands/init/optimizeDependencies.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAA4B,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC7G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAElF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACjD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;CAClB,GACA,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAmGpC"}
1
+ {"version":3,"file":"optimizeDependencies.d.ts","sourceRoot":"","sources":["../../../src/commands/init/optimizeDependencies.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAA4B,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC7G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAElF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACjD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;CAClB,GACA,OAAO,CAAC,uBAAuB,EAAE,CAAC,CA4FpC"}
@@ -30,10 +30,11 @@ export async function optimizeDependencies(packageResults, context) {
30
30
  let generatedPackageSettings;
31
31
  // Iterate through dependencies and find unused.
32
32
  for (const dependencyName of Object.keys(originalDependencies)) {
33
- if (dependencyName.startsWith('@types/')) {
33
+ if (dependencyName.startsWith('@types/') || neverExclude(dependencyName, config)) {
34
34
  // @types dependencies are never relevant to cloudpack (and getTypesTransform removes them
35
35
  // from consideration in other parts of the code), so adding them to the generated config
36
36
  // excludedDependencies would just add bloat.
37
+ // Or of this dependency is never excluded, so we don't need to do anything.
37
38
  continue;
38
39
  }
39
40
  generatedPackageSettings ||= getGeneratedPackageSettings({
@@ -42,8 +43,7 @@ export async function optimizeDependencies(packageResults, context) {
42
43
  version,
43
44
  });
44
45
  // If this dependency is consumed, make sure it's not excluded and continue.
45
- if (consumedDependencies.has(dependencyName) || neverExclude(dependencyName, config)) {
46
- // Remove from excluded dependencies if it's there.
46
+ if (consumedDependencies.has(dependencyName)) {
47
47
  if (generatedPackageSettings?.excludedDependencies?.includes(dependencyName)) {
48
48
  const indexOfDependency = generatedPackageSettings.excludedDependencies.indexOf(dependencyName);
49
49
  generatedPackageSettings.excludedDependencies.splice(indexOfDependency, 1);
@@ -54,17 +54,12 @@ export async function optimizeDependencies(packageResults, context) {
54
54
  path: packagePath,
55
55
  changes: [
56
56
  {
57
- type: 'removed-excluded-dependency',
57
+ type: 'removed-excluded-dependency-optional',
58
58
  change: dependencyName,
59
59
  reason: `Imported by "${displayName}"`,
60
60
  },
61
61
  ],
62
62
  });
63
- // Clean up excluded dependencies if it's empty.
64
- // We don't need to delete the setting if it's empty, as it will be cleaned up later.
65
- if (generatedPackageSettings.excludedDependencies.length === 0) {
66
- delete generatedPackageSettings.excludedDependencies;
67
- }
68
63
  }
69
64
  continue;
70
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"optimizeDependencies.js","sourceRoot":"","sources":["../../../src/commands/init/optimizeDependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import { ensureGeneratedSettingsForPackage, getGeneratedPackageSettings } from '@ms-cloudpack/config';\nimport { getDependencies } from '@ms-cloudpack/package-utilities';\nimport { getConsumedDependencies } from '@ms-cloudpack/api-server';\nimport type { PackageDefinitionsCache, GeneratedPackageSettings, Session } from '@ms-cloudpack/common-types';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport { neverExclude } from './neverExclude.js';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\n\n/**\n * Optimizes the dependencies of a package to determine if there are any missing or unused.\n * If so, adds the the missing dependencies to included and the unused dependencies to excluded.\n *\n * Returns the list of excluded dependencies added to the generated config.\n */\nexport async function optimizeDependencies(\n packageResults: Record<string, InitPackageResult>,\n context: {\n packages: PackageDefinitionsCache;\n session: Session;\n },\n): Promise<GeneratedPackageChanges[]> {\n const { packages, session } = context;\n const { config } = session;\n const dependenciesChanges: GeneratedPackageChanges[] = [];\n\n // Iterate through each package\n for (const [packagePath, result] of Object.entries(packageResults)) {\n // Skip packages with build errors or no info\n if (!result?.info || result.errors?.length) {\n continue;\n }\n\n const definition = await packages.get(packagePath);\n\n // We must use the name and version of the transformed definition,\n // as that is the one that will be used in the generated config.\n const { name, version } = definition;\n // We need the non-transformed definition to catch inclusions/exclusions on retries.\n const originalDefinition = await packages.get(packagePath, { disableTransforms: true });\n\n const displayName = `${name}@${version}`;\n const originalDependencies = getDependencies(originalDefinition);\n const consumedDependencies = getConsumedDependencies(result.info);\n let generatedPackageSettings: GeneratedPackageSettings | undefined;\n\n // Iterate through dependencies and find unused.\n for (const dependencyName of Object.keys(originalDependencies)) {\n if (dependencyName.startsWith('@types/')) {\n // @types dependencies are never relevant to cloudpack (and getTypesTransform removes them\n // from consideration in other parts of the code), so adding them to the generated config\n // excludedDependencies would just add bloat.\n continue;\n }\n\n generatedPackageSettings ||= getGeneratedPackageSettings({\n generatedPackageSettings: (config.generated.packageSettings ??= []),\n name,\n version,\n });\n\n // If this dependency is consumed, make sure it's not excluded and continue.\n if (consumedDependencies.has(dependencyName) || neverExclude(dependencyName, config)) {\n // Remove from excluded dependencies if it's there.\n if (generatedPackageSettings?.excludedDependencies?.includes(dependencyName)) {\n const indexOfDependency = generatedPackageSettings.excludedDependencies.indexOf(dependencyName);\n generatedPackageSettings.excludedDependencies.splice(indexOfDependency, 1);\n\n // Report that we removed a dependency from excluded as it is now imported by the package.\n dependenciesChanges.push({\n name,\n version,\n path: packagePath,\n changes: [\n {\n type: 'removed-excluded-dependency',\n change: dependencyName,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n\n // Clean up excluded dependencies if it's empty.\n // We don't need to delete the setting if it's empty, as it will be cleaned up later.\n if (generatedPackageSettings.excludedDependencies.length === 0) {\n delete generatedPackageSettings.excludedDependencies;\n }\n }\n\n continue;\n }\n\n // The dep is not consumed. If this dependency is already excluded, continue.\n if (generatedPackageSettings?.excludedDependencies?.includes(dependencyName)) {\n continue;\n }\n\n // Ensure there is a generated settings entry.\n generatedPackageSettings = await ensureGeneratedSettingsForPackage({ packagePath }, { config, packages });\n\n // Ensure there are excluded dependencies.\n generatedPackageSettings.excludedDependencies ??= [];\n generatedPackageSettings.excludedDependencies.push(dependencyName);\n\n dependenciesChanges.push({\n name,\n version,\n path: packagePath,\n changes: [\n {\n type: 'excluded-dependency',\n change: dependencyName,\n reason: `Not imported by \"${displayName}\"`,\n },\n ],\n });\n }\n }\n\n return dependenciesChanges;\n}\n"]}
1
+ {"version":3,"file":"optimizeDependencies.js","sourceRoot":"","sources":["../../../src/commands/init/optimizeDependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import { ensureGeneratedSettingsForPackage, getGeneratedPackageSettings } from '@ms-cloudpack/config';\nimport { getDependencies } from '@ms-cloudpack/package-utilities';\nimport { getConsumedDependencies } from '@ms-cloudpack/api-server';\nimport type { PackageDefinitionsCache, GeneratedPackageSettings, Session } from '@ms-cloudpack/common-types';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport { neverExclude } from './neverExclude.js';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\n\n/**\n * Optimizes the dependencies of a package to determine if there are any missing or unused.\n * If so, adds the the missing dependencies to included and the unused dependencies to excluded.\n *\n * Returns the list of excluded dependencies added to the generated config.\n */\nexport async function optimizeDependencies(\n packageResults: Record<string, InitPackageResult>,\n context: {\n packages: PackageDefinitionsCache;\n session: Session;\n },\n): Promise<GeneratedPackageChanges[]> {\n const { packages, session } = context;\n const { config } = session;\n const dependenciesChanges: GeneratedPackageChanges[] = [];\n\n // Iterate through each package\n for (const [packagePath, result] of Object.entries(packageResults)) {\n // Skip packages with build errors or no info\n if (!result?.info || result.errors?.length) {\n continue;\n }\n\n const definition = await packages.get(packagePath);\n\n // We must use the name and version of the transformed definition,\n // as that is the one that will be used in the generated config.\n const { name, version } = definition;\n // We need the non-transformed definition to catch inclusions/exclusions on retries.\n const originalDefinition = await packages.get(packagePath, { disableTransforms: true });\n\n const displayName = `${name}@${version}`;\n const originalDependencies = getDependencies(originalDefinition);\n const consumedDependencies = getConsumedDependencies(result.info);\n let generatedPackageSettings: GeneratedPackageSettings | undefined;\n\n // Iterate through dependencies and find unused.\n for (const dependencyName of Object.keys(originalDependencies)) {\n if (dependencyName.startsWith('@types/') || neverExclude(dependencyName, config)) {\n // @types dependencies are never relevant to cloudpack (and getTypesTransform removes them\n // from consideration in other parts of the code), so adding them to the generated config\n // excludedDependencies would just add bloat.\n // Or of this dependency is never excluded, so we don't need to do anything.\n continue;\n }\n\n generatedPackageSettings ||= getGeneratedPackageSettings({\n generatedPackageSettings: (config.generated.packageSettings ??= []),\n name,\n version,\n });\n\n // If this dependency is consumed, make sure it's not excluded and continue.\n if (consumedDependencies.has(dependencyName)) {\n if (generatedPackageSettings?.excludedDependencies?.includes(dependencyName)) {\n const indexOfDependency = generatedPackageSettings.excludedDependencies.indexOf(dependencyName);\n generatedPackageSettings.excludedDependencies.splice(indexOfDependency, 1);\n\n // Report that we removed a dependency from excluded as it is now imported by the package.\n dependenciesChanges.push({\n name,\n version,\n path: packagePath,\n changes: [\n {\n type: 'removed-excluded-dependency-optional',\n change: dependencyName,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n }\n continue;\n }\n\n // The dep is not consumed. If this dependency is already excluded, continue.\n if (generatedPackageSettings?.excludedDependencies?.includes(dependencyName)) {\n continue;\n }\n\n // Ensure there is a generated settings entry.\n generatedPackageSettings = await ensureGeneratedSettingsForPackage({ packagePath }, { config, packages });\n\n // Ensure there are excluded dependencies.\n generatedPackageSettings.excludedDependencies ??= [];\n generatedPackageSettings.excludedDependencies.push(dependencyName);\n\n dependenciesChanges.push({\n name,\n version,\n path: packagePath,\n changes: [\n {\n type: 'excluded-dependency',\n change: dependencyName,\n reason: `Not imported by \"${displayName}\"`,\n },\n ],\n });\n }\n }\n\n return dependenciesChanges;\n}\n"]}
@@ -1,5 +1,5 @@
1
- export type RequiredGeneratedChangeType = 'changed-export' | 'added-export' | 'added-dynamic-import' | 'included-dependency-required';
2
- export type GeneratedChangeType = RequiredGeneratedChangeType | 'included-dependency-optional' | 'excluded-dependency' | 'removed-excluded-dependency';
1
+ export type RequiredGeneratedChangeType = 'changed-export' | 'added-export' | 'added-dynamic-import' | 'included-dependency-required' | 'removed-excluded-dependency-required';
2
+ export type GeneratedChangeType = RequiredGeneratedChangeType | 'included-dependency-optional' | 'excluded-dependency' | 'removed-excluded-dependency-optional';
3
3
  export interface GeneratedChange {
4
4
  type: GeneratedChangeType;
5
5
  /** Item that changed, such as the dependency name, export path, or bundler type */
@@ -1 +1 @@
1
- {"version":3,"file":"GeneratedChange.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/GeneratedChange.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,2BAA2B,GACnC,gBAAgB,GAChB,cAAc,GACd,sBAAsB,GACtB,8BAA8B,CAAC;AAEnC,MAAM,MAAM,mBAAmB,GAC3B,2BAA2B,GAC3B,8BAA8B,GAC9B,qBAAqB,GACrB,6BAA6B,CAAC;AAElC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AAGH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAKtB,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAIQ,CAAC"}
1
+ {"version":3,"file":"GeneratedChange.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/GeneratedChange.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,2BAA2B,GAEnC,gBAAgB,GAEhB,cAAc,GAEd,sBAAsB,GAEtB,8BAA8B,GAE9B,sCAAsC,CAAC;AAE3C,MAAM,MAAM,mBAAmB,GAC3B,2BAA2B,GAE3B,8BAA8B,GAE9B,qBAAqB,GAErB,sCAAsC,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AAGH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAMtB,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAIQ,CAAC"}
@@ -9,6 +9,7 @@ export const requiredChangeTypes = {
9
9
  'added-export': true,
10
10
  'added-dynamic-import': true,
11
11
  'included-dependency-required': true,
12
+ 'removed-excluded-dependency-required': true,
12
13
  };
13
14
  /**
14
15
  * Mapping of optional change types to true.
@@ -17,6 +18,6 @@ export const requiredChangeTypes = {
17
18
  export const optionalChangeTypes = {
18
19
  'included-dependency-optional': true,
19
20
  'excluded-dependency': true,
20
- 'removed-excluded-dependency': true,
21
+ 'removed-excluded-dependency-optional': true,
21
22
  };
22
23
  //# sourceMappingURL=GeneratedChange.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeneratedChange.js","sourceRoot":"","sources":["../../../../src/commands/init/types/GeneratedChange.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,uFAAuF;AACvF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,mBAAmB,GAA+C;IAC7E,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,IAAI;IACpB,sBAAsB,EAAE,IAAI;IAC5B,8BAA8B,EAAE,IAAI;CACe,CAAC;AAEtD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA+C;IAC7E,8BAA8B,EAAE,IAAI;IACpC,qBAAqB,EAAE,IAAI;IAC3B,6BAA6B,EAAE,IAAI;CAC8C,CAAC","sourcesContent":["export type RequiredGeneratedChangeType =\n | 'changed-export'\n | 'added-export'\n | 'added-dynamic-import'\n | 'included-dependency-required';\n\nexport type GeneratedChangeType =\n | RequiredGeneratedChangeType\n | 'included-dependency-optional'\n | 'excluded-dependency'\n | 'removed-excluded-dependency';\n\nexport interface GeneratedChange {\n type: GeneratedChangeType;\n /** Item that changed, such as the dependency name, export path, or bundler type */\n change: string;\n /** Additional explanation */\n reason?: string;\n}\n\n/**\n * Mapping of required change types to true.\n * (Keys for non-required change types will be undefined.)\n */\n// It's easier to ensure this stays up to date by using an object rather than an array.\n// Any GeneratedChangeType is allowed as a lookup key to make usage easier.\nexport const requiredChangeTypes: Partial<Record<GeneratedChangeType, true>> = {\n 'changed-export': true,\n 'added-export': true,\n 'added-dynamic-import': true,\n 'included-dependency-required': true,\n} satisfies Record<RequiredGeneratedChangeType, true>;\n\n/**\n * Mapping of optional change types to true.\n * (Keys for required change types will be undefined.)\n */\nexport const optionalChangeTypes: Partial<Record<GeneratedChangeType, true>> = {\n 'included-dependency-optional': true,\n 'excluded-dependency': true,\n 'removed-excluded-dependency': true,\n} satisfies Record<Exclude<GeneratedChangeType, RequiredGeneratedChangeType>, true>;\n"]}
1
+ {"version":3,"file":"GeneratedChange.js","sourceRoot":"","sources":["../../../../src/commands/init/types/GeneratedChange.ts"],"names":[],"mappings":"AA6BA;;;GAGG;AACH,uFAAuF;AACvF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,mBAAmB,GAA+C;IAC7E,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,IAAI;IACpB,sBAAsB,EAAE,IAAI;IAC5B,8BAA8B,EAAE,IAAI;IACpC,sCAAsC,EAAE,IAAI;CACO,CAAC;AAEtD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA+C;IAC7E,8BAA8B,EAAE,IAAI;IACpC,qBAAqB,EAAE,IAAI;IAC3B,sCAAsC,EAAE,IAAI;CACqC,CAAC","sourcesContent":["export type RequiredGeneratedChangeType =\n // If we are changing an export, we are adding back removed exports and changing the bundle.\n | 'changed-export'\n // If we are adding an export, we are changing the bundle.\n | 'added-export'\n // If we are adding a dynamic import, we are changing the bundle.\n | 'added-dynamic-import'\n // If we are adding an included dependency and we are changing resolution, we are changing the resolve map.\n | 'included-dependency-required'\n // If we are removing an excluded dependency and adding it back to the resolve map, we are changing the resolve map.\n | 'removed-excluded-dependency-required';\n\nexport type GeneratedChangeType =\n | RequiredGeneratedChangeType\n // Included dependencies are optional if they are already in the import map as including it won't affect resolution.\n | 'included-dependency-optional'\n // Excluded dependencies are optional since they excluding them only helps to make package resolution faster.\n | 'excluded-dependency'\n // Removing an excluded dependency can be optional if it won't add the package back to the resolve map.\n | 'removed-excluded-dependency-optional';\n\nexport interface GeneratedChange {\n type: GeneratedChangeType;\n /** Item that changed, such as the dependency name, export path, or bundler type */\n change: string;\n /** Additional explanation */\n reason?: string;\n}\n\n/**\n * Mapping of required change types to true.\n * (Keys for non-required change types will be undefined.)\n */\n// It's easier to ensure this stays up to date by using an object rather than an array.\n// Any GeneratedChangeType is allowed as a lookup key to make usage easier.\nexport const requiredChangeTypes: Partial<Record<GeneratedChangeType, true>> = {\n 'changed-export': true,\n 'added-export': true,\n 'added-dynamic-import': true,\n 'included-dependency-required': true,\n 'removed-excluded-dependency-required': true,\n} satisfies Record<RequiredGeneratedChangeType, true>;\n\n/**\n * Mapping of optional change types to true.\n * (Keys for required change types will be undefined.)\n */\nexport const optionalChangeTypes: Partial<Record<GeneratedChangeType, true>> = {\n 'included-dependency-optional': true,\n 'excluded-dependency': true,\n 'removed-excluded-dependency-optional': true,\n} satisfies Record<Exclude<GeneratedChangeType, RequiredGeneratedChangeType>, true>;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/cli",
3
- "version": "0.73.8",
3
+ "version": "0.74.0",
4
4
  "description": "The Cloudpack command line interface - a tool for managing fast inner and outer looping in web apps.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -10,22 +10,22 @@
10
10
  "cloudpack": "./bin/cloudpack.js"
11
11
  },
12
12
  "dependencies": {
13
- "@ms-cloudpack/api-server": "^0.61.36",
14
- "@ms-cloudpack/app-server": "^0.17.90",
15
- "@ms-cloudpack/bundler": "^0.24.31",
16
- "@ms-cloudpack/common-types": "^0.24.16",
17
- "@ms-cloudpack/config": "^0.35.1",
13
+ "@ms-cloudpack/api-server": "^0.62.0",
14
+ "@ms-cloudpack/app-server": "^0.18.0",
15
+ "@ms-cloudpack/bundler": "^0.25.0",
16
+ "@ms-cloudpack/common-types": "^0.24.17",
17
+ "@ms-cloudpack/config": "^0.35.3",
18
18
  "@ms-cloudpack/environment": "^0.1.1",
19
19
  "@ms-cloudpack/json-utilities": "^0.1.10",
20
- "@ms-cloudpack/link-proxy": "^0.1.8",
21
- "@ms-cloudpack/overlay": "^0.17.169",
22
- "@ms-cloudpack/package-utilities": "^12.3.4",
20
+ "@ms-cloudpack/link-proxy": "^0.2.0",
21
+ "@ms-cloudpack/overlay": "^0.18.0",
22
+ "@ms-cloudpack/package-utilities": "^12.3.5",
23
23
  "@ms-cloudpack/path-string-parsing": "^1.2.7",
24
- "@ms-cloudpack/path-utilities": "^3.1.1",
25
- "@ms-cloudpack/remote-cache": "^0.11.13",
26
- "@ms-cloudpack/setup-utilities": "^0.5.23",
24
+ "@ms-cloudpack/path-utilities": "^3.1.2",
25
+ "@ms-cloudpack/remote-cache": "^0.11.14",
26
+ "@ms-cloudpack/setup-utilities": "^0.5.24",
27
27
  "@ms-cloudpack/task-reporter": "^0.16.2",
28
- "@ms-cloudpack/telemetry": "^0.11.16",
28
+ "@ms-cloudpack/telemetry": "^0.11.17",
29
29
  "@yarnpkg/lockfile": "^1.1.0",
30
30
  "commander": "^13.0.0",
31
31
  "cross-spawn": "^7.0.3",
@@ -38,7 +38,7 @@
38
38
  "workspace-tools": "^0.38.0"
39
39
  },
40
40
  "devDependencies": {
41
- "@ms-cloudpack/common-types": "^0.24.16",
41
+ "@ms-cloudpack/common-types": "^0.24.17",
42
42
  "@ms-cloudpack/common-types-browser": "^0.5.6",
43
43
  "@ms-cloudpack/eslint-plugin-internal": "^0.0.1",
44
44
  "@ms-cloudpack/scripts": "^0.0.1",