@ms-cloudpack/cli 0.45.3 → 0.46.1
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/lib/commands/bundle/execute.d.ts +4 -0
- package/lib/commands/bundle/execute.d.ts.map +1 -0
- package/lib/commands/bundle/{bundle.js → execute.js} +14 -15
- package/lib/commands/bundle/execute.js.map +1 -0
- package/lib/commands/bundle/index.d.ts.map +1 -1
- package/lib/commands/bundle/index.js +4 -2
- package/lib/commands/bundle/index.js.map +1 -1
- package/lib/commands/init/bundleAndGetImports.d.ts.map +1 -1
- package/lib/commands/init/bundleAndGetImports.js +3 -1
- package/lib/commands/init/bundleAndGetImports.js.map +1 -1
- package/lib/commands/init/execute.d.ts +5 -0
- package/lib/commands/init/execute.d.ts.map +1 -0
- package/lib/commands/init/execute.js +14 -0
- package/lib/commands/init/execute.js.map +1 -0
- package/lib/commands/init/index.d.ts.map +1 -1
- package/lib/commands/init/index.js +4 -2
- package/lib/commands/init/index.js.map +1 -1
- package/lib/commands/init/init.d.ts +11 -5
- package/lib/commands/init/init.d.ts.map +1 -1
- package/lib/commands/init/init.js +79 -102
- package/lib/commands/init/init.js.map +1 -1
- package/lib/commands/start/{start.d.ts → execute.d.ts} +3 -3
- package/lib/commands/start/execute.d.ts.map +1 -0
- package/lib/commands/start/execute.js +127 -0
- package/lib/commands/start/execute.js.map +1 -0
- package/lib/commands/start/index.d.ts.map +1 -1
- package/lib/commands/start/index.js +4 -2
- package/lib/commands/start/index.js.map +1 -1
- package/lib/commands/start/startBundleServer.d.ts +1 -1
- package/lib/commands/start/startBundleServer.d.ts.map +1 -1
- package/lib/commands/start/startBundleServer.js +6 -19
- package/lib/commands/start/startBundleServer.js.map +1 -1
- package/lib/commands/sync/execute.d.ts +4 -0
- package/lib/commands/sync/execute.d.ts.map +1 -0
- package/lib/commands/sync/execute.js +31 -0
- package/lib/commands/sync/execute.js.map +1 -0
- package/lib/commands/sync/index.d.ts.map +1 -1
- package/lib/commands/sync/index.js +4 -5
- package/lib/commands/sync/index.js.map +1 -1
- package/lib/common/AutoDisposableList.d.ts +7 -0
- package/lib/common/AutoDisposableList.d.ts.map +1 -0
- package/lib/common/AutoDisposableList.js +17 -0
- package/lib/common/AutoDisposableList.js.map +1 -0
- package/lib/common/createCommandActionFunction.d.ts +14 -0
- package/lib/common/createCommandActionFunction.d.ts.map +1 -0
- package/lib/common/createCommandActionFunction.js +66 -0
- package/lib/common/createCommandActionFunction.js.map +1 -0
- package/lib/common/createExitFunction.d.ts +12 -0
- package/lib/common/createExitFunction.d.ts.map +1 -0
- package/lib/common/createExitFunction.js +17 -0
- package/lib/common/createExitFunction.js.map +1 -0
- package/lib/common/createInitializeFunction.d.ts +10 -0
- package/lib/common/createInitializeFunction.d.ts.map +1 -0
- package/lib/common/createInitializeFunction.js +21 -0
- package/lib/common/createInitializeFunction.js.map +1 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +6 -5
- package/lib/index.js.map +1 -1
- package/lib/initTelemetry.js +1 -1
- package/lib/initTelemetry.js.map +1 -1
- package/lib/performance/markers.d.ts +0 -16
- package/lib/performance/markers.d.ts.map +1 -1
- package/lib/performance/markers.js +0 -16
- package/lib/performance/markers.js.map +1 -1
- package/lib/performance/registerPerformanceObservers.d.ts +2 -2
- package/lib/performance/registerPerformanceObservers.d.ts.map +1 -1
- package/lib/performance/registerPerformanceObservers.js +5 -8
- package/lib/performance/registerPerformanceObservers.js.map +1 -1
- package/lib/setupReporting.d.ts +7 -2
- package/lib/setupReporting.d.ts.map +1 -1
- package/lib/setupReporting.js +3 -2
- package/lib/setupReporting.js.map +1 -1
- package/lib/tasks/bundleTaskWorker.d.ts.map +1 -1
- package/lib/tasks/bundleTaskWorker.js +6 -2
- package/lib/tasks/bundleTaskWorker.js.map +1 -1
- package/lib/types/AutoDispose.d.ts +3 -0
- package/lib/types/AutoDispose.d.ts.map +1 -0
- package/lib/types/AutoDispose.js +2 -0
- package/lib/types/AutoDispose.js.map +1 -0
- package/lib/types/CommandAction.d.ts +21 -0
- package/lib/types/CommandAction.d.ts.map +1 -0
- package/lib/types/CommandAction.js +2 -0
- package/lib/types/CommandAction.js.map +1 -0
- package/lib/types/CommandContext.d.ts +10 -0
- package/lib/types/CommandContext.d.ts.map +1 -0
- package/lib/types/CommandContext.js +2 -0
- package/lib/types/CommandContext.js.map +1 -0
- package/lib/types/CommandFunction.d.ts +2 -2
- package/lib/types/CommandFunction.d.ts.map +1 -1
- package/lib/types/CommandFunction.js.map +1 -1
- package/lib/types/CreateCommandActionOptions.d.ts +7 -0
- package/lib/types/CreateCommandActionOptions.d.ts.map +1 -0
- package/lib/types/CreateCommandActionOptions.js +2 -0
- package/lib/types/CreateCommandActionOptions.js.map +1 -0
- package/lib/types/Disposable.d.ts +4 -0
- package/lib/types/Disposable.d.ts.map +1 -0
- package/lib/types/Disposable.js +2 -0
- package/lib/types/Disposable.js.map +1 -0
- package/package.json +8 -11
- package/lib/commands/bundle/bundle.d.ts +0 -4
- package/lib/commands/bundle/bundle.d.ts.map +0 -1
- package/lib/commands/bundle/bundle.js.map +0 -1
- package/lib/commands/start/parseRequestInfo.d.ts +0 -7
- package/lib/commands/start/parseRequestInfo.d.ts.map +0 -1
- package/lib/commands/start/parseRequestInfo.js +0 -14
- package/lib/commands/start/parseRequestInfo.js.map +0 -1
- package/lib/commands/start/start.d.ts.map +0 -1
- package/lib/commands/start/start.js +0 -149
- package/lib/commands/start/start.js.map +0 -1
- package/lib/commands/sync/sync.d.ts +0 -4
- package/lib/commands/sync/sync.d.ts.map +0 -1
- package/lib/commands/sync/sync.js +0 -53
- package/lib/commands/sync/sync.js.map +0 -1
- package/lib/common/createPartialApiContext.d.ts +0 -14
- package/lib/common/createPartialApiContext.d.ts.map +0 -1
- package/lib/common/createPartialApiContext.js +0 -101
- package/lib/common/createPartialApiContext.js.map +0 -1
- package/lib/common/createSession.d.ts +0 -13
- package/lib/common/createSession.d.ts.map +0 -1
- package/lib/common/createSession.js +0 -62
- package/lib/common/createSession.js.map +0 -1
- package/lib/common/prepareOutputPath.d.ts +0 -5
- package/lib/common/prepareOutputPath.d.ts.map +0 -1
- package/lib/common/prepareOutputPath.js +0 -14
- package/lib/common/prepareOutputPath.js.map +0 -1
- package/lib/tasks/resolveDependenciesTask.d.ts +0 -16
- package/lib/tasks/resolveDependenciesTask.d.ts.map +0 -1
- package/lib/tasks/resolveDependenciesTask.js +0 -69
- package/lib/tasks/resolveDependenciesTask.js.map +0 -1
- package/lib/types/TaskContext.d.ts +0 -8
- package/lib/types/TaskContext.d.ts.map +0 -1
- package/lib/types/TaskContext.js +0 -2
- package/lib/types/TaskContext.js.map +0 -1
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import { writeJson } from '@ms-cloudpack/json-utilities';
|
|
2
|
-
import { findResolveMapEntry } from '@ms-cloudpack/package-utilities';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import { createSession } from '../../common/createSession.js';
|
|
5
|
-
import { openBrowser } from './openBrowser.js';
|
|
6
|
-
import { createPackageDefinitions, readConfig } from '@ms-cloudpack/config';
|
|
7
|
-
import { PerfMarkerCliEntry, PerfMeasurementOpenBrowser } from '../../performance/markers.js';
|
|
8
|
-
import { createBundleRequestForPackage, createBundleTask } from '@ms-cloudpack/api-server';
|
|
9
|
-
import { mergeFeatures } from './mergeFeatures.js';
|
|
10
|
-
import { yellow } from '@ms-cloudpack/task-reporter';
|
|
11
|
-
import { getStartingAppPath } from './getStartingAppPath.js';
|
|
12
|
-
import { runPrereqs } from './runPrereqs.js';
|
|
13
|
-
import { setupReporting } from '../../setupReporting.js';
|
|
14
|
-
let cleanupFunctions = [];
|
|
15
|
-
/** Stop all started cloudpack instances, for testing */
|
|
16
|
-
export async function stopServers() {
|
|
17
|
-
for (const func of cleanupFunctions) {
|
|
18
|
-
await func();
|
|
19
|
-
}
|
|
20
|
-
cleanupFunctions = [];
|
|
21
|
-
}
|
|
22
|
-
async function createAppBundleTask(options, context) {
|
|
23
|
-
const { packageName } = options;
|
|
24
|
-
const { session } = context;
|
|
25
|
-
const packageEntry = findResolveMapEntry({
|
|
26
|
-
packageName,
|
|
27
|
-
resolveMap: session.resolveMap,
|
|
28
|
-
});
|
|
29
|
-
if (!packageEntry) {
|
|
30
|
-
throw new Error(`Could not find package ${packageName} in the resolve map.`);
|
|
31
|
-
}
|
|
32
|
-
const bundleRequest = await createBundleRequestForPackage({ packageEntry }, context);
|
|
33
|
-
return createBundleTask(bundleRequest);
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Defines the "start" verb entry point.
|
|
37
|
-
*/
|
|
38
|
-
export async function start(options, context) {
|
|
39
|
-
const { reporter, appPath: initialCwd } = context;
|
|
40
|
-
const appPath = await getStartingAppPath(initialCwd, options.app);
|
|
41
|
-
const config = await readConfig(appPath);
|
|
42
|
-
const telemetryClient = await setupReporting({ appPath, config, reporter });
|
|
43
|
-
console.log('App path:', yellow(appPath));
|
|
44
|
-
process.chdir(appPath);
|
|
45
|
-
runPrereqs(config, appPath);
|
|
46
|
-
try {
|
|
47
|
-
// Merge in any additional features from the command line.
|
|
48
|
-
config.features = mergeFeatures({
|
|
49
|
-
configFeatures: config.features,
|
|
50
|
-
commandLineFeatures: options.features,
|
|
51
|
-
});
|
|
52
|
-
const enabledFeatureNames = Object.entries(config.features)
|
|
53
|
-
.filter(([, value]) => value)
|
|
54
|
-
.map(([key]) => key);
|
|
55
|
-
if (enabledFeatureNames.length) {
|
|
56
|
-
console.log(`Enabled features: ${enabledFeatureNames.map((f) => yellow(f)).join(', ')}`);
|
|
57
|
-
}
|
|
58
|
-
// Initialize package overrides.
|
|
59
|
-
const packages = createPackageDefinitions({ config });
|
|
60
|
-
// Make sure the package has a valid definition.
|
|
61
|
-
const definition = await packages.get(appPath);
|
|
62
|
-
if (!definition) {
|
|
63
|
-
throw new Error(`There was no package.json located at "${appPath}".`);
|
|
64
|
-
}
|
|
65
|
-
if (!definition.name || !definition.version) {
|
|
66
|
-
throw new Error(`The package.json at "${appPath}" did not have a name and/or version.`);
|
|
67
|
-
}
|
|
68
|
-
// Initialize session definition.
|
|
69
|
-
const session = await createSession({ appPath, config, includeOverlay: true }, { reporter, packages });
|
|
70
|
-
// Set shared telemetry attributes which will be sent with all telemetry events.
|
|
71
|
-
telemetryClient.setSharedSpanAttribute('sessionId', session.id);
|
|
72
|
-
if (options.logResolveMap) {
|
|
73
|
-
// Write the resolve map to disk.
|
|
74
|
-
await writeJson(path.join(appPath, 'resolve-map.json'), session.resolveMap);
|
|
75
|
-
}
|
|
76
|
-
const { startApiServer } = await import('@ms-cloudpack/api-server');
|
|
77
|
-
// Start api server for tracking status and handling remote requests.
|
|
78
|
-
const apiServer = await startApiServer({
|
|
79
|
-
session,
|
|
80
|
-
telemetryClient,
|
|
81
|
-
reporter,
|
|
82
|
-
packages,
|
|
83
|
-
});
|
|
84
|
-
// Kick off bundling app package as soon as api server is ready.
|
|
85
|
-
void apiServer.addTask(await createAppBundleTask({ packageName: definition.name }, { session, config, packages }));
|
|
86
|
-
// Then start bundle and app servers for hosting the app.
|
|
87
|
-
const { startBundleServer } = await import('./startBundleServer.js');
|
|
88
|
-
const bundleServer = await startBundleServer({ apiServer, session, reporter, packages });
|
|
89
|
-
// Finally start the app server.
|
|
90
|
-
const { startAppServer } = await import('./appServer/startAppServer.js');
|
|
91
|
-
const appServer = await startAppServer({
|
|
92
|
-
session,
|
|
93
|
-
definition,
|
|
94
|
-
bundleServer,
|
|
95
|
-
apiServer,
|
|
96
|
-
config,
|
|
97
|
-
reporter,
|
|
98
|
-
packages,
|
|
99
|
-
});
|
|
100
|
-
const cleanup = async () => {
|
|
101
|
-
for (const [name, server] of [
|
|
102
|
-
['appServer', appServer],
|
|
103
|
-
['apiServer', apiServer],
|
|
104
|
-
['bundleServer', bundleServer],
|
|
105
|
-
]) {
|
|
106
|
-
console.info(`Closing ${name}: ${server.url}`);
|
|
107
|
-
try {
|
|
108
|
-
await server.close();
|
|
109
|
-
}
|
|
110
|
-
catch (err) {
|
|
111
|
-
console.warn('Error closing server:', err);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
// Complete the reporting and list pending tasks as aborted.
|
|
115
|
-
reporter.complete();
|
|
116
|
-
// Flush and close telemetry.
|
|
117
|
-
await telemetryClient.shutdown();
|
|
118
|
-
};
|
|
119
|
-
cleanupFunctions.push(cleanup);
|
|
120
|
-
// Setup cleanup and close things on completion.
|
|
121
|
-
let sigintCount = 0;
|
|
122
|
-
process.on('SIGINT', () => {
|
|
123
|
-
sigintCount++;
|
|
124
|
-
if (sigintCount > 1) {
|
|
125
|
-
console.debug('Forcing exit');
|
|
126
|
-
process.exit(1);
|
|
127
|
-
}
|
|
128
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises -- handler can't be async
|
|
129
|
-
cleanup().finally(() => {
|
|
130
|
-
process.exit(0);
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
// Open the browser.
|
|
134
|
-
const url = appServer.url;
|
|
135
|
-
performance.measure(PerfMeasurementOpenBrowser, PerfMarkerCliEntry);
|
|
136
|
-
openBrowser(url).catch((err) => {
|
|
137
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
138
|
-
console.warn('Error opening browser:', err?.stack || err);
|
|
139
|
-
console.warn('Please open the browser manually to:', url);
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
catch (err) {
|
|
143
|
-
console.error(err);
|
|
144
|
-
reporter.complete();
|
|
145
|
-
process.exit(1);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
// cspell:ignore Prereqs
|
|
149
|
-
//# sourceMappingURL=start.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/start/start.ts"],"names":[],"mappings":"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","sourcesContent":["import { writeJson } from '@ms-cloudpack/json-utilities';\nimport { findResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport path from 'path';\nimport { createSession } from '../../common/createSession.js';\nimport { openBrowser } from './openBrowser.js';\nimport type { Session } from '@ms-cloudpack/api-server';\nimport type { StartOptions } from './types/StartOptions.js';\nimport { createPackageDefinitions, readConfig } from '@ms-cloudpack/config';\nimport type { CloudpackConfig } from '@ms-cloudpack/config';\nimport { PerfMarkerCliEntry, PerfMeasurementOpenBrowser } from '../../performance/markers.js';\nimport { createBundleRequestForPackage, createBundleTask } from '@ms-cloudpack/api-server';\nimport { mergeFeatures } from './mergeFeatures.js';\nimport { yellow } from '@ms-cloudpack/task-reporter';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { TaskContext } from '../../types/TaskContext.js';\nimport { getStartingAppPath } from './getStartingAppPath.js';\nimport { runPrereqs } from './runPrereqs.js';\nimport { setupReporting } from '../../setupReporting.js';\n\nlet cleanupFunctions: Array<() => Promise<void>> = [];\n\n/** Stop all started cloudpack instances, for testing */\nexport async function stopServers() {\n for (const func of cleanupFunctions) {\n await func();\n }\n cleanupFunctions = [];\n}\n\nasync function createAppBundleTask(\n options: { packageName: string },\n context: { session: Session; config: CloudpackConfig; packages: PackageDefinitionsCache },\n) {\n const { packageName } = options;\n const { session } = context;\n const packageEntry = findResolveMapEntry({\n packageName,\n resolveMap: session.resolveMap,\n });\n\n if (!packageEntry) {\n throw new Error(`Could not find package ${packageName} in the resolve map.`);\n }\n const bundleRequest = await createBundleRequestForPackage({ packageEntry }, context);\n\n return createBundleTask(bundleRequest);\n}\n\n/**\n * Defines the \"start\" verb entry point.\n */\nexport async function start(options: StartOptions, context: TaskContext) {\n const { reporter, appPath: initialCwd } = context;\n const appPath = await getStartingAppPath(initialCwd, options.app);\n const config = await readConfig(appPath);\n\n const telemetryClient = await setupReporting({ appPath, config, reporter });\n\n console.log('App path:', yellow(appPath));\n\n process.chdir(appPath);\n\n runPrereqs(config, appPath);\n\n try {\n // Merge in any additional features from the command line.\n config.features = mergeFeatures({\n configFeatures: config.features,\n commandLineFeatures: options.features,\n });\n\n const enabledFeatureNames = Object.entries(config.features)\n .filter(([, value]) => value)\n .map(([key]) => key);\n\n if (enabledFeatureNames.length) {\n console.log(`Enabled features: ${enabledFeatureNames.map((f) => yellow(f)).join(', ')}`);\n }\n\n // Initialize package overrides.\n const packages = createPackageDefinitions({ config });\n\n // Make sure the package has a valid definition.\n const definition = await packages.get(appPath);\n\n if (!definition) {\n throw new Error(`There was no package.json located at \"${appPath}\".`);\n }\n\n if (!definition.name || !definition.version) {\n throw new Error(`The package.json at \"${appPath}\" did not have a name and/or version.`);\n }\n\n // Initialize session definition.\n const session = await createSession({ appPath, config, includeOverlay: true }, { reporter, packages });\n\n // Set shared telemetry attributes which will be sent with all telemetry events.\n telemetryClient.setSharedSpanAttribute('sessionId', session.id);\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 const { startApiServer } = await import('@ms-cloudpack/api-server');\n\n // Start api server for tracking status and handling remote requests.\n const apiServer = await startApiServer({\n session,\n telemetryClient,\n reporter,\n packages,\n });\n\n // Kick off bundling app package as soon as api server is ready.\n void apiServer.addTask(await createAppBundleTask({ packageName: definition.name }, { session, config, packages }));\n\n // Then start bundle and app servers for hosting the app.\n const { startBundleServer } = await import('./startBundleServer.js');\n const bundleServer = await startBundleServer({ apiServer, session, reporter, packages });\n\n // Finally start the app server.\n const { startAppServer } = await import('./appServer/startAppServer.js');\n const appServer = await startAppServer({\n session,\n definition,\n bundleServer,\n apiServer,\n config,\n reporter,\n packages,\n });\n\n const cleanup = async () => {\n for (const [name, server] of [\n ['appServer', appServer] as const,\n ['apiServer', apiServer] as const,\n ['bundleServer', bundleServer] as const,\n ]) {\n console.info(`Closing ${name}: ${server.url}`);\n try {\n await server.close();\n } catch (err) {\n console.warn('Error closing server:', err);\n }\n }\n\n // Complete the reporting and list pending tasks as aborted.\n reporter.complete();\n\n // Flush and close telemetry.\n await telemetryClient.shutdown();\n };\n\n cleanupFunctions.push(cleanup);\n\n // Setup cleanup and close things on completion.\n let sigintCount = 0;\n\n process.on('SIGINT', () => {\n sigintCount++;\n if (sigintCount > 1) {\n console.debug('Forcing exit');\n process.exit(1);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- handler can't be async\n cleanup().finally(() => {\n process.exit(0);\n });\n });\n\n // Open the browser.\n const url = appServer.url;\n\n performance.measure(PerfMeasurementOpenBrowser, PerfMarkerCliEntry);\n openBrowser(url).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:', url);\n });\n } catch (err) {\n console.error(err);\n reporter.complete();\n process.exit(1);\n }\n}\n\n// cspell:ignore Prereqs\n"]}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { TaskContext } from '../../types/TaskContext.js';
|
|
2
|
-
import type { SyncOptions } from './types/SyncOptions.js';
|
|
3
|
-
export declare function sync({ upload, nonInteractiveLogin }: SyncOptions, context: TaskContext): Promise<void>;
|
|
4
|
-
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAQ1D,wBAAsB,IAAI,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,iBAiD5F"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { red } from '@ms-cloudpack/task-reporter';
|
|
2
|
-
import { setupReporting } from '../../setupReporting.js';
|
|
3
|
-
import { syncDownload, syncUpload } from '@ms-cloudpack/api-server/apis';
|
|
4
|
-
import { createPartialApiContext } from '../../common/createPartialApiContext.js';
|
|
5
|
-
import { isCIBuild } from '../../utilities/isCIBuild.js';
|
|
6
|
-
export async function sync({ upload, nonInteractiveLogin }, context) {
|
|
7
|
-
let hasErrors = false;
|
|
8
|
-
let message = undefined;
|
|
9
|
-
let telemetryClient;
|
|
10
|
-
let disposeContext = undefined;
|
|
11
|
-
try {
|
|
12
|
-
telemetryClient = await setupReporting(context);
|
|
13
|
-
const { config } = context;
|
|
14
|
-
const remoteCacheConfig = config.remoteCache;
|
|
15
|
-
if (!remoteCacheConfig) {
|
|
16
|
-
console.warn('Remote cache is not configured. Please add remoteCache to your cloudpack.config.json file to use this feature.');
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
const input = {
|
|
20
|
-
isInteractiveLogin: !(isCIBuild() || nonInteractiveLogin),
|
|
21
|
-
};
|
|
22
|
-
if (upload) {
|
|
23
|
-
const ctx = await createPartialApiContext({
|
|
24
|
-
...context,
|
|
25
|
-
telemetryClient,
|
|
26
|
-
items: ['bus', 'taskRunner', 'watcher', 'packages', 'session'],
|
|
27
|
-
});
|
|
28
|
-
disposeContext = ctx.dispose;
|
|
29
|
-
await syncUpload({ input, ctx });
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
const ctx = await createPartialApiContext({
|
|
33
|
-
...context,
|
|
34
|
-
telemetryClient,
|
|
35
|
-
items: ['packages', 'session'],
|
|
36
|
-
});
|
|
37
|
-
disposeContext = ctx.dispose;
|
|
38
|
-
await syncDownload({ input, ctx });
|
|
39
|
-
}
|
|
40
|
-
hasErrors = context.reporter.hasErrors();
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
message = error instanceof Error ? error.message : '<Unknown error>';
|
|
44
|
-
hasErrors = true;
|
|
45
|
-
}
|
|
46
|
-
finally {
|
|
47
|
-
await disposeContext?.();
|
|
48
|
-
context.reporter.complete(hasErrors ? red(message) : message);
|
|
49
|
-
await telemetryClient?.shutdown();
|
|
50
|
-
process.exit(hasErrors ? 1 : 0);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=sync.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAGlD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAe,EAAE,OAAoB;IAC3F,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,OAAO,GAAuB,SAAS,CAAC;IAC5C,IAAI,eAA4C,CAAC;IACjD,IAAI,cAAc,GAAmC,SAAS,CAAC;IAE/D,IAAI;QACF,eAAe,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC3B,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC;QAC7C,IAAI,CAAC,iBAAiB,EAAE;YACtB,OAAO,CAAC,IAAI,CACV,gHAAgH,CACjH,CAAC;YACF,OAAO;SACR;QAED,MAAM,KAAK,GAAG;YACZ,kBAAkB,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,mBAAmB,CAAC;SAC1D,CAAC;QAEF,IAAI,MAAM,EAAE;YACV,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC;gBACxC,GAAG,OAAO;gBACV,eAAe;gBACf,KAAK,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC;aAC/D,CAAC,CAAC;YACH,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC;YAC7B,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;SAClC;aAAM;YACL,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC;gBACxC,GAAG,OAAO;gBACV,eAAe;gBACf,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;aAC/B,CAAC,CAAC;YACH,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC;YAC7B,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;SACpC;QAED,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;KAC1C;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC;QACrE,SAAS,GAAG,IAAI,CAAC;KAClB;YAAS;QACR,MAAM,cAAc,EAAE,EAAE,CAAC;QACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,eAAe,EAAE,QAAQ,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACjC;AACH,CAAC","sourcesContent":["import { red } from '@ms-cloudpack/task-reporter';\nimport type { TaskContext } from '../../types/TaskContext.js';\nimport type { SyncOptions } from './types/SyncOptions.js';\nimport { setupReporting } from '../../setupReporting.js';\nimport { syncDownload, syncUpload } from '@ms-cloudpack/api-server/apis';\nimport { createPartialApiContext } from '../../common/createPartialApiContext.js';\nimport type { Context } from '@ms-cloudpack/api-server';\nimport { isCIBuild } from '../../utilities/isCIBuild.js';\nimport type { TelemetryClient } from '@ms-cloudpack/telemetry';\n\nexport async function sync({ upload, nonInteractiveLogin }: SyncOptions, context: TaskContext) {\n let hasErrors = false;\n let message: string | undefined = undefined;\n let telemetryClient: TelemetryClient | undefined;\n let disposeContext: Context['dispose'] | undefined = undefined;\n\n try {\n telemetryClient = await setupReporting(context);\n const { config } = context;\n const remoteCacheConfig = config.remoteCache;\n if (!remoteCacheConfig) {\n console.warn(\n 'Remote cache is not configured. Please add remoteCache to your cloudpack.config.json file to use this feature.',\n );\n return;\n }\n\n const input = {\n isInteractiveLogin: !(isCIBuild() || nonInteractiveLogin),\n };\n\n if (upload) {\n const ctx = await createPartialApiContext({\n ...context,\n telemetryClient,\n items: ['bus', 'taskRunner', 'watcher', 'packages', 'session'],\n });\n disposeContext = ctx.dispose;\n await syncUpload({ input, ctx });\n } else {\n const ctx = await createPartialApiContext({\n ...context,\n telemetryClient,\n items: ['packages', 'session'],\n });\n disposeContext = ctx.dispose;\n await syncDownload({ input, ctx });\n }\n\n hasErrors = context.reporter.hasErrors();\n } catch (error) {\n message = error instanceof Error ? error.message : '<Unknown error>';\n hasErrors = true;\n } finally {\n await disposeContext?.();\n context.reporter.complete(hasErrors ? red(message) : message);\n await telemetryClient?.shutdown();\n process.exit(hasErrors ? 1 : 0);\n }\n}\n"]}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { Context } from '@ms-cloudpack/api-server';
|
|
2
|
-
import type { TaskReporter } from '@ms-cloudpack/task-reporter';
|
|
3
|
-
import type { TelemetryClient } from '@ms-cloudpack/telemetry';
|
|
4
|
-
import type { CloudpackConfig } from '@ms-cloudpack/config';
|
|
5
|
-
export interface LazyApiContextOptions {
|
|
6
|
-
reporter: TaskReporter;
|
|
7
|
-
appPath: string;
|
|
8
|
-
config: CloudpackConfig;
|
|
9
|
-
telemetryClient: TelemetryClient;
|
|
10
|
-
}
|
|
11
|
-
export declare function createPartialApiContext<TKeys extends Exclude<keyof Context, 'dispose'>, TReturn extends Pick<Context, TKeys | 'dispose' | 'reporter' | 'telemetryClient'>>(options: LazyApiContextOptions & {
|
|
12
|
-
items: TKeys[];
|
|
13
|
-
}): Promise<TReturn>;
|
|
14
|
-
//# sourceMappingURL=createPartialApiContext.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createPartialApiContext.d.ts","sourceRoot":"","sources":["../../src/common/createPartialApiContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAuB,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAM5D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,eAAe,EAAE,eAAe,CAAC;CAClC;AAsFD,wBAAsB,uBAAuB,CAC3C,KAAK,SAAS,OAAO,CAAC,MAAM,OAAO,EAAE,SAAS,CAAC,EAC/C,OAAO,SAAS,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,iBAAiB,CAAC,EACjF,OAAO,EAAE,qBAAqB,GAAG;IAAE,KAAK,EAAE,KAAK,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBvE"}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
|
-
};
|
|
6
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
7
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
8
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
9
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
10
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
|
-
};
|
|
12
|
-
var _LazyApiContext_bus, _LazyApiContext_watcher, _LazyApiContext_packages, _LazyApiContext_taskRunner, _LazyApiContext_session;
|
|
13
|
-
class LazyApiContext {
|
|
14
|
-
constructor(options) {
|
|
15
|
-
this.options = options;
|
|
16
|
-
_LazyApiContext_bus.set(this, void 0);
|
|
17
|
-
_LazyApiContext_watcher.set(this, void 0);
|
|
18
|
-
_LazyApiContext_packages.set(this, void 0);
|
|
19
|
-
_LazyApiContext_taskRunner.set(this, void 0);
|
|
20
|
-
_LazyApiContext_session.set(this, void 0);
|
|
21
|
-
}
|
|
22
|
-
get telemetryClient() {
|
|
23
|
-
return Promise.resolve(this.options.telemetryClient);
|
|
24
|
-
}
|
|
25
|
-
get bus() {
|
|
26
|
-
if (!__classPrivateFieldGet(this, _LazyApiContext_bus, "f")) {
|
|
27
|
-
const createDataBusLazy = async () => {
|
|
28
|
-
const { createDataBus } = await import('@ms-cloudpack/data-bus');
|
|
29
|
-
return createDataBus();
|
|
30
|
-
};
|
|
31
|
-
__classPrivateFieldSet(this, _LazyApiContext_bus, createDataBusLazy(), "f");
|
|
32
|
-
}
|
|
33
|
-
return __classPrivateFieldGet(this, _LazyApiContext_bus, "f");
|
|
34
|
-
}
|
|
35
|
-
get watcher() {
|
|
36
|
-
if (!__classPrivateFieldGet(this, _LazyApiContext_watcher, "f")) {
|
|
37
|
-
const createWatcherLazy = async () => {
|
|
38
|
-
const { createWatcher } = await import('@ms-cloudpack/file-watcher');
|
|
39
|
-
return createWatcher();
|
|
40
|
-
};
|
|
41
|
-
__classPrivateFieldSet(this, _LazyApiContext_watcher, createWatcherLazy(), "f");
|
|
42
|
-
}
|
|
43
|
-
return __classPrivateFieldGet(this, _LazyApiContext_watcher, "f");
|
|
44
|
-
}
|
|
45
|
-
get reporter() {
|
|
46
|
-
return Promise.resolve(this.options.reporter);
|
|
47
|
-
}
|
|
48
|
-
get packages() {
|
|
49
|
-
if (!__classPrivateFieldGet(this, _LazyApiContext_packages, "f")) {
|
|
50
|
-
const createPackageDefinitionsLazy = async () => {
|
|
51
|
-
const { createPackageDefinitions } = await import('@ms-cloudpack/config');
|
|
52
|
-
return createPackageDefinitions({ config: this.options.config });
|
|
53
|
-
};
|
|
54
|
-
__classPrivateFieldSet(this, _LazyApiContext_packages, createPackageDefinitionsLazy(), "f");
|
|
55
|
-
}
|
|
56
|
-
return __classPrivateFieldGet(this, _LazyApiContext_packages, "f");
|
|
57
|
-
}
|
|
58
|
-
get taskRunner() {
|
|
59
|
-
if (!__classPrivateFieldGet(this, _LazyApiContext_taskRunner, "f")) {
|
|
60
|
-
const createTaskRunnerLazy = async () => {
|
|
61
|
-
const { TaskRunner } = await import('@ms-cloudpack/api-server');
|
|
62
|
-
return new TaskRunner();
|
|
63
|
-
};
|
|
64
|
-
__classPrivateFieldSet(this, _LazyApiContext_taskRunner, createTaskRunnerLazy(), "f");
|
|
65
|
-
}
|
|
66
|
-
return __classPrivateFieldGet(this, _LazyApiContext_taskRunner, "f");
|
|
67
|
-
}
|
|
68
|
-
get session() {
|
|
69
|
-
if (!__classPrivateFieldGet(this, _LazyApiContext_session, "f")) {
|
|
70
|
-
const createSessionLazy = async () => {
|
|
71
|
-
const { createSession } = await import('./createSession.js');
|
|
72
|
-
return createSession(this.options, { reporter: await this.reporter, packages: await this.packages });
|
|
73
|
-
};
|
|
74
|
-
__classPrivateFieldSet(this, _LazyApiContext_session, createSessionLazy(), "f");
|
|
75
|
-
}
|
|
76
|
-
return __classPrivateFieldGet(this, _LazyApiContext_session, "f");
|
|
77
|
-
}
|
|
78
|
-
async dispose() {
|
|
79
|
-
if (__classPrivateFieldGet(this, _LazyApiContext_watcher, "f")) {
|
|
80
|
-
const watcher = await __classPrivateFieldGet(this, _LazyApiContext_watcher, "f");
|
|
81
|
-
await watcher.unwatchAll();
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
_LazyApiContext_bus = new WeakMap(), _LazyApiContext_watcher = new WeakMap(), _LazyApiContext_packages = new WeakMap(), _LazyApiContext_taskRunner = new WeakMap(), _LazyApiContext_session = new WeakMap();
|
|
86
|
-
export async function createPartialApiContext(options) {
|
|
87
|
-
const { reporter, telemetryClient, items } = options;
|
|
88
|
-
const lazyContext = new LazyApiContext(options);
|
|
89
|
-
const result = {
|
|
90
|
-
reporter,
|
|
91
|
-
telemetryClient,
|
|
92
|
-
dispose: () => {
|
|
93
|
-
return lazyContext.dispose();
|
|
94
|
-
},
|
|
95
|
-
};
|
|
96
|
-
for (const item of items) {
|
|
97
|
-
result[item] = (await lazyContext[item]);
|
|
98
|
-
}
|
|
99
|
-
return result;
|
|
100
|
-
}
|
|
101
|
-
//# sourceMappingURL=createPartialApiContext.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createPartialApiContext.js","sourceRoot":"","sources":["../../src/common/createPartialApiContext.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DataBus } from '@ms-cloudpack/data-bus';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { Context, Session, TaskRunner } from '@ms-cloudpack/api-server';\nimport type { TaskReporter } from '@ms-cloudpack/task-reporter';\nimport type { Watcher } from '@ms-cloudpack/file-watcher';\nimport type { TelemetryClient } from '@ms-cloudpack/telemetry';\nimport type { CloudpackConfig } from '@ms-cloudpack/config';\n\ntype PromisifyProperties<T> = {\n [K in keyof T]: T[K] extends (...args: unknown[]) => unknown ? T[K] : Promise<T[K]>;\n};\n\nexport interface LazyApiContextOptions {\n reporter: TaskReporter;\n appPath: string;\n config: CloudpackConfig;\n telemetryClient: TelemetryClient;\n}\n\nclass LazyApiContext implements PromisifyProperties<Context> {\n #bus: Promise<DataBus> | undefined;\n #watcher: Promise<Watcher> | undefined;\n #packages: Promise<PackageDefinitionsCache> | undefined;\n #taskRunner: Promise<TaskRunner> | undefined;\n #session: Promise<Session> | undefined;\n\n constructor(private readonly options: LazyApiContextOptions) {}\n\n public get telemetryClient(): Promise<TelemetryClient> {\n return Promise.resolve(this.options.telemetryClient);\n }\n\n public get bus(): Promise<DataBus> {\n if (!this.#bus) {\n const createDataBusLazy = async () => {\n const { createDataBus } = await import('@ms-cloudpack/data-bus');\n return createDataBus();\n };\n this.#bus = createDataBusLazy();\n }\n\n return this.#bus;\n }\n\n public get watcher(): Promise<Watcher> {\n if (!this.#watcher) {\n const createWatcherLazy = async () => {\n const { createWatcher } = await import('@ms-cloudpack/file-watcher');\n return createWatcher();\n };\n this.#watcher = createWatcherLazy();\n }\n\n return this.#watcher;\n }\n\n public get reporter(): Promise<TaskReporter> {\n return Promise.resolve(this.options.reporter);\n }\n\n public get packages(): Promise<PackageDefinitionsCache> {\n if (!this.#packages) {\n const createPackageDefinitionsLazy = async () => {\n const { createPackageDefinitions } = await import('@ms-cloudpack/config');\n return createPackageDefinitions({ config: this.options.config });\n };\n this.#packages = createPackageDefinitionsLazy();\n }\n\n return this.#packages;\n }\n\n public get taskRunner(): Promise<TaskRunner> {\n if (!this.#taskRunner) {\n const createTaskRunnerLazy = async () => {\n const { TaskRunner } = await import('@ms-cloudpack/api-server');\n return new TaskRunner();\n };\n this.#taskRunner = createTaskRunnerLazy();\n }\n return this.#taskRunner;\n }\n\n public get session(): Promise<Session> {\n if (!this.#session) {\n const createSessionLazy = async () => {\n const { createSession } = await import('./createSession.js');\n return createSession(this.options, { reporter: await this.reporter, packages: await this.packages });\n };\n this.#session = createSessionLazy();\n }\n\n return this.#session;\n }\n\n public async dispose() {\n if (this.#watcher) {\n const watcher = await this.#watcher;\n await watcher.unwatchAll();\n }\n }\n}\n\nexport async function createPartialApiContext<\n TKeys extends Exclude<keyof Context, 'dispose'>,\n TReturn extends Pick<Context, TKeys | 'dispose' | 'reporter' | 'telemetryClient'>,\n>(options: LazyApiContextOptions & { items: TKeys[] }): Promise<TReturn> {\n const { reporter, telemetryClient, items } = options;\n const lazyContext = new LazyApiContext(options);\n\n const result = {\n reporter,\n telemetryClient,\n dispose: () => {\n return lazyContext.dispose();\n },\n } as TReturn;\n\n for (const item of items) {\n result[item] = (await lazyContext[item]) as TReturn[TKeys];\n }\n\n return result;\n}\n"]}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { type Session } from '@ms-cloudpack/api-server';
|
|
2
|
-
import type { TaskReporter } from '@ms-cloudpack/task-reporter';
|
|
3
|
-
import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
|
|
4
|
-
import type { CloudpackConfig } from '@ms-cloudpack/config';
|
|
5
|
-
export declare function createSession(options: {
|
|
6
|
-
appPath: string;
|
|
7
|
-
config: CloudpackConfig;
|
|
8
|
-
includeOverlay?: boolean;
|
|
9
|
-
}, context: {
|
|
10
|
-
reporter: TaskReporter;
|
|
11
|
-
packages: PackageDefinitionsCache;
|
|
12
|
-
}): Promise<Session>;
|
|
13
|
-
//# sourceMappingURL=createSession.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createSession.d.ts","sourceRoot":"","sources":["../../src/common/createSession.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAO3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAK5D,wBAAsB,aAAa,CACjC,OAAO,EAAE;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,EACD,OAAO,EAAE;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GACrE,OAAO,CAAC,OAAO,CAAC,CA0DlB"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { v4 as uuid } from 'uuid';
|
|
2
|
-
import { getLocalCachePath } from '@ms-cloudpack/api-server';
|
|
3
|
-
import { resolve } from '@ms-cloudpack/package-utilities';
|
|
4
|
-
import fs from 'fs';
|
|
5
|
-
import fsExtra from 'fs-extra';
|
|
6
|
-
import path from 'path';
|
|
7
|
-
import { fileURLToPath } from 'url';
|
|
8
|
-
import { resolveDependenciesTask } from '../tasks/resolveDependenciesTask.js';
|
|
9
|
-
const overlayPackageName = '@ms-cloudpack/overlay';
|
|
10
|
-
const overlayPackagePath = (await resolve(overlayPackageName, path.dirname(fileURLToPath(import.meta.url)))) || '';
|
|
11
|
-
export async function createSession(options, context) {
|
|
12
|
-
const { appPath, config, includeOverlay } = options;
|
|
13
|
-
const projectName = path.basename(appPath);
|
|
14
|
-
const id = uuid();
|
|
15
|
-
const resolveMap = await resolveDependenciesTask({
|
|
16
|
-
appPath,
|
|
17
|
-
additionalPaths: includeOverlay ? [overlayPackagePath] : [],
|
|
18
|
-
}, context);
|
|
19
|
-
if (!resolveMap) {
|
|
20
|
-
throw new Error('Could not resolve dependencies.');
|
|
21
|
-
}
|
|
22
|
-
let importMap = undefined;
|
|
23
|
-
let sessionVersion = 0;
|
|
24
|
-
await fsExtra.ensureDir(getLocalCachePath(appPath));
|
|
25
|
-
const targetVersionsPath = path.join(getLocalCachePath(appPath), 'targetVersions.json');
|
|
26
|
-
const fileExists = await fsExtra.pathExists(targetVersionsPath);
|
|
27
|
-
if (!fileExists) {
|
|
28
|
-
await fsExtra.writeJson(targetVersionsPath, {}, { spaces: 2 });
|
|
29
|
-
}
|
|
30
|
-
const targetVersions = (await fsExtra.readJSON(targetVersionsPath));
|
|
31
|
-
return {
|
|
32
|
-
id,
|
|
33
|
-
appPath,
|
|
34
|
-
config,
|
|
35
|
-
projectName,
|
|
36
|
-
type: 'web-app',
|
|
37
|
-
mode: 'library',
|
|
38
|
-
resolveMap,
|
|
39
|
-
sequence: 0,
|
|
40
|
-
targetVersions,
|
|
41
|
-
getSessionVersion: () => sessionVersion,
|
|
42
|
-
incrementSessionVersion: (version) => {
|
|
43
|
-
if (version === undefined || version > sessionVersion) {
|
|
44
|
-
sessionVersion = version ?? sessionVersion + 1;
|
|
45
|
-
importMap = undefined;
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
incrementTargetVersion: (inputPath) => {
|
|
49
|
-
targetVersions[inputPath] ??= 0;
|
|
50
|
-
targetVersions[inputPath]++;
|
|
51
|
-
importMap = undefined;
|
|
52
|
-
// eslint-disable-next-line no-restricted-syntax -- this function can't be async
|
|
53
|
-
fs.writeFileSync(targetVersionsPath, JSON.stringify(targetVersions, null, 2));
|
|
54
|
-
},
|
|
55
|
-
getImportMap: () => importMap,
|
|
56
|
-
setImportMap: (newImportMap) => {
|
|
57
|
-
importMap = newImportMap;
|
|
58
|
-
return importMap;
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=createSession.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createSession.js","sourceRoot":"","sources":["../../src/common/createSession.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as uuid } from 'uuid';\nimport { getLocalCachePath, type Session } from '@ms-cloudpack/api-server';\nimport { resolve, type ImportMap } from '@ms-cloudpack/package-utilities';\nimport fs from 'fs';\nimport fsExtra from 'fs-extra';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { resolveDependenciesTask } from '../tasks/resolveDependenciesTask.js';\nimport type { TaskReporter } from '@ms-cloudpack/task-reporter';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { CloudpackConfig } from '@ms-cloudpack/config';\n\nconst overlayPackageName = '@ms-cloudpack/overlay';\nconst overlayPackagePath = (await resolve(overlayPackageName, path.dirname(fileURLToPath(import.meta.url)))) || '';\n\nexport async function createSession(\n options: {\n appPath: string;\n config: CloudpackConfig;\n includeOverlay?: boolean;\n },\n context: { reporter: TaskReporter; packages: PackageDefinitionsCache },\n): Promise<Session> {\n const { appPath, config, includeOverlay } = options;\n\n const projectName = path.basename(appPath);\n const id = uuid();\n const resolveMap = await resolveDependenciesTask(\n {\n appPath,\n additionalPaths: includeOverlay ? [overlayPackagePath] : [],\n },\n context,\n );\n\n if (!resolveMap) {\n throw new Error('Could not resolve dependencies.');\n }\n\n let importMap: ImportMap | undefined = undefined;\n let sessionVersion = 0;\n\n await fsExtra.ensureDir(getLocalCachePath(appPath));\n const targetVersionsPath = path.join(getLocalCachePath(appPath), 'targetVersions.json');\n const fileExists = await fsExtra.pathExists(targetVersionsPath);\n if (!fileExists) {\n await fsExtra.writeJson(targetVersionsPath, {}, { spaces: 2 });\n }\n const targetVersions = (await fsExtra.readJSON(targetVersionsPath)) as Record<string, number>;\n\n return {\n id,\n appPath,\n config,\n projectName,\n type: 'web-app',\n mode: 'library',\n resolveMap,\n sequence: 0,\n targetVersions,\n getSessionVersion: () => sessionVersion,\n incrementSessionVersion: (version?: number) => {\n if (version === undefined || version > sessionVersion) {\n sessionVersion = version ?? sessionVersion + 1;\n importMap = undefined;\n }\n },\n incrementTargetVersion: (inputPath: string) => {\n targetVersions[inputPath] ??= 0;\n targetVersions[inputPath]++;\n importMap = undefined;\n // eslint-disable-next-line no-restricted-syntax -- this function can't be async\n fs.writeFileSync(targetVersionsPath, JSON.stringify(targetVersions, null, 2));\n },\n getImportMap: () => importMap,\n setImportMap: (newImportMap: ImportMap) => {\n importMap = newImportMap;\n return importMap;\n },\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prepareOutputPath.d.ts","sourceRoot":"","sources":["../../src/common/prepareOutputPath.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,iBAO5D"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import fsPromises from 'fs/promises';
|
|
2
|
-
/**
|
|
3
|
-
* Clears and replaces the given path, ensuring it exists in an empty state.
|
|
4
|
-
*/
|
|
5
|
-
export async function prepareOutputPath(requestedPath) {
|
|
6
|
-
try {
|
|
7
|
-
await fsPromises.rm(requestedPath, { recursive: true });
|
|
8
|
-
}
|
|
9
|
-
catch (e) {
|
|
10
|
-
/* ignore */
|
|
11
|
-
}
|
|
12
|
-
await fsPromises.mkdir(requestedPath, { recursive: true });
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=prepareOutputPath.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prepareOutputPath.js","sourceRoot":"","sources":["../../src/common/prepareOutputPath.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,aAAa,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,aAAqB;IAC3D,IAAI;QACF,MAAM,UAAU,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;KACzD;IAAC,OAAO,CAAC,EAAE;QACV,YAAY;KACb;IACD,MAAM,UAAU,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC","sourcesContent":["import fsPromises from 'fs/promises';\n\n/**\n * Clears and replaces the given path, ensuring it exists in an empty state.\n */\nexport async function prepareOutputPath(requestedPath: string) {\n try {\n await fsPromises.rm(requestedPath, { recursive: true });\n } catch (e) {\n /* ignore */\n }\n await fsPromises.mkdir(requestedPath, { recursive: true });\n}\n"]}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
|
|
2
|
-
import type { LinkedPath, ResolveMap } from '@ms-cloudpack/package-utilities';
|
|
3
|
-
import { type TaskReporter } from '@ms-cloudpack/task-reporter';
|
|
4
|
-
/**
|
|
5
|
-
* Resolves the locations of dependencies and returns the resolve map, logging results
|
|
6
|
-
* to the task reporter.
|
|
7
|
-
*/
|
|
8
|
-
export declare function resolveDependenciesTask(options: {
|
|
9
|
-
appPath: string;
|
|
10
|
-
additionalPaths?: string[];
|
|
11
|
-
linkedPaths?: LinkedPath[];
|
|
12
|
-
}, context: {
|
|
13
|
-
reporter: TaskReporter;
|
|
14
|
-
packages: PackageDefinitionsCache;
|
|
15
|
-
}): Promise<ResolveMap>;
|
|
16
|
-
//# sourceMappingURL=resolveDependenciesTask.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolveDependenciesTask.d.ts","sourceRoot":"","sources":["../../src/tasks/resolveDependenciesTask.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAmB,MAAM,iCAAiC,CAAC;AAE/F,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGlG;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B,EACD,OAAO,EAAE;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,uBAAuB,CAAA;CAAE,uBAyCvE"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { createResolveMap } from '@ms-cloudpack/package-utilities';
|
|
2
|
-
import { bold, bulletedList, cyan, yellow } from '@ms-cloudpack/task-reporter';
|
|
3
|
-
import { PerfMarkerCliEntry, PerfMeasurementTimeToResolveDependencies } from '../performance/markers.js';
|
|
4
|
-
/**
|
|
5
|
-
* Resolves the locations of dependencies and returns the resolve map, logging results
|
|
6
|
-
* to the task reporter.
|
|
7
|
-
*/
|
|
8
|
-
export async function resolveDependenciesTask(options, context) {
|
|
9
|
-
const { appPath, additionalPaths, linkedPaths } = options;
|
|
10
|
-
const { reporter, packages } = context;
|
|
11
|
-
let resolveMap;
|
|
12
|
-
if (performance.getEntriesByName(PerfMarkerCliEntry).length) {
|
|
13
|
-
performance.measure(PerfMeasurementTimeToResolveDependencies, PerfMarkerCliEntry);
|
|
14
|
-
}
|
|
15
|
-
// Grab the installed dependency locations.
|
|
16
|
-
await reporter.runTask('Resolving dependencies', async () => {
|
|
17
|
-
resolveMap = await createResolveMap({
|
|
18
|
-
appPath,
|
|
19
|
-
additionalPaths,
|
|
20
|
-
linkedPaths,
|
|
21
|
-
}, {
|
|
22
|
-
packages,
|
|
23
|
-
});
|
|
24
|
-
const { allPackages, duplicatedPackages } = getPackagesFromResolveMap(resolveMap);
|
|
25
|
-
const message = `Found ${cyan(allPackages.size)} total packages, ${duplicatedPackages.size ? `${yellow(duplicatedPackages.size)} with multiple versions.` : `no duplicates.`}`;
|
|
26
|
-
const extended = bulletedList(Array.from(duplicatedPackages.entries()).map(([name, versions]) => `${bold(name)}: ${Array.from(versions).join(', ')}`));
|
|
27
|
-
return {
|
|
28
|
-
message,
|
|
29
|
-
extended,
|
|
30
|
-
forceShow: true,
|
|
31
|
-
};
|
|
32
|
-
});
|
|
33
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- will be defined after the task runs
|
|
34
|
-
return resolveMap;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Given a resolveMap, returns a map of all packages and a map of packages with multiple versions.
|
|
38
|
-
* This is used to log the results of the resolve task.
|
|
39
|
-
*/
|
|
40
|
-
function getPackagesFromResolveMap(resolveMap) {
|
|
41
|
-
const allPackages = new Map();
|
|
42
|
-
const duplicatedPackages = new Map();
|
|
43
|
-
function addEntry(entry) {
|
|
44
|
-
if (allPackages.has(entry.name)) {
|
|
45
|
-
if (!duplicatedPackages.has(entry.name)) {
|
|
46
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
47
|
-
duplicatedPackages.set(entry.name, new Set([allPackages.get(entry.name).version]));
|
|
48
|
-
}
|
|
49
|
-
const dupeSet = duplicatedPackages.get(entry.name);
|
|
50
|
-
dupeSet?.add(entry.version);
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
allPackages.set(entry.name, entry);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
for (const currentEntry of Object.values(resolveMap)) {
|
|
57
|
-
addEntry(currentEntry);
|
|
58
|
-
if (currentEntry.scopedVersions) {
|
|
59
|
-
for (const scopedEntry of Object.values(currentEntry.scopedVersions)) {
|
|
60
|
-
addEntry(scopedEntry);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return {
|
|
65
|
-
allPackages,
|
|
66
|
-
duplicatedPackages,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=resolveDependenciesTask.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolveDependenciesTask.js","sourceRoot":"","sources":["../../src/tasks/resolveDependenciesTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { LinkedPath, ResolveMap, ResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport { createResolveMap } from '@ms-cloudpack/package-utilities';\nimport { bold, bulletedList, cyan, yellow, type TaskReporter } from '@ms-cloudpack/task-reporter';\nimport { PerfMarkerCliEntry, PerfMeasurementTimeToResolveDependencies } from '../performance/markers.js';\n\n/**\n * Resolves the locations of dependencies and returns the resolve map, logging results\n * to the task reporter.\n */\nexport async function resolveDependenciesTask(\n options: {\n appPath: string;\n additionalPaths?: string[];\n linkedPaths?: LinkedPath[];\n },\n context: { reporter: TaskReporter; packages: PackageDefinitionsCache },\n) {\n const { appPath, additionalPaths, linkedPaths } = options;\n const { reporter, packages } = context;\n let resolveMap: ResolveMap | undefined;\n\n if (performance.getEntriesByName(PerfMarkerCliEntry).length) {\n performance.measure(PerfMeasurementTimeToResolveDependencies, PerfMarkerCliEntry);\n }\n // Grab the installed dependency locations.\n await reporter.runTask('Resolving dependencies', async () => {\n resolveMap = await createResolveMap(\n {\n appPath,\n additionalPaths,\n linkedPaths,\n },\n {\n packages,\n },\n );\n\n const { allPackages, duplicatedPackages } = getPackagesFromResolveMap(resolveMap);\n const message = `Found ${cyan(allPackages.size)} total packages, ${\n duplicatedPackages.size ? `${yellow(duplicatedPackages.size)} with multiple versions.` : `no duplicates.`\n }`;\n const extended = bulletedList(\n Array.from(duplicatedPackages.entries()).map(\n ([name, versions]) => `${bold(name)}: ${Array.from(versions).join(', ')}`,\n ),\n );\n\n return {\n message,\n extended,\n forceShow: true,\n };\n });\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- will be defined after the task runs\n return resolveMap!;\n}\n\n/**\n * Given a resolveMap, returns a map of all packages and a map of packages with multiple versions.\n * This is used to log the results of the resolve task.\n */\nfunction getPackagesFromResolveMap(resolveMap: ResolveMap) {\n const allPackages = new Map<string, ResolveMapEntry>();\n const duplicatedPackages = new Map<string, Set<string>>();\n\n function addEntry(entry: ResolveMapEntry) {\n if (allPackages.has(entry.name)) {\n if (!duplicatedPackages.has(entry.name)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n duplicatedPackages.set(entry.name, new Set([allPackages.get(entry.name)!.version]));\n }\n const dupeSet = duplicatedPackages.get(entry.name);\n\n dupeSet?.add(entry.version);\n } else {\n allPackages.set(entry.name, entry);\n }\n }\n\n for (const currentEntry of Object.values(resolveMap)) {\n addEntry(currentEntry);\n\n if (currentEntry.scopedVersions) {\n for (const scopedEntry of Object.values(currentEntry.scopedVersions)) {\n addEntry(scopedEntry);\n }\n }\n }\n\n return {\n allPackages,\n duplicatedPackages,\n };\n}\n"]}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { CloudpackConfig } from '@ms-cloudpack/config';
|
|
2
|
-
import type { TaskReporter } from '@ms-cloudpack/task-reporter';
|
|
3
|
-
export interface TaskContext {
|
|
4
|
-
reporter: TaskReporter;
|
|
5
|
-
appPath: string;
|
|
6
|
-
config: CloudpackConfig;
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=TaskContext.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TaskContext.d.ts","sourceRoot":"","sources":["../../src/types/TaskContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;CACzB"}
|