@ms-cloudpack/cli 0.70.1 → 0.71.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/bundle/index.d.ts.map +1 -1
- package/lib/commands/bundle/index.js +6 -8
- package/lib/commands/bundle/index.js.map +1 -1
- package/lib/commands/bundle/types/BundleOptions.d.ts +6 -3
- package/lib/commands/bundle/types/BundleOptions.d.ts.map +1 -1
- package/lib/commands/bundle/types/BundleOptions.js.map +1 -1
- package/lib/commands/init/evaluateImportsForOverrides.d.ts.map +1 -1
- package/lib/commands/init/evaluateImportsForOverrides.js +15 -5
- package/lib/commands/init/evaluateImportsForOverrides.js.map +1 -1
- package/lib/commands/init/index.d.ts.map +1 -1
- package/lib/commands/init/index.js +4 -3
- package/lib/commands/init/index.js.map +1 -1
- package/lib/commands/init/types/InitOptions.d.ts +3 -3
- package/lib/commands/init/types/InitOptions.js.map +1 -1
- package/lib/commands/link/index.js +9 -5
- package/lib/commands/link/index.js.map +1 -1
- package/lib/commands/link/types/LinkOptions.d.ts +12 -8
- package/lib/commands/link/types/LinkOptions.d.ts.map +1 -1
- package/lib/commands/link/types/LinkOptions.js.map +1 -1
- package/lib/commands/setup/execute.d.ts +1 -1
- package/lib/commands/setup/execute.d.ts.map +1 -1
- package/lib/commands/setup/execute.js +3 -3
- package/lib/commands/setup/execute.js.map +1 -1
- package/lib/commands/setup/index.d.ts +1 -1
- package/lib/commands/setup/index.d.ts.map +1 -1
- package/lib/commands/setup/index.js +4 -3
- package/lib/commands/setup/index.js.map +1 -1
- package/lib/commands/start/execute.d.ts.map +1 -1
- package/lib/commands/start/execute.js +33 -33
- 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 +3 -6
- package/lib/commands/start/index.js.map +1 -1
- package/lib/commands/start/types/StartOptions.d.ts +1 -1
- 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/index.d.ts.map +1 -1
- package/lib/commands/sync/index.js +5 -4
- package/lib/commands/sync/index.js.map +1 -1
- package/lib/commands/unlink/index.d.ts.map +1 -1
- package/lib/commands/unlink/index.js +1 -1
- package/lib/commands/unlink/index.js.map +1 -1
- package/lib/utilities/reusedOptions.d.ts +3 -0
- package/lib/utilities/reusedOptions.d.ts.map +1 -1
- package/lib/utilities/reusedOptions.js +22 -3
- package/lib/utilities/reusedOptions.js.map +1 -1
- package/package.json +12 -12
- package/lib/utilities/parseBundleMode.d.ts +0 -4
- package/lib/utilities/parseBundleMode.d.ts.map +0 -1
- package/lib/utilities/parseBundleMode.js +0 -18
- package/lib/utilities/parseBundleMode.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/bundle/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAK9E,iCAAiC;AACjC,eAAO,MAAM,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/bundle/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAK9E,iCAAiC;AACjC,eAAO,MAAM,IAAI,EAAE,mBAuBlB,CAAC"}
|
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
import { InvalidArgumentError, Option } from 'commander';
|
|
2
2
|
import { parseMatch } from '../../utilities/parseMatch.js';
|
|
3
|
-
import {
|
|
3
|
+
import { reusedOptions } from '../../utilities/reusedOptions.js';
|
|
4
4
|
/** Defines the "bundle" verb. */
|
|
5
5
|
export const init = (program) => {
|
|
6
6
|
program.addSubCommand({
|
|
7
7
|
name: 'bundle',
|
|
8
8
|
description: 'Bundles a package.',
|
|
9
9
|
options: {
|
|
10
|
-
mode:
|
|
11
|
-
|
|
12
|
-
.default('library'),
|
|
13
|
-
bundler: new Option('--bundler <name>', 'Forces use of a specific bundler.'),
|
|
10
|
+
mode: reusedOptions.mode({ action: 'bundle' }),
|
|
11
|
+
bundler: new Option('--bundler <name>', 'Force using a specific bundler.').choices(['ori', 'rollup', 'webpack']),
|
|
14
12
|
match: new Option('--match <match...>', 'Bundle specific package(s), optionally with a version: e.g. "foo", "@foo/*", "foo@1.2.3"').argParser(parseMatch),
|
|
15
13
|
package: new Option('--package <package>').hideHelp().argParser(() => {
|
|
16
14
|
throw new InvalidArgumentError('Use --match instead of --package');
|
|
17
15
|
}),
|
|
18
|
-
outdir: new Option('--outdir <path>', 'Path
|
|
19
|
-
'
|
|
20
|
-
disableSourceMaps: new Option('--disable-source-maps', '
|
|
16
|
+
outdir: new Option('--outdir <path>', 'Path for the bundle output, relative to current path (or the resolved path to --package if specified). ' +
|
|
17
|
+
'Default is a path under the cloudpack cache.'),
|
|
18
|
+
disableSourceMaps: new Option('--disable-source-maps', 'Disable source maps.'),
|
|
21
19
|
},
|
|
22
20
|
getExecutor: () => import('./execute.js'),
|
|
23
21
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/bundle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/bundle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,iCAAiC;AACjC,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,aAAa,CAAgB;QACnC,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oBAAoB;QACjC,OAAO,EAAE;YACP,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YAC9C,OAAO,EAAE,IAAI,MAAM,CAAC,kBAAkB,EAAE,iCAAiC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YAChH,KAAK,EAAE,IAAI,MAAM,CACf,oBAAoB,EACpB,0FAA0F,CAC3F,CAAC,SAAS,CAAC,UAAU,CAAC;YACvB,OAAO,EAAE,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE;gBACnE,MAAM,IAAI,oBAAoB,CAAC,kCAAkC,CAAC,CAAC;YACrE,CAAC,CAAC;YACF,MAAM,EAAE,IAAI,MAAM,CAChB,iBAAiB,EACjB,yGAAyG;gBACvG,8CAA8C,CACjD;YACD,iBAAiB,EAAE,IAAI,MAAM,CAAC,uBAAuB,EAAE,sBAAsB,CAAC;SAC/E;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { InvalidArgumentError, Option } from 'commander';\nimport type { CommandInitFunction } from '../../types/CommandInitFunction.js';\nimport type { BundleOptions } from './types/BundleOptions.js';\nimport { parseMatch } from '../../utilities/parseMatch.js';\nimport { reusedOptions } from '../../utilities/reusedOptions.js';\n\n/** Defines the \"bundle\" verb. */\nexport const init: CommandInitFunction = (program) => {\n program.addSubCommand<BundleOptions>({\n name: 'bundle',\n description: 'Bundles a package.',\n options: {\n mode: reusedOptions.mode({ action: 'bundle' }),\n bundler: new Option('--bundler <name>', 'Force using a specific bundler.').choices(['ori', 'rollup', 'webpack']),\n match: new Option(\n '--match <match...>',\n 'Bundle specific package(s), optionally with a version: e.g. \"foo\", \"@foo/*\", \"foo@1.2.3\"',\n ).argParser(parseMatch),\n package: new Option('--package <package>').hideHelp().argParser(() => {\n throw new InvalidArgumentError('Use --match instead of --package');\n }),\n outdir: new Option(\n '--outdir <path>',\n 'Path for the bundle output, relative to current path (or the resolved path to --package if specified). ' +\n 'Default is a path under the cloudpack cache.',\n ),\n disableSourceMaps: new Option('--disable-source-maps', 'Disable source maps.'),\n },\n getExecutor: () => import('./execute.js'),\n });\n};\n"]}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { BundleMode, PackageSettingsMatch } from '@ms-cloudpack/common-types';
|
|
2
2
|
export interface BundleOptions {
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Force using a specific bundler (ori/rollup/webpack).
|
|
5
|
+
*
|
|
6
|
+
* Default is automatically choosing the bundler based on package contents, unless there any
|
|
7
|
+
* relevant package settings specify a bundler.
|
|
5
8
|
*/
|
|
6
9
|
bundler?: string;
|
|
7
10
|
/**
|
|
@@ -9,7 +12,7 @@ export interface BundleOptions {
|
|
|
9
12
|
*/
|
|
10
13
|
disableSourceMaps?: boolean;
|
|
11
14
|
/**
|
|
12
|
-
* Path
|
|
15
|
+
* Path for the bundle output. This is usually relative to the app path.
|
|
13
16
|
* If `package` is set, it's relative to the package path.
|
|
14
17
|
*
|
|
15
18
|
* If not set, the bundle output is dropped in the default path under the cloudpack cache.
|
|
@@ -23,7 +26,7 @@ export interface BundleOptions {
|
|
|
23
26
|
* If set, only evaluate matching packages.
|
|
24
27
|
*/
|
|
25
28
|
match?: PackageSettingsMatch[];
|
|
26
|
-
/** The mode to bundle in
|
|
29
|
+
/** The mode to bundle in. */
|
|
27
30
|
mode: BundleMode;
|
|
28
31
|
}
|
|
29
32
|
//# sourceMappingURL=BundleOptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BundleOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/bundle/types/BundleOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEnF,MAAM,WAAW,aAAa;IAC5B
|
|
1
|
+
{"version":3,"file":"BundleOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/bundle/types/BundleOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEnF,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAE/B,6BAA6B;IAC7B,IAAI,EAAE,UAAU,CAAC;CAClB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BundleOptions.js","sourceRoot":"","sources":["../../../../src/commands/bundle/types/BundleOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { BundleMode, PackageSettingsMatch } from '@ms-cloudpack/common-types';\n\nexport interface BundleOptions {\n /**\n *
|
|
1
|
+
{"version":3,"file":"BundleOptions.js","sourceRoot":"","sources":["../../../../src/commands/bundle/types/BundleOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { BundleMode, PackageSettingsMatch } from '@ms-cloudpack/common-types';\n\nexport interface BundleOptions {\n /**\n * Force using a specific bundler (ori/rollup/webpack).\n *\n * Default is automatically choosing the bundler based on package contents, unless there any\n * relevant package settings specify a bundler.\n */\n bundler?: string;\n\n /**\n * Disables source maps.\n */\n disableSourceMaps?: boolean;\n\n /**\n * Path for the bundle output. This is usually relative to the app path.\n * If `package` is set, it's relative to the package path.\n *\n * If not set, the bundle output is dropped in the default path under the cloudpack cache.\n */\n outdir?: string;\n\n /**\n * @deprecated Removed in favor of `match`.\n */\n package?: string;\n\n /**\n * If set, only evaluate matching packages.\n */\n match?: PackageSettingsMatch[];\n\n /** The mode to bundle in. */\n mode: BundleMode;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluateImportsForOverrides.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,WAAW,EAGZ,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"evaluateImportsForOverrides.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,WAAW,EAGZ,MAAM,4BAA4B,CAAC;AAMpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAUlE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAMlF;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC;IACV,kDAAkD;IAClD,cAAc,EAAE,uBAAuB,EAAE,CAAC;IAC1C,iEAAiE;IACjE,2BAA2B,EAAE,uBAAuB,EAAE,CAAC;IACvD,6BAA6B;IAC7B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,6BAA6B;IAC7B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,4EAA4E;IAC5E,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,GAAG,SAAS,CAAC,CAAC;IACjE,6FAA6F;IAC7F,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B,CAAC,CAoQD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ensureGeneratedSettingsForPackage, getGeneratedPackageSettings } from '@ms-cloudpack/config';
|
|
1
|
+
import { ensureGeneratedSettingsForPackage, getGeneratedPackageSettings, getPackageSettings, } from '@ms-cloudpack/config';
|
|
2
2
|
import { addExportsMapEntry, ensureResolveMapEntry, flattenExportsMap, getDependencies, getUnusedDependencies, getExportsMap, } from '@ms-cloudpack/package-utilities';
|
|
3
3
|
import { bulletedList, cyan } from '@ms-cloudpack/task-reporter';
|
|
4
4
|
import { isBuiltin } from 'module';
|
|
@@ -25,8 +25,18 @@ export async function evaluateImportsForOverrides(options) {
|
|
|
25
25
|
const dependencies = getDependencies(definition);
|
|
26
26
|
const unusedDependencies = getUnusedDependencies(definition);
|
|
27
27
|
const consumedPaths = getConsumedPaths(info);
|
|
28
|
+
const userExcludedDependencies = getPackageSettings({
|
|
29
|
+
name: packageName,
|
|
30
|
+
version: packageVersion,
|
|
31
|
+
userPackageSettings: config.packageSettings,
|
|
32
|
+
generatedPackageSettings: undefined,
|
|
33
|
+
}).userPackageSettings?.excludedDependencies;
|
|
28
34
|
// Iterate through imports and find their path from the resolve map.
|
|
29
35
|
for (const [dependencyName, dependencyImportPaths] of Object.entries(consumedPaths)) {
|
|
36
|
+
// If the dependency is excluded in the user settings, entirely ignore it.
|
|
37
|
+
if (userExcludedDependencies?.includes(dependencyName)) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
30
40
|
// Check if we can resolve the dependency.
|
|
31
41
|
// If we included or removed an excluded dependency, we need to ensure it is in the resolve map.
|
|
32
42
|
const { dependencyPath, updatedResolution } = await ensureResolveMapEntry({
|
|
@@ -43,6 +53,7 @@ export async function evaluateImportsForOverrides(options) {
|
|
|
43
53
|
continue;
|
|
44
54
|
}
|
|
45
55
|
const dependencyDefinition = await packages.get(dependencyPath);
|
|
56
|
+
let generatedPackageSettings;
|
|
46
57
|
// If the dependency is not listed, add to includedDependencies.
|
|
47
58
|
if (!dependencies[dependencyName] && dependencyName !== definition.name && !neverExclude(dependencyName, config)) {
|
|
48
59
|
// Survive from the case where it is not a dependency in the package.json
|
|
@@ -52,8 +63,8 @@ export async function evaluateImportsForOverrides(options) {
|
|
|
52
63
|
}
|
|
53
64
|
// Make sure to add the package to the list of packages to evaluate.
|
|
54
65
|
pathsToEvaluate.set(packagePath, importerContext);
|
|
55
|
-
// Add to includedDependencies
|
|
56
|
-
|
|
66
|
+
// Add to includedDependencies if appropriate.
|
|
67
|
+
generatedPackageSettings ??= await ensureGeneratedSettingsForPackage({ packagePath }, { config, packages });
|
|
57
68
|
// We can skip including the dependency if it is already excluded.
|
|
58
69
|
// This will be handled later during optimize dependencies.
|
|
59
70
|
const handledByOptimize = generatedPackageSettings.excludedDependencies?.includes(dependencyName);
|
|
@@ -102,13 +113,12 @@ export async function evaluateImportsForOverrides(options) {
|
|
|
102
113
|
// Use the generated snapshot to get the previous package settings.
|
|
103
114
|
generatedPackageSettings: config.generatedSnapshot?.packageSettings,
|
|
104
115
|
})?.exports;
|
|
105
|
-
let generatedPackageSettings;
|
|
106
116
|
// iterate through all the import paths.
|
|
107
117
|
for (const dependencyImportPath of dependencyImportPaths) {
|
|
108
118
|
// Imports from paths with trailing slashes are not supported in the exports map.
|
|
109
119
|
if (dependencyImportPath.endsWith('/')) {
|
|
110
120
|
errors.push({
|
|
111
|
-
text: `The import path "${dependencyImportPath}" from "${dependencyName}"
|
|
121
|
+
text: `The import path "${dependencyImportPath}" from "${dependencyName}" has a trailing slash, which is not supported.`,
|
|
112
122
|
source: 'evaluate imports',
|
|
113
123
|
location: { file: packagePath },
|
|
114
124
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluateImportsForOverrides.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BundleInfo } from '@ms-cloudpack/api-server';\nimport type {\n BundleMessage,\n CloudpackConfig,\n PackageDefinitionsCache,\n PackageImporterContext,\n PackageJson,\n PackageJsonExportsObject,\n GeneratedPackageSettings,\n} from '@ms-cloudpack/common-types';\nimport { ensureGeneratedSettingsForPackage, getGeneratedPackageSettings } from '@ms-cloudpack/config';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport {\n addExportsMapEntry,\n ensureResolveMapEntry,\n flattenExportsMap,\n getDependencies,\n getUnusedDependencies,\n getExportsMap,\n} from '@ms-cloudpack/package-utilities';\nimport { bulletedList, cyan } from '@ms-cloudpack/task-reporter';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport { isBuiltin } from 'module';\nimport { getConsumedPaths } from '@ms-cloudpack/api-server';\nimport { neverExclude } from './neverExclude.js';\nimport path from 'path';\n\n/**\n * Evaluate the imports depended on by a package to determine if missing exports map paths need to be added.\n * If so, updates package overrides in the config.\n */\nexport async function evaluateImportsForOverrides(options: {\n packages: PackageDefinitionsCache;\n info: BundleInfo;\n definition: PackageJson;\n packagePath: string;\n /** Config so far. This will be modified if new overrides are needed. */\n config: CloudpackConfig;\n resolveMap: ResolveMap;\n importerContext: PackageImporterContext | undefined;\n appPath: string;\n}): Promise<{\n /** Export changes made to the generated config */\n exportsChanges: GeneratedPackageChanges[];\n /** Included dependencies changes made to the generated config */\n includedDependenciesChanges: GeneratedPackageChanges[];\n /** Any errors encountered */\n errors: BundleMessage[];\n /** Any warnings generated */\n warnings: BundleMessage[];\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}> {\n const { packages, info, definition, packagePath, config, resolveMap, importerContext, appPath } = options;\n\n const { name: packageName, version: packageVersion } = definition;\n const displayName = `${packageName}@${packageVersion}`;\n if (!packageName || !packageVersion) {\n throw new Error(`Package \"${displayName}\" is missing a name or version.`);\n }\n\n const exportsChanges: GeneratedPackageChanges[] = [];\n const includedDependenciesChanges: GeneratedPackageChanges[] = [];\n const errors: BundleMessage[] = [];\n const warnings: BundleMessage[] = [];\n const pathsToEvaluate = new Map<string, PackageImporterContext | undefined>();\n const pathsToRefresh = new Set<string>();\n const dependencies = getDependencies(definition);\n const unusedDependencies = getUnusedDependencies(definition);\n const consumedPaths = getConsumedPaths(info);\n\n // Iterate through imports and find their path from the resolve map.\n for (const [dependencyName, dependencyImportPaths] of Object.entries(consumedPaths)) {\n // Check if we can resolve the dependency.\n // If we included or removed an excluded dependency, we need to ensure it is in the resolve map.\n const { dependencyPath, updatedResolution } = await ensureResolveMapEntry(\n {\n definition,\n packagePath,\n dependencyName,\n resolveMap,\n appPath,\n },\n { packages },\n );\n\n // If the dependency is not resolved, add an error.\n if (!dependencyPath) {\n errors.push(getMissingDepMessage({ dependencyName, displayName, issueType: 'not-found', packagePath }));\n // If the dependency is not resolved, we can't continue to evaluate it.\n continue;\n }\n\n const dependencyDefinition = await packages.get(dependencyPath);\n\n // If the dependency is not listed, add to includedDependencies.\n if (!dependencies[dependencyName] && dependencyName !== definition.name && !neverExclude(dependencyName, config)) {\n // Survive from the case where it is not a dependency in the package.json\n // and it is resolvable, but warn the user.\n if (!unusedDependencies[dependencyName]) {\n warnings.push(getMissingDepMessage({ dependencyName, displayName, issueType: 'undeclared', packagePath }));\n }\n // Make sure to add the package to the list of packages to evaluate.\n pathsToEvaluate.set(packagePath, importerContext);\n\n // Add to includedDependencies\n const generatedPackageSettings = await ensureGeneratedSettingsForPackage({ packagePath }, { config, packages });\n\n // We can skip including the dependency if it is already excluded.\n // This will be handled later during optimize dependencies.\n const handledByOptimize = generatedPackageSettings.excludedDependencies?.includes(dependencyName);\n\n // Add to includedDependencies if it is not already included.\n if (!handledByOptimize && !generatedPackageSettings.includedDependencies?.includes(dependencyName)) {\n generatedPackageSettings.includedDependencies ??= [];\n generatedPackageSettings.includedDependencies.push(dependencyName);\n\n includedDependenciesChanges.push({\n name: packageName,\n version: packageVersion,\n path: packagePath,\n changes: [\n {\n type: `included-dependency${updatedResolution ? '-required' : '-optional'}`,\n change: dependencyName,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n }\n }\n\n const { version } = dependencyDefinition;\n\n // Ensure we use the correct context when evaluating this dependency.\n let dependencyImporterContext: PackageImporterContext | undefined;\n if (dependencyName === packageName) {\n // Self-import (we may still need to evaluate the paths). Use the importer context from options.\n dependencyImporterContext = importerContext;\n } else if (dependencies[dependencyName]) {\n dependencyImporterContext = {\n parentName: packageName,\n parentVersion: packageVersion,\n importedName: dependencyName,\n versionRequirement: dependencies[dependencyName],\n };\n }\n\n // Add the dependency to the list of packages to evaluate.\n pathsToEvaluate.set(dependencyPath, dependencyImporterContext);\n\n // A flattened, bundle-able exports map for this dependency, which is \"built up\" over the course of bundling.\n const workingDependencyExportsList = flattenExportsMap(\n await getExportsMap({ packagePath: dependencyPath }, { packages, config }),\n );\n // The official list of exports claimed by this dependency -- used to determine which exports are never used, so we can drop them.\n const canonicalDependencyExports = flattenExportsMap(\n await getExportsMap({ packagePath: dependencyPath, disableTransforms: true }, { packages, config }),\n );\n\n const initiallyNullExports = getGeneratedPackageSettings({\n name: dependencyName,\n version,\n // Use the generated snapshot to get the previous package settings.\n generatedPackageSettings: config.generatedSnapshot?.packageSettings,\n })?.exports as Record<string, unknown>;\n\n let generatedPackageSettings: GeneratedPackageSettings | undefined;\n // iterate through all the import paths.\n for (const dependencyImportPath of dependencyImportPaths) {\n // Imports from paths with trailing slashes are not supported in the exports map.\n if (dependencyImportPath.endsWith('/')) {\n errors.push({\n text: `The import path \"${dependencyImportPath}\" from \"${dependencyName}\" ends with a trailing slash, which is not supported.`,\n source: 'evaluate imports',\n location: { file: packagePath },\n });\n continue;\n }\n\n if (!config.features?.removeUnusedExports) {\n const dependencyAlreadyBundled = workingDependencyExportsList[dependencyImportPath];\n if (dependencyAlreadyBundled) {\n continue;\n }\n }\n\n if (!generatedPackageSettings) {\n // Start with the package's exports all set to null (indicating they are never imported)\n // If this changes, we'll update the generatedPackageSetting accordingly later.\n const nullifiedExports = config.features?.removeUnusedExports\n ? Object.fromEntries(Object.keys(canonicalDependencyExports).map((k) => [k, null]))\n : {};\n\n generatedPackageSettings = await ensureGeneratedSettingsForPackage(\n {\n packagePath: dependencyPath,\n defaultExportsMap: Object.keys(nullifiedExports).length > 0 ? nullifiedExports : undefined,\n },\n { config, packages },\n );\n }\n\n if (config.features?.removeUnusedExports) {\n const importHasCorrespondingExport = !!canonicalDependencyExports[dependencyImportPath];\n if (importHasCorrespondingExport) {\n // We're about to remove a null export. Before we do, check if it was initially null in\n // the generated config; if so, we need to track the change so that --check exits correctly\n if (dependencyImportPath in (initiallyNullExports || {})) {\n exportsChanges.push({\n name: dependencyName,\n version: dependencyDefinition.version,\n path: dependencyPath,\n changes: [\n {\n type: 'changed-export',\n change: dependencyImportPath,\n reason: `\"${dependencyImportPath}\" was previously an unused export; is now used.`,\n },\n ],\n });\n }\n\n // Since dependencyImportPath is used (and presently set to null),\n // and since we now know it has a corresponding export,\n // delete it from generatePackageSettings.exports so it doesn't get dropped from the bundle\n const deleteSucceeded = deleteExport(\n // Even though PackageJsonExports can \"technically\" be an object or an array, we never expect\n // it to be an array when it comes from generatedPackageSettings\n generatedPackageSettings.exports as PackageJsonExportsObject,\n dependencyImportPath,\n );\n\n if (deleteSucceeded) {\n // If there was actually an export to delete, mark this path for re-evaluation.\n pathsToRefresh.add(dependencyPath);\n\n // Delete the entire exports key if it now has zero entries\n if (Object.keys(generatedPackageSettings.exports ?? {}).length === 0) {\n delete generatedPackageSettings.exports;\n }\n }\n continue;\n }\n }\n\n const dependencyAlreadyBundled = workingDependencyExportsList[dependencyImportPath];\n if (dependencyAlreadyBundled) {\n continue;\n }\n\n generatedPackageSettings.exports ??= {};\n\n const addedEntry = await addExportsMapEntry(\n {\n exports: generatedPackageSettings.exports,\n packagePath: dependencyPath,\n importPath: dependencyImportPath,\n },\n { packages, config },\n );\n\n if (addedEntry) {\n exportsChanges.push({\n name: dependencyName,\n version: dependencyDefinition.version,\n path: dependencyPath,\n changes: [\n {\n type: 'added-export',\n change: dependencyImportPath,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n\n // Since we've found a missing export, we need to re-enqueue the dependency for evaluation.\n pathsToRefresh.add(dependencyPath);\n } else {\n const text =\n `An import couldn't be resolved to a physical file. ` +\n `Check that the import refers to a file that's exported by the package or adjust the \"${cyan(\n dependencyName,\n )}\" package version to one that supports this import path.\\n${bulletedList(\n [\n `Import: ${cyan(dependencyImportPath.replace('.', dependencyName))}`,\n `Resolved to: ${dependencyName}@${version} (${dependencyImportPath})`,\n ],\n 2,\n )}`;\n errors.push({\n text,\n source: 'evaluate imports',\n location: { file: packagePath },\n });\n }\n }\n }\n\n return { exportsChanges, includedDependenciesChanges, errors, warnings, pathsToEvaluate, pathsToRefresh };\n}\n\nfunction deleteExport(exports: PackageJsonExportsObject | undefined, key: string): boolean {\n let deleteSucceeded = false;\n if (exports) {\n deleteSucceeded = key in exports;\n delete exports[key];\n }\n return deleteSucceeded;\n}\n\nfunction getMissingDepMessage(params: {\n dependencyName: string;\n displayName: string;\n issueType: 'not-found' | 'undeclared';\n packagePath: string;\n}): BundleMessage {\n const { dependencyName, displayName, issueType, packagePath } = params;\n\n let text: string;\n if (isBuiltin(dependencyName)) {\n text =\n `The node built-in \"${dependencyName}\" is being imported by \"${displayName}\", ` +\n `but no browser-friendly version was found in the package's dependencies. ` +\n `This can be fixed by forcing \"${displayName}\" to use \"bundler\": \"rollup\" in package settings, ` +\n `or by adding a polyfill browser-friendly dependency.`;\n } else {\n text = `The package \"${dependencyName}\" is imported by \"${displayName}\", but ${\n issueType === 'not-found' ? \"it couldn't be found\" : \"it's not included in the package's dependencies\"\n }. Please ensure that \"${dependencyName}\" is listed in the dependencies of \"${displayName}\"${\n issueType === 'undeclared' ? ` or add it to \"includedDependencies\" for \"${displayName}\" in package settings.` : ''\n }.`;\n }\n\n return {\n text,\n source: 'evaluate imports',\n location: { file: path.join(packagePath, 'package.json') },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"evaluateImportsForOverrides.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BundleInfo } from '@ms-cloudpack/api-server';\nimport type {\n BundleMessage,\n CloudpackConfig,\n PackageDefinitionsCache,\n PackageImporterContext,\n PackageJson,\n PackageJsonExportsObject,\n GeneratedPackageSettings,\n} from '@ms-cloudpack/common-types';\nimport {\n ensureGeneratedSettingsForPackage,\n getGeneratedPackageSettings,\n getPackageSettings,\n} from '@ms-cloudpack/config';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport {\n addExportsMapEntry,\n ensureResolveMapEntry,\n flattenExportsMap,\n getDependencies,\n getUnusedDependencies,\n getExportsMap,\n} from '@ms-cloudpack/package-utilities';\nimport { bulletedList, cyan } from '@ms-cloudpack/task-reporter';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport { isBuiltin } from 'module';\nimport { getConsumedPaths } from '@ms-cloudpack/api-server';\nimport { neverExclude } from './neverExclude.js';\nimport path from 'path';\n\n/**\n * Evaluate the imports depended on by a package to determine if missing exports map paths need to be added.\n * If so, updates package overrides in the config.\n */\nexport async function evaluateImportsForOverrides(options: {\n packages: PackageDefinitionsCache;\n info: BundleInfo;\n definition: PackageJson;\n packagePath: string;\n /** Config so far. This will be modified if new overrides are needed. */\n config: CloudpackConfig;\n resolveMap: ResolveMap;\n importerContext: PackageImporterContext | undefined;\n appPath: string;\n}): Promise<{\n /** Export changes made to the generated config */\n exportsChanges: GeneratedPackageChanges[];\n /** Included dependencies changes made to the generated config */\n includedDependenciesChanges: GeneratedPackageChanges[];\n /** Any errors encountered */\n errors: BundleMessage[];\n /** Any warnings generated */\n warnings: BundleMessage[];\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}> {\n const { packages, info, definition, packagePath, config, resolveMap, importerContext, appPath } = options;\n\n const { name: packageName, version: packageVersion } = definition;\n const displayName = `${packageName}@${packageVersion}`;\n if (!packageName || !packageVersion) {\n throw new Error(`Package \"${displayName}\" is missing a name or version.`);\n }\n\n const exportsChanges: GeneratedPackageChanges[] = [];\n const includedDependenciesChanges: GeneratedPackageChanges[] = [];\n const errors: BundleMessage[] = [];\n const warnings: BundleMessage[] = [];\n const pathsToEvaluate = new Map<string, PackageImporterContext | undefined>();\n const pathsToRefresh = new Set<string>();\n const dependencies = getDependencies(definition);\n const unusedDependencies = getUnusedDependencies(definition);\n const consumedPaths = getConsumedPaths(info);\n const userExcludedDependencies = getPackageSettings({\n name: packageName,\n version: packageVersion,\n userPackageSettings: config.packageSettings,\n generatedPackageSettings: undefined,\n }).userPackageSettings?.excludedDependencies;\n\n // Iterate through imports and find their path from the resolve map.\n for (const [dependencyName, dependencyImportPaths] of Object.entries(consumedPaths)) {\n // If the dependency is excluded in the user settings, entirely ignore it.\n if (userExcludedDependencies?.includes(dependencyName)) {\n continue;\n }\n\n // Check if we can resolve the dependency.\n // If we included or removed an excluded dependency, we need to ensure it is in the resolve map.\n const { dependencyPath, updatedResolution } = await ensureResolveMapEntry(\n {\n definition,\n packagePath,\n dependencyName,\n resolveMap,\n appPath,\n },\n { packages },\n );\n\n // If the dependency is not resolved, add an error.\n if (!dependencyPath) {\n errors.push(getMissingDepMessage({ dependencyName, displayName, issueType: 'not-found', packagePath }));\n // If the dependency is not resolved, we can't continue to evaluate it.\n continue;\n }\n\n const dependencyDefinition = await packages.get(dependencyPath);\n\n let generatedPackageSettings: GeneratedPackageSettings | undefined;\n\n // If the dependency is not listed, add to includedDependencies.\n if (!dependencies[dependencyName] && dependencyName !== definition.name && !neverExclude(dependencyName, config)) {\n // Survive from the case where it is not a dependency in the package.json\n // and it is resolvable, but warn the user.\n if (!unusedDependencies[dependencyName]) {\n warnings.push(getMissingDepMessage({ dependencyName, displayName, issueType: 'undeclared', packagePath }));\n }\n // Make sure to add the package to the list of packages to evaluate.\n pathsToEvaluate.set(packagePath, importerContext);\n\n // Add to includedDependencies if appropriate.\n generatedPackageSettings ??= await ensureGeneratedSettingsForPackage({ packagePath }, { config, packages });\n\n // We can skip including the dependency if it is already excluded.\n // This will be handled later during optimize dependencies.\n const handledByOptimize = generatedPackageSettings.excludedDependencies?.includes(dependencyName);\n\n // Add to includedDependencies if it is not already included.\n if (!handledByOptimize && !generatedPackageSettings.includedDependencies?.includes(dependencyName)) {\n generatedPackageSettings.includedDependencies ??= [];\n generatedPackageSettings.includedDependencies.push(dependencyName);\n\n includedDependenciesChanges.push({\n name: packageName,\n version: packageVersion,\n path: packagePath,\n changes: [\n {\n type: `included-dependency${updatedResolution ? '-required' : '-optional'}`,\n change: dependencyName,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n }\n }\n\n const { version } = dependencyDefinition;\n\n // Ensure we use the correct context when evaluating this dependency.\n let dependencyImporterContext: PackageImporterContext | undefined;\n if (dependencyName === packageName) {\n // Self-import (we may still need to evaluate the paths). Use the importer context from options.\n dependencyImporterContext = importerContext;\n } else if (dependencies[dependencyName]) {\n dependencyImporterContext = {\n parentName: packageName,\n parentVersion: packageVersion,\n importedName: dependencyName,\n versionRequirement: dependencies[dependencyName],\n };\n }\n\n // Add the dependency to the list of packages to evaluate.\n pathsToEvaluate.set(dependencyPath, dependencyImporterContext);\n\n // A flattened, bundle-able exports map for this dependency, which is \"built up\" over the course of bundling.\n const workingDependencyExportsList = flattenExportsMap(\n await getExportsMap({ packagePath: dependencyPath }, { packages, config }),\n );\n // The official list of exports claimed by this dependency -- used to determine which exports are never used, so we can drop them.\n const canonicalDependencyExports = flattenExportsMap(\n await getExportsMap({ packagePath: dependencyPath, disableTransforms: true }, { packages, config }),\n );\n\n const initiallyNullExports = getGeneratedPackageSettings({\n name: dependencyName,\n version,\n // Use the generated snapshot to get the previous package settings.\n generatedPackageSettings: config.generatedSnapshot?.packageSettings,\n })?.exports as Record<string, unknown>;\n\n // iterate through all the import paths.\n for (const dependencyImportPath of dependencyImportPaths) {\n // Imports from paths with trailing slashes are not supported in the exports map.\n if (dependencyImportPath.endsWith('/')) {\n errors.push({\n text: `The import path \"${dependencyImportPath}\" from \"${dependencyName}\" has a trailing slash, which is not supported.`,\n source: 'evaluate imports',\n location: { file: packagePath },\n });\n continue;\n }\n\n if (!config.features?.removeUnusedExports) {\n const dependencyAlreadyBundled = workingDependencyExportsList[dependencyImportPath];\n if (dependencyAlreadyBundled) {\n continue;\n }\n }\n\n if (!generatedPackageSettings) {\n // Start with the package's exports all set to null (indicating they are never imported)\n // If this changes, we'll update the generatedPackageSetting accordingly later.\n const nullifiedExports = config.features?.removeUnusedExports\n ? Object.fromEntries(Object.keys(canonicalDependencyExports).map((k) => [k, null]))\n : {};\n\n generatedPackageSettings = await ensureGeneratedSettingsForPackage(\n {\n packagePath: dependencyPath,\n defaultExportsMap: Object.keys(nullifiedExports).length > 0 ? nullifiedExports : undefined,\n },\n { config, packages },\n );\n }\n\n if (config.features?.removeUnusedExports) {\n const importHasCorrespondingExport = !!canonicalDependencyExports[dependencyImportPath];\n if (importHasCorrespondingExport) {\n // We're about to remove a null export. Before we do, check if it was initially null in\n // the generated config; if so, we need to track the change so that --check exits correctly\n if (dependencyImportPath in (initiallyNullExports || {})) {\n exportsChanges.push({\n name: dependencyName,\n version: dependencyDefinition.version,\n path: dependencyPath,\n changes: [\n {\n type: 'changed-export',\n change: dependencyImportPath,\n reason: `\"${dependencyImportPath}\" was previously an unused export; is now used.`,\n },\n ],\n });\n }\n\n // Since dependencyImportPath is used (and presently set to null),\n // and since we now know it has a corresponding export,\n // delete it from generatePackageSettings.exports so it doesn't get dropped from the bundle\n const deleteSucceeded = deleteExport(\n // Even though PackageJsonExports can \"technically\" be an object or an array, we never expect\n // it to be an array when it comes from generatedPackageSettings\n generatedPackageSettings.exports as PackageJsonExportsObject,\n dependencyImportPath,\n );\n\n if (deleteSucceeded) {\n // If there was actually an export to delete, mark this path for re-evaluation.\n pathsToRefresh.add(dependencyPath);\n\n // Delete the entire exports key if it now has zero entries\n if (Object.keys(generatedPackageSettings.exports ?? {}).length === 0) {\n delete generatedPackageSettings.exports;\n }\n }\n continue;\n }\n }\n\n const dependencyAlreadyBundled = workingDependencyExportsList[dependencyImportPath];\n if (dependencyAlreadyBundled) {\n continue;\n }\n\n generatedPackageSettings.exports ??= {};\n\n const addedEntry = await addExportsMapEntry(\n {\n exports: generatedPackageSettings.exports,\n packagePath: dependencyPath,\n importPath: dependencyImportPath,\n },\n { packages, config },\n );\n\n if (addedEntry) {\n exportsChanges.push({\n name: dependencyName,\n version: dependencyDefinition.version,\n path: dependencyPath,\n changes: [\n {\n type: 'added-export',\n change: dependencyImportPath,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n\n // Since we've found a missing export, we need to re-enqueue the dependency for evaluation.\n pathsToRefresh.add(dependencyPath);\n } else {\n const text =\n `An import couldn't be resolved to a physical file. ` +\n `Check that the import refers to a file that's exported by the package or adjust the \"${cyan(\n dependencyName,\n )}\" package version to one that supports this import path.\\n${bulletedList(\n [\n `Import: ${cyan(dependencyImportPath.replace('.', dependencyName))}`,\n `Resolved to: ${dependencyName}@${version} (${dependencyImportPath})`,\n ],\n 2,\n )}`;\n errors.push({\n text,\n source: 'evaluate imports',\n location: { file: packagePath },\n });\n }\n }\n }\n\n return { exportsChanges, includedDependenciesChanges, errors, warnings, pathsToEvaluate, pathsToRefresh };\n}\n\nfunction deleteExport(exports: PackageJsonExportsObject | undefined, key: string): boolean {\n let deleteSucceeded = false;\n if (exports) {\n deleteSucceeded = key in exports;\n delete exports[key];\n }\n return deleteSucceeded;\n}\n\nfunction getMissingDepMessage(params: {\n dependencyName: string;\n displayName: string;\n issueType: 'not-found' | 'undeclared';\n packagePath: string;\n}): BundleMessage {\n const { dependencyName, displayName, issueType, packagePath } = params;\n\n let text: string;\n if (isBuiltin(dependencyName)) {\n text =\n `The node built-in \"${dependencyName}\" is being imported by \"${displayName}\", ` +\n `but no browser-friendly version was found in the package's dependencies. ` +\n `This can be fixed by forcing \"${displayName}\" to use \"bundler\": \"rollup\" in package settings, ` +\n `or by adding a polyfill browser-friendly dependency.`;\n } else {\n text = `The package \"${dependencyName}\" is imported by \"${displayName}\", but ${\n issueType === 'not-found' ? \"it couldn't be found\" : \"it's not included in the package's dependencies\"\n }. Please ensure that \"${dependencyName}\" is listed in the dependencies of \"${displayName}\"${\n issueType === 'undeclared' ? ` or add it to \"includedDependencies\" for \"${displayName}\" in package settings.` : ''\n }.`;\n }\n\n return {\n text,\n source: 'evaluate imports',\n location: { file: path.join(packagePath, 'package.json') },\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAK9E,+BAA+B;AAC/B,eAAO,MAAM,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAK9E,+BAA+B;AAC/B,eAAO,MAAM,IAAI,EAAE,mBAoBlB,CAAC"}
|
|
@@ -5,11 +5,12 @@ import { reusedOptions } from '../../utilities/reusedOptions.js';
|
|
|
5
5
|
export const init = (program) => {
|
|
6
6
|
program.addSubCommand({
|
|
7
7
|
name: 'init',
|
|
8
|
-
description: '
|
|
8
|
+
description: "Validate an app's compatibility with Cloudpack, and generate any necessary " +
|
|
9
|
+
'configuration overrides (cloudpack.generated.json).',
|
|
9
10
|
options: {
|
|
10
11
|
logResolveMap: reusedOptions.logResolveMap(),
|
|
11
|
-
reset: new Option('--reset', '
|
|
12
|
-
check: new Option('--check', '
|
|
12
|
+
reset: new Option('--reset', 'Ignore the previous generated config.').conflicts('check'),
|
|
13
|
+
check: new Option('--check', 'Fail if updates to the generated config are required.').conflicts('reset'),
|
|
13
14
|
match: new Option('--match <match...>', 'Only evaluate specific package(s), optionally with a version: e.g. "foo", "@foo/*", "foo@1.2.3"')
|
|
14
15
|
.conflicts('reset')
|
|
15
16
|
.argParser(parseMatch),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,aAAa,CAAc;QACjC,IAAI,EAAE,MAAM;QACZ,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,aAAa,CAAc;QACjC,IAAI,EAAE,MAAM;QACZ,WAAW,EACT,6EAA6E;YAC7E,qDAAqD;QACvD,OAAO,EAAE;YACP,aAAa,EAAE,aAAa,CAAC,aAAa,EAAE;YAC5C,KAAK,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;YACxF,KAAK,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,uDAAuD,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;YACxG,KAAK,EAAE,IAAI,MAAM,CACf,oBAAoB,EACpB,iGAAiG,CAClG;iBACE,SAAS,CAAC,OAAO,CAAC;iBAClB,SAAS,CAAC,UAAU,CAAC;YACxB,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE;SAC/B;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { Option } from 'commander';\nimport type { CommandInitFunction } from '../../types/CommandInitFunction.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport { parseMatch } from '../../utilities/parseMatch.js';\nimport { reusedOptions } from '../../utilities/reusedOptions.js';\n\n/** Defines the \"init\" verb. */\nexport const init: CommandInitFunction = (program) => {\n program.addSubCommand<InitOptions>({\n name: 'init',\n description:\n \"Validate an app's compatibility with Cloudpack, and generate any necessary \" +\n 'configuration overrides (cloudpack.generated.json).',\n options: {\n logResolveMap: reusedOptions.logResolveMap(),\n reset: new Option('--reset', 'Ignore the previous generated config.').conflicts('check'),\n check: new Option('--check', 'Fail if updates to the generated config are required.').conflicts('reset'),\n match: new Option(\n '--match <match...>',\n 'Only evaluate specific package(s), optionally with a version: e.g. \"foo\", \"@foo/*\", \"foo@1.2.3\"',\n )\n .conflicts('reset')\n .argParser(parseMatch),\n cache: reusedOptions.noCache(),\n },\n getExecutor: () => import('./execute.js'),\n });\n};\n"]}
|
|
@@ -6,15 +6,15 @@ export interface InitOptions {
|
|
|
6
6
|
/** Writes the resolve map to `resolve-map.json`. */
|
|
7
7
|
logResolveMap?: boolean;
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Ignore the previous generated config.
|
|
10
10
|
*/
|
|
11
11
|
reset?: boolean;
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Fail if updates to the generated config are required.
|
|
14
14
|
*/
|
|
15
15
|
check?: boolean;
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Only evaluate specific package(s).
|
|
18
18
|
*/
|
|
19
19
|
match?: PackageSettingsMatch[];
|
|
20
20
|
/** Whether to use the cache */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InitOptions.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PackageSettingsMatch } from '@ms-cloudpack/common-types';\n\n/**\n * Defines the options for the \"init\" command.\n */\nexport interface InitOptions {\n /** Writes the resolve map to `resolve-map.json`. */\n logResolveMap?: boolean;\n\n /**\n *
|
|
1
|
+
{"version":3,"file":"InitOptions.js","sourceRoot":"","sources":["../../../../src/commands/init/types/InitOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PackageSettingsMatch } from '@ms-cloudpack/common-types';\n\n/**\n * Defines the options for the \"init\" command.\n */\nexport interface InitOptions {\n /** Writes the resolve map to `resolve-map.json`. */\n logResolveMap?: boolean;\n\n /**\n * Ignore the previous generated config.\n */\n reset?: boolean;\n\n /**\n * Fail if updates to the generated config are required.\n */\n check?: boolean;\n\n /**\n * Only evaluate specific package(s).\n */\n match?: PackageSettingsMatch[];\n\n /** Whether to use the cache */\n cache?: boolean;\n}\n"]}
|
|
@@ -4,12 +4,16 @@ import { reusedOptions } from '../../utilities/reusedOptions.js';
|
|
|
4
4
|
export const init = (program) => {
|
|
5
5
|
program.addSubCommand({
|
|
6
6
|
name: 'link',
|
|
7
|
-
description: 'Links the package
|
|
7
|
+
description: 'Links the package(s) found within the current folder to an existing cloudpack start session.',
|
|
8
8
|
options: {
|
|
9
|
-
ignore: new Option('--ignore [packages...]', '
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
ignore: new Option('--ignore [packages...]', 'Ignore these packages when linking. This can be used for packages in the current repo ' +
|
|
10
|
+
'that have issues being bundled.'),
|
|
11
|
+
all: new Option('--all', "Link all internal packages discovered within the linked repo's graph."),
|
|
12
|
+
ignoreResolutions: new Option('--ignore-resolutions', "Don't apply resolutions from the host repo's package.json to linked packages."),
|
|
13
|
+
resolveStrategy: new Option('--resolve-strategy <strategy>', 'Strategy to use when resolving linked packages.\n' +
|
|
14
|
+
'- "dedupe": Attempt to dedupe packages from the resolve map by removing all but the ' +
|
|
15
|
+
'highest version that satisfies semver requirements from all parent entries.\n' +
|
|
16
|
+
`- "duplicate": Allow duplicates in the resolve map (don't bump dependencies).`)
|
|
13
17
|
.choices(['dedupe', 'duplicate'])
|
|
14
18
|
.default('dedupe'),
|
|
15
19
|
logResolveMap: reusedOptions.logResolveMap(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/link/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,aAAa,CAAc;QACjC,IAAI,EAAE,MAAM;QACZ,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/link/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,aAAa,CAAc;QACjC,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,8FAA8F;QAC3G,OAAO,EAAE;YACP,MAAM,EAAE,IAAI,MAAM,CAChB,wBAAwB,EACxB,wFAAwF;gBACtF,iCAAiC,CACpC;YACD,GAAG,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,uEAAuE,CAAC;YACjG,iBAAiB,EAAE,IAAI,MAAM,CAC3B,sBAAsB,EACtB,+EAA+E,CAChF;YACD,eAAe,EAAE,IAAI,MAAM,CACzB,+BAA+B,EAC/B,mDAAmD;gBACjD,sFAAsF;gBACtF,+EAA+E;gBAC/E,+EAA+E,CAClF;iBACE,OAAO,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;iBAChC,OAAO,CAAC,QAAQ,CAAC;YACpB,aAAa,EAAE,aAAa,CAAC,aAAa,EAAE;SAC7C;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { Option } from 'commander';\nimport type { CommandInitFunction } from '../../types/CommandInitFunction.js';\nimport type { LinkOptions } from './types/LinkOptions.js';\nimport { reusedOptions } from '../../utilities/reusedOptions.js';\n\n/** Defines the \"link\" verb. */\nexport const init: CommandInitFunction = (program) => {\n program.addSubCommand<LinkOptions>({\n name: 'link',\n description: 'Links the package(s) found within the current folder to an existing cloudpack start session.',\n options: {\n ignore: new Option(\n '--ignore [packages...]',\n 'Ignore these packages when linking. This can be used for packages in the current repo ' +\n 'that have issues being bundled.',\n ),\n all: new Option('--all', \"Link all internal packages discovered within the linked repo's graph.\"),\n ignoreResolutions: new Option(\n '--ignore-resolutions',\n \"Don't apply resolutions from the host repo's package.json to linked packages.\",\n ),\n resolveStrategy: new Option(\n '--resolve-strategy <strategy>',\n 'Strategy to use when resolving linked packages.\\n' +\n '- \"dedupe\": Attempt to dedupe packages from the resolve map by removing all but the ' +\n 'highest version that satisfies semver requirements from all parent entries.\\n' +\n `- \"duplicate\": Allow duplicates in the resolve map (don't bump dependencies).`,\n )\n .choices(['dedupe', 'duplicate'])\n .default('dedupe'),\n logResolveMap: reusedOptions.logResolveMap(),\n },\n getExecutor: () => import('./execute.js'),\n });\n};\n"]}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
export interface LinkOptions {
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Ignore these packages when linking.
|
|
4
|
+
* This can be used for packages in the current repo that have issues being bundled.
|
|
5
|
+
*/
|
|
3
6
|
ignore?: string[];
|
|
4
|
-
/**
|
|
7
|
+
/** Link all internal packages discovered within the linked repo's graph. */
|
|
5
8
|
all?: boolean;
|
|
6
|
-
/**
|
|
9
|
+
/** Don't apply resolutions from the host repo's package.json to linked packages. */
|
|
7
10
|
ignoreResolutions?: boolean;
|
|
8
|
-
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* duplicate
|
|
11
|
+
/**
|
|
12
|
+
* Strategy to use when resolving linked packages.
|
|
13
|
+
* - `"dedupe"`: Attempt to dedupe packages from the resolve map by removing all but the
|
|
14
|
+
* highest version that satisfies semver requirements from all parent entries.
|
|
15
|
+
* - `"duplicate"`: Allow duplicates in the resolve map (don't bump dependencies).
|
|
16
|
+
* @default "dedupe"
|
|
13
17
|
*/
|
|
14
18
|
resolveStrategy: 'dedupe' | 'duplicate';
|
|
15
19
|
/** Writes the linked resolve map to `resolve-map-linked.json`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/link/types/LinkOptions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B
|
|
1
|
+
{"version":3,"file":"LinkOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/link/types/LinkOptions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB,4EAA4E;IAC5E,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;;;;OAMG;IACH,eAAe,EAAE,QAAQ,GAAG,WAAW,CAAC;IAExC,kEAAkE;IAClE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkOptions.js","sourceRoot":"","sources":["../../../../src/commands/link/types/LinkOptions.ts"],"names":[],"mappings":"","sourcesContent":["export interface LinkOptions {\n
|
|
1
|
+
{"version":3,"file":"LinkOptions.js","sourceRoot":"","sources":["../../../../src/commands/link/types/LinkOptions.ts"],"names":[],"mappings":"","sourcesContent":["export interface LinkOptions {\n /**\n * Ignore these packages when linking.\n * This can be used for packages in the current repo that have issues being bundled.\n */\n ignore?: string[];\n\n /** Link all internal packages discovered within the linked repo's graph. */\n all?: boolean;\n\n /** Don't apply resolutions from the host repo's package.json to linked packages. */\n ignoreResolutions?: boolean;\n\n /**\n * Strategy to use when resolving linked packages.\n * - `\"dedupe\"`: Attempt to dedupe packages from the resolve map by removing all but the\n * highest version that satisfies semver requirements from all parent entries.\n * - `\"duplicate\"`: Allow duplicates in the resolve map (don't bump dependencies).\n * @default \"dedupe\"\n */\n resolveStrategy: 'dedupe' | 'duplicate';\n\n /** Writes the linked resolve map to `resolve-map-linked.json`. */\n logResolveMap?: boolean;\n}\n"]}
|
|
@@ -2,6 +2,6 @@ import type { CommandAction } from '../../types/CommandAction.js';
|
|
|
2
2
|
export interface SetupOptions {
|
|
3
3
|
force?: boolean;
|
|
4
4
|
}
|
|
5
|
-
/** Executor for the "
|
|
5
|
+
/** Executor for the "setup" verb */
|
|
6
6
|
export declare const execute: CommandAction<SetupOptions>;
|
|
7
7
|
//# sourceMappingURL=execute.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/setup/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/setup/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,oCAAoC;AACpC,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,CAe/C,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { setup } from '@ms-cloudpack/setup-utilities';
|
|
2
|
-
/** Executor for the "
|
|
2
|
+
/** Executor for the "setup" verb */
|
|
3
3
|
export const execute = async (params) => {
|
|
4
4
|
const { cwd, initialize, exit } = params;
|
|
5
5
|
const { config } = await initialize({ appPath: cwd });
|
|
6
|
-
const {
|
|
7
|
-
const { domain, https } =
|
|
6
|
+
const { server = {} } = config;
|
|
7
|
+
const { domain, https } = server;
|
|
8
8
|
if (domain || https) {
|
|
9
9
|
await setup({
|
|
10
10
|
domain,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/setup/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAMtD,
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/setup/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAMtD,oCAAoC;AACpC,MAAM,CAAC,MAAM,OAAO,GAAgC,KAAK,EAAE,MAAM,EAAE,EAAE;IACnE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAEjC,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACpB,MAAM,KAAK,CAAC;YACV,MAAM;YACN,uBAAuB,EAAE,KAAK,KAAK,IAAI;YACvC,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAC7C,CAAC,CAAC","sourcesContent":["import type { CommandAction } from '../../types/CommandAction.js';\nimport { setup } from '@ms-cloudpack/setup-utilities';\n\nexport interface SetupOptions {\n force?: boolean;\n}\n\n/** Executor for the \"setup\" verb */\nexport const execute: CommandAction<SetupOptions> = async (params) => {\n const { cwd, initialize, exit } = params;\n const { config } = await initialize({ appPath: cwd });\n const { server = {} } = config;\n const { domain, https } = server;\n\n if (domain || https) {\n await setup({\n domain,\n shouldCreateCertificate: https === true,\n cwd,\n });\n }\n\n await exit({ message: 'Setup complete.' });\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/setup/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/setup/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAG9E,gCAAgC;AAChC,eAAO,MAAM,IAAI,EAAE,mBAYlB,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Option } from 'commander';
|
|
2
|
-
/** Defines the "
|
|
2
|
+
/** Defines the "setup" verb. */
|
|
3
3
|
export const init = (program) => {
|
|
4
4
|
program.addSubCommand({
|
|
5
5
|
name: 'setup',
|
|
6
|
-
description: 'Sets up cert and hosts file settings for the relevant inner loop domain and
|
|
6
|
+
description: 'Sets up cert and hosts file settings for the relevant inner loop domain and HTTPS options ' +
|
|
7
|
+
'(based on the server config).',
|
|
7
8
|
options: {
|
|
8
|
-
force: new Option('--force', '
|
|
9
|
+
force: new Option('--force', 'Force execution of setup steps.'),
|
|
9
10
|
},
|
|
10
11
|
hideSharedOptions: ['cachePath', 'features'],
|
|
11
12
|
getExecutor: () => import('./execute.js'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/setup/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/setup/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAInC,gCAAgC;AAChC,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,aAAa,CAAe;QAClC,IAAI,EAAE,OAAO;QACb,WAAW,EACT,4FAA4F;YAC5F,+BAA+B;QACjC,OAAO,EAAE;YACP,KAAK,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,iCAAiC,CAAC;SAChE;QACD,iBAAiB,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;QAC5C,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { Option } from 'commander';\nimport type { CommandInitFunction } from '../../types/CommandInitFunction.js';\nimport type { SetupOptions } from './execute.js';\n\n/** Defines the \"setup\" verb. */\nexport const init: CommandInitFunction = (program) => {\n program.addSubCommand<SetupOptions>({\n name: 'setup',\n description:\n 'Sets up cert and hosts file settings for the relevant inner loop domain and HTTPS options ' +\n '(based on the server config).',\n options: {\n force: new Option('--force', 'Force execution of setup steps.'),\n },\n hideSharedOptions: ['cachePath', 'features'],\n getExecutor: () => import('./execute.js'),\n });\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAKlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAI5D;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAKlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAI5D;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,CAgH/C,CAAC"}
|
|
@@ -50,40 +50,13 @@ export const execute = async (params) => {
|
|
|
50
50
|
// Write the resolve map to disk.
|
|
51
51
|
await writeJson(path.join(appPath, 'resolve-map.json'), session.resolveMap);
|
|
52
52
|
}
|
|
53
|
-
const domains = config.devServer?.domain
|
|
54
|
-
? Array.isArray(config.devServer.domain)
|
|
55
|
-
? config.devServer.domain
|
|
56
|
-
: [config.devServer.domain]
|
|
57
|
-
: [];
|
|
58
|
-
const primaryDomain = domains[0];
|
|
59
|
-
// If a cert is needed, check that it exists.
|
|
60
|
-
if (config.devServer?.https === true && !(await getCertificate({ domain: config.devServer?.domain, cwd: appPath }))) {
|
|
61
|
-
await exit({
|
|
62
|
-
exitCode: 1,
|
|
63
|
-
message: `The local site is configured to use https in cloudpack.config.json, but is missing a cert.\n\nRun "${cyan(bold('cloudpack setup'))}" to create the required certificate and try start again.\n`,
|
|
64
|
-
});
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
const { createCloudpackServer } = await import('@ms-cloudpack/api-server');
|
|
68
|
-
let apiServer;
|
|
69
53
|
// Start api server for tracking status and handling remote requests.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const error = err;
|
|
75
|
-
if (error.code === 'EADDRNOTAVAIL' && config.devServer?.domain) {
|
|
76
|
-
await exit({
|
|
77
|
-
exitCode: 1,
|
|
78
|
-
message: `The domain "${cyan(bold(primaryDomain))}" in cloudpack.config.json is not resolvable.\n\n` +
|
|
79
|
-
`Run "${cyan(bold('cloudpack setup'))}" to add the appropriate entries to your hosts file and ` +
|
|
80
|
-
`try start again.\n`,
|
|
81
|
-
});
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
console.error('Error creating api server:', err);
|
|
85
|
-
throw err;
|
|
54
|
+
const serverOrError = await createApiServer(options, apiContext);
|
|
55
|
+
if (typeof serverOrError === 'string') {
|
|
56
|
+
await exit({ exitCode: 1, message: serverOrError });
|
|
57
|
+
return;
|
|
86
58
|
}
|
|
59
|
+
const apiServer = serverOrError;
|
|
87
60
|
// Kick off bundling app package as soon as api server is ready.
|
|
88
61
|
void ensurePackageBundled({
|
|
89
62
|
input: { name: definition.name, version: definition.version },
|
|
@@ -116,7 +89,7 @@ export const execute = async (params) => {
|
|
|
116
89
|
}));
|
|
117
90
|
};
|
|
118
91
|
autoDispose({ dispose: cleanup });
|
|
119
|
-
const defaultUrl = makeUrl(config.
|
|
92
|
+
const defaultUrl = makeUrl(config.server?.defaultPath || '', session.urls.appServer).href;
|
|
120
93
|
performance.measure(PerfMeasurementOpenBrowser, PerfMarkerCliEntry);
|
|
121
94
|
// Open the browser.
|
|
122
95
|
if (options.open !== false) {
|
|
@@ -130,5 +103,32 @@ export const execute = async (params) => {
|
|
|
130
103
|
console.log('Please open the browser manually to:', defaultUrl);
|
|
131
104
|
}
|
|
132
105
|
};
|
|
106
|
+
/**
|
|
107
|
+
* Create the API server, or return an error message if the server could not be created.
|
|
108
|
+
*/
|
|
109
|
+
async function createApiServer(options, apiContext) {
|
|
110
|
+
const { session } = apiContext;
|
|
111
|
+
const { config } = session;
|
|
112
|
+
const { server, appPath } = config;
|
|
113
|
+
// If a cert is needed, check that it exists.
|
|
114
|
+
if (server?.https === true && !(await getCertificate({ domain: server?.domain, cwd: appPath }))) {
|
|
115
|
+
return (`The local site is configured to use https in cloudpack.config.json, but is missing a cert.\n\n` +
|
|
116
|
+
`Run "${cyan(bold('cloudpack setup'))}" to create the required certificate and try start again.\n`);
|
|
117
|
+
}
|
|
118
|
+
const { createCloudpackServer } = await import('@ms-cloudpack/api-server');
|
|
119
|
+
try {
|
|
120
|
+
return await createCloudpackServer({ port: options.apiServerPort }, apiContext);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
const error = err;
|
|
124
|
+
if (error.code === 'EADDRNOTAVAIL' && server?.domain) {
|
|
125
|
+
const primaryDomain = (Array.isArray(server.domain) ? server.domain : [server.domain])[0];
|
|
126
|
+
return (`The domain "${cyan(bold(primaryDomain))}" in cloudpack.config.json is not resolvable.\n\n` +
|
|
127
|
+
`Run "${cyan(bold('cloudpack setup'))}" to add the appropriate entries to your hosts file and ` +
|
|
128
|
+
`try start again.\n`);
|
|
129
|
+
}
|
|
130
|
+
return `Error creating API server: ${err.stack || err}`;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
133
|
// cspell:ignore Prereqs
|
|
134
134
|
//# sourceMappingURL=execute.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"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","sourcesContent":["import { createPartialApiContext, ensurePackageBundled } from '@ms-cloudpack/api-server';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { isExternalPackage, resolve } from '@ms-cloudpack/package-utilities';\nimport { makeUrl } from '@ms-cloudpack/path-string-parsing';\nimport { cyan, yellow, bold } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { PerfMarkerCliEntry, PerfMeasurementOpenBrowser } from '../../performance/markers.js';\nimport type { CommandAction } from '../../types/CommandAction.js';\nimport { runPrerequisites } from '../../utilities/runPrerequisites.js';\nimport { getStartingAppPath } from './getStartingAppPath.js';\nimport { openBrowser } from './openBrowser.js';\nimport { trackSession } from './trackSession.js';\nimport type { StartOptions } from './types/StartOptions.js';\nimport { getCertificate } from '@ms-cloudpack/setup-utilities';\nimport { setStopServersFunction } from '../../utilities/stopServers.js';\n\n/**\n * Defines the \"start\" verb entry point.\n */\nexport const execute: CommandAction<StartOptions> = async (params) => {\n const { options, cwd, initialize, autoDispose, exit } = params;\n setStopServersFunction(exit);\n\n const appPath = await getStartingAppPath(cwd, options.app);\n const apiContextOptions = await initialize({ appPath, mode: options.mode });\n const { config, telemetryClient } = apiContextOptions;\n\n console.log('App path:', yellow(appPath));\n console.log('Bundle mode:', yellow(options.mode));\n\n runPrerequisites(apiContextOptions);\n\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n let overlayPath = await resolve('@ms-cloudpack/overlay', currentDir);\n\n // If overlay is an internal package, resolve the overlay from the current package's linked node modules\n // to \"externalize\" it, so that we always use the bundled version of the overlay instead of the source.\n if (overlayPath && !isExternalPackage(overlayPath)) {\n const cliPath = await resolve('@ms-cloudpack/cli', currentDir);\n overlayPath = cliPath ? path.join(cliPath, 'node_modules', '@ms-cloudpack/overlay') : undefined;\n }\n\n const [apiContext] = autoDispose(\n await createPartialApiContext({\n ...apiContextOptions,\n items: ['bus', 'watcher', 'taskRunner', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n overlayPath,\n }),\n );\n const { packages, session } = apiContext;\n\n // Increment the session version if caching is disabled.\n if (options.cache === false) {\n session.incrementSessionVersion();\n }\n\n // Make sure the package has a valid definition.\n const definition = await packages.get(appPath);\n\n // Set shared telemetry attributes which will be sent with all telemetry events.\n telemetryClient.setSharedSpanAttribute('sessionId', session.id);\n\n if (options.logResolveMap) {\n // Write the resolve map to disk.\n await writeJson(path.join(appPath, 'resolve-map.json'), session.resolveMap);\n }\n\n const domains = config.devServer?.domain\n ? Array.isArray(config.devServer.domain)\n ? config.devServer.domain\n : [config.devServer.domain]\n : [];\n const primaryDomain = domains[0];\n\n // If a cert is needed, check that it exists.\n if (config.devServer?.https === true && !(await getCertificate({ domain: config.devServer?.domain, cwd: appPath }))) {\n await exit({\n exitCode: 1,\n message: `The local site is configured to use https in cloudpack.config.json, but is missing a cert.\\n\\nRun \"${cyan(bold('cloudpack setup'))}\" to create the required certificate and try start again.\\n`,\n });\n return;\n }\n\n const { createCloudpackServer } = await import('@ms-cloudpack/api-server');\n let apiServer: Awaited<ReturnType<typeof createCloudpackServer>> | undefined;\n\n // Start api server for tracking status and handling remote requests.\n try {\n apiServer = await createCloudpackServer({ port: options.apiServerPort }, apiContext);\n } catch (err) {\n const error = err as { code: string };\n\n if (error.code === 'EADDRNOTAVAIL' && config.devServer?.domain) {\n await exit({\n exitCode: 1,\n message:\n `The domain \"${cyan(bold(primaryDomain))}\" in cloudpack.config.json is not resolvable.\\n\\n` +\n `Run \"${cyan(bold('cloudpack setup'))}\" to add the appropriate entries to your hosts file and ` +\n `try start again.\\n`,\n });\n\n return;\n }\n\n console.error('Error creating api server:', err);\n\n throw err;\n }\n\n // Kick off bundling app package as soon as api server is ready.\n void ensurePackageBundled({\n input: { name: definition.name, version: definition.version },\n ctx: apiContext,\n });\n\n // Then start bundle and app servers for hosting the app.\n const { startServers } = await import('@ms-cloudpack/app-server');\n const servers = await startServers(\n {\n definition,\n bundleServerOptions: { disableCache: !options.cache, port: options.bundleServerPort },\n port: options.appServerPort,\n },\n apiContext,\n );\n\n // Save the session to active sessions.\n const sessionTracker = await trackSession(session);\n\n const cleanup = async () => {\n // Stop tracking the session.\n await sessionTracker.close();\n\n await Promise.all(\n Object.entries({ apiServer, ...servers }).map(async ([name, server]) => {\n if (!server) return;\n\n const desc = `${name} (${server.url})`;\n console.info(`Closing ${desc}`);\n try {\n await server.close();\n console.info(`Closed ${desc}`);\n } catch (err) {\n console.warn(`Error closing ${desc}:`, err);\n }\n }),\n );\n };\n\n autoDispose({ dispose: cleanup });\n\n const defaultUrl = makeUrl(config.devServer?.defaultPath || '', session.urls.appServer).href;\n\n performance.measure(PerfMeasurementOpenBrowser, PerfMarkerCliEntry);\n\n // Open the browser.\n if (options.open !== false) {\n openBrowser(defaultUrl).catch((err) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n console.warn('Error opening browser:', err?.stack || err);\n console.warn('Please open the browser manually to:', defaultUrl);\n });\n } else {\n console.log('Please open the browser manually to:', defaultUrl);\n }\n};\n\n// cspell:ignore Prereqs\n"]}
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"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","sourcesContent":["import { createPartialApiContext, ensurePackageBundled, type ApiServer, type Context } from '@ms-cloudpack/api-server';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { isExternalPackage, resolve } from '@ms-cloudpack/package-utilities';\nimport { makeUrl } from '@ms-cloudpack/path-string-parsing';\nimport { cyan, yellow, bold } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { PerfMarkerCliEntry, PerfMeasurementOpenBrowser } from '../../performance/markers.js';\nimport type { CommandAction } from '../../types/CommandAction.js';\nimport { runPrerequisites } from '../../utilities/runPrerequisites.js';\nimport { getStartingAppPath } from './getStartingAppPath.js';\nimport { openBrowser } from './openBrowser.js';\nimport { trackSession } from './trackSession.js';\nimport type { StartOptions } from './types/StartOptions.js';\nimport { getCertificate } from '@ms-cloudpack/setup-utilities';\nimport { setStopServersFunction } from '../../utilities/stopServers.js';\n\n/**\n * Defines the \"start\" verb entry point.\n */\nexport const execute: CommandAction<StartOptions> = async (params) => {\n const { options, cwd, initialize, autoDispose, exit } = params;\n setStopServersFunction(exit);\n\n const appPath = await getStartingAppPath(cwd, options.app);\n const apiContextOptions = await initialize({ appPath, mode: options.mode });\n const { config, telemetryClient } = apiContextOptions;\n\n console.log('App path:', yellow(appPath));\n console.log('Bundle mode:', yellow(options.mode));\n\n runPrerequisites(apiContextOptions);\n\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n let overlayPath = await resolve('@ms-cloudpack/overlay', currentDir);\n\n // If overlay is an internal package, resolve the overlay from the current package's linked node modules\n // to \"externalize\" it, so that we always use the bundled version of the overlay instead of the source.\n if (overlayPath && !isExternalPackage(overlayPath)) {\n const cliPath = await resolve('@ms-cloudpack/cli', currentDir);\n overlayPath = cliPath ? path.join(cliPath, 'node_modules', '@ms-cloudpack/overlay') : undefined;\n }\n\n const [apiContext] = autoDispose(\n await createPartialApiContext({\n ...apiContextOptions,\n items: ['bus', 'watcher', 'taskRunner', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n overlayPath,\n }),\n );\n const { packages, session } = apiContext;\n\n // Increment the session version if caching is disabled.\n if (options.cache === false) {\n session.incrementSessionVersion();\n }\n\n // Make sure the package has a valid definition.\n const definition = await packages.get(appPath);\n\n // Set shared telemetry attributes which will be sent with all telemetry events.\n telemetryClient.setSharedSpanAttribute('sessionId', session.id);\n\n if (options.logResolveMap) {\n // Write the resolve map to disk.\n await writeJson(path.join(appPath, 'resolve-map.json'), session.resolveMap);\n }\n\n // Start api server for tracking status and handling remote requests.\n const serverOrError = await createApiServer(options, apiContext);\n if (typeof serverOrError === 'string') {\n await exit({ exitCode: 1, message: serverOrError });\n return;\n }\n const apiServer = serverOrError;\n\n // Kick off bundling app package as soon as api server is ready.\n void ensurePackageBundled({\n input: { name: definition.name, version: definition.version },\n ctx: apiContext,\n });\n\n // Then start bundle and app servers for hosting the app.\n const { startServers } = await import('@ms-cloudpack/app-server');\n const servers = await startServers(\n {\n definition,\n bundleServerOptions: { disableCache: !options.cache, port: options.bundleServerPort },\n port: options.appServerPort,\n },\n apiContext,\n );\n\n // Save the session to active sessions.\n const sessionTracker = await trackSession(session);\n\n const cleanup = async () => {\n // Stop tracking the session.\n await sessionTracker.close();\n\n await Promise.all(\n Object.entries({ apiServer, ...servers }).map(async ([name, server]) => {\n if (!server) return;\n\n const desc = `${name} (${server.url})`;\n console.info(`Closing ${desc}`);\n try {\n await server.close();\n console.info(`Closed ${desc}`);\n } catch (err) {\n console.warn(`Error closing ${desc}:`, err);\n }\n }),\n );\n };\n\n autoDispose({ dispose: cleanup });\n\n const defaultUrl = makeUrl(config.server?.defaultPath || '', session.urls.appServer).href;\n\n performance.measure(PerfMeasurementOpenBrowser, PerfMarkerCliEntry);\n\n // Open the browser.\n if (options.open !== false) {\n openBrowser(defaultUrl).catch((err) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n console.warn('Error opening browser:', err?.stack || err);\n console.warn('Please open the browser manually to:', defaultUrl);\n });\n } else {\n console.log('Please open the browser manually to:', defaultUrl);\n }\n};\n\n/**\n * Create the API server, or return an error message if the server could not be created.\n */\nasync function createApiServer(options: StartOptions, apiContext: Context): Promise<ApiServer | string> {\n const { session } = apiContext;\n const { config } = session;\n const { server, appPath } = config;\n\n // If a cert is needed, check that it exists.\n if (server?.https === true && !(await getCertificate({ domain: server?.domain, cwd: appPath }))) {\n return (\n `The local site is configured to use https in cloudpack.config.json, but is missing a cert.\\n\\n` +\n `Run \"${cyan(bold('cloudpack setup'))}\" to create the required certificate and try start again.\\n`\n );\n }\n\n const { createCloudpackServer } = await import('@ms-cloudpack/api-server');\n\n try {\n return await createCloudpackServer({ port: options.apiServerPort }, apiContext);\n } catch (err) {\n const error = err as { code: string };\n\n if (error.code === 'EADDRNOTAVAIL' && server?.domain) {\n const primaryDomain = (Array.isArray(server.domain) ? server.domain : [server.domain])[0];\n\n return (\n `The domain \"${cyan(bold(primaryDomain))}\" in cloudpack.config.json is not resolvable.\\n\\n` +\n `Run \"${cyan(bold('cloudpack setup'))}\" to add the appropriate entries to your hosts file and ` +\n `try start again.\\n`\n );\n }\n\n return `Error creating API server: ${(err as Error).stack || err}`;\n }\n}\n\n// cspell:ignore Prereqs\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/start/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/start/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAK9E,gCAAgC;AAChC,eAAO,MAAM,IAAI,EAAE,mBAmBlB,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { InvalidArgumentError, Option } from 'commander';
|
|
2
|
-
import { parseBundleMode } from '../../utilities/parseBundleMode.js';
|
|
3
2
|
import { portNumbers } from 'get-port';
|
|
4
3
|
import { reusedOptions } from '../../utilities/reusedOptions.js';
|
|
5
4
|
/** Defines the "start" verb. */
|
|
@@ -8,13 +7,11 @@ export const init = (program) => {
|
|
|
8
7
|
name: 'start',
|
|
9
8
|
description: 'Starts a web inner-loop from the current package folder.',
|
|
10
9
|
options: {
|
|
11
|
-
mode:
|
|
12
|
-
|
|
13
|
-
.default('library'),
|
|
14
|
-
logResolveMap: reusedOptions.logResolveMap(),
|
|
15
|
-
app: new Option('--app <appPackageName>', 'Run Cloudpack targeting a specific app.'),
|
|
10
|
+
mode: reusedOptions.mode({ action: 'run' }),
|
|
11
|
+
app: new Option('--app <appPackageName>', 'Run Cloudpack targeting a specific app (only needed if running init at a higher level in the repo).'),
|
|
16
12
|
open: new Option('--no-open', 'Do not open the browser.'),
|
|
17
13
|
cache: reusedOptions.noCache(),
|
|
14
|
+
logResolveMap: reusedOptions.logResolveMap(),
|
|
18
15
|
apiServerPort: getPortOption('--api-server-port <port>', 'API'),
|
|
19
16
|
appServerPort: getPortOption('--app-server-port <port>', 'app'),
|
|
20
17
|
bundleServerPort: getPortOption('--bundle-server-port <port>', 'bundle'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/start/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/start/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,gCAAgC;AAChC,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,aAAa,CAAe;QAClC,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,0DAA0D;QACvE,OAAO,EAAE;YACP,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAC3C,GAAG,EAAE,IAAI,MAAM,CACb,wBAAwB,EACxB,qGAAqG,CACtG;YACD,IAAI,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;YACzD,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE;YAC9B,aAAa,EAAE,aAAa,CAAC,aAAa,EAAE;YAC5C,aAAa,EAAE,aAAa,CAAC,0BAA0B,EAAE,KAAK,CAAC;YAC/D,aAAa,EAAE,aAAa,CAAC,0BAA0B,EAAE,KAAK,CAAC;YAC/D,gBAAgB,EAAE,aAAa,CAAC,6BAA6B,EAAE,QAAQ,CAAC;SACzE;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,SAAS,aAAa,CAAC,KAAa,EAAE,IAAY;IAChD,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,uBAAuB,IAAI,wDAAwD,CAAC;SAC1G,SAAS,CAAC,UAAU,CAAC;SACrB,QAAQ,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,oBAAoB,CAAC,wBAAwB,KAAK,GAAG,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,oBAAoB,CAAC,qCAAqC,KAAK,GAAG,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { InvalidArgumentError, Option } from 'commander';\nimport type { CommandInitFunction } from '../../types/CommandInitFunction.js';\nimport type { StartOptions } from './types/StartOptions.js';\nimport { portNumbers } from 'get-port';\nimport { reusedOptions } from '../../utilities/reusedOptions.js';\n\n/** Defines the \"start\" verb. */\nexport const init: CommandInitFunction = (program) => {\n program.addSubCommand<StartOptions>({\n name: 'start',\n description: 'Starts a web inner-loop from the current package folder.',\n options: {\n mode: reusedOptions.mode({ action: 'run' }),\n app: new Option(\n '--app <appPackageName>',\n 'Run Cloudpack targeting a specific app (only needed if running init at a higher level in the repo).',\n ),\n open: new Option('--no-open', 'Do not open the browser.'),\n cache: reusedOptions.noCache(),\n logResolveMap: reusedOptions.logResolveMap(),\n apiServerPort: getPortOption('--api-server-port <port>', 'API'),\n appServerPort: getPortOption('--app-server-port <port>', 'app'),\n bundleServerPort: getPortOption('--bundle-server-port <port>', 'bundle'),\n },\n getExecutor: () => import('./execute.js'),\n });\n};\n\nfunction getPortOption(flags: string, name: string) {\n return new Option(flags, `Port to use for the ${name} server (single, comma-separated, or range with dash).`)\n .argParser(parsePorts)\n .hideHelp();\n}\n\nfunction parsePorts(value: string): number[] {\n if (value.includes('-')) {\n const split = value.split('-');\n if (split.length !== 2) {\n throw new InvalidArgumentError(`Invalid port range: \"${value}\"`);\n }\n return [...portNumbers(parseNumber(split[0]), parseNumber(split[1]))];\n }\n\n return value.split(',').map(parseNumber);\n}\n\nfunction parseNumber(value: string) {\n value = value.trim();\n const parsed = parseInt(value, 10);\n if (isNaN(parsed)) {\n throw new InvalidArgumentError(`Port must be a number; received: \"${value}\"`);\n }\n return parsed;\n}\n"]}
|
|
@@ -12,7 +12,7 @@ export interface StartOptions {
|
|
|
12
12
|
cache?: boolean;
|
|
13
13
|
/** Mostly for testing: custom port for the API server */
|
|
14
14
|
apiServerPort?: number | number[];
|
|
15
|
-
/** Mostly for testing: custom port for the app server (also set in config via `
|
|
15
|
+
/** Mostly for testing: custom port for the app server (also set in config via `server.port`) */
|
|
16
16
|
appServerPort?: number | number[];
|
|
17
17
|
/** Mostly for testing: custom port for the bundle server */
|
|
18
18
|
bundleServerPort?: number | number[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/start/types/StartOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,6DAA6D;IAC7D,IAAI,EAAE,UAAU,CAAC;IAEjB,wGAAwG;IACxG,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,iDAAiD;IACjD,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAElC,
|
|
1
|
+
{"version":3,"file":"StartOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/start/types/StartOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,6DAA6D;IAC7D,IAAI,EAAE,UAAU,CAAC;IAEjB,wGAAwG;IACxG,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,iDAAiD;IACjD,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAElC,gGAAgG;IAChG,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAElC,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACtC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartOptions.js","sourceRoot":"","sources":["../../../../src/commands/start/types/StartOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { BundleMode } from '@ms-cloudpack/common-types';\n\nexport interface StartOptions {\n /** Writes the resolve map to `resolve-map.json`. */\n logResolveMap?: boolean;\n\n /** The mode to start in (library/development/production). */\n mode: BundleMode;\n\n /** Specifies which specific app to run, in the case of running `init` at a higher level in the repo. */\n app?: string;\n\n /** Whether to open the browser (default true) */\n open?: boolean;\n\n /** Whether to use the cache on first request (default true) */\n cache?: boolean;\n\n /** Mostly for testing: custom port for the API server */\n apiServerPort?: number | number[];\n\n /** Mostly for testing: custom port for the app server (also set in config via `
|
|
1
|
+
{"version":3,"file":"StartOptions.js","sourceRoot":"","sources":["../../../../src/commands/start/types/StartOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { BundleMode } from '@ms-cloudpack/common-types';\n\nexport interface StartOptions {\n /** Writes the resolve map to `resolve-map.json`. */\n logResolveMap?: boolean;\n\n /** The mode to start in (library/development/production). */\n mode: BundleMode;\n\n /** Specifies which specific app to run, in the case of running `init` at a higher level in the repo. */\n app?: string;\n\n /** Whether to open the browser (default true) */\n open?: boolean;\n\n /** Whether to use the cache on first request (default true) */\n cache?: boolean;\n\n /** Mostly for testing: custom port for the API server */\n apiServerPort?: number | number[];\n\n /** Mostly for testing: custom port for the app server (also set in config via `server.port`) */\n appServerPort?: number | number[];\n\n /** Mostly for testing: custom port for the bundle server */\n bundleServerPort?: number | number[];\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAiB9E,+BAA+B;AAC/B,eAAO,MAAM,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAiB9E,+BAA+B;AAC/B,eAAO,MAAM,IAAI,EAAE,mBAclB,CAAC"}
|
|
@@ -14,12 +14,13 @@ function getDefaultLogin() {
|
|
|
14
14
|
export const init = (program) => {
|
|
15
15
|
program.addSubCommand({
|
|
16
16
|
name: 'sync',
|
|
17
|
-
description: 'Syncs
|
|
17
|
+
description: 'Syncs packages from/to the remote cache. ' +
|
|
18
|
+
'By default (without --upload) it will download any packages not found in the local cache.',
|
|
18
19
|
options: {
|
|
19
|
-
upload: new Option('--upload', '
|
|
20
|
-
login: new Option('--login <method>', '
|
|
20
|
+
upload: new Option('--upload', 'Upload packages to the remote cache (instead of downloading).'),
|
|
21
|
+
login: new Option('--login <method>', 'How to authenticate against the remote cache.')
|
|
21
22
|
.choices(['interactive', 'azure-cli', 'device-code'])
|
|
22
|
-
.default(getDefaultLogin(), '
|
|
23
|
+
.default(getDefaultLogin(), '"azure-cli" in CI, "device-code" in Github Codespaces, "interactive" otherwise'),
|
|
23
24
|
},
|
|
24
25
|
getExecutor: () => import('./execute.js'),
|
|
25
26
|
});
|
|
@@ -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;AAGnC,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,SAAS,eAAe;IACtB,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,YAAY,EAAE,EAAE,CAAC;QACnB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,aAAa,CAAc;QACjC,IAAI,EAAE,MAAM;QACZ,WAAW,EACT
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,SAAS,eAAe;IACtB,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,YAAY,EAAE,EAAE,CAAC;QACnB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,aAAa,CAAc;QACjC,IAAI,EAAE,MAAM;QACZ,WAAW,EACT,2CAA2C;YAC3C,2FAA2F;QAC7F,OAAO,EAAE;YACP,MAAM,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,+DAA+D,CAAC;YAC/F,KAAK,EAAE,IAAI,MAAM,CAAC,kBAAkB,EAAE,+CAA+C,CAAC;iBACnF,OAAO,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;iBACpD,OAAO,CAAC,eAAe,EAAE,EAAE,gFAAgF,CAAC;SAChH;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { Option } from 'commander';\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 program.addSubCommand<SyncOptions>({\n name: 'sync',\n description:\n 'Syncs packages from/to the remote cache. ' +\n 'By default (without --upload) it will download any packages not found in the local cache.',\n options: {\n upload: new Option('--upload', 'Upload packages to the remote cache (instead of downloading).'),\n login: new Option('--login <method>', 'How to authenticate against the remote cache.')\n .choices(['interactive', 'azure-cli', 'device-code'])\n .default(getDefaultLogin(), '\"azure-cli\" in CI, \"device-code\" in Github Codespaces, \"interactive\" otherwise'),\n },\n getExecutor: () => import('./execute.js'),\n });\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/unlink/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAI9E,iCAAiC;AACjC,eAAO,MAAM,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/unlink/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAI9E,iCAAiC;AACjC,eAAO,MAAM,IAAI,EAAE,mBASlB,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { reusedOptions } from '../../utilities/reusedOptions.js';
|
|
|
3
3
|
export const init = (program) => {
|
|
4
4
|
program.addSubCommand({
|
|
5
5
|
name: 'unlink',
|
|
6
|
-
description: 'Unlinks the package
|
|
6
|
+
description: 'Unlinks the package(s) found within the current folder from a cloudpack start session.',
|
|
7
7
|
options: {
|
|
8
8
|
logResolveMap: reusedOptions.logResolveMap(),
|
|
9
9
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/unlink/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,iCAAiC;AACjC,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,aAAa,CAAgB;QACnC,IAAI,EAAE,QAAQ;QACd,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/unlink/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,iCAAiC;AACjC,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,aAAa,CAAgB;QACnC,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wFAAwF;QACrG,OAAO,EAAE;YACP,aAAa,EAAE,aAAa,CAAC,aAAa,EAAE;SAC7C;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import type { CommandInitFunction } from '../../types/CommandInitFunction.js';\nimport type { UnlinkOptions } from './types/UnlinkOptions.js';\nimport { reusedOptions } from '../../utilities/reusedOptions.js';\n\n/** Defines the \"unlink\" verb. */\nexport const init: CommandInitFunction = (program) => {\n program.addSubCommand<UnlinkOptions>({\n name: 'unlink',\n description: 'Unlinks the package(s) found within the current folder from a cloudpack start session.',\n options: {\n logResolveMap: reusedOptions.logResolveMap(),\n },\n getExecutor: () => import('./execute.js'),\n });\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reusedOptions.d.ts","sourceRoot":"","sources":["../../src/utilities/reusedOptions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reusedOptions.d.ts","sourceRoot":"","sources":["../../src/utilities/reusedOptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,MAAM,EAAE,MAAM,WAAW,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,aAAa;;;oBAGR;QAAE,MAAM,EAAE,QAAQ,GAAG,KAAK,CAAA;KAAE;CAO7C,CAAC"}
|
|
@@ -1,9 +1,28 @@
|
|
|
1
|
-
import { Option } from 'commander';
|
|
1
|
+
import { InvalidArgumentError, Option } from 'commander';
|
|
2
2
|
/**
|
|
3
3
|
* These options are used by multiple commands, but should be manually added.
|
|
4
4
|
*/
|
|
5
5
|
export const reusedOptions = {
|
|
6
|
-
logResolveMap: () => new Option('--log-resolve-map', '
|
|
7
|
-
noCache: () => new Option('--no-cache', '
|
|
6
|
+
logResolveMap: () => new Option('--log-resolve-map', 'Log the resolve map to "resolve-map.json" for diagnostics.'),
|
|
7
|
+
noCache: () => new Option('--no-cache', 'Rebuild all packages, rather than using cached assets.'),
|
|
8
|
+
mode: (options) => new Option('--mode <mode>', `The mode to ${options.action === 'bundle' ? 'bundle the package' : 'run the app'} in. (library | production)`)
|
|
9
|
+
.argParser(parseBundleMode)
|
|
10
|
+
.default('library'),
|
|
8
11
|
};
|
|
12
|
+
/** Parse the session mode based on user input (e.g. --mode argument in start.) */
|
|
13
|
+
function parseBundleMode(mode) {
|
|
14
|
+
switch (mode.toLowerCase()) {
|
|
15
|
+
case 'lib':
|
|
16
|
+
case 'library':
|
|
17
|
+
return 'library';
|
|
18
|
+
case 'dev':
|
|
19
|
+
case 'development':
|
|
20
|
+
return 'development';
|
|
21
|
+
case 'prod':
|
|
22
|
+
case 'production':
|
|
23
|
+
return 'production';
|
|
24
|
+
default:
|
|
25
|
+
throw new InvalidArgumentError(`Valid options are 'lib', 'dev', or 'prod'.`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
9
28
|
//# sourceMappingURL=reusedOptions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reusedOptions.js","sourceRoot":"","sources":["../../src/utilities/reusedOptions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reusedOptions.js","sourceRoot":"","sources":["../../src/utilities/reusedOptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEzD;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,mBAAmB,EAAE,4DAA4D,CAAC;IAClH,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,wDAAwD,CAAC;IACjG,IAAI,EAAE,CAAC,OAAqC,EAAE,EAAE,CAC9C,IAAI,MAAM,CACR,eAAe,EACf,eAAe,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,aAAa,6BAA6B,CAC/G;SACE,SAAS,CAAC,eAAe,CAAC;SAC1B,OAAO,CAAC,SAAS,CAAC;CACxB,CAAC;AAEF,kFAAkF;AAClF,SAAS,eAAe,CAAC,IAAY;IACnC,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3B,KAAK,KAAK,CAAC;QACX,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,KAAK,CAAC;QACX,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC;QACvB,KAAK,MAAM,CAAC;QACZ,KAAK,YAAY;YACf,OAAO,YAAY,CAAC;QACtB;YACE,MAAM,IAAI,oBAAoB,CAAC,4CAA4C,CAAC,CAAC;IACjF,CAAC;AACH,CAAC","sourcesContent":["import type { BundleMode } from '@ms-cloudpack/common-types';\nimport { InvalidArgumentError, Option } from 'commander';\n\n/**\n * These options are used by multiple commands, but should be manually added.\n */\nexport const reusedOptions = {\n logResolveMap: () => new Option('--log-resolve-map', 'Log the resolve map to \"resolve-map.json\" for diagnostics.'),\n noCache: () => new Option('--no-cache', 'Rebuild all packages, rather than using cached assets.'),\n mode: (options: { action: 'bundle' | 'run' }) =>\n new Option(\n '--mode <mode>',\n `The mode to ${options.action === 'bundle' ? 'bundle the package' : 'run the app'} in. (library | production)`,\n )\n .argParser(parseBundleMode)\n .default('library'),\n};\n\n/** Parse the session mode based on user input (e.g. --mode argument in start.) */\nfunction parseBundleMode(mode: string): BundleMode {\n switch (mode.toLowerCase()) {\n case 'lib':\n case 'library':\n return 'library';\n case 'dev':\n case 'development':\n return 'development';\n case 'prod':\n case 'production':\n return 'production';\n default:\n throw new InvalidArgumentError(`Valid options are 'lib', 'dev', or 'prod'.`);\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ms-cloudpack/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.71.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,20 +10,20 @@
|
|
|
10
10
|
"cloudpack": "./bin/cloudpack.js"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@ms-cloudpack/api-server": "^0.
|
|
14
|
-
"@ms-cloudpack/app-server": "^0.
|
|
15
|
-
"@ms-cloudpack/common-types": "^0.
|
|
16
|
-
"@ms-cloudpack/config": "^0.
|
|
13
|
+
"@ms-cloudpack/api-server": "^0.53.0",
|
|
14
|
+
"@ms-cloudpack/app-server": "^0.16.0",
|
|
15
|
+
"@ms-cloudpack/common-types": "^0.21.0",
|
|
16
|
+
"@ms-cloudpack/config": "^0.30.0",
|
|
17
17
|
"@ms-cloudpack/feature-flags": "^0.1.1",
|
|
18
18
|
"@ms-cloudpack/json-utilities": "^0.1.7",
|
|
19
|
-
"@ms-cloudpack/overlay": "^0.17.
|
|
20
|
-
"@ms-cloudpack/package-utilities": "^10.1.
|
|
19
|
+
"@ms-cloudpack/overlay": "^0.17.72",
|
|
20
|
+
"@ms-cloudpack/package-utilities": "^10.1.3",
|
|
21
21
|
"@ms-cloudpack/path-string-parsing": "^1.2.4",
|
|
22
|
-
"@ms-cloudpack/path-utilities": "^2.7.
|
|
23
|
-
"@ms-cloudpack/remote-cache": "^0.8.
|
|
24
|
-
"@ms-cloudpack/setup-utilities": "^0.4.
|
|
22
|
+
"@ms-cloudpack/path-utilities": "^2.7.46",
|
|
23
|
+
"@ms-cloudpack/remote-cache": "^0.8.12",
|
|
24
|
+
"@ms-cloudpack/setup-utilities": "^0.4.2",
|
|
25
25
|
"@ms-cloudpack/task-reporter": "^0.14.5",
|
|
26
|
-
"@ms-cloudpack/telemetry": "^0.6.
|
|
26
|
+
"@ms-cloudpack/telemetry": "^0.6.3",
|
|
27
27
|
"@yarnpkg/lockfile": "^1.1.0",
|
|
28
28
|
"commander": "^11.1.0",
|
|
29
29
|
"cross-spawn": "^7.0.3",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"workspace-tools": "^0.36.4"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@ms-cloudpack/common-types": "^0.
|
|
39
|
+
"@ms-cloudpack/common-types": "^0.21.0",
|
|
40
40
|
"@ms-cloudpack/eslint-plugin-internal": "^0.0.1",
|
|
41
41
|
"@ms-cloudpack/scripts": "^0.0.1",
|
|
42
42
|
"@ms-cloudpack/test-utilities": "^0.5.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseBundleMode.d.ts","sourceRoot":"","sources":["../../src/utilities/parseBundleMode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAcxD"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { InvalidArgumentError } from 'commander';
|
|
2
|
-
/** Parse the session mode based on user input (e.g. --mode argument in start.) */
|
|
3
|
-
export function parseBundleMode(mode) {
|
|
4
|
-
switch (mode.toLowerCase()) {
|
|
5
|
-
case 'lib':
|
|
6
|
-
case 'library':
|
|
7
|
-
return 'library';
|
|
8
|
-
case 'dev':
|
|
9
|
-
case 'development':
|
|
10
|
-
return 'development';
|
|
11
|
-
case 'prod':
|
|
12
|
-
case 'production':
|
|
13
|
-
return 'production';
|
|
14
|
-
default:
|
|
15
|
-
throw new InvalidArgumentError(`Valid options are 'lib', 'dev', or 'prod'.`);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=parseBundleMode.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseBundleMode.js","sourceRoot":"","sources":["../../src/utilities/parseBundleMode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,kFAAkF;AAClF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3B,KAAK,KAAK,CAAC;QACX,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,KAAK,CAAC;QACX,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC;QACvB,KAAK,MAAM,CAAC;QACZ,KAAK,YAAY;YACf,OAAO,YAAY,CAAC;QACtB;YACE,MAAM,IAAI,oBAAoB,CAAC,4CAA4C,CAAC,CAAC;IACjF,CAAC;AACH,CAAC","sourcesContent":["import type { BundleMode } from '@ms-cloudpack/common-types';\nimport { InvalidArgumentError } from 'commander';\n\n/** Parse the session mode based on user input (e.g. --mode argument in start.) */\nexport function parseBundleMode(mode: string): BundleMode {\n switch (mode.toLowerCase()) {\n case 'lib':\n case 'library':\n return 'library';\n case 'dev':\n case 'development':\n return 'development';\n case 'prod':\n case 'production':\n return 'production';\n default:\n throw new InvalidArgumentError(`Valid options are 'lib', 'dev', or 'prod'.`);\n }\n}\n"]}
|