@ms-cloudpack/cli 0.66.16 → 0.66.17

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.
@@ -1,4 +1,4 @@
1
- import type { BundleMode, PackageSettings } from '@ms-cloudpack/common-types';
1
+ import type { BundleMode, PackageSettingsMatch } from '@ms-cloudpack/common-types';
2
2
  export interface BundleOptions {
3
3
  /**
4
4
  * Forces use of a specific bundler. 'ori' | 'rollup' | 'auto'. Defaults to "auto".
@@ -22,7 +22,7 @@ export interface BundleOptions {
22
22
  /**
23
23
  * If set, only evaluate matching packages.
24
24
  */
25
- match?: PackageSettings['match'][];
25
+ match?: PackageSettingsMatch[];
26
26
  /** The mode to bundle in (library/development/production). */
27
27
  mode: BundleMode;
28
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BundleOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/bundle/types/BundleOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE9E,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAEnC,8DAA8D;IAC9D,IAAI,EAAE,UAAU,CAAC;CAClB"}
1
+ {"version":3,"file":"BundleOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/bundle/types/BundleOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEnF,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAE/B,8DAA8D;IAC9D,IAAI,EAAE,UAAU,CAAC;CAClB"}
@@ -1 +1 @@
1
- {"version":3,"file":"BundleOptions.js","sourceRoot":"","sources":["../../../../src/commands/bundle/types/BundleOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { BundleMode, PackageSettings } from '@ms-cloudpack/common-types';\n\nexport interface BundleOptions {\n /**\n * Forces use of a specific bundler. 'ori' | 'rollup' | 'auto'. Defaults to \"auto\".\n */\n bundler?: string;\n\n /**\n * Disables source maps.\n */\n disableSourceMaps?: boolean;\n\n /**\n * Path to drop the bundle output. This is usually relative to the app path.\n * If `package` is set, it's relative to the package path.\n *\n * If not set, the bundle output is dropped in the default path under the cloudpack cache.\n */\n outdir?: string;\n\n /**\n * @deprecated Removed in favor of `match`.\n */\n package?: string;\n\n /**\n * If set, only evaluate matching packages.\n */\n match?: PackageSettings['match'][];\n\n /** The mode to bundle in (library/development/production). */\n mode: BundleMode;\n}\n"]}
1
+ {"version":3,"file":"BundleOptions.js","sourceRoot":"","sources":["../../../../src/commands/bundle/types/BundleOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { BundleMode, PackageSettingsMatch } from '@ms-cloudpack/common-types';\n\nexport interface BundleOptions {\n /**\n * Forces use of a specific bundler. 'ori' | 'rollup' | 'auto'. Defaults to \"auto\".\n */\n bundler?: string;\n\n /**\n * Disables source maps.\n */\n disableSourceMaps?: boolean;\n\n /**\n * Path to drop the bundle output. This is usually relative to the app path.\n * If `package` is set, it's relative to the package path.\n *\n * If not set, the bundle output is dropped in the default path under the cloudpack cache.\n */\n outdir?: string;\n\n /**\n * @deprecated Removed in favor of `match`.\n */\n package?: string;\n\n /**\n * If set, only evaluate matching packages.\n */\n match?: PackageSettingsMatch[];\n\n /** The mode to bundle in (library/development/production). */\n mode: BundleMode;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { PackageSettings } from '@ms-cloudpack/common-types';
1
+ import type { PackageSettingsMatch } from '@ms-cloudpack/common-types';
2
2
  /**
3
3
  * Defines the options for the "init" command.
4
4
  */
@@ -16,7 +16,7 @@ export interface InitOptions {
16
16
  /**
17
17
  * If set, only evaluate matching packages.
18
18
  */
19
- match?: PackageSettings['match'][];
19
+ match?: PackageSettingsMatch[];
20
20
  /** Whether to use the cache */
21
21
  cache?: boolean;
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InitOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/InitOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAEnC,+BAA+B;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB"}
1
+ {"version":3,"file":"InitOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/InitOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAE/B,+BAA+B;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"InitOptions.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PackageSettings } from '@ms-cloudpack/common-types';\n\n/**\n * Defines the options for the \"init\" command.\n */\nexport interface InitOptions {\n /** Writes the resolve map to `resolve-map.json`. */\n logResolveMap?: boolean;\n\n /**\n * Whether to ignore existing overrides when determining all entries.\n */\n reset?: boolean;\n\n /**\n * Whether to fail on missing exports.\n */\n check?: boolean;\n\n /**\n * If set, only evaluate matching packages.\n */\n match?: PackageSettings['match'][];\n\n /** Whether to use the cache */\n cache?: boolean;\n}\n"]}
1
+ {"version":3,"file":"InitOptions.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PackageSettingsMatch } from '@ms-cloudpack/common-types';\n\n/**\n * Defines the options for the \"init\" command.\n */\nexport interface InitOptions {\n /** Writes the resolve map to `resolve-map.json`. */\n logResolveMap?: boolean;\n\n /**\n * Whether to ignore existing overrides when determining all entries.\n */\n reset?: boolean;\n\n /**\n * Whether to fail on missing exports.\n */\n check?: boolean;\n\n /**\n * If set, only evaluate matching packages.\n */\n match?: PackageSettingsMatch[];\n\n /** Whether to use the cache */\n cache?: boolean;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CommandExecutor.d.ts","sourceRoot":"","sources":["../../src/utilities/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;YAyGX,cAAc;IAmD5B;;;OAGG;IACH,OAAO,CAAC,KAAK,CAyBX;CACH"}
1
+ {"version":3,"file":"CommandExecutor.d.ts","sourceRoot":"","sources":["../../src/utilities/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;YAmHX,cAAc;IAmD5B;;;OAGG;IACH,OAAO,CAAC,KAAK,CA4BX;CACH"}
@@ -25,10 +25,13 @@ export class CommandExecutor {
25
25
  const { message, hasErrors = this._reporter.hasErrors(), exitCode = hasErrors ? 1 : 0 } = params;
26
26
  if (this._hasCalledExit) {
27
27
  // Skip most of the operations if exit() was called multiple times.
28
- const prettyParams = Object.entries(params)
29
- .map(([key, value]) => `${key}="${value}"`)
30
- .join(', ');
31
- console.warn(`exit() was called multiple times. This call's options: ${prettyParams}.`);
28
+ // But only use the error message if not in a test, due to the way we're mocking process.exit.
29
+ if (!process.env.JEST_WORKER_ID) {
30
+ const prettyParams = Object.entries(params)
31
+ .map(([key, value]) => `${key}="${value}"`)
32
+ .join(', ');
33
+ console.warn(`exit() was called multiple times. This call's options: ${prettyParams}.`);
34
+ }
32
35
  }
33
36
  else {
34
37
  this._hasCalledExit = true;
@@ -113,7 +116,18 @@ export class CommandExecutor {
113
116
  const helpMessages = new Set();
114
117
  const configs = new Map();
115
118
  for (const appPath of appPaths) {
116
- const config = await readConfig(appPath, mode);
119
+ let config;
120
+ try {
121
+ config = await readConfig(appPath, mode);
122
+ }
123
+ catch (err) {
124
+ await this._exit({
125
+ message: `Invalid cloudpack config: ${err.message || err}`,
126
+ hasErrors: true,
127
+ });
128
+ // this will never be reached, but TypeScript doesn't know that
129
+ process.exit(1);
130
+ }
117
131
  if (config.helpMessage) {
118
132
  helpMessages.add(config.helpMessage);
119
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CommandExecutor.js","sourceRoot":"","sources":["../../src/utilities/CommandExecutor.ts"],"names":[],"mappings":"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","sourcesContent":["import { readConfig } from '@ms-cloudpack/config';\nimport type { BundleMode, 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 mode?: BundleMode;\n overrideOptions?: Partial<SharedOptions>;\n }): Promise<AppCommandContext>;\n private async _initialize(initializeParams: {\n appPaths: string[];\n mode?: BundleMode;\n overrideOptions?: Partial<SharedOptions>;\n }): Promise<AppCommandContext[]>;\n private async _initialize(initializeParams: {\n appPath?: string;\n appPaths?: string[];\n mode?: BundleMode;\n overrideOptions?: Partial<SharedOptions>;\n }): Promise<AppCommandContext | AppCommandContext[]> {\n const { appPath: singleAppPath, mode } = 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, mode);\n if (config.helpMessage) {\n helpMessages.add(config.helpMessage);\n }\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<PackageJson>(path.join(appPath, 'package.json'));\n const { name = path.basename(appPath) } = definition || {};\n\n const telemetryClient = await this._initTelemetry(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, appName: name });\n\n const featureErrors = checkFeatures({ configFeatures: config.features });\n\n // If there are any invalid features, warn the user and continue.\n if (featureErrors.length) {\n featureErrors.forEach((warning) => console.warn(warning));\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 telemetryClient.setSharedSpanAttribute('mode', config.mode || 'library');\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 const prettyParams = Object.entries(params)\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(', ');\n console.warn(`exit() was called multiple times. This call's options: ${prettyParams}.`);\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 const exitWithError = exitCode !== 0;\n\n // Show the summary message (this will throw if called twice).\n this._reporter.complete(hasErrors ? red(message) : message, exitWithError);\n }\n\n process.exit(exitCode);\n };\n}\n"]}
1
+ {"version":3,"file":"CommandExecutor.js","sourceRoot":"","sources":["../../src/utilities/CommandExecutor.ts"],"names":[],"mappings":"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","sourcesContent":["import { readConfig } from '@ms-cloudpack/config';\nimport type { BundleMode, 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 mode?: BundleMode;\n overrideOptions?: Partial<SharedOptions>;\n }): Promise<AppCommandContext>;\n private async _initialize(initializeParams: {\n appPaths: string[];\n mode?: BundleMode;\n overrideOptions?: Partial<SharedOptions>;\n }): Promise<AppCommandContext[]>;\n private async _initialize(initializeParams: {\n appPath?: string;\n appPaths?: string[];\n mode?: BundleMode;\n overrideOptions?: Partial<SharedOptions>;\n }): Promise<AppCommandContext | AppCommandContext[]> {\n const { appPath: singleAppPath, mode } = 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 let config: CloudpackConfig;\n try {\n config = await readConfig(appPath, mode);\n } catch (err) {\n await this._exit({\n message: `Invalid cloudpack config: ${(err as Error).message || err}`,\n hasErrors: true,\n });\n // this will never be reached, but TypeScript doesn't know that\n process.exit(1);\n }\n if (config.helpMessage) {\n helpMessages.add(config.helpMessage);\n }\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<PackageJson>(path.join(appPath, 'package.json'));\n const { name = path.basename(appPath) } = definition || {};\n\n const telemetryClient = await this._initTelemetry(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, appName: name });\n\n const featureErrors = checkFeatures({ configFeatures: config.features });\n\n // If there are any invalid features, warn the user and continue.\n if (featureErrors.length) {\n featureErrors.forEach((warning) => console.warn(warning));\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 telemetryClient.setSharedSpanAttribute('mode', config.mode || 'library');\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 // But only use the error message if not in a test, due to the way we're mocking process.exit.\n if (!process.env.JEST_WORKER_ID) {\n const prettyParams = Object.entries(params)\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(', ');\n console.warn(`exit() was called multiple times. This call's options: ${prettyParams}.`);\n }\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 const exitWithError = exitCode !== 0;\n\n // Show the summary message (this will throw if called twice).\n this._reporter.complete(hasErrors ? red(message) : message, exitWithError);\n }\n\n process.exit(exitCode);\n };\n}\n"]}
@@ -1,7 +1,7 @@
1
- import type { PackageSettings } from '@ms-cloudpack/common-types';
1
+ import type { PackageSettingsMatch } from '@ms-cloudpack/common-types';
2
2
  import type { ResolveMap } from '@ms-cloudpack/package-utilities';
3
3
  /**
4
4
  * Find packages in the resolve map that match the requested names and versions.
5
5
  */
6
- export declare function getFilteredPackages(resolveMap: ResolveMap, match: PackageSettings['match'][]): string[];
6
+ export declare function getFilteredPackages(resolveMap: ResolveMap, match: PackageSettingsMatch[]): string[];
7
7
  //# sourceMappingURL=getFilteredPackages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getFilteredPackages.d.ts","sourceRoot":"","sources":["../../src/utilities/getFilteredPackages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAGlE;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,CAoBvG"}
1
+ {"version":3,"file":"getFilteredPackages.d.ts","sourceRoot":"","sources":["../../src/utilities/getFilteredPackages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAGlE;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,CAoBnG"}
@@ -1 +1 @@
1
- {"version":3,"file":"getFilteredPackages.js","sourceRoot":"","sources":["../../src/utilities/getFilteredPackages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAE5F;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAsB,EAAE,KAAiC;IAC3F,4CAA4C;IAC5C,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CACnE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CACtF,CAAC;IAEF,MAAM,eAAe,GAAG,KAAK;SAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;SAC3F,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,8BAA8B,eAAe,EAAE,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,WAAW,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,eAAe,KAAK;YACrF,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAC/F,CAAC;IACJ,CAAC;IAED,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC","sourcesContent":["import type { PackageSettings } from '@ms-cloudpack/common-types';\nimport { checkMatch } from '@ms-cloudpack/config';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport { bold, bulletedList, formatPackageName, plural } from '@ms-cloudpack/task-reporter';\n\n/**\n * Find packages in the resolve map that match the requested names and versions.\n */\nexport function getFilteredPackages(resolveMap: ResolveMap, match: PackageSettings['match'][]): string[] {\n // Find matching packages in the resolve map\n const resolveMapEntries = Object.values(resolveMap).filter((entry) =>\n match.some((m) => checkMatch({ name: entry.name, version: entry.version, match: m })),\n );\n\n const matchArgsString = match\n .map((m) => `\"${bold(typeof m === 'object' ? `${m.name}@${m.version || '*'}` : m || '*')}\"`)\n .join(', ');\n\n if (!resolveMapEntries.length) {\n console.error(`No packages found matching ${matchArgsString}`);\n } else {\n console.log(\n `\\nFound ${plural(resolveMapEntries.length, 'package')} matching ${matchArgsString}:\\n` +\n bulletedList(resolveMapEntries.map((entry) => `${formatPackageName(entry)}: ${entry.path}`)),\n );\n }\n\n return resolveMapEntries.map((entry) => entry.path);\n}\n"]}
1
+ {"version":3,"file":"getFilteredPackages.js","sourceRoot":"","sources":["../../src/utilities/getFilteredPackages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAE5F;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAsB,EAAE,KAA6B;IACvF,4CAA4C;IAC5C,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CACnE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CACtF,CAAC;IAEF,MAAM,eAAe,GAAG,KAAK;SAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;SAC3F,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,8BAA8B,eAAe,EAAE,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,WAAW,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,eAAe,KAAK;YACrF,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAC/F,CAAC;IACJ,CAAC;IAED,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC","sourcesContent":["import type { PackageSettingsMatch } from '@ms-cloudpack/common-types';\nimport { checkMatch } from '@ms-cloudpack/config';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport { bold, bulletedList, formatPackageName, plural } from '@ms-cloudpack/task-reporter';\n\n/**\n * Find packages in the resolve map that match the requested names and versions.\n */\nexport function getFilteredPackages(resolveMap: ResolveMap, match: PackageSettingsMatch[]): string[] {\n // Find matching packages in the resolve map\n const resolveMapEntries = Object.values(resolveMap).filter((entry) =>\n match.some((m) => checkMatch({ name: entry.name, version: entry.version, match: m })),\n );\n\n const matchArgsString = match\n .map((m) => `\"${bold(typeof m === 'object' ? `${m.name}@${m.version || '*'}` : m || '*')}\"`)\n .join(', ');\n\n if (!resolveMapEntries.length) {\n console.error(`No packages found matching ${matchArgsString}`);\n } else {\n console.log(\n `\\nFound ${plural(resolveMapEntries.length, 'package')} matching ${matchArgsString}:\\n` +\n bulletedList(resolveMapEntries.map((entry) => `${formatPackageName(entry)}: ${entry.path}`)),\n );\n }\n\n return resolveMapEntries.map((entry) => entry.path);\n}\n"]}
@@ -1,6 +1,6 @@
1
- import type { PackageSettings } from '@ms-cloudpack/common-types';
1
+ import type { PackageSettingsMatch } from '@ms-cloudpack/common-types';
2
2
  /**
3
3
  * Parse a `--match` argument, e.g. `"foo"`, `"@foo/bar"`, `"@foo/*"`, `"@foo/bar@1.2.3"`.
4
4
  */
5
- export declare function parseMatch(match: string, acc?: PackageSettings['match'][]): PackageSettings['match'][];
5
+ export declare function parseMatch(match: string, acc?: PackageSettingsMatch[]): PackageSettingsMatch[];
6
6
  //# sourceMappingURL=parseMatch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseMatch.d.ts","sourceRoot":"","sources":["../../src/utilities/parseMatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAIlE;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,eAAe,CAAC,OAAO,CAAC,EAAO,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE,CAyB1G"}
1
+ {"version":3,"file":"parseMatch.d.ts","sourceRoot":"","sources":["../../src/utilities/parseMatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAIvE;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,oBAAoB,EAAO,GAAG,oBAAoB,EAAE,CAyBlG"}
@@ -1 +1 @@
1
- {"version":3,"file":"parseMatch.js","sourceRoot":"","sources":["../../src/utilities/parseMatch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,MAAkC,EAAE;IAC5E,IAAI,IAAY,CAAC;IACjB,IAAI,OAA2B,CAAC;IAChC,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7C,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1B,IAAI,GAAG,KAAK,CAAC;IACf,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAC1C,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,aAAa,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,oBAAoB,CAC5B,yBAAyB,KAAK,yDAAyD,CACxF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,oBAAoB,CAAC,yBAAyB,KAAK,mBAAmB,OAAO,wBAAwB,CAAC,CAAC;IACnH,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEhE,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import type { PackageSettings } from '@ms-cloudpack/common-types';\nimport { InvalidArgumentError } from 'commander';\nimport semver from 'semver';\n\n/**\n * Parse a `--match` argument, e.g. `\"foo\"`, `\"@foo/bar\"`, `\"@foo/*\"`, `\"@foo/bar@1.2.3\"`.\n */\nexport function parseMatch(match: string, acc: PackageSettings['match'][] = []): PackageSettings['match'][] {\n let name: string;\n let version: string | undefined;\n const atVersionIndex = match.indexOf('@', 1);\n if (atVersionIndex === -1) {\n name = match;\n } else {\n name = match.substring(0, atVersionIndex);\n version = match.substring(atVersionIndex + 1);\n }\n\n const nameStarIndex = name.indexOf('*');\n if (nameStarIndex !== -1 && nameStarIndex !== name.length - 1) {\n throw new InvalidArgumentError(\n `Invalid match string \"${match}\". A wildcard is only supported at the end of the name.`,\n );\n }\n\n if (version && !semver.validRange(version)) {\n throw new InvalidArgumentError(`Invalid match string \"${match}\". The version \"${version}\" is not valid semver.`);\n }\n\n acc.push(version && version !== '*' ? { name, version } : name);\n\n return acc;\n}\n"]}
1
+ {"version":3,"file":"parseMatch.js","sourceRoot":"","sources":["../../src/utilities/parseMatch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,MAA8B,EAAE;IACxE,IAAI,IAAY,CAAC;IACjB,IAAI,OAA2B,CAAC;IAChC,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7C,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1B,IAAI,GAAG,KAAK,CAAC;IACf,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAC1C,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,aAAa,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,oBAAoB,CAC5B,yBAAyB,KAAK,yDAAyD,CACxF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,oBAAoB,CAAC,yBAAyB,KAAK,mBAAmB,OAAO,wBAAwB,CAAC,CAAC;IACnH,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEhE,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import type { PackageSettingsMatch } from '@ms-cloudpack/common-types';\nimport { InvalidArgumentError } from 'commander';\nimport semver from 'semver';\n\n/**\n * Parse a `--match` argument, e.g. `\"foo\"`, `\"@foo/bar\"`, `\"@foo/*\"`, `\"@foo/bar@1.2.3\"`.\n */\nexport function parseMatch(match: string, acc: PackageSettingsMatch[] = []): PackageSettingsMatch[] {\n let name: string;\n let version: string | undefined;\n const atVersionIndex = match.indexOf('@', 1);\n if (atVersionIndex === -1) {\n name = match;\n } else {\n name = match.substring(0, atVersionIndex);\n version = match.substring(atVersionIndex + 1);\n }\n\n const nameStarIndex = name.indexOf('*');\n if (nameStarIndex !== -1 && nameStarIndex !== name.length - 1) {\n throw new InvalidArgumentError(\n `Invalid match string \"${match}\". A wildcard is only supported at the end of the name.`,\n );\n }\n\n if (version && !semver.validRange(version)) {\n throw new InvalidArgumentError(`Invalid match string \"${match}\". The version \"${version}\" is not valid semver.`);\n }\n\n acc.push(version && version !== '*' ? { name, version } : name);\n\n return acc;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/cli",
3
- "version": "0.66.16",
3
+ "version": "0.66.17",
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,18 +10,18 @@
10
10
  "cloudpack": "./bin/cloudpack.js"
11
11
  },
12
12
  "dependencies": {
13
- "@ms-cloudpack/api-server": "^0.47.8",
14
- "@ms-cloudpack/app-server": "^0.11.3",
15
- "@ms-cloudpack/common-types": "^0.13.2",
16
- "@ms-cloudpack/config": "^0.23.7",
13
+ "@ms-cloudpack/api-server": "^0.47.9",
14
+ "@ms-cloudpack/app-server": "^0.12.0",
15
+ "@ms-cloudpack/common-types": "^0.13.3",
16
+ "@ms-cloudpack/config": "^0.24.0",
17
17
  "@ms-cloudpack/feature-flags": "^0.1.1",
18
- "@ms-cloudpack/json-utilities": "^0.1.5",
19
- "@ms-cloudpack/overlay": "^0.17.40",
20
- "@ms-cloudpack/package-utilities": "^8.0.0",
18
+ "@ms-cloudpack/json-utilities": "^0.1.6",
19
+ "@ms-cloudpack/overlay": "^0.17.41",
20
+ "@ms-cloudpack/package-utilities": "^8.0.1",
21
21
  "@ms-cloudpack/path-string-parsing": "^1.2.3",
22
- "@ms-cloudpack/path-utilities": "^2.7.28",
23
- "@ms-cloudpack/remote-cache": "^0.8.4",
24
- "@ms-cloudpack/task-reporter": "^0.14.3",
22
+ "@ms-cloudpack/path-utilities": "^2.7.29",
23
+ "@ms-cloudpack/remote-cache": "^0.8.5",
24
+ "@ms-cloudpack/task-reporter": "^0.14.4",
25
25
  "@ms-cloudpack/telemetry": "^0.6.1",
26
26
  "@yarnpkg/lockfile": "^1.1.0",
27
27
  "commander": "^11.1.0",
@@ -34,7 +34,7 @@
34
34
  "workspace-tools": "^0.36.4"
35
35
  },
36
36
  "devDependencies": {
37
- "@ms-cloudpack/common-types": "^0.13.2",
37
+ "@ms-cloudpack/common-types": "^0.13.3",
38
38
  "@ms-cloudpack/eslint-plugin-internal": "^0.0.1",
39
39
  "@ms-cloudpack/scripts": "^0.0.1",
40
40
  "@ms-cloudpack/test-utilities": "^0.5.0",