@ms-cloudpack/cli 0.72.52 → 0.72.54
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.map +1 -1
- package/lib/commands/bundle/execute.js +5 -10
- package/lib/commands/bundle/execute.js.map +1 -1
- package/lib/commands/info/lockFile/execute.js +1 -1
- package/lib/commands/info/lockFile/execute.js.map +1 -1
- package/lib/commands/info/nonSemverDeps/execute.d.ts.map +1 -1
- package/lib/commands/info/nonSemverDeps/execute.js +1 -2
- package/lib/commands/info/nonSemverDeps/execute.js.map +1 -1
- package/lib/commands/init/InitSummaryData.d.ts +11 -2
- package/lib/commands/init/InitSummaryData.d.ts.map +1 -1
- package/lib/commands/init/InitSummaryData.js +19 -6
- package/lib/commands/init/InitSummaryData.js.map +1 -1
- package/lib/commands/init/execute.d.ts.map +1 -1
- package/lib/commands/init/execute.js +15 -12
- package/lib/commands/init/execute.js.map +1 -1
- package/lib/commands/init/formatInitSummary.d.ts +5 -6
- package/lib/commands/init/formatInitSummary.d.ts.map +1 -1
- package/lib/commands/init/formatInitSummary.js +5 -14
- package/lib/commands/init/formatInitSummary.js.map +1 -1
- package/lib/commands/init/init.d.ts +5 -10
- package/lib/commands/init/init.d.ts.map +1 -1
- package/lib/commands/init/init.js +22 -40
- package/lib/commands/init/init.js.map +1 -1
- package/lib/commands/link/execute.d.ts.map +1 -1
- package/lib/commands/link/execute.js +1 -2
- package/lib/commands/link/execute.js.map +1 -1
- package/lib/commands/setup/execute.js +1 -1
- package/lib/commands/setup/execute.js.map +1 -1
- package/lib/commands/start/execute.d.ts.map +1 -1
- package/lib/commands/start/execute.js +26 -25
- package/lib/commands/start/execute.js.map +1 -1
- package/lib/commands/start/index.d.ts.map +1 -1
- package/lib/commands/start/index.js +4 -1
- package/lib/commands/start/index.js.map +1 -1
- package/lib/commands/start/openBrowser.d.ts +2 -0
- package/lib/commands/start/openBrowser.d.ts.map +1 -1
- package/lib/commands/start/openBrowser.js +4 -0
- package/lib/commands/start/openBrowser.js.map +1 -1
- package/lib/commands/start/types/StartOptions.d.ts +2 -2
- package/lib/commands/start/types/StartOptions.d.ts.map +1 -1
- package/lib/commands/start/types/StartOptions.js.map +1 -1
- package/lib/commands/sync/execute.d.ts.map +1 -1
- package/lib/commands/sync/execute.js +8 -21
- package/lib/commands/sync/execute.js.map +1 -1
- package/lib/commands/unlink/execute.d.ts.map +1 -1
- package/lib/commands/unlink/execute.js +1 -2
- package/lib/commands/unlink/execute.js.map +1 -1
- package/lib/types/AutoDispose.d.ts +1 -1
- package/lib/types/AutoDispose.d.ts.map +1 -1
- package/lib/types/AutoDispose.js.map +1 -1
- package/lib/types/CommandAction.d.ts +26 -18
- package/lib/types/CommandAction.d.ts.map +1 -1
- package/lib/types/CommandAction.js.map +1 -1
- package/lib/types/Disposable.d.ts +1 -1
- package/lib/types/Disposable.d.ts.map +1 -1
- package/lib/types/Disposable.js.map +1 -1
- package/lib/utilities/AutoDisposableList.d.ts +1 -1
- package/lib/utilities/AutoDisposableList.d.ts.map +1 -1
- package/lib/utilities/AutoDisposableList.js +4 -4
- package/lib/utilities/AutoDisposableList.js.map +1 -1
- package/lib/utilities/CloudpackCommand.d.ts +7 -4
- package/lib/utilities/CloudpackCommand.d.ts.map +1 -1
- package/lib/utilities/CloudpackCommand.js +7 -4
- package/lib/utilities/CloudpackCommand.js.map +1 -1
- package/lib/utilities/CommandExecutor.d.ts +16 -16
- package/lib/utilities/CommandExecutor.d.ts.map +1 -1
- package/lib/utilities/CommandExecutor.js +59 -26
- package/lib/utilities/CommandExecutor.js.map +1 -1
- package/lib/utilities/getCliStartTime.d.ts.map +1 -1
- package/lib/utilities/getCliStartTime.js +7 -3
- package/lib/utilities/getCliStartTime.js.map +1 -1
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/bundle/execute.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/bundle/execute.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,aAAa,CAmEhD,CAAC"}
|
|
@@ -5,14 +5,9 @@ import { getFilteredPackages } from '../../utilities/getFilteredPackages.js';
|
|
|
5
5
|
import { InitSummaryData } from '../init/InitSummaryData.js';
|
|
6
6
|
import { formatInitSummary } from '../init/formatInitSummary.js';
|
|
7
7
|
export const execute = async (params) => {
|
|
8
|
-
const {
|
|
9
|
-
const apiContextOptions = contexts[0];
|
|
10
|
-
const { appPath } = apiContextOptions;
|
|
8
|
+
const { appPath, options, reporter, setInterruptMessageHandler } = params;
|
|
11
9
|
console.log('Bundle mode:', yellow(options.mode));
|
|
12
|
-
const
|
|
13
|
-
...apiContextOptions,
|
|
14
|
-
items: ['packages', 'watcher', 'session', 'taskRunner', 'bus', 'packageImportPaths', 'packageHashes'],
|
|
15
|
-
}));
|
|
10
|
+
const ctx = await createPartialApiContext(params);
|
|
16
11
|
const pathsToBundle = options.match ? getFilteredPackages(ctx.session.resolveMap, options.match) : [appPath];
|
|
17
12
|
if (!pathsToBundle.length) {
|
|
18
13
|
return {
|
|
@@ -23,7 +18,7 @@ export const execute = async (params) => {
|
|
|
23
18
|
// Show completed bundle tasks so the user knows what's happening.
|
|
24
19
|
reporter.setOptions({ ...reporter.getOptions(), showCompleted: true });
|
|
25
20
|
// Use InitSummaryData for pretty formatting of errors and warnings at the end.
|
|
26
|
-
const summaryData = new InitSummaryData(appPath);
|
|
21
|
+
const summaryData = new InitSummaryData({ appPath });
|
|
27
22
|
for (const packagePath of pathsToBundle) {
|
|
28
23
|
let definition;
|
|
29
24
|
try {
|
|
@@ -57,11 +52,11 @@ export const execute = async (params) => {
|
|
|
57
52
|
});
|
|
58
53
|
}
|
|
59
54
|
}
|
|
60
|
-
setInterruptMessageHandler(() => formatInitSummary({ verb: 'bundle',
|
|
55
|
+
setInterruptMessageHandler(() => formatInitSummary({ verb: 'bundle', summary: summaryData.summarize() }));
|
|
61
56
|
const summary = summaryData.summarize();
|
|
62
57
|
return {
|
|
63
58
|
hasErrors: summary.failed,
|
|
64
|
-
message: formatInitSummary({ verb: 'bundle',
|
|
59
|
+
message: formatInitSummary({ verb: 'bundle', summary: summary }),
|
|
65
60
|
};
|
|
66
61
|
};
|
|
67
62
|
//# sourceMappingURL=execute.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/bundle/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEzF,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGjE,MAAM,CAAC,MAAM,OAAO,GAAiC,KAAK,EAAE,MAAM,EAAE,EAAE;IACpE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/bundle/execute.ts"],"names":[],"mappings":"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","sourcesContent":["import { createPartialApiContext, ensurePackageBundled } from '@ms-cloudpack/api-server';\nimport type { PackageJson } from '@ms-cloudpack/common-types';\nimport { yellow } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport type { CommandAction } from '../../types/CommandAction.js';\nimport { getFilteredPackages } from '../../utilities/getFilteredPackages.js';\nimport { InitSummaryData } from '../init/InitSummaryData.js';\nimport { formatInitSummary } from '../init/formatInitSummary.js';\nimport type { BundleOptions } from './types/BundleOptions.js';\n\nexport const execute: CommandAction<BundleOptions> = async (params) => {\n const { appPath, options, reporter, setInterruptMessageHandler } = params;\n\n console.log('Bundle mode:', yellow(options.mode));\n\n const ctx = await createPartialApiContext(params);\n\n const pathsToBundle = options.match ? getFilteredPackages(ctx.session.resolveMap, options.match) : [appPath];\n\n if (!pathsToBundle.length) {\n return {\n message: 'No matching packages found to bundle.',\n hasErrors: true,\n };\n }\n\n // Show completed bundle tasks so the user knows what's happening.\n reporter.setOptions({ ...reporter.getOptions(), showCompleted: true });\n\n // Use InitSummaryData for pretty formatting of errors and warnings at the end.\n const summaryData = new InitSummaryData({ appPath });\n\n for (const packagePath of pathsToBundle) {\n let definition: PackageJson | undefined;\n try {\n // If outdir is set, resolve relative to the package/app path.\n // Otherwise, use the default path under the cloudpack cache to stay consistent with init and start,\n // and to avoid potentially messing with the package's original output.\n const outputPath = options.outdir ? path.resolve(packagePath, options.outdir) : undefined;\n\n definition = await ctx.packages.get(packagePath);\n\n const { result } = await ensurePackageBundled({\n input: {\n name: definition.name,\n version: definition.version,\n outputPath,\n disableSourceMaps: options.disableSourceMaps,\n shouldForce: true,\n isIncremental: false,\n },\n ctx,\n });\n\n console.log('Output:', result.outputPath, '\\n');\n\n summaryData.recordResult(packagePath, result);\n } catch (err) {\n summaryData.recordException({\n packagePath,\n error: err,\n source: 'bundle',\n context: 'bundling package',\n name: definition?.name,\n version: definition?.version,\n });\n }\n }\n\n setInterruptMessageHandler(() => formatInitSummary({ verb: 'bundle', summary: summaryData.summarize() }));\n\n const summary = summaryData.summarize();\n\n return {\n hasErrors: summary.failed,\n message: formatInitSummary({ verb: 'bundle', summary: summary }),\n };\n};\n"]}
|
|
@@ -3,7 +3,7 @@ import { readYarnLock } from './readYarnLock.js';
|
|
|
3
3
|
import { processYarnLock } from './processYarnLock.js';
|
|
4
4
|
/** Executor for the "info lock-file" verb */
|
|
5
5
|
export const execute = async (params) => {
|
|
6
|
-
const { appPath: cwd } = params
|
|
6
|
+
const { appPath: cwd } = params;
|
|
7
7
|
try {
|
|
8
8
|
// This returns either the lock file contents or an error message
|
|
9
9
|
const lockResult = await readYarnLock(cwd);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,OAAO,GAAmC,KAAK,EAAE,MAAM,EAAE,EAAE;IACtE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,OAAO,GAAmC,KAAK,EAAE,MAAM,EAAE,EAAE;IACtE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAEhC,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAClD,CAAC;QAED,MAAM,gBAAgB,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QACrD,OAAO;YACL,OAAO,EAAE,qBAAqB,CAAC,gBAAgB,CAAC;SACjD,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,qCAAsC,GAAa,CAAC,KAAK,IAAI,GAAG,EAAE;YAC3E,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;AACH,CAAC,CAAC","sourcesContent":["import type { CommandAction } from '../../../types/CommandAction.js';\nimport { checkResolvedVersions } from './checkResolvedVersions.js';\nimport { readYarnLock } from './readYarnLock.js';\nimport { processYarnLock } from './processYarnLock.js';\n\ninterface LockFileOptions {}\n\n/** Executor for the \"info lock-file\" verb */\nexport const execute: CommandAction<LockFileOptions> = async (params) => {\n const { appPath: cwd } = params;\n\n try {\n // This returns either the lock file contents or an error message\n const lockResult = await readYarnLock(cwd);\n if (typeof lockResult === 'string') {\n return { message: lockResult, hasErrors: true };\n }\n\n const resolvedVersions = processYarnLock(lockResult);\n return {\n message: checkResolvedVersions(resolvedVersions),\n };\n } catch (err) {\n return {\n message: `Error getting info from lockfile: ${(err as Error).stack || err}`,\n hasErrors: true,\n };\n }\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../src/commands/info/nonSemverDeps/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGrE,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,mDAAmD;AACnD,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,oBAAoB,
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../src/commands/info/nonSemverDeps/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGrE,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,mDAAmD;AACnD,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,oBAAoB,CAavD,CAAC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { getNonSemverDeps } from './getNonSemverDeps.js';
|
|
2
2
|
/** Executor for the "info non-semver-deps" verb */
|
|
3
3
|
export const execute = async (params) => {
|
|
4
|
-
const { options,
|
|
5
|
-
const { appPath: cwd } = contexts[0];
|
|
4
|
+
const { options, appPath: cwd } = params;
|
|
6
5
|
try {
|
|
7
6
|
return {
|
|
8
7
|
message: await getNonSemverDeps({ ...options, cwd }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../src/commands/info/nonSemverDeps/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAOzD,mDAAmD;AACnD,MAAM,CAAC,MAAM,OAAO,GAAwC,KAAK,EAAE,MAAM,EAAE,EAAE;IAC3E,MAAM,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../src/commands/info/nonSemverDeps/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAOzD,mDAAmD;AACnD,MAAM,CAAC,MAAM,OAAO,GAAwC,KAAK,EAAE,MAAM,EAAE,EAAE;IAC3E,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAEzC,IAAI,CAAC;QACH,OAAO;YACL,OAAO,EAAE,MAAM,gBAAgB,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,CAAC;SACrD,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,4CAA6C,GAAa,CAAC,KAAK,IAAI,GAAG,EAAE;YAClF,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;AACH,CAAC,CAAC","sourcesContent":["import type { CommandAction } from '../../../types/CommandAction.js';\nimport { getNonSemverDeps } from './getNonSemverDeps.js';\n\nexport interface NonSemverDepsOptions {\n /** Only get production deps */\n prod?: boolean;\n}\n\n/** Executor for the \"info non-semver-deps\" verb */\nexport const execute: CommandAction<NonSemverDepsOptions> = async (params) => {\n const { options, appPath: cwd } = params;\n\n try {\n return {\n message: await getNonSemverDeps({ ...options, cwd }),\n };\n } catch (err) {\n return {\n message: `Error attempting to get non-semver deps: ${(err as Error).stack || err}`,\n hasErrors: true,\n };\n }\n};\n"]}
|
|
@@ -11,11 +11,20 @@ import type { EnsurePackageBundledResult } from '@ms-cloudpack/api-server';
|
|
|
11
11
|
* `formatInitSummary` helper to convert it to a string for the user.
|
|
12
12
|
*/
|
|
13
13
|
export declare class InitSummaryData {
|
|
14
|
+
/** Set this to indicate that the generated config was deleted. */
|
|
15
|
+
deletedGeneratedConfig: boolean;
|
|
14
16
|
private _packageResults;
|
|
15
17
|
private _generatedUpdates;
|
|
16
18
|
private _startTime;
|
|
17
19
|
private _appPath;
|
|
18
|
-
|
|
20
|
+
private _check;
|
|
21
|
+
constructor(params: Pick<InitOptions, 'check'> & {
|
|
22
|
+
appPath: string;
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* Returns whether any generated changes have been recorded.
|
|
26
|
+
*/
|
|
27
|
+
hasChanges(): boolean;
|
|
19
28
|
/**
|
|
20
29
|
* Saves a package result.
|
|
21
30
|
*/
|
|
@@ -53,6 +62,6 @@ export declare class InitSummaryData {
|
|
|
53
62
|
/**
|
|
54
63
|
* Returns the summary of the results.
|
|
55
64
|
*/
|
|
56
|
-
summarize(
|
|
65
|
+
summarize(): InitSummary;
|
|
57
66
|
}
|
|
58
67
|
//# sourceMappingURL=InitSummaryData.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InitSummaryData.d.ts","sourceRoot":"","sources":["../../../src/commands/init/InitSummaryData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,KAAK,EACV,iBAAiB,EAGlB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAE3E;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,iBAAiB,CAA0C;IACnE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;
|
|
1
|
+
{"version":3,"file":"InitSummaryData.d.ts","sourceRoot":"","sources":["../../../src/commands/init/InitSummaryData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,KAAK,EACV,iBAAiB,EAGlB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAE3E;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,kEAAkE;IAC3D,sBAAsB,UAAS;IAEtC,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,iBAAiB,CAA0C;IACnE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAU;gBAGtB,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG;QACnC,OAAO,EAAE,MAAM,CAAC;KACjB;IASH;;OAEG;IACI,UAAU,IAAI,OAAO;IAI5B;;OAEG;IACI,YAAY,CACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,IAAI,CAAC,0BAA0B,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC,GAC3G,IAAI;IAYP;;;;OAIG;IACI,eAAe,CAAC,MAAM,EAAE;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,0FAA0F;QAC1F,OAAO,EAAE,MAAM,CAAC;QAChB,4EAA4E;QAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,+EAA+E;QAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;IAUR;;OAEG;IACI,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IASpE;;;OAGG;IACI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAItD;;;OAGG;IACI,sBAAsB,CAAC,UAAU,EAAE,uBAAuB,EAAE,GAAG,IAAI;IAY1E;;OAEG;IACI,SAAS,IAAI,WAAW;CAgDhC"}
|
|
@@ -6,11 +6,20 @@ import { requiredChangeTypes } from './types/GeneratedChange.js';
|
|
|
6
6
|
* `formatInitSummary` helper to convert it to a string for the user.
|
|
7
7
|
*/
|
|
8
8
|
export class InitSummaryData {
|
|
9
|
-
constructor(
|
|
9
|
+
constructor(params) {
|
|
10
|
+
/** Set this to indicate that the generated config was deleted. */
|
|
11
|
+
this.deletedGeneratedConfig = false;
|
|
10
12
|
this._packageResults = {};
|
|
11
13
|
this._generatedUpdates = {};
|
|
12
14
|
this._startTime = Date.now();
|
|
13
|
-
this._appPath = appPath;
|
|
15
|
+
this._appPath = params.appPath;
|
|
16
|
+
this._check = !!params.check;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Returns whether any generated changes have been recorded.
|
|
20
|
+
*/
|
|
21
|
+
hasChanges() {
|
|
22
|
+
return Object.values(this._generatedUpdates).length > 0;
|
|
14
23
|
}
|
|
15
24
|
/**
|
|
16
25
|
* Saves a package result.
|
|
@@ -63,14 +72,17 @@ export class InitSummaryData {
|
|
|
63
72
|
recordGeneratedChanges(allChanges) {
|
|
64
73
|
for (const update of allChanges) {
|
|
65
74
|
const { name, version, path, changes } = update;
|
|
66
|
-
|
|
67
|
-
|
|
75
|
+
// Only record changes if there are any, so that hasChanges() is accurate.
|
|
76
|
+
if (changes.length) {
|
|
77
|
+
const updatesForPackage = (this._generatedUpdates[path] ??= { name, version, path, changes: [] });
|
|
78
|
+
updatesForPackage.changes.push(...changes);
|
|
79
|
+
}
|
|
68
80
|
}
|
|
69
81
|
}
|
|
70
82
|
/**
|
|
71
83
|
* Returns the summary of the results.
|
|
72
84
|
*/
|
|
73
|
-
summarize(
|
|
85
|
+
summarize() {
|
|
74
86
|
const duration = Date.now() - this._startTime;
|
|
75
87
|
let totalSuccess = 0;
|
|
76
88
|
let totalErrors = 0;
|
|
@@ -107,10 +119,11 @@ export class InitSummaryData {
|
|
|
107
119
|
totalWarnings,
|
|
108
120
|
totalChanges,
|
|
109
121
|
totalRequiredChanges,
|
|
110
|
-
failed: totalErrors > 0 || (
|
|
122
|
+
failed: totalErrors > 0 || (this._check && totalRequiredChanges > 0),
|
|
111
123
|
packagesWithErrors,
|
|
112
124
|
packagesWithWarnings,
|
|
113
125
|
generatedFileUpdates: sortedUpdates,
|
|
126
|
+
deletedGeneratedConfig: this.deletedGeneratedConfig,
|
|
114
127
|
};
|
|
115
128
|
}
|
|
116
129
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InitSummaryData.js","sourceRoot":"","sources":["../../../src/commands/init/InitSummaryData.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InitSummary } from './types/InitSummary.js';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport type {\n InitPackageResult,\n InitPackageResultErrors,\n InitPackageResultWarnings,\n} from './types/InitPackageResult.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { BundleMessage } from '@ms-cloudpack/common-types';\nimport { requiredChangeTypes } from './types/GeneratedChange.js';\nimport type { EnsurePackageBundledResult } from '@ms-cloudpack/api-server';\n\n/**\n * Creates a summary tracking helper for the `init` verb to use to record statistics about results and needed\n * changes. The `record*` methods of the returned object will be used within init to add the stats, and the\n * `summarize` method will return the final tally. The resulting `InitSummary` object can be used in the\n * `formatInitSummary` helper to convert it to a string for the user.\n */\nexport class InitSummaryData {\n private _packageResults: Record<string, InitPackageResult>;\n private _generatedUpdates: Record<string, GeneratedPackageChanges>;\n private _startTime: number;\n private _appPath: string;\n\n constructor(appPath: string) {\n this._packageResults = {};\n this._generatedUpdates = {};\n this._startTime = Date.now();\n this._appPath = appPath;\n }\n\n /**\n * Saves a package result.\n */\n public recordResult(\n packagePath: string,\n result: Pick<EnsurePackageBundledResult, 'name' | 'version' | 'info' | 'outputPath' | 'errors' | 'warnings'>,\n ): void {\n this._packageResults[packagePath] = {\n path: packagePath,\n name: result.name,\n version: result.version,\n info: result.info,\n outputPath: result.outputPath,\n errors: result.errors,\n warnings: result.warnings,\n };\n }\n\n /**\n * Record an exception for a given package path.\n * This creates a bundle message like \"Error thrown while (context): (error)\".\n * (Unlike `addErrors`, this will create an overall package result if one doesn't exist yet.)\n */\n public recordException(params: {\n packagePath: string;\n error: unknown;\n source: string;\n /** Description of the context in which the error was thrown, e.g. \"evaluating package\" */\n context: string;\n /** Package name in case no result has been recorded for this package yet */\n name?: string;\n /** Package version in case no result has been recorded for this package yet */\n version?: string;\n }): void {\n const { packagePath, error, source, context, name = '<unknown>', version = '<unknown>' } = params;\n if (!this._packageResults[packagePath]) {\n this.recordResult(packagePath, { name, version });\n }\n\n const text = `Error thrown while ${context}: ${(error as Error).stack || error}`;\n this.addErrors(packagePath, [{ text, source }]);\n }\n\n /**\n * Record more errors for a given package path.\n */\n public addErrors(packagePath: string, errors: BundleMessage[]): void {\n const packageResult = this._packageResults[packagePath];\n if (!packageResult) {\n throw new Error(`Package result not found for path ${packagePath}`);\n }\n\n packageResult.errors = [...(packageResult.errors || []), ...errors];\n }\n\n /**\n * Returns the package results.\n * @returns The package results.\n */\n public getResults(): Record<string, InitPackageResult> {\n return this._packageResults;\n }\n\n /**\n * Saves a generated file update.\n * @param allChanges - The generated file update to save.\n */\n public recordGeneratedChanges(allChanges: GeneratedPackageChanges[]): void {\n for (const update of allChanges) {\n const { name, version, path, changes } = update;\n const updatesForPackage = (this._generatedUpdates[path] ??= { name, version, path, changes: [] });\n\n updatesForPackage.changes.push(...changes);\n }\n }\n\n /**\n * Returns the summary of the results.\n */\n public summarize(options?: Pick<InitOptions, 'check'>): InitSummary {\n const duration = Date.now() - this._startTime;\n let totalSuccess = 0;\n let totalErrors = 0;\n let totalWarnings = 0;\n let totalChanges = 0;\n let totalRequiredChanges = 0;\n const packagesWithErrors: InitPackageResultErrors[] = [];\n const packagesWithWarnings: InitPackageResultWarnings[] = [];\n\n for (const packageResult of Object.values(this._packageResults)) {\n if (packageResult.errors?.length) {\n packagesWithErrors.push(packageResult as InitPackageResultErrors);\n totalErrors += packageResult.errors.length;\n } else {\n totalSuccess++;\n }\n\n if (packageResult.warnings?.length) {\n packagesWithWarnings.push(packageResult as InitPackageResultWarnings);\n totalWarnings += packageResult.warnings.length;\n }\n }\n\n const sortedUpdates = Object.values(this._generatedUpdates).sort((a, b) => a.path.localeCompare(b.path));\n\n for (const updates of sortedUpdates) {\n totalChanges += updates.changes.length;\n totalRequiredChanges += updates.changes.filter((u) => requiredChangeTypes[u.type]).length;\n updates.changes = updates.changes.sort((a, b) => a.change.localeCompare(b.change));\n }\n\n return {\n appPath: this._appPath,\n duration,\n totalPackages: Object.keys(this._packageResults).length,\n totalSuccess,\n totalErrors,\n totalWarnings,\n totalChanges,\n totalRequiredChanges,\n failed: totalErrors > 0 || (!!options?.check && totalRequiredChanges > 0),\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates: sortedUpdates,\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"InitSummaryData.js","sourceRoot":"","sources":["../../../src/commands/init/InitSummaryData.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InitSummary } from './types/InitSummary.js';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport type {\n InitPackageResult,\n InitPackageResultErrors,\n InitPackageResultWarnings,\n} from './types/InitPackageResult.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { BundleMessage } from '@ms-cloudpack/common-types';\nimport { requiredChangeTypes } from './types/GeneratedChange.js';\nimport type { EnsurePackageBundledResult } from '@ms-cloudpack/api-server';\n\n/**\n * Creates a summary tracking helper for the `init` verb to use to record statistics about results and needed\n * changes. The `record*` methods of the returned object will be used within init to add the stats, and the\n * `summarize` method will return the final tally. The resulting `InitSummary` object can be used in the\n * `formatInitSummary` helper to convert it to a string for the user.\n */\nexport class InitSummaryData {\n /** Set this to indicate that the generated config was deleted. */\n public deletedGeneratedConfig = false;\n\n private _packageResults: Record<string, InitPackageResult>;\n private _generatedUpdates: Record<string, GeneratedPackageChanges>;\n private _startTime: number;\n private _appPath: string;\n private _check: boolean;\n\n constructor(\n params: Pick<InitOptions, 'check'> & {\n appPath: string;\n },\n ) {\n this._packageResults = {};\n this._generatedUpdates = {};\n this._startTime = Date.now();\n this._appPath = params.appPath;\n this._check = !!params.check;\n }\n\n /**\n * Returns whether any generated changes have been recorded.\n */\n public hasChanges(): boolean {\n return Object.values(this._generatedUpdates).length > 0;\n }\n\n /**\n * Saves a package result.\n */\n public recordResult(\n packagePath: string,\n result: Pick<EnsurePackageBundledResult, 'name' | 'version' | 'info' | 'outputPath' | 'errors' | 'warnings'>,\n ): void {\n this._packageResults[packagePath] = {\n path: packagePath,\n name: result.name,\n version: result.version,\n info: result.info,\n outputPath: result.outputPath,\n errors: result.errors,\n warnings: result.warnings,\n };\n }\n\n /**\n * Record an exception for a given package path.\n * This creates a bundle message like \"Error thrown while (context): (error)\".\n * (Unlike `addErrors`, this will create an overall package result if one doesn't exist yet.)\n */\n public recordException(params: {\n packagePath: string;\n error: unknown;\n source: string;\n /** Description of the context in which the error was thrown, e.g. \"evaluating package\" */\n context: string;\n /** Package name in case no result has been recorded for this package yet */\n name?: string;\n /** Package version in case no result has been recorded for this package yet */\n version?: string;\n }): void {\n const { packagePath, error, source, context, name = '<unknown>', version = '<unknown>' } = params;\n if (!this._packageResults[packagePath]) {\n this.recordResult(packagePath, { name, version });\n }\n\n const text = `Error thrown while ${context}: ${(error as Error).stack || error}`;\n this.addErrors(packagePath, [{ text, source }]);\n }\n\n /**\n * Record more errors for a given package path.\n */\n public addErrors(packagePath: string, errors: BundleMessage[]): void {\n const packageResult = this._packageResults[packagePath];\n if (!packageResult) {\n throw new Error(`Package result not found for path ${packagePath}`);\n }\n\n packageResult.errors = [...(packageResult.errors || []), ...errors];\n }\n\n /**\n * Returns the package results.\n * @returns The package results.\n */\n public getResults(): Record<string, InitPackageResult> {\n return this._packageResults;\n }\n\n /**\n * Saves a generated file update.\n * @param allChanges - The generated file update to save.\n */\n public recordGeneratedChanges(allChanges: GeneratedPackageChanges[]): void {\n for (const update of allChanges) {\n const { name, version, path, changes } = update;\n // Only record changes if there are any, so that hasChanges() is accurate.\n if (changes.length) {\n const updatesForPackage = (this._generatedUpdates[path] ??= { name, version, path, changes: [] });\n\n updatesForPackage.changes.push(...changes);\n }\n }\n }\n\n /**\n * Returns the summary of the results.\n */\n public summarize(): InitSummary {\n const duration = Date.now() - this._startTime;\n let totalSuccess = 0;\n let totalErrors = 0;\n let totalWarnings = 0;\n let totalChanges = 0;\n let totalRequiredChanges = 0;\n const packagesWithErrors: InitPackageResultErrors[] = [];\n const packagesWithWarnings: InitPackageResultWarnings[] = [];\n\n for (const packageResult of Object.values(this._packageResults)) {\n if (packageResult.errors?.length) {\n packagesWithErrors.push(packageResult as InitPackageResultErrors);\n totalErrors += packageResult.errors.length;\n } else {\n totalSuccess++;\n }\n\n if (packageResult.warnings?.length) {\n packagesWithWarnings.push(packageResult as InitPackageResultWarnings);\n totalWarnings += packageResult.warnings.length;\n }\n }\n\n const sortedUpdates = Object.values(this._generatedUpdates).sort((a, b) => a.path.localeCompare(b.path));\n\n for (const updates of sortedUpdates) {\n totalChanges += updates.changes.length;\n totalRequiredChanges += updates.changes.filter((u) => requiredChangeTypes[u.type]).length;\n updates.changes = updates.changes.sort((a, b) => a.change.localeCompare(b.change));\n }\n\n return {\n appPath: this._appPath,\n duration,\n totalPackages: Object.keys(this._packageResults).length,\n totalSuccess,\n totalErrors,\n totalWarnings,\n totalChanges,\n totalRequiredChanges,\n failed: totalErrors > 0 || (this._check && totalRequiredChanges > 0),\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates: sortedUpdates,\n deletedGeneratedConfig: this.deletedGeneratedConfig,\n };\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/init/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/init/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,8BAA8B,CAAC;AAKrF,wFAAwF;AACxF,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,WAAW,CAsB9C,CAAC"}
|
|
@@ -3,18 +3,21 @@ import { formatInitSummary } from './formatInitSummary.js';
|
|
|
3
3
|
import { InitSummaryData } from './InitSummaryData.js';
|
|
4
4
|
/** Given the path, updates the Cloudpack config with overrides and project settings. */
|
|
5
5
|
export const execute = async (params) => {
|
|
6
|
-
const {
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
const { appPath, isMultiApp, options, setInterruptMessageHandler } = params;
|
|
7
|
+
const summaryData = new InitSummaryData({ appPath, check: options.check });
|
|
8
|
+
const formatResult = (isInterrupted) => {
|
|
9
|
+
const summary = summaryData.summarize();
|
|
10
|
+
const message = formatInitSummary({
|
|
11
|
+
summary,
|
|
12
|
+
isInterrupted,
|
|
13
|
+
check: options.check,
|
|
14
|
+
isMultiApp,
|
|
15
|
+
verb: 'init',
|
|
16
|
+
});
|
|
17
|
+
return { message, hasErrors: summary.failed, isInterrupted };
|
|
18
18
|
};
|
|
19
|
+
setInterruptMessageHandler(() => formatResult(true).message);
|
|
20
|
+
await init({ summaryData, ...params });
|
|
21
|
+
return formatResult();
|
|
19
22
|
};
|
|
20
23
|
//# sourceMappingURL=execute.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/init/execute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,wFAAwF;AACxF,MAAM,CAAC,MAAM,OAAO,GAA+B,KAAK,EAAE,MAAM,EAAE,EAAE;IAClE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/init/execute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,wFAAwF;AACxF,MAAM,CAAC,MAAM,OAAO,GAA+B,KAAK,EAAE,MAAM,EAAE,EAAE;IAClE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,0BAA0B,EAAE,GAAG,MAAM,CAAC;IAE5E,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAE3E,MAAM,YAAY,GAAG,CAAC,aAAuB,EAAqB,EAAE;QAClE,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,iBAAiB,CAAC;YAChC,OAAO;YACP,aAAa;YACb,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU;YACV,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IAC/D,CAAC,CAAC;IAEF,0BAA0B,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;IAE7D,MAAM,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IAEvC,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC,CAAC","sourcesContent":["import type { InitOptions } from './types/InitOptions.js';\nimport type { CommandAction, CommandExitParams } from '../../types/CommandAction.js';\nimport { init } from './init.js';\nimport { formatInitSummary } from './formatInitSummary.js';\nimport { InitSummaryData } from './InitSummaryData.js';\n\n/** Given the path, updates the Cloudpack config with overrides and project settings. */\nexport const execute: CommandAction<InitOptions> = async (params) => {\n const { appPath, isMultiApp, options, setInterruptMessageHandler } = params;\n\n const summaryData = new InitSummaryData({ appPath, check: options.check });\n\n const formatResult = (isInterrupted?: boolean): CommandExitParams => {\n const summary = summaryData.summarize();\n const message = formatInitSummary({\n summary,\n isInterrupted,\n check: options.check,\n isMultiApp,\n verb: 'init',\n });\n return { message, hasErrors: summary.failed, isInterrupted };\n };\n\n setInterruptMessageHandler(() => formatResult(true).message);\n\n await init({ summaryData, ...params });\n\n return formatResult();\n};\n"]}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import type { InitOptions } from './types/InitOptions.js';
|
|
2
2
|
import type { InitSummary } from './types/InitSummary.js';
|
|
3
|
-
interface
|
|
4
|
-
|
|
3
|
+
interface FormatSummaryParams extends Pick<InitOptions, 'check'> {
|
|
4
|
+
summary: InitSummary;
|
|
5
|
+
isMultiApp?: boolean;
|
|
5
6
|
verb: 'init' | 'bundle';
|
|
6
7
|
isInterrupted?: boolean;
|
|
7
8
|
}
|
|
8
9
|
/**
|
|
9
|
-
* Given
|
|
10
|
-
*
|
|
11
|
-
* TODO rename to formatSummary
|
|
10
|
+
* Given a summary and options, returns a formatted string message to display to the user via console.
|
|
12
11
|
*/
|
|
13
|
-
export declare function formatInitSummary(params:
|
|
12
|
+
export declare function formatInitSummary(params: FormatSummaryParams): string;
|
|
14
13
|
export {};
|
|
15
14
|
//# sourceMappingURL=formatInitSummary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatInitSummary.d.ts","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,UAAU,
|
|
1
|
+
{"version":3,"file":"formatInitSummary.d.ts","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,UAAU,mBAAoB,SAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9D,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAwFrE"}
|
|
@@ -1,21 +1,9 @@
|
|
|
1
1
|
import { bold, bulletedList, cyan, formatTime, green, grey, indent, lightCyan, plural, red, prefixCharacters, yellow, } from '@ms-cloudpack/task-reporter';
|
|
2
2
|
import { formatLocation } from '@ms-cloudpack/path-utilities';
|
|
3
3
|
/**
|
|
4
|
-
* Given
|
|
5
|
-
*
|
|
6
|
-
* TODO rename to formatSummary
|
|
4
|
+
* Given a summary and options, returns a formatted string message to display to the user via console.
|
|
7
5
|
*/
|
|
8
6
|
export function formatInitSummary(params) {
|
|
9
|
-
const { summaries, ...otherParams } = params;
|
|
10
|
-
const isMultiApp = summaries.length > 1;
|
|
11
|
-
return (summaries
|
|
12
|
-
.map((summary) => formatAppSummary({ summary, ...otherParams, isMultiApp }))
|
|
13
|
-
.join('\n')
|
|
14
|
-
// replace >= 3 newlines with 2 newlines
|
|
15
|
-
.replace(/\n{3,}/g, '\n\n'));
|
|
16
|
-
}
|
|
17
|
-
/** Format a single app's init summary. */
|
|
18
|
-
function formatAppSummary(params) {
|
|
19
7
|
const { summary, check, isInterrupted, isMultiApp, verb } = params;
|
|
20
8
|
const summaryString = [];
|
|
21
9
|
const { totalPackages, totalErrors, totalWarnings, totalChanges, totalRequiredChanges, packagesWithErrors, packagesWithWarnings, generatedFileUpdates, deletedGeneratedConfig, } = summary;
|
|
@@ -66,7 +54,10 @@ function formatAppSummary(params) {
|
|
|
66
54
|
summaryString.push(`Run "${yellow('cloudpack init')}" in your application folder to apply changes to the ${cyan('cloudpack.generated.json')} file.`);
|
|
67
55
|
}
|
|
68
56
|
summaryString.push('\n');
|
|
69
|
-
return summaryString
|
|
57
|
+
return (summaryString
|
|
58
|
+
.join('\n')
|
|
59
|
+
// replace >= 3 newlines with 2 newlines
|
|
60
|
+
.replace(/\n{3,}/g, '\n\n'));
|
|
70
61
|
}
|
|
71
62
|
/**
|
|
72
63
|
* If `count` is positive, returns a pluralized formatted string like "5 items description"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatInitSummary.js","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n bold,\n bulletedList,\n cyan,\n formatTime,\n green,\n grey,\n indent,\n lightCyan,\n plural,\n red,\n prefixCharacters,\n yellow,\n} from '@ms-cloudpack/task-reporter';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\nimport type { InitSummary } from './types/InitSummary.js';\nimport { formatLocation } from '@ms-cloudpack/path-utilities';\nimport type { RequiredGeneratedChangeType } from './types/GeneratedChange.js';\n\ninterface FormatInitSummaryParams extends Pick<InitOptions, 'check'> {\n summaries: InitSummary[];\n verb: 'init' | 'bundle';\n isInterrupted?: boolean;\n}\n\ninterface FormatAppSummaryParams extends Omit<FormatInitSummaryParams, 'summaries'> {\n summary: InitSummary;\n isMultiApp: boolean;\n}\n\ninterface FormatAppSummaryParams extends Omit<FormatInitSummaryParams, 'summaries'> {\n summary: InitSummary;\n isMultiApp: boolean;\n}\n\n/**\n * Given summaries and options, returns a formatted string message to display to the user via console.\n *\n * TODO rename to formatSummary\n */\nexport function formatInitSummary(params: FormatInitSummaryParams): string {\n const { summaries, ...otherParams } = params;\n const isMultiApp = summaries.length > 1;\n return (\n summaries\n .map((summary) => formatAppSummary({ summary, ...otherParams, isMultiApp }))\n .join('\\n')\n // replace >= 3 newlines with 2 newlines\n .replace(/\\n{3,}/g, '\\n\\n')\n );\n}\n\n/** Format a single app's init summary. */\nfunction formatAppSummary(params: FormatAppSummaryParams): string {\n const { summary, check, isInterrupted, isMultiApp, verb } = params;\n const summaryString: string[] = [];\n\n const {\n totalPackages,\n totalErrors,\n totalWarnings,\n totalChanges,\n totalRequiredChanges,\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates,\n deletedGeneratedConfig,\n } = summary;\n const incompleteText = isInterrupted ? bold(` (incomplete)`) : ``;\n\n // Report the \"Summary\" title if no errors or warnings are listed (seems redundant otherwise).\n if ((!packagesWithErrors.length && !packagesWithWarnings.length) || isMultiApp) {\n summaryString.push(bold(`==== Summary for ${summary.appPath}${incompleteText} ====`));\n }\n\n // If there are required changes, updates will be \"made\" or \"needed\" with check,\n // else if the changes are not required, only report work done when updates are \"made\" (check is disabled).\n const updatesRequired = totalRequiredChanges || (totalChanges && !check);\n\n // Report updates that were or should be added to the generated config.\n if (!packagesWithErrors.length && updatesRequired) {\n summaryString.push(formatPackageUpdates({ generatedFileUpdates, check }));\n }\n\n if (!isMultiApp) {\n // Report packages with warnings.\n if (packagesWithWarnings.length) {\n summaryString.push(formatPackageResults({ results: packagesWithWarnings, issueType: 'warn' }), '');\n }\n }\n\n // Report packages with errors.\n if (packagesWithErrors.length) {\n summaryString.push(formatPackageResults({ results: packagesWithErrors, issueType: 'error' }), '');\n }\n\n if (deletedGeneratedConfig) {\n summaryString.push(`Deleted the ${cyan('cloudpack.generated.json')} file because it is no longer needed.`, '');\n }\n\n const actualRequiredChanges = check ? totalRequiredChanges : 0;\n\n if (totalPackages > 1 || verb === 'init') {\n const action = verb === 'init' ? 'evaluated' : 'bundled';\n const errorPkgCount = packagesWithErrors.length;\n const succesPkgCount = totalPackages - errorPkgCount;\n const pkgWarningsMessage = packagesWithWarnings.length\n ? ` (${formatCount(packagesWithWarnings.length, 'package', 'with warnings', yellow)})`\n : '';\n\n summaryString.push(\n `${cyan(plural(totalPackages, 'total package'))} ${action} in ${formatTime(summary.duration)}${incompleteText}:`,\n bulletedList(\n [\n formatCount(actualRequiredChanges, 'change', 'required', red),\n formatCount(succesPkgCount, 'package', `${action} successfully${pkgWarningsMessage}`, green),\n formatCount(errorPkgCount, 'package', 'failed', red),\n `Totals: ${formatTotal(totalErrors, 'error', red)}, ${formatTotal(totalWarnings, 'warning', yellow)}`,\n ].filter(Boolean),\n ),\n );\n }\n\n if (isInterrupted) {\n summaryString.push('', yellow(bold('Process was interrupted before all tasks could complete.')));\n } else if (actualRequiredChanges) {\n summaryString.push(\n `Run \"${yellow('cloudpack init')}\" in your application folder to apply changes to the ${cyan(\n 'cloudpack.generated.json',\n )} file.`,\n );\n }\n\n summaryString.push('\\n');\n\n return summaryString.join('\\n');\n}\n\n/**\n * If `count` is positive, returns a pluralized formatted string like \"5 items description\"\n * (otherwise return undefined). The \"5 items\" part is formatted with `color`.\n */\nfunction formatCount(\n count: number,\n item: string,\n description: string,\n color: (str: string) => string,\n): string | undefined {\n return count > 0 ? `${color(plural(count, item))} ${description}` : undefined;\n}\n\n/**\n * Format a total (e.g. \"5 items\"). The color is only used if the total is non-zero.\n */\nfunction formatTotal(total: number, item: string, color: (str: string) => string): string {\n const pluralStr = plural(total, item);\n return total ? color(pluralStr) : pluralStr;\n}\n\nfunction formatPackageUpdates(\n params: Pick<InitSummary, 'generatedFileUpdates'> & Pick<FormatAppSummaryParams, 'isInterrupted' | 'check'>,\n): string {\n const { generatedFileUpdates, check, isInterrupted } = params;\n\n const descriptions: Record<RequiredGeneratedChangeType, string> = {\n 'added-export': `path$s ${check ? 'missing from' : 'added to'} exports map`,\n 'included-dependency-required': 'dependency$s required to be included',\n 'changed-export': 'previously unused export path$s are now used',\n 'added-dynamic-import': 'dynamic import$s added',\n };\n\n const summaryString: string[] = [];\n\n for (const packageUpdates of generatedFileUpdates) {\n for (const type of Object.keys(descriptions) as RequiredGeneratedChangeType[]) {\n const typeUpdates = packageUpdates.changes.filter((u) => u.type === type);\n\n if (typeUpdates.length) {\n const description = plural(typeUpdates.length, descriptions[type]);\n // If we already made the updates, don't make them look like warnings.\n const issueType = check ? 'warn' : 'add';\n summaryString.push(\n formatPackageHeader({ ...packageUpdates, issueType, description }),\n bulletedList(typeUpdates.map((u) => `${cyan(u.change)}${u.reason ? ` - ${u.reason}` : ''}`)),\n '',\n );\n }\n }\n }\n\n if (summaryString.length) {\n summaryString.unshift(\n bold(`Updates ${check || isInterrupted ? 'needed for' : 'made to'} ${cyan(`cloudpack.generated.json`)}:\\n`),\n );\n }\n return summaryString.join('\\n');\n}\n\n/** Helper to format `packagesWithWarnings` or `packagesWithErrors`. */\nfunction formatPackageResults(params: { results: InitPackageResult[]; issueType: 'error' | 'warn' }): string {\n const { results, issueType } = params;\n if (!results.length) {\n return '';\n }\n\n const color = colorsByType[issueType];\n const messageType = issueType === 'error' ? 'errors' : 'warnings';\n const statusChar = bold(color(prefixCharacters[issueType]));\n\n const summaryString = [bold(color(`${plural(results.length, 'package')} with ${messageType}:`)), ''];\n\n for (const result of results) {\n const unformattedMessages = result[messageType];\n if (!unformattedMessages?.length) {\n continue;\n }\n\n const description = plural(unformattedMessages.length, messageType.slice(0, -1) + '$s');\n summaryString.push(formatPackageHeader({ ...result, issueType, description }));\n\n const messages = unformattedMessages.map(({ location, text, source }) => {\n // Show the whole path so it can be easily opened with ctrl+click.\n // NOTE: location.file should be relative to the package path, not the app path.\n const filePath = location ? ` ${formatLocation({ ...location, fromPath: result.path })}` : '';\n // Indent the message for readability.\n return `[${source}]${filePath}\\n${color(indent(text, 1))}`;\n });\n\n summaryString.push(bulletedList(messages, undefined, statusChar), '');\n }\n\n return summaryString.join('\\n');\n}\n\nconst colorsByType = {\n error: red,\n warn: yellow,\n add: (str: string) => str,\n};\nconst statusByType = {\n error: prefixCharacters.error,\n warn: prefixCharacters.warn,\n add: '+',\n};\n\n/**\n * Helper to format the header for a list of issues in a package:\n * status character, `name@version`, issue description, package path.\n */\nfunction formatPackageHeader(\n params: InitPackageResult & {\n description: string;\n issueType: 'error' | 'warn' | 'add';\n },\n): string {\n const { name, version, path: packagePath, outputPath, description, issueType } = params;\n const color = colorsByType[issueType];\n const statusChar = bold(color(statusByType[issueType]));\n const packageName = bold(lightCyan(`${name}@${version || `<unknown>`}`));\n\n return (\n `${packageName} - ${packagePath}\\n` +\n (outputPath ? grey(`(output: ${outputPath})\\n`) : '') +\n `${statusChar} ${bold(color(description))}`\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"formatInitSummary.js","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n bold,\n bulletedList,\n cyan,\n formatTime,\n green,\n grey,\n indent,\n lightCyan,\n plural,\n red,\n prefixCharacters,\n yellow,\n} from '@ms-cloudpack/task-reporter';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\nimport type { InitSummary } from './types/InitSummary.js';\nimport { formatLocation } from '@ms-cloudpack/path-utilities';\nimport type { RequiredGeneratedChangeType } from './types/GeneratedChange.js';\n\ninterface FormatSummaryParams extends Pick<InitOptions, 'check'> {\n summary: InitSummary;\n isMultiApp?: boolean;\n verb: 'init' | 'bundle';\n isInterrupted?: boolean;\n}\n\n/**\n * Given a summary and options, returns a formatted string message to display to the user via console.\n */\nexport function formatInitSummary(params: FormatSummaryParams): string {\n const { summary, check, isInterrupted, isMultiApp, verb } = params;\n const summaryString: string[] = [];\n\n const {\n totalPackages,\n totalErrors,\n totalWarnings,\n totalChanges,\n totalRequiredChanges,\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates,\n deletedGeneratedConfig,\n } = summary;\n const incompleteText = isInterrupted ? bold(` (incomplete)`) : ``;\n\n // Report the \"Summary\" title if no errors or warnings are listed (seems redundant otherwise).\n if ((!packagesWithErrors.length && !packagesWithWarnings.length) || isMultiApp) {\n summaryString.push(bold(`==== Summary for ${summary.appPath}${incompleteText} ====`));\n }\n\n // If there are required changes, updates will be \"made\" or \"needed\" with check,\n // else if the changes are not required, only report work done when updates are \"made\" (check is disabled).\n const updatesRequired = totalRequiredChanges || (totalChanges && !check);\n\n // Report updates that were or should be added to the generated config.\n if (!packagesWithErrors.length && updatesRequired) {\n summaryString.push(formatPackageUpdates({ generatedFileUpdates, check }));\n }\n\n if (!isMultiApp) {\n // Report packages with warnings.\n if (packagesWithWarnings.length) {\n summaryString.push(formatPackageResults({ results: packagesWithWarnings, issueType: 'warn' }), '');\n }\n }\n\n // Report packages with errors.\n if (packagesWithErrors.length) {\n summaryString.push(formatPackageResults({ results: packagesWithErrors, issueType: 'error' }), '');\n }\n\n if (deletedGeneratedConfig) {\n summaryString.push(`Deleted the ${cyan('cloudpack.generated.json')} file because it is no longer needed.`, '');\n }\n\n const actualRequiredChanges = check ? totalRequiredChanges : 0;\n\n if (totalPackages > 1 || verb === 'init') {\n const action = verb === 'init' ? 'evaluated' : 'bundled';\n const errorPkgCount = packagesWithErrors.length;\n const succesPkgCount = totalPackages - errorPkgCount;\n const pkgWarningsMessage = packagesWithWarnings.length\n ? ` (${formatCount(packagesWithWarnings.length, 'package', 'with warnings', yellow)})`\n : '';\n\n summaryString.push(\n `${cyan(plural(totalPackages, 'total package'))} ${action} in ${formatTime(summary.duration)}${incompleteText}:`,\n bulletedList(\n [\n formatCount(actualRequiredChanges, 'change', 'required', red),\n formatCount(succesPkgCount, 'package', `${action} successfully${pkgWarningsMessage}`, green),\n formatCount(errorPkgCount, 'package', 'failed', red),\n `Totals: ${formatTotal(totalErrors, 'error', red)}, ${formatTotal(totalWarnings, 'warning', yellow)}`,\n ].filter(Boolean),\n ),\n );\n }\n\n if (isInterrupted) {\n summaryString.push('', yellow(bold('Process was interrupted before all tasks could complete.')));\n } else if (actualRequiredChanges) {\n summaryString.push(\n `Run \"${yellow('cloudpack init')}\" in your application folder to apply changes to the ${cyan(\n 'cloudpack.generated.json',\n )} file.`,\n );\n }\n\n summaryString.push('\\n');\n\n return (\n summaryString\n .join('\\n')\n // replace >= 3 newlines with 2 newlines\n .replace(/\\n{3,}/g, '\\n\\n')\n );\n}\n\n/**\n * If `count` is positive, returns a pluralized formatted string like \"5 items description\"\n * (otherwise return undefined). The \"5 items\" part is formatted with `color`.\n */\nfunction formatCount(\n count: number,\n item: string,\n description: string,\n color: (str: string) => string,\n): string | undefined {\n return count > 0 ? `${color(plural(count, item))} ${description}` : undefined;\n}\n\n/**\n * Format a total (e.g. \"5 items\"). The color is only used if the total is non-zero.\n */\nfunction formatTotal(total: number, item: string, color: (str: string) => string): string {\n const pluralStr = plural(total, item);\n return total ? color(pluralStr) : pluralStr;\n}\n\nfunction formatPackageUpdates(\n params: Pick<InitSummary, 'generatedFileUpdates'> & Pick<FormatSummaryParams, 'isInterrupted' | 'check'>,\n): string {\n const { generatedFileUpdates, check, isInterrupted } = params;\n\n const descriptions: Record<RequiredGeneratedChangeType, string> = {\n 'added-export': `path$s ${check ? 'missing from' : 'added to'} exports map`,\n 'included-dependency-required': 'dependency$s required to be included',\n 'changed-export': 'previously unused export path$s are now used',\n 'added-dynamic-import': 'dynamic import$s added',\n };\n\n const summaryString: string[] = [];\n\n for (const packageUpdates of generatedFileUpdates) {\n for (const type of Object.keys(descriptions) as RequiredGeneratedChangeType[]) {\n const typeUpdates = packageUpdates.changes.filter((u) => u.type === type);\n\n if (typeUpdates.length) {\n const description = plural(typeUpdates.length, descriptions[type]);\n // If we already made the updates, don't make them look like warnings.\n const issueType = check ? 'warn' : 'add';\n summaryString.push(\n formatPackageHeader({ ...packageUpdates, issueType, description }),\n bulletedList(typeUpdates.map((u) => `${cyan(u.change)}${u.reason ? ` - ${u.reason}` : ''}`)),\n '',\n );\n }\n }\n }\n\n if (summaryString.length) {\n summaryString.unshift(\n bold(`Updates ${check || isInterrupted ? 'needed for' : 'made to'} ${cyan(`cloudpack.generated.json`)}:\\n`),\n );\n }\n return summaryString.join('\\n');\n}\n\n/** Helper to format `packagesWithWarnings` or `packagesWithErrors`. */\nfunction formatPackageResults(params: { results: InitPackageResult[]; issueType: 'error' | 'warn' }): string {\n const { results, issueType } = params;\n if (!results.length) {\n return '';\n }\n\n const color = colorsByType[issueType];\n const messageType = issueType === 'error' ? 'errors' : 'warnings';\n const statusChar = bold(color(prefixCharacters[issueType]));\n\n const summaryString = [bold(color(`${plural(results.length, 'package')} with ${messageType}:`)), ''];\n\n for (const result of results) {\n const unformattedMessages = result[messageType];\n if (!unformattedMessages?.length) {\n continue;\n }\n\n const description = plural(unformattedMessages.length, messageType.slice(0, -1) + '$s');\n summaryString.push(formatPackageHeader({ ...result, issueType, description }));\n\n const messages = unformattedMessages.map(({ location, text, source }) => {\n // Show the whole path so it can be easily opened with ctrl+click.\n // NOTE: location.file should be relative to the package path, not the app path.\n const filePath = location ? ` ${formatLocation({ ...location, fromPath: result.path })}` : '';\n // Indent the message for readability.\n return `[${source}]${filePath}\\n${color(indent(text, 1))}`;\n });\n\n summaryString.push(bulletedList(messages, undefined, statusChar), '');\n }\n\n return summaryString.join('\\n');\n}\n\nconst colorsByType = {\n error: red,\n warn: yellow,\n add: (str: string) => str,\n};\nconst statusByType = {\n error: prefixCharacters.error,\n warn: prefixCharacters.warn,\n add: '+',\n};\n\n/**\n * Helper to format the header for a list of issues in a package:\n * status character, `name@version`, issue description, package path.\n */\nfunction formatPackageHeader(\n params: InitPackageResult & {\n description: string;\n issueType: 'error' | 'warn' | 'add';\n },\n): string {\n const { name, version, path: packagePath, outputPath, description, issueType } = params;\n const color = colorsByType[issueType];\n const statusChar = bold(color(statusByType[issueType]));\n const packageName = bold(lightCyan(`${name}@${version || `<unknown>`}`));\n\n return (\n `${packageName} - ${packagePath}\\n` +\n (outputPath ? grey(`(output: ${outputPath})\\n`) : '') +\n `${statusChar} ${bold(color(description))}`\n );\n}\n"]}
|
|
@@ -1,19 +1,14 @@
|
|
|
1
|
-
import type { AutoDispose } from '../../types/AutoDispose.js';
|
|
2
1
|
import type { InitOptions } from './types/InitOptions.js';
|
|
3
|
-
import type { InitSummary } from './types/InitSummary.js';
|
|
4
2
|
import type { InitSummaryData } from './InitSummaryData.js';
|
|
5
|
-
import type { AppCommandContext } from '../../types/CommandAction.js';
|
|
3
|
+
import type { AppCommandContext, CommandActionParams } from '../../types/CommandAction.js';
|
|
6
4
|
/**
|
|
7
5
|
* Init execution function.
|
|
8
6
|
*/
|
|
9
|
-
export declare function init(
|
|
10
|
-
options: InitOptions;
|
|
11
|
-
contexts: AppCommandContext[];
|
|
12
|
-
autoDispose: AutoDispose;
|
|
7
|
+
export declare function init(params: Pick<CommandActionParams<InitOptions>, keyof AppCommandContext | 'options' | 'autoDispose' | 'isMultiApp'> & {
|
|
13
8
|
/**
|
|
14
|
-
* App summary
|
|
9
|
+
* App summary object, created ahead of time so that a partial summary can be generated
|
|
15
10
|
* if the process is interrupted.
|
|
16
11
|
*/
|
|
17
|
-
|
|
18
|
-
}): Promise<
|
|
12
|
+
summaryData: InitSummaryData;
|
|
13
|
+
}): Promise<void>;
|
|
19
14
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAS3F;;GAEG;AACH,wBAAsB,IAAI,CACxB,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,iBAAiB,GAAG,SAAS,GAAG,aAAa,GAAG,YAAY,CAAC,GAAG;IACnH;;;OAGG;IACH,WAAW,EAAE,eAAe,CAAC;CAC9B,GACA,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|