@ms-cloudpack/cli 0.57.9 → 0.58.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.
Files changed (68) hide show
  1. package/lib/commands/bundle/execute.d.ts.map +1 -1
  2. package/lib/commands/bundle/execute.js +14 -5
  3. package/lib/commands/bundle/execute.js.map +1 -1
  4. package/lib/commands/bundle/index.d.ts.map +1 -1
  5. package/lib/commands/bundle/index.js +2 -1
  6. package/lib/commands/bundle/index.js.map +1 -1
  7. package/lib/commands/bundle/types/BundleOptions.d.ts +4 -1
  8. package/lib/commands/bundle/types/BundleOptions.d.ts.map +1 -1
  9. package/lib/commands/bundle/types/BundleOptions.js.map +1 -1
  10. package/lib/commands/info/nonSemverDeps/getNonSemverDeps.js.map +1 -1
  11. package/lib/commands/init/evaluateImportsForOverrides.d.ts +1 -2
  12. package/lib/commands/init/evaluateImportsForOverrides.d.ts.map +1 -1
  13. package/lib/commands/init/evaluateImportsForOverrides.js.map +1 -1
  14. package/lib/commands/init/evaluatePath.d.ts +1 -2
  15. package/lib/commands/init/evaluatePath.d.ts.map +1 -1
  16. package/lib/commands/init/evaluatePath.js.map +1 -1
  17. package/lib/commands/init/execute.d.ts.map +1 -1
  18. package/lib/commands/init/execute.js +10 -4
  19. package/lib/commands/init/execute.js.map +1 -1
  20. package/lib/commands/init/formatInitSummary.d.ts +5 -1
  21. package/lib/commands/init/formatInitSummary.d.ts.map +1 -1
  22. package/lib/commands/init/formatInitSummary.js +16 -10
  23. package/lib/commands/init/formatInitSummary.js.map +1 -1
  24. package/lib/commands/init/init.d.ts +8 -2
  25. package/lib/commands/init/init.d.ts.map +1 -1
  26. package/lib/commands/init/init.js +4 -5
  27. package/lib/commands/init/init.js.map +1 -1
  28. package/lib/commands/init/neverExclude.d.ts +1 -1
  29. package/lib/commands/init/neverExclude.js.map +1 -1
  30. package/lib/commands/init/optimizeDependencies.d.ts +1 -2
  31. package/lib/commands/init/optimizeDependencies.d.ts.map +1 -1
  32. package/lib/commands/init/optimizeDependencies.js.map +1 -1
  33. package/lib/commands/init/types/InitPackageResult.d.ts +1 -1
  34. package/lib/commands/init/types/InitPackageResult.d.ts.map +1 -1
  35. package/lib/commands/init/types/InitPackageResult.js.map +1 -1
  36. package/lib/commands/init/types/InitPackageResultErrors.d.ts +1 -1
  37. package/lib/commands/init/types/InitPackageResultErrors.d.ts.map +1 -1
  38. package/lib/commands/init/types/InitPackageResultErrors.js.map +1 -1
  39. package/lib/commands/init/types/InitPackageResultWarnings.d.ts +1 -1
  40. package/lib/commands/init/types/InitPackageResultWarnings.d.ts.map +1 -1
  41. package/lib/commands/init/types/InitPackageResultWarnings.js.map +1 -1
  42. package/lib/commands/init/verifyExports.d.ts +1 -1
  43. package/lib/commands/init/verifyExports.d.ts.map +1 -1
  44. package/lib/commands/init/verifyExports.js.map +1 -1
  45. package/lib/commands/sync/execute.d.ts.map +1 -1
  46. package/lib/commands/sync/execute.js +3 -5
  47. package/lib/commands/sync/execute.js.map +1 -1
  48. package/lib/common/CommandExecutor.d.ts +1 -0
  49. package/lib/common/CommandExecutor.d.ts.map +1 -1
  50. package/lib/common/CommandExecutor.js +11 -7
  51. package/lib/common/CommandExecutor.js.map +1 -1
  52. package/lib/common/checkFeatures.d.ts +1 -1
  53. package/lib/common/checkFeatures.js +1 -1
  54. package/lib/common/checkFeatures.js.map +1 -1
  55. package/lib/common/findPackageOverride.d.ts +1 -1
  56. package/lib/common/findPackageOverride.js.map +1 -1
  57. package/lib/common/getMergedFeatureFlags.d.ts +1 -1
  58. package/lib/common/getMergedFeatureFlags.js +1 -1
  59. package/lib/common/getMergedFeatureFlags.js.map +1 -1
  60. package/lib/common/mergeFeatures.d.ts +1 -1
  61. package/lib/common/mergeFeatures.js +1 -1
  62. package/lib/common/mergeFeatures.js.map +1 -1
  63. package/lib/common/runPrerequisites.d.ts +1 -1
  64. package/lib/common/runPrerequisites.js.map +1 -1
  65. package/lib/types/CommandAction.d.ts +20 -12
  66. package/lib/types/CommandAction.d.ts.map +1 -1
  67. package/lib/types/CommandAction.js.map +1 -1
  68. package/package.json +9 -10
@@ -1,7 +1,6 @@
1
1
  import { createPartialApiContext } from '@ms-cloudpack/api-server';
2
2
  import { writeGeneratedConfig } from '@ms-cloudpack/config';
3
3
  import { bold, bulletedList, formatPackageName, plural } from '@ms-cloudpack/task-reporter';
4
- import { InitSummaryData } from './InitSummaryData.js';
5
4
  import { evaluatePath } from './evaluatePath.js';
6
5
  import { verifyExports } from './verifyExports.js';
7
6
  import path from 'path';
@@ -11,11 +10,11 @@ import { runPrerequisites } from '../../common/runPrerequisites.js';
11
10
  * Init execution function.
12
11
  */
13
12
  export async function init(parameters) {
14
- const { options, contexts, reporter, autoDispose } = parameters;
13
+ const { options, contexts, reporter, autoDispose, appSummaries } = parameters;
15
14
  const summaries = [];
16
15
  let taskRunner = undefined;
17
- for (const initContext of contexts) {
18
- const { appPath, config, telemetryClient } = initContext;
16
+ for (const appContext of contexts) {
17
+ const { appPath, config, telemetryClient } = appContext;
19
18
  // Run prerequisites for the app.
20
19
  runPrerequisites({ config, cwd: appPath, telemetryClient });
21
20
  // Don't allow --check and --reset together.
@@ -39,7 +38,7 @@ export async function init(parameters) {
39
38
  const resolveMap = apiContext.session.resolveMap;
40
39
  // Ensure config.generated.packageSettings is initialized.
41
40
  config.generated.packageSettings ??= [];
42
- const summaryData = new InitSummaryData(appPath);
41
+ const summaryData = appSummaries[appPath];
43
42
  await new Promise((resolve, reject) => {
44
43
  let pending = 0;
45
44
  let isExitingPrematurely = false;
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context, TaskRunner } from '@ms-cloudpack/api-server';\nimport type { GeneratedConfig, PackageJsonExportsObject } from '@ms-cloudpack/config-types';\nimport type { PackageImporterContext } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { TaskReporter } from '@ms-cloudpack/task-reporter';\nimport type { AutoDispose } from '../../types/AutoDispose.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitSummary } from './types/InitSummary.js';\n\nimport { createPartialApiContext } from '@ms-cloudpack/api-server';\nimport { writeGeneratedConfig } from '@ms-cloudpack/config';\nimport { bold, bulletedList, formatPackageName, plural } from '@ms-cloudpack/task-reporter';\nimport { InitSummaryData } from './InitSummaryData.js';\nimport { evaluatePath } from './evaluatePath.js';\nimport { verifyExports } from './verifyExports.js';\nimport type { InitContext } from '../../types/CommandAction.js';\nimport path from 'path';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { runPrerequisites } from '../../common/runPrerequisites.js';\n\n/**\n * Init execution function.\n */\nexport async function init(parameters: {\n options: InitOptions;\n contexts: InitContext[];\n autoDispose: AutoDispose;\n reporter: TaskReporter;\n}): Promise<InitSummary[]> {\n const { options, contexts, reporter, autoDispose } = parameters;\n\n const summaries = [];\n\n let taskRunner: TaskRunner | undefined = undefined;\n\n for (const initContext of contexts) {\n const { appPath, config, telemetryClient } = initContext;\n\n // Run prerequisites for the app.\n runPrerequisites({ config, cwd: appPath, telemetryClient });\n\n // Don't allow --check and --reset together.\n if (options.check && options.reset) {\n throw Error('Cannot use --check and --reset together.');\n }\n\n // If --reset is specified, reset the generated config.\n if (options.reset) {\n config.generated = {};\n }\n\n const apiContext: Context = await createPartialApiContext({\n appPath,\n config,\n reporter,\n telemetryClient,\n items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n taskRunner,\n });\n taskRunner ??= apiContext.taskRunner;\n autoDispose(apiContext);\n const resolveMap = apiContext.session.resolveMap;\n\n // Ensure config.generated.packageSettings is initialized.\n config.generated.packageSettings ??= [];\n\n const summaryData = new InitSummaryData(appPath);\n\n await new Promise<void>((resolve, reject) => {\n let pending = 0;\n let isExitingPrematurely = false;\n const visitedSet = new Set<string>();\n const refreshPaths = new Set<string>();\n\n // Start with the app path or requested matches\n enqueuePaths(getInitialPaths({ appPath, match: options.match, resolveMap, reporter }));\n\n /**\n * Enqueue more paths.\n * @param newPaths Mapping from package path to importer context.\n */\n function enqueuePaths(newPaths: Map<string, PackageImporterContext | undefined>) {\n if (isExitingPrematurely) {\n return;\n }\n\n // Iterate through the given paths.\n for (const [packagePath, importerContext] of newPaths) {\n if (visitedSet.has(packagePath)) {\n continue;\n }\n\n refreshPaths.delete(packagePath);\n\n visitedSet.add(packagePath);\n pending++;\n\n // Evaluate this path, but don't await - when we're done, we'll re-enqueue newly discovered paths.\n evaluatePath({\n packagePath,\n importerContext,\n config,\n telemetryClient,\n resolveMap,\n initOptions: options,\n summaryData,\n ctx: apiContext,\n })\n .then(({ pathsToEvaluate, pathsToRefresh, shouldExit }) => {\n pending--;\n\n if (shouldExit) {\n isExitingPrematurely = true;\n } else if (pathsToEvaluate?.size && !options.match) {\n // If there are paths that need to be rebuilt, add them to the refresh set so that on re-enqueuing\n // we pass the `shouldRerun` flag through\n pathsToRefresh?.forEach((refreshPath) => {\n refreshPaths.add(refreshPath);\n visitedSet.delete(refreshPath);\n });\n\n // Try to enqueue the new paths.\n enqueuePaths(pathsToEvaluate);\n }\n\n // If nothing is pending after this call, we're complete.\n if (!pending) {\n resolve();\n }\n })\n .catch((error) => {\n reject(error);\n });\n }\n }\n });\n\n if (config.features?.verifyExports) {\n const packageResults = await verifyExports(summaryData.getResults(), apiContext);\n packageResults.forEach((packageResult) => summaryData.recordResult({ packageResult, append: true }));\n }\n\n const summary = summaryData.summarize(options);\n summaries.push(summary);\n\n if (!options.check && summary.totalChanges && config.generated.packageSettings?.length) {\n sortExportKeys(config.generated);\n\n await writeGeneratedConfig(config.generated, appPath);\n }\n\n if (options.logResolveMap) {\n reporter.log('\\nWriting resolve map to `resolve-map.json`.');\n await writeJson(path.join(appPath, 'resolve-map.json'), resolveMap);\n }\n }\n\n return summaries;\n}\n\n/**\n * Get initial package paths to process: either the app path, or packages matching `match` in the init options.\n */\nfunction getInitialPaths(params: {\n appPath: string;\n /** Only evaluate packages matching this string (from init options). */\n match: string | undefined;\n resolveMap: ResolveMap;\n reporter: TaskReporter;\n}): Map<string, PackageImporterContext | undefined> {\n const { appPath, match, resolveMap, reporter } = params;\n\n if (!match) {\n return new Map([[appPath, undefined]]);\n }\n\n // Find matching packages in the resolve map\n const resolveMapEntries = Object.values(resolveMap).filter((entry) => entry.name.includes(match));\n\n reporter.log(\n `\\nFound ${plural(resolveMapEntries.length, 'package')} matching \"${bold(match)}\":\\n`,\n bulletedList(resolveMapEntries.map((entry) => `${formatPackageName(entry)}: ${entry.path}`)),\n );\n\n return new Map(resolveMapEntries.map((entry) => [entry.path, undefined]));\n}\n\nfunction sortExportKeys({ packageSettings = [] }: GeneratedConfig) {\n for (const settings of packageSettings) {\n if (!settings.exports) {\n continue;\n }\n\n const unsortedExports = settings.exports as PackageJsonExportsObject;\n\n settings.exports = Object.fromEntries(\n Object.keys(unsortedExports)\n .sort()\n .map((k) => [k, unsortedExports[k]]),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context, TaskRunner } from '@ms-cloudpack/api-server';\nimport type { GeneratedConfig, PackageJsonExportsObject, PackageImporterContext } from '@ms-cloudpack/common-types';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { TaskReporter } from '@ms-cloudpack/task-reporter';\nimport type { AutoDispose } from '../../types/AutoDispose.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitSummary } from './types/InitSummary.js';\n\nimport { createPartialApiContext } from '@ms-cloudpack/api-server';\nimport { writeGeneratedConfig } from '@ms-cloudpack/config';\nimport { bold, bulletedList, formatPackageName, plural } from '@ms-cloudpack/task-reporter';\nimport type { InitSummaryData } from './InitSummaryData.js';\nimport { evaluatePath } from './evaluatePath.js';\nimport { verifyExports } from './verifyExports.js';\nimport type { AppCommandContext } from '../../types/CommandAction.js';\nimport path from 'path';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { runPrerequisites } from '../../common/runPrerequisites.js';\n\n/**\n * Init execution function.\n */\nexport async function init(parameters: {\n options: InitOptions;\n contexts: AppCommandContext[];\n autoDispose: AutoDispose;\n reporter: TaskReporter;\n /**\n * App summary objects, created ahead of time so that a partial summary can be generated\n * if the process is interrupted.\n */\n appSummaries: Record<string, InitSummaryData>;\n}): Promise<InitSummary[]> {\n const { options, contexts, reporter, autoDispose, appSummaries } = parameters;\n\n const summaries: InitSummary[] = [];\n\n let taskRunner: TaskRunner | undefined = undefined;\n\n for (const appContext of contexts) {\n const { appPath, config, telemetryClient } = appContext;\n\n // Run prerequisites for the app.\n runPrerequisites({ config, cwd: appPath, telemetryClient });\n\n // Don't allow --check and --reset together.\n if (options.check && options.reset) {\n throw Error('Cannot use --check and --reset together.');\n }\n\n // If --reset is specified, reset the generated config.\n if (options.reset) {\n config.generated = {};\n }\n\n const apiContext: Context = await createPartialApiContext({\n appPath,\n config,\n reporter,\n telemetryClient,\n items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n taskRunner,\n });\n taskRunner ??= apiContext.taskRunner;\n autoDispose(apiContext);\n const resolveMap = apiContext.session.resolveMap;\n\n // Ensure config.generated.packageSettings is initialized.\n config.generated.packageSettings ??= [];\n\n const summaryData = appSummaries[appPath];\n\n await new Promise<void>((resolve, reject) => {\n let pending = 0;\n let isExitingPrematurely = false;\n const visitedSet = new Set<string>();\n const refreshPaths = new Set<string>();\n\n // Start with the app path or requested matches\n enqueuePaths(getInitialPaths({ appPath, match: options.match, resolveMap, reporter }));\n\n /**\n * Enqueue more paths.\n * @param newPaths Mapping from package path to importer context.\n */\n function enqueuePaths(newPaths: Map<string, PackageImporterContext | undefined>) {\n if (isExitingPrematurely) {\n return;\n }\n\n // Iterate through the given paths.\n for (const [packagePath, importerContext] of newPaths) {\n if (visitedSet.has(packagePath)) {\n continue;\n }\n\n refreshPaths.delete(packagePath);\n\n visitedSet.add(packagePath);\n pending++;\n\n // Evaluate this path, but don't await - when we're done, we'll re-enqueue newly discovered paths.\n evaluatePath({\n packagePath,\n importerContext,\n config,\n telemetryClient,\n resolveMap,\n initOptions: options,\n summaryData,\n ctx: apiContext,\n })\n .then(({ pathsToEvaluate, pathsToRefresh, shouldExit }) => {\n pending--;\n\n if (shouldExit) {\n isExitingPrematurely = true;\n } else if (pathsToEvaluate?.size && !options.match) {\n // If there are paths that need to be rebuilt, add them to the refresh set so that on re-enqueuing\n // we pass the `shouldRerun` flag through\n pathsToRefresh?.forEach((refreshPath) => {\n refreshPaths.add(refreshPath);\n visitedSet.delete(refreshPath);\n });\n\n // Try to enqueue the new paths.\n enqueuePaths(pathsToEvaluate);\n }\n\n // If nothing is pending after this call, we're complete.\n if (!pending) {\n resolve();\n }\n })\n .catch((error) => {\n reject(error);\n });\n }\n }\n });\n\n if (config.features?.verifyExports) {\n const packageResults = await verifyExports(summaryData.getResults(), apiContext);\n packageResults.forEach((packageResult) => summaryData.recordResult({ packageResult, append: true }));\n }\n\n const summary = summaryData.summarize(options);\n summaries.push(summary);\n\n if (!options.check && summary.totalChanges && config.generated.packageSettings?.length) {\n sortExportKeys(config.generated);\n\n await writeGeneratedConfig(config.generated, appPath);\n }\n\n if (options.logResolveMap) {\n reporter.log('\\nWriting resolve map to `resolve-map.json`.');\n await writeJson(path.join(appPath, 'resolve-map.json'), resolveMap);\n }\n }\n\n return summaries;\n}\n\n/**\n * Get initial package paths to process: either the app path, or packages matching `match` in the init options.\n */\nfunction getInitialPaths(params: {\n appPath: string;\n /** Only evaluate packages matching this string (from init options). */\n match: string | undefined;\n resolveMap: ResolveMap;\n reporter: TaskReporter;\n}): Map<string, PackageImporterContext | undefined> {\n const { appPath, match, resolveMap, reporter } = params;\n\n if (!match) {\n return new Map([[appPath, undefined]]);\n }\n\n // Find matching packages in the resolve map\n const resolveMapEntries = Object.values(resolveMap).filter((entry) => entry.name.includes(match));\n\n reporter.log(\n `\\nFound ${plural(resolveMapEntries.length, 'package')} matching \"${bold(match)}\":\\n`,\n bulletedList(resolveMapEntries.map((entry) => `${formatPackageName(entry)}: ${entry.path}`)),\n );\n\n return new Map(resolveMapEntries.map((entry) => [entry.path, undefined]));\n}\n\nfunction sortExportKeys({ packageSettings = [] }: GeneratedConfig) {\n for (const settings of packageSettings) {\n if (!settings.exports) {\n continue;\n }\n\n const unsortedExports = settings.exports as PackageJsonExportsObject;\n\n settings.exports = Object.fromEntries(\n Object.keys(unsortedExports)\n .sort()\n .map((k) => [k, unsortedExports[k]]),\n );\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { CloudpackConfig } from '@ms-cloudpack/config-types';
1
+ import type { CloudpackConfig } from '@ms-cloudpack/common-types';
2
2
  /**
3
3
  * Checks if a package should never be excluded.
4
4
  * Uses the `neverExcludeDependencies` field in the config or the default list.
@@ -1 +1 @@
1
- {"version":3,"file":"neverExclude.js","sourceRoot":"","sources":["../../../src/commands/init/neverExclude.ts"],"names":[],"mappings":"AAEA,MAAM,+BAA+B,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB,EAAE,MAAuB;IACvE,+FAA+F;IAC/F,MAAM,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,IAAI,+BAA+B,CAAC;IACpG,IAAI,wBAAwB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,wBAAwB,CAAC,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,+BAA+B,CAAC,CAAC;IAClH,CAAC;IAED,OAAO,wBAAwB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACxD,CAAC","sourcesContent":["import type { CloudpackConfig } from '@ms-cloudpack/config-types';\n\nconst defaultNeverExcludeDependencies = ['tslib', '@babel/runtime'];\n\n/**\n * Checks if a package should never be excluded.\n * Uses the `neverExcludeDependencies` field in the config or the default list.\n * @param packageName Name of the package to check.\n * @param config Cloudpack configuration.\n * @returns True if the package should never be excluded.\n */\nexport function neverExclude(packageName: string, config: CloudpackConfig): boolean {\n // Set never exclude to the default if it is not set. Replace string '...' with default if set.\n const neverExcludeDependencies = config.neverExcludeDependencies ?? defaultNeverExcludeDependencies;\n if (neverExcludeDependencies.includes('...')) {\n neverExcludeDependencies.splice(neverExcludeDependencies.indexOf('...'), 1, ...defaultNeverExcludeDependencies);\n }\n\n return neverExcludeDependencies.includes(packageName);\n}\n"]}
1
+ {"version":3,"file":"neverExclude.js","sourceRoot":"","sources":["../../../src/commands/init/neverExclude.ts"],"names":[],"mappings":"AAEA,MAAM,+BAA+B,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB,EAAE,MAAuB;IACvE,+FAA+F;IAC/F,MAAM,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,IAAI,+BAA+B,CAAC;IACpG,IAAI,wBAAwB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,wBAAwB,CAAC,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,+BAA+B,CAAC,CAAC;IAClH,CAAC;IAED,OAAO,wBAAwB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACxD,CAAC","sourcesContent":["import type { CloudpackConfig } from '@ms-cloudpack/common-types';\n\nconst defaultNeverExcludeDependencies = ['tslib', '@babel/runtime'];\n\n/**\n * Checks if a package should never be excluded.\n * Uses the `neverExcludeDependencies` field in the config or the default list.\n * @param packageName Name of the package to check.\n * @param config Cloudpack configuration.\n * @returns True if the package should never be excluded.\n */\nexport function neverExclude(packageName: string, config: CloudpackConfig): boolean {\n // Set never exclude to the default if it is not set. Replace string '...' with default if set.\n const neverExcludeDependencies = config.neverExcludeDependencies ?? defaultNeverExcludeDependencies;\n if (neverExcludeDependencies.includes('...')) {\n neverExcludeDependencies.splice(neverExcludeDependencies.indexOf('...'), 1, ...defaultNeverExcludeDependencies);\n }\n\n return neverExcludeDependencies.includes(packageName);\n}\n"]}
@@ -1,7 +1,6 @@
1
1
  import { type ResolveMap } from '@ms-cloudpack/package-utilities';
2
2
  import { type BundleInfo } from '@ms-cloudpack/api-server';
3
- import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
4
- import type { CloudpackConfig, PackageJson } from '@ms-cloudpack/config-types';
3
+ import type { CloudpackConfig, PackageDefinitionsCache, PackageJson } from '@ms-cloudpack/common-types';
5
4
  import type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';
6
5
  /**
7
6
  * Optimizes the dependencies of a package to determine if there are any missing or unused.
@@ -1 +1 @@
1
- {"version":3,"file":"optimizeDependencies.d.ts","sourceRoot":"","sources":["../../../src/commands/init/optimizeDependencies.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACtG,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAGlF;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE;IACP,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;CACxB,EACD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;IAClC,MAAM,EAAE,eAAe,CAAC;CACzB,GACA;IACD,iEAAiE;IACjE,2BAA2B,EAAE,uBAAuB,EAAE,CAAC;IACvD,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,8GAA8G;IAC9G,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B,CAwEA"}
1
+ {"version":3,"file":"optimizeDependencies.d.ts","sourceRoot":"","sources":["../../../src/commands/init/optimizeDependencies.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACtG,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACxG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAGlF;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE;IACP,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;CACxB,EACD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;IAClC,MAAM,EAAE,eAAe,CAAC;CACzB,GACA;IACD,iEAAiE;IACjE,2BAA2B,EAAE,uBAAuB,EAAE,CAAC;IACvD,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,8GAA8G;IAC9G,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B,CAwEA"}
@@ -1 +1 @@
1
- {"version":3,"file":"optimizeDependencies.js","sourceRoot":"","sources":["../../../src/commands/init/optimizeDependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPackageSettings } from '@ms-cloudpack/config';\nimport { getDependencies, isExternalPackage, type ResolveMap } from '@ms-cloudpack/package-utilities';\nimport { getConsumedDependencies, type BundleInfo } from '@ms-cloudpack/api-server';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { CloudpackConfig, PackageJson } from '@ms-cloudpack/config-types';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport { neverExclude } from './neverExclude.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 */\nexport function optimizeDependencies(\n options: {\n info: BundleInfo;\n definition: PackageJson;\n packagePath: string;\n resolveMap: ResolveMap;\n },\n context: {\n packages: PackageDefinitionsCache;\n config: CloudpackConfig;\n },\n): {\n /** Excluded dependencies changes made to the generated config */\n excludedDependenciesChanges: GeneratedPackageChanges[];\n /** Any warnings encountered */\n warnings: string[];\n /** Set from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate: Set<string>;\n /** Package paths for which dependencies where included or excluded, so the package should be re-processed. */\n pathsToRefresh: Set<string>;\n} {\n const { info, definition, packagePath } = options;\n const { config } = context;\n const displayName = `${definition.name}@${definition.version}`;\n const excludedDependenciesChanges: GeneratedPackageChanges[] = [];\n const warnings: string[] = [];\n const pathsToEvaluate = new Set<string>();\n const pathsToRefresh = new Set<string>();\n\n const { name, version } = definition;\n if (!name || !version) {\n throw new Error(`Package \"${displayName}\" is missing a name or version.`);\n }\n\n const dependencies = getDependencies(definition);\n const consumedDependencies = getConsumedDependencies(info);\n\n // Iterate through dependencies and find unused.\n for (const dependencyName of Object.keys(dependencies)) {\n if (consumedDependencies.has(dependencyName) || neverExclude(dependencyName, config)) {\n continue;\n }\n\n pathsToEvaluate.add(packagePath);\n\n // Add to excludedDependencies\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings = getPackageSettings({\n config: { generated: { packageSettings } },\n name,\n version,\n firstMatch: true,\n }).generatedPackageSettings;\n\n if (!generatedPackageSettings) {\n if (isExternalPackage(packagePath)) {\n generatedPackageSettings = {\n match: { name, version: `^${version}` },\n };\n } else {\n generatedPackageSettings = {\n match: name,\n };\n }\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.excludedDependencies ??= [];\n\n // Add to includedDependencies if it is not already included.\n if (generatedPackageSettings.excludedDependencies.includes(dependencyName)) {\n continue;\n }\n\n generatedPackageSettings.excludedDependencies.push(dependencyName);\n\n excludedDependenciesChanges.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 pathsToRefresh.add(packagePath);\n }\n return { warnings, excludedDependenciesChanges, pathsToEvaluate, pathsToRefresh };\n}\n"]}
1
+ {"version":3,"file":"optimizeDependencies.js","sourceRoot":"","sources":["../../../src/commands/init/optimizeDependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPackageSettings } from '@ms-cloudpack/config';\nimport { getDependencies, isExternalPackage, type ResolveMap } from '@ms-cloudpack/package-utilities';\nimport { getConsumedDependencies, type BundleInfo } from '@ms-cloudpack/api-server';\nimport type { CloudpackConfig, PackageDefinitionsCache, PackageJson } from '@ms-cloudpack/common-types';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport { neverExclude } from './neverExclude.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 */\nexport function optimizeDependencies(\n options: {\n info: BundleInfo;\n definition: PackageJson;\n packagePath: string;\n resolveMap: ResolveMap;\n },\n context: {\n packages: PackageDefinitionsCache;\n config: CloudpackConfig;\n },\n): {\n /** Excluded dependencies changes made to the generated config */\n excludedDependenciesChanges: GeneratedPackageChanges[];\n /** Any warnings encountered */\n warnings: string[];\n /** Set from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate: Set<string>;\n /** Package paths for which dependencies where included or excluded, so the package should be re-processed. */\n pathsToRefresh: Set<string>;\n} {\n const { info, definition, packagePath } = options;\n const { config } = context;\n const displayName = `${definition.name}@${definition.version}`;\n const excludedDependenciesChanges: GeneratedPackageChanges[] = [];\n const warnings: string[] = [];\n const pathsToEvaluate = new Set<string>();\n const pathsToRefresh = new Set<string>();\n\n const { name, version } = definition;\n if (!name || !version) {\n throw new Error(`Package \"${displayName}\" is missing a name or version.`);\n }\n\n const dependencies = getDependencies(definition);\n const consumedDependencies = getConsumedDependencies(info);\n\n // Iterate through dependencies and find unused.\n for (const dependencyName of Object.keys(dependencies)) {\n if (consumedDependencies.has(dependencyName) || neverExclude(dependencyName, config)) {\n continue;\n }\n\n pathsToEvaluate.add(packagePath);\n\n // Add to excludedDependencies\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings = getPackageSettings({\n config: { generated: { packageSettings } },\n name,\n version,\n firstMatch: true,\n }).generatedPackageSettings;\n\n if (!generatedPackageSettings) {\n if (isExternalPackage(packagePath)) {\n generatedPackageSettings = {\n match: { name, version: `^${version}` },\n };\n } else {\n generatedPackageSettings = {\n match: name,\n };\n }\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.excludedDependencies ??= [];\n\n // Add to includedDependencies if it is not already included.\n if (generatedPackageSettings.excludedDependencies.includes(dependencyName)) {\n continue;\n }\n\n generatedPackageSettings.excludedDependencies.push(dependencyName);\n\n excludedDependenciesChanges.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 pathsToRefresh.add(packagePath);\n }\n return { warnings, excludedDependenciesChanges, pathsToEvaluate, pathsToRefresh };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { BundleMessage } from '@ms-cloudpack/bundler-types';
1
+ import type { BundleMessage } from '@ms-cloudpack/common-types';
2
2
  import type { InitPackageIdentifier } from './InitPackageIdentifier.js';
3
3
  import type { BundleInfo } from '@ms-cloudpack/api-server';
4
4
  export interface InitPackageResult extends InitPackageIdentifier {
@@ -1 +1 @@
1
- {"version":3,"file":"InitPackageResult.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/InitPackageResult.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,WAAW,iBAAkB,SAAQ,qBAAqB;IAC9D,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB"}
1
+ {"version":3,"file":"InitPackageResult.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/InitPackageResult.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,WAAW,iBAAkB,SAAQ,qBAAqB;IAC9D,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"InitPackageResult.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitPackageResult.ts"],"names":[],"mappings":"","sourcesContent":["import type { BundleMessage } from '@ms-cloudpack/bundler-types';\nimport type { InitPackageIdentifier } from './InitPackageIdentifier.js';\nimport type { BundleInfo } from '@ms-cloudpack/api-server';\n\nexport interface InitPackageResult extends InitPackageIdentifier {\n errors?: BundleMessage[];\n warnings?: BundleMessage[];\n info?: BundleInfo;\n}\n"]}
1
+ {"version":3,"file":"InitPackageResult.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitPackageResult.ts"],"names":[],"mappings":"","sourcesContent":["import type { BundleMessage } from '@ms-cloudpack/common-types';\nimport type { InitPackageIdentifier } from './InitPackageIdentifier.js';\nimport type { BundleInfo } from '@ms-cloudpack/api-server';\n\nexport interface InitPackageResult extends InitPackageIdentifier {\n errors?: BundleMessage[];\n warnings?: BundleMessage[];\n info?: BundleInfo;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { BundleMessage } from '@ms-cloudpack/bundler-types';
1
+ import type { BundleMessage } from '@ms-cloudpack/common-types';
2
2
  import type { InitPackageIdentifier } from './InitPackageIdentifier.js';
3
3
  export interface InitPackageResultErrors extends InitPackageIdentifier {
4
4
  errors: BundleMessage[];
@@ -1 +1 @@
1
- {"version":3,"file":"InitPackageResultErrors.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/InitPackageResultErrors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB;IACpE,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB"}
1
+ {"version":3,"file":"InitPackageResultErrors.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/InitPackageResultErrors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB;IACpE,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"InitPackageResultErrors.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitPackageResultErrors.ts"],"names":[],"mappings":"","sourcesContent":["import type { BundleMessage } from '@ms-cloudpack/bundler-types';\nimport type { InitPackageIdentifier } from './InitPackageIdentifier.js';\n\nexport interface InitPackageResultErrors extends InitPackageIdentifier {\n errors: BundleMessage[];\n}\n"]}
1
+ {"version":3,"file":"InitPackageResultErrors.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitPackageResultErrors.ts"],"names":[],"mappings":"","sourcesContent":["import type { BundleMessage } from '@ms-cloudpack/common-types';\nimport type { InitPackageIdentifier } from './InitPackageIdentifier.js';\n\nexport interface InitPackageResultErrors extends InitPackageIdentifier {\n errors: BundleMessage[];\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { BundleMessage } from '@ms-cloudpack/bundler-types';
1
+ import type { BundleMessage } from '@ms-cloudpack/common-types';
2
2
  import type { InitPackageIdentifier } from './InitPackageIdentifier.js';
3
3
  export interface InitPackageResultWarnings extends InitPackageIdentifier {
4
4
  warnings: BundleMessage[];
@@ -1 +1 @@
1
- {"version":3,"file":"InitPackageResultWarnings.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/InitPackageResultWarnings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,WAAW,yBAA0B,SAAQ,qBAAqB;IACtE,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B"}
1
+ {"version":3,"file":"InitPackageResultWarnings.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/InitPackageResultWarnings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,WAAW,yBAA0B,SAAQ,qBAAqB;IACtE,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"InitPackageResultWarnings.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitPackageResultWarnings.ts"],"names":[],"mappings":"","sourcesContent":["import type { BundleMessage } from '@ms-cloudpack/bundler-types';\nimport type { InitPackageIdentifier } from './InitPackageIdentifier.js';\n\nexport interface InitPackageResultWarnings extends InitPackageIdentifier {\n warnings: BundleMessage[];\n}\n"]}
1
+ {"version":3,"file":"InitPackageResultWarnings.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitPackageResultWarnings.ts"],"names":[],"mappings":"","sourcesContent":["import type { BundleMessage } from '@ms-cloudpack/common-types';\nimport type { InitPackageIdentifier } from './InitPackageIdentifier.js';\n\nexport interface InitPackageResultWarnings extends InitPackageIdentifier {\n warnings: BundleMessage[];\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InitPackageResult } from './types/InitPackageResult.js';
2
- import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
2
+ import type { PackageDefinitionsCache } from '@ms-cloudpack/common-types';
3
3
  import type { Session } from '@ms-cloudpack//api-server';
4
4
  /**
5
5
  * Checks that the imports/exports of packages match.
@@ -1 +1 @@
1
- {"version":3,"file":"verifyExports.d.ts","sourceRoot":"","sources":["../../../src/commands/init/verifyExports.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,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,iBAAiB,EAAE,CAAC,CAmH9B"}
1
+ {"version":3,"file":"verifyExports.d.ts","sourceRoot":"","sources":["../../../src/commands/init/verifyExports.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,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,iBAAiB,EAAE,CAAC,CAmH9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"verifyExports.js","sourceRoot":"","sources":["../../../src/commands/init/verifyExports.ts"],"names":[],"mappings":"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","sourcesContent":["import { findResolveMapEntry, flattenExportsMap, getExportsMap } from '@ms-cloudpack/package-utilities';\nimport { bulletedList } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { Session } from '@ms-cloudpack//api-server';\n\n/**\n * Checks that the imports/exports of packages match.\n * To be called before `summarize`.\n * @param packageResults - The package results to check.\n * @param context - The context to use.\n */\nexport async function verifyExports(\n packageResults: Record<string, InitPackageResult>,\n context: {\n packages: PackageDefinitionsCache;\n session: Session;\n },\n): Promise<InitPackageResult[]> {\n const { packages, session } = context;\n const { config, resolveMap } = session;\n const allErrors: InitPackageResult[] = [];\n const packageResultsArray = Object.values(packageResults);\n\n // Iterate through each package\n for (const packagePath in packageResults) {\n const result = packageResults[packagePath];\n\n // Skip packages with errors\n if (!result || result.errors?.length) {\n continue;\n }\n\n const { info, name, version } = result;\n const definition = {\n name,\n version,\n path: packagePath,\n };\n\n const packageError: InitPackageResult = {\n ...definition,\n };\n // Makes sure that the errors array is initialized and typescript happy.\n packageError.errors = [];\n const missingExportsErrors: Record<string, Set<string>> = {};\n\n // Skip packages with no info\n if (!info?.entry) {\n continue;\n }\n\n // Iterate through each entry\n for (const [exportsEntry, required] of Object.entries(info.entry)) {\n const { consumes } = required;\n\n // Skip entries with no imports\n if (!consumes?.length) {\n continue;\n }\n\n // Iterate through each imported package\n for (const { packageName, importPath, names } of consumes) {\n const entry = findResolveMapEntry({ packageName, definition, resolveMap });\n\n // Skip if we can't find the imported package in the resolve map\n if (!entry) {\n continue;\n }\n\n const packageResult = packageResultsArray.find((r) => r.name === entry.name && r.version === entry.version);\n\n // Skip packages without information.\n if (!packageResult?.info?.entry) {\n continue;\n }\n\n let realImportPath: string;\n // Check if there is an entry for the import path.\n if (packageResult.info.entry[importPath]) {\n realImportPath = importPath;\n // Check again with '.js' extension.\n } else if (packageResult.info.entry[`${importPath}.js`]) {\n realImportPath = `${importPath}.js`;\n } else {\n // evaluateImportsForOverrides has already been run,\n // so if the export is missing it has tried to fix it and has already reported an error.\n // Skip if the imported package has no entry for the import path\n continue;\n }\n\n const { produces: importProduces } = packageResult.info.entry[realImportPath];\n\n // Skip if the import produces everything `*` because we can't check that.\n if (importProduces.includes('*')) {\n continue;\n }\n\n const missing = [];\n // Iterate through each imported name.\n for (const namedImport of names) {\n // Error if the imported name is not exported.\n if (namedImport !== '*' && !importProduces.includes(namedImport)) {\n missing.push(namedImport);\n }\n }\n\n // No missing exports found.\n if (!missing.length) {\n continue;\n }\n\n const exportsMapConsumed = await getExportsMap({ packagePath: entry.path }, { packages, config });\n const flattenedExportsMapConsumed = flattenExportsMap(exportsMapConsumed);\n const location = `\"${packageName}@${entry.version}\" (${path.join(entry.path, flattenedExportsMapConsumed[exportsEntry] || '')})`;\n missingExportsErrors[location] ??= new Set();\n missing.forEach((m) => missingExportsErrors[location].add(m));\n }\n }\n\n for (const location in missingExportsErrors) {\n const missing = Array.from(missingExportsErrors[location]);\n packageError.errors.push({\n text: errorText({ location, missing }),\n });\n }\n\n if (packageError.errors?.length) {\n allErrors.push(packageError);\n }\n }\n\n return allErrors;\n}\n\nfunction errorText({ location, missing }: { location: string; missing: string[] }) {\n return `Imported names are missing from external package's exports:\\n${bulletedList(\n [`Missing export(s): ${missing.join(', ')}`, `From: ${location}`],\n 2,\n )}\\n`;\n}\n"]}
1
+ {"version":3,"file":"verifyExports.js","sourceRoot":"","sources":["../../../src/commands/init/verifyExports.ts"],"names":[],"mappings":"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","sourcesContent":["import { findResolveMapEntry, flattenExportsMap, getExportsMap } from '@ms-cloudpack/package-utilities';\nimport { bulletedList } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/common-types';\nimport type { Session } from '@ms-cloudpack//api-server';\n\n/**\n * Checks that the imports/exports of packages match.\n * To be called before `summarize`.\n * @param packageResults - The package results to check.\n * @param context - The context to use.\n */\nexport async function verifyExports(\n packageResults: Record<string, InitPackageResult>,\n context: {\n packages: PackageDefinitionsCache;\n session: Session;\n },\n): Promise<InitPackageResult[]> {\n const { packages, session } = context;\n const { config, resolveMap } = session;\n const allErrors: InitPackageResult[] = [];\n const packageResultsArray = Object.values(packageResults);\n\n // Iterate through each package\n for (const packagePath in packageResults) {\n const result = packageResults[packagePath];\n\n // Skip packages with errors\n if (!result || result.errors?.length) {\n continue;\n }\n\n const { info, name, version } = result;\n const definition = {\n name,\n version,\n path: packagePath,\n };\n\n const packageError: InitPackageResult = {\n ...definition,\n };\n // Makes sure that the errors array is initialized and typescript happy.\n packageError.errors = [];\n const missingExportsErrors: Record<string, Set<string>> = {};\n\n // Skip packages with no info\n if (!info?.entry) {\n continue;\n }\n\n // Iterate through each entry\n for (const [exportsEntry, required] of Object.entries(info.entry)) {\n const { consumes } = required;\n\n // Skip entries with no imports\n if (!consumes?.length) {\n continue;\n }\n\n // Iterate through each imported package\n for (const { packageName, importPath, names } of consumes) {\n const entry = findResolveMapEntry({ packageName, definition, resolveMap });\n\n // Skip if we can't find the imported package in the resolve map\n if (!entry) {\n continue;\n }\n\n const packageResult = packageResultsArray.find((r) => r.name === entry.name && r.version === entry.version);\n\n // Skip packages without information.\n if (!packageResult?.info?.entry) {\n continue;\n }\n\n let realImportPath: string;\n // Check if there is an entry for the import path.\n if (packageResult.info.entry[importPath]) {\n realImportPath = importPath;\n // Check again with '.js' extension.\n } else if (packageResult.info.entry[`${importPath}.js`]) {\n realImportPath = `${importPath}.js`;\n } else {\n // evaluateImportsForOverrides has already been run,\n // so if the export is missing it has tried to fix it and has already reported an error.\n // Skip if the imported package has no entry for the import path\n continue;\n }\n\n const { produces: importProduces } = packageResult.info.entry[realImportPath];\n\n // Skip if the import produces everything `*` because we can't check that.\n if (importProduces.includes('*')) {\n continue;\n }\n\n const missing = [];\n // Iterate through each imported name.\n for (const namedImport of names) {\n // Error if the imported name is not exported.\n if (namedImport !== '*' && !importProduces.includes(namedImport)) {\n missing.push(namedImport);\n }\n }\n\n // No missing exports found.\n if (!missing.length) {\n continue;\n }\n\n const exportsMapConsumed = await getExportsMap({ packagePath: entry.path }, { packages, config });\n const flattenedExportsMapConsumed = flattenExportsMap(exportsMapConsumed);\n const location = `\"${packageName}@${entry.version}\" (${path.join(entry.path, flattenedExportsMapConsumed[exportsEntry] || '')})`;\n missingExportsErrors[location] ??= new Set();\n missing.forEach((m) => missingExportsErrors[location].add(m));\n }\n }\n\n for (const location in missingExportsErrors) {\n const missing = Array.from(missingExportsErrors[location]);\n packageError.errors.push({\n text: errorText({ location, missing }),\n });\n }\n\n if (packageError.errors?.length) {\n allErrors.push(packageError);\n }\n }\n\n return allErrors;\n}\n\nfunction errorText({ location, missing }: { location: string; missing: string[] }) {\n return `Imported names are missing from external package's exports:\\n${bulletedList(\n [`Missing export(s): ${missing.join(', ')}`, `From: ${location}`],\n 2,\n )}\\n`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAKlE,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,WAAW,CA2D9C,CAAC"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAKlE,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,WAAW,CAyD9C,CAAC"}
@@ -6,14 +6,12 @@ export const execute = async (params) => {
6
6
  const { login, upload } = options;
7
7
  const { config, telemetryClient } = await initialize({ appPath: cwd });
8
8
  if (!config.features?.syncBundles) {
9
- console.warn('Sync is disabled.');
10
- await exit({ exitCode: 0 });
9
+ await exit({ message: 'Sync is disabled' });
11
10
  return;
12
11
  }
13
12
  if (isSyncDisabledByUser()) {
14
13
  telemetryClient.rootSpan.setAttribute('syncDisabled', true);
15
- console.warn('CLOUDPACK_SYNC environment variable is set. Sync is disabled by the user.');
16
- await exit({ exitCode: 0 });
14
+ await exit({ message: 'CLOUDPACK_SYNC environment variable is set. Sync is disabled by the user.' });
17
15
  return;
18
16
  }
19
17
  try {
@@ -41,7 +39,7 @@ export const execute = async (params) => {
41
39
  }));
42
40
  await syncDownload({ input, ctx });
43
41
  }
44
- await exit({ exitCode: 0 });
42
+ await exit({ message: 'Sync complete' });
45
43
  }
46
44
  catch (error) {
47
45
  if (error instanceof Error) {
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/sync/execute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,CAAC,MAAM,OAAO,GAA+B,KAAK,EAAE,MAAM,EAAE,EAAE;IAClE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACzE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEvE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,IAAI,oBAAoB,EAAE,EAAE,CAAC;QAC3B,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QAC1F,MAAM,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC;QAC7C,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CACV,gHAAgH,CACjH,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG;YACZ,WAAW,EAAE,KAAK;SACnB,CAAC;QAEF,MAAM,iBAAiB,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;QAC9E,IAAI,MAAM,EAAE,CAAC;YACX,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC;YAEnD,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CACvB,MAAM,uBAAuB,CAAC;gBAC5B,GAAG,iBAAiB;gBACpB,KAAK,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,eAAe,CAAC;aACtG,CAAC,CACH,CAAC;YACF,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CACvB,MAAM,uBAAuB,CAAC;gBAC5B,GAAG,iBAAiB;gBACpB,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC;aAChD,CAAC,CACH,CAAC;YACF,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC","sourcesContent":["import type { SyncOptions } from './types/SyncOptions.js';\nimport type { CommandAction } from '../../types/CommandAction.js';\nimport { createPartialApiContext, syncDownload, syncUpload } from '@ms-cloudpack/api-server';\nimport { runPrerequisites } from '../../common/runPrerequisites.js';\nimport { isSyncDisabledByUser } from './isSyncDisabledByUser.js';\n\nexport const execute: CommandAction<SyncOptions> = async (params) => {\n const { options, cwd, reporter, initialize, exit, autoDispose } = params;\n const { login, upload } = options;\n const { config, telemetryClient } = await initialize({ appPath: cwd });\n\n if (!config.features?.syncBundles) {\n console.warn('Sync is disabled.');\n await exit({ exitCode: 0 });\n return;\n }\n\n if (isSyncDisabledByUser()) {\n telemetryClient.rootSpan.setAttribute('syncDisabled', true);\n console.warn('CLOUDPACK_SYNC environment variable is set. Sync is disabled by the user.');\n await exit({ exitCode: 0 });\n return;\n }\n\n try {\n const remoteCacheConfig = config.remoteCache;\n if (!remoteCacheConfig) {\n console.warn(\n 'Remote cache is not configured. Please add remoteCache to your cloudpack.config.json file to use this feature.',\n );\n return;\n }\n\n const input = {\n loginMethod: login,\n };\n\n const apiContextOptions = { appPath: cwd, config, reporter, telemetryClient };\n if (upload) {\n runPrerequisites({ config, cwd, telemetryClient });\n\n const [ctx] = autoDispose(\n await createPartialApiContext({\n ...apiContextOptions,\n items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n }),\n );\n await syncUpload({ input, ctx });\n } else {\n const [ctx] = autoDispose(\n await createPartialApiContext({\n ...apiContextOptions,\n items: ['packages', 'session', 'packageHashes'],\n }),\n );\n await syncDownload({ input, ctx });\n }\n\n await exit({ exitCode: 0 });\n } catch (error) {\n if (error instanceof Error) {\n telemetryClient.rootSpan.recordException(error);\n }\n throw error;\n }\n};\n"]}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/sync/execute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,CAAC,MAAM,OAAO,GAA+B,KAAK,EAAE,MAAM,EAAE,EAAE;IAClE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACzE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEvE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,IAAI,oBAAoB,EAAE,EAAE,CAAC;QAC3B,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,EAAE,OAAO,EAAE,2EAA2E,EAAE,CAAC,CAAC;QACrG,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC;QAC7C,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CACV,gHAAgH,CACjH,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG;YACZ,WAAW,EAAE,KAAK;SACnB,CAAC;QAEF,MAAM,iBAAiB,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;QAC9E,IAAI,MAAM,EAAE,CAAC;YACX,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC;YAEnD,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CACvB,MAAM,uBAAuB,CAAC;gBAC5B,GAAG,iBAAiB;gBACpB,KAAK,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,eAAe,CAAC;aACtG,CAAC,CACH,CAAC;YACF,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CACvB,MAAM,uBAAuB,CAAC;gBAC5B,GAAG,iBAAiB;gBACpB,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC;aAChD,CAAC,CACH,CAAC;YACF,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,IAAI,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC","sourcesContent":["import type { SyncOptions } from './types/SyncOptions.js';\nimport type { CommandAction } from '../../types/CommandAction.js';\nimport { createPartialApiContext, syncDownload, syncUpload } from '@ms-cloudpack/api-server';\nimport { runPrerequisites } from '../../common/runPrerequisites.js';\nimport { isSyncDisabledByUser } from './isSyncDisabledByUser.js';\n\nexport const execute: CommandAction<SyncOptions> = async (params) => {\n const { options, cwd, reporter, initialize, exit, autoDispose } = params;\n const { login, upload } = options;\n const { config, telemetryClient } = await initialize({ appPath: cwd });\n\n if (!config.features?.syncBundles) {\n await exit({ message: 'Sync is disabled' });\n return;\n }\n\n if (isSyncDisabledByUser()) {\n telemetryClient.rootSpan.setAttribute('syncDisabled', true);\n await exit({ message: 'CLOUDPACK_SYNC environment variable is set. Sync is disabled by the user.' });\n return;\n }\n\n try {\n const remoteCacheConfig = config.remoteCache;\n if (!remoteCacheConfig) {\n console.warn(\n 'Remote cache is not configured. Please add remoteCache to your cloudpack.config.json file to use this feature.',\n );\n return;\n }\n\n const input = {\n loginMethod: login,\n };\n\n const apiContextOptions = { appPath: cwd, config, reporter, telemetryClient };\n if (upload) {\n runPrerequisites({ config, cwd, telemetryClient });\n\n const [ctx] = autoDispose(\n await createPartialApiContext({\n ...apiContextOptions,\n items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n }),\n );\n await syncUpload({ input, ctx });\n } else {\n const [ctx] = autoDispose(\n await createPartialApiContext({\n ...apiContextOptions,\n items: ['packages', 'session', 'packageHashes'],\n }),\n );\n await syncDownload({ input, ctx });\n }\n\n await exit({ message: 'Sync complete' });\n } catch (error) {\n if (error instanceof Error) {\n telemetryClient.rootSpan.recordException(error);\n }\n throw error;\n }\n};\n"]}
@@ -14,6 +14,7 @@ export declare class CommandExecutor<TOptions extends SharedOptions> {
14
14
  private _abortController;
15
15
  private _hasCalledExit;
16
16
  private _args;
17
+ private _getMessageOnInterrupt;
17
18
  constructor(params: {
18
19
  /** Command-specific arguments */
19
20
  args: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"CommandExecutor.d.ts","sourceRoot":"","sources":["../../src/common/CommandExecutor.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,2BAA2B,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAQ/D;;GAEG;AACH,qBAAa,eAAe,CAAC,QAAQ,SAAS,aAAa;IACzD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,KAAK,CAAW;gBAEZ,MAAM,EAAE;QAClB,iCAAiC;QACjC,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,2CAA2C;QAC3C,OAAO,EAAE,QAAQ,CAAC;QAClB,uCAAuC;QACvC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjC,0CAA0C;QAC1C,cAAc,EAAE,cAAc,CAAC;QAC/B,sDAAsD;QACtD,IAAI,EAAE,MAAM,CAAC;KACd;IAWD,uBAAuB;IAEV,OAAO;IAyCpB;;;;;OAKG;YACW,WAAW;YAoGX,cAAc;IAkD5B;;;OAGG;IACH,OAAO,CAAC,KAAK,CA0BX;CACH"}
1
+ {"version":3,"file":"CommandExecutor.d.ts","sourceRoot":"","sources":["../../src/common/CommandExecutor.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,aAAa,EAAwC,MAAM,2BAA2B,CAAC;AACrG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAQ/D;;GAEG;AACH,qBAAa,eAAe,CAAC,QAAQ,SAAS,aAAa;IACzD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,sBAAsB,CAA+B;gBAEjD,MAAM,EAAE;QAClB,iCAAiC;QACjC,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,2CAA2C;QAC3C,OAAO,EAAE,QAAQ,CAAC;QAClB,uCAAuC;QACvC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjC,0CAA0C;QAC1C,cAAc,EAAE,cAAc,CAAC;QAC/B,sDAAsD;QACtD,IAAI,EAAE,MAAM,CAAC;KACd;IAWD,uBAAuB;IAEV,OAAO;IA4CpB;;;;;OAKG;YACW,WAAW;YAoGX,cAAc;IAkD5B;;;OAGG;IACH,OAAO,CAAC,KAAK,CAoBX;CACH"}
@@ -16,15 +16,16 @@ import { getVersion } from '@ms-cloudpack/package-utilities';
16
16
  export class CommandExecutor {
17
17
  constructor(params) {
18
18
  this._hasCalledExit = false;
19
+ this._getMessageOnInterrupt = () => `Interrupted by user`;
19
20
  /**
20
21
  * This is the `exit` function passed to the command's execute function.
21
22
  * (It must be an arrow function to ensure the correct `this` context.)
22
23
  */
23
- this._exit = async (exitOptions = {}) => {
24
- const { message, hasErrors = this._reporter.hasErrors(), exitCode = hasErrors ? 1 : 0 } = exitOptions;
24
+ this._exit = async (params) => {
25
+ const { message, hasErrors = this._reporter.hasErrors(), exitCode = hasErrors ? 1 : 0 } = params;
25
26
  if (this._hasCalledExit) {
26
27
  // Skip most of the operations if exit() was called multiple times.
27
- console.warn("exit() was called multiple times. This call's options:", exitOptions);
28
+ console.warn("exit() was called multiple times. This call's options:", params);
28
29
  }
29
30
  else {
30
31
  this._hasCalledExit = true;
@@ -62,7 +63,7 @@ export class CommandExecutor {
62
63
  process.exit(1);
63
64
  }
64
65
  // We are trying to exit gracefully.
65
- void this._exit();
66
+ void this._exit({ message: this._getMessageOnInterrupt() });
66
67
  });
67
68
  // Call the execute function which is the real command logic
68
69
  // (ie: real init command logic, real start command logic, etc.)
@@ -75,6 +76,9 @@ export class CommandExecutor {
75
76
  abortSignal: this._abortController.signal,
76
77
  autoDispose: (disposable) => this._autoDisposableList.add(disposable),
77
78
  exit: this._exit,
79
+ setInterruptMessageHandler: (getMessage) => {
80
+ this._getMessageOnInterrupt = getMessage;
81
+ },
78
82
  });
79
83
  }
80
84
  catch (error) {
@@ -97,7 +101,7 @@ export class CommandExecutor {
97
101
  if (!appPaths || appPaths.length === 0) {
98
102
  appPaths = singleAppPath ? [singleAppPath] : [];
99
103
  }
100
- const initContexts = [];
104
+ const contexts = [];
101
105
  const actionOptions = {
102
106
  ...this._options,
103
107
  ...initializeParams.overrideOptions,
@@ -149,13 +153,13 @@ export class CommandExecutor {
149
153
  telemetryClient.setSharedSpanAttribute('features', enabledFeatureNames);
150
154
  console.log(`Enabled features: ${enabledFeatureNames.map((f) => yellow(f)).join(', ')}`);
151
155
  }
152
- initContexts.push({
156
+ contexts.push({
153
157
  appPath: appPath,
154
158
  telemetryClient,
155
159
  config,
156
160
  });
157
161
  }
158
- return singleAppPath ? initContexts[0] : initContexts;
162
+ return singleAppPath ? contexts[0] : contexts;
159
163
  }
160
164
  async _initTelemetry(appName, config) {
161
165
  const programOptions = this._programOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"CommandExecutor.js","sourceRoot":"","sources":["../../src/common/CommandExecutor.ts"],"names":[],"mappings":"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","sourcesContent":["import { readConfig } from '@ms-cloudpack/config';\nimport type { CloudpackConfig, PackageJson } from '@ms-cloudpack/config-types';\nimport { readJson } from '@ms-cloudpack/json-utilities';\nimport {\n TaskReporter,\n bold,\n debugLoggingConfig,\n defaultLoggingConfig,\n noLoggingConfig,\n red,\n verboseLoggingConfig,\n yellow,\n} from '@ms-cloudpack/task-reporter';\nimport { createTelemetryClient, type TelemetryClient } from '@ms-cloudpack/telemetry';\nimport path from 'path';\nimport { registerPerformanceObservers } from '../performance/registerPerformanceObservers.js';\nimport type { CommandAction, InitContext } from '../types/CommandAction.js';\nimport type { ProgramOptions } from '../types/ProgramOptions.js';\nimport type { SharedOptions } from '../types/SharedOptions.js';\nimport { isCIBuild } from '../utilities/isCIBuild.js';\nimport { AutoDisposableList } from './AutoDisposableList.js';\nimport { checkFeatures } from './checkFeatures.js';\nimport { getMergedFeatureFlags } from './getMergedFeatureFlags.js';\nimport { isCodespaces } from '../utilities/isCodespaces.js';\nimport { getVersion } from '@ms-cloudpack/package-utilities';\n\n/**\n * This class manages orchestration and shared state while executing a command.\n */\nexport class CommandExecutor<TOptions extends SharedOptions> {\n private _options: TOptions;\n private _execute: CommandAction<TOptions>;\n private _programOptions: ProgramOptions;\n private _verb: string;\n private _reporter: TaskReporter;\n private _autoDisposableList: AutoDisposableList;\n private _abortController: AbortController;\n private _hasCalledExit = false;\n private _args: string[];\n\n constructor(params: {\n /** Command-specific arguments */\n args: string[];\n /** Command-specific and shared options. */\n options: TOptions;\n /** Function to execute the command. */\n execute: CommandAction<TOptions>;\n /** Shared program-level configuration. */\n programOptions: ProgramOptions;\n /** Verb being run, e.g. `bundle` or `cache clean`. */\n verb: string;\n }) {\n this._args = params.args;\n this._options = params.options;\n this._execute = params.execute;\n this._programOptions = params.programOptions;\n this._verb = params.verb;\n this._reporter = new TaskReporter();\n this._abortController = new AbortController();\n this._autoDisposableList = new AutoDisposableList();\n }\n\n /** Run the command. */\n // This has to be a separate method because constructors can't be async.\n public async execute() {\n try {\n // Setup cleanup and close things on completion.\n let sigintCount = 0;\n\n // Handle SIGINT (Ctrl+C) gracefully.\n process.on('SIGINT', () => {\n sigintCount++;\n if (sigintCount > 1) {\n console.debug('Forcing exit');\n\n // We are forcing the process to exit.\n // No clean-up is needed because user pressed Ctrl+C twice.\n process.exit(1);\n }\n\n // We are trying to exit gracefully.\n void this._exit();\n });\n\n // Call the execute function which is the real command logic\n // (ie: real init command logic, real start command logic, etc.)\n await this._execute({\n args: this._args,\n options: this._options,\n cwd: this._programOptions.cwd,\n reporter: this._reporter,\n initialize: this._initialize.bind(this),\n abortSignal: this._abortController.signal,\n autoDispose: (disposable) => this._autoDisposableList.add(disposable),\n exit: this._exit,\n });\n } catch (error) {\n // If an error occurs, exit the process with a non-zero exit code.\n await this._exit({\n hasErrors: true,\n message: error instanceof Error ? error.stack || error.message : String(error),\n });\n }\n }\n\n /**\n * This is the `initialize` function passed to the command's execute function.\n * This function uses `this` to references several class members, which is why\n * the `execute` method must use `.bind(this)`.\n * (An arrow function isn't possible here due to the overloaded method signature).\n */\n private async _initialize(initializeParams: {\n appPath: string;\n overrideOptions?: Partial<SharedOptions>;\n }): Promise<InitContext>;\n private async _initialize(initializeParams: {\n appPaths: string[];\n overrideOptions?: Partial<SharedOptions>;\n }): Promise<InitContext[]>;\n private async _initialize(initializeParams: {\n appPath?: string;\n appPaths?: string[];\n overrideOptions?: Partial<SharedOptions>;\n }): Promise<InitContext | InitContext[]> {\n const { appPath: singleAppPath } = initializeParams;\n let { appPaths } = initializeParams;\n\n if (singleAppPath && appPaths) {\n throw Error('appPath and appPaths cannot both be specified at the same time');\n }\n if (!singleAppPath && !appPaths) {\n throw Error('one of appPath or appPaths must be specified');\n }\n\n if (!appPaths || appPaths.length === 0) {\n appPaths = singleAppPath ? [singleAppPath] : [];\n }\n\n const initContexts = [];\n\n const actionOptions: SharedOptions = {\n ...this._options,\n ...initializeParams.overrideOptions,\n };\n\n const helpMessages = new Set<string>();\n\n const configs = new Map<string, CloudpackConfig>();\n for (const appPath of appPaths) {\n const config = await readConfig(appPath);\n if (config.helpMessage) {\n helpMessages.add(config.helpMessage);\n }\n configs.set(appPath, config);\n }\n\n // Set reporter options and print the product info header\n this._reporter.setOptions({\n productName: 'Cloudpack',\n version: this._programOptions.version,\n description: () => `Running \"${bold(this._programOptions.argv.slice(2).join(' '))}\"`,\n helpMessage: [...helpMessages].join('\\n'),\n plainTextMode: !actionOptions.color,\n ...(actionOptions.debug\n ? debugLoggingConfig\n : actionOptions.verbose\n ? verboseLoggingConfig\n : actionOptions.quiet\n ? noLoggingConfig\n : defaultLoggingConfig),\n });\n\n for (const appPath of appPaths) {\n const config = configs.get(appPath) as CloudpackConfig;\n const definition = (await readJson(path.join(appPath, 'package.json'))) as PackageJson;\n\n const telemetryClient = await this._initTelemetry(definition.name, config);\n // Dispose the telemetry client when the app is closing\n this._autoDisposableList.add({\n dispose: () => telemetryClient.shutdown(),\n });\n\n // Merge in any additional features from the command line and remote feature flags.\n config.features = await getMergedFeatureFlags(config, actionOptions, appPath, definition.name);\n\n const featureErrors = checkFeatures({ configFeatures: config.features });\n // If there are any invalid features, exit with an error.\n if (featureErrors.length) {\n featureErrors.forEach((error) => console.error(error));\n process.exit(1);\n }\n\n const enabledFeatureNames = Object.entries(config.features)\n .filter(([, value]) => value)\n .map(([key]) => key);\n\n if (enabledFeatureNames.length) {\n telemetryClient.setSharedSpanAttribute('features', enabledFeatureNames);\n console.log(`Enabled features: ${enabledFeatureNames.map((f) => yellow(f)).join(', ')}`);\n }\n\n initContexts.push({\n appPath: appPath,\n telemetryClient,\n config,\n });\n }\n\n return singleAppPath ? initContexts[0] : initContexts;\n }\n\n private async _initTelemetry(appName: string | undefined, config: CloudpackConfig): Promise<TelemetryClient> {\n const programOptions = this._programOptions;\n const options = this._options;\n\n const connectionString = programOptions.disableTelemetry\n ? undefined\n : config.telemetry?.connectionString || process.env.CLOUDPACK_TELEMETRY_CONNECTION_STRING;\n\n const logLevel = options.verbose ? 'VERBOSE' : options.debug ? 'DEBUG' : undefined;\n if (!options.debug) {\n this._reporter.ignoreLogMessage('ApplicationInsights:');\n }\n\n const telemetryClient = await createTelemetryClient({\n productVersion: getVersion(import.meta.url),\n connectionString,\n logLevel,\n serviceNamespace: 'cloudpack',\n serviceName: 'cli',\n rootSpanName: 'CLI',\n });\n\n const isCI = isCIBuild();\n\n telemetryClient.setSharedSpanAttribute('verb', this._verb);\n telemetryClient.setSharedSpanAttribute('arguments', programOptions.argv.slice(3).join(' '));\n telemetryClient.setSharedSpanAttribute('environment', isCI ? 'ci' : isCodespaces() ? 'codespaces' : 'local');\n telemetryClient.setSharedSpanAttribute('appName', appName || '<unknown>');\n\n if (isCI) {\n const ciAttributes = {\n buildId: process.env.BUILD_BUILDID,\n definitionId: process.env.SYSTEM_DEFINITIONID,\n buildReason: process.env.BUILD_REASON,\n pullRequestId: process.env.SYSTEM_PULLREQUEST_PULLREQUESTID,\n };\n\n for (const [key, value] of Object.entries(ciAttributes)) {\n if (value) {\n telemetryClient.setSharedSpanAttribute(key, value);\n }\n }\n }\n\n // Register performance observers to track performance metrics as events of CLI span.\n registerPerformanceObservers(telemetryClient);\n\n return telemetryClient;\n }\n\n /**\n * This is the `exit` function passed to the command's execute function.\n * (It must be an arrow function to ensure the correct `this` context.)\n */\n private _exit = async (\n exitOptions: {\n hasErrors?: boolean;\n message?: string;\n exitCode?: number;\n } = {},\n ) => {\n const { message, hasErrors = this._reporter.hasErrors(), exitCode = hasErrors ? 1 : 0 } = exitOptions;\n\n if (this._hasCalledExit) {\n // Skip most of the operations if exit() was called multiple times.\n console.warn(\"exit() was called multiple times. This call's options:\", exitOptions);\n } else {\n this._hasCalledExit = true;\n\n // Let the execute function know that we are exiting.\n this._abortController.abort();\n\n // Dispose all registered disposables.\n await this._autoDisposableList.dispose();\n\n // Show the summary message (this will throw if called twice).\n this._reporter.complete(hasErrors ? red(message) : message);\n }\n\n process.exit(exitCode);\n };\n}\n"]}
1
+ {"version":3,"file":"CommandExecutor.js","sourceRoot":"","sources":["../../src/common/CommandExecutor.ts"],"names":[],"mappings":"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","sourcesContent":["import { readConfig } from '@ms-cloudpack/config';\nimport type { CloudpackConfig, PackageJson } from '@ms-cloudpack/common-types';\nimport { readJson } from '@ms-cloudpack/json-utilities';\nimport {\n TaskReporter,\n bold,\n debugLoggingConfig,\n defaultLoggingConfig,\n noLoggingConfig,\n red,\n verboseLoggingConfig,\n yellow,\n} from '@ms-cloudpack/task-reporter';\nimport { createTelemetryClient, type TelemetryClient } from '@ms-cloudpack/telemetry';\nimport path from 'path';\nimport { registerPerformanceObservers } from '../performance/registerPerformanceObservers.js';\nimport type { CommandAction, CommandExitParams, AppCommandContext } from '../types/CommandAction.js';\nimport type { ProgramOptions } from '../types/ProgramOptions.js';\nimport type { SharedOptions } from '../types/SharedOptions.js';\nimport { isCIBuild } from '../utilities/isCIBuild.js';\nimport { AutoDisposableList } from './AutoDisposableList.js';\nimport { checkFeatures } from './checkFeatures.js';\nimport { getMergedFeatureFlags } from './getMergedFeatureFlags.js';\nimport { isCodespaces } from '../utilities/isCodespaces.js';\nimport { getVersion } from '@ms-cloudpack/package-utilities';\n\n/**\n * This class manages orchestration and shared state while executing a command.\n */\nexport class CommandExecutor<TOptions extends SharedOptions> {\n private _options: TOptions;\n private _execute: CommandAction<TOptions>;\n private _programOptions: ProgramOptions;\n private _verb: string;\n private _reporter: TaskReporter;\n private _autoDisposableList: AutoDisposableList;\n private _abortController: AbortController;\n private _hasCalledExit = false;\n private _args: string[];\n private _getMessageOnInterrupt = () => `Interrupted by user`;\n\n constructor(params: {\n /** Command-specific arguments */\n args: string[];\n /** Command-specific and shared options. */\n options: TOptions;\n /** Function to execute the command. */\n execute: CommandAction<TOptions>;\n /** Shared program-level configuration. */\n programOptions: ProgramOptions;\n /** Verb being run, e.g. `bundle` or `cache clean`. */\n verb: string;\n }) {\n this._args = params.args;\n this._options = params.options;\n this._execute = params.execute;\n this._programOptions = params.programOptions;\n this._verb = params.verb;\n this._reporter = new TaskReporter();\n this._abortController = new AbortController();\n this._autoDisposableList = new AutoDisposableList();\n }\n\n /** Run the command. */\n // This has to be a separate method because constructors can't be async.\n public async execute() {\n try {\n // Setup cleanup and close things on completion.\n let sigintCount = 0;\n\n // Handle SIGINT (Ctrl+C) gracefully.\n process.on('SIGINT', () => {\n sigintCount++;\n if (sigintCount > 1) {\n console.debug('Forcing exit');\n\n // We are forcing the process to exit.\n // No clean-up is needed because user pressed Ctrl+C twice.\n process.exit(1);\n }\n\n // We are trying to exit gracefully.\n void this._exit({ message: this._getMessageOnInterrupt() });\n });\n\n // Call the execute function which is the real command logic\n // (ie: real init command logic, real start command logic, etc.)\n await this._execute({\n args: this._args,\n options: this._options,\n cwd: this._programOptions.cwd,\n reporter: this._reporter,\n initialize: this._initialize.bind(this),\n abortSignal: this._abortController.signal,\n autoDispose: (disposable) => this._autoDisposableList.add(disposable),\n exit: this._exit,\n setInterruptMessageHandler: (getMessage) => {\n this._getMessageOnInterrupt = getMessage;\n },\n });\n } catch (error) {\n // If an error occurs, exit the process with a non-zero exit code.\n await this._exit({\n hasErrors: true,\n message: error instanceof Error ? error.stack || error.message : String(error),\n });\n }\n }\n\n /**\n * This is the `initialize` function passed to the command's execute function.\n * This function uses `this` to references several class members, which is why\n * the `execute` method must use `.bind(this)`.\n * (An arrow function isn't possible here due to the overloaded method signature).\n */\n private async _initialize(initializeParams: {\n appPath: string;\n overrideOptions?: Partial<SharedOptions>;\n }): Promise<AppCommandContext>;\n private async _initialize(initializeParams: {\n appPaths: string[];\n overrideOptions?: Partial<SharedOptions>;\n }): Promise<AppCommandContext[]>;\n private async _initialize(initializeParams: {\n appPath?: string;\n appPaths?: string[];\n overrideOptions?: Partial<SharedOptions>;\n }): Promise<AppCommandContext | AppCommandContext[]> {\n const { appPath: singleAppPath } = initializeParams;\n let { appPaths } = initializeParams;\n\n if (singleAppPath && appPaths) {\n throw Error('appPath and appPaths cannot both be specified at the same time');\n }\n if (!singleAppPath && !appPaths) {\n throw Error('one of appPath or appPaths must be specified');\n }\n\n if (!appPaths || appPaths.length === 0) {\n appPaths = singleAppPath ? [singleAppPath] : [];\n }\n\n const contexts: AppCommandContext[] = [];\n\n const actionOptions: SharedOptions = {\n ...this._options,\n ...initializeParams.overrideOptions,\n };\n\n const helpMessages = new Set<string>();\n\n const configs = new Map<string, CloudpackConfig>();\n for (const appPath of appPaths) {\n const config = await readConfig(appPath);\n if (config.helpMessage) {\n helpMessages.add(config.helpMessage);\n }\n configs.set(appPath, config);\n }\n\n // Set reporter options and print the product info header\n this._reporter.setOptions({\n productName: 'Cloudpack',\n version: this._programOptions.version,\n description: () => `Running \"${bold(this._programOptions.argv.slice(2).join(' '))}\"`,\n helpMessage: [...helpMessages].join('\\n'),\n plainTextMode: !actionOptions.color,\n ...(actionOptions.debug\n ? debugLoggingConfig\n : actionOptions.verbose\n ? verboseLoggingConfig\n : actionOptions.quiet\n ? noLoggingConfig\n : defaultLoggingConfig),\n });\n\n for (const appPath of appPaths) {\n const config = configs.get(appPath) as CloudpackConfig;\n const definition = (await readJson(path.join(appPath, 'package.json'))) as PackageJson;\n\n const telemetryClient = await this._initTelemetry(definition.name, config);\n // Dispose the telemetry client when the app is closing\n this._autoDisposableList.add({\n dispose: () => telemetryClient.shutdown(),\n });\n\n // Merge in any additional features from the command line and remote feature flags.\n config.features = await getMergedFeatureFlags(config, actionOptions, appPath, definition.name);\n\n const featureErrors = checkFeatures({ configFeatures: config.features });\n // If there are any invalid features, exit with an error.\n if (featureErrors.length) {\n featureErrors.forEach((error) => console.error(error));\n process.exit(1);\n }\n\n const enabledFeatureNames = Object.entries(config.features)\n .filter(([, value]) => value)\n .map(([key]) => key);\n\n if (enabledFeatureNames.length) {\n telemetryClient.setSharedSpanAttribute('features', enabledFeatureNames);\n console.log(`Enabled features: ${enabledFeatureNames.map((f) => yellow(f)).join(', ')}`);\n }\n\n contexts.push({\n appPath: appPath,\n telemetryClient,\n config,\n });\n }\n\n return singleAppPath ? contexts[0] : contexts;\n }\n\n private async _initTelemetry(appName: string | undefined, config: CloudpackConfig): Promise<TelemetryClient> {\n const programOptions = this._programOptions;\n const options = this._options;\n\n const connectionString = programOptions.disableTelemetry\n ? undefined\n : config.telemetry?.connectionString || process.env.CLOUDPACK_TELEMETRY_CONNECTION_STRING;\n\n const logLevel = options.verbose ? 'VERBOSE' : options.debug ? 'DEBUG' : undefined;\n if (!options.debug) {\n this._reporter.ignoreLogMessage('ApplicationInsights:');\n }\n\n const telemetryClient = await createTelemetryClient({\n productVersion: getVersion(import.meta.url),\n connectionString,\n logLevel,\n serviceNamespace: 'cloudpack',\n serviceName: 'cli',\n rootSpanName: 'CLI',\n });\n\n const isCI = isCIBuild();\n\n telemetryClient.setSharedSpanAttribute('verb', this._verb);\n telemetryClient.setSharedSpanAttribute('arguments', programOptions.argv.slice(3).join(' '));\n telemetryClient.setSharedSpanAttribute('environment', isCI ? 'ci' : isCodespaces() ? 'codespaces' : 'local');\n telemetryClient.setSharedSpanAttribute('appName', appName || '<unknown>');\n\n if (isCI) {\n const ciAttributes = {\n buildId: process.env.BUILD_BUILDID,\n definitionId: process.env.SYSTEM_DEFINITIONID,\n buildReason: process.env.BUILD_REASON,\n pullRequestId: process.env.SYSTEM_PULLREQUEST_PULLREQUESTID,\n };\n\n for (const [key, value] of Object.entries(ciAttributes)) {\n if (value) {\n telemetryClient.setSharedSpanAttribute(key, value);\n }\n }\n }\n\n // Register performance observers to track performance metrics as events of CLI span.\n registerPerformanceObservers(telemetryClient);\n\n return telemetryClient;\n }\n\n /**\n * This is the `exit` function passed to the command's execute function.\n * (It must be an arrow function to ensure the correct `this` context.)\n */\n private _exit = async (params: CommandExitParams) => {\n const { message, hasErrors = this._reporter.hasErrors(), exitCode = hasErrors ? 1 : 0 } = params;\n\n if (this._hasCalledExit) {\n // Skip most of the operations if exit() was called multiple times.\n console.warn(\"exit() was called multiple times. This call's options:\", params);\n } else {\n this._hasCalledExit = true;\n\n // Let the execute function know that we are exiting.\n this._abortController.abort();\n\n // Dispose all registered disposables.\n await this._autoDisposableList.dispose();\n\n // Show the summary message (this will throw if called twice).\n this._reporter.complete(hasErrors ? red(message) : message);\n }\n\n process.exit(exitCode);\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { allFeatures } from '@ms-cloudpack/config-types';
1
+ import { allFeatures } from '@ms-cloudpack/common-types';
2
2
  /**
3
3
  * Check that the features in the config are valid.
4
4
  * @returns An array of errors.
@@ -1,4 +1,4 @@
1
- import { allFeatures } from '@ms-cloudpack/config-types';
1
+ import { allFeatures } from '@ms-cloudpack/common-types';
2
2
  import didyoumean from 'didyoumean';
3
3
  /**
4
4
  * Check that the features in the config are valid.
@@ -1 +1 @@
1
- {"version":3,"file":"checkFeatures.js","sourceRoot":"","sources":["../../src/common/checkFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAmE,EAC9F,cAAc,EACd,UAAU,GAAG,WAAqC,GAMnD;IACC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QAC/B,0BAA0B;QAC1B,IAAI,CAAC,CAAC,WAAW,IAAI,UAAU,CAAC,EAAE,CAAC;YACjC,yDAAyD;YACzD,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,oBAAoB,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,kBAAkB,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { allFeatures } from '@ms-cloudpack/config-types';\nimport didyoumean from 'didyoumean';\n\n/**\n * Check that the features in the config are valid.\n * @returns An array of errors.\n */\nexport function checkFeatures<TFeatureSet extends Record<string, unknown> = typeof allFeatures>({\n configFeatures,\n featureSet = allFeatures as unknown as TFeatureSet,\n}: {\n /** The features from the config. */\n configFeatures?: Record<string, boolean>;\n /** The set of valid features. */\n featureSet?: TFeatureSet;\n}): string[] {\n if (!configFeatures) {\n return [];\n }\n\n const featureList = Object.keys(featureSet);\n const features = Object.keys(configFeatures);\n const errors: string[] = [];\n\n features.forEach((featureName) => {\n // Require an exact match.\n if (!(featureName in featureSet)) {\n // If there is no exact match, suggest the closest match.\n const suggestion = didyoumean(featureName, featureList);\n errors.push(`Unknown feature \"${featureName}\".${suggestion ? ` Did you mean \"${suggestion}\"?` : ''}`);\n }\n });\n\n return errors;\n}\n"]}
1
+ {"version":3,"file":"checkFeatures.js","sourceRoot":"","sources":["../../src/common/checkFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAmE,EAC9F,cAAc,EACd,UAAU,GAAG,WAAqC,GAMnD;IACC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QAC/B,0BAA0B;QAC1B,IAAI,CAAC,CAAC,WAAW,IAAI,UAAU,CAAC,EAAE,CAAC;YACjC,yDAAyD;YACzD,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,oBAAoB,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,kBAAkB,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { allFeatures } from '@ms-cloudpack/common-types';\nimport didyoumean from 'didyoumean';\n\n/**\n * Check that the features in the config are valid.\n * @returns An array of errors.\n */\nexport function checkFeatures<TFeatureSet extends Record<string, unknown> = typeof allFeatures>({\n configFeatures,\n featureSet = allFeatures as unknown as TFeatureSet,\n}: {\n /** The features from the config. */\n configFeatures?: Record<string, boolean>;\n /** The set of valid features. */\n featureSet?: TFeatureSet;\n}): string[] {\n if (!configFeatures) {\n return [];\n }\n\n const featureList = Object.keys(featureSet);\n const features = Object.keys(configFeatures);\n const errors: string[] = [];\n\n features.forEach((featureName) => {\n // Require an exact match.\n if (!(featureName in featureSet)) {\n // If there is no exact match, suggest the closest match.\n const suggestion = didyoumean(featureName, featureList);\n errors.push(`Unknown feature \"${featureName}\".${suggestion ? ` Did you mean \"${suggestion}\"?` : ''}`);\n }\n });\n\n return errors;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { PackageOverride } from '@ms-cloudpack/config-types';
1
+ import type { PackageOverride } from '@ms-cloudpack/common-types';
2
2
  /**
3
3
  * Given a set of package overrides, finds the overrides for the given package name and version.
4
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"findPackageOverride.js","sourceRoot":"","sources":["../../src/common/findPackageOverride.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,gBAAmC,EACnC,WAAmB,EACnB,cAAsB;IAEtB,OAAO,gBAAgB,CAAC,IAAI,CAC1B,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAC7G,CAAC;AACJ,CAAC","sourcesContent":["import semver from 'semver';\nimport type { PackageOverride } from '@ms-cloudpack/config-types';\n\n/**\n * Given a set of package overrides, finds the overrides for the given package name and version.\n */\nexport function findPackageOverride(\n packageOverrides: PackageOverride[],\n packageName: string,\n packageVersion: string,\n): PackageOverride | undefined {\n return packageOverrides.find(\n (override) => override.name === packageName && semver.satisfies(packageVersion, override.versionRequirement),\n );\n}\n"]}
1
+ {"version":3,"file":"findPackageOverride.js","sourceRoot":"","sources":["../../src/common/findPackageOverride.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,gBAAmC,EACnC,WAAmB,EACnB,cAAsB;IAEtB,OAAO,gBAAgB,CAAC,IAAI,CAC1B,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAC7G,CAAC;AACJ,CAAC","sourcesContent":["import semver from 'semver';\nimport type { PackageOverride } from '@ms-cloudpack/common-types';\n\n/**\n * Given a set of package overrides, finds the overrides for the given package name and version.\n */\nexport function findPackageOverride(\n packageOverrides: PackageOverride[],\n packageName: string,\n packageVersion: string,\n): PackageOverride | undefined {\n return packageOverrides.find(\n (override) => override.name === packageName && semver.satisfies(packageVersion, override.versionRequirement),\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { SharedOptions } from '../types/SharedOptions.js';
2
- import { type CloudpackConfig } from '@ms-cloudpack/config-types';
2
+ import { type CloudpackConfig } from '@ms-cloudpack/common-types';
3
3
  export declare function getMergedFeatureFlags(config: CloudpackConfig, actionOptions: SharedOptions, appPath: string, appName?: string): Promise<{
4
4
  [x: string]: boolean | undefined;
5
5
  }>;
@@ -1,6 +1,6 @@
1
1
  import { mergeFeatures } from './mergeFeatures.js';
2
2
  import { downloadFeatureFlags, getFeatureFlags } from '@ms-cloudpack/feature-flags';
3
- import { allFeatures } from '@ms-cloudpack/config-types';
3
+ import { allFeatures } from '@ms-cloudpack/common-types';
4
4
  import { getRepositoryName } from '../utilities/getRepositoryName.js';
5
5
  export async function getMergedFeatureFlags(config, actionOptions, appPath, appName) {
6
6
  const repositoryName = await getRepositoryName(appPath);