@ms-cloudpack/cli 0.72.49 → 0.72.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/lib/commands/bundle/execute.d.ts.map +1 -1
  2. package/lib/commands/bundle/execute.js +3 -7
  3. package/lib/commands/bundle/execute.js.map +1 -1
  4. package/lib/commands/bundle/index.d.ts.map +1 -1
  5. package/lib/commands/bundle/index.js +1 -2
  6. package/lib/commands/bundle/index.js.map +1 -1
  7. package/lib/commands/bundle/types/BundleOptions.d.ts +1 -8
  8. package/lib/commands/bundle/types/BundleOptions.d.ts.map +1 -1
  9. package/lib/commands/bundle/types/BundleOptions.js.map +1 -1
  10. package/lib/commands/cache/clean.d.ts.map +1 -1
  11. package/lib/commands/cache/clean.js +1 -2
  12. package/lib/commands/cache/clean.js.map +1 -1
  13. package/lib/commands/config/delete.d.ts.map +1 -1
  14. package/lib/commands/config/delete.js +1 -2
  15. package/lib/commands/config/delete.js.map +1 -1
  16. package/lib/commands/config/get.d.ts.map +1 -1
  17. package/lib/commands/config/get.js +1 -2
  18. package/lib/commands/config/get.js.map +1 -1
  19. package/lib/commands/config/list.d.ts.map +1 -1
  20. package/lib/commands/config/list.js +1 -3
  21. package/lib/commands/config/list.js.map +1 -1
  22. package/lib/commands/config/set.d.ts.map +1 -1
  23. package/lib/commands/config/set.js +1 -2
  24. package/lib/commands/config/set.js.map +1 -1
  25. package/lib/commands/info/lockFile/execute.d.ts.map +1 -1
  26. package/lib/commands/info/lockFile/execute.js +1 -2
  27. package/lib/commands/info/lockFile/execute.js.map +1 -1
  28. package/lib/commands/info/nonSemverDeps/execute.js +2 -2
  29. package/lib/commands/info/nonSemverDeps/execute.js.map +1 -1
  30. package/lib/commands/init/execute.d.ts.map +1 -1
  31. package/lib/commands/init/execute.js +1 -10
  32. package/lib/commands/init/execute.js.map +1 -1
  33. package/lib/commands/init/index.d.ts.map +1 -1
  34. package/lib/commands/init/index.js +3 -0
  35. package/lib/commands/init/index.js.map +1 -1
  36. package/lib/commands/init/init.d.ts.map +1 -1
  37. package/lib/commands/init/init.js +149 -148
  38. package/lib/commands/init/init.js.map +1 -1
  39. package/lib/commands/init/types/InitOptions.d.ts +1 -1
  40. package/lib/commands/init/types/InitOptions.d.ts.map +1 -1
  41. package/lib/commands/init/types/InitOptions.js.map +1 -1
  42. package/lib/commands/link/execute.d.ts.map +1 -1
  43. package/lib/commands/link/execute.js +2 -2
  44. package/lib/commands/link/execute.js.map +1 -1
  45. package/lib/commands/setup/execute.d.ts.map +1 -1
  46. package/lib/commands/setup/execute.js +1 -2
  47. package/lib/commands/setup/execute.js.map +1 -1
  48. package/lib/commands/start/execute.d.ts.map +1 -1
  49. package/lib/commands/start/execute.js +3 -10
  50. package/lib/commands/start/execute.js.map +1 -1
  51. package/lib/commands/start/index.js +5 -2
  52. package/lib/commands/start/index.js.map +1 -1
  53. package/lib/commands/start/types/StartOptions.d.ts +1 -3
  54. package/lib/commands/start/types/StartOptions.d.ts.map +1 -1
  55. package/lib/commands/start/types/StartOptions.js.map +1 -1
  56. package/lib/commands/sync/execute.d.ts.map +1 -1
  57. package/lib/commands/sync/execute.js +2 -2
  58. package/lib/commands/sync/execute.js.map +1 -1
  59. package/lib/commands/unlink/execute.js +2 -2
  60. package/lib/commands/unlink/execute.js.map +1 -1
  61. package/lib/types/AppPathDiscoveryMode.d.ts +14 -0
  62. package/lib/types/AppPathDiscoveryMode.d.ts.map +1 -0
  63. package/lib/types/AppPathDiscoveryMode.js +2 -0
  64. package/lib/types/AppPathDiscoveryMode.js.map +1 -0
  65. package/lib/types/CommandAction.d.ts +5 -25
  66. package/lib/types/CommandAction.d.ts.map +1 -1
  67. package/lib/types/CommandAction.js.map +1 -1
  68. package/lib/types/ReusedOptions.d.ts +9 -0
  69. package/lib/types/ReusedOptions.d.ts.map +1 -1
  70. package/lib/types/ReusedOptions.js.map +1 -1
  71. package/lib/types/SharedOptions.d.ts +2 -2
  72. package/lib/types/SharedOptions.d.ts.map +1 -1
  73. package/lib/types/SharedOptions.js.map +1 -1
  74. package/lib/utilities/CloudpackCommand.d.ts +3 -1
  75. package/lib/utilities/CloudpackCommand.d.ts.map +1 -1
  76. package/lib/utilities/CloudpackCommand.js +4 -1
  77. package/lib/utilities/CloudpackCommand.js.map +1 -1
  78. package/lib/utilities/CommandExecutor.d.ts +19 -7
  79. package/lib/utilities/CommandExecutor.d.ts.map +1 -1
  80. package/lib/utilities/CommandExecutor.js +48 -26
  81. package/lib/utilities/CommandExecutor.js.map +1 -1
  82. package/lib/utilities/discoverAppPaths.d.ts +28 -0
  83. package/lib/utilities/discoverAppPaths.d.ts.map +1 -0
  84. package/lib/utilities/discoverAppPaths.js +80 -0
  85. package/lib/utilities/discoverAppPaths.js.map +1 -0
  86. package/lib/utilities/parseFeature.d.ts +6 -0
  87. package/lib/utilities/parseFeature.d.ts.map +1 -0
  88. package/lib/utilities/parseFeature.js +42 -0
  89. package/lib/utilities/parseFeature.js.map +1 -0
  90. package/lib/utilities/reusedOptions.d.ts +8 -0
  91. package/lib/utilities/reusedOptions.d.ts.map +1 -1
  92. package/lib/utilities/reusedOptions.js +8 -0
  93. package/lib/utilities/reusedOptions.js.map +1 -1
  94. package/package.json +6 -6
  95. package/lib/commands/start/getStartingAppPath.d.ts +0 -12
  96. package/lib/commands/start/getStartingAppPath.d.ts.map +0 -1
  97. package/lib/commands/start/getStartingAppPath.js +0 -60
  98. package/lib/commands/start/getStartingAppPath.js.map +0 -1
  99. package/lib/utilities/checkFeatures.d.ts +0 -12
  100. package/lib/utilities/checkFeatures.d.ts.map +0 -1
  101. package/lib/utilities/checkFeatures.js +0 -24
  102. package/lib/utilities/checkFeatures.js.map +0 -1
  103. package/lib/utilities/findCloudpackAppPaths.d.ts +0 -7
  104. package/lib/utilities/findCloudpackAppPaths.d.ts.map +0 -1
  105. package/lib/utilities/findCloudpackAppPaths.js +0 -12
  106. package/lib/utilities/findCloudpackAppPaths.js.map +0 -1
  107. package/lib/utilities/getConfigOptionsFromCliOptions.d.ts +0 -8
  108. package/lib/utilities/getConfigOptionsFromCliOptions.d.ts.map +0 -1
  109. package/lib/utilities/getConfigOptionsFromCliOptions.js +0 -14
  110. package/lib/utilities/getConfigOptionsFromCliOptions.js.map +0 -1
  111. package/lib/utilities/mergeFeatures.d.ts +0 -8
  112. package/lib/utilities/mergeFeatures.d.ts.map +0 -1
  113. package/lib/utilities/mergeFeatures.js +0 -16
  114. package/lib/utilities/mergeFeatures.js.map +0 -1
@@ -17,167 +17,168 @@ export async function init(parameters) {
17
17
  const summaries = [];
18
18
  const taskRunner = new TaskRunner();
19
19
  for (const appContext of contexts) {
20
- const summary = await initApp({
21
- appContext,
22
- options,
23
- autoDispose,
24
- summaryData: appSummaries[appContext.appPath],
25
- taskRunner,
26
- isMultiApp: contexts.length > 1,
20
+ await appContext.telemetryClient.tracer.startActiveSpan('INIT_APP', async (span) => {
21
+ const summary = await initApp({
22
+ appContext,
23
+ options,
24
+ autoDispose,
25
+ summaryData: appSummaries[appContext.appPath],
26
+ taskRunner,
27
+ isMultiApp: contexts.length > 1,
28
+ span,
29
+ });
30
+ summaries.push(summary);
27
31
  });
28
- summaries.push(summary);
29
32
  }
30
33
  return summaries;
31
34
  }
32
35
  async function initApp(params) {
33
- const { appContext, options, autoDispose, summaryData, taskRunner, isMultiApp } = params;
34
- const { appPath, config, telemetryClient } = appContext;
35
- return telemetryClient.tracer.startActiveSpan('INIT_APP', async (span) => {
36
- // Run prerequisites for the app.
37
- await runPrerequisites(appContext);
38
- // If --reset is specified, reset the generated config.
39
- if (options.reset) {
40
- config.generated = {};
36
+ const { appContext, options, autoDispose, summaryData, taskRunner, isMultiApp, span } = params;
37
+ const { appPath, config } = appContext;
38
+ // Run prerequisites for the app.
39
+ await runPrerequisites(appContext);
40
+ // If --reset is specified, reset the generated config.
41
+ if (options.reset) {
42
+ config.generated = {};
43
+ }
44
+ const apiContext = await createPartialApiContext({
45
+ ...appContext,
46
+ items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],
47
+ taskRunner,
48
+ });
49
+ autoDispose(apiContext);
50
+ const resolveMap = apiContext.session.resolveMap;
51
+ // Ensure config.generated.packageSettings is initialized.
52
+ config.generated.packageSettings ??= [];
53
+ let isExitingPrematurely = false;
54
+ await new Promise((resolve) => {
55
+ let pending = 0;
56
+ const visitedSet = new Set();
57
+ const refreshPaths = new Set();
58
+ const priorityMap = new Map();
59
+ // Start with the app path or requested matches
60
+ const initialPaths = options.match ? getFilteredPackages(resolveMap, options.match) : [appPath];
61
+ if (!initialPaths.length) {
62
+ summaryData.addErrors(appPath, [{ text: `No packages found matching ${options.match}`, source: 'init' }]);
63
+ resolve();
41
64
  }
42
- const apiContext = await createPartialApiContext({
43
- ...appContext,
44
- items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],
45
- taskRunner,
46
- });
47
- autoDispose(apiContext);
48
- const resolveMap = apiContext.session.resolveMap;
49
- // Ensure config.generated.packageSettings is initialized.
50
- config.generated.packageSettings ??= [];
51
- let isExitingPrematurely = false;
52
- await new Promise((resolve) => {
53
- let pending = 0;
54
- const visitedSet = new Set();
55
- const refreshPaths = new Set();
56
- const priorityMap = new Map();
57
- // Start with the app path or requested matches
58
- const initialPaths = options.match ? getFilteredPackages(resolveMap, options.match) : [appPath];
59
- if (!initialPaths.length) {
60
- summaryData.addErrors(appPath, [{ text: `No packages found matching ${options.match}`, source: 'init' }]);
61
- resolve();
65
+ enqueuePaths(new Map(initialPaths.map((packagePath) => [packagePath, undefined])));
66
+ /**
67
+ * Enqueue more paths.
68
+ * @param newPaths Mapping from package path to importer context.
69
+ */
70
+ function enqueuePaths(newPaths) {
71
+ if (isExitingPrematurely) {
72
+ return;
62
73
  }
63
- enqueuePaths(new Map(initialPaths.map((packagePath) => [packagePath, undefined])));
64
- /**
65
- * Enqueue more paths.
66
- * @param newPaths Mapping from package path to importer context.
67
- */
68
- function enqueuePaths(newPaths) {
69
- if (isExitingPrematurely) {
70
- return;
74
+ // Iterate through the given paths.
75
+ for (const [packagePath, importerContext] of newPaths) {
76
+ if (visitedSet.has(packagePath)) {
77
+ console.debug(`Skipping ${packagePath} as it has already been visited.`);
78
+ continue;
71
79
  }
72
- // Iterate through the given paths.
73
- for (const [packagePath, importerContext] of newPaths) {
74
- if (visitedSet.has(packagePath)) {
75
- console.debug(`Skipping ${packagePath} as it has already been visited.`);
76
- continue;
77
- }
78
- visitedSet.add(packagePath);
79
- pending++;
80
- const shouldForce = refreshPaths.delete(packagePath);
81
- // Get the priority value for this package path, defaults to 0.
82
- const priority = priorityMap.get(packagePath) ?? 0;
83
- // Lower priority of this package path by 1.
84
- priorityMap.set(packagePath, priority - 1);
85
- // Evaluate this path, but don't await - when we're done, we'll re-enqueue newly discovered paths.
86
- evaluatePath({
87
- appPath,
88
- packagePath,
89
- importerContext,
90
- config,
91
- span,
92
- resolveMap,
93
- initOptions: options,
94
- summaryData,
95
- ctx: apiContext,
96
- // No need to force if we're in a multi-app scenario
97
- // as we'll re-evaluate packages if they are different since we use a different task id.
98
- shouldForce: !isMultiApp && shouldForce,
99
- isMultiApp,
100
- priority,
101
- })
102
- .then(({ pathsToEvaluate, pathsToRefresh, shouldExit }) => {
103
- pending--;
104
- if (shouldExit) {
105
- isExitingPrematurely = true;
106
- }
107
- else if (pathsToEvaluate?.size) {
108
- // If there are packages that need to be rebuilt, delete them from the visited set to re-enqueue them
109
- // and add them to the refresh set so that on re-enqueuing we pass the `shouldRerun` flag through
110
- // on single app runs.
111
- pathsToRefresh?.forEach((refreshPath) => {
112
- refreshPaths.add(refreshPath);
113
- visitedSet.delete(refreshPath);
114
- });
115
- // Try to enqueue the new paths.
116
- console.debug(`Enqueuing paths found from ${packagePath}:\n` +
117
- bulletedList([...pathsToEvaluate].map(([newPath, newContext]) => `${newPath} ${JSON.stringify(newContext)}`)));
118
- enqueuePaths(pathsToEvaluate);
119
- }
120
- // If nothing is pending after this call, we're complete.
121
- if (!pending) {
122
- resolve();
123
- }
124
- })
125
- .catch((error) => {
126
- // Record the exception as an init error for the package.
127
- // This gives better context than a stack trace which could have come from any package.
128
- let prefix = 'evaluating package';
129
- if (importerContext) {
130
- prefix += ` (context: ${JSON.stringify(importerContext, null, 2).replace(/\s+/g, ' ')})`;
131
- }
132
- summaryData.recordException({ packagePath, error, source: 'init', context: prefix });
133
- // Don't immediately stop evaluation, but don't enqueue more paths.
80
+ visitedSet.add(packagePath);
81
+ pending++;
82
+ const shouldForce = refreshPaths.delete(packagePath);
83
+ // Get the priority value for this package path, defaults to 0.
84
+ const priority = priorityMap.get(packagePath) ?? 0;
85
+ // Lower priority of this package path by 1.
86
+ priorityMap.set(packagePath, priority - 1);
87
+ // Evaluate this path, but don't await - when we're done, we'll re-enqueue newly discovered paths.
88
+ evaluatePath({
89
+ appPath,
90
+ packagePath,
91
+ importerContext,
92
+ config,
93
+ span,
94
+ resolveMap,
95
+ initOptions: options,
96
+ summaryData,
97
+ ctx: apiContext,
98
+ // No need to force if we're in a multi-app scenario
99
+ // as we'll re-evaluate packages if they are different since we use a different task id.
100
+ shouldForce: !isMultiApp && shouldForce,
101
+ isMultiApp,
102
+ priority,
103
+ })
104
+ .then(({ pathsToEvaluate, pathsToRefresh, shouldExit }) => {
105
+ pending--;
106
+ if (shouldExit) {
134
107
  isExitingPrematurely = true;
135
- });
136
- }
108
+ }
109
+ else if (pathsToEvaluate?.size) {
110
+ // If there are packages that need to be rebuilt, delete them from the visited set to re-enqueue them
111
+ // and add them to the refresh set so that on re-enqueuing we pass the `shouldRerun` flag through
112
+ // on single app runs.
113
+ pathsToRefresh?.forEach((refreshPath) => {
114
+ refreshPaths.add(refreshPath);
115
+ visitedSet.delete(refreshPath);
116
+ });
117
+ // Try to enqueue the new paths.
118
+ console.debug(`Enqueuing paths found from ${packagePath}:\n` +
119
+ bulletedList([...pathsToEvaluate].map(([newPath, newContext]) => `${newPath} ${JSON.stringify(newContext)}`)));
120
+ enqueuePaths(pathsToEvaluate);
121
+ }
122
+ // If nothing is pending after this call, we're complete.
123
+ if (!pending) {
124
+ resolve();
125
+ }
126
+ })
127
+ .catch((error) => {
128
+ // Record the exception as an init error for the package.
129
+ // This gives better context than a stack trace which could have come from any package.
130
+ let prefix = 'evaluating package';
131
+ if (importerContext) {
132
+ prefix += ` (context: ${JSON.stringify(importerContext, null, 2).replace(/\s+/g, ' ')})`;
133
+ }
134
+ summaryData.recordException({ packagePath, error, source: 'init', context: prefix });
135
+ // Don't immediately stop evaluation, but don't enqueue more paths.
136
+ isExitingPrematurely = true;
137
+ });
137
138
  }
138
- }).catch((error) => {
139
- // If there's an error thrown from some other part of the promise besides evaluatePath (not likely),
140
- // record it as an init error for the app instead of allowing it to propagate.
141
- // This allows the overall init summary and any other errors to be logged as usual.
142
- isExitingPrematurely = true;
143
- summaryData.recordException({ packagePath: appPath, error, source: 'init', context: 'running init' });
144
- });
145
- // Log the resolve map to a file if requested. Do this *after* the main init process in case
146
- // any additional deps were discovered and added.
147
- if (options.logResolveMap) {
148
- console.log('\nWriting resolve map to `resolve-map.json`.');
149
- await writeJson(path.join(appPath, 'resolve-map.json'), resolveMap);
150
139
  }
151
- // Only do extra checks if there's not a major error already
152
- if (!isExitingPrematurely) {
153
- if (config.features?.optimizeDependencies) {
154
- // Conditionally scan dependency usage so that we can populate
155
- // include/excludeDependencies automatically, ensuring the dep list
156
- // is both minimal (remove unused deps) and complete (include
157
- // specific devDeps.)
158
- const excludedDependenciesChanges = await optimizeDependencies(summaryData.getResults(), apiContext);
159
- summaryData.recordGeneratedChanges(excludedDependenciesChanges);
160
- }
161
- if (config.features?.verifyExports) {
162
- const packageResults = await verifyExports(summaryData.getResults(), apiContext);
163
- for (const [packagePath, errors] of Object.entries(packageResults)) {
164
- summaryData.addErrors(packagePath, errors);
165
- }
166
- }
140
+ }).catch((error) => {
141
+ // If there's an error thrown from some other part of the promise besides evaluatePath (not likely),
142
+ // record it as an init error for the app instead of allowing it to propagate.
143
+ // This allows the overall init summary and any other errors to be logged as usual.
144
+ isExitingPrematurely = true;
145
+ summaryData.recordException({ packagePath: appPath, error, source: 'init', context: 'running init' });
146
+ });
147
+ // Log the resolve map to a file if requested. Do this *after* the main init process in case
148
+ // any additional deps were discovered and added.
149
+ if (options.logResolveMap) {
150
+ console.log('\nWriting resolve map to `resolve-map.json`.');
151
+ await writeJson(path.join(appPath, 'resolve-map.json'), resolveMap);
152
+ }
153
+ // Only do extra checks if there's not a major error already
154
+ if (!isExitingPrematurely) {
155
+ if (config.features?.optimizeDependencies) {
156
+ // Conditionally scan dependency usage so that we can populate
157
+ // include/excludeDependencies automatically, ensuring the dep list
158
+ // is both minimal (remove unused deps) and complete (include
159
+ // specific devDeps.)
160
+ const excludedDependenciesChanges = await optimizeDependencies(summaryData.getResults(), apiContext);
161
+ summaryData.recordGeneratedChanges(excludedDependenciesChanges);
167
162
  }
168
- const summary = summaryData.summarize(options);
169
- // The feature "removeUnusedExports" doesn't (yet) write summary changes, but we still
170
- // want to write the generated config if that featureFlag is on.
171
- const hasSummaryChanges = config.features?.removeUnusedExports || summary.totalChanges;
172
- if (!options.check && hasSummaryChanges) {
173
- // Update the generated config: either write it if there are settings, or delete it if it
174
- // previously existed but is no longer needed.
175
- const generatedResult = await writeGeneratedConfig(config.generated, appPath);
176
- if (generatedResult === 'deleted') {
177
- summary.deletedGeneratedConfig = true;
163
+ if (config.features?.verifyExports) {
164
+ const packageResults = await verifyExports(summaryData.getResults(), apiContext);
165
+ for (const [packagePath, errors] of Object.entries(packageResults)) {
166
+ summaryData.addErrors(packagePath, errors);
178
167
  }
179
168
  }
180
- return summary;
181
- });
169
+ }
170
+ const summary = summaryData.summarize(options);
171
+ // The feature "removeUnusedExports" doesn't (yet) write summary changes, but we still
172
+ // want to write the generated config if that featureFlag is on.
173
+ const hasSummaryChanges = config.features?.removeUnusedExports || summary.totalChanges;
174
+ if (!options.check && hasSummaryChanges) {
175
+ // Update the generated config: either write it if there are settings, or delete it if it
176
+ // previously existed but is no longer needed.
177
+ const generatedResult = await writeGeneratedConfig(config.generated, appPath);
178
+ if (generatedResult === 'deleted') {
179
+ summary.deletedGeneratedConfig = true;
180
+ }
181
+ }
182
+ return summary;
182
183
  }
183
184
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Context, TaskRunner } from '@ms-cloudpack/api-server';\nimport type { PackageImporterContext } from '@ms-cloudpack/common-types';\nimport type { AutoDispose } from '../../types/AutoDispose.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitSummary } from './types/InitSummary.js';\n\nimport { createPartialApiContext } from '@ms-cloudpack/api-server';\nimport { writeGeneratedConfig } from '@ms-cloudpack/config';\nimport type { InitSummaryData } from './InitSummaryData.js';\nimport { evaluatePath } from './evaluatePath.js';\nimport { verifyExports } from './verifyExports.js';\nimport type { AppCommandContext } from '../../types/CommandAction.js';\nimport path from 'path';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { runPrerequisites } from '../../utilities/runPrerequisites.js';\nimport { getFilteredPackages } from '../../utilities/getFilteredPackages.js';\nimport { optimizeDependencies } from './optimizeDependencies.js';\nimport { bulletedList } from '@ms-cloudpack/task-reporter';\n\n/**\n * Init execution function.\n */\nexport async function init(parameters: {\n options: InitOptions;\n contexts: AppCommandContext[];\n autoDispose: AutoDispose;\n /**\n * App summary objects, created ahead of time so that a partial summary can be generated\n * if the process is interrupted.\n */\n appSummaries: Record<string, InitSummaryData>;\n}): Promise<InitSummary[]> {\n const { options, contexts, autoDispose, appSummaries } = parameters;\n\n const summaries: InitSummary[] = [];\n\n const taskRunner = new TaskRunner();\n\n for (const appContext of contexts) {\n const summary = await initApp({\n appContext,\n options,\n autoDispose,\n summaryData: appSummaries[appContext.appPath],\n taskRunner,\n isMultiApp: contexts.length > 1,\n });\n summaries.push(summary);\n }\n\n return summaries;\n}\n\nasync function initApp(params: {\n appContext: AppCommandContext;\n options: InitOptions;\n autoDispose: AutoDispose;\n summaryData: InitSummaryData;\n taskRunner: TaskRunner;\n isMultiApp: boolean;\n}): Promise<InitSummary> {\n const { appContext, options, autoDispose, summaryData, taskRunner, isMultiApp } = params;\n const { appPath, config, telemetryClient } = appContext;\n return telemetryClient.tracer.startActiveSpan('INIT_APP', async (span) => {\n // Run prerequisites for the app.\n await runPrerequisites(appContext);\n\n // If --reset is specified, reset the generated config.\n if (options.reset) {\n config.generated = {};\n }\n\n const apiContext: Context = await createPartialApiContext({\n ...appContext,\n items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n taskRunner,\n });\n autoDispose(apiContext);\n const resolveMap = apiContext.session.resolveMap;\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 = options.match ? getFilteredPackages(resolveMap, options.match) : [appPath];\n if (!initialPaths.length) {\n summaryData.addErrors(appPath, [{ text: `No packages found matching ${options.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 // Evaluate this path, but don't await - when we're done, we'll re-enqueue newly discovered paths.\n evaluatePath({\n appPath,\n packagePath,\n importerContext,\n config,\n span,\n resolveMap,\n initOptions: options,\n summaryData,\n ctx: apiContext,\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 isMultiApp,\n priority,\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) => {\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) => {\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 // 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 (options.logResolveMap) {\n console.log('\\nWriting resolve map to `resolve-map.json`.');\n await writeJson(path.join(appPath, 'resolve-map.json'), resolveMap);\n }\n\n // Only do extra checks if there's not a major error already\n if (!isExitingPrematurely) {\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(), apiContext);\n summaryData.recordGeneratedChanges(excludedDependenciesChanges);\n }\n\n if (config.features?.verifyExports) {\n const packageResults = await verifyExports(summaryData.getResults(), apiContext);\n for (const [packagePath, errors] of Object.entries(packageResults)) {\n summaryData.addErrors(packagePath, errors);\n }\n }\n }\n\n const summary = summaryData.summarize(options);\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 || summary.totalChanges;\n\n if (!options.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 summary.deletedGeneratedConfig = true;\n }\n }\n\n return summary;\n });\n}\n"]}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Context, TaskRunner } from '@ms-cloudpack/api-server';\nimport type { PackageImporterContext } from '@ms-cloudpack/common-types';\nimport type { AutoDispose } from '../../types/AutoDispose.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitSummary } from './types/InitSummary.js';\n\nimport { createPartialApiContext } from '@ms-cloudpack/api-server';\nimport { writeGeneratedConfig } from '@ms-cloudpack/config';\nimport type { InitSummaryData } from './InitSummaryData.js';\nimport { evaluatePath } from './evaluatePath.js';\nimport { verifyExports } from './verifyExports.js';\nimport type { AppCommandContext } from '../../types/CommandAction.js';\nimport path from 'path';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { runPrerequisites } from '../../utilities/runPrerequisites.js';\nimport { getFilteredPackages } from '../../utilities/getFilteredPackages.js';\nimport { optimizeDependencies } from './optimizeDependencies.js';\nimport { bulletedList } from '@ms-cloudpack/task-reporter';\nimport type { Span } from '@ms-cloudpack/telemetry';\n\n/**\n * Init execution function.\n */\nexport async function init(parameters: {\n options: InitOptions;\n contexts: AppCommandContext[];\n autoDispose: AutoDispose;\n /**\n * App summary objects, created ahead of time so that a partial summary can be generated\n * if the process is interrupted.\n */\n appSummaries: Record<string, InitSummaryData>;\n}): Promise<InitSummary[]> {\n const { options, contexts, autoDispose, appSummaries } = parameters;\n\n const summaries: InitSummary[] = [];\n\n const taskRunner = new TaskRunner();\n\n for (const appContext of contexts) {\n await appContext.telemetryClient.tracer.startActiveSpan('INIT_APP', async (span) => {\n const summary = await initApp({\n appContext,\n options,\n autoDispose,\n summaryData: appSummaries[appContext.appPath],\n taskRunner,\n isMultiApp: contexts.length > 1,\n span,\n });\n summaries.push(summary);\n });\n }\n\n return summaries;\n}\n\nasync function initApp(params: {\n appContext: AppCommandContext;\n options: InitOptions;\n autoDispose: AutoDispose;\n summaryData: InitSummaryData;\n taskRunner: TaskRunner;\n isMultiApp: boolean;\n span: Span;\n}): Promise<InitSummary> {\n const { appContext, options, autoDispose, summaryData, taskRunner, isMultiApp, span } = params;\n const { appPath, config } = appContext;\n\n // Run prerequisites for the app.\n await runPrerequisites(appContext);\n\n // If --reset is specified, reset the generated config.\n if (options.reset) {\n config.generated = {};\n }\n\n const apiContext: Context = await createPartialApiContext({\n ...appContext,\n items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n taskRunner,\n });\n autoDispose(apiContext);\n const resolveMap = apiContext.session.resolveMap;\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 = options.match ? getFilteredPackages(resolveMap, options.match) : [appPath];\n if (!initialPaths.length) {\n summaryData.addErrors(appPath, [{ text: `No packages found matching ${options.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 // Evaluate this path, but don't await - when we're done, we'll re-enqueue newly discovered paths.\n evaluatePath({\n appPath,\n packagePath,\n importerContext,\n config,\n span,\n resolveMap,\n initOptions: options,\n summaryData,\n ctx: apiContext,\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 isMultiApp,\n priority,\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) => {\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) => {\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 // 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 (options.logResolveMap) {\n console.log('\\nWriting resolve map to `resolve-map.json`.');\n await writeJson(path.join(appPath, 'resolve-map.json'), resolveMap);\n }\n\n // Only do extra checks if there's not a major error already\n if (!isExitingPrematurely) {\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(), apiContext);\n summaryData.recordGeneratedChanges(excludedDependenciesChanges);\n }\n\n if (config.features?.verifyExports) {\n const packageResults = await verifyExports(summaryData.getResults(), apiContext);\n for (const [packagePath, errors] of Object.entries(packageResults)) {\n summaryData.addErrors(packagePath, errors);\n }\n }\n }\n\n const summary = summaryData.summarize(options);\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 || summary.totalChanges;\n\n if (!options.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 summary.deletedGeneratedConfig = true;\n }\n }\n\n return summary;\n}\n"]}
@@ -2,7 +2,7 @@ import type { ReusedOptions } from '../../../types/ReusedOptions.js';
2
2
  /**
3
3
  * Defines the options for the "init" command.
4
4
  */
5
- export interface InitOptions extends Pick<ReusedOptions, 'cache' | 'logBundleInfo' | 'logResolveMap' | 'match'> {
5
+ export interface InitOptions extends Pick<ReusedOptions, 'app' | 'cache' | 'logBundleInfo' | 'logResolveMap' | 'match'> {
6
6
  /**
7
7
  * Ignore the previous generated config.
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"InitOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/types/InitOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,eAAe,GAAG,eAAe,GAAG,OAAO,CAAC;IAC7G;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,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,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,OAAO,GAAG,eAAe,GAAG,eAAe,GAAG,OAAO,CAAC;IAC1F;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,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 { ReusedOptions } from '../../../types/ReusedOptions.js';\n\n/**\n * Defines the options for the \"init\" command.\n */\nexport interface InitOptions extends Pick<ReusedOptions, 'cache' | 'logBundleInfo' | 'logResolveMap' | 'match'> {\n /**\n * Ignore the previous generated config.\n */\n reset?: boolean;\n\n /**\n * Fail if updates to the generated config are required.\n */\n check?: boolean;\n}\n"]}
1
+ {"version":3,"file":"InitOptions.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { ReusedOptions } from '../../../types/ReusedOptions.js';\n\n/**\n * Defines the options for the \"init\" command.\n */\nexport interface InitOptions\n extends Pick<ReusedOptions, 'app' | 'cache' | 'logBundleInfo' | 'logResolveMap' | 'match'> {\n /**\n * Ignore the previous generated config.\n */\n reset?: boolean;\n\n /**\n * Fail if updates to the generated config are required.\n */\n check?: boolean;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/link/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAO1D;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,WAAW,CA2D9C,CAAC"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/link/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAO1D;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,WAAW,CA0D9C,CAAC"}
@@ -8,9 +8,9 @@ import path from 'path';
8
8
  */
9
9
  export const execute = async (params) => {
10
10
  // Use the current directory as the default package path.
11
- const { options, cwd: appPath, reporter, initialize } = params;
11
+ const { options, contexts, reporter } = params;
12
12
  const { ignore: ignoredPackages, all: includeAll, ignoreResolutions, resolveStrategy, logResolveMap, cachePath, } = options;
13
- await initialize({ appPath });
13
+ const { appPath } = contexts[0];
14
14
  console.debug('Linking packages...');
15
15
  console.debug('Include all:', !!includeAll);
16
16
  console.debug('Ignored packages:', ignoredPackages?.join(', ') || 'none');
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/link/execute.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CommandAction } from '../../types/CommandAction.js';\nimport type { LinkOptions } from './types/LinkOptions.js';\nimport { getSessionToLink } from './getSessionToLink.js';\nimport { createCloudpackClient } from '@ms-cloudpack/api-server';\nimport { formatLinkSummary } from './formatLinkSummary.js';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport path from 'path';\n\n/**\n * Defines the \"link\" verb entry point.\n */\nexport const execute: CommandAction<LinkOptions> = async (params) => {\n // Use the current directory as the default package path.\n const { options, cwd: appPath, reporter, initialize } = params;\n const {\n ignore: ignoredPackages,\n all: includeAll,\n ignoreResolutions,\n resolveStrategy,\n logResolveMap,\n cachePath,\n } = options;\n\n await initialize({ appPath });\n\n console.debug('Linking packages...');\n console.debug('Include all:', !!includeAll);\n console.debug('Ignored packages:', ignoredPackages?.join(', ') || 'none');\n console.debug('Apply host resolutions:', !ignoreResolutions);\n console.debug('Resolve strategy:', resolveStrategy);\n\n const sessionResult = await getSessionToLink({ reporter, cachePath });\n if (!sessionResult.session) {\n return sessionResult;\n }\n const { session } = sessionResult;\n const client = await createCloudpackClient({ url: session.urls.apiServer, reporter });\n\n const includeMessage = includeAll ? ' including all internal paths' : '';\n const message = `Linking paths for ${session.projectName} at \"${appPath}\"${includeMessage}`;\n const task = reporter.addTask(message);\n\n // Send request to api server to link paths.\n const { resolveMap, linkedPaths } = await client.linkPath.query({\n linkedPath: {\n path: appPath,\n ignoredPackages,\n includeAll,\n ignoreResolutions,\n resolveStrategy,\n },\n });\n await client.close();\n\n if (linkedPaths.find((p) => p.path === appPath) === undefined) {\n // Close down with an error.\n task.complete({ status: 'fail', message: `Failed to link paths.`, forceShow: true });\n return { hasErrors: true, message: 'Failed to link paths.' };\n }\n\n if (logResolveMap) {\n // Write the linked resolve map to disk.\n await writeJson(path.join(appPath, 'resolve-map-linked.json'), resolveMap);\n }\n\n // Close down successfully.\n task.complete({ status: 'complete', message: `Linked paths`, forceShow: true });\n const linkSummary = formatLinkSummary({ session, resolveMap, linkedPaths, resolveStrategy });\n\n return { message: linkSummary };\n};\n"]}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/link/execute.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CommandAction } from '../../types/CommandAction.js';\nimport type { LinkOptions } from './types/LinkOptions.js';\nimport { getSessionToLink } from './getSessionToLink.js';\nimport { createCloudpackClient } from '@ms-cloudpack/api-server';\nimport { formatLinkSummary } from './formatLinkSummary.js';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport path from 'path';\n\n/**\n * Defines the \"link\" verb entry point.\n */\nexport const execute: CommandAction<LinkOptions> = async (params) => {\n // Use the current directory as the default package path.\n const { options, contexts, reporter } = params;\n const {\n ignore: ignoredPackages,\n all: includeAll,\n ignoreResolutions,\n resolveStrategy,\n logResolveMap,\n cachePath,\n } = options;\n const { appPath } = contexts[0];\n\n console.debug('Linking packages...');\n console.debug('Include all:', !!includeAll);\n console.debug('Ignored packages:', ignoredPackages?.join(', ') || 'none');\n console.debug('Apply host resolutions:', !ignoreResolutions);\n console.debug('Resolve strategy:', resolveStrategy);\n\n const sessionResult = await getSessionToLink({ reporter, cachePath });\n if (!sessionResult.session) {\n return sessionResult;\n }\n const { session } = sessionResult;\n const client = await createCloudpackClient({ url: session.urls.apiServer, reporter });\n\n const includeMessage = includeAll ? ' including all internal paths' : '';\n const message = `Linking paths for ${session.projectName} at \"${appPath}\"${includeMessage}`;\n const task = reporter.addTask(message);\n\n // Send request to api server to link paths.\n const { resolveMap, linkedPaths } = await client.linkPath.query({\n linkedPath: {\n path: appPath,\n ignoredPackages,\n includeAll,\n ignoreResolutions,\n resolveStrategy,\n },\n });\n await client.close();\n\n if (linkedPaths.find((p) => p.path === appPath) === undefined) {\n // Close down with an error.\n task.complete({ status: 'fail', message: `Failed to link paths.`, forceShow: true });\n return { hasErrors: true, message: 'Failed to link paths.' };\n }\n\n if (logResolveMap) {\n // Write the linked resolve map to disk.\n await writeJson(path.join(appPath, 'resolve-map-linked.json'), resolveMap);\n }\n\n // Close down successfully.\n task.complete({ status: 'complete', message: `Linked paths`, forceShow: true });\n const linkSummary = formatLinkSummary({ session, resolveMap, linkedPaths, resolveStrategy });\n\n return { message: linkSummary };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/setup/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,oCAAoC;AACpC,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,CAe/C,CAAC"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/setup/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,oCAAoC;AACpC,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,CAc/C,CAAC"}
@@ -1,8 +1,7 @@
1
1
  import { setup } from '@ms-cloudpack/setup-utilities';
2
2
  /** Executor for the "setup" verb */
3
3
  export const execute = async (params) => {
4
- const { cwd, initialize } = params;
5
- const { config } = await initialize({ appPath: cwd });
4
+ const { config, appPath: cwd } = params.contexts[0];
6
5
  const { server = {} } = config;
7
6
  const { domain, https } = server;
8
7
  if (domain || https) {
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/setup/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAMtD,oCAAoC;AACpC,MAAM,CAAC,MAAM,OAAO,GAAgC,KAAK,EAAE,MAAM,EAAE,EAAE;IACnE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAEjC,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACpB,MAAM,KAAK,CAAC;YACV,MAAM;YACN,uBAAuB,EAAE,KAAK,KAAK,IAAI;YACvC,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AACxC,CAAC,CAAC","sourcesContent":["import type { CommandAction } from '../../types/CommandAction.js';\nimport { setup } from '@ms-cloudpack/setup-utilities';\n\nexport interface SetupOptions {\n force?: boolean;\n}\n\n/** Executor for the \"setup\" verb */\nexport const execute: CommandAction<SetupOptions> = async (params) => {\n const { cwd, initialize } = params;\n const { config } = await initialize({ appPath: cwd });\n const { server = {} } = config;\n const { domain, https } = server;\n\n if (domain || https) {\n await setup({\n domain,\n shouldCreateCertificate: https === true,\n cwd,\n });\n }\n\n return { message: 'Setup complete.' };\n};\n"]}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/setup/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAMtD,oCAAoC;AACpC,MAAM,CAAC,MAAM,OAAO,GAAgC,KAAK,EAAE,MAAM,EAAE,EAAE;IACnE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAEjC,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACpB,MAAM,KAAK,CAAC;YACV,MAAM;YACN,uBAAuB,EAAE,KAAK,KAAK,IAAI;YACvC,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AACxC,CAAC,CAAC","sourcesContent":["import type { CommandAction } from '../../types/CommandAction.js';\nimport { setup } from '@ms-cloudpack/setup-utilities';\n\nexport interface SetupOptions {\n force?: boolean;\n}\n\n/** Executor for the \"setup\" verb */\nexport const execute: CommandAction<SetupOptions> = async (params) => {\n const { config, appPath: cwd } = params.contexts[0];\n const { server = {} } = config;\n const { domain, https } = server;\n\n if (domain || https) {\n await setup({\n domain,\n shouldCreateCertificate: https === true,\n cwd,\n });\n }\n\n return { message: 'Setup complete.' };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAKlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAI5D;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,CA0H/C,CAAC"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,CAoH/C,CAAC"}
@@ -6,23 +6,16 @@ import { cyan, yellow, bold } from '@ms-cloudpack/task-reporter';
6
6
  import path from 'path';
7
7
  import { fileURLToPath } from 'url';
8
8
  import { runPrerequisites } from '../../utilities/runPrerequisites.js';
9
- import { getStartingAppPath } from './getStartingAppPath.js';
10
9
  import { openBrowser } from './openBrowser.js';
11
10
  import { trackSession } from './trackSession.js';
12
11
  import { getCertificate } from '@ms-cloudpack/setup-utilities';
13
- import { getConfigOptionsFromCliOptions } from '../../utilities/getConfigOptionsFromCliOptions.js';
14
12
  /**
15
13
  * Defines the "start" verb entry point.
16
14
  */
17
15
  export const execute = async (params) => {
18
- const { options, cwd, initialize, autoDispose } = params;
19
- const appPathResult = await getStartingAppPath(cwd, options.app);
20
- if (typeof appPathResult !== 'string') {
21
- return appPathResult;
22
- }
23
- const appPath = appPathResult;
24
- const apiContextOptions = await initialize({ appPath, configOptions: getConfigOptionsFromCliOptions(options) });
25
- const { config } = apiContextOptions;
16
+ const { contexts, options, autoDispose } = params;
17
+ const apiContextOptions = contexts[0];
18
+ const { appPath, config } = apiContextOptions;
26
19
  console.log('App path:', yellow(appPath));
27
20
  console.log('Bundle mode:', yellow(options.mode));
28
21
  await runPrerequisites(apiContextOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createPartialApiContext,\n ensurePackageBundled,\n type CloudpackServer,\n type Context,\n} from '@ms-cloudpack/api-server';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { isExternalPackage, resolve } from '@ms-cloudpack/path-utilities';\nimport { makeUrl } from '@ms-cloudpack/path-string-parsing';\nimport { cyan, yellow, bold } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport type { CommandAction } from '../../types/CommandAction.js';\nimport { runPrerequisites } from '../../utilities/runPrerequisites.js';\nimport { getStartingAppPath } from './getStartingAppPath.js';\nimport { openBrowser } from './openBrowser.js';\nimport { trackSession } from './trackSession.js';\nimport type { StartOptions } from './types/StartOptions.js';\nimport { getCertificate } from '@ms-cloudpack/setup-utilities';\nimport { getConfigOptionsFromCliOptions } from '../../utilities/getConfigOptionsFromCliOptions.js';\n\n/**\n * Defines the \"start\" verb entry point.\n */\nexport const execute: CommandAction<StartOptions> = async (params) => {\n const { options, cwd, initialize, autoDispose } = params;\n\n const appPathResult = await getStartingAppPath(cwd, options.app);\n if (typeof appPathResult !== 'string') {\n return appPathResult;\n }\n const appPath = appPathResult;\n const apiContextOptions = await initialize({ appPath, configOptions: getConfigOptionsFromCliOptions(options) });\n const { config } = apiContextOptions;\n\n console.log('App path:', yellow(appPath));\n console.log('Bundle mode:', yellow(options.mode));\n\n await runPrerequisites(apiContextOptions);\n\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n let overlayPath = await resolve('@ms-cloudpack/overlay', currentDir);\n\n // If overlay is an internal package, resolve the overlay from the current package's linked node modules\n // to \"externalize\" it, so that we always use the bundled version of the overlay instead of the source.\n if (overlayPath && !isExternalPackage(overlayPath)) {\n const cliPath = await resolve('@ms-cloudpack/cli', currentDir);\n overlayPath = cliPath ? path.join(cliPath, 'node_modules', '@ms-cloudpack/overlay') : undefined;\n }\n\n const shouldUseRemoteCache = config.features?.enableCloudHosted || config.features?.enableRemoteCacheDownloads;\n const [apiContext] = autoDispose(\n await createPartialApiContext({\n ...apiContextOptions,\n items: [\n 'bus',\n 'watcher',\n 'taskRunner',\n 'packages',\n 'session',\n 'packageImportPaths',\n 'packageHashes',\n shouldUseRemoteCache && 'remoteCacheClient',\n ],\n remoteCacheClientLoginMethod: options.login,\n overlayPath,\n }),\n );\n const { packages, session } = apiContext;\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(options, apiContext);\n if (apiServerResult.hasErrors) {\n return apiServerResult;\n }\n const { apiServer } = apiServerResult;\n\n // Kick off bundling app package as soon as api server is ready.\n void ensurePackageBundled({\n input: { name: definition.name, version: definition.version },\n ctx: 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\n // Save the session to active sessions.\n const sessionTracker = await trackSession(session);\n\n const cleanup = async () => {\n // Stop tracking the session.\n await sessionTracker.close();\n\n await Promise.all(\n Object.entries({ apiServer, ...servers }).map(async ([name, server]) => {\n if (!server) return;\n\n const desc = `${name} (${server.url})`;\n console.info(`Closing ${desc}`);\n try {\n await server.close();\n console.info(`Closed ${desc}`);\n } catch (err) {\n console.warn(`Error closing ${desc}:`, err);\n }\n }),\n );\n };\n\n autoDispose({ dispose: cleanup });\n\n const defaultUrl = makeUrl(config.server?.defaultPath || '', session.urls.appServer).href;\n\n // Open the browser.\n if (options.open !== false) {\n openBrowser({ options: { url: defaultUrl }, context: apiContext }).catch((err) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n console.warn('Error opening browser:', err?.stack || err);\n console.warn('Please open the browser manually to:', defaultUrl);\n });\n } else {\n console.log('Please open the browser manually to:', defaultUrl);\n }\n\n return null; // the command should keep running\n};\n\n/**\n * Create the API server, or return an error message if the server could not be created.\n */\nasync function createApiServer(\n options: StartOptions,\n apiContext: Context,\n): Promise<{ hasErrors: false; apiServer: CloudpackServer } | { hasErrors: true; message: string }> {\n const { session } = apiContext;\n const { config } = session;\n const { server, appPath } = config;\n\n // If a cert is needed, check that it exists.\n if (server?.https === true && !(await getCertificate({ domain: server?.domain, cwd: appPath }))) {\n return {\n hasErrors: true,\n message:\n `The local site is configured to use https in cloudpack.config.json, but is missing a cert.\\n\\n` +\n `Run \"${cyan(bold('cloudpack setup'))}\" to create the required certificate and try start again.\\n`,\n };\n }\n\n const { createCloudpackServer } = await import('@ms-cloudpack/api-server');\n\n try {\n const apiServer = await createCloudpackServer({ port: options.apiServerPort }, apiContext);\n return { hasErrors: false, apiServer };\n } catch (err) {\n let message: string;\n if ((err as { code: string }).code === 'EADDRNOTAVAIL' && server?.domain) {\n const primaryDomain = (Array.isArray(server.domain) ? server.domain : [server.domain])[0];\n message =\n `The domain \"${cyan(bold(primaryDomain))}\" in cloudpack.config.json is not resolvable.\\n\\n` +\n `Run \"${cyan(bold('cloudpack setup'))}\" to add the appropriate entries to your hosts file and ` +\n `try start again.\\n`;\n } else {\n message = `Error creating API server: ${(err as Error).stack || err}`;\n }\n return { hasErrors: true, message };\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 {\n createPartialApiContext,\n ensurePackageBundled,\n type CloudpackServer,\n type Context,\n} from '@ms-cloudpack/api-server';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { isExternalPackage, resolve } from '@ms-cloudpack/path-utilities';\nimport { makeUrl } from '@ms-cloudpack/path-string-parsing';\nimport { cyan, yellow, bold } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport type { 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 { getCertificate } from '@ms-cloudpack/setup-utilities';\n\n/**\n * Defines the \"start\" verb entry point.\n */\nexport const execute: CommandAction<StartOptions> = async (params) => {\n const { contexts, options, autoDispose } = params;\n const apiContextOptions = contexts[0];\n const { appPath, config } = apiContextOptions;\n\n console.log('App path:', yellow(appPath));\n console.log('Bundle mode:', yellow(options.mode));\n\n await runPrerequisites(apiContextOptions);\n\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n let overlayPath = await resolve('@ms-cloudpack/overlay', currentDir);\n\n // If overlay is an internal package, resolve the overlay from the current package's linked node modules\n // to \"externalize\" it, so that we always use the bundled version of the overlay instead of the source.\n if (overlayPath && !isExternalPackage(overlayPath)) {\n const cliPath = await resolve('@ms-cloudpack/cli', currentDir);\n overlayPath = cliPath ? path.join(cliPath, 'node_modules', '@ms-cloudpack/overlay') : undefined;\n }\n\n const shouldUseRemoteCache = config.features?.enableCloudHosted || config.features?.enableRemoteCacheDownloads;\n const [apiContext] = autoDispose(\n await createPartialApiContext({\n ...apiContextOptions,\n items: [\n 'bus',\n 'watcher',\n 'taskRunner',\n 'packages',\n 'session',\n 'packageImportPaths',\n 'packageHashes',\n shouldUseRemoteCache && 'remoteCacheClient',\n ],\n remoteCacheClientLoginMethod: options.login,\n overlayPath,\n }),\n );\n const { packages, session } = apiContext;\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(options, apiContext);\n if (apiServerResult.hasErrors) {\n return apiServerResult;\n }\n const { apiServer } = apiServerResult;\n\n // Kick off bundling app package as soon as api server is ready.\n void ensurePackageBundled({\n input: { name: definition.name, version: definition.version },\n ctx: 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\n // Save the session to active sessions.\n const sessionTracker = await trackSession(session);\n\n const cleanup = async () => {\n // Stop tracking the session.\n await sessionTracker.close();\n\n await Promise.all(\n Object.entries({ apiServer, ...servers }).map(async ([name, server]) => {\n if (!server) return;\n\n const desc = `${name} (${server.url})`;\n console.info(`Closing ${desc}`);\n try {\n await server.close();\n console.info(`Closed ${desc}`);\n } catch (err) {\n console.warn(`Error closing ${desc}:`, err);\n }\n }),\n );\n };\n\n autoDispose({ dispose: cleanup });\n\n const defaultUrl = makeUrl(config.server?.defaultPath || '', session.urls.appServer).href;\n\n // Open the browser.\n if (options.open !== false) {\n openBrowser({ options: { url: defaultUrl }, context: apiContext }).catch((err) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n console.warn('Error opening browser:', err?.stack || err);\n console.warn('Please open the browser manually to:', defaultUrl);\n });\n } else {\n console.log('Please open the browser manually to:', defaultUrl);\n }\n\n return null; // the command should keep running\n};\n\n/**\n * Create the API server, or return an error message if the server could not be created.\n */\nasync function createApiServer(\n options: StartOptions,\n apiContext: Context,\n): Promise<{ hasErrors: false; apiServer: CloudpackServer } | { hasErrors: true; message: string }> {\n const { session } = apiContext;\n const { config } = session;\n const { server, appPath } = config;\n\n // If a cert is needed, check that it exists.\n if (server?.https === true && !(await getCertificate({ domain: server?.domain, cwd: appPath }))) {\n return {\n hasErrors: true,\n message:\n `The local site is configured to use https in cloudpack.config.json, but is missing a cert.\\n\\n` +\n `Run \"${cyan(bold('cloudpack setup'))}\" to create the required certificate and try start again.\\n`,\n };\n }\n\n const { createCloudpackServer } = await import('@ms-cloudpack/api-server');\n\n try {\n const apiServer = await createCloudpackServer({ port: options.apiServerPort }, apiContext);\n return { hasErrors: false, apiServer };\n } catch (err) {\n let message: string;\n if ((err as { code: string }).code === 'EADDRNOTAVAIL' && server?.domain) {\n const primaryDomain = (Array.isArray(server.domain) ? server.domain : [server.domain])[0];\n message =\n `The domain \"${cyan(bold(primaryDomain))}\" in cloudpack.config.json is not resolvable.\\n\\n` +\n `Run \"${cyan(bold('cloudpack setup'))}\" to add the appropriate entries to your hosts file and ` +\n `try start again.\\n`;\n } else {\n message = `Error creating API server: ${(err as Error).stack || err}`;\n }\n return { hasErrors: true, message };\n }\n}\n\n// cspell:ignore Prereqs\n"]}