@ms-cloudpack/cli 0.31.7 → 0.33.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.
Files changed (81) hide show
  1. package/lib/commands/bundle/bundle.js +2 -1
  2. package/lib/commands/bundle/bundle.js.map +1 -1
  3. package/lib/commands/bundle/types.d.ts +4 -0
  4. package/lib/commands/bundle/types.js.map +1 -1
  5. package/lib/commands/init/evaluateImportsForOverrides.d.ts +4 -1
  6. package/lib/commands/init/evaluateImportsForOverrides.js +8 -4
  7. package/lib/commands/init/evaluateImportsForOverrides.js.map +1 -1
  8. package/lib/commands/init/evaluateImportsForOverrides.test.js +67 -0
  9. package/lib/commands/init/evaluateImportsForOverrides.test.js.map +1 -0
  10. package/lib/commands/init/index.js +1 -1
  11. package/lib/commands/init/index.js.map +1 -1
  12. package/lib/commands/init/init.js +10 -5
  13. package/lib/commands/init/init.js.map +1 -1
  14. package/lib/commands/init/init.test.js +3 -3
  15. package/lib/commands/init/init.test.js.map +1 -1
  16. package/lib/commands/init/preparePackageOverride.d.ts +0 -1
  17. package/lib/commands/init/preparePackageOverride.js +2 -5
  18. package/lib/commands/init/preparePackageOverride.js.map +1 -1
  19. package/lib/commands/start/appServer/createRoutes.d.ts +3 -1
  20. package/lib/commands/start/appServer/createRoutes.js.map +1 -1
  21. package/lib/commands/start/appServer/handleSessionVersion.d.ts +1 -1
  22. package/lib/commands/start/appServer/handleSessionVersion.js.map +1 -1
  23. package/lib/commands/start/appServer/setHeaders.d.ts +1 -1
  24. package/lib/commands/start/appServer/setHeaders.js.map +1 -1
  25. package/lib/commands/start/appServer/startAppServer.d.ts +3 -1
  26. package/lib/commands/start/appServer/startAppServer.js.map +1 -1
  27. package/lib/commands/start/createBundleTask.d.ts +2 -1
  28. package/lib/commands/start/createBundleTask.js.map +1 -1
  29. package/lib/commands/start/createSession.d.ts +3 -1
  30. package/lib/commands/start/createSession.js +2 -1
  31. package/lib/commands/start/createSession.js.map +1 -1
  32. package/lib/commands/start/createSession.test.js +3 -3
  33. package/lib/commands/start/createSession.test.js.map +1 -1
  34. package/lib/commands/start/start.js +5 -5
  35. package/lib/commands/start/start.js.map +1 -1
  36. package/lib/commands/start/startBundleServer.d.ts +3 -1
  37. package/lib/commands/start/startBundleServer.js +1 -0
  38. package/lib/commands/start/startBundleServer.js.map +1 -1
  39. package/lib/commands/start/types.d.ts +1 -0
  40. package/lib/commands/start/types.js.map +1 -1
  41. package/lib/common/createPackageOverrideTransform.d.ts +1 -1
  42. package/lib/common/createPackageOverrideTransform.js.map +1 -1
  43. package/lib/index.d.ts +3 -1
  44. package/lib/index.js.map +1 -1
  45. package/lib/initTelemetry.js +1 -1
  46. package/lib/initTelemetry.js.map +1 -1
  47. package/lib/tasks/bundleTask.js +2 -1
  48. package/lib/tasks/bundleTask.js.map +1 -1
  49. package/lib/types.d.ts +6 -199
  50. package/lib/types.js.map +1 -1
  51. package/package.json +7 -5
  52. package/lib/commands/start/TaskRunner.d.ts +0 -40
  53. package/lib/commands/start/TaskRunner.js +0 -119
  54. package/lib/commands/start/TaskRunner.js.map +0 -1
  55. package/lib/commands/start/addOverride.d.ts +0 -7
  56. package/lib/commands/start/addOverride.js +0 -63
  57. package/lib/commands/start/addOverride.js.map +0 -1
  58. package/lib/commands/start/addOverride.test.js +0 -254
  59. package/lib/commands/start/addOverride.test.js.map +0 -1
  60. package/lib/commands/start/startApiServer.d.ts +0 -19
  61. package/lib/commands/start/startApiServer.js +0 -303
  62. package/lib/commands/start/startApiServer.js.map +0 -1
  63. package/lib/commands/start/startWatcher.d.ts +0 -7
  64. package/lib/commands/start/startWatcher.js +0 -51
  65. package/lib/commands/start/startWatcher.js.map +0 -1
  66. package/lib/commands/start/taskRunner.test.d.ts +0 -1
  67. package/lib/commands/start/taskRunner.test.js +0 -80
  68. package/lib/commands/start/taskRunner.test.js.map +0 -1
  69. package/lib/commands/start/validateOverride.d.ts +0 -7
  70. package/lib/commands/start/validateOverride.js +0 -28
  71. package/lib/commands/start/validateOverride.js.map +0 -1
  72. package/lib/commands/start/validateOverride.test.d.ts +0 -1
  73. package/lib/commands/start/validateOverride.test.js +0 -137
  74. package/lib/commands/start/validateOverride.test.js.map +0 -1
  75. package/lib/common/config.d.ts +0 -31
  76. package/lib/common/config.js +0 -54
  77. package/lib/common/config.js.map +0 -1
  78. package/lib/common/configTemplate.d.ts +0 -13
  79. package/lib/common/configTemplate.js +0 -16
  80. package/lib/common/configTemplate.js.map +0 -1
  81. /package/lib/commands/{start/addOverride.test.d.ts → init/evaluateImportsForOverrides.test.d.ts} +0 -0
@@ -3,7 +3,7 @@ import path from 'path';
3
3
  import { PackageDefinitions } from '@ms-cloudpack/package-utilities';
4
4
  import { reporter } from '../../reporter.js';
5
5
  export async function bundle(options) {
6
- const { bundler: bundlerType, outdir = 'dist/browser-esm' } = options || {};
6
+ const { bundler: bundlerType, outdir = 'dist/browser-esm', disableSourceMaps } = options || {};
7
7
  const packagePath = process.cwd();
8
8
  const definition = await PackageDefinitions.getInstance().get(packagePath);
9
9
  const { name = 'unknown', version = '0.0.0' } = definition || {};
@@ -16,6 +16,7 @@ export async function bundle(options) {
16
16
  outputPath,
17
17
  isExternal: true,
18
18
  bundlerType,
19
+ disableSourceMaps,
19
20
  };
20
21
  await bundleTask({
21
22
  bundleRequest,
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../src/commands/bundle/bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAuB;IAClD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAC5E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3E,MAAM,EAAE,IAAI,GAAG,SAAS,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,UAAU,IAAI,EAAE,CAAC;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,aAAa,GAAkB;QACnC,EAAE,EAAE,QAAQ;QACZ,WAAW,EAAE,IAAI;QACjB,OAAO;QACP,WAAW;QACX,UAAU;QACV,UAAU,EAAE,IAAI;QAChB,WAAW;KACZ,CAAC;IAEF,MAAM,UAAU,CAAC;QACf,aAAa;QACb,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;KACzB,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC","sourcesContent":["import { bundleTask } from '../../tasks/bundleTask.js';\nimport path from 'path';\nimport type { BundleOptions } from './types.js';\nimport { PackageDefinitions } from '@ms-cloudpack/package-utilities';\nimport { reporter } from '../../reporter.js';\nimport type { BundleRequest } from '../../types.js';\n\nexport async function bundle(options?: BundleOptions) {\n const { bundler: bundlerType, outdir = 'dist/browser-esm' } = options || {};\n const packagePath = process.cwd();\n const definition = await PackageDefinitions.getInstance().get(packagePath);\n const { name = 'unknown', version = '0.0.0' } = definition || {};\n const outputPath = path.resolve(packagePath, outdir);\n const bundleRequest: BundleRequest = {\n id: 'bundle',\n packageName: name,\n version,\n packagePath,\n outputPath,\n isExternal: true,\n bundlerType,\n };\n\n await bundleTask({\n bundleRequest,\n options: { force: true },\n });\n\n reporter.complete();\n process.exit(bundleRequest.result?.errors?.length === 0 ? 0 : 1);\n}\n"]}
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../src/commands/bundle/bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAuB;IAClD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAC/F,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3E,MAAM,EAAE,IAAI,GAAG,SAAS,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,UAAU,IAAI,EAAE,CAAC;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,aAAa,GAAkB;QACnC,EAAE,EAAE,QAAQ;QACZ,WAAW,EAAE,IAAI;QACjB,OAAO;QACP,WAAW;QACX,UAAU;QACV,UAAU,EAAE,IAAI;QAChB,WAAW;QACX,iBAAiB;KAClB,CAAC;IAEF,MAAM,UAAU,CAAC;QACf,aAAa;QACb,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;KACzB,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC","sourcesContent":["import { bundleTask } from '../../tasks/bundleTask.js';\nimport path from 'path';\nimport type { BundleOptions } from './types.js';\nimport { PackageDefinitions } from '@ms-cloudpack/package-utilities';\nimport { reporter } from '../../reporter.js';\nimport type { BundleRequest } from '../../types.js';\n\nexport async function bundle(options?: BundleOptions) {\n const { bundler: bundlerType, outdir = 'dist/browser-esm', disableSourceMaps } = options || {};\n const packagePath = process.cwd();\n const definition = await PackageDefinitions.getInstance().get(packagePath);\n const { name = 'unknown', version = '0.0.0' } = definition || {};\n const outputPath = path.resolve(packagePath, outdir);\n const bundleRequest: BundleRequest = {\n id: 'bundle',\n packageName: name,\n version,\n packagePath,\n outputPath,\n isExternal: true,\n bundlerType,\n disableSourceMaps,\n };\n\n await bundleTask({\n bundleRequest,\n options: { force: true },\n });\n\n reporter.complete();\n process.exit(bundleRequest.result?.errors?.length === 0 ? 0 : 1);\n}\n"]}
@@ -3,6 +3,10 @@ export interface BundleOptions {
3
3
  * Forces use of a specific bundler. 'ori' | 'rollup' | 'auto'. Defaults to "auto".
4
4
  */
5
5
  bundler?: string;
6
+ /**
7
+ * Disables source maps.
8
+ */
9
+ disableSourceMaps?: boolean;
6
10
  /**
7
11
  * Path to drop the bundle output, relative to current path. Defaults to "dist".
8
12
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/bundle/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface BundleOptions {\n /**\n * Forces use of a specific bundler. 'ori' | 'rollup' | 'auto'. Defaults to \"auto\".\n */\n bundler?: string;\n\n /**\n * Path to drop the bundle output, relative to current path. Defaults to \"dist\".\n */\n outdir?: string;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/bundle/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface BundleOptions {\n /**\n * Forces use of a specific bundler. 'ori' | 'rollup' | 'auto'. Defaults to \"auto\".\n */\n bundler?: string;\n\n /**\n * Disables source maps.\n */\n disableSourceMaps?: boolean;\n\n /**\n * Path to drop the bundle output, relative to current path. Defaults to \"dist\".\n */\n outdir?: string;\n}\n"]}
@@ -14,4 +14,7 @@ export declare function evaluateImportsForOverrides(options: {
14
14
  packagePathsToEvaluate: Set<string>;
15
15
  evaluatedPackages: Set<string>;
16
16
  resolveMap: ResolveMap;
17
- }): Promise<number>;
17
+ }): Promise<{
18
+ changeCount: number;
19
+ errors: string[];
20
+ }>;
@@ -8,17 +8,22 @@ export async function evaluateImportsForOverrides(options) {
8
8
  const { packages, imports, definition, packageOverrides, packagePathsToEvaluate, evaluatedPackages, resolveMap } = options;
9
9
  const displayName = `${definition.name}@${definition.version}`;
10
10
  let changeCount = 0;
11
+ const errors = [];
11
12
  // Iterate through imports and find their path from the resolve map.
12
13
  for (const [dependencyName, dependencyImportPaths] of imports.entries()) {
13
14
  const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });
14
15
  if (!resolveEntry) {
15
- console.error(`Package "${displayName}" depends on "${dependencyName}" but it was not found in the resolve map.`);
16
+ const errorMessage = `Package "${displayName}" depends on "${dependencyName}" but it was not found in the resolve map. Ensure that "${dependencyName}" listed in dependencies of ${displayName}.`;
17
+ console.error(errorMessage);
18
+ errors.push(errorMessage);
16
19
  continue;
17
20
  }
18
21
  // Load the dependency definition.
19
22
  const dependencyDefinition = await packages.get(resolveEntry.path);
20
23
  if (!dependencyDefinition) {
21
- console.error(`Package "${displayName}" depends on "${dependencyName}" at "${resolveEntry.path}" but its definition couldn't be loaded.`, undefined);
24
+ const errorMessage = `Package "${displayName}" depends on "${dependencyName}" at "${resolveEntry.path}" but its definition couldn't be loaded.`;
25
+ console.error(errorMessage);
26
+ errors.push(errorMessage);
22
27
  continue;
23
28
  }
24
29
  // Make sure to add the package to the list of packages to evaluate.
@@ -30,7 +35,6 @@ export async function evaluateImportsForOverrides(options) {
30
35
  if (!flattenedExports[dependencyImportPath]) {
31
36
  preparePackageOverride({
32
37
  packageOverrides,
33
- definition,
34
38
  dependencyDefinition,
35
39
  exports,
36
40
  isInternal: !isExternalPackage(resolveEntry.path),
@@ -50,6 +54,6 @@ export async function evaluateImportsForOverrides(options) {
50
54
  }
51
55
  }
52
56
  }
53
- return changeCount;
57
+ return { changeCount, errors };
54
58
  }
55
59
  //# sourceMappingURL=evaluateImportsForOverrides.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluateImportsForOverrides.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAKrE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OASjD;IACC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAC9G,OAAO,CAAC;IACV,MAAM,WAAW,GAAG,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;IAC/D,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,oEAAoE;IACpE,KAAK,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE;QACvE,MAAM,YAAY,GAAG,mBAAmB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC;QAElG,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,YAAY,WAAW,iBAAiB,cAAc,4CAA4C,CAAC,CAAC;YAClH,SAAS;SACV;QAED,kCAAkC;QAClC,MAAM,oBAAoB,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEnE,IAAI,CAAC,oBAAoB,EAAE;YACzB,OAAO,CAAC,KAAK,CACX,YAAY,WAAW,iBAAiB,cAAc,SAAS,YAAY,CAAC,IAAI,0CAA0C,EAC1H,SAAS,CACV,CAAC;YACF,SAAS;SACV;QAED,oEAAoE;QACpE,sBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAE9C,mIAAmI;QACnI,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrE,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAEpD,KAAK,MAAM,oBAAoB,IAAI,qBAAqB,EAAE;YACxD,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE;gBAC3C,sBAAsB,CAAC;oBACrB,gBAAgB;oBAChB,UAAU;oBACV,oBAAoB;oBACpB,OAAO;oBACP,UAAU,EAAE,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC;iBAClD,CAAC,CAAC;gBAEH,MAAM,kBAAkB,CAAC;oBACvB,OAAO;oBACP,QAAQ;oBACR,WAAW,EAAE,YAAY,CAAC,IAAI;oBAC9B,UAAU,EAAE,oBAAoB;iBACjC,CAAC,CAAC;gBAEH,yEAAyE;gBACzE,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAEjB,WAAW,EAAE,CAAC;gBAEd,4FAA4F;gBAC5F,sBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAC9C,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aAC7C;SACF;KACF;IAED,OAAO,WAAW,CAAC;AACrB,CAAC","sourcesContent":["import {\n flattenExportsMap,\n addExportsMapEntry,\n getExportsMap,\n findResolveMapEntry,\n isExternalPackage,\n} from '@ms-cloudpack/package-utilities';\nimport { preparePackageOverride } from './preparePackageOverride.js';\nimport type { PackageJson, PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { PackageOverride } from '../../types.js';\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 to the given packageOverrides array.\n */\nexport async function evaluateImportsForOverrides(options: {\n packages: PackageDefinitionsCache;\n packagePath: string;\n imports: Map<string, Set<string>>;\n definition: PackageJson;\n packageOverrides: PackageOverride[];\n packagePathsToEvaluate: Set<string>;\n evaluatedPackages: Set<string>;\n resolveMap: ResolveMap;\n}): Promise<number> {\n const { packages, imports, definition, packageOverrides, packagePathsToEvaluate, evaluatedPackages, resolveMap } =\n options;\n const displayName = `${definition.name}@${definition.version}`;\n let changeCount = 0;\n\n // Iterate through imports and find their path from the resolve map.\n for (const [dependencyName, dependencyImportPaths] of imports.entries()) {\n const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });\n\n if (!resolveEntry) {\n console.error(`Package \"${displayName}\" depends on \"${dependencyName}\" but it was not found in the resolve map.`);\n continue;\n }\n\n // Load the dependency definition.\n const dependencyDefinition = await packages.get(resolveEntry.path);\n\n if (!dependencyDefinition) {\n console.error(\n `Package \"${displayName}\" depends on \"${dependencyName}\" at \"${resolveEntry.path}\" but its definition couldn't be loaded.`,\n undefined,\n );\n continue;\n }\n\n // Make sure to add the package to the list of packages to evaluate.\n packagePathsToEvaluate.add(resolveEntry.path);\n\n // Get the flattened bundle-able exports map for this dependency and iterate through our import paths to ensure nothing is missing.\n const exports = await getExportsMap(resolveEntry.path, { packages });\n const flattenedExports = flattenExportsMap(exports);\n\n for (const dependencyImportPath of dependencyImportPaths) {\n if (!flattenedExports[dependencyImportPath]) {\n preparePackageOverride({\n packageOverrides,\n definition,\n dependencyDefinition,\n exports,\n isInternal: !isExternalPackage(resolveEntry.path),\n });\n\n await addExportsMapEntry({\n exports,\n packages,\n packagePath: resolveEntry.path,\n importPath: dependencyImportPath,\n });\n\n // Clear cache when we've mutated an override. Transforms need to re-run.\n packages.clear();\n\n changeCount++;\n\n // Since we've found a missing exports, we need to re-enqueue the dependency for evaluation.\n packagePathsToEvaluate.add(resolveEntry.path);\n evaluatedPackages.delete(resolveEntry.path);\n }\n }\n }\n\n return changeCount;\n}\n"]}
1
+ {"version":3,"file":"evaluateImportsForOverrides.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAKrE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OASjD;IACC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAC9G,OAAO,CAAC;IACV,MAAM,WAAW,GAAG,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;IAC/D,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,oEAAoE;IACpE,KAAK,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE;QACvE,MAAM,YAAY,GAAG,mBAAmB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC;QAElG,IAAI,CAAC,YAAY,EAAE;YACjB,MAAM,YAAY,GAAG,YAAY,WAAW,iBAAiB,cAAc,2DAA2D,cAAc,+BAA+B,WAAW,GAAG,CAAC;YAClM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAE1B,SAAS;SACV;QAED,kCAAkC;QAClC,MAAM,oBAAoB,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEnE,IAAI,CAAC,oBAAoB,EAAE;YACzB,MAAM,YAAY,GAAG,YAAY,WAAW,iBAAiB,cAAc,SAAS,YAAY,CAAC,IAAI,0CAA0C,CAAC;YAChJ,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAE1B,SAAS;SACV;QAED,oEAAoE;QACpE,sBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAE9C,mIAAmI;QACnI,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrE,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAEpD,KAAK,MAAM,oBAAoB,IAAI,qBAAqB,EAAE;YACxD,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE;gBAC3C,sBAAsB,CAAC;oBACrB,gBAAgB;oBAChB,oBAAoB;oBACpB,OAAO;oBACP,UAAU,EAAE,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC;iBAClD,CAAC,CAAC;gBAEH,MAAM,kBAAkB,CAAC;oBACvB,OAAO;oBACP,QAAQ;oBACR,WAAW,EAAE,YAAY,CAAC,IAAI;oBAC9B,UAAU,EAAE,oBAAoB;iBACjC,CAAC,CAAC;gBAEH,yEAAyE;gBACzE,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAEjB,WAAW,EAAE,CAAC;gBAEd,4FAA4F;gBAC5F,sBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAC9C,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aAC7C;SACF;KACF;IAED,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC","sourcesContent":["import {\n flattenExportsMap,\n addExportsMapEntry,\n getExportsMap,\n findResolveMapEntry,\n isExternalPackage,\n} from '@ms-cloudpack/package-utilities';\nimport { preparePackageOverride } from './preparePackageOverride.js';\nimport type { PackageJson, PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { PackageOverride } from '../../types.js';\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 to the given packageOverrides array.\n */\nexport async function evaluateImportsForOverrides(options: {\n packages: PackageDefinitionsCache;\n packagePath: string;\n imports: Map<string, Set<string>>;\n definition: PackageJson;\n packageOverrides: PackageOverride[];\n packagePathsToEvaluate: Set<string>;\n evaluatedPackages: Set<string>;\n resolveMap: ResolveMap;\n}): Promise<{ changeCount: number; errors: string[] }> {\n const { packages, imports, definition, packageOverrides, packagePathsToEvaluate, evaluatedPackages, resolveMap } =\n options;\n const displayName = `${definition.name}@${definition.version}`;\n let changeCount = 0;\n const errors: string[] = [];\n\n // Iterate through imports and find their path from the resolve map.\n for (const [dependencyName, dependencyImportPaths] of imports.entries()) {\n const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });\n\n if (!resolveEntry) {\n const errorMessage = `Package \"${displayName}\" depends on \"${dependencyName}\" but it was not found in the resolve map. Ensure that \"${dependencyName}\" listed in dependencies of ${displayName}.`;\n console.error(errorMessage);\n errors.push(errorMessage);\n\n continue;\n }\n\n // Load the dependency definition.\n const dependencyDefinition = await packages.get(resolveEntry.path);\n\n if (!dependencyDefinition) {\n const errorMessage = `Package \"${displayName}\" depends on \"${dependencyName}\" at \"${resolveEntry.path}\" but its definition couldn't be loaded.`;\n console.error(errorMessage);\n errors.push(errorMessage);\n\n continue;\n }\n\n // Make sure to add the package to the list of packages to evaluate.\n packagePathsToEvaluate.add(resolveEntry.path);\n\n // Get the flattened bundle-able exports map for this dependency and iterate through our import paths to ensure nothing is missing.\n const exports = await getExportsMap(resolveEntry.path, { packages });\n const flattenedExports = flattenExportsMap(exports);\n\n for (const dependencyImportPath of dependencyImportPaths) {\n if (!flattenedExports[dependencyImportPath]) {\n preparePackageOverride({\n packageOverrides,\n dependencyDefinition,\n exports,\n isInternal: !isExternalPackage(resolveEntry.path),\n });\n\n await addExportsMapEntry({\n exports,\n packages,\n packagePath: resolveEntry.path,\n importPath: dependencyImportPath,\n });\n\n // Clear cache when we've mutated an override. Transforms need to re-run.\n packages.clear();\n\n changeCount++;\n\n // Since we've found a missing exports, we need to re-enqueue the dependency for evaluation.\n packagePathsToEvaluate.add(resolveEntry.path);\n evaluatedPackages.delete(resolveEntry.path);\n }\n }\n }\n\n return { changeCount, errors };\n}\n"]}
@@ -0,0 +1,67 @@
1
+ import { afterAll, afterEach, beforeAll, describe, expect, it, jest } from '@jest/globals';
2
+ import { PackageDefinitions } from '@ms-cloudpack/package-utilities';
3
+ import { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';
4
+ describe('evaluateImportsForOverrides', () => {
5
+ beforeAll(() => {
6
+ jest.spyOn(console, 'error').mockImplementation(() => {
7
+ // Disabling console.error to keep jest logs clean.
8
+ // This will also be used in the assertions to ensure that the errors are logged.
9
+ });
10
+ });
11
+ afterAll(() => {
12
+ console.error.mockRestore();
13
+ });
14
+ afterEach(() => {
15
+ console.error.mockClear();
16
+ });
17
+ it('should error out when dependency was not found in the resolve map', async () => {
18
+ const imports = new Map();
19
+ imports.set('exampleDependencyName', new Set(['exampleImportPath']));
20
+ const result = await evaluateImportsForOverrides({
21
+ definition: {
22
+ name: 'test',
23
+ version: '1.0.0',
24
+ },
25
+ evaluatedPackages: new Set(),
26
+ imports,
27
+ packageOverrides: [],
28
+ packagePathsToEvaluate: new Set(),
29
+ packages: new PackageDefinitions(),
30
+ resolveMap: {},
31
+ packagePath: '',
32
+ });
33
+ expect(console.error).toHaveBeenCalledTimes(1);
34
+ expect(result.changeCount).toBe(0);
35
+ expect(result.errors.length).toEqual(1);
36
+ });
37
+ it('should error out when definition of a dependency could not be loaded', async () => {
38
+ const imports = new Map();
39
+ imports.set('a', new Set(['b']));
40
+ const result = await evaluateImportsForOverrides({
41
+ definition: {
42
+ name: 'test',
43
+ version: '1.0.0',
44
+ },
45
+ evaluatedPackages: new Set(),
46
+ imports,
47
+ packageOverrides: [],
48
+ packagePathsToEvaluate: new Set(),
49
+ packages: new PackageDefinitions(),
50
+ resolveMap: {
51
+ a: {
52
+ version: '1.0.0',
53
+ name: 'a',
54
+ requiredBy: {
55
+ test: '1.0.0',
56
+ },
57
+ path: 'path',
58
+ },
59
+ },
60
+ packagePath: '',
61
+ });
62
+ expect(result.changeCount).toBe(0);
63
+ expect(result.errors.length).toEqual(1);
64
+ expect(console.error).toHaveBeenCalledTimes(1);
65
+ });
66
+ });
67
+ //# sourceMappingURL=evaluateImportsForOverrides.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluateImportsForOverrides.test.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterAll, afterEach, beforeAll, describe, expect, it, jest } from '@jest/globals';\nimport { PackageDefinitions } from '@ms-cloudpack/package-utilities';\nimport { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';\n\ntype MockErrorFn = jest.MockedFunction<typeof console.error>;\n\ndescribe('evaluateImportsForOverrides', () => {\n beforeAll(() => {\n jest.spyOn(console, 'error').mockImplementation(() => {\n // Disabling console.error to keep jest logs clean.\n // This will also be used in the assertions to ensure that the errors are logged.\n });\n });\n\n afterAll(() => {\n (console.error as MockErrorFn).mockRestore();\n });\n\n afterEach(() => {\n (console.error as MockErrorFn).mockClear();\n });\n\n it('should error out when dependency was not found in the resolve map', async () => {\n const imports = new Map<string, Set<string>>();\n imports.set('exampleDependencyName', new Set<string>(['exampleImportPath']));\n\n const result = await evaluateImportsForOverrides({\n definition: {\n name: 'test',\n version: '1.0.0',\n },\n evaluatedPackages: new Set<string>(),\n imports,\n packageOverrides: [],\n packagePathsToEvaluate: new Set<string>(),\n packages: new PackageDefinitions(),\n resolveMap: {},\n packagePath: '',\n });\n\n expect(console.error).toHaveBeenCalledTimes(1);\n expect(result.changeCount).toBe(0);\n expect(result.errors.length).toEqual(1);\n });\n\n it('should error out when definition of a dependency could not be loaded', async () => {\n const imports = new Map<string, Set<string>>();\n imports.set('a', new Set<string>(['b']));\n\n const result = await evaluateImportsForOverrides({\n definition: {\n name: 'test',\n version: '1.0.0',\n },\n evaluatedPackages: new Set<string>(),\n imports,\n packageOverrides: [],\n packagePathsToEvaluate: new Set<string>(),\n packages: new PackageDefinitions(),\n resolveMap: {\n a: {\n version: '1.0.0',\n name: 'a',\n requiredBy: {\n test: '1.0.0',\n },\n path: 'path',\n },\n },\n packagePath: '',\n });\n\n expect(result.changeCount).toBe(0);\n expect(result.errors.length).toEqual(1);\n expect(console.error).toHaveBeenCalledTimes(1);\n });\n});\n"]}
@@ -1,6 +1,6 @@
1
1
  import { reporter } from '../../reporter.js';
2
2
  import { red } from '@ms-cloudpack/task-reporter';
3
- import { configFileName } from '../../common/config.js';
3
+ import { configFileName } from '@ms-cloudpack/config';
4
4
  import { stopTelemetry } from '../../initTelemetry.js';
5
5
  /* Defines the "init" verb. */
6
6
  export function init(command) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,8BAA8B;AAC9B,MAAM,UAAU,IAAI,CAAC,OAAgB;IACnC,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CACV,sIAAsI,CACvI;SACA,MAAM,CAAC,OAAO,EAAE,8DAA8D,CAAC;SAC/E,MAAM,CAAC,SAAS,EAAE,0DAA0D,CAAC;SAC7E,MAAM,CAAC,SAAS,EAAE,2CAA2C,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,OAAoB,EAAE,EAAE;QACrC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAE3C,IAAI,cAAkC,CAAC;QACvC,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI;YACF,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;YAE5C,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE;gBACxB,SAAS,GAAG,IAAI,CAAC;gBACjB,cAAc,GAAG,oBAAoB,CAAC;aACvC;iBAAM;gBACL,cAAc,GAAG,WAAW;oBAC1B,CAAC,CAAC,YAAY,cAAc,UAAU,WAAW,aAAa;oBAC9D,CAAC,CAAC,qCAAqC,CAAC;aAC3C;SACF;QAAC,OAAO,KAAK,EAAE;YACd,SAAS,GAAG,IAAI,CAAC;YACjB,cAAc,GAAG,qBAAsB,KAAe,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;SAC/E;QAED,MAAM,aAAa,EAAE,CAAC;QACtB,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QAEpE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import type { Command } from 'commander';\nimport type { InitOptions } from './types.js';\nimport { reporter } from '../../reporter.js';\nimport { red } from '@ms-cloudpack/task-reporter';\nimport { configFileName } from '../../common/config.js';\nimport { stopTelemetry } from '../../initTelemetry.js';\n\n/* Defines the \"init\" verb. */\nexport function init(command: Command) {\n command\n .command('init')\n .description(\n 'Initializes a given app project and defines the necessary configuration overrides to make an existing app compatible with Cloudpack.',\n )\n .option('--fix', 'Applies fixes to all identified issues in internal packages.')\n .option('--reset', 'Ignores existing overrides when determining all entries.')\n .option('--check', 'Fails if any package exports are missing.')\n .action(async (options: InitOptions) => {\n const { init } = await import('./init.js');\n\n let completeReason: string | undefined;\n let hasErrors = false;\n try {\n const { changeCount } = await init(options);\n\n if (reporter.hasErrors()) {\n hasErrors = true;\n completeReason = 'Some tasks failed.';\n } else {\n completeReason = changeCount\n ? `Updated \"${configFileName}\" with ${changeCount} change(s).`\n : 'Looks good, no changes required. :)';\n }\n } catch (error) {\n hasErrors = true;\n completeReason = `Unexpected error: ${(error as Error).message || '<Error>'}`;\n }\n\n await stopTelemetry();\n reporter.complete(hasErrors ? red(completeReason) : completeReason);\n\n process.exit(hasErrors ? 1 : 0);\n });\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,8BAA8B;AAC9B,MAAM,UAAU,IAAI,CAAC,OAAgB;IACnC,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CACV,sIAAsI,CACvI;SACA,MAAM,CAAC,OAAO,EAAE,8DAA8D,CAAC;SAC/E,MAAM,CAAC,SAAS,EAAE,0DAA0D,CAAC;SAC7E,MAAM,CAAC,SAAS,EAAE,2CAA2C,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,OAAoB,EAAE,EAAE;QACrC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAE3C,IAAI,cAAkC,CAAC;QACvC,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI;YACF,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;YAE5C,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE;gBACxB,SAAS,GAAG,IAAI,CAAC;gBACjB,cAAc,GAAG,oBAAoB,CAAC;aACvC;iBAAM;gBACL,cAAc,GAAG,WAAW;oBAC1B,CAAC,CAAC,YAAY,cAAc,UAAU,WAAW,aAAa;oBAC9D,CAAC,CAAC,qCAAqC,CAAC;aAC3C;SACF;QAAC,OAAO,KAAK,EAAE;YACd,SAAS,GAAG,IAAI,CAAC;YACjB,cAAc,GAAG,qBAAsB,KAAe,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;SAC/E;QAED,MAAM,aAAa,EAAE,CAAC;QACtB,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QAEpE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import type { Command } from 'commander';\nimport type { InitOptions } from './types.js';\nimport { reporter } from '../../reporter.js';\nimport { red } from '@ms-cloudpack/task-reporter';\nimport { configFileName } from '@ms-cloudpack/config';\nimport { stopTelemetry } from '../../initTelemetry.js';\n\n/* Defines the \"init\" verb. */\nexport function init(command: Command) {\n command\n .command('init')\n .description(\n 'Initializes a given app project and defines the necessary configuration overrides to make an existing app compatible with Cloudpack.',\n )\n .option('--fix', 'Applies fixes to all identified issues in internal packages.')\n .option('--reset', 'Ignores existing overrides when determining all entries.')\n .option('--check', 'Fails if any package exports are missing.')\n .action(async (options: InitOptions) => {\n const { init } = await import('./init.js');\n\n let completeReason: string | undefined;\n let hasErrors = false;\n try {\n const { changeCount } = await init(options);\n\n if (reporter.hasErrors()) {\n hasErrors = true;\n completeReason = 'Some tasks failed.';\n } else {\n completeReason = changeCount\n ? `Updated \"${configFileName}\" with ${changeCount} change(s).`\n : 'Looks good, no changes required. :)';\n }\n } catch (error) {\n hasErrors = true;\n completeReason = `Unexpected error: ${(error as Error).message || '<Error>'}`;\n }\n\n await stopTelemetry();\n reporter.complete(hasErrors ? red(completeReason) : completeReason);\n\n process.exit(hasErrors ? 1 : 0);\n });\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { PackageDefinitions } from '@ms-cloudpack/package-utilities';
2
2
  import { createPackageOverrideTransform } from '../../common/createPackageOverrideTransform.js';
3
- import { configFileName, readConfig, writeConfig } from '../../common/config.js';
3
+ import { configFileName, readConfig, writeConfig } from '@ms-cloudpack/config';
4
4
  import { resolveDependenciesTask } from '../../tasks/resolveDependenciesTask.js';
5
5
  import { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';
6
6
  import { getImportsFromBundle } from './getImportsFromBundle.js';
@@ -50,7 +50,7 @@ export async function init(options) {
50
50
  continue;
51
51
  }
52
52
  // Given the package imports, find the missing exports maps and update packageOverrides.
53
- changeCount += await evaluateImportsForOverrides({
53
+ const result = await evaluateImportsForOverrides({
54
54
  definition,
55
55
  packages,
56
56
  packagePath,
@@ -60,10 +60,15 @@ export async function init(options) {
60
60
  packageOverrides,
61
61
  resolveMap,
62
62
  });
63
- if (options.check && changeCount > 0) {
64
- rootSpan?.addEvent('INIT_CHECK_FAILED');
65
- throw Error('Run "cloudpack init --reset" to update the config.');
63
+ if (options.check && (result.changeCount || result.errors.length)) {
64
+ rootSpan?.addEvent('INIT_CHECK_FAILED', {
65
+ reason: result.changeCount ? 'Config needs to be updated.' : result.errors,
66
+ });
67
+ throw Error(result.changeCount
68
+ ? 'Run "cloudpack init --reset" to update the config.'
69
+ : result.errors.map((e) => e).join('\n'));
66
70
  }
71
+ changeCount += result.changeCount;
67
72
  }
68
73
  if (options.fix) {
69
74
  await patchAllInternalPackageExports({ resolveMap, packageOverrides });
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"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","sourcesContent":["import { PackageDefinitions, type ResolveMap } from '@ms-cloudpack/package-utilities';\nimport { createPackageOverrideTransform } from '../../common/createPackageOverrideTransform.js';\nimport { configFileName, readConfig, writeConfig } from '../../common/config.js';\nimport { resolveDependenciesTask } from '../../tasks/resolveDependenciesTask.js';\nimport type { CloudpackConfig, PackageOverride } from '../../types.js';\nimport { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';\nimport { getImportsFromBundle } from './getImportsFromBundle.js';\nimport { patchAllInternalPackageExports } from './patchAllInternalPackageExports.js';\nimport type { InitOptions } from './types.js';\nimport { rootSpan } from '../../initTelemetry.js';\n\n/** Given the path, updates the Cloudpack config with overrides and project settings. */\nexport async function init(options: InitOptions): Promise<{ changeCount: number }> {\n if (options.check && options.fix) {\n throw Error('Cannot use --check and --fix together.');\n }\n\n if (options.check && options.reset) {\n throw Error('Cannot use --check and --reset together.');\n }\n\n const appPath = options.cwd || process.cwd();\n const config = await readConfig(appPath);\n const packageOverrides: PackageOverride[] = (!options.reset && config.packageOverrides) || [];\n const packages = new PackageDefinitions();\n\n packages.registerTransform(createPackageOverrideTransform({ packageOverrides }));\n\n // Try to resolve dependencies.\n const resolveMap = (await resolveDependenciesTask({ appPath, packages })) as ResolveMap;\n\n if (!resolveMap) {\n throw new Error(\"Couldn't resolve dependencies.\");\n }\n\n const packagePathsToEvaluate = new Set<string>([appPath]);\n const evaluatedPackages = new Set<string>();\n let changeCount = 0;\n\n while (packagePathsToEvaluate.size) {\n const packagePath = packagePathsToEvaluate.values().next().value as string;\n\n packagePathsToEvaluate.delete(packagePath);\n\n // Skip already-visited packages.\n if (!packagePath || evaluatedPackages.has(packagePath)) {\n continue;\n }\n\n evaluatedPackages.add(packagePath);\n\n const definition = await packages.get(packagePath, { refresh: true });\n\n if (!definition) {\n continue;\n }\n\n // Bundle the package and find the imports it depends on.\n const imports = await getImportsFromBundle({\n packagePath,\n definition,\n packages,\n });\n\n if (!imports) {\n console.info(`Skipping ${packagePath} evaluation due to no imports returned.`);\n continue;\n }\n\n // Given the package imports, find the missing exports maps and update packageOverrides.\n changeCount += await evaluateImportsForOverrides({\n definition,\n packages,\n packagePath,\n packagePathsToEvaluate,\n evaluatedPackages,\n imports,\n packageOverrides,\n resolveMap,\n });\n\n if (options.check && changeCount > 0) {\n rootSpan?.addEvent('INIT_CHECK_FAILED');\n\n throw Error('Run \"cloudpack init --reset\" to update the config.');\n }\n }\n\n if (options.fix) {\n await patchAllInternalPackageExports({ resolveMap, packageOverrides });\n }\n\n if (changeCount) {\n // Log the results to a file.\n console.log(`Writing results to ${configFileName}...`);\n\n const updatedConfig: CloudpackConfig = {\n ...config,\n ...(packageOverrides.length ? { packageOverrides } : {}),\n };\n await writeConfig(updatedConfig, appPath);\n }\n\n return {\n changeCount,\n };\n}\n"]}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"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","sourcesContent":["import { PackageDefinitions, type ResolveMap } from '@ms-cloudpack/package-utilities';\nimport { createPackageOverrideTransform } from '../../common/createPackageOverrideTransform.js';\nimport { configFileName, readConfig, writeConfig } from '@ms-cloudpack/config';\nimport { resolveDependenciesTask } from '../../tasks/resolveDependenciesTask.js';\nimport type { PackageOverride } from '../../types.js';\nimport type { CloudpackConfig } from '@ms-cloudpack/config';\nimport { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';\nimport { getImportsFromBundle } from './getImportsFromBundle.js';\nimport { patchAllInternalPackageExports } from './patchAllInternalPackageExports.js';\nimport type { InitOptions } from './types.js';\nimport { rootSpan } from '../../initTelemetry.js';\n\n/** Given the path, updates the Cloudpack config with overrides and project settings. */\nexport async function init(options: InitOptions): Promise<{ changeCount: number }> {\n if (options.check && options.fix) {\n throw Error('Cannot use --check and --fix together.');\n }\n\n if (options.check && options.reset) {\n throw Error('Cannot use --check and --reset together.');\n }\n\n const appPath = options.cwd || process.cwd();\n const config = await readConfig(appPath);\n const packageOverrides: PackageOverride[] = (!options.reset && config.packageOverrides) || [];\n const packages = new PackageDefinitions();\n\n packages.registerTransform(createPackageOverrideTransform({ packageOverrides }));\n\n // Try to resolve dependencies.\n const resolveMap = (await resolveDependenciesTask({ appPath, packages })) as ResolveMap;\n\n if (!resolveMap) {\n throw new Error(\"Couldn't resolve dependencies.\");\n }\n\n const packagePathsToEvaluate = new Set<string>([appPath]);\n const evaluatedPackages = new Set<string>();\n let changeCount = 0;\n\n while (packagePathsToEvaluate.size) {\n const packagePath = packagePathsToEvaluate.values().next().value as string;\n\n packagePathsToEvaluate.delete(packagePath);\n\n // Skip already-visited packages.\n if (!packagePath || evaluatedPackages.has(packagePath)) {\n continue;\n }\n\n evaluatedPackages.add(packagePath);\n\n const definition = await packages.get(packagePath, { refresh: true });\n\n if (!definition) {\n continue;\n }\n\n // Bundle the package and find the imports it depends on.\n const imports = await getImportsFromBundle({\n packagePath,\n definition,\n packages,\n });\n\n if (!imports) {\n console.info(`Skipping ${packagePath} evaluation due to no imports returned.`);\n continue;\n }\n\n // Given the package imports, find the missing exports maps and update packageOverrides.\n const result = await evaluateImportsForOverrides({\n definition,\n packages,\n packagePath,\n packagePathsToEvaluate,\n evaluatedPackages,\n imports,\n packageOverrides,\n resolveMap,\n });\n\n if (options.check && (result.changeCount || result.errors.length)) {\n rootSpan?.addEvent('INIT_CHECK_FAILED', {\n reason: result.changeCount ? 'Config needs to be updated.' : result.errors,\n });\n throw Error(\n result.changeCount\n ? 'Run \"cloudpack init --reset\" to update the config.'\n : result.errors.map((e) => e).join('\\n'),\n );\n }\n\n changeCount += result.changeCount;\n }\n\n if (options.fix) {\n await patchAllInternalPackageExports({ resolveMap, packageOverrides });\n }\n\n if (changeCount) {\n // Log the results to a file.\n console.log(`Writing results to ${configFileName}...`);\n\n const updatedConfig: CloudpackConfig = {\n ...config,\n ...(packageOverrides.length ? { packageOverrides } : {}),\n };\n await writeConfig(updatedConfig, appPath);\n }\n\n return {\n changeCount,\n };\n}\n"]}
@@ -7,7 +7,7 @@ import { readJson } from '@ms-cloudpack/json-utilities';
7
7
  import { createTestFileStructure } from '@ms-cloudpack/test-utilities';
8
8
  import { noLoggingConfig } from '@ms-cloudpack/task-reporter';
9
9
  import { reporter } from '../../reporter.js';
10
- import { getConfigPath, readConfig } from '../../common/config.js';
10
+ import { getConfigPath, readConfig } from '@ms-cloudpack/config';
11
11
  const { rm } = fs.promises;
12
12
  describe('init', () => {
13
13
  let testPath;
@@ -78,7 +78,7 @@ describe('init', () => {
78
78
  },
79
79
  },
80
80
  },
81
- "versionRequirement": "1.0.0",
81
+ "versionRequirement": "^1.0.0",
82
82
  },
83
83
  ],
84
84
  }
@@ -163,7 +163,7 @@ describe('init', () => {
163
163
  },
164
164
  },
165
165
  },
166
- "versionRequirement": "1.0.0",
166
+ "versionRequirement": "^1.0.0",
167
167
  },
168
168
  ],
169
169
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../../src/commands/init/init.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, describe, it, expect, beforeAll } from '@jest/globals';\nimport { init } from './init.js';\nimport fs from 'fs';\nimport path from 'path';\nimport { isFile } from '@ms-cloudpack/path-utilities';\nimport { readJson } from '@ms-cloudpack/json-utilities';\nimport type { PackageJson } from '@ms-cloudpack/bundler-types';\nimport { createTestFileStructure } from '@ms-cloudpack/test-utilities';\nimport { noLoggingConfig } from '@ms-cloudpack/task-reporter';\nimport { reporter } from '../../reporter.js';\nimport { getConfigPath, readConfig } from '../../common/config.js';\n\nconst { rm } = fs.promises;\n\ndescribe('init', () => {\n let testPath: string | undefined;\n\n beforeAll(() => {\n reporter.setOptions(noLoggingConfig);\n });\n\n afterEach(async () => {\n if (testPath) {\n await rm(testPath, { recursive: true });\n testPath = undefined;\n }\n });\n\n it('can make no changes to a package that has no config and needs no changes', async () => {\n testPath = await createTestFileStructure({\n 'package.json': {\n name: 'test-package',\n version: '1.0.0',\n main: 'lib/index.js',\n dependencies: {\n foo: '1.0.0',\n },\n },\n 'src/index.ts': 'import foo from \"foo\"; console.log(foo);',\n 'node_modules/foo/package.json': {\n name: 'foo',\n version: '1.0.0',\n main: 'lib/index.js',\n },\n 'node_modules/foo/lib/index.js': 'export default \"foo\";',\n });\n\n await init({ cwd: testPath });\n\n expect(await isFile(getConfigPath(testPath))).toBe(false);\n });\n\n it('can create a config when a package needs to have an exports map defined', async () => {\n testPath = await createTestFileStructure({\n 'package.json': {\n name: 'test-package',\n version: '1.0.0',\n main: 'lib/index.js',\n dependencies: {\n foo: '1.0.0',\n },\n },\n 'src/index.ts': 'import foo from \"foo/lib/bar\"; console.log(foo);',\n 'node_modules/foo/package.json': {\n name: 'foo',\n version: '1.0.0',\n main: 'lib/index.js',\n },\n 'node_modules/foo/lib/index.js': 'export default \"index\";',\n 'node_modules/foo/lib/bar.js': 'export default \"foo\";',\n });\n\n expect(await init({ cwd: testPath })).toEqual({ changeCount: 1 });\n\n const configPath = getConfigPath(testPath);\n expect(await isFile(configPath)).toBe(true);\n expect(await readJson(configPath)).toMatchInlineSnapshot(`\n {\n \"packageOverrides\": [\n {\n \"name\": \"foo\",\n \"overrides\": {\n \"exports\": {\n \".\": {\n \"default\": \"./lib/index.js\",\n },\n \"./lib/bar\": {\n \"default\": \"./lib/bar.js\",\n },\n },\n },\n \"versionRequirement\": \"1.0.0\",\n },\n ],\n }\n `);\n });\n\n it('can modify inner-repo packages if the fix option is specified and a package needs an override', async () => {\n testPath = await createTestFileStructure(\n {\n 'app/package.json': {\n name: 'test-package',\n version: '1.0.0',\n main: 'lib/index.js',\n dependencies: {\n library: '1.0.0',\n },\n },\n 'app/src/index.ts': 'import foo from \"library/lib/bar\"; console.log(foo);',\n 'library/package.json': {\n name: 'library',\n version: '1.0.0',\n main: 'lib/index.js',\n },\n 'library/lib/index.js': 'export default \"index\";',\n 'library/lib/bar.js': 'export default \"bar\";',\n },\n { links: { 'app/node_modules/library': 'library' } },\n );\n\n await init({ cwd: path.join(testPath, 'app'), fix: true });\n\n // There are no overrides required in this scenario; everything is fixed locally, so no\n // config file should be created.\n expect(await isFile(getConfigPath(testPath))).toBe(false);\n\n // Both the app and the library should have been fixed to have the correct exports map.\n\n // The app package shouldn't require an exports map; no changes expected.\n const appDefinition = (await readJson(path.join(testPath, 'app/package.json'))) as PackageJson;\n expect(appDefinition.exports).toBeUndefined();\n\n // The library exports should have the main entry hoisted (\".\"), as well as the \"./lib/bar\" import that the app\n // depends on. There should be no source/typings as the library only has a js file and no src/*.ts\n // files.\n const libraryDefinition = (await readJson(path.join(testPath, 'library/package.json'))) as PackageJson;\n expect(libraryDefinition.exports).toMatchInlineSnapshot(`\n {\n \".\": {\n \"default\": \"./lib/index.js\",\n },\n \"./lib/bar\": {\n \"default\": \"./lib/bar.js\",\n },\n }\n `);\n });\n\n it('can avoids modifying external packages if the fix option is specified and a package needs an override', async () => {\n testPath = await createTestFileStructure({\n 'package.json': {\n name: 'test-package',\n version: '1.0.0',\n main: 'lib/index.js',\n dependencies: {\n library: '1.0.0',\n },\n },\n 'src/index.ts': 'import foo from \"library/lib/bar\"; console.log(foo);',\n 'node_modules/library/package.json': {\n name: 'library',\n version: '1.0.0',\n main: 'lib/index.js',\n },\n 'node_modules/library/lib/index.js': 'export default \"index\";',\n 'node_modules/library/lib/bar.js': 'export default \"bar\";',\n });\n\n await init({ cwd: testPath, fix: true });\n\n // An override config would be created for this scenario.\n const config = await readConfig(testPath);\n expect(config).toMatchInlineSnapshot(`\n {\n \"packageOverrides\": [\n {\n \"name\": \"library\",\n \"overrides\": {\n \"exports\": {\n \".\": {\n \"default\": \"./lib/index.js\",\n },\n \"./lib/bar\": {\n \"default\": \"./lib/bar.js\",\n },\n },\n },\n \"versionRequirement\": \"1.0.0\",\n },\n ],\n }\n `);\n\n // The library package shouldn't be modified.\n const libraryDefinition = (await readJson(path.join(testPath, 'node_modules/library/package.json'))) as PackageJson;\n expect(libraryDefinition.exports).toBeUndefined();\n });\n\n it('can update an existing exports map when fix is provided', async () => {\n testPath = await createTestFileStructure(\n {\n 'app/package.json': {\n name: 'test-package',\n version: '1.0.0',\n main: 'lib/index.js',\n dependencies: {\n library: '1.0.0',\n },\n },\n 'app/src/index.ts': 'import bar from \"library/lib/bar\"; console.log(bar);',\n 'library/package.json': {\n name: 'library',\n version: '1.0.0',\n exports: {\n '.': {\n default: './lib/index.js',\n },\n },\n },\n 'library/lib/index.js': 'export default \"index\";',\n 'library/lib/bar.js': 'export default \"bar\";',\n },\n { links: { 'app/node_modules/library': 'library' } },\n );\n\n await init({ cwd: path.join(testPath, 'app'), fix: true });\n\n expect(await isFile(getConfigPath(testPath))).toBe(false);\n expect(await readJson(path.join(testPath, 'library/package.json'))).toMatchInlineSnapshot(`\n {\n \"exports\": {\n \".\": {\n \"default\": \"./lib/index.js\",\n },\n \"./lib/bar\": {\n \"default\": \"./lib/bar.js\",\n },\n },\n \"name\": \"library\",\n \"version\": \"1.0.0\",\n }\n `);\n });\n});\n"]}
1
+ {"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../../src/commands/init/init.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, describe, it, expect, beforeAll } from '@jest/globals';\nimport { init } from './init.js';\nimport fs from 'fs';\nimport path from 'path';\nimport { isFile } from '@ms-cloudpack/path-utilities';\nimport { readJson } from '@ms-cloudpack/json-utilities';\nimport type { PackageJson } from '@ms-cloudpack/bundler-types';\nimport { createTestFileStructure } from '@ms-cloudpack/test-utilities';\nimport { noLoggingConfig } from '@ms-cloudpack/task-reporter';\nimport { reporter } from '../../reporter.js';\nimport { getConfigPath, readConfig } from '@ms-cloudpack/config';\n\nconst { rm } = fs.promises;\n\ndescribe('init', () => {\n let testPath: string | undefined;\n\n beforeAll(() => {\n reporter.setOptions(noLoggingConfig);\n });\n\n afterEach(async () => {\n if (testPath) {\n await rm(testPath, { recursive: true });\n testPath = undefined;\n }\n });\n\n it('can make no changes to a package that has no config and needs no changes', async () => {\n testPath = await createTestFileStructure({\n 'package.json': {\n name: 'test-package',\n version: '1.0.0',\n main: 'lib/index.js',\n dependencies: {\n foo: '1.0.0',\n },\n },\n 'src/index.ts': 'import foo from \"foo\"; console.log(foo);',\n 'node_modules/foo/package.json': {\n name: 'foo',\n version: '1.0.0',\n main: 'lib/index.js',\n },\n 'node_modules/foo/lib/index.js': 'export default \"foo\";',\n });\n\n await init({ cwd: testPath });\n\n expect(await isFile(getConfigPath(testPath))).toBe(false);\n });\n\n it('can create a config when a package needs to have an exports map defined', async () => {\n testPath = await createTestFileStructure({\n 'package.json': {\n name: 'test-package',\n version: '1.0.0',\n main: 'lib/index.js',\n dependencies: {\n foo: '1.0.0',\n },\n },\n 'src/index.ts': 'import foo from \"foo/lib/bar\"; console.log(foo);',\n 'node_modules/foo/package.json': {\n name: 'foo',\n version: '1.0.0',\n main: 'lib/index.js',\n },\n 'node_modules/foo/lib/index.js': 'export default \"index\";',\n 'node_modules/foo/lib/bar.js': 'export default \"foo\";',\n });\n\n expect(await init({ cwd: testPath })).toEqual({ changeCount: 1 });\n\n const configPath = getConfigPath(testPath);\n expect(await isFile(configPath)).toBe(true);\n expect(await readJson(configPath)).toMatchInlineSnapshot(`\n {\n \"packageOverrides\": [\n {\n \"name\": \"foo\",\n \"overrides\": {\n \"exports\": {\n \".\": {\n \"default\": \"./lib/index.js\",\n },\n \"./lib/bar\": {\n \"default\": \"./lib/bar.js\",\n },\n },\n },\n \"versionRequirement\": \"^1.0.0\",\n },\n ],\n }\n `);\n });\n\n it('can modify inner-repo packages if the fix option is specified and a package needs an override', async () => {\n testPath = await createTestFileStructure(\n {\n 'app/package.json': {\n name: 'test-package',\n version: '1.0.0',\n main: 'lib/index.js',\n dependencies: {\n library: '1.0.0',\n },\n },\n 'app/src/index.ts': 'import foo from \"library/lib/bar\"; console.log(foo);',\n 'library/package.json': {\n name: 'library',\n version: '1.0.0',\n main: 'lib/index.js',\n },\n 'library/lib/index.js': 'export default \"index\";',\n 'library/lib/bar.js': 'export default \"bar\";',\n },\n { links: { 'app/node_modules/library': 'library' } },\n );\n\n await init({ cwd: path.join(testPath, 'app'), fix: true });\n\n // There are no overrides required in this scenario; everything is fixed locally, so no\n // config file should be created.\n expect(await isFile(getConfigPath(testPath))).toBe(false);\n\n // Both the app and the library should have been fixed to have the correct exports map.\n\n // The app package shouldn't require an exports map; no changes expected.\n const appDefinition = (await readJson(path.join(testPath, 'app/package.json'))) as PackageJson;\n expect(appDefinition.exports).toBeUndefined();\n\n // The library exports should have the main entry hoisted (\".\"), as well as the \"./lib/bar\" import that the app\n // depends on. There should be no source/typings as the library only has a js file and no src/*.ts\n // files.\n const libraryDefinition = (await readJson(path.join(testPath, 'library/package.json'))) as PackageJson;\n expect(libraryDefinition.exports).toMatchInlineSnapshot(`\n {\n \".\": {\n \"default\": \"./lib/index.js\",\n },\n \"./lib/bar\": {\n \"default\": \"./lib/bar.js\",\n },\n }\n `);\n });\n\n it('can avoids modifying external packages if the fix option is specified and a package needs an override', async () => {\n testPath = await createTestFileStructure({\n 'package.json': {\n name: 'test-package',\n version: '1.0.0',\n main: 'lib/index.js',\n dependencies: {\n library: '1.0.0',\n },\n },\n 'src/index.ts': 'import foo from \"library/lib/bar\"; console.log(foo);',\n 'node_modules/library/package.json': {\n name: 'library',\n version: '1.0.0',\n main: 'lib/index.js',\n },\n 'node_modules/library/lib/index.js': 'export default \"index\";',\n 'node_modules/library/lib/bar.js': 'export default \"bar\";',\n });\n\n await init({ cwd: testPath, fix: true });\n\n // An override config would be created for this scenario.\n const config = await readConfig(testPath);\n expect(config).toMatchInlineSnapshot(`\n {\n \"packageOverrides\": [\n {\n \"name\": \"library\",\n \"overrides\": {\n \"exports\": {\n \".\": {\n \"default\": \"./lib/index.js\",\n },\n \"./lib/bar\": {\n \"default\": \"./lib/bar.js\",\n },\n },\n },\n \"versionRequirement\": \"^1.0.0\",\n },\n ],\n }\n `);\n\n // The library package shouldn't be modified.\n const libraryDefinition = (await readJson(path.join(testPath, 'node_modules/library/package.json'))) as PackageJson;\n expect(libraryDefinition.exports).toBeUndefined();\n });\n\n it('can update an existing exports map when fix is provided', async () => {\n testPath = await createTestFileStructure(\n {\n 'app/package.json': {\n name: 'test-package',\n version: '1.0.0',\n main: 'lib/index.js',\n dependencies: {\n library: '1.0.0',\n },\n },\n 'app/src/index.ts': 'import bar from \"library/lib/bar\"; console.log(bar);',\n 'library/package.json': {\n name: 'library',\n version: '1.0.0',\n exports: {\n '.': {\n default: './lib/index.js',\n },\n },\n },\n 'library/lib/index.js': 'export default \"index\";',\n 'library/lib/bar.js': 'export default \"bar\";',\n },\n { links: { 'app/node_modules/library': 'library' } },\n );\n\n await init({ cwd: path.join(testPath, 'app'), fix: true });\n\n expect(await isFile(getConfigPath(testPath))).toBe(false);\n expect(await readJson(path.join(testPath, 'library/package.json'))).toMatchInlineSnapshot(`\n {\n \"exports\": {\n \".\": {\n \"default\": \"./lib/index.js\",\n },\n \"./lib/bar\": {\n \"default\": \"./lib/bar.js\",\n },\n },\n \"name\": \"library\",\n \"version\": \"1.0.0\",\n }\n `);\n });\n});\n"]}
@@ -4,7 +4,6 @@ import type { PackageJson, PackageJsonExports } from '@ms-cloudpack/bundler-type
4
4
  * Returns an existing package override, or if missing, creates one and returns that.
5
5
  */
6
6
  export declare function preparePackageOverride(options: {
7
- definition: PackageJson;
8
7
  dependencyDefinition: PackageJson;
9
8
  exports: PackageJsonExports;
10
9
  isInternal: boolean;
@@ -3,15 +3,12 @@ import { findPackageOverride } from '../../common/findPackageOverride.js';
3
3
  * Returns an existing package override, or if missing, creates one and returns that.
4
4
  */
5
5
  export function preparePackageOverride(options) {
6
- const { definition, dependencyDefinition, exports, isInternal, packageOverrides } = options;
7
- const versionRequirement = definition.dependencies?.[dependencyDefinition.name || ''] ||
8
- definition.peerDependencies?.[dependencyDefinition.name || ''] ||
9
- '*';
6
+ const { dependencyDefinition, exports, isInternal, packageOverrides } = options;
10
7
  let entryOverride = findPackageOverride(packageOverrides, dependencyDefinition.name || '', dependencyDefinition.version || '');
11
8
  if (!entryOverride) {
12
9
  entryOverride = {
13
10
  name: dependencyDefinition.name || '',
14
- versionRequirement,
11
+ versionRequirement: `^${dependencyDefinition.version}`,
15
12
  overrides: {
16
13
  exports,
17
14
  },
@@ -1 +1 @@
1
- {"version":3,"file":"preparePackageOverride.js","sourceRoot":"","sources":["../../../src/commands/init/preparePackageOverride.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAI1E;;GAEG;AAEH,MAAM,UAAU,sBAAsB,CAAC,OAMtC;IACC,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAC5F,MAAM,kBAAkB,GACtB,UAAU,CAAC,YAAY,EAAE,CAAC,oBAAoB,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1D,UAAU,CAAC,gBAAgB,EAAE,CAAC,oBAAoB,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9D,GAAG,CAAC;IAEN,IAAI,aAAa,GAAG,mBAAmB,CACrC,gBAAgB,EAChB,oBAAoB,CAAC,IAAI,IAAI,EAAE,EAC/B,oBAAoB,CAAC,OAAO,IAAI,EAAE,CACnC,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE;QAClB,aAAa,GAAG;YACd,IAAI,EAAE,oBAAoB,CAAC,IAAI,IAAI,EAAE;YACrC,kBAAkB;YAElB,SAAS,EAAE;gBACT,OAAO;aACR;SACF,CAAC;QAEF,IAAI,UAAU,EAAE;YACd,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;SACjC;QAED,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACtC;IAED,OAAO,aAAiF,CAAC;AAC3F,CAAC","sourcesContent":["import { findPackageOverride } from '../../common/findPackageOverride.js';\nimport type { PackageOverride } from '../../types.js';\nimport type { PackageJson, PackageJsonExports } from '@ms-cloudpack/bundler-types';\n\n/**\n * Returns an existing package override, or if missing, creates one and returns that.\n */\n\nexport function preparePackageOverride(options: {\n definition: PackageJson;\n dependencyDefinition: PackageJson;\n exports: PackageJsonExports;\n isInternal: boolean;\n packageOverrides: PackageOverride[];\n}): PackageOverride & { overrides: { exports: PackageJsonExports } } {\n const { definition, dependencyDefinition, exports, isInternal, packageOverrides } = options;\n const versionRequirement =\n definition.dependencies?.[dependencyDefinition.name || ''] ||\n definition.peerDependencies?.[dependencyDefinition.name || ''] ||\n '*';\n\n let entryOverride = findPackageOverride(\n packageOverrides,\n dependencyDefinition.name || '',\n dependencyDefinition.version || '',\n );\n\n if (!entryOverride) {\n entryOverride = {\n name: dependencyDefinition.name || '',\n versionRequirement,\n\n overrides: {\n exports,\n },\n };\n\n if (isInternal) {\n entryOverride.isInternal = true;\n }\n\n packageOverrides.push(entryOverride);\n }\n\n return entryOverride as PackageOverride & { overrides: { exports: PackageJsonExports } };\n}\n"]}
1
+ {"version":3,"file":"preparePackageOverride.js","sourceRoot":"","sources":["../../../src/commands/init/preparePackageOverride.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAI1E;;GAEG;AAEH,MAAM,UAAU,sBAAsB,CAAC,OAKtC;IACC,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAEhF,IAAI,aAAa,GAAG,mBAAmB,CACrC,gBAAgB,EAChB,oBAAoB,CAAC,IAAI,IAAI,EAAE,EAC/B,oBAAoB,CAAC,OAAO,IAAI,EAAE,CACnC,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE;QAClB,aAAa,GAAG;YACd,IAAI,EAAE,oBAAoB,CAAC,IAAI,IAAI,EAAE;YACrC,kBAAkB,EAAE,IAAI,oBAAoB,CAAC,OAAO,EAAE;YAEtD,SAAS,EAAE;gBACT,OAAO;aACR;SACF,CAAC;QAEF,IAAI,UAAU,EAAE;YACd,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;SACjC;QAED,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACtC;IAED,OAAO,aAAiF,CAAC;AAC3F,CAAC","sourcesContent":["import { findPackageOverride } from '../../common/findPackageOverride.js';\nimport type { PackageOverride } from '../../types.js';\nimport type { PackageJson, PackageJsonExports } from '@ms-cloudpack/bundler-types';\n\n/**\n * Returns an existing package override, or if missing, creates one and returns that.\n */\n\nexport function preparePackageOverride(options: {\n dependencyDefinition: PackageJson;\n exports: PackageJsonExports;\n isInternal: boolean;\n packageOverrides: PackageOverride[];\n}): PackageOverride & { overrides: { exports: PackageJsonExports } } {\n const { dependencyDefinition, exports, isInternal, packageOverrides } = options;\n\n let entryOverride = findPackageOverride(\n packageOverrides,\n dependencyDefinition.name || '',\n dependencyDefinition.version || '',\n );\n\n if (!entryOverride) {\n entryOverride = {\n name: dependencyDefinition.name || '',\n versionRequirement: `^${dependencyDefinition.version}`,\n\n overrides: {\n exports,\n },\n };\n\n if (isInternal) {\n entryOverride.isInternal = true;\n }\n\n packageOverrides.push(entryOverride);\n }\n\n return entryOverride as PackageOverride & { overrides: { exports: PackageJsonExports } };\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  import type { PackageJson } from '@ms-cloudpack/bundler-types';
2
2
  import type { Express } from '@ms-cloudpack/create-express-app';
3
- import type { ApiServer, BundleServer, CloudpackConfig, Session } from '../../../types.js';
3
+ import type { BundleServer } from '../../../types.js';
4
+ import type { ApiServer, Session } from '@ms-cloudpack/api-server';
5
+ import type { CloudpackConfig } from '@ms-cloudpack/config';
4
6
  /**
5
7
  * Creates the routes for the express app, considering how the config is defined.
6
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"createRoutes.js","sourceRoot":"","sources":["../../../../src/commands/start/appServer/createRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageJson } from '@ms-cloudpack/bundler-types';\nimport type { Express, Request, Response } from '@ms-cloudpack/create-express-app';\nimport { express } from '@ms-cloudpack/create-express-app';\nimport { createImportMap } from '@ms-cloudpack/package-utilities';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\nimport path from 'path';\nimport type { ApiServer, BundleServer, CloudpackConfig, Session } from '../../../types.js';\nimport { error } from './error.js';\nimport { getHtmlResponse } from './getHtmlResponse.js';\nimport { getInlineScripts } from './inlineScripts/getInlineScripts.js';\nimport { handleSessionVersion } from './handleSessionVersion.js';\nimport { log } from './log.js';\nimport { setHeaders } from './setHeaders.js';\n\n/**\n * Creates the routes for the express app, considering how the config is defined.\n */\nexport function createRoutes({\n app,\n url,\n session,\n definition,\n bundleServer,\n apiServer,\n config,\n}: {\n app: Express;\n url: string;\n session: Session;\n definition: PackageJson;\n bundleServer: BundleServer;\n apiServer: ApiServer;\n config: CloudpackConfig;\n}) {\n const routes = [...(config.devServer?.routes || [])];\n const hasDefaultRoute = routes.some((route) => route.match === '*' || route.match === '/');\n\n if (!hasDefaultRoute) {\n routes.push({\n match: '*',\n exportEntry: '.',\n });\n }\n\n for (const route of routes) {\n if (route.staticPath) {\n app.use(route.match, express.static(path.resolve(session.appPath, route.staticPath)));\n } else {\n app.get(route.match, (req: Request, res: Response) => {\n (async () => {\n // Build the import map if it hasn't been built yet for this session version.\n const sessionVersion = handleSessionVersion(session, req);\n const importMap =\n session.getImportMap() ||\n session.setImportMap(\n await createImportMap(session.resolveMap, bundleServer.url, {\n sessionVersion,\n targetVersions: session.targetVersions,\n }),\n );\n\n // Parse the request path, extension, grab the overlay script path.\n const requestPath = slash(req.path.substring(1));\n const requestExt = path.extname(requestPath);\n const overlayScript = importMap.imports['@ms-cloudpack/overlay'];\n const entryScript =\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n route.exportEntry && importMap.imports[slash(path.join(definition.name!, route.exportEntry))];\n\n // Set the apppropriate Cloudpack headers/cookies in the response.\n // TODO: setting the headers here prohibits cases where the page rendering is owned by existing server code\n // that can only accept changing the scripts. We should consider moving to a model where an initial script\n // fetch loads the import map and sets Cloudpack settings in local storage rather than headers/cookies.\n setHeaders({ res, session, apiServer });\n\n const inlineScripts = await getInlineScripts();\n const { html, statusCode } = await getHtmlResponse({\n route,\n baseUrl: url,\n importMap,\n overlayScript,\n entryScript,\n session,\n definition,\n inlineScripts,\n });\n\n // Send the result.\n res.status(statusCode).send(html).end();\n\n log(`App server: Request: ${requestPath}, ext: ${requestExt}`);\n })().catch((err) => {\n error((err as Error)?.stack || err);\n res.status(500).send(`Error loading app: ${err}`);\n });\n });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"createRoutes.js","sourceRoot":"","sources":["../../../../src/commands/start/appServer/createRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageJson } from '@ms-cloudpack/bundler-types';\nimport type { Express, Request, Response } from '@ms-cloudpack/create-express-app';\nimport { express } from '@ms-cloudpack/create-express-app';\nimport { createImportMap } from '@ms-cloudpack/package-utilities';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\nimport path from 'path';\nimport type { BundleServer } from '../../../types.js';\nimport type { ApiServer, Session } from '@ms-cloudpack/api-server';\nimport { error } from './error.js';\nimport { getHtmlResponse } from './getHtmlResponse.js';\nimport { getInlineScripts } from './inlineScripts/getInlineScripts.js';\nimport { handleSessionVersion } from './handleSessionVersion.js';\nimport { log } from './log.js';\nimport { setHeaders } from './setHeaders.js';\nimport type { CloudpackConfig } from '@ms-cloudpack/config';\n\n/**\n * Creates the routes for the express app, considering how the config is defined.\n */\nexport function createRoutes({\n app,\n url,\n session,\n definition,\n bundleServer,\n apiServer,\n config,\n}: {\n app: Express;\n url: string;\n session: Session;\n definition: PackageJson;\n bundleServer: BundleServer;\n apiServer: ApiServer;\n config: CloudpackConfig;\n}) {\n const routes = [...(config.devServer?.routes || [])];\n const hasDefaultRoute = routes.some((route) => route.match === '*' || route.match === '/');\n\n if (!hasDefaultRoute) {\n routes.push({\n match: '*',\n exportEntry: '.',\n });\n }\n\n for (const route of routes) {\n if (route.staticPath) {\n app.use(route.match, express.static(path.resolve(session.appPath, route.staticPath)));\n } else {\n app.get(route.match, (req: Request, res: Response) => {\n (async () => {\n // Build the import map if it hasn't been built yet for this session version.\n const sessionVersion = handleSessionVersion(session, req);\n const importMap =\n session.getImportMap() ||\n session.setImportMap(\n await createImportMap(session.resolveMap, bundleServer.url, {\n sessionVersion,\n targetVersions: session.targetVersions,\n }),\n );\n\n // Parse the request path, extension, grab the overlay script path.\n const requestPath = slash(req.path.substring(1));\n const requestExt = path.extname(requestPath);\n const overlayScript = importMap.imports['@ms-cloudpack/overlay'];\n const entryScript =\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n route.exportEntry && importMap.imports[slash(path.join(definition.name!, route.exportEntry))];\n\n // Set the apppropriate Cloudpack headers/cookies in the response.\n // TODO: setting the headers here prohibits cases where the page rendering is owned by existing server code\n // that can only accept changing the scripts. We should consider moving to a model where an initial script\n // fetch loads the import map and sets Cloudpack settings in local storage rather than headers/cookies.\n setHeaders({ res, session, apiServer });\n\n const inlineScripts = await getInlineScripts();\n const { html, statusCode } = await getHtmlResponse({\n route,\n baseUrl: url,\n importMap,\n overlayScript,\n entryScript,\n session,\n definition,\n inlineScripts,\n });\n\n // Send the result.\n res.status(statusCode).send(html).end();\n\n log(`App server: Request: ${requestPath}, ext: ${requestExt}`);\n })().catch((err) => {\n error((err as Error)?.stack || err);\n res.status(500).send(`Error loading app: ${err}`);\n });\n });\n }\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { Request } from '@ms-cloudpack/create-express-app';
2
- import type { Session } from '../../../types.js';
2
+ import type { Session } from '@ms-cloudpack/api-server';
3
3
  /**
4
4
  * Get the latest refresh version either from the cookie in request or from the session.
5
5
  * Update the session with the latest refresh version.
@@ -1 +1 @@
1
- {"version":3,"file":"handleSessionVersion.js","sourceRoot":"","sources":["../../../../src/commands/start/appServer/handleSessionVersion.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,GAAY;IACjE,MAAM,kBAAkB,GAAG,MAAM,CAC/B,GAAG,CAAC,OAAO,CAAC,MAAM;QAChB,EAAE,KAAK,CAAC,WAAW,GAAG,4BAA4B,OAAO,CAAC,WAAW,EAAE,GAAG,kBAAkB,CAAC;QAC7F,EAAE,GAAG,EAAE,IAAI,GAAG,CACjB,CAAC;IACF,OAAO,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;IAEpD,OAAO,OAAO,CAAC,iBAAiB,EAAE,CAAC;AACrC,CAAC","sourcesContent":["import type { Request } from '@ms-cloudpack/create-express-app';\nimport type { Session } from '../../../types.js';\n\n/**\n * Get the latest refresh version either from the cookie in request or from the session.\n * Update the session with the latest refresh version.\n */\nexport function handleSessionVersion(session: Session, req: Request) {\n const lastSessionVersion = Number(\n req.headers.cookie\n ?.match('(^|;)\\\\s*' + `cloudpack-sessionVersion-${session.projectName}` + '\\\\s*=\\\\s*([^;]+)')\n ?.pop() || '0',\n );\n session.incrementSessionVersion(lastSessionVersion);\n\n return session.getSessionVersion();\n}\n"]}
1
+ {"version":3,"file":"handleSessionVersion.js","sourceRoot":"","sources":["../../../../src/commands/start/appServer/handleSessionVersion.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,GAAY;IACjE,MAAM,kBAAkB,GAAG,MAAM,CAC/B,GAAG,CAAC,OAAO,CAAC,MAAM;QAChB,EAAE,KAAK,CAAC,WAAW,GAAG,4BAA4B,OAAO,CAAC,WAAW,EAAE,GAAG,kBAAkB,CAAC;QAC7F,EAAE,GAAG,EAAE,IAAI,GAAG,CACjB,CAAC;IACF,OAAO,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;IAEpD,OAAO,OAAO,CAAC,iBAAiB,EAAE,CAAC;AACrC,CAAC","sourcesContent":["import type { Request } from '@ms-cloudpack/create-express-app';\nimport type { Session } from '@ms-cloudpack/api-server';\n\n/**\n * Get the latest refresh version either from the cookie in request or from the session.\n * Update the session with the latest refresh version.\n */\nexport function handleSessionVersion(session: Session, req: Request) {\n const lastSessionVersion = Number(\n req.headers.cookie\n ?.match('(^|;)\\\\s*' + `cloudpack-sessionVersion-${session.projectName}` + '\\\\s*=\\\\s*([^;]+)')\n ?.pop() || '0',\n );\n session.incrementSessionVersion(lastSessionVersion);\n\n return session.getSessionVersion();\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { Response } from '@ms-cloudpack/create-express-app';
2
- import type { ApiServer, Session } from '../../../types.js';
2
+ import type { ApiServer, Session } from '@ms-cloudpack/api-server';
3
3
  /**
4
4
  * Set the Cloudpack headers and cookies in the response.
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"setHeaders.js","sourceRoot":"","sources":["../../../../src/commands/start/appServer/setHeaders.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAA6D;IAC/G,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACxC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IACxC,GAAG,CAAC,MAAM,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;IAE/C,GAAG,CAAC,MAAM,CAAC,sBAAsB,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/C,GAAG,CAAC,MAAM,CAAC,4BAA4B,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,GAAG,CAAC,MAAM,CAAC,4BAA4B,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC3F,GAAG,CAAC,MAAM,CAAC,mBAAmB,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;AACjD,CAAC","sourcesContent":["import type { Response } from '@ms-cloudpack/create-express-app';\nimport type { ApiServer, Session } from '../../../types.js';\n\n/**\n * Set the Cloudpack headers and cookies in the response.\n */\nexport function setHeaders({ res, session, apiServer }: { res: Response; session: Session; apiServer: ApiServer }) {\n res.header('Content-Type', 'text/html');\n res.header('Cache-Control', 'no-cache');\n res.header('Access-Control-Allow-Origin', '*');\n\n res.cookie('cloudpack-session-id', session.id);\n res.cookie('cloudpack-session-sequence', session.sequence);\n res.cookie(`cloudpack-sessionVersion-${session.projectName}`, session.getSessionVersion());\n res.cookie('cloudpack-api-url', apiServer.url);\n}\n"]}
1
+ {"version":3,"file":"setHeaders.js","sourceRoot":"","sources":["../../../../src/commands/start/appServer/setHeaders.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAA6D;IAC/G,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACxC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IACxC,GAAG,CAAC,MAAM,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;IAE/C,GAAG,CAAC,MAAM,CAAC,sBAAsB,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/C,GAAG,CAAC,MAAM,CAAC,4BAA4B,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,GAAG,CAAC,MAAM,CAAC,4BAA4B,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC3F,GAAG,CAAC,MAAM,CAAC,mBAAmB,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;AACjD,CAAC","sourcesContent":["import type { Response } from '@ms-cloudpack/create-express-app';\nimport type { ApiServer, Session } from '@ms-cloudpack/api-server';\n\n/**\n * Set the Cloudpack headers and cookies in the response.\n */\nexport function setHeaders({ res, session, apiServer }: { res: Response; session: Session; apiServer: ApiServer }) {\n res.header('Content-Type', 'text/html');\n res.header('Cache-Control', 'no-cache');\n res.header('Access-Control-Allow-Origin', '*');\n\n res.cookie('cloudpack-session-id', session.id);\n res.cookie('cloudpack-session-sequence', session.sequence);\n res.cookie(`cloudpack-sessionVersion-${session.projectName}`, session.getSessionVersion());\n res.cookie('cloudpack-api-url', apiServer.url);\n}\n"]}
@@ -1,5 +1,7 @@
1
- import type { ApiServer, BundleServer, CloudpackConfig, Session } from '../../../types.js';
1
+ import type { BundleServer } from '../../../types.js';
2
2
  import type { PackageJson } from '@ms-cloudpack/bundler-types';
3
+ import type { CloudpackConfig } from '@ms-cloudpack/config';
4
+ import type { ApiServer, Session } from '@ms-cloudpack/api-server';
3
5
  /**
4
6
  * The app server hosts the appropriate routes for the web app, primarily returning html content
5
7
  * which loads resources from the bundle server.
@@ -1 +1 @@
1
- {"version":3,"file":"startAppServer.js","sourceRoot":"","sources":["../../../../src/commands/start/appServer/startAppServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAEnD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,OAAO,EACP,YAAY,EACZ,SAAS,EACT,UAAU,EACV,MAAM,GAAG,EAAqB,GAO/B;IACC,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,MAAM,IAAK,EAAsB,CAAC;IAE7D,mEAAmE;IACnE,MAAM,oBAAoB,GAAG,SAAS,EAAE,IAAI,KAAK,SAAS,CAAC;IAC3D,MAAM,KAAK,GAAG,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAE1D,mEAAmE;IACnE,+EAA+E;IAC/E,oEAAoE;IAEpE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAErD,IAAI;QACF,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,gBAAgB,CAAC;YAClD,SAAS,EAAE,KAAK;YAChB,oBAAoB;YACpB,QAAQ,EAAE,SAAS,EAAE,MAAM;YAC3B,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK;YACnC,cAAc;YACd,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAC1B,YAAY,CAAC;gBACX,GAAG;gBACH,GAAG;gBACH,OAAO;gBACP,UAAU;gBACV,YAAY;gBACZ,SAAS;gBACT,MAAM;aACP,CAAC;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,eAAe,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,OAAO;YACL,KAAK;YACL,IAAI;YACJ,GAAG;SACJ,CAAC;KACH;IAAC,OAAO,GAAY,EAAE;QACrB,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,4BAA4B,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1F,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAEvD,MAAM,GAAG,CAAC;KACX;AACH,CAAC","sourcesContent":["import { createExpressApp } from '@ms-cloudpack/create-express-app';\nimport type { ApiServer, BundleServer, CloudpackConfig, Session } from '../../../types.js';\nimport type { PackageJson } from '@ms-cloudpack/bundler-types';\nimport { createRoutes } from './createRoutes.js';\nimport { exitIfPortUnavailable } from './exitIfPortUnavailable.js';\nimport { reporter } from '../../../reporter.js';\nimport { cyan } from '@ms-cloudpack/task-reporter';\n\n/**\n * The app server hosts the appropriate routes for the web app, primarily returning html content\n * which loads resources from the bundle server.\n *\n * Separating the app server from the bundle service keeps the routes separate - the app server\n * can support whichever routes the app needs, while the bundle server can provide package\n * assets in various forms using its own routing.\n */\nexport async function startAppServer({\n session,\n bundleServer,\n apiServer,\n definition,\n config = {} as CloudpackConfig,\n}: {\n session: Session;\n definition: PackageJson;\n bundleServer: BundleServer;\n apiServer: ApiServer;\n config: CloudpackConfig;\n}) {\n const { devServer = {} } = config || ({} as CloudpackConfig);\n\n // Read the port from the config file or default to array of ports.\n const requireSpecifiedPort = devServer?.port !== undefined;\n const ports = devServer?.port ?? [5000, 5001, 5002, 5003];\n\n // Directory to serve as plain static assets. Defaults to \"public\".\n // Can be overridden by setting the 'publicDir' option in the cloudpack config.\n // const publicDir = path.resolve(devServer.publicPath ?? 'public');\n\n const task = reporter.addTask('Starting app server');\n\n try {\n const { close, port, url } = await createExpressApp({\n portRange: ports,\n requireSpecifiedPort,\n hostname: devServer?.domain,\n sslOptions: config.devServer?.https,\n // publicDir,\n setupCallback: (app, url) =>\n createRoutes({\n app,\n url,\n session,\n definition,\n bundleServer,\n apiServer,\n config,\n }),\n });\n\n task.complete({ message: `Available @ ${cyan(url)}`, forceShow: true });\n\n return {\n close,\n port,\n url,\n };\n } catch (err: unknown) {\n task.complete({ status: 'fail', message: 'Failed to start app server', forceShow: true });\n exitIfPortUnavailable(err, session.projectName, ports);\n\n throw err;\n }\n}\n"]}
1
+ {"version":3,"file":"startAppServer.js","sourceRoot":"","sources":["../../../../src/commands/start/appServer/startAppServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAInD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,OAAO,EACP,YAAY,EACZ,SAAS,EACT,UAAU,EACV,MAAM,GAAG,EAAqB,GAO/B;IACC,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,MAAM,IAAK,EAAsB,CAAC;IAE7D,mEAAmE;IACnE,MAAM,oBAAoB,GAAG,SAAS,EAAE,IAAI,KAAK,SAAS,CAAC;IAC3D,MAAM,KAAK,GAAG,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAE1D,mEAAmE;IACnE,+EAA+E;IAC/E,oEAAoE;IAEpE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAErD,IAAI;QACF,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,gBAAgB,CAAC;YAClD,SAAS,EAAE,KAAK;YAChB,oBAAoB;YACpB,QAAQ,EAAE,SAAS,EAAE,MAAM;YAC3B,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK;YACnC,cAAc;YACd,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAC1B,YAAY,CAAC;gBACX,GAAG;gBACH,GAAG;gBACH,OAAO;gBACP,UAAU;gBACV,YAAY;gBACZ,SAAS;gBACT,MAAM;aACP,CAAC;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,eAAe,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,OAAO;YACL,KAAK;YACL,IAAI;YACJ,GAAG;SACJ,CAAC;KACH;IAAC,OAAO,GAAY,EAAE;QACrB,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,4BAA4B,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1F,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAEvD,MAAM,GAAG,CAAC;KACX;AACH,CAAC","sourcesContent":["import { createExpressApp } from '@ms-cloudpack/create-express-app';\nimport type { BundleServer } from '../../../types.js';\nimport type { PackageJson } from '@ms-cloudpack/bundler-types';\nimport { createRoutes } from './createRoutes.js';\nimport { exitIfPortUnavailable } from './exitIfPortUnavailable.js';\nimport { reporter } from '../../../reporter.js';\nimport { cyan } from '@ms-cloudpack/task-reporter';\nimport type { CloudpackConfig } from '@ms-cloudpack/config';\nimport type { ApiServer, Session } from '@ms-cloudpack/api-server';\n\n/**\n * The app server hosts the appropriate routes for the web app, primarily returning html content\n * which loads resources from the bundle server.\n *\n * Separating the app server from the bundle service keeps the routes separate - the app server\n * can support whichever routes the app needs, while the bundle server can provide package\n * assets in various forms using its own routing.\n */\nexport async function startAppServer({\n session,\n bundleServer,\n apiServer,\n definition,\n config = {} as CloudpackConfig,\n}: {\n session: Session;\n definition: PackageJson;\n bundleServer: BundleServer;\n apiServer: ApiServer;\n config: CloudpackConfig;\n}) {\n const { devServer = {} } = config || ({} as CloudpackConfig);\n\n // Read the port from the config file or default to array of ports.\n const requireSpecifiedPort = devServer?.port !== undefined;\n const ports = devServer?.port ?? [5000, 5001, 5002, 5003];\n\n // Directory to serve as plain static assets. Defaults to \"public\".\n // Can be overridden by setting the 'publicDir' option in the cloudpack config.\n // const publicDir = path.resolve(devServer.publicPath ?? 'public');\n\n const task = reporter.addTask('Starting app server');\n\n try {\n const { close, port, url } = await createExpressApp({\n portRange: ports,\n requireSpecifiedPort,\n hostname: devServer?.domain,\n sslOptions: config.devServer?.https,\n // publicDir,\n setupCallback: (app, url) =>\n createRoutes({\n app,\n url,\n session,\n definition,\n bundleServer,\n apiServer,\n config,\n }),\n });\n\n task.complete({ message: `Available @ ${cyan(url)}`, forceShow: true });\n\n return {\n close,\n port,\n url,\n };\n } catch (err: unknown) {\n task.complete({ status: 'fail', message: 'Failed to start app server', forceShow: true });\n exitIfPortUnavailable(err, session.projectName, ports);\n\n throw err;\n }\n}\n"]}
@@ -1,4 +1,5 @@
1
- import type { BundleRequest, BundleTaskOptions, Task } from '../../types.js';
1
+ import type { BundleRequest, BundleTaskOptions } from '../../types.js';
2
+ import type { Task } from '@ms-cloudpack/api-server';
2
3
  /**
3
4
  * Creates a bundle task tracked in the task runner of the api server. This allows active tasks to be tracked
4
5
  * remotely (e.g. in the browser) and allows the user to cancel tasks.