@ms-cloudpack/cli 0.51.4 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commands/init/InitSummaryData.d.ts.map +1 -1
- package/lib/commands/init/InitSummaryData.js +14 -1
- package/lib/commands/init/InitSummaryData.js.map +1 -1
- package/lib/commands/init/evaluatePath.d.ts.map +1 -1
- package/lib/commands/init/evaluatePath.js +30 -2
- package/lib/commands/init/evaluatePath.js.map +1 -1
- package/lib/commands/init/optimizeDependencies.d.ts +29 -0
- package/lib/commands/init/optimizeDependencies.d.ts.map +1 -0
- package/lib/commands/init/optimizeDependencies.js +127 -0
- package/lib/commands/init/optimizeDependencies.js.map +1 -0
- package/lib/commands/sync/execute.d.ts.map +1 -1
- package/lib/commands/sync/execute.js +32 -25
- package/lib/commands/sync/execute.js.map +1 -1
- package/lib/commands/sync/index.d.ts.map +1 -1
- package/lib/commands/sync/index.js +14 -1
- package/lib/commands/sync/index.js.map +1 -1
- package/lib/commands/sync/types/SyncOptions.d.ts +2 -1
- package/lib/commands/sync/types/SyncOptions.d.ts.map +1 -1
- package/lib/commands/sync/types/SyncOptions.js.map +1 -1
- package/lib/utilities/isCodespaces.d.ts +5 -0
- package/lib/utilities/isCodespaces.d.ts.map +1 -0
- package/lib/utilities/isCodespaces.js +7 -0
- package/lib/utilities/isCodespaces.js.map +1 -0
- package/package.json +10 -9
|
@@ -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;AAGlF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,iBAAiB,CAA0C;IACnE,OAAO,CAAC,UAAU,CAAS;;IAQpB,YAAY,CAAC,aAAa,EAAE,iBAAiB;
|
|
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;AAGlF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,iBAAiB,CAA0C;IACnE,OAAO,CAAC,UAAU,CAAS;;IAQpB,YAAY,CAAC,aAAa,EAAE,iBAAiB;IAgB7C,sBAAsB,CAAC,UAAU,EAAE,uBAAuB,EAAE;IAS5D,SAAS,IAAI,WAAW;CA0ChC"}
|
|
@@ -11,7 +11,20 @@ export class InitSummaryData {
|
|
|
11
11
|
this._startTime = Date.now();
|
|
12
12
|
}
|
|
13
13
|
recordResult(packageResult) {
|
|
14
|
-
|
|
14
|
+
// Merge previous errors and warnings if any.
|
|
15
|
+
if (this._packageResults[packageResult.path]) {
|
|
16
|
+
if (packageResult.errors?.length) {
|
|
17
|
+
this._packageResults[packageResult.path].errors ??= [];
|
|
18
|
+
this._packageResults[packageResult.path].errors?.push(...packageResult.errors);
|
|
19
|
+
}
|
|
20
|
+
if (packageResult.warnings?.length) {
|
|
21
|
+
this._packageResults[packageResult.path].warnings ??= [];
|
|
22
|
+
this._packageResults[packageResult.path].warnings?.push(...packageResult.warnings);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this._packageResults[packageResult.path] = packageResult;
|
|
27
|
+
}
|
|
15
28
|
}
|
|
16
29
|
recordGeneratedChanges(allChanges) {
|
|
17
30
|
for (const update of allChanges) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InitSummaryData.js","sourceRoot":"","sources":["../../../src/commands/init/InitSummaryData.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAK1B;QACE,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC;IAEM,YAAY,CAAC,aAAgC;QAClD,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;
|
|
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 { InitPackageResultWarnings } from './types/InitPackageResultWarnings.js';\nimport type { InitPackageResultErrors } from './types/InitPackageResultErrors.js';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\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 * `get` method will return the final tally. The resulting `InitSummary` object can be used in the `formatInitSummary`\n * 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\n constructor() {\n this._packageResults = {};\n this._generatedUpdates = {};\n this._startTime = Date.now();\n }\n\n public recordResult(packageResult: InitPackageResult) {\n // Merge previous errors and warnings if any.\n if (this._packageResults[packageResult.path]) {\n if (packageResult.errors?.length) {\n this._packageResults[packageResult.path].errors ??= [];\n this._packageResults[packageResult.path].errors?.push(...packageResult.errors);\n }\n if (packageResult.warnings?.length) {\n this._packageResults[packageResult.path].warnings ??= [];\n this._packageResults[packageResult.path].warnings?.push(...packageResult.warnings);\n }\n } else {\n this._packageResults[packageResult.path] = packageResult;\n }\n }\n\n public recordGeneratedChanges(allChanges: GeneratedPackageChanges[]) {\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 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 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 updates.changes = updates.changes.sort((a, b) => a.change.localeCompare(b.change));\n }\n\n return {\n duration,\n totalPackages: Object.keys(this._packageResults).length,\n totalSuccess,\n totalErrors,\n totalWarnings,\n totalChanges,\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates: sortedUpdates,\n };\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluatePath.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"evaluatePath.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAM1D;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,eAAe,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACpD,wEAAwE;IACxE,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,2BAA2B,CAAC;CAClC,GAAG,OAAO,CAAC;IACV,4EAA4E;IAC5E,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,GAAG,SAAS,CAAC,CAAC;IAClE,6FAA6F;IAC7F,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC,CAkHD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ensurePackageBundled } from '@ms-cloudpack/api-server/apis';
|
|
2
2
|
import { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';
|
|
3
|
+
import { optimizeDependencies } from './optimizeDependencies.js';
|
|
3
4
|
/**
|
|
4
5
|
* A helper which given the packagePath, tries to evaluate the path by bundling things, finding imports,
|
|
5
6
|
* and cross checking the imports with explicit exports. If any exports are missing, they are documented
|
|
@@ -8,6 +9,7 @@ import { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';
|
|
|
8
9
|
export async function evaluatePath(options) {
|
|
9
10
|
const { packagePath, config, initOptions, telemetryClient, resolveMap, summaryData, shouldForce, ctx, importerContext, } = options;
|
|
10
11
|
const { packages } = ctx;
|
|
12
|
+
const { features } = config;
|
|
11
13
|
// This line is the reason we have to track the importerContext for packages to evaluate:
|
|
12
14
|
// otherwise if a non-semver package is read here, we'd lose the modifications from the initial
|
|
13
15
|
// time the package was read (and getNonSemverTransform was called) when building the resolve map.
|
|
@@ -51,9 +53,35 @@ export async function evaluatePath(options) {
|
|
|
51
53
|
else {
|
|
52
54
|
summaryData.recordGeneratedChanges(changes);
|
|
53
55
|
}
|
|
54
|
-
|
|
56
|
+
// Conditionally scan dependency usage so that we can populate
|
|
57
|
+
// include/excludeDependencies automatically, ensuring the dep list
|
|
58
|
+
// is both minimal (remove unused deps) and complete (include
|
|
59
|
+
// specific devDeps.)
|
|
60
|
+
let importErrors = [];
|
|
61
|
+
let importWarnings = [];
|
|
62
|
+
let importChanges = [];
|
|
63
|
+
if (features?.optimizeDependencies) {
|
|
64
|
+
({
|
|
65
|
+
errors: importErrors,
|
|
66
|
+
warnings: importWarnings,
|
|
67
|
+
changes: importChanges,
|
|
68
|
+
} = await optimizeDependencies({ definition, packagePath, packages, imports, config, resolveMap }));
|
|
69
|
+
if (importErrors.length || importWarnings.length) {
|
|
70
|
+
summaryData.recordResult({
|
|
71
|
+
...resultIdentifier,
|
|
72
|
+
errors: importErrors.map((text) => ({ text })),
|
|
73
|
+
warnings: importWarnings.map((text) => ({ text })),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
summaryData.recordGeneratedChanges(importChanges);
|
|
77
|
+
}
|
|
78
|
+
// Uncomment this when #1694 init does not cache packages correctly after editing config is fixed
|
|
79
|
+
// and the heap does not reach the limit as almost every package is enqueued.
|
|
80
|
+
// importPathsToEvaluate?.forEach((path) => pathsToEvaluate.set(path, importerContext));
|
|
81
|
+
// importPathsToRefresh?.forEach((path) => pathsToRefresh.add(path));
|
|
82
|
+
if (initOptions.check && (changes.length || evalErrors.length || importChanges.length || importErrors.length)) {
|
|
55
83
|
telemetryClient.rootSpan.addEvent('INIT_CHECK_FAILED', {
|
|
56
|
-
reason: changes.length ? 'Config needs to be updated.' : evalErrors,
|
|
84
|
+
reason: changes.length || importChanges.length ? 'Config needs to be updated.' : [...evalErrors, ...importErrors],
|
|
57
85
|
});
|
|
58
86
|
return { shouldExit: true };
|
|
59
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluatePath.js","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"evaluatePath.js","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EnsurePackageBundledContext } from '@ms-cloudpack/api-server/apis';\nimport type { CloudpackConfig } from '@ms-cloudpack/config-types';\nimport type { PackageImporterContext } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { TelemetryClient } from '@ms-cloudpack/telemetry';\nimport type { InitSummaryData } from './InitSummaryData.js';\nimport type { InitOptions } from './types/InitOptions.js';\n\nimport { ensurePackageBundled } from '@ms-cloudpack/api-server/apis';\nimport { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';\nimport { optimizeDependencies } from './optimizeDependencies.js';\n\n/**\n * A helper which given the packagePath, tries to evaluate the path by bundling things, finding imports,\n * and cross checking the imports with explicit exports. If any exports are missing, they are documented\n * in the generated config.\n */\nexport async function evaluatePath(options: {\n /** Path to evaluate. */\n packagePath: string;\n /** Info about how the parent package */\n importerContext: PackageImporterContext | undefined;\n /** Config so far. This will be modified if new overrides are needed. */\n config: CloudpackConfig;\n resolveMap: ResolveMap;\n telemetryClient: TelemetryClient;\n initOptions: InitOptions;\n summaryData: InitSummaryData;\n shouldForce: boolean;\n ctx: EnsurePackageBundledContext;\n}): Promise<{\n /** Map from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate?: Map<string, PackageImporterContext | undefined>;\n /** Package paths for which new exports were added, so the package should be re-processed. */\n pathsToRefresh?: Set<string>;\n /** Whether a fatal error was encountered. */\n shouldExit?: boolean;\n}> {\n const {\n packagePath,\n config,\n initOptions,\n telemetryClient,\n resolveMap,\n summaryData,\n shouldForce,\n ctx,\n importerContext,\n } = options;\n const { packages } = ctx;\n const { features } = config;\n\n // This line is the reason we have to track the importerContext for packages to evaluate:\n // otherwise if a non-semver package is read here, we'd lose the modifications from the initial\n // time the package was read (and getNonSemverTransform was called) when building the resolve map.\n const definition = await packages.get(packagePath, { refresh: true, importerContext });\n const { name, version } = definition || {};\n\n if (!definition || !name || !version) {\n // Unsure why a package would be missing a definition/name/version - we've built the resolve map already.\n throw new Error(\n `${packagePath} evaluation failed because the package.json with a name/version was not found or not readable.`,\n );\n }\n\n // Bundle the package and find the imports it depends on.\n const { result } = await ensurePackageBundled({\n input: {\n name,\n version,\n shouldFindImports: true,\n shouldForce,\n shouldRerun: shouldForce,\n },\n ctx,\n });\n\n const { errors, warnings, imports } = result;\n\n // Record the results for the summary.\n const resultIdentifier = {\n name: definition.name || '',\n version: definition.version || '',\n path: packagePath,\n };\n\n summaryData.recordResult({ ...resultIdentifier, errors, warnings });\n\n // If there were errors or no imports, return early.\n if (errors?.length || !imports) {\n return {};\n }\n\n // Given the package imports, find the missing exports maps and update packageOverrides.\n const {\n changes,\n errors: evalErrors,\n pathsToEvaluate,\n pathsToRefresh,\n } = await evaluateImportsForOverrides({ definition, packagePath, packages, imports, config, resolveMap });\n\n if (evalErrors.length) {\n summaryData.recordResult({\n ...resultIdentifier,\n errors: evalErrors.map((text) => ({ text })),\n });\n } else {\n summaryData.recordGeneratedChanges(changes);\n }\n\n // Conditionally scan dependency usage so that we can populate\n // include/excludeDependencies automatically, ensuring the dep list\n // is both minimal (remove unused deps) and complete (include\n // specific devDeps.)\n let importErrors: string[] = [];\n let importWarnings = [];\n let importChanges = [];\n if (features?.optimizeDependencies) {\n ({\n errors: importErrors,\n warnings: importWarnings,\n changes: importChanges,\n } = await optimizeDependencies({ definition, packagePath, packages, imports, config, resolveMap }));\n\n if (importErrors.length || importWarnings.length) {\n summaryData.recordResult({\n ...resultIdentifier,\n errors: importErrors.map((text) => ({ text })),\n warnings: importWarnings.map((text) => ({ text })),\n });\n }\n summaryData.recordGeneratedChanges(importChanges);\n }\n\n // Uncomment this when #1694 init does not cache packages correctly after editing config is fixed\n // and the heap does not reach the limit as almost every package is enqueued.\n // importPathsToEvaluate?.forEach((path) => pathsToEvaluate.set(path, importerContext));\n // importPathsToRefresh?.forEach((path) => pathsToRefresh.add(path));\n\n if (initOptions.check && (changes.length || evalErrors.length || importChanges.length || importErrors.length)) {\n telemetryClient.rootSpan.addEvent('INIT_CHECK_FAILED', {\n reason: changes.length || importChanges.length ? 'Config needs to be updated.' : [...evalErrors, ...importErrors],\n });\n\n return { shouldExit: true };\n }\n\n return {\n pathsToEvaluate,\n pathsToRefresh,\n };\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type ResolveMap } from '@ms-cloudpack/package-utilities';
|
|
2
|
+
import type { DetectedImports } from '@ms-cloudpack/api-server';
|
|
3
|
+
import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
|
|
4
|
+
import type { CloudpackConfig, PackageJson } from '@ms-cloudpack/config-types';
|
|
5
|
+
import type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';
|
|
6
|
+
/**
|
|
7
|
+
* Optimizes the dependencies of a package to determine if there are any missing or unused.
|
|
8
|
+
* If so, adds the the missing dependencies to included and the unused dependencies to excluded.
|
|
9
|
+
*/
|
|
10
|
+
export declare function optimizeDependencies(options: {
|
|
11
|
+
packages: PackageDefinitionsCache;
|
|
12
|
+
imports: DetectedImports;
|
|
13
|
+
definition: PackageJson;
|
|
14
|
+
packagePath: string;
|
|
15
|
+
config: CloudpackConfig;
|
|
16
|
+
resolveMap: ResolveMap;
|
|
17
|
+
}): Promise<{
|
|
18
|
+
/** Changes made to the generated config */
|
|
19
|
+
changes: GeneratedPackageChanges[];
|
|
20
|
+
/** Any errors encountered */
|
|
21
|
+
errors: string[];
|
|
22
|
+
/** Any warnings encountered */
|
|
23
|
+
warnings: string[];
|
|
24
|
+
/** Set from new package path (to be evaluated) to info about the parent. */
|
|
25
|
+
pathsToEvaluate: Set<string>;
|
|
26
|
+
/** Package paths for which dependencies where included or excluded, so the package should be re-processed. */
|
|
27
|
+
pathsToRefresh: Set<string>;
|
|
28
|
+
}>;
|
|
29
|
+
//# sourceMappingURL=optimizeDependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizeDependencies.d.ts","sourceRoot":"","sources":["../../../src/commands/init/optimizeDependencies.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAElF;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,OAAO,EAAE,eAAe,CAAC;IACzB,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;CACxB,GAAG,OAAO,CAAC;IACV,2CAA2C;IAC3C,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,6BAA6B;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,8GAA8G;IAC9G,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B,CAAC,CA8ID"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { getPackageSettings } from '@ms-cloudpack/config';
|
|
2
|
+
import { findResolveMapEntry } from '@ms-cloudpack/package-utilities';
|
|
3
|
+
/**
|
|
4
|
+
* Optimizes the dependencies of a package to determine if there are any missing or unused.
|
|
5
|
+
* If so, adds the the missing dependencies to included and the unused dependencies to excluded.
|
|
6
|
+
*/
|
|
7
|
+
export async function optimizeDependencies(options) {
|
|
8
|
+
const { packages, imports, definition, packagePath, config, resolveMap } = options;
|
|
9
|
+
const displayName = `${definition.name}@${definition.version}`;
|
|
10
|
+
const changes = [];
|
|
11
|
+
const errors = [];
|
|
12
|
+
const warnings = [];
|
|
13
|
+
const pathsToEvaluate = new Set();
|
|
14
|
+
const pathsToRefresh = new Set();
|
|
15
|
+
const { name, version } = definition;
|
|
16
|
+
if (!name || !version) {
|
|
17
|
+
throw new Error(`Package "${displayName}" is missing a name or version.`);
|
|
18
|
+
}
|
|
19
|
+
// Iterate through imports and find their path from the resolve map.
|
|
20
|
+
for (const dependencyName of Object.keys(imports)) {
|
|
21
|
+
// Add to includedDependencies if it is not listed as a dependency or peer dependency in the package.json.
|
|
22
|
+
if (definition.dependencies?.[dependencyName] ||
|
|
23
|
+
definition.peerDependencies?.[dependencyName] ||
|
|
24
|
+
dependencyName === name) {
|
|
25
|
+
// Skip if it is listed as a dependency, peer dependency or it is importing itself.
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
// If the dependency is not listed in the package.json, add an error or warning.
|
|
29
|
+
if (!definition.devDependencies?.[dependencyName]) {
|
|
30
|
+
const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });
|
|
31
|
+
const dependencyPath = resolveEntry?.path;
|
|
32
|
+
const dependencyDefinition = dependencyPath ? await packages.get(dependencyPath) : undefined;
|
|
33
|
+
const message = `Optimize Dependencies: Package "${displayName}" imports from the package "${dependencyName}" but it is not listed in dependencies. ` +
|
|
34
|
+
`Ensure that "${dependencyName}" is listed in dependencies of "${displayName}".`;
|
|
35
|
+
if (!dependencyPath || !dependencyDefinition) {
|
|
36
|
+
// If the dependency is not found in the resolve map, add an error.
|
|
37
|
+
errors.push(message);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// If the dependency is found in the resolve map, add a warning.
|
|
42
|
+
warnings.push(message);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Make sure to add the package to the list of packages to evaluate.
|
|
46
|
+
pathsToEvaluate.add(packagePath);
|
|
47
|
+
// Add to includedDependencies
|
|
48
|
+
const packageSettings = (config.generated.packageSettings ??= []);
|
|
49
|
+
let generatedPackageSettings = getPackageSettings({
|
|
50
|
+
config: { generated: { packageSettings } },
|
|
51
|
+
name,
|
|
52
|
+
version,
|
|
53
|
+
firstMatch: true,
|
|
54
|
+
}).generatedPackageSettings;
|
|
55
|
+
if (!generatedPackageSettings) {
|
|
56
|
+
generatedPackageSettings = {
|
|
57
|
+
match: { name, version: `^${version}` },
|
|
58
|
+
};
|
|
59
|
+
packageSettings.push(generatedPackageSettings);
|
|
60
|
+
}
|
|
61
|
+
generatedPackageSettings.includedDependencies ??= [];
|
|
62
|
+
// Add to includedDependencies if it is not already included.
|
|
63
|
+
if (generatedPackageSettings.includedDependencies.includes(dependencyName)) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
generatedPackageSettings.includedDependencies.push(dependencyName);
|
|
67
|
+
changes.push({
|
|
68
|
+
name,
|
|
69
|
+
version,
|
|
70
|
+
path: packagePath,
|
|
71
|
+
changes: [
|
|
72
|
+
{
|
|
73
|
+
type: 'included-dependency',
|
|
74
|
+
change: dependencyName,
|
|
75
|
+
reason: `Imported by "${displayName}"`,
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
});
|
|
79
|
+
pathsToRefresh.add(packagePath);
|
|
80
|
+
}
|
|
81
|
+
const dependencies = new Set([
|
|
82
|
+
...Object.keys(definition.dependencies ?? {}),
|
|
83
|
+
...Object.keys(definition.peerDependencies ?? {}),
|
|
84
|
+
]);
|
|
85
|
+
// Iterate through dependencies and find unused.
|
|
86
|
+
for (const dependencyName of dependencies) {
|
|
87
|
+
if (imports[dependencyName]) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
pathsToEvaluate.add(packagePath);
|
|
91
|
+
// Add to excludedDependencies
|
|
92
|
+
const packageSettings = (config.generated.packageSettings ??= []);
|
|
93
|
+
let generatedPackageSettings = getPackageSettings({
|
|
94
|
+
config: { generated: { packageSettings } },
|
|
95
|
+
name,
|
|
96
|
+
version,
|
|
97
|
+
firstMatch: true,
|
|
98
|
+
}).generatedPackageSettings;
|
|
99
|
+
if (!generatedPackageSettings) {
|
|
100
|
+
generatedPackageSettings = {
|
|
101
|
+
match: { name, version: `^${version}` },
|
|
102
|
+
};
|
|
103
|
+
packageSettings.push(generatedPackageSettings);
|
|
104
|
+
}
|
|
105
|
+
generatedPackageSettings.excludedDependencies ??= [];
|
|
106
|
+
// Add to includedDependencies if it is not already included.
|
|
107
|
+
if (generatedPackageSettings.excludedDependencies.includes(dependencyName)) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
generatedPackageSettings.excludedDependencies.push(dependencyName);
|
|
111
|
+
changes.push({
|
|
112
|
+
name,
|
|
113
|
+
version,
|
|
114
|
+
path: packagePath,
|
|
115
|
+
changes: [
|
|
116
|
+
{
|
|
117
|
+
type: 'excluded-dependency',
|
|
118
|
+
change: dependencyName,
|
|
119
|
+
reason: `Not imported by "${displayName}"`,
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
});
|
|
123
|
+
pathsToRefresh.add(packagePath);
|
|
124
|
+
}
|
|
125
|
+
return { errors, warnings, changes, pathsToEvaluate, pathsToRefresh };
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=optimizeDependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizeDependencies.js","sourceRoot":"","sources":["../../../src/commands/init/optimizeDependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPackageSettings } from '@ms-cloudpack/config';\nimport { findResolveMapEntry, type ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { DetectedImports } from '@ms-cloudpack/api-server';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { CloudpackConfig, PackageJson } from '@ms-cloudpack/config-types';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\n\n/**\n * Optimizes the dependencies of a package to determine if there are any missing or unused.\n * If so, adds the the missing dependencies to included and the unused dependencies to excluded.\n */\nexport async function optimizeDependencies(options: {\n packages: PackageDefinitionsCache;\n imports: DetectedImports;\n definition: PackageJson;\n packagePath: string;\n config: CloudpackConfig;\n resolveMap: ResolveMap;\n}): Promise<{\n /** Changes made to the generated config */\n changes: GeneratedPackageChanges[];\n /** Any errors encountered */\n errors: string[];\n /** Any warnings encountered */\n warnings: string[];\n /** Set from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate: Set<string>;\n /** Package paths for which dependencies where included or excluded, so the package should be re-processed. */\n pathsToRefresh: Set<string>;\n}> {\n const { packages, imports, definition, packagePath, config, resolveMap } = options;\n const displayName = `${definition.name}@${definition.version}`;\n const changes: GeneratedPackageChanges[] = [];\n const errors: string[] = [];\n const warnings: string[] = [];\n const pathsToEvaluate = new Set<string>();\n const pathsToRefresh = new Set<string>();\n\n const { name, version } = definition;\n if (!name || !version) {\n throw new Error(`Package \"${displayName}\" is missing a name or version.`);\n }\n\n // Iterate through imports and find their path from the resolve map.\n for (const dependencyName of Object.keys(imports)) {\n // Add to includedDependencies if it is not listed as a dependency or peer dependency in the package.json.\n if (\n definition.dependencies?.[dependencyName] ||\n definition.peerDependencies?.[dependencyName] ||\n dependencyName === name\n ) {\n // Skip if it is listed as a dependency, peer dependency or it is importing itself.\n continue;\n }\n\n // If the dependency is not listed in the package.json, add an error or warning.\n if (!definition.devDependencies?.[dependencyName]) {\n const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });\n const dependencyPath = resolveEntry?.path;\n const dependencyDefinition = dependencyPath ? await packages.get(dependencyPath) : undefined;\n const message =\n `Optimize Dependencies: Package \"${displayName}\" imports from the package \"${dependencyName}\" but it is not listed in dependencies. ` +\n `Ensure that \"${dependencyName}\" is listed in dependencies of \"${displayName}\".`;\n if (!dependencyPath || !dependencyDefinition) {\n // If the dependency is not found in the resolve map, add an error.\n errors.push(message);\n continue;\n } else {\n // If the dependency is found in the resolve map, add a warning.\n warnings.push(message);\n }\n }\n\n // Make sure to add the package to the list of packages to evaluate.\n pathsToEvaluate.add(packagePath);\n\n // Add to includedDependencies\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings = getPackageSettings({\n config: { generated: { packageSettings } },\n name,\n version,\n firstMatch: true,\n }).generatedPackageSettings;\n\n if (!generatedPackageSettings) {\n generatedPackageSettings = {\n match: { name, version: `^${version}` },\n };\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.includedDependencies ??= [];\n\n // Add to includedDependencies if it is not already included.\n if (generatedPackageSettings.includedDependencies.includes(dependencyName)) {\n continue;\n }\n\n generatedPackageSettings.includedDependencies.push(dependencyName);\n\n changes.push({\n name,\n version,\n path: packagePath,\n changes: [\n {\n type: 'included-dependency',\n change: dependencyName,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n\n pathsToRefresh.add(packagePath);\n }\n\n const dependencies = new Set([\n ...Object.keys(definition.dependencies ?? {}),\n ...Object.keys(definition.peerDependencies ?? {}),\n ]);\n\n // Iterate through dependencies and find unused.\n for (const dependencyName of dependencies) {\n if (imports[dependencyName]) {\n continue;\n }\n\n pathsToEvaluate.add(packagePath);\n\n // Add to excludedDependencies\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings = getPackageSettings({\n config: { generated: { packageSettings } },\n name,\n version,\n firstMatch: true,\n }).generatedPackageSettings;\n\n if (!generatedPackageSettings) {\n generatedPackageSettings = {\n match: { name, version: `^${version}` },\n };\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.excludedDependencies ??= [];\n\n // Add to includedDependencies if it is not already included.\n if (generatedPackageSettings.excludedDependencies.includes(dependencyName)) {\n continue;\n }\n\n generatedPackageSettings.excludedDependencies.push(dependencyName);\n\n changes.push({\n name,\n version,\n path: packagePath,\n changes: [\n {\n type: 'excluded-dependency',\n change: dependencyName,\n reason: `Not imported by \"${displayName}\"`,\n },\n ],\n });\n\n pathsToRefresh.add(packagePath);\n }\n return { errors, warnings, changes, pathsToEvaluate, pathsToRefresh };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,WAAW,CA6C9C,CAAC"}
|
|
@@ -1,33 +1,40 @@
|
|
|
1
|
-
import { isCIBuild } from '../../utilities/isCIBuild.js';
|
|
2
1
|
import { createPartialApiContext, syncDownload, syncUpload } from '@ms-cloudpack/api-server/apis';
|
|
3
2
|
import { runPrerequisites } from '../../common/runPrerequisites.js';
|
|
4
3
|
export const execute = async ({ options, reporter, initialize, exit, autoDispose }) => {
|
|
5
|
-
const { cwd,
|
|
4
|
+
const { cwd, login, upload } = options;
|
|
6
5
|
const { config, telemetryClient } = await initialize({ appPath: cwd });
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
try {
|
|
7
|
+
const remoteCacheConfig = config.remoteCache;
|
|
8
|
+
if (!remoteCacheConfig) {
|
|
9
|
+
console.warn('Remote cache is not configured. Please add remoteCache to your cloudpack.config.json file to use this feature.');
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const input = {
|
|
13
|
+
loginMethod: login,
|
|
14
|
+
};
|
|
15
|
+
const apiContextOptions = { appPath: cwd, config, reporter, telemetryClient };
|
|
16
|
+
if (upload) {
|
|
17
|
+
runPrerequisites(config, cwd);
|
|
18
|
+
const [ctx] = autoDispose(await createPartialApiContext({
|
|
19
|
+
...apiContextOptions,
|
|
20
|
+
items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],
|
|
21
|
+
}));
|
|
22
|
+
await syncUpload({ input, ctx });
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
const [ctx] = autoDispose(await createPartialApiContext({
|
|
26
|
+
...apiContextOptions,
|
|
27
|
+
items: ['packages', 'session', 'packageHashes'],
|
|
28
|
+
}));
|
|
29
|
+
await syncDownload({ input, ctx });
|
|
30
|
+
}
|
|
31
|
+
await exit({ exitCode: 0 });
|
|
11
32
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
runPrerequisites(config, cwd);
|
|
18
|
-
const [ctx] = autoDispose(await createPartialApiContext({
|
|
19
|
-
...apiContextOptions,
|
|
20
|
-
items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],
|
|
21
|
-
}));
|
|
22
|
-
await syncUpload({ input, ctx });
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (error instanceof Error) {
|
|
35
|
+
telemetryClient.rootSpan.recordException(error);
|
|
36
|
+
}
|
|
37
|
+
throw error;
|
|
23
38
|
}
|
|
24
|
-
else {
|
|
25
|
-
const [ctx] = autoDispose(await createPartialApiContext({
|
|
26
|
-
...apiContextOptions,
|
|
27
|
-
items: ['packages', 'session', 'packageHashes'],
|
|
28
|
-
}));
|
|
29
|
-
await syncDownload({ input, ctx });
|
|
30
|
-
}
|
|
31
|
-
await exit({ exitCode: 0 });
|
|
32
39
|
};
|
|
33
40
|
//# sourceMappingURL=execute.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/sync/execute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/sync/execute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,MAAM,CAAC,MAAM,OAAO,GAA+B,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;IAChH,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEvE,IAAI;QACF,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,WAAW,EAAE,KAAK;SACnB,CAAC;QAEF,MAAM,iBAAiB,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;QAC9E,IAAI,MAAM,EAAE;YACV,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAE9B,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CACvB,MAAM,uBAAuB,CAAC;gBAC5B,GAAG,iBAAiB;gBACpB,KAAK,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,eAAe,CAAC;aACtG,CAAC,CACH,CAAC;YACF,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;SAClC;aAAM;YACL,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CACvB,MAAM,uBAAuB,CAAC;gBAC5B,GAAG,iBAAiB;gBACpB,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC;aAChD,CAAC,CACH,CAAC;YACF,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;SACpC;QAED,MAAM,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;KAC7B;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,KAAK,YAAY,KAAK,EAAE;YAC1B,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;SACjD;QACD,MAAM,KAAK,CAAC;KACb;AACH,CAAC,CAAC","sourcesContent":["import type { SyncOptions } from './types/SyncOptions.js';\nimport type { CommandAction } from '../../types/CommandAction.js';\nimport { createPartialApiContext, syncDownload, syncUpload } from '@ms-cloudpack/api-server/apis';\nimport { runPrerequisites } from '../../common/runPrerequisites.js';\n\nexport const execute: CommandAction<SyncOptions> = async ({ options, reporter, initialize, exit, autoDispose }) => {\n const { cwd, login, upload } = options;\n const { config, telemetryClient } = await initialize({ appPath: cwd });\n\n try {\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 loginMethod: login,\n };\n\n const apiContextOptions = { appPath: cwd, config, reporter, telemetryClient };\n if (upload) {\n runPrerequisites(config, cwd);\n\n const [ctx] = autoDispose(\n await createPartialApiContext({\n ...apiContextOptions,\n items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n }),\n );\n await syncUpload({ input, ctx });\n } else {\n const [ctx] = autoDispose(\n await createPartialApiContext({\n ...apiContextOptions,\n items: ['packages', 'session', 'packageHashes'],\n }),\n );\n await syncDownload({ input, ctx });\n }\n\n await exit({ exitCode: 0 });\n } catch (error) {\n if (error instanceof Error) {\n telemetryClient.rootSpan.recordException(error);\n }\n throw error;\n }\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAiB9E,+BAA+B;AAC/B,eAAO,MAAM,IAAI,EAAE,mBAiBlB,CAAC"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import { Option } from 'commander';
|
|
2
2
|
import { createCommand } from '../../common/createCommand.js';
|
|
3
|
+
import { isCIBuild } from '../../utilities/isCIBuild.js';
|
|
4
|
+
import { isCodespaces } from '../../utilities/isCodespaces.js';
|
|
5
|
+
function getDefaultLogin() {
|
|
6
|
+
if (isCIBuild()) {
|
|
7
|
+
return 'azure-cli';
|
|
8
|
+
}
|
|
9
|
+
if (isCodespaces()) {
|
|
10
|
+
return 'device-code';
|
|
11
|
+
}
|
|
12
|
+
return 'interactive';
|
|
13
|
+
}
|
|
3
14
|
/** Defines the "sync" verb. */
|
|
4
15
|
export const init = (program) => {
|
|
5
16
|
createCommand({
|
|
@@ -8,7 +19,9 @@ export const init = (program) => {
|
|
|
8
19
|
description: 'Syncs the packages from/to the remote cache. If the package is not in the local cache, it will be downloaded.',
|
|
9
20
|
options: {
|
|
10
21
|
upload: new Option('--upload', 'Uploads the packages to the remote cache.'),
|
|
11
|
-
|
|
22
|
+
login: new Option('--login <method>', 'The way to authenticate against remote cache')
|
|
23
|
+
.choices(['interactive', 'azure-cli', 'device-code'])
|
|
24
|
+
.default(getDefaultLogin(), 'Default login method is azure-cli in CI, device-code in Github Codespaces and interactive otherwise.'),
|
|
12
25
|
},
|
|
13
26
|
getExecutor: () => import('./execute.js'),
|
|
14
27
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,SAAS,eAAe;IACtB,IAAI,SAAS,EAAE,EAAE;QACf,OAAO,WAAW,CAAC;KACpB;IAED,IAAI,YAAY,EAAE,EAAE;QAClB,OAAO,aAAa,CAAC;KACtB;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,OAAO,EAAE,EAAE;IACnD,aAAa,CAAc;QACzB,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,MAAM;QACZ,WAAW,EACT,+GAA+G;QACjH,OAAO,EAAE;YACP,MAAM,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,2CAA2C,CAAC;YAC3E,KAAK,EAAE,IAAI,MAAM,CAAC,kBAAkB,EAAE,8CAA8C,CAAC;iBAClF,OAAO,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;iBACpD,OAAO,CACN,eAAe,EAAE,EACjB,sGAAsG,CACvG;SACJ;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { Option } from 'commander';\nimport { createCommand } from '../../common/createCommand.js';\nimport type { CommandInitFunction } from '../../types/CommandInitFunction.js';\nimport type { SyncOptions } from './types/SyncOptions.js';\nimport { isCIBuild } from '../../utilities/isCIBuild.js';\nimport { isCodespaces } from '../../utilities/isCodespaces.js';\n\nfunction getDefaultLogin() {\n if (isCIBuild()) {\n return 'azure-cli';\n }\n\n if (isCodespaces()) {\n return 'device-code';\n }\n\n return 'interactive';\n}\n\n/** Defines the \"sync\" verb. */\nexport const init: CommandInitFunction = (program) => {\n createCommand<SyncOptions>({\n parent: program,\n name: 'sync',\n description:\n 'Syncs the packages from/to the remote cache. If the package is not in the local cache, it will be downloaded.',\n options: {\n upload: new Option('--upload', 'Uploads the packages to the remote cache.'),\n login: new Option('--login <method>', 'The way to authenticate against remote cache')\n .choices(['interactive', 'azure-cli', 'device-code'])\n .default(\n getDefaultLogin(),\n 'Default login method is azure-cli in CI, device-code in Github Codespaces and interactive otherwise.',\n ),\n },\n getExecutor: () => import('./execute.js'),\n });\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/sync/types/SyncOptions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"SyncOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/sync/types/SyncOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC;CACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncOptions.js","sourceRoot":"","sources":["../../../../src/commands/sync/types/SyncOptions.ts"],"names":[],"mappings":"","sourcesContent":["
|
|
1
|
+
{"version":3,"file":"SyncOptions.js","sourceRoot":"","sources":["../../../../src/commands/sync/types/SyncOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { LoginMethod } from '@ms-cloudpack/remote-cache';\n\nexport interface SyncOptions {\n upload: boolean;\n login: LoginMethod;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isCodespaces.d.ts","sourceRoot":"","sources":["../../src/utilities/isCodespaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,YAAY,uBAE3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isCodespaces.js","sourceRoot":"","sources":["../../src/utilities/isCodespaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AAChC,CAAC","sourcesContent":["/**\n * @returns true if the current process is running in a Codespaces environment\n */\n\nexport function isCodespaces() {\n return process.env.CODESPACES;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ms-cloudpack/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.52.0",
|
|
4
4
|
"description": "The Cloudpack command line interface - a tool for managing fast inner and outer looping in web apps.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -10,15 +10,16 @@
|
|
|
10
10
|
"cloudpack": "./bin/cloudpack.js"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@ms-cloudpack/api-server": "^0.27.
|
|
14
|
-
"@ms-cloudpack/config": "^0.17.
|
|
15
|
-
"@ms-cloudpack/config-types": "^0.1.
|
|
16
|
-
"@ms-cloudpack/create-express-app": "^1.3.
|
|
13
|
+
"@ms-cloudpack/api-server": "^0.27.9",
|
|
14
|
+
"@ms-cloudpack/config": "^0.17.4",
|
|
15
|
+
"@ms-cloudpack/config-types": "^0.1.3",
|
|
16
|
+
"@ms-cloudpack/create-express-app": "^1.3.13",
|
|
17
17
|
"@ms-cloudpack/json-utilities": "^0.1.2",
|
|
18
|
-
"@ms-cloudpack/overlay": "^0.16.
|
|
19
|
-
"@ms-cloudpack/package-hashes": "^0.2.
|
|
20
|
-
"@ms-cloudpack/package-utilities": "^5.6.
|
|
21
|
-
"@ms-cloudpack/path-string-parsing": "^1.1.
|
|
18
|
+
"@ms-cloudpack/overlay": "^0.16.32",
|
|
19
|
+
"@ms-cloudpack/package-hashes": "^0.2.5",
|
|
20
|
+
"@ms-cloudpack/package-utilities": "^5.6.2",
|
|
21
|
+
"@ms-cloudpack/path-string-parsing": "^1.1.2",
|
|
22
|
+
"@ms-cloudpack/remote-cache": "^0.1.20",
|
|
22
23
|
"@ms-cloudpack/task-reporter": "^0.10.2",
|
|
23
24
|
"@ms-cloudpack/telemetry": "^0.4.4",
|
|
24
25
|
"@yarnpkg/lockfile": "^1.1.0",
|