@ms-cloudpack/cli 0.78.0 → 0.79.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.
package/CHANGELOG.md CHANGED
@@ -1,12 +1,55 @@
1
1
  # Change Log - @ms-cloudpack/cli
2
2
 
3
- <!-- This log was last generated on Tue, 17 Mar 2026 23:53:09 GMT and should not be manually modified. -->
3
+ <!-- This log was last generated on Sat, 28 Mar 2026 06:24:55 GMT and should not be manually modified. -->
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## 0.79.0
8
+
9
+ Sat, 28 Mar 2026 06:24:55 GMT
10
+
11
+ ### Minor changes
12
+
13
+ - `@ms-cloudpack/api-server`
14
+ - Add analyzePackageImports for fast static analysis of package imports without bundling (stchur@microsoft.com)
15
+ - `@ms-cloudpack/cli`
16
+ - Add staticAnalysisInit feature flag support in init and auto-init before start (stchur@microsoft.com)
17
+ - `@ms-cloudpack/common-types`
18
+ - Add staticAnalysisInit feature flag (stchur@microsoft.com)
19
+ - `@ms-cloudpack/package-utilities`
20
+ - Export findPackage and its types for reuse in static analysis init (stchur@microsoft.com)
21
+
22
+ ### Patches
23
+
24
+ - `@ms-cloudpack/api-server`
25
+ - Enable staticAnalysisInit to use the same missing-dep fallback as autoUpdateEntries, with in-memory-only overrides (no disk write) when autoUpdateEntries is off (stchur@microsoft.com)
26
+ - `@ms-cloudpack/import-map`
27
+ - Generate /missing/ fallback routes in import map when staticAnalysisInit is enabled (stchur@microsoft.com)
28
+ - Add missing/ fallback routes in import map when staticAnalysisInit is enabled (stchur@microsoft.com)
29
+ - `@ms-cloudpack/bundle-server`
30
+ - Widen missing-dep fallback gate to trigger when staticAnalysisInit is enabled (stchur@microsoft.com)
31
+ - Add runtime fallback and developer warning when staticAnalysisInit misses a CJS dependency (stchur@microsoft.com)
32
+
33
+ ## 0.78.1
34
+
35
+ Fri, 27 Mar 2026 21:17:14 GMT
36
+
37
+ ### Minor changes
38
+
39
+ - `@ms-cloudpack/task-reporter`
40
+ - Improve TaskReporter performance by reducing sticky update intervals (elcraig@microsoft.com)
41
+
42
+ ### Patches
43
+
44
+ - `@ms-cloudpack/bundler-rollup`
45
+ - Update rollup packages (renovate@whitesourcesoftware.com)
46
+ - Update dependency cssnano to v7 (renovate@whitesourcesoftware.com)
47
+ - `@ms-cloudpack/esm-stub-utilities`
48
+ - Update dependency oxc-parser to ^0.119.0 (email not defined)
49
+
7
50
  ## 0.78.0
8
51
 
9
- Tue, 17 Mar 2026 23:53:09 GMT
52
+ Tue, 17 Mar 2026 23:54:33 GMT
10
53
 
11
54
  ### Minor changes
12
55
 
@@ -1,4 +1,4 @@
1
- import type { EnsurePackageBundledContext } from '@ms-cloudpack/api-server';
1
+ import { type EnsurePackageBundledContext } from '@ms-cloudpack/api-server';
2
2
  import { type EvaluateImportsForOverridesOptions, type EvaluateImportsForOverridesResult } from './evaluateImportsForOverrides.js';
3
3
  import type { InitAppOptions } from './types/InitAppOptions.js';
4
4
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"evaluatePath.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAI5E,OAAO,EAEL,KAAK,kCAAkC,EACvC,KAAK,iCAAiC,EACvC,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,GACrB,IAAI,CAAC,kCAAkC,EAAE,aAAa,GAAG,iBAAiB,CAAC,GAAG;IAC5E,WAAW,EAAE,OAAO,CAAC;IACrB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;CAClB,EACH,GAAG,EAAE,2BAA2B,GAC/B,OAAO,CACR,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,iBAAiB,GAAG,gBAAgB,CAAC,CAAC,GAAG;IACvF,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CACF,CA8FA"}
1
+ {"version":3,"file":"evaluatePath.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAEL,KAAK,kCAAkC,EACvC,KAAK,iCAAiC,EACvC,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,GACrB,IAAI,CAAC,kCAAkC,EAAE,aAAa,GAAG,iBAAiB,CAAC,GAAG;IAC5E,WAAW,EAAE,OAAO,CAAC;IACrB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;CAClB,EACH,GAAG,EAAE,2BAA2B,GAC/B,OAAO,CACR,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,iBAAiB,GAAG,gBAAgB,CAAC,CAAC,GAAG;IACvF,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CACF,CAsHA"}
@@ -1,4 +1,4 @@
1
- import { ensurePackageBundled } from '@ms-cloudpack/api-server';
1
+ import { analyzePackageImports, ensurePackageBundled, } from '@ms-cloudpack/api-server';
2
2
  import { evaluateImportsForOverrides, } from './evaluateImportsForOverrides.js';
3
3
  import { evaluateDynamicImports } from './evaluateDynamicImports.js';
4
4
  /**
@@ -17,23 +17,47 @@ export async function evaluatePath(options, ctx) {
17
17
  const definition = await packages.get(packagePath, { refresh: true, importerContext });
18
18
  const { name, version } = definition;
19
19
  console.debug(`Evaluating ${packagePath} with context ${JSON.stringify(importerContext)}`);
20
- // Bundle the package and find the imports it depends on.
21
- const { result } = await ensurePackageBundled({
22
- name,
23
- version,
24
- isIncremental: false,
25
- shouldGetBundleInfo: true,
26
- shouldForce,
27
- shouldRerun: shouldForce,
28
- useHashAsId: isMultiApp,
29
- priority,
30
- disableCache: !initOptions.cache,
31
- }, ctx);
32
- // Record the results for the summary.
33
- summaryData.recordResult(packagePath, result);
34
- // If there were errors or no imports, return early.
35
- const { info } = result;
36
- if (result.errors?.length || !info) {
20
+ let info;
21
+ if (features?.staticAnalysisInit) {
22
+ // Use fast static analysis instead of bundling to discover imports.
23
+ try {
24
+ info = await analyzePackageImports({ packagePath, packages });
25
+ summaryData.recordResult(packagePath, { name, version, info });
26
+ }
27
+ catch (error) {
28
+ summaryData.recordException({
29
+ packagePath,
30
+ error,
31
+ source: 'analyzePackageImports',
32
+ context: 'analyzing package imports',
33
+ name,
34
+ version,
35
+ });
36
+ return {};
37
+ }
38
+ }
39
+ else {
40
+ // Bundle the package and find the imports it depends on.
41
+ const { result } = await ensurePackageBundled({
42
+ name,
43
+ version,
44
+ isIncremental: false,
45
+ shouldGetBundleInfo: true,
46
+ shouldForce,
47
+ shouldRerun: shouldForce,
48
+ useHashAsId: isMultiApp,
49
+ priority,
50
+ disableCache: !initOptions.cache,
51
+ }, ctx);
52
+ // Record the results for the summary.
53
+ summaryData.recordResult(packagePath, result);
54
+ info = result.info;
55
+ // If there were errors, return early.
56
+ if (result.errors?.length) {
57
+ return {};
58
+ }
59
+ }
60
+ if (!info) {
37
61
  return {};
38
62
  }
39
63
  // Given the package imports, find the missing exports maps and update packageOverrides.
@@ -1 +1 @@
1
- {"version":3,"file":"evaluatePath.js","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EnsurePackageBundledContext } from '@ms-cloudpack/api-server';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\n\nimport { ensurePackageBundled } from '@ms-cloudpack/api-server';\nimport {\n evaluateImportsForOverrides,\n type EvaluateImportsForOverridesOptions,\n type EvaluateImportsForOverridesResult,\n} from './evaluateImportsForOverrides.js';\nimport { evaluateDynamicImports } from './evaluateDynamicImports.js';\nimport type { InitAppOptions } from './types/InitAppOptions.js';\n\n/**\n * A helper which given the packagePath, tries to evaluate the path by bundling things, finding imports,\n * and cross checking the imports with explicit exports. If any exports are missing, they are documented\n * in the generated config.\n */\nexport async function evaluatePath(\n options: InitAppOptions &\n Pick<EvaluateImportsForOverridesOptions, 'packagePath' | 'importerContext'> & {\n shouldForce: boolean;\n /** The priority of the package being evaluated. To be used in the task runner. */\n priority: number;\n },\n ctx: EnsurePackageBundledContext,\n): Promise<\n Partial<Pick<EvaluateImportsForOverridesResult, 'pathsToEvaluate' | 'pathsToRefresh'>> & {\n /** Whether a fatal error was encountered. */\n shouldExit?: boolean;\n }\n> {\n const { packagePath, initOptions, span, summaryData, importerContext, shouldForce, isMultiApp, priority } = options;\n const { packages, session } = ctx;\n const { config } = session;\n const { features } = config;\n\n // This line is the reason we have to track the importerContext for packages to evaluate:\n // otherwise if a non-semver package is read here, we'd lose the modifications from the initial\n // time the package was read (and getNonSemverTransform was called) when building the resolve map.\n const definition = await packages.get(packagePath, { refresh: true, importerContext });\n const { name, version } = definition;\n\n console.debug(`Evaluating ${packagePath} with context ${JSON.stringify(importerContext)}`);\n\n // Bundle the package and find the imports it depends on.\n const { result } = await ensurePackageBundled(\n {\n name,\n version,\n isIncremental: false,\n shouldGetBundleInfo: true,\n shouldForce,\n shouldRerun: shouldForce,\n useHashAsId: isMultiApp,\n priority,\n disableCache: !initOptions.cache,\n },\n ctx,\n );\n\n // Record the results for the summary.\n summaryData.recordResult(packagePath, result);\n\n // If there were errors or no imports, return early.\n const { info } = result;\n if (result.errors?.length || !info) {\n return {};\n }\n\n // Given the package imports, find the missing exports maps and update packageOverrides.\n const {\n exportsChanges,\n includedDependenciesChanges,\n removedExcludedDependenciesChanges,\n errors: evalErrors,\n warnings: evalWarnings,\n pathsToEvaluate,\n pathsToRefresh,\n } = await evaluateImportsForOverrides({ definition, packagePath, info, importerContext }, ctx);\n\n if (evalErrors.length) {\n summaryData.addErrors(packagePath, evalErrors);\n }\n if (evalWarnings.length) {\n summaryData.addWarnings(packagePath, evalWarnings);\n }\n summaryData.recordGeneratedChanges(exportsChanges);\n summaryData.recordGeneratedChanges(includedDependenciesChanges);\n summaryData.recordGeneratedChanges(removedExcludedDependenciesChanges);\n\n let dynamicImportsChanges: undefined | GeneratedPackageChanges[] = undefined;\n if (features?.evaluateDynamicImports) {\n const dynamicImportsResult = await evaluateDynamicImports({ definition, packagePath, info }, ctx);\n\n dynamicImportsChanges = dynamicImportsResult.dynamicImportsChanges;\n\n summaryData.recordGeneratedChanges(dynamicImportsChanges);\n\n if (dynamicImportsResult.shouldReevaluate) {\n pathsToEvaluate.set(packagePath, importerContext);\n }\n if (dynamicImportsResult.shouldRefresh) {\n pathsToRefresh.add(packagePath);\n }\n }\n\n // Uncomment this when #1694 init does not cache packages correctly after editing config is fixed\n // and the heap does not reach the limit as almost every package is enqueued.\n // importPathsToEvaluate?.forEach((path) => pathsToEvaluate.set(path, importerContext));\n // importPathsToRefresh?.forEach((path) => pathsToRefresh.add(path));\n\n if (initOptions.check && (exportsChanges.length || evalErrors.length || dynamicImportsChanges?.length)) {\n span.addEvent('INIT_CHECK_FAILED', {\n // Don't log the specific errors to telemetry, as they may contain sensitive information.\n reason: exportsChanges || dynamicImportsChanges ? 'Config needs to be updated.' : 'Errors found with imports.',\n });\n\n return { shouldExit: true };\n }\n\n return {\n pathsToEvaluate,\n pathsToRefresh,\n };\n}\n"]}
1
+ {"version":3,"file":"evaluatePath.js","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n analyzePackageImports,\n ensurePackageBundled,\n type BundleInfo,\n type EnsurePackageBundledContext,\n} from '@ms-cloudpack/api-server';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport {\n evaluateImportsForOverrides,\n type EvaluateImportsForOverridesOptions,\n type EvaluateImportsForOverridesResult,\n} from './evaluateImportsForOverrides.js';\nimport { evaluateDynamicImports } from './evaluateDynamicImports.js';\nimport type { InitAppOptions } from './types/InitAppOptions.js';\n\n/**\n * A helper which given the packagePath, tries to evaluate the path by bundling things, finding imports,\n * and cross checking the imports with explicit exports. If any exports are missing, they are documented\n * in the generated config.\n */\nexport async function evaluatePath(\n options: InitAppOptions &\n Pick<EvaluateImportsForOverridesOptions, 'packagePath' | 'importerContext'> & {\n shouldForce: boolean;\n /** The priority of the package being evaluated. To be used in the task runner. */\n priority: number;\n },\n ctx: EnsurePackageBundledContext,\n): Promise<\n Partial<Pick<EvaluateImportsForOverridesResult, 'pathsToEvaluate' | 'pathsToRefresh'>> & {\n /** Whether a fatal error was encountered. */\n shouldExit?: boolean;\n }\n> {\n const { packagePath, initOptions, span, summaryData, importerContext, shouldForce, isMultiApp, priority } = options;\n const { packages, session } = ctx;\n const { config } = session;\n const { features } = config;\n\n // This line is the reason we have to track the importerContext for packages to evaluate:\n // otherwise if a non-semver package is read here, we'd lose the modifications from the initial\n // time the package was read (and getNonSemverTransform was called) when building the resolve map.\n const definition = await packages.get(packagePath, { refresh: true, importerContext });\n const { name, version } = definition;\n\n console.debug(`Evaluating ${packagePath} with context ${JSON.stringify(importerContext)}`);\n\n let info: BundleInfo | undefined;\n\n if (features?.staticAnalysisInit) {\n // Use fast static analysis instead of bundling to discover imports.\n try {\n info = await analyzePackageImports({ packagePath, packages });\n summaryData.recordResult(packagePath, { name, version, info });\n } catch (error) {\n summaryData.recordException({\n packagePath,\n error,\n source: 'analyzePackageImports',\n context: 'analyzing package imports',\n name,\n version,\n });\n return {};\n }\n } else {\n // Bundle the package and find the imports it depends on.\n const { result } = await ensurePackageBundled(\n {\n name,\n version,\n isIncremental: false,\n shouldGetBundleInfo: true,\n shouldForce,\n shouldRerun: shouldForce,\n useHashAsId: isMultiApp,\n priority,\n disableCache: !initOptions.cache,\n },\n ctx,\n );\n\n // Record the results for the summary.\n summaryData.recordResult(packagePath, result);\n info = result.info;\n\n // If there were errors, return early.\n if (result.errors?.length) {\n return {};\n }\n }\n\n if (!info) {\n return {};\n }\n\n // Given the package imports, find the missing exports maps and update packageOverrides.\n const {\n exportsChanges,\n includedDependenciesChanges,\n removedExcludedDependenciesChanges,\n errors: evalErrors,\n warnings: evalWarnings,\n pathsToEvaluate,\n pathsToRefresh,\n } = await evaluateImportsForOverrides({ definition, packagePath, info, importerContext }, ctx);\n\n if (evalErrors.length) {\n summaryData.addErrors(packagePath, evalErrors);\n }\n if (evalWarnings.length) {\n summaryData.addWarnings(packagePath, evalWarnings);\n }\n summaryData.recordGeneratedChanges(exportsChanges);\n summaryData.recordGeneratedChanges(includedDependenciesChanges);\n summaryData.recordGeneratedChanges(removedExcludedDependenciesChanges);\n\n let dynamicImportsChanges: undefined | GeneratedPackageChanges[] = undefined;\n if (features?.evaluateDynamicImports) {\n const dynamicImportsResult = await evaluateDynamicImports({ definition, packagePath, info }, ctx);\n\n dynamicImportsChanges = dynamicImportsResult.dynamicImportsChanges;\n\n summaryData.recordGeneratedChanges(dynamicImportsChanges);\n\n if (dynamicImportsResult.shouldReevaluate) {\n pathsToEvaluate.set(packagePath, importerContext);\n }\n if (dynamicImportsResult.shouldRefresh) {\n pathsToRefresh.add(packagePath);\n }\n }\n\n // Uncomment this when #1694 init does not cache packages correctly after editing config is fixed\n // and the heap does not reach the limit as almost every package is enqueued.\n // importPathsToEvaluate?.forEach((path) => pathsToEvaluate.set(path, importerContext));\n // importPathsToRefresh?.forEach((path) => pathsToRefresh.add(path));\n\n if (initOptions.check && (exportsChanges.length || evalErrors.length || dynamicImportsChanges?.length)) {\n span.addEvent('INIT_CHECK_FAILED', {\n // Don't log the specific errors to telemetry, as they may contain sensitive information.\n reason: exportsChanges || dynamicImportsChanges ? 'Config needs to be updated.' : 'Errors found with imports.',\n });\n\n return { shouldExit: true };\n }\n\n return {\n pathsToEvaluate,\n pathsToRefresh,\n };\n}\n"]}
@@ -10,5 +10,10 @@ export declare function init(params: Pick<CommandActionParams<InitOptions>, keyo
10
10
  * if the process is interrupted.
11
11
  */
12
12
  summaryData: InitSummaryData;
13
+ /**
14
+ * Skip writing the generated config to disk. Useful when init is run
15
+ * inline before start, since the in-memory config is all that's needed.
16
+ */
17
+ skipWrite?: boolean;
13
18
  }): Promise<void>;
14
19
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAU3F;;GAEG;AACH,wBAAsB,IAAI,CACxB,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,iBAAiB,GAAG,SAAS,GAAG,YAAY,CAAC,GAAG;IACnG;;;OAGG;IACH,WAAW,EAAE,eAAe,CAAC;CAC9B,GACA,OAAO,CAAC,IAAI,CAAC,CAgBf"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAU3F;;GAEG;AACH,wBAAsB,IAAI,CACxB,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,iBAAiB,GAAG,SAAS,GAAG,YAAY,CAAC,GAAG;IACnG;;;OAGG;IACH,WAAW,EAAE,eAAe,CAAC;IAC7B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GACA,OAAO,CAAC,IAAI,CAAC,CAgBf"}
@@ -13,7 +13,7 @@ import { SequentialPromiseExecutor } from '../../utilities/sequentialPromiseExec
13
13
  * Init execution function.
14
14
  */
15
15
  export async function init(params) {
16
- const { options: initOptions, summaryData, isMultiApp, config, telemetryClient } = params;
16
+ const { options: initOptions, summaryData, isMultiApp, config, telemetryClient, skipWrite } = params;
17
17
  await telemetryClient.tracer.startActiveSpan('INIT_APP', async (span) => {
18
18
  // Run prerequisites for the app.
19
19
  await runPrerequisites(params);
@@ -22,7 +22,7 @@ export async function init(params) {
22
22
  config.generated = {};
23
23
  }
24
24
  const context = await createPartialApiContext(params);
25
- await initApp({ span, summaryData, initOptions, isMultiApp }, context);
25
+ await initApp({ span, summaryData, initOptions, isMultiApp, skipWrite }, context);
26
26
  });
27
27
  }
28
28
  async function initApp(options, context) {
@@ -154,7 +154,7 @@ async function initApp(options, context) {
154
154
  // The feature "removeUnusedExports" doesn't (yet) write summary changes, but we still
155
155
  // want to write the generated config if that featureFlag is on.
156
156
  const hasSummaryChanges = config.features?.removeUnusedExports || summaryData.hasChanges();
157
- if (!initOptions.check && hasSummaryChanges) {
157
+ if (!initOptions.check && !options.skipWrite && hasSummaryChanges) {
158
158
  // Update the generated config: either write it if there are settings, or delete it if it
159
159
  // previously existed but is no longer needed.
160
160
  const generatedResult = await writeGeneratedConfig(config.generated, appPath);
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EnsurePackageBundledContext } from '@ms-cloudpack/api-server';\nimport type { PackageImporterContext } from '@ms-cloudpack/common-types';\nimport type { InitOptions } from './types/InitOptions.js';\n\nimport { createPartialApiContext } from '@ms-cloudpack/api-server';\nimport { writeGeneratedConfig } from '@ms-cloudpack/config';\nimport type { InitSummaryData } from './InitSummaryData.js';\nimport { evaluatePath } from './evaluatePath.js';\nimport { verifyExports } from './verifyExports.js';\nimport type { AppCommandContext, CommandActionParams } from '../../types/CommandAction.js';\nimport path from 'path';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { runPrerequisites } from '../../utilities/runPrerequisites.js';\nimport { getFilteredPackages } from '../../utilities/getFilteredPackages.js';\nimport { optimizeDependencies } from './optimizeDependencies.js';\nimport { bulletedList } from '@ms-cloudpack/task-reporter';\nimport type { InitAppOptions } from './types/InitAppOptions.js';\nimport { SequentialPromiseExecutor } from '../../utilities/sequentialPromiseExecutor.js';\n\n/**\n * Init execution function.\n */\nexport async function init(\n params: Pick<CommandActionParams<InitOptions>, keyof AppCommandContext | 'options' | 'isMultiApp'> & {\n /**\n * App summary object, created ahead of time so that a partial summary can be generated\n * if the process is interrupted.\n */\n summaryData: InitSummaryData;\n },\n): Promise<void> {\n const { options: initOptions, summaryData, isMultiApp, config, telemetryClient } = params;\n\n await telemetryClient.tracer.startActiveSpan('INIT_APP', async (span) => {\n // Run prerequisites for the app.\n await runPrerequisites(params);\n\n // If --reset is specified, reset the generated config.\n if (initOptions.reset) {\n config.generated = {};\n }\n\n const context = await createPartialApiContext(params);\n\n await initApp({ span, summaryData, initOptions, isMultiApp }, context);\n });\n}\n\nasync function initApp(options: InitAppOptions, context: EnsurePackageBundledContext): Promise<void> {\n const { initOptions, summaryData, span, isMultiApp } = options;\n const { match } = initOptions;\n const { config, resolveMap } = context.session;\n const { appPath } = config;\n const executor = new SequentialPromiseExecutor();\n\n // Ensure config.generated.packageSettings is initialized.\n config.generated.packageSettings ??= [];\n\n let isExitingPrematurely = false;\n\n await new Promise<void>((resolve) => {\n let pending = 0;\n const visitedSet = new Set<string>();\n const refreshPaths = new Set<string>();\n const priorityMap = new Map<string, number>();\n\n // Start with the app path or requested matches\n const initialPaths = match ? getFilteredPackages(resolveMap, match) : [appPath];\n if (!initialPaths.length) {\n summaryData.addErrors(appPath, [{ text: `No packages found matching ${JSON.stringify(match)}`, source: 'init' }]);\n resolve();\n }\n\n enqueuePaths(new Map(initialPaths.map((packagePath) => [packagePath, undefined])));\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>): void {\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 console.debug(`Skipping ${packagePath} as it has already been visited.`);\n continue;\n }\n\n visitedSet.add(packagePath);\n pending++;\n\n const shouldForce = refreshPaths.delete(packagePath);\n\n // Get the priority value for this package path, defaults to 0.\n const priority = priorityMap.get(packagePath) ?? 0;\n // Lower priority of this package path by 1.\n priorityMap.set(packagePath, priority - 1);\n\n // Use the sequential executor to run the evaluation to avoid concurrency issues.\n executor\n .execute(packagePath, () =>\n // Evaluate this path, but don't await - when we're done, we'll re-enqueue newly discovered paths.\n evaluatePath(\n {\n ...options,\n packagePath,\n importerContext,\n // No need to force if we're in a multi-app scenario\n // as we'll re-evaluate packages if they are different since we use a different task id.\n shouldForce: !isMultiApp && shouldForce,\n priority,\n },\n context,\n ),\n )\n .then(({ pathsToEvaluate, pathsToRefresh, shouldExit }) => {\n pending--;\n\n if (shouldExit) {\n isExitingPrematurely = true;\n } else if (pathsToEvaluate?.size) {\n // If there are packages that need to be rebuilt, delete them from the visited set to re-enqueue them\n // and add them to the refresh set so that on re-enqueuing we pass the `shouldRerun` flag through\n // on single app runs.\n pathsToRefresh?.forEach((refreshPath) => {\n refreshPaths.add(refreshPath);\n visitedSet.delete(refreshPath);\n });\n\n // Try to enqueue the new paths.\n console.debug(\n `Enqueuing paths found from ${packagePath}:\\n` +\n bulletedList(\n [...pathsToEvaluate].map(([newPath, newContext]) => `${newPath} ${JSON.stringify(newContext)}`),\n ),\n );\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: unknown) => {\n // Record the exception as an init error for the package.\n // This gives better context than a stack trace which could have come from any package.\n let prefix = 'evaluating package';\n if (importerContext) {\n prefix += ` (context: ${JSON.stringify(importerContext, null, 2).replace(/\\s+/g, ' ')})`;\n }\n summaryData.recordException({ packagePath, error, source: 'init', context: prefix });\n\n // Don't immediately stop evaluation, but don't enqueue more paths.\n isExitingPrematurely = true;\n });\n }\n }\n }).catch((error: unknown) => {\n // If there's an error thrown from some other part of the promise besides evaluatePath (not likely),\n // record it as an init error for the app instead of allowing it to propagate.\n // This allows the overall init summary and any other errors to be logged as usual.\n isExitingPrematurely = true;\n summaryData.recordException({ packagePath: appPath, error, source: 'init', context: 'running init' });\n });\n\n // Clear the executor so that it doesn't hold onto any references to the promises.\n executor.clear();\n\n // Log the resolve map to a file if requested. Do this *after* the main init process in case\n // any additional deps were discovered and added.\n if (initOptions.logResolveMap) {\n console.log('\\nWriting resolve map to `resolve-map.json`.');\n await writeJson(path.join(appPath, 'resolve-map.json'), resolveMap);\n }\n\n if (isExitingPrematurely) {\n span.setAttribute('isExitingPrematurely', true);\n } else {\n // Only do extra checks if there's not a major error already\n if (config.features?.optimizeDependencies) {\n // Conditionally scan dependency usage so that we can populate\n // include/excludeDependencies automatically, ensuring the dep list\n // is both minimal (remove unused deps) and complete (include\n // specific devDeps.)\n const excludedDependenciesChanges = await optimizeDependencies(summaryData.getResults(), context);\n summaryData.recordGeneratedChanges(excludedDependenciesChanges);\n }\n\n if (config.features?.verifyExports) {\n const packageResults = await verifyExports(summaryData.getResults(), context);\n for (const [packagePath, errors] of Object.entries(packageResults)) {\n summaryData.addErrors(packagePath, errors);\n }\n }\n }\n\n // The feature \"removeUnusedExports\" doesn't (yet) write summary changes, but we still\n // want to write the generated config if that featureFlag is on.\n const hasSummaryChanges = config.features?.removeUnusedExports || summaryData.hasChanges();\n\n if (!initOptions.check && hasSummaryChanges) {\n // Update the generated config: either write it if there are settings, or delete it if it\n // previously existed but is no longer needed.\n const generatedResult = await writeGeneratedConfig(config.generated, appPath);\n if (generatedResult === 'deleted') {\n summaryData.deletedGeneratedConfig = true;\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 { EnsurePackageBundledContext } from '@ms-cloudpack/api-server';\nimport type { PackageImporterContext } from '@ms-cloudpack/common-types';\nimport type { InitOptions } from './types/InitOptions.js';\n\nimport { createPartialApiContext } from '@ms-cloudpack/api-server';\nimport { writeGeneratedConfig } from '@ms-cloudpack/config';\nimport type { InitSummaryData } from './InitSummaryData.js';\nimport { evaluatePath } from './evaluatePath.js';\nimport { verifyExports } from './verifyExports.js';\nimport type { AppCommandContext, CommandActionParams } from '../../types/CommandAction.js';\nimport path from 'path';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { runPrerequisites } from '../../utilities/runPrerequisites.js';\nimport { getFilteredPackages } from '../../utilities/getFilteredPackages.js';\nimport { optimizeDependencies } from './optimizeDependencies.js';\nimport { bulletedList } from '@ms-cloudpack/task-reporter';\nimport type { InitAppOptions } from './types/InitAppOptions.js';\nimport { SequentialPromiseExecutor } from '../../utilities/sequentialPromiseExecutor.js';\n\n/**\n * Init execution function.\n */\nexport async function init(\n params: Pick<CommandActionParams<InitOptions>, keyof AppCommandContext | 'options' | 'isMultiApp'> & {\n /**\n * App summary object, created ahead of time so that a partial summary can be generated\n * if the process is interrupted.\n */\n summaryData: InitSummaryData;\n /**\n * Skip writing the generated config to disk. Useful when init is run\n * inline before start, since the in-memory config is all that's needed.\n */\n skipWrite?: boolean;\n },\n): Promise<void> {\n const { options: initOptions, summaryData, isMultiApp, config, telemetryClient, skipWrite } = params;\n\n await telemetryClient.tracer.startActiveSpan('INIT_APP', async (span) => {\n // Run prerequisites for the app.\n await runPrerequisites(params);\n\n // If --reset is specified, reset the generated config.\n if (initOptions.reset) {\n config.generated = {};\n }\n\n const context = await createPartialApiContext(params);\n\n await initApp({ span, summaryData, initOptions, isMultiApp, skipWrite }, context);\n });\n}\n\nasync function initApp(options: InitAppOptions, context: EnsurePackageBundledContext): Promise<void> {\n const { initOptions, summaryData, span, isMultiApp } = options;\n const { match } = initOptions;\n const { config, resolveMap } = context.session;\n const { appPath } = config;\n const executor = new SequentialPromiseExecutor();\n\n // Ensure config.generated.packageSettings is initialized.\n config.generated.packageSettings ??= [];\n\n let isExitingPrematurely = false;\n\n await new Promise<void>((resolve) => {\n let pending = 0;\n const visitedSet = new Set<string>();\n const refreshPaths = new Set<string>();\n const priorityMap = new Map<string, number>();\n\n // Start with the app path or requested matches\n const initialPaths = match ? getFilteredPackages(resolveMap, match) : [appPath];\n if (!initialPaths.length) {\n summaryData.addErrors(appPath, [{ text: `No packages found matching ${JSON.stringify(match)}`, source: 'init' }]);\n resolve();\n }\n\n enqueuePaths(new Map(initialPaths.map((packagePath) => [packagePath, undefined])));\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>): void {\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 console.debug(`Skipping ${packagePath} as it has already been visited.`);\n continue;\n }\n\n visitedSet.add(packagePath);\n pending++;\n\n const shouldForce = refreshPaths.delete(packagePath);\n\n // Get the priority value for this package path, defaults to 0.\n const priority = priorityMap.get(packagePath) ?? 0;\n // Lower priority of this package path by 1.\n priorityMap.set(packagePath, priority - 1);\n\n // Use the sequential executor to run the evaluation to avoid concurrency issues.\n executor\n .execute(packagePath, () =>\n // Evaluate this path, but don't await - when we're done, we'll re-enqueue newly discovered paths.\n evaluatePath(\n {\n ...options,\n packagePath,\n importerContext,\n // No need to force if we're in a multi-app scenario\n // as we'll re-evaluate packages if they are different since we use a different task id.\n shouldForce: !isMultiApp && shouldForce,\n priority,\n },\n context,\n ),\n )\n .then(({ pathsToEvaluate, pathsToRefresh, shouldExit }) => {\n pending--;\n\n if (shouldExit) {\n isExitingPrematurely = true;\n } else if (pathsToEvaluate?.size) {\n // If there are packages that need to be rebuilt, delete them from the visited set to re-enqueue them\n // and add them to the refresh set so that on re-enqueuing we pass the `shouldRerun` flag through\n // on single app runs.\n pathsToRefresh?.forEach((refreshPath) => {\n refreshPaths.add(refreshPath);\n visitedSet.delete(refreshPath);\n });\n\n // Try to enqueue the new paths.\n console.debug(\n `Enqueuing paths found from ${packagePath}:\\n` +\n bulletedList(\n [...pathsToEvaluate].map(([newPath, newContext]) => `${newPath} ${JSON.stringify(newContext)}`),\n ),\n );\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: unknown) => {\n // Record the exception as an init error for the package.\n // This gives better context than a stack trace which could have come from any package.\n let prefix = 'evaluating package';\n if (importerContext) {\n prefix += ` (context: ${JSON.stringify(importerContext, null, 2).replace(/\\s+/g, ' ')})`;\n }\n summaryData.recordException({ packagePath, error, source: 'init', context: prefix });\n\n // Don't immediately stop evaluation, but don't enqueue more paths.\n isExitingPrematurely = true;\n });\n }\n }\n }).catch((error: unknown) => {\n // If there's an error thrown from some other part of the promise besides evaluatePath (not likely),\n // record it as an init error for the app instead of allowing it to propagate.\n // This allows the overall init summary and any other errors to be logged as usual.\n isExitingPrematurely = true;\n summaryData.recordException({ packagePath: appPath, error, source: 'init', context: 'running init' });\n });\n\n // Clear the executor so that it doesn't hold onto any references to the promises.\n executor.clear();\n\n // Log the resolve map to a file if requested. Do this *after* the main init process in case\n // any additional deps were discovered and added.\n if (initOptions.logResolveMap) {\n console.log('\\nWriting resolve map to `resolve-map.json`.');\n await writeJson(path.join(appPath, 'resolve-map.json'), resolveMap);\n }\n\n if (isExitingPrematurely) {\n span.setAttribute('isExitingPrematurely', true);\n } else {\n // Only do extra checks if there's not a major error already\n if (config.features?.optimizeDependencies) {\n // Conditionally scan dependency usage so that we can populate\n // include/excludeDependencies automatically, ensuring the dep list\n // is both minimal (remove unused deps) and complete (include\n // specific devDeps.)\n const excludedDependenciesChanges = await optimizeDependencies(summaryData.getResults(), context);\n summaryData.recordGeneratedChanges(excludedDependenciesChanges);\n }\n\n if (config.features?.verifyExports) {\n const packageResults = await verifyExports(summaryData.getResults(), context);\n for (const [packagePath, errors] of Object.entries(packageResults)) {\n summaryData.addErrors(packagePath, errors);\n }\n }\n }\n\n // The feature \"removeUnusedExports\" doesn't (yet) write summary changes, but we still\n // want to write the generated config if that featureFlag is on.\n const hasSummaryChanges = config.features?.removeUnusedExports || summaryData.hasChanges();\n\n if (!initOptions.check && !options.skipWrite && hasSummaryChanges) {\n // Update the generated config: either write it if there are settings, or delete it if it\n // previously existed but is no longer needed.\n const generatedResult = await writeGeneratedConfig(config.generated, appPath);\n if (generatedResult === 'deleted') {\n summaryData.deletedGeneratedConfig = true;\n }\n }\n}\n"]}
@@ -12,5 +12,7 @@ export interface InitAppOptions extends Pick<CommandActionParams<object>, 'isMul
12
12
  summaryData: InitSummaryData;
13
13
  /** Span for the INIT_APP operation. */
14
14
  span: Span;
15
+ /** Skip writing the generated config to disk. */
16
+ skipWrite?: boolean;
15
17
  }
16
18
  //# sourceMappingURL=InitAppOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InitAppOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/InitAppOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IACrF,kBAAkB;IAClB,WAAW,EAAE,WAAW,CAAC;IAEzB;;;OAGG;IACH,WAAW,EAAE,eAAe,CAAC;IAE7B,uCAAuC;IACvC,IAAI,EAAE,IAAI,CAAC;CACZ"}
1
+ {"version":3,"file":"InitAppOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/InitAppOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IACrF,kBAAkB;IAClB,WAAW,EAAE,WAAW,CAAC;IAEzB;;;OAGG;IACH,WAAW,EAAE,eAAe,CAAC;IAE7B,uCAAuC;IACvC,IAAI,EAAE,IAAI,CAAC;IAEX,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"InitAppOptions.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitAppOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { Span } from '@ms-cloudpack/telemetry';\nimport type { CommandActionParams } from '../../../types/CommandAction.js';\nimport type { InitSummaryData } from '../InitSummaryData.js';\nimport type { InitOptions } from './InitOptions.js';\n\nexport interface InitAppOptions extends Pick<CommandActionParams<object>, 'isMultiApp'> {\n /** CLI options */\n initOptions: InitOptions;\n\n /**\n * App summary object, created ahead of time so that a partial summary can be generated\n * if the process is interrupted.\n */\n summaryData: InitSummaryData;\n\n /** Span for the INIT_APP operation. */\n span: Span;\n}\n"]}
1
+ {"version":3,"file":"InitAppOptions.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitAppOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { Span } from '@ms-cloudpack/telemetry';\nimport type { CommandActionParams } from '../../../types/CommandAction.js';\nimport type { InitSummaryData } from '../InitSummaryData.js';\nimport type { InitOptions } from './InitOptions.js';\n\nexport interface InitAppOptions extends Pick<CommandActionParams<object>, 'isMultiApp'> {\n /** CLI options */\n initOptions: InitOptions;\n\n /**\n * App summary object, created ahead of time so that a partial summary can be generated\n * if the process is interrupted.\n */\n summaryData: InitSummaryData;\n\n /** Span for the INIT_APP operation. */\n span: Span;\n\n /** Skip writing the generated config to disk. */\n skipWrite?: boolean;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAqB,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAU5D;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,CA6H/C,CAAC"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAqB,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAU5D;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,CAyJ/C,CAAC"}
@@ -22,6 +22,30 @@ export const execute = async (params) => {
22
22
  console.log('App path:', yellow(appPath));
23
23
  console.log('Bundle mode:', yellow(options.mode));
24
24
  await runPrerequisites(params);
25
+ // Auto-run init with static analysis before start. Since static analysis is fast (~22s),
26
+ // always run it to ensure the generated config is up to date with current dependencies.
27
+ if (config.features?.staticAnalysisInit) {
28
+ const { init } = await import('../init/init.js');
29
+ const { InitSummaryData } = await import('../init/InitSummaryData.js');
30
+ const { formatInitSummary } = await import('../init/formatInitSummary.js');
31
+ config.generated = {};
32
+ console.log('Running init with static analysis...\n');
33
+ const summaryData = new InitSummaryData({ appPath });
34
+ await init({
35
+ appPath: params.appPath,
36
+ cachePath: params.cachePath,
37
+ config: params.config,
38
+ reporter: params.reporter,
39
+ taskRunner: params.taskRunner,
40
+ telemetryClient: params.telemetryClient,
41
+ options: { cache: options.cache },
42
+ skipWrite: true,
43
+ isMultiApp: false,
44
+ summaryData,
45
+ });
46
+ const summary = summaryData.summarize();
47
+ console.log(formatInitSummary({ summary, check: false, isMultiApp: false, verb: 'init' }));
48
+ }
25
49
  // If the user has specified https options in the config, parse them at start.
26
50
  // This makes sure that the HTTPS configuration is ready before starting the servers and shows errors early.
27
51
  // We need to do this after prerequisites are run, in case users setup their certs there.
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"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","sourcesContent":["import { createApiContext, ensurePackageBundled, type PartialContext } from '@ms-cloudpack/api-server';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { makeUrl } from '@ms-cloudpack/path-string-parsing';\nimport { yellow } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport type { CommandExitParams, CommandAction } from '../../types/CommandAction.js';\nimport { runPrerequisites } from '../../utilities/runPrerequisites.js';\nimport { openBrowser } from './openBrowser.js';\nimport { trackSession } from './trackSession.js';\nimport type { StartOptions } from './types/StartOptions.js';\nimport { getCliStartTime } from '../../utilities/getCliStartTime.js';\nimport { createApiServer } from '../../utilities/createApiServer.js';\nimport { resolveCloudpackInternalPath } from '../../utilities/resolveCloudpackInternalPath.js';\nimport { getDomain, parseHttpsConfig } from '@ms-cloudpack/create-express-app';\nimport { handleKnownParseHttpsErrors } from '../../utilities/handleKnownParseHttpsErrors.js';\nimport { createWatcher } from '@ms-cloudpack/file-watcher';\nimport { readConfig } from '@ms-cloudpack/config';\nimport { disposeServer } from '../../utilities/disposeServer.js';\n\n/**\n * Defines the \"start\" verb entry point.\n */\nexport const execute: CommandAction<StartOptions> = async (params) => {\n const { appPath, config, options, autoDispose, isRestart } = params;\n\n console.log('App path:', yellow(appPath));\n console.log('Bundle mode:', yellow(options.mode));\n\n await runPrerequisites(params);\n\n // If the user has specified https options in the config, parse them at start.\n // This makes sure that the HTTPS configuration is ready before starting the servers and shows errors early.\n // We need to do this after prerequisites are run, in case users setup their certs there.\n if (config?.server?.https) {\n try {\n const domain = getDomain(config.server.domain);\n config.server.parsedHttps = await parseHttpsConfig({ domain, https: config.server.https, cwd: appPath });\n } catch (err) {\n handleKnownParseHttpsErrors({ err, projectName: path.basename(appPath) });\n throw err;\n }\n }\n\n const overlayPath = await resolveCloudpackInternalPath({\n packageName: '@ms-cloudpack/overlay',\n importMetaUrl: import.meta.url,\n });\n\n const shouldUseRemoteCache = config.features?.enableCloudHosted || config.features?.enableRemoteCacheDownloads;\n const apiContext = autoDispose(\n await createApiContext({\n ...params,\n remoteCacheClientLoginMethod: shouldUseRemoteCache ? options.login : undefined,\n additionalPaths: overlayPath ? [overlayPath] : undefined,\n }),\n );\n const { packages, session, telemetryClient } = apiContext;\n\n return new Promise<CommandExitParams>((resolve) => {\n (async () => {\n let hasConfigChanged = false;\n const configWatcher = createWatcher();\n await Promise.all(\n config.configPaths?.appConfigPaths.map(\n (configPath) =>\n configWatcher.watch({ path: path.basename(configPath), watchPaths: [configPath] }, () => {\n if (hasConfigChanged) {\n return;\n }\n void readConfig(appPath)\n .then(() => {\n hasConfigChanged = true;\n resolve({ restart: true, message: 'Config changed. Restarting Cloudpack...' });\n })\n .catch((error) => console.warn('Config change detected, but the config file is invalid.', error));\n }) ?? [],\n ) ?? [],\n );\n\n // Set up config watcher disposal (up here in case the config changes before setup completes).\n autoDispose(configWatcher);\n\n // Increment the session version if caching is disabled.\n if (options.cache === false) {\n session.incrementSessionVersion();\n }\n\n // Make sure the package has a valid definition.\n const definition = await packages.get(appPath);\n\n if (options.logResolveMap) {\n // Write the resolve map to disk.\n await writeJson(path.join(appPath, 'resolve-map.json'), session.resolveMap);\n }\n\n // Start api server for tracking status and handling remote requests.\n const apiServerResult = await createApiServer({ port: options.apiServerPort }, apiContext);\n if (apiServerResult.hasErrors) {\n return apiServerResult;\n }\n const { apiServer } = apiServerResult;\n autoDispose({ dispose: () => disposeServer('API server', apiServer) });\n\n // Kick off bundling app package as soon as api server is ready.\n void ensurePackageBundled(\n {\n name: definition.name,\n version: definition.version,\n shouldGetBundleInfo: options.logBundleInfo,\n },\n apiContext,\n );\n\n // Then start bundle and app servers for hosting the app.\n const { startServers } = await import('@ms-cloudpack/app-server');\n const servers = await startServers(\n {\n definition,\n bundleServerOptions: { disableCache: !options.cache, port: options.bundleServerPort },\n port: options.appServerPort,\n },\n apiContext,\n );\n autoDispose({ dispose: () => disposeServer('app server', servers.appServer) });\n autoDispose({ dispose: () => disposeServer('bundle server', servers.bundleServer) });\n\n // Save the session to active sessions.\n const sessionTracker = await trackSession(session);\n autoDispose({ dispose: () => sessionTracker.close() });\n\n // Log the time elapsed from when the CLI started until the browser is ready to be opened.\n await telemetryClient.tracer.startActiveSpan(\n 'TIME_TO_OPEN_BROWSER',\n { startTime: getCliStartTime(), attributes: { open: options.open } },\n () => {\n if (!isRestart) {\n handleOpenBrowser(options, apiContext);\n }\n },\n );\n\n params.commandEvents.emit('ready');\n })().catch((err) => {\n console.error('Error in start command:', err);\n resolve({ hasErrors: true, message: `Error in start command: ${err}` });\n });\n });\n};\n\nfunction handleOpenBrowser(\n options: StartOptions,\n apiContext: PartialContext<'telemetryClient', 'config' | 'urls'>,\n): void {\n const { config, urls } = apiContext.session;\n\n const defaultUrl = makeUrl(config.server?.defaultPath || '', urls.appServer).href;\n\n // Open the browser.\n if (options.open === false) {\n console.log('Please open the browser manually to:', defaultUrl);\n } else {\n let urlToOpen: string;\n if (typeof options.open === 'string') {\n // If the string doesn't start with http or https, pick a protocol based on config.server.https\n if (!options.open.startsWith('http://') && !options.open.startsWith('https://')) {\n urlToOpen = `${config.server?.https ? 'https' : 'http'}://${options.open}`;\n } else {\n urlToOpen = options.open;\n }\n } else {\n // Use the default path from the config with the first domain.\n urlToOpen = defaultUrl;\n }\n\n void openBrowser({ url: urlToOpen }, apiContext).catch((err: unknown) => {\n console.warn('Error opening browser:', (err as Error | undefined)?.stack || err);\n console.warn('Please open the browser manually to:', defaultUrl);\n });\n }\n}\n\n// cspell:ignore Prereqs\n"]}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"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","sourcesContent":["import { createApiContext, ensurePackageBundled, type PartialContext } from '@ms-cloudpack/api-server';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { makeUrl } from '@ms-cloudpack/path-string-parsing';\nimport { yellow } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport type { CommandExitParams, CommandAction } from '../../types/CommandAction.js';\nimport { runPrerequisites } from '../../utilities/runPrerequisites.js';\nimport { openBrowser } from './openBrowser.js';\nimport { trackSession } from './trackSession.js';\nimport type { StartOptions } from './types/StartOptions.js';\nimport { getCliStartTime } from '../../utilities/getCliStartTime.js';\nimport { createApiServer } from '../../utilities/createApiServer.js';\nimport { resolveCloudpackInternalPath } from '../../utilities/resolveCloudpackInternalPath.js';\nimport { getDomain, parseHttpsConfig } from '@ms-cloudpack/create-express-app';\nimport { handleKnownParseHttpsErrors } from '../../utilities/handleKnownParseHttpsErrors.js';\nimport { createWatcher } from '@ms-cloudpack/file-watcher';\nimport { readConfig } from '@ms-cloudpack/config';\nimport { disposeServer } from '../../utilities/disposeServer.js';\n\n/**\n * Defines the \"start\" verb entry point.\n */\nexport const execute: CommandAction<StartOptions> = async (params) => {\n const { appPath, config, options, autoDispose, isRestart } = params;\n\n console.log('App path:', yellow(appPath));\n console.log('Bundle mode:', yellow(options.mode));\n\n await runPrerequisites(params);\n\n // Auto-run init with static analysis before start. Since static analysis is fast (~22s),\n // always run it to ensure the generated config is up to date with current dependencies.\n if (config.features?.staticAnalysisInit) {\n const { init } = await import('../init/init.js');\n const { InitSummaryData } = await import('../init/InitSummaryData.js');\n const { formatInitSummary } = await import('../init/formatInitSummary.js');\n\n config.generated = {};\n console.log('Running init with static analysis...\\n');\n\n const summaryData = new InitSummaryData({ appPath });\n await init({\n appPath: params.appPath,\n cachePath: params.cachePath,\n config: params.config,\n reporter: params.reporter,\n taskRunner: params.taskRunner,\n telemetryClient: params.telemetryClient,\n options: { cache: options.cache },\n skipWrite: true,\n isMultiApp: false,\n summaryData,\n });\n\n const summary = summaryData.summarize();\n console.log(formatInitSummary({ summary, check: false, isMultiApp: false, verb: 'init' }));\n }\n\n // If the user has specified https options in the config, parse them at start.\n // This makes sure that the HTTPS configuration is ready before starting the servers and shows errors early.\n // We need to do this after prerequisites are run, in case users setup their certs there.\n if (config?.server?.https) {\n try {\n const domain = getDomain(config.server.domain);\n config.server.parsedHttps = await parseHttpsConfig({ domain, https: config.server.https, cwd: appPath });\n } catch (err) {\n handleKnownParseHttpsErrors({ err, projectName: path.basename(appPath) });\n throw err;\n }\n }\n\n const overlayPath = await resolveCloudpackInternalPath({\n packageName: '@ms-cloudpack/overlay',\n importMetaUrl: import.meta.url,\n });\n\n const shouldUseRemoteCache = config.features?.enableCloudHosted || config.features?.enableRemoteCacheDownloads;\n const apiContext = autoDispose(\n await createApiContext({\n ...params,\n remoteCacheClientLoginMethod: shouldUseRemoteCache ? options.login : undefined,\n additionalPaths: overlayPath ? [overlayPath] : undefined,\n }),\n );\n const { packages, session, telemetryClient } = apiContext;\n\n return new Promise<CommandExitParams>((resolve) => {\n (async () => {\n let hasConfigChanged = false;\n const configWatcher = createWatcher();\n await Promise.all(\n config.configPaths?.appConfigPaths.map(\n (configPath) =>\n configWatcher.watch({ path: path.basename(configPath), watchPaths: [configPath] }, () => {\n if (hasConfigChanged) {\n return;\n }\n void readConfig(appPath)\n .then(() => {\n hasConfigChanged = true;\n resolve({ restart: true, message: 'Config changed. Restarting Cloudpack...' });\n })\n .catch((error) => console.warn('Config change detected, but the config file is invalid.', error));\n }) ?? [],\n ) ?? [],\n );\n\n // Set up config watcher disposal (up here in case the config changes before setup completes).\n autoDispose(configWatcher);\n\n // Increment the session version if caching is disabled.\n if (options.cache === false) {\n session.incrementSessionVersion();\n }\n\n // Make sure the package has a valid definition.\n const definition = await packages.get(appPath);\n\n if (options.logResolveMap) {\n // Write the resolve map to disk.\n await writeJson(path.join(appPath, 'resolve-map.json'), session.resolveMap);\n }\n\n // Start api server for tracking status and handling remote requests.\n const apiServerResult = await createApiServer({ port: options.apiServerPort }, apiContext);\n if (apiServerResult.hasErrors) {\n return apiServerResult;\n }\n const { apiServer } = apiServerResult;\n autoDispose({ dispose: () => disposeServer('API server', apiServer) });\n\n // Kick off bundling app package as soon as api server is ready.\n void ensurePackageBundled(\n {\n name: definition.name,\n version: definition.version,\n shouldGetBundleInfo: options.logBundleInfo,\n },\n apiContext,\n );\n\n // Then start bundle and app servers for hosting the app.\n const { startServers } = await import('@ms-cloudpack/app-server');\n const servers = await startServers(\n {\n definition,\n bundleServerOptions: { disableCache: !options.cache, port: options.bundleServerPort },\n port: options.appServerPort,\n },\n apiContext,\n );\n autoDispose({ dispose: () => disposeServer('app server', servers.appServer) });\n autoDispose({ dispose: () => disposeServer('bundle server', servers.bundleServer) });\n\n // Save the session to active sessions.\n const sessionTracker = await trackSession(session);\n autoDispose({ dispose: () => sessionTracker.close() });\n\n // Log the time elapsed from when the CLI started until the browser is ready to be opened.\n await telemetryClient.tracer.startActiveSpan(\n 'TIME_TO_OPEN_BROWSER',\n { startTime: getCliStartTime(), attributes: { open: options.open } },\n () => {\n if (!isRestart) {\n handleOpenBrowser(options, apiContext);\n }\n },\n );\n\n params.commandEvents.emit('ready');\n })().catch((err) => {\n console.error('Error in start command:', err);\n resolve({ hasErrors: true, message: `Error in start command: ${err}` });\n });\n });\n};\n\nfunction handleOpenBrowser(\n options: StartOptions,\n apiContext: PartialContext<'telemetryClient', 'config' | 'urls'>,\n): void {\n const { config, urls } = apiContext.session;\n\n const defaultUrl = makeUrl(config.server?.defaultPath || '', urls.appServer).href;\n\n // Open the browser.\n if (options.open === false) {\n console.log('Please open the browser manually to:', defaultUrl);\n } else {\n let urlToOpen: string;\n if (typeof options.open === 'string') {\n // If the string doesn't start with http or https, pick a protocol based on config.server.https\n if (!options.open.startsWith('http://') && !options.open.startsWith('https://')) {\n urlToOpen = `${config.server?.https ? 'https' : 'http'}://${options.open}`;\n } else {\n urlToOpen = options.open;\n }\n } else {\n // Use the default path from the config with the first domain.\n urlToOpen = defaultUrl;\n }\n\n void openBrowser({ url: urlToOpen }, apiContext).catch((err: unknown) => {\n console.warn('Error opening browser:', (err as Error | undefined)?.stack || err);\n console.warn('Please open the browser manually to:', defaultUrl);\n });\n }\n}\n\n// cspell:ignore Prereqs\n"]}
package/lib/main.js CHANGED
@@ -1,3 +1,11 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
1
9
  import { getDisplayVersion } from '@ms-cloudpack/package-utilities';
2
10
  import { globSourceFiles } from '@ms-cloudpack/path-utilities';
3
11
  import path from 'path';
@@ -50,7 +58,7 @@ export async function main(options = {}) {
50
58
  }
51
59
  for (const commandPath of commands) {
52
60
  const commandUrl = pathToFileURL(commandPath).toString();
53
- const commandModule = (await import(commandUrl));
61
+ const commandModule = (await import(__rewriteRelativeImportExtension(commandUrl)));
54
62
  commandModule.init(program);
55
63
  }
56
64
  await program.run();
package/lib/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["import { getDisplayVersion } from '@ms-cloudpack/package-utilities';\nimport { globSourceFiles } from '@ms-cloudpack/path-utilities';\nimport path from 'path';\nimport { fileURLToPath, pathToFileURL } from 'url';\nimport type { CommandInitModule } from './types/CommandInitFunction.js';\nimport { PerfMarkerCliEntry } from './performance/markers.js';\nimport { CloudpackCommand, type CloudpackCommandParams } from './utilities/CloudpackCommand.js';\nimport { getNodeEngineRequirement } from './utilities/getNodeEngineRequirement.js';\nimport { satisfies } from 'semver';\nimport type { ProgramOptions } from './types/ProgramOptions.js';\nimport { createCommandEvents } from './utilities/commandEvents.js';\n\n/** Override options for tests */\nexport type MainOptions = Partial<Pick<ProgramOptions, 'cwd' | 'disableTelemetry' | 'argv' | 'commandEvents'>> &\n Pick<CloudpackCommandParams<object, never>, 'outputOptions'>;\n\n/**\n * Entry point for the cloudpack CLI.\n * Resolves all commands defined within the \"./commands\" folder.\n */\nexport async function main(options: Partial<MainOptions> = {}): Promise<void> {\n process.title = 'cloudpack';\n // Check Node.js version compatibility before doing anything else\n const requiredNodeVersion = getNodeEngineRequirement();\n if (requiredNodeVersion && !satisfies(process.version, requiredNodeVersion)) {\n console.error(`Cloudpack requires Node.js ${requiredNodeVersion}. Current version: ${process.version}.`);\n // eslint-disable-next-line no-restricted-properties -- exit immediately\n process.exit(1);\n }\n\n const {\n argv = [...process.argv],\n // eslint-disable-next-line no-restricted-properties -- this is where the default is supplied\n cwd = process.cwd(),\n disableTelemetry,\n outputOptions,\n commandEvents = createCommandEvents(),\n } = options;\n\n performance.mark(PerfMarkerCliEntry);\n\n if (argv[3] === '--') {\n // Remove the \"--\" argument in case it's added by lage\n argv.splice(3, 1);\n }\n\n const version = getDisplayVersion(import.meta.url);\n\n // Create the top-level command and apply common options\n // (avoids \"unknown option\" errors if they're specified without a verb)\n const program = new CloudpackCommand({\n name: 'cloudpack',\n description: 'A tool for managing fast inner and outer looping in web apps. Requires a sub-command.',\n usage: '<command> [options]',\n outputOptions,\n programOptions: { cwd, version, argv, disableTelemetry, commandEvents },\n // The top-level command should realistically only ever be used with --help or --version,\n // so hide most of the options.\n hideSharedOptions: true,\n });\n\n // Get all the available commands\n const commandsGlob = 'commands/*/index';\n const commands = await globSourceFiles(import.meta.url, commandsGlob);\n if (!commands.length) {\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n throw new Error(`No commands found matching \"${currentDir}/${commandsGlob}.*\".`);\n }\n\n for (const commandPath of commands) {\n const commandUrl = pathToFileURL(commandPath).toString();\n const commandModule = (await import(commandUrl)) as CommandInitModule;\n\n commandModule.init(program);\n }\n\n await program.run();\n}\n"]}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["import { getDisplayVersion } from '@ms-cloudpack/package-utilities';\nimport { globSourceFiles } from '@ms-cloudpack/path-utilities';\nimport path from 'path';\nimport { fileURLToPath, pathToFileURL } from 'url';\nimport type { CommandInitModule } from './types/CommandInitFunction.js';\nimport { PerfMarkerCliEntry } from './performance/markers.js';\nimport { CloudpackCommand, type CloudpackCommandParams } from './utilities/CloudpackCommand.js';\nimport { getNodeEngineRequirement } from './utilities/getNodeEngineRequirement.js';\nimport { satisfies } from 'semver';\nimport type { ProgramOptions } from './types/ProgramOptions.js';\nimport { createCommandEvents } from './utilities/commandEvents.js';\n\n/** Override options for tests */\nexport type MainOptions = Partial<Pick<ProgramOptions, 'cwd' | 'disableTelemetry' | 'argv' | 'commandEvents'>> &\n Pick<CloudpackCommandParams<object, never>, 'outputOptions'>;\n\n/**\n * Entry point for the cloudpack CLI.\n * Resolves all commands defined within the \"./commands\" folder.\n */\nexport async function main(options: Partial<MainOptions> = {}): Promise<void> {\n process.title = 'cloudpack';\n // Check Node.js version compatibility before doing anything else\n const requiredNodeVersion = getNodeEngineRequirement();\n if (requiredNodeVersion && !satisfies(process.version, requiredNodeVersion)) {\n console.error(`Cloudpack requires Node.js ${requiredNodeVersion}. Current version: ${process.version}.`);\n // eslint-disable-next-line no-restricted-properties -- exit immediately\n process.exit(1);\n }\n\n const {\n argv = [...process.argv],\n // eslint-disable-next-line no-restricted-properties -- this is where the default is supplied\n cwd = process.cwd(),\n disableTelemetry,\n outputOptions,\n commandEvents = createCommandEvents(),\n } = options;\n\n performance.mark(PerfMarkerCliEntry);\n\n if (argv[3] === '--') {\n // Remove the \"--\" argument in case it's added by lage\n argv.splice(3, 1);\n }\n\n const version = getDisplayVersion(import.meta.url);\n\n // Create the top-level command and apply common options\n // (avoids \"unknown option\" errors if they're specified without a verb)\n const program = new CloudpackCommand({\n name: 'cloudpack',\n description: 'A tool for managing fast inner and outer looping in web apps. Requires a sub-command.',\n usage: '<command> [options]',\n outputOptions,\n programOptions: { cwd, version, argv, disableTelemetry, commandEvents },\n // The top-level command should realistically only ever be used with --help or --version,\n // so hide most of the options.\n hideSharedOptions: true,\n });\n\n // Get all the available commands\n const commandsGlob = 'commands/*/index';\n const commands = await globSourceFiles(import.meta.url, commandsGlob);\n if (!commands.length) {\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n throw new Error(`No commands found matching \"${currentDir}/${commandsGlob}.*\".`);\n }\n\n for (const commandPath of commands) {\n const commandUrl = pathToFileURL(commandPath).toString();\n const commandModule = (await import(commandUrl)) as CommandInitModule;\n\n commandModule.init(program);\n }\n\n await program.run();\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/cli",
3
- "version": "0.78.0",
3
+ "version": "0.79.0",
4
4
  "description": "The Cloudpack command line interface - a tool for managing fast inner and outer looping in web apps.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -30,25 +30,25 @@
30
30
  "test": "cloudpack-scripts test"
31
31
  },
32
32
  "dependencies": {
33
- "@ms-cloudpack/api-server": "^0.66.23",
34
- "@ms-cloudpack/app-server": "^0.20.62",
35
- "@ms-cloudpack/bundler": "^0.27.24",
36
- "@ms-cloudpack/bundler-capabilities": "^0.5.2",
37
- "@ms-cloudpack/common-types": "^0.33.3",
38
- "@ms-cloudpack/config": "^0.38.36",
39
- "@ms-cloudpack/create-express-app": "^1.10.73",
33
+ "@ms-cloudpack/api-server": "^0.67.0",
34
+ "@ms-cloudpack/app-server": "^0.20.64",
35
+ "@ms-cloudpack/bundler": "^0.27.26",
36
+ "@ms-cloudpack/bundler-capabilities": "^0.5.3",
37
+ "@ms-cloudpack/common-types": "^0.34.0",
38
+ "@ms-cloudpack/config": "^0.38.38",
39
+ "@ms-cloudpack/create-express-app": "^1.10.74",
40
40
  "@ms-cloudpack/environment": "^0.1.1",
41
- "@ms-cloudpack/file-watcher": "^0.4.32",
41
+ "@ms-cloudpack/file-watcher": "^0.4.33",
42
42
  "@ms-cloudpack/json-utilities": "^0.1.11",
43
- "@ms-cloudpack/link-proxy": "^0.2.84",
44
- "@ms-cloudpack/overlay": "^0.19.80",
45
- "@ms-cloudpack/package-utilities": "^13.7.2",
43
+ "@ms-cloudpack/link-proxy": "^0.2.86",
44
+ "@ms-cloudpack/overlay": "^0.19.82",
45
+ "@ms-cloudpack/package-utilities": "^13.8.0",
46
46
  "@ms-cloudpack/path-string-parsing": "^1.3.0",
47
- "@ms-cloudpack/path-utilities": "^3.2.9",
48
- "@ms-cloudpack/remote-cache": "^0.11.71",
49
- "@ms-cloudpack/setup-utilities": "^0.5.57",
50
- "@ms-cloudpack/task-reporter": "^0.19.0",
51
- "@ms-cloudpack/telemetry": "^0.11.71",
47
+ "@ms-cloudpack/path-utilities": "^3.2.10",
48
+ "@ms-cloudpack/remote-cache": "^0.11.73",
49
+ "@ms-cloudpack/setup-utilities": "^0.5.58",
50
+ "@ms-cloudpack/task-reporter": "^0.20.0",
51
+ "@ms-cloudpack/telemetry": "^0.11.73",
52
52
  "@yarnpkg/lockfile": "^1.1.0",
53
53
  "commander": "^14.0.0",
54
54
  "cross-spawn": "^7.0.3",
@@ -61,7 +61,7 @@
61
61
  "workspace-tools": "^0.41.0"
62
62
  },
63
63
  "devDependencies": {
64
- "@ms-cloudpack/common-types": "^0.33.3",
64
+ "@ms-cloudpack/common-types": "^0.34.0",
65
65
  "@ms-cloudpack/common-types-browser": "^0.6.5",
66
66
  "@ms-cloudpack/eslint-plugin-internal": "^0.0.1",
67
67
  "@ms-cloudpack/scripts": "^0.0.1",
@@ -974,7 +974,7 @@
974
974
  "type": "number",
975
975
  "description": "The length of the array."
976
976
  },
977
- "__@toStringTag@1177": {
977
+ "__@toStringTag@1178": {
978
978
  "type": "string",
979
979
  "const": "BigUint64Array"
980
980
  }
@@ -985,7 +985,7 @@
985
985
  "byteLength",
986
986
  "byteOffset",
987
987
  "length",
988
- "__@toStringTag@1177"
988
+ "__@toStringTag@1178"
989
989
  ],
990
990
  "additionalProperties": {
991
991
  "type": "number"
@@ -1025,7 +1025,7 @@
1025
1025
  "type": "number",
1026
1026
  "description": "The length of the array."
1027
1027
  },
1028
- "__@toStringTag@1177": {
1028
+ "__@toStringTag@1178": {
1029
1029
  "type": "string",
1030
1030
  "const": "BigInt64Array"
1031
1031
  }
@@ -1036,7 +1036,7 @@
1036
1036
  "byteLength",
1037
1037
  "byteOffset",
1038
1038
  "length",
1039
- "__@toStringTag@1177"
1039
+ "__@toStringTag@1178"
1040
1040
  ],
1041
1041
  "additionalProperties": {
1042
1042
  "type": "number"
@@ -1505,6 +1505,9 @@
1505
1505
  "syncInternalPackages": {
1506
1506
  "type": "boolean"
1507
1507
  },
1508
+ "staticAnalysisInit": {
1509
+ "type": "boolean"
1510
+ },
1508
1511
  "useSingleWebServer": {
1509
1512
  "type": "boolean"
1510
1513
  },
@@ -975,7 +975,7 @@
975
975
  "type": "number",
976
976
  "description": "The length of the array."
977
977
  },
978
- "__@toStringTag@1177": {
978
+ "__@toStringTag@1178": {
979
979
  "type": "string",
980
980
  "const": "BigUint64Array"
981
981
  }
@@ -986,7 +986,7 @@
986
986
  "byteLength",
987
987
  "byteOffset",
988
988
  "length",
989
- "__@toStringTag@1177"
989
+ "__@toStringTag@1178"
990
990
  ],
991
991
  "additionalProperties": {
992
992
  "type": "number"
@@ -1026,7 +1026,7 @@
1026
1026
  "type": "number",
1027
1027
  "description": "The length of the array."
1028
1028
  },
1029
- "__@toStringTag@1177": {
1029
+ "__@toStringTag@1178": {
1030
1030
  "type": "string",
1031
1031
  "const": "BigInt64Array"
1032
1032
  }
@@ -1037,7 +1037,7 @@
1037
1037
  "byteLength",
1038
1038
  "byteOffset",
1039
1039
  "length",
1040
- "__@toStringTag@1177"
1040
+ "__@toStringTag@1178"
1041
1041
  ],
1042
1042
  "additionalProperties": {
1043
1043
  "type": "number"
@@ -1506,6 +1506,9 @@
1506
1506
  "syncInternalPackages": {
1507
1507
  "type": "boolean"
1508
1508
  },
1509
+ "staticAnalysisInit": {
1510
+ "type": "boolean"
1511
+ },
1509
1512
  "useSingleWebServer": {
1510
1513
  "type": "boolean"
1511
1514
  },