@ms-cloudpack/cli 0.61.1 → 0.61.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"createMockSession.d.ts","sourceRoot":"","sources":["../../src/__fixtures__/createMockSession.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAExD,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAqBtD"}
1
+ {"version":3,"file":"createMockSession.d.ts","sourceRoot":"","sources":["../../src/__fixtures__/createMockSession.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAExD,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAiBtD"}
@@ -8,11 +8,7 @@ export function createMockSession(id) {
8
8
  mode: 'library',
9
9
  resolveMap: {},
10
10
  sequence: 0,
11
- urls: {
12
- appServer: '',
13
- apiServer: '',
14
- bundleServer: '',
15
- },
11
+ urls: {},
16
12
  targetVersions: {},
17
13
  sessionVersion: 1,
18
14
  incrementSessionVersion: () => { },
@@ -1 +1 @@
1
- {"version":3,"file":"createMockSession.js","sourceRoot":"","sources":["../../src/__fixtures__/createMockSession.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,EAAW;IAC3C,OAAO;QACL,EAAE,EAAE,EAAE,IAAI,YAAY;QACtB,OAAO,EAAE,cAAc;QACvB,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACzB,WAAW,EAAE,KAAK;QAClB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,CAAC;QACX,IAAI,EAAE;YACJ,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE;YACb,YAAY,EAAE,EAAE;SACjB;QACD,cAAc,EAAE,EAAE;QAClB,cAAc,EAAE,CAAC;QACjB,uBAAuB,EAAE,GAAG,EAAE,GAAE,CAAC;QACjC,sBAAsB,EAAE,GAAG,EAAE,GAAE,CAAC;QAChC,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;KAC3B,CAAC;AACJ,CAAC","sourcesContent":["import type { Session } from '@ms-cloudpack/api-server';\n\nexport function createMockSession(id?: string): Session {\n return {\n id: id || 'session-id',\n appPath: '/path/to/app',\n config: { generated: {} },\n projectName: 'app',\n type: 'web-app',\n mode: 'library',\n resolveMap: {},\n sequence: 0,\n urls: {\n appServer: '',\n apiServer: '',\n bundleServer: '',\n },\n targetVersions: {},\n sessionVersion: 1,\n incrementSessionVersion: () => {},\n incrementTargetVersion: () => {},\n importMap: { imports: {} },\n };\n}\n"]}
1
+ {"version":3,"file":"createMockSession.js","sourceRoot":"","sources":["../../src/__fixtures__/createMockSession.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,EAAW;IAC3C,OAAO;QACL,EAAE,EAAE,EAAE,IAAI,YAAY;QACtB,OAAO,EAAE,cAAc;QACvB,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACzB,WAAW,EAAE,KAAK;QAClB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,CAAC;QACX,IAAI,EAAE,EAAE;QACR,cAAc,EAAE,EAAE;QAClB,cAAc,EAAE,CAAC;QACjB,uBAAuB,EAAE,GAAG,EAAE,GAAE,CAAC;QACjC,sBAAsB,EAAE,GAAG,EAAE,GAAE,CAAC;QAChC,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;KAC3B,CAAC;AACJ,CAAC","sourcesContent":["import type { Session } from '@ms-cloudpack/api-server';\n\nexport function createMockSession(id?: string): Session {\n return {\n id: id || 'session-id',\n appPath: '/path/to/app',\n config: { generated: {} },\n projectName: 'app',\n type: 'web-app',\n mode: 'library',\n resolveMap: {},\n sequence: 0,\n urls: {},\n targetVersions: {},\n sessionVersion: 1,\n incrementSessionVersion: () => {},\n incrementTargetVersion: () => {},\n importMap: { imports: {} },\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"processYarnLock.d.ts","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/processYarnLock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAuB,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEzF;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,gBAAgB,CAuC1E"}
1
+ {"version":3,"file":"processYarnLock.d.ts","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/processYarnLock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAuB,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAGzF;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,gBAAgB,CAqC1E"}
@@ -1,3 +1,4 @@
1
+ import { makeUrl } from '@ms-cloudpack/path-string-parsing';
1
2
  /**
2
3
  * Process yarn.lock file contents into a map of resolved package name+version.
3
4
  */
@@ -21,21 +22,18 @@ export function processYarnLock(lockFile) {
21
22
  const installedSpec = `${name}@${version}`;
22
23
  installedVersions[installedSpec] ??= { name, version, specs: [] };
23
24
  installedVersions[installedSpec].specs.push(specEntry);
24
- // https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf
25
- // https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66
26
- // https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644
27
- // https://example.pkgs.visualstudio.com/_packaging/Example/npm/registry/@foo/bar/-/bar-1.9.2.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644
28
- try {
29
- const segments = new URL(resolved || '').pathname.split('/');
25
+ if (resolved) {
26
+ // https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf
27
+ // https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66
28
+ // https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644
29
+ // https://example.pkgs.visualstudio.com/_packaging/Example/npm/registry/@foo/bar/-/bar-1.9.2.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644
30
+ const segments = makeUrl(resolved).pathname.split('/');
30
31
  specEntry.url = resolved;
31
32
  const [scope, unscopedName, dash, file] = segments.slice(-4);
32
33
  if (dash === '-' && file === `${unscopedName}-${version}.tgz`) {
33
34
  specEntry.realName = scope.startsWith('@') ? `${scope}/${unscopedName}` : unscopedName;
34
35
  }
35
36
  }
36
- catch {
37
- // ignore URL parsing error (not all entries have a URL)
38
- }
39
37
  }
40
38
  return installedVersions;
41
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"processYarnLock.js","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/processYarnLock.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAwB;IACtD,MAAM,iBAAiB,GAAqB,EAAE,CAAC;IAE/C,sCAAsC;IACtC,mCAAmC;IACnC,wBAAwB;IACxB,uHAAuH;IACvH,OAAO;IACP,0DAA0D;IAC1D,qBAAqB;IACrB,yBAAyB;IACzB,8GAA8G;IAC9G,OAAO;IACP,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAwB,EAAE,WAAW,EAAE,CAAC;QACvD,MAAM,aAAa,GAAG,GAAG,IAAI,IAAI,OAAO,EAAW,CAAC;QACpD,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAClE,iBAAiB,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvD,wHAAwH;QACxH,iGAAiG;QACjG,gIAAgI;QAChI,0IAA0I;QAC1I,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7D,SAAS,CAAC,GAAG,GAAG,QAAQ,CAAC;YACzB,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,YAAY,IAAI,OAAO,MAAM,EAAE,CAAC;gBAC9D,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;YACzF,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;QAC1D,CAAC;IACH,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC","sourcesContent":["import type { LockFileObject } from '@yarnpkg/lockfile';\nimport type { ResolvedVersionSpec, ResolvedVersions } from './types/ResolvedVersions.js';\n\n/**\n * Process yarn.lock file contents into a map of resolved package name+version.\n */\nexport function processYarnLock(lockFile: LockFileObject): ResolvedVersions {\n const installedVersions: ResolvedVersions = {};\n\n // Examples of LockFileObject entries:\n // 'prettier-2@npm:prettier@2': {\n // version: '2.8.8',\n // resolved: 'https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da',\n // },\n // 'weird-stuff@file:weird-stuff': { version: '1.0.0' },\n // 'zod@^3.21.4': {\n // version: '3.22.4',\n // resolved: 'https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff',\n // },\n for (const [spec, { version, resolved }] of Object.entries(lockFile)) {\n const atIndex = spec.indexOf('@', 1);\n const name = spec.slice(0, atIndex);\n const specVersion = spec.slice(atIndex + 1);\n const specEntry: ResolvedVersionSpec = { specVersion };\n const installedSpec = `${name}@${version}` as const;\n installedVersions[installedSpec] ??= { name, version, specs: [] };\n installedVersions[installedSpec].specs.push(specEntry);\n\n // https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf\n // https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66\n // https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644\n // https://example.pkgs.visualstudio.com/_packaging/Example/npm/registry/@foo/bar/-/bar-1.9.2.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644\n try {\n const segments = new URL(resolved || '').pathname.split('/');\n specEntry.url = resolved;\n const [scope, unscopedName, dash, file] = segments.slice(-4);\n if (dash === '-' && file === `${unscopedName}-${version}.tgz`) {\n specEntry.realName = scope.startsWith('@') ? `${scope}/${unscopedName}` : unscopedName;\n }\n } catch {\n // ignore URL parsing error (not all entries have a URL)\n }\n }\n\n return installedVersions;\n}\n"]}
1
+ {"version":3,"file":"processYarnLock.js","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/processYarnLock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAE5D;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAwB;IACtD,MAAM,iBAAiB,GAAqB,EAAE,CAAC;IAE/C,sCAAsC;IACtC,mCAAmC;IACnC,wBAAwB;IACxB,uHAAuH;IACvH,OAAO;IACP,0DAA0D;IAC1D,qBAAqB;IACrB,yBAAyB;IACzB,8GAA8G;IAC9G,OAAO;IACP,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAwB,EAAE,WAAW,EAAE,CAAC;QACvD,MAAM,aAAa,GAAG,GAAG,IAAI,IAAI,OAAO,EAAW,CAAC;QACpD,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAClE,iBAAiB,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvD,IAAI,QAAQ,EAAE,CAAC;YACb,wHAAwH;YACxH,iGAAiG;YACjG,gIAAgI;YAChI,0IAA0I;YAC1I,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvD,SAAS,CAAC,GAAG,GAAG,QAAQ,CAAC;YACzB,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,YAAY,IAAI,OAAO,MAAM,EAAE,CAAC;gBAC9D,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;YACzF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC","sourcesContent":["import type { LockFileObject } from '@yarnpkg/lockfile';\nimport type { ResolvedVersionSpec, ResolvedVersions } from './types/ResolvedVersions.js';\nimport { makeUrl } from '@ms-cloudpack/path-string-parsing';\n\n/**\n * Process yarn.lock file contents into a map of resolved package name+version.\n */\nexport function processYarnLock(lockFile: LockFileObject): ResolvedVersions {\n const installedVersions: ResolvedVersions = {};\n\n // Examples of LockFileObject entries:\n // 'prettier-2@npm:prettier@2': {\n // version: '2.8.8',\n // resolved: 'https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da',\n // },\n // 'weird-stuff@file:weird-stuff': { version: '1.0.0' },\n // 'zod@^3.21.4': {\n // version: '3.22.4',\n // resolved: 'https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff',\n // },\n for (const [spec, { version, resolved }] of Object.entries(lockFile)) {\n const atIndex = spec.indexOf('@', 1);\n const name = spec.slice(0, atIndex);\n const specVersion = spec.slice(atIndex + 1);\n const specEntry: ResolvedVersionSpec = { specVersion };\n const installedSpec = `${name}@${version}` as const;\n installedVersions[installedSpec] ??= { name, version, specs: [] };\n installedVersions[installedSpec].specs.push(specEntry);\n\n if (resolved) {\n // https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf\n // https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66\n // https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644\n // https://example.pkgs.visualstudio.com/_packaging/Example/npm/registry/@foo/bar/-/bar-1.9.2.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644\n const segments = makeUrl(resolved).pathname.split('/');\n specEntry.url = resolved;\n const [scope, unscopedName, dash, file] = segments.slice(-4);\n if (dash === '-' && file === `${unscopedName}-${version}.tgz`) {\n specEntry.realName = scope.startsWith('@') ? `${scope}/${unscopedName}` : unscopedName;\n }\n }\n }\n\n return installedVersions;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,8BAA8B,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAgB5D,wDAAwD;AACxD,wBAAsB,WAAW,kBAKhC;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,CA2H/C,CAAC"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,8BAA8B,CAAC;AAKvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAI5D,wDAAwD;AACxD,wBAAsB,WAAW,kBAKhC;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,CAwG/C,CAAC"}
@@ -1,13 +1,14 @@
1
+ import { createPartialApiContext, ensurePackageBundled } from '@ms-cloudpack/api-server';
1
2
  import { writeJson } from '@ms-cloudpack/json-utilities';
2
3
  import { resolve } from '@ms-cloudpack/package-utilities';
4
+ import { makeUrl } from '@ms-cloudpack/path-string-parsing';
3
5
  import { yellow } from '@ms-cloudpack/task-reporter';
4
6
  import path from 'path';
5
7
  import { fileURLToPath } from 'url';
6
8
  import { PerfMarkerCliEntry, PerfMeasurementOpenBrowser } from '../../performance/markers.js';
9
+ import { runPrerequisites } from '../../utilities/runPrerequisites.js';
7
10
  import { getStartingAppPath } from './getStartingAppPath.js';
8
11
  import { openBrowser } from './openBrowser.js';
9
- import { runPrerequisites } from '../../utilities/runPrerequisites.js';
10
- import { createPartialApiContext, ensurePackageBundled } from '@ms-cloudpack/api-server';
11
12
  import { trackSession } from './trackSession.js';
12
13
  let exitFunction;
13
14
  /** Stop all started cloudpack instances, for testing */
@@ -34,7 +35,7 @@ export const execute = async (params) => {
34
35
  items: ['bus', 'watcher', 'taskRunner', 'packages', 'session', 'packageImportPaths', 'packageHashes'],
35
36
  overlayPath: await resolve('@ms-cloudpack/overlay', path.dirname(fileURLToPath(import.meta.url))),
36
37
  }));
37
- const { packages, session, packageImportPaths } = apiContext;
38
+ const { packages, session } = apiContext;
38
39
  // Increment the session version if caching is disabled.
39
40
  if (options.cache === false) {
40
41
  session.incrementSessionVersion();
@@ -56,44 +57,25 @@ export const execute = async (params) => {
56
57
  const { startApiServer } = await import('@ms-cloudpack/api-server');
57
58
  // Start api server for tracking status and handling remote requests.
58
59
  const apiServer = await startApiServer(apiContext);
59
- session.urls.apiServer = apiServer.url;
60
60
  // Kick off bundling app package as soon as api server is ready.
61
61
  void ensurePackageBundled({
62
62
  input: { name: definition.name, version: definition.version },
63
63
  ctx: apiContext,
64
64
  });
65
65
  // Then start bundle and app servers for hosting the app.
66
- const { startBundleServer } = await import('@ms-cloudpack/bundle-server');
67
- const bundleServer = await startBundleServer({
68
- context: {
69
- ...apiContext,
70
- disableCache: !options.cache,
71
- },
72
- });
73
- session.urls.bundleServer = bundleServer.url;
74
- // Finally start the app server.
75
- const { startAppServer } = await import('@ms-cloudpack/app-server');
76
- const appServer = await startAppServer({
77
- session,
66
+ const { startServers } = await import('@ms-cloudpack/app-server');
67
+ const servers = await startServers({
78
68
  definition,
79
- config,
80
- reporter,
81
- packages,
82
- packageImportPaths,
83
- packageHashes: apiContext.packageHashes,
84
- });
85
- session.urls.appServer = appServer.url;
69
+ bundleServerOptions: { disableCache: !options.cache },
70
+ }, apiContext);
86
71
  // Save the session to active sessions.
87
72
  const sessionTracker = await trackSession(session);
88
73
  const cleanup = async () => {
89
74
  // Stop tracking the session.
90
75
  await sessionTracker.close();
91
- const servers = [
92
- ['appServer', appServer],
93
- ['apiServer', apiServer],
94
- ['bundleServer', bundleServer],
95
- ];
96
- await Promise.all(servers.map(async ([name, server]) => {
76
+ await Promise.all(Object.entries({ apiServer, ...servers }).map(async ([name, server]) => {
77
+ if (!server)
78
+ return;
97
79
  console.info(`Closing ${name}: ${server.url}`);
98
80
  try {
99
81
  await server.close();
@@ -106,7 +88,7 @@ export const execute = async (params) => {
106
88
  };
107
89
  autoDispose({ dispose: cleanup });
108
90
  exitFunction = exit;
109
- const defaultUrl = new URL(config.devServer?.defaultPath || '', appServer.url).href;
91
+ const defaultUrl = makeUrl(config.devServer?.defaultPath || '', session.urls.appServer).href;
110
92
  performance.measure(PerfMeasurementOpenBrowser, PerfMarkerCliEntry);
111
93
  // Open the browser.
112
94
  if (options.open !== false) {
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/start/execute.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CommandAction, CommandActionParams } from '../../types/CommandAction.js';\nimport type { StartOptions } from './types/StartOptions.js';\n\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { resolve } from '@ms-cloudpack/package-utilities';\nimport { yellow } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { PerfMarkerCliEntry, PerfMeasurementOpenBrowser } from '../../performance/markers.js';\nimport { getStartingAppPath } from './getStartingAppPath.js';\nimport { openBrowser } from './openBrowser.js';\nimport { runPrerequisites } from '../../utilities/runPrerequisites.js';\nimport { createPartialApiContext, ensurePackageBundled } from '@ms-cloudpack/api-server';\nimport { trackSession } from './trackSession.js';\n\nlet exitFunction: CommandActionParams<StartOptions>['exit'] | undefined;\n\n/** Stop all started cloudpack instances, for testing */\nexport async function stopServers() {\n if (exitFunction) {\n await exitFunction({ exitCode: 0, message: 'stopServers called' });\n exitFunction = undefined;\n }\n}\n\n/**\n * Defines the \"start\" verb entry point.\n */\nexport const execute: CommandAction<StartOptions> = async (params) => {\n const { options, cwd, initialize, reporter, autoDispose, exit } = params;\n const appPath = await getStartingAppPath(cwd, options.app);\n const { config, telemetryClient } = await initialize({ appPath });\n\n console.log('App path:', yellow(appPath));\n\n runPrerequisites({ config, cwd: appPath, telemetryClient });\n\n const [apiContext] = autoDispose(\n await createPartialApiContext({\n appPath,\n config,\n reporter,\n telemetryClient,\n items: ['bus', 'watcher', 'taskRunner', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n overlayPath: await resolve('@ms-cloudpack/overlay', path.dirname(fileURLToPath(import.meta.url))),\n }),\n );\n const { packages, session, packageImportPaths } = apiContext;\n\n // Increment the session version if caching is disabled.\n if (options.cache === false) {\n session.incrementSessionVersion();\n }\n\n // Make sure the package has a valid definition.\n const definition = await packages.get(appPath);\n\n if (!definition) {\n throw new Error(`There was no package.json located at \"${appPath}\".`);\n }\n\n if (!definition.name || !definition.version) {\n throw new Error(`The package.json at \"${appPath}\" did not have a name and/or version.`);\n }\n\n // Set shared telemetry attributes which will be sent with all telemetry events.\n telemetryClient.setSharedSpanAttribute('sessionId', session.id);\n\n if (options.logResolveMap) {\n // Write the resolve map to disk.\n await writeJson(path.join(appPath, 'resolve-map.json'), session.resolveMap);\n }\n\n const { startApiServer } = await import('@ms-cloudpack/api-server');\n\n // Start api server for tracking status and handling remote requests.\n const apiServer = await startApiServer(apiContext);\n session.urls.apiServer = apiServer.url;\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 { startBundleServer } = await import('@ms-cloudpack/bundle-server');\n const bundleServer = await startBundleServer({\n context: {\n ...apiContext,\n disableCache: !options.cache,\n },\n });\n session.urls.bundleServer = bundleServer.url;\n\n // Finally start the app server.\n const { startAppServer } = await import('@ms-cloudpack/app-server');\n const appServer = await startAppServer({\n session,\n definition,\n config,\n reporter,\n packages,\n packageImportPaths,\n packageHashes: apiContext.packageHashes,\n });\n session.urls.appServer = appServer.url;\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 const servers = [\n ['appServer', appServer] as const,\n ['apiServer', apiServer] as const,\n ['bundleServer', bundleServer] as const,\n ];\n\n await Promise.all(\n servers.map(async ([name, server]) => {\n console.info(`Closing ${name}: ${server.url}`);\n try {\n await server.close();\n console.info(`Closed ${name}: ${server.url}`);\n } catch (err) {\n console.warn('Error closing server:', err);\n }\n }),\n );\n };\n\n autoDispose({ dispose: cleanup });\n exitFunction = exit;\n\n const defaultUrl = new URL(config.devServer?.defaultPath || '', appServer.url).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 } from '@ms-cloudpack/api-server';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { resolve } from '@ms-cloudpack/package-utilities';\nimport { makeUrl } from '@ms-cloudpack/path-string-parsing';\nimport { yellow } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { PerfMarkerCliEntry, PerfMeasurementOpenBrowser } from '../../performance/markers.js';\nimport type { CommandAction, CommandActionParams } 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';\n\nlet exitFunction: CommandActionParams<StartOptions>['exit'] | undefined;\n\n/** Stop all started cloudpack instances, for testing */\nexport async function stopServers() {\n if (exitFunction) {\n await exitFunction({ exitCode: 0, message: 'stopServers called' });\n exitFunction = undefined;\n }\n}\n\n/**\n * Defines the \"start\" verb entry point.\n */\nexport const execute: CommandAction<StartOptions> = async (params) => {\n const { options, cwd, initialize, reporter, autoDispose, exit } = params;\n const appPath = await getStartingAppPath(cwd, options.app);\n const { config, telemetryClient } = await initialize({ appPath });\n\n console.log('App path:', yellow(appPath));\n\n runPrerequisites({ config, cwd: appPath, telemetryClient });\n\n const [apiContext] = autoDispose(\n await createPartialApiContext({\n appPath,\n config,\n reporter,\n telemetryClient,\n items: ['bus', 'watcher', 'taskRunner', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n overlayPath: await resolve('@ms-cloudpack/overlay', path.dirname(fileURLToPath(import.meta.url))),\n }),\n );\n const { packages, session } = apiContext;\n\n // Increment the session version if caching is disabled.\n if (options.cache === false) {\n session.incrementSessionVersion();\n }\n\n // Make sure the package has a valid definition.\n const definition = await packages.get(appPath);\n\n if (!definition) {\n throw new Error(`There was no package.json located at \"${appPath}\".`);\n }\n\n if (!definition.name || !definition.version) {\n throw new Error(`The package.json at \"${appPath}\" did not have a name and/or version.`);\n }\n\n // Set shared telemetry attributes which will be sent with all telemetry events.\n telemetryClient.setSharedSpanAttribute('sessionId', session.id);\n\n if (options.logResolveMap) {\n // Write the resolve map to disk.\n await writeJson(path.join(appPath, 'resolve-map.json'), session.resolveMap);\n }\n\n const { startApiServer } = await import('@ms-cloudpack/api-server');\n\n // Start api server for tracking status and handling remote requests.\n const apiServer = await startApiServer(apiContext);\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 },\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 console.info(`Closing ${name}: ${server.url}`);\n try {\n await server.close();\n console.info(`Closed ${name}: ${server.url}`);\n } catch (err) {\n console.warn('Error closing server:', err);\n }\n }),\n );\n };\n\n autoDispose({ dispose: cleanup });\n exitFunction = exit;\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 +1 @@
1
- {"version":3,"file":"AutoDisposableList.d.ts","sourceRoot":"","sources":["../../src/utilities/AutoDisposableList.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAEzC,GAAG,CAAC,CAAC,SAAS,UAAU,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE;IAKjC,OAAO;CAOrB"}
1
+ {"version":3,"file":"AutoDisposableList.d.ts","sourceRoot":"","sources":["../../src/utilities/AutoDisposableList.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAEzC,GAAG,CAAC,CAAC,SAAS,UAAU,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE;IAKjC,OAAO;CAcrB"}
@@ -7,10 +7,13 @@ export class AutoDisposableList {
7
7
  return items;
8
8
  }
9
9
  async dispose() {
10
- const results = await Promise.allSettled(this.disposables.map((d) => d.dispose()));
11
- const failedPromisesCount = results.filter((p) => p.status === 'rejected').length;
12
- if (failedPromisesCount) {
13
- throw new Error(`Failed to dispose ${failedPromisesCount} disposable(s)`);
10
+ let errorCount = 0;
11
+ await Promise.all(this.disposables.map((d) => d.dispose().catch((err) => {
12
+ console.error(`Failed to dispose: ${err.stack || err}`);
13
+ errorCount++;
14
+ })));
15
+ if (errorCount) {
16
+ throw new Error(`Failed to dispose ${errorCount} disposable(s)`);
14
17
  }
15
18
  }
16
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AutoDisposableList.js","sourceRoot":"","sources":["../../src/utilities/AutoDisposableList.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,kBAAkB;IAA/B;QACmB,gBAAW,GAAiB,EAAE,CAAC;IAclD,CAAC;IAZQ,GAAG,CAAuB,GAAG,KAAU;QAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnF,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;QAClF,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,qBAAqB,mBAAmB,gBAAgB,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;CACF","sourcesContent":["import type { Disposable } from '../types/Disposable.js';\n\nexport class AutoDisposableList {\n private readonly disposables: Disposable[] = [];\n\n public add<T extends Disposable>(...items: T[]) {\n this.disposables.push(...items);\n return items;\n }\n\n public async dispose() {\n const results = await Promise.allSettled(this.disposables.map((d) => d.dispose()));\n const failedPromisesCount = results.filter((p) => p.status === 'rejected').length;\n if (failedPromisesCount) {\n throw new Error(`Failed to dispose ${failedPromisesCount} disposable(s)`);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"AutoDisposableList.js","sourceRoot":"","sources":["../../src/utilities/AutoDisposableList.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,kBAAkB;IAA/B;QACmB,gBAAW,GAAiB,EAAE,CAAC;IAqBlD,CAAC;IAnBQ,GAAG,CAAuB,GAAG,KAAU;QAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACzB,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,sBAAuB,GAAa,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;YACnE,UAAU,EAAE,CAAC;QACf,CAAC,CAAC,CACH,CACF,CAAC;QACF,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,gBAAgB,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;CACF","sourcesContent":["import type { Disposable } from '../types/Disposable.js';\n\nexport class AutoDisposableList {\n private readonly disposables: Disposable[] = [];\n\n public add<T extends Disposable>(...items: T[]) {\n this.disposables.push(...items);\n return items;\n }\n\n public async dispose() {\n let errorCount = 0;\n await Promise.all(\n this.disposables.map((d) =>\n d.dispose().catch((err) => {\n console.error(`Failed to dispose: ${(err as Error).stack || err}`);\n errorCount++;\n }),\n ),\n );\n if (errorCount) {\n throw new Error(`Failed to dispose ${errorCount} disposable(s)`);\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/cli",
3
- "version": "0.61.1",
3
+ "version": "0.61.3",
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,16 +10,16 @@
10
10
  "cloudpack": "./bin/cloudpack.js"
11
11
  },
12
12
  "dependencies": {
13
- "@ms-cloudpack/api-server": "^0.42.0",
14
- "@ms-cloudpack/app-server": "^0.5.0",
15
- "@ms-cloudpack/bundle-server": "^0.3.0",
16
- "@ms-cloudpack/common-types": "^0.5.0",
17
- "@ms-cloudpack/config": "^0.20.2",
13
+ "@ms-cloudpack/api-server": "^0.43.0",
14
+ "@ms-cloudpack/app-server": "^0.7.0",
15
+ "@ms-cloudpack/common-types": "^0.5.1",
16
+ "@ms-cloudpack/config": "^0.20.4",
18
17
  "@ms-cloudpack/feature-flags": "^0.1.1",
19
18
  "@ms-cloudpack/json-utilities": "^0.1.4",
20
- "@ms-cloudpack/overlay": "^0.16.111",
21
- "@ms-cloudpack/package-utilities": "^7.4.1",
22
- "@ms-cloudpack/path-utilities": "^2.7.6",
19
+ "@ms-cloudpack/overlay": "^0.16.113",
20
+ "@ms-cloudpack/package-utilities": "^7.4.3",
21
+ "@ms-cloudpack/path-string-parsing": "^1.2.2",
22
+ "@ms-cloudpack/path-utilities": "^2.7.8",
23
23
  "@ms-cloudpack/remote-cache": "^0.7.2",
24
24
  "@ms-cloudpack/task-reporter": "^0.14.0",
25
25
  "@ms-cloudpack/telemetry": "^0.5.1",
@@ -27,14 +27,14 @@
27
27
  "commander": "^11.1.0",
28
28
  "cross-spawn": "^7.0.3",
29
29
  "didyoumean": "^1.2.2",
30
- "glob-hasher": "^1.2.1",
30
+ "glob-hasher": "^1.4.2",
31
31
  "open": "^9.0.0",
32
32
  "prompts": "^2.4.2",
33
33
  "semver": "^7.6.0",
34
34
  "workspace-tools": "^0.36.4"
35
35
  },
36
36
  "devDependencies": {
37
- "@ms-cloudpack/common-types": "^0.5.0",
37
+ "@ms-cloudpack/common-types": "^0.5.1",
38
38
  "@ms-cloudpack/eslint-plugin-internal": "^0.0.1",
39
39
  "@ms-cloudpack/scripts": "^0.0.1",
40
40
  "@ms-cloudpack/test-utilities": "^0.5.0",