@ms-cloudpack/cli 0.40.6 → 0.41.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 (53) hide show
  1. package/lib/commands/bundle/bundle.d.ts.map +1 -1
  2. package/lib/commands/bundle/bundle.js +3 -0
  3. package/lib/commands/bundle/bundle.js.map +1 -1
  4. package/lib/commands/init/evaluateImportsForOverrides.d.ts.map +1 -1
  5. package/lib/commands/init/evaluateImportsForOverrides.js +11 -1
  6. package/lib/commands/init/evaluateImportsForOverrides.js.map +1 -1
  7. package/lib/commands/init/init.d.ts.map +1 -1
  8. package/lib/commands/init/init.js +22 -8
  9. package/lib/commands/init/init.js.map +1 -1
  10. package/lib/commands/start/appServer/startAppServer.js +1 -1
  11. package/lib/commands/start/appServer/startAppServer.js.map +1 -1
  12. package/lib/commands/start/createPathToChoiceMap.d.ts +16 -0
  13. package/lib/commands/start/createPathToChoiceMap.d.ts.map +1 -0
  14. package/lib/commands/start/createPathToChoiceMap.js +35 -0
  15. package/lib/commands/start/createPathToChoiceMap.js.map +1 -0
  16. package/lib/commands/start/getAppPathFromUser.d.ts +9 -0
  17. package/lib/commands/start/getAppPathFromUser.d.ts.map +1 -0
  18. package/lib/commands/start/getAppPathFromUser.js +28 -0
  19. package/lib/commands/start/getAppPathFromUser.js.map +1 -0
  20. package/lib/commands/start/getMatchingApps.d.ts +9 -0
  21. package/lib/commands/start/getMatchingApps.d.ts.map +1 -0
  22. package/lib/commands/start/getMatchingApps.js +10 -0
  23. package/lib/commands/start/getMatchingApps.js.map +1 -0
  24. package/lib/commands/start/getStartingAppPath.d.ts +10 -0
  25. package/lib/commands/start/getStartingAppPath.d.ts.map +1 -0
  26. package/lib/commands/start/getStartingAppPath.js +29 -0
  27. package/lib/commands/start/getStartingAppPath.js.map +1 -0
  28. package/lib/commands/start/index.d.ts.map +1 -1
  29. package/lib/commands/start/index.js +1 -0
  30. package/lib/commands/start/index.js.map +1 -1
  31. package/lib/commands/start/runPrereqs.d.ts +7 -0
  32. package/lib/commands/start/runPrereqs.d.ts.map +1 -0
  33. package/lib/commands/start/runPrereqs.js +15 -0
  34. package/lib/commands/start/runPrereqs.js.map +1 -0
  35. package/lib/commands/start/setupReporting.d.ts +3 -0
  36. package/lib/commands/start/setupReporting.d.ts.map +1 -0
  37. package/lib/commands/start/setupReporting.js +25 -0
  38. package/lib/commands/start/setupReporting.js.map +1 -0
  39. package/lib/commands/start/start.d.ts +3 -1
  40. package/lib/commands/start/start.d.ts.map +1 -1
  41. package/lib/commands/start/start.js +21 -2
  42. package/lib/commands/start/start.js.map +1 -1
  43. package/lib/commands/start/types/StartOptions.d.ts +1 -0
  44. package/lib/commands/start/types/StartOptions.d.ts.map +1 -1
  45. package/lib/commands/start/types/StartOptions.js.map +1 -1
  46. package/lib/common/findCloudpackAppPaths.d.ts +7 -0
  47. package/lib/common/findCloudpackAppPaths.d.ts.map +1 -0
  48. package/lib/common/findCloudpackAppPaths.js +11 -0
  49. package/lib/common/findCloudpackAppPaths.js.map +1 -0
  50. package/lib/index.d.ts.map +1 -1
  51. package/lib/index.js +3 -21
  52. package/lib/index.js.map +1 -1
  53. package/package.json +14 -11
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../../src/commands/bundle/bundle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,WAAW,iBA4BnG"}
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../../src/commands/bundle/bundle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAI9D,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,WAAW,iBA8BnG"}
@@ -1,6 +1,7 @@
1
1
  import { bundleTask } from '../../tasks/bundleTask.js';
2
2
  import path from 'path';
3
3
  import { createPackageDefinitions, readConfig } from '@ms-cloudpack/config';
4
+ import { setupReporting } from '../start/setupReporting.js';
4
5
  export async function bundle(options, { reporter, appPath: packagePath }) {
5
6
  const { bundler: bundlerType, outdir = 'dist/browser-esm', disableSourceMaps } = options;
6
7
  const config = await readConfig(packagePath);
@@ -20,6 +21,7 @@ export async function bundle(options, { reporter, appPath: packagePath }) {
20
21
  config,
21
22
  packages,
22
23
  };
24
+ await setupReporting({ reporter, config });
23
25
  await bundleTask({
24
26
  bundleRequest,
25
27
  options: { force: true },
@@ -27,4 +29,5 @@ export async function bundle(options, { reporter, appPath: packagePath }) {
27
29
  reporter.complete();
28
30
  process.exit(bundleRequest.result?.errors?.length === 0 ? 0 : 1);
29
31
  }
32
+ // cspell:ignore outdir
30
33
  //# sourceMappingURL=bundle.js.map
@@ -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;AAIxB,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAsB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAe;IAClG,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IACzF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,EAAE,IAAI,GAAG,WAAW,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,UAAU,IAAI,EAAE,CAAC;IACnE,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;QACjB,MAAM;QACN,QAAQ;KACT,CAAC;IAEF,MAAM,UAAU,CAAC;QACf,aAAa;QACb,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;KACzB,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAEpB,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/BundleOptions.js';\nimport type { BundleRequest } from '../../types/BundleRequest.js';\nimport type { TaskContext } from '../../types/TaskContext.js';\nimport { createPackageDefinitions, readConfig } from '@ms-cloudpack/config';\n\nexport async function bundle(options: BundleOptions, { reporter, appPath: packagePath }: TaskContext) {\n const { bundler: bundlerType, outdir = 'dist/browser-esm', disableSourceMaps } = options;\n const config = await readConfig(packagePath);\n const packages = createPackageDefinitions({ config });\n const definition = await packages.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 config,\n packages,\n };\n\n await bundleTask({\n bundleRequest,\n options: { force: true },\n });\n\n reporter.complete();\n\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;AAIxB,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAsB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAe;IAClG,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IACzF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,EAAE,IAAI,GAAG,WAAW,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,UAAU,IAAI,EAAE,CAAC;IACnE,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;QACjB,MAAM;QACN,QAAQ;KACT,CAAC;IAEF,MAAM,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAE3C,MAAM,UAAU,CAAC;QACf,aAAa;QACb,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;KACzB,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAEpB,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;AAED,uBAAuB","sourcesContent":["import { bundleTask } from '../../tasks/bundleTask.js';\nimport path from 'path';\nimport type { BundleOptions } from './types/BundleOptions.js';\nimport type { BundleRequest } from '../../types/BundleRequest.js';\nimport type { TaskContext } from '../../types/TaskContext.js';\nimport { createPackageDefinitions, readConfig } from '@ms-cloudpack/config';\nimport { setupReporting } from '../start/setupReporting.js';\n\nexport async function bundle(options: BundleOptions, { reporter, appPath: packagePath }: TaskContext) {\n const { bundler: bundlerType, outdir = 'dist/browser-esm', disableSourceMaps } = options;\n const config = await readConfig(packagePath);\n const packages = createPackageDefinitions({ config });\n const definition = await packages.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 config,\n packages,\n };\n\n await setupReporting({ reporter, config });\n\n await bundleTask({\n bundleRequest,\n options: { force: true },\n });\n\n reporter.complete();\n\n process.exit(bundleRequest.result?.errors?.length === 0 ? 0 : 1);\n}\n\n// cspell:ignore outdir\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"evaluateImportsForOverrides.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAQlE;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,UAAU,EAAE,WAAW,CAAC;IACxB,eAAe,EAAE,eAAe,CAAC;IACjC,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;CACxB,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAiGrD"}
1
+ {"version":3,"file":"evaluateImportsForOverrides.d.ts","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAA4B,MAAM,6BAA6B,CAAC;AAClH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAQlE;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,UAAU,EAAE,WAAW,CAAC;IACxB,eAAe,EAAE,eAAe,CAAC;IACjC,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;CACxB,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqGrD"}
@@ -42,7 +42,7 @@ export async function evaluateImportsForOverrides(options) {
42
42
  throw new Error(`Package "${displayName}" depends on "${dependencyName}" but it is missing a name or version.`);
43
43
  }
44
44
  let { generatedPackageSettings } = getPackageSettings({
45
- config: { packageSettings, generated: {} },
45
+ config: { generated: { packageSettings } },
46
46
  name,
47
47
  version,
48
48
  firstMatch: true,
@@ -65,6 +65,7 @@ export async function evaluateImportsForOverrides(options) {
65
65
  }, {
66
66
  packages,
67
67
  });
68
+ generatedPackageSettings.exports = alphabetizeObject(generatedPackageSettings.exports);
68
69
  // Clear cache when we've mutated an override. Transforms need to re-run.
69
70
  packages.reset();
70
71
  changeCount++;
@@ -76,4 +77,13 @@ export async function evaluateImportsForOverrides(options) {
76
77
  }
77
78
  return { changeCount, errors };
78
79
  }
80
+ /** Quick helper to alphabetize the exports. */
81
+ function alphabetizeObject(obj) {
82
+ const sortedKeys = Object.keys(obj).sort();
83
+ const alphabetizedObj = {};
84
+ for (const key of sortedKeys) {
85
+ alphabetizedObj[key] = obj[key];
86
+ }
87
+ return alphabetizedObj;
88
+ }
79
89
  //# sourceMappingURL=evaluateImportsForOverrides.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluateImportsForOverrides.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache, PackageJson } from '@ms-cloudpack/bundler-types';\nimport type { GeneratedConfig } from '@ms-cloudpack/config';\nimport { getPackageSettings } from '@ms-cloudpack/config';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport {\n addExportsMapEntry,\n findResolveMapEntry,\n flattenExportsMap,\n getExportsMap,\n} from '@ms-cloudpack/package-utilities';\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 imports: Map<string, Set<string>>;\n definition: PackageJson;\n generatedConfig: GeneratedConfig;\n packagePathsToEvaluate: Set<string>;\n evaluatedPackages: Set<string>;\n resolveMap: ResolveMap;\n}): Promise<{ changeCount: number; errors: string[] }> {\n const { packages, imports, definition, generatedConfig, 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 =\n `Package \"${displayName}\" depends on \"${dependencyName}\" but it was not found in the resolve map. ` +\n `Ensure that \"${dependencyName}\" is 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 =\n `Package \"${displayName}\" depends on \"${dependencyName}\" at \"${resolveEntry.path}\" ` +\n `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({ packagePath: resolveEntry.path }, { packages });\n const flattenedExports = flattenExportsMap(exports);\n\n for (const dependencyImportPath of dependencyImportPaths) {\n if (!flattenedExports[dependencyImportPath]) {\n // We are missing an import path. We need to add this entry to the exports map in package settings.\n const packageSettings = (generatedConfig.packageSettings ??= []);\n const { name, version } = dependencyDefinition;\n\n if (!name || !version) {\n throw new Error(\n `Package \"${displayName}\" depends on \"${dependencyName}\" but it is missing a name or version.`,\n );\n }\n\n let { generatedPackageSettings } = getPackageSettings({\n config: { packageSettings, generated: {} },\n name,\n version,\n firstMatch: true,\n });\n\n if (!generatedPackageSettings) {\n generatedPackageSettings = {\n match: {\n name,\n version: `^${version}`,\n },\n exports: {},\n };\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.exports ??= {};\n\n await addExportsMapEntry(\n {\n exports: generatedPackageSettings.exports,\n packagePath: resolveEntry.path,\n importPath: dependencyImportPath,\n },\n {\n packages,\n },\n );\n\n // Clear cache when we've mutated an override. Transforms need to re-run.\n packages.reset();\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"]}
1
+ {"version":3,"file":"evaluateImportsForOverrides.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache, PackageJson, PackageJsonExportsObject } from '@ms-cloudpack/bundler-types';\nimport type { GeneratedConfig } from '@ms-cloudpack/config';\nimport { getPackageSettings } from '@ms-cloudpack/config';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport {\n addExportsMapEntry,\n findResolveMapEntry,\n flattenExportsMap,\n getExportsMap,\n} from '@ms-cloudpack/package-utilities';\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 imports: Map<string, Set<string>>;\n definition: PackageJson;\n generatedConfig: GeneratedConfig;\n packagePathsToEvaluate: Set<string>;\n evaluatedPackages: Set<string>;\n resolveMap: ResolveMap;\n}): Promise<{ changeCount: number; errors: string[] }> {\n const { packages, imports, definition, generatedConfig, 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 =\n `Package \"${displayName}\" depends on \"${dependencyName}\" but it was not found in the resolve map. ` +\n `Ensure that \"${dependencyName}\" is 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 =\n `Package \"${displayName}\" depends on \"${dependencyName}\" at \"${resolveEntry.path}\" ` +\n `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({ packagePath: resolveEntry.path }, { packages });\n const flattenedExports = flattenExportsMap(exports);\n\n for (const dependencyImportPath of dependencyImportPaths) {\n if (!flattenedExports[dependencyImportPath]) {\n // We are missing an import path. We need to add this entry to the exports map in package settings.\n const packageSettings = (generatedConfig.packageSettings ??= []);\n const { name, version } = dependencyDefinition;\n\n if (!name || !version) {\n throw new Error(\n `Package \"${displayName}\" depends on \"${dependencyName}\" but it is missing a name or version.`,\n );\n }\n\n let { generatedPackageSettings } = getPackageSettings({\n config: { generated: { packageSettings } },\n name,\n version,\n firstMatch: true,\n });\n\n if (!generatedPackageSettings) {\n generatedPackageSettings = {\n match: {\n name,\n version: `^${version}`,\n },\n exports: {},\n };\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.exports ??= {};\n\n await addExportsMapEntry(\n {\n exports: generatedPackageSettings.exports,\n packagePath: resolveEntry.path,\n importPath: dependencyImportPath,\n },\n {\n packages,\n },\n );\n\n generatedPackageSettings.exports = alphabetizeObject<PackageJsonExportsObject>(\n generatedPackageSettings.exports as PackageJsonExportsObject,\n );\n\n // Clear cache when we've mutated an override. Transforms need to re-run.\n packages.reset();\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\n/** Quick helper to alphabetize the exports. */\nfunction alphabetizeObject<T extends { [key: string]: unknown }>(obj: T): T {\n const sortedKeys = Object.keys(obj).sort();\n const alphabetizedObj: { [key: string]: unknown } = {};\n\n for (const key of sortedKeys) {\n alphabetizedObj[key] = obj[key];\n }\n\n return alphabetizedObj as T;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,wFAAwF;AACxF,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCpF;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC,CAgHD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,wFAAwF;AACxF,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CpF;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC,CA4HD"}
@@ -4,9 +4,11 @@ import { rootSpan, stopTelemetry } from '../../initTelemetry.js';
4
4
  import { resolveDependenciesTask } from '../../tasks/resolveDependenciesTask.js';
5
5
  import { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';
6
6
  import { bundleAndGetImports } from './bundleAndGetImports.js';
7
+ import { setupReporting } from '../start/setupReporting.js';
7
8
  /** Given the path, updates the Cloudpack config with overrides and project settings. */
8
9
  export async function init(options, context) {
9
- const { reporter } = context;
10
+ const { reporter, config } = context;
11
+ await setupReporting({ reporter, config });
10
12
  let completeReason;
11
13
  let hasErrors = false;
12
14
  let hasWarnings = false;
@@ -14,7 +16,7 @@ export async function init(options, context) {
14
16
  const { changeCount, errorPkgCount, warningPkgCount, successPkgCount } = await initInternal(options, context);
15
17
  hasErrors = errorPkgCount > 0;
16
18
  hasWarnings = warningPkgCount > 0;
17
- const totalCount = errorPkgCount + warningPkgCount + successPkgCount;
19
+ const totalCount = errorPkgCount + successPkgCount;
18
20
  if (hasErrors || hasWarnings) {
19
21
  const successPct = ((successPkgCount / totalCount) * 100).toFixed(1);
20
22
  completeReason =
@@ -89,7 +91,15 @@ export async function initInternal(options, context) {
89
91
  if (!bundleResult.imports?.size) {
90
92
  // This is expected if the package just doesn't import anything.
91
93
  console.info(`${packagePath} has no additional imports to evaluate.`);
92
- bundleResult.hasErrors ? errorPkgCount++ : bundleResult.hasWarnings ? warningPkgCount++ : successPkgCount++;
94
+ if (bundleResult.hasErrors) {
95
+ errorPkgCount++;
96
+ }
97
+ else {
98
+ successPkgCount++;
99
+ }
100
+ if (bundleResult.hasWarnings) {
101
+ warningPkgCount++;
102
+ }
93
103
  continue;
94
104
  }
95
105
  // Given the package imports, find the missing exports maps and update packageOverrides.
@@ -111,11 +121,15 @@ export async function initInternal(options, context) {
111
121
  : overridesResult.errors.map((e) => e).join('\n'));
112
122
  }
113
123
  changeCount += overridesResult.changeCount;
114
- bundleResult.hasErrors || overridesResult.errors.length
115
- ? errorPkgCount++
116
- : bundleResult.hasWarnings
117
- ? warningPkgCount++
118
- : successPkgCount++;
124
+ if (bundleResult.hasErrors || overridesResult.errors.length) {
125
+ errorPkgCount++;
126
+ }
127
+ else {
128
+ successPkgCount++;
129
+ }
130
+ if (bundleResult.hasWarnings) {
131
+ warningPkgCount++;
132
+ }
119
133
  }
120
134
  if (changeCount) {
121
135
  // Log the results to a file.
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAI/D,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAoB,EAAE,OAAoB;IACnE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,IAAI,cAAkC,CAAC;IACvC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI;QACF,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE9G,SAAS,GAAG,aAAa,GAAG,CAAC,CAAC;QAC9B,WAAW,GAAG,eAAe,GAAG,CAAC,CAAC;QAElC,MAAM,UAAU,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC;QAErE,IAAI,SAAS,IAAI,WAAW,EAAE;YAC5B,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACrE,cAAc;gBACZ;oBACE,GAAG,eAAe,IAAI,UAAU,KAAK,UAAU,kCAAkC;oBACjF,SAAS,IAAI,GAAG,aAAa,uBAAuB;oBACpD,WAAW,IAAI,GAAG,eAAe,yBAAyB;iBAC3D;qBACE,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;SACxB;aAAM;YACL,cAAc,GAAG,OAAO,UAAU,gCAAgC,CAAC;SACpE;QAED,IAAI,WAAW,EAAE;YACf,cAAc,IAAI,gBAAgB,kBAAkB,UAAU,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC;SAChG;KACF;IAAC,OAAO,KAAK,EAAE;QACd,SAAS,GAAG,IAAI,CAAC;QACjB,cAAc,GAAG,qBAAsB,KAAe,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC;KACzE;IAED,MAAM,aAAa,EAAE,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAE3G,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAoB,EACpB,OAAoB;IAOpB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAEtC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE;QAClC,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;KACzD;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAEzC,sDAAsD;IACtD,IAAI,OAAO,CAAC,KAAK,EAAE;QACjB,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;IAED,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAEhF,eAAe,CAAC,eAAe,KAAK,EAAE,CAAC;IAEvC,+BAA+B;IAC/B,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEtF,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;KACnD;IAED,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,OAAO,sBAAsB,CAAC,IAAI,EAAE;QAClC,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC;QAE3E,sBAAsB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAE3C,iCAAiC;QACjC,IAAI,CAAC,WAAW,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YACtD,SAAS;SACV;QAED,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAEnC,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtE,IAAI,CAAC,UAAU,EAAE;YACf,gDAAgD;YAChD,OAAO,CAAC,KAAK,CAAC,YAAY,WAAW,qEAAqE,CAAC,CAAC;YAC5G,aAAa,EAAE,CAAC;YAChB,SAAS;SACV;QAED,yDAAyD;QACzD,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAExG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE;YAC/B,gEAAgE;YAChE,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,yCAAyC,CAAC,CAAC;YACtE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;YAC5G,SAAS;SACV;QAED,wFAAwF;QACxF,MAAM,eAAe,GAAG,MAAM,2BAA2B,CAAC;YACxD,UAAU;YACV,QAAQ;YACR,sBAAsB;YACtB,iBAAiB;YACjB,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,eAAe;YACf,UAAU;SACX,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACnF,QAAQ,EAAE,QAAQ,CAAC,mBAAmB,EAAE;gBACtC,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM;aAC7F,CAAC,CAAC;YACH,MAAM,KAAK,CACT,eAAe,CAAC,WAAW;gBACzB,CAAC,CAAC,oDAAoD;gBACtD,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACpD,CAAC;SACH;QAED,WAAW,IAAI,eAAe,CAAC,WAAW,CAAC;QAE3C,YAAY,CAAC,SAAS,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM;YACrD,CAAC,CAAC,aAAa,EAAE;YACjB,CAAC,CAAC,YAAY,CAAC,WAAW;gBAC1B,CAAC,CAAC,eAAe,EAAE;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;KACvB;IAED,IAAI,WAAW,EAAE;QACf,6BAA6B;QAC7B,OAAO,CAAC,GAAG,CACT,uBAAuB,uBAAuB,8EAA8E,CAC7H,CAAC;QAEF,IAAI,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE;YAC3C,MAAM,oBAAoB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;SACtD;KACF;IAED,OAAO;QACL,WAAW;QACX,aAAa;QACb,eAAe;QACf,eAAe;KAChB,CAAC;AACJ,CAAC","sourcesContent":["import {\n createPackageDefinitions,\n generatedConfigFileName,\n readConfig,\n readGeneratedConfig,\n userConfigFileName,\n writeGeneratedConfig,\n} from '@ms-cloudpack/config';\nimport { plural, red, yellow } from '@ms-cloudpack/task-reporter';\nimport { rootSpan, stopTelemetry } from '../../initTelemetry.js';\nimport { resolveDependenciesTask } from '../../tasks/resolveDependenciesTask.js';\nimport { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';\nimport { bundleAndGetImports } from './bundleAndGetImports.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { TaskContext } from '../../types/TaskContext.js';\n\n/** Given the path, updates the Cloudpack config with overrides and project settings. */\nexport async function init(options: InitOptions, context: TaskContext): Promise<void> {\n const { reporter } = context;\n\n let completeReason: string | undefined;\n let hasErrors = false;\n let hasWarnings = false;\n try {\n const { changeCount, errorPkgCount, warningPkgCount, successPkgCount } = await initInternal(options, context);\n\n hasErrors = errorPkgCount > 0;\n hasWarnings = warningPkgCount > 0;\n\n const totalCount = errorPkgCount + warningPkgCount + successPkgCount;\n\n if (hasErrors || hasWarnings) {\n const successPct = ((successPkgCount / totalCount) * 100).toFixed(1);\n completeReason =\n [\n `${successPkgCount}/${totalCount} (${successPct}%) packages bundled successfully`,\n hasErrors && `${errorPkgCount} packages with errors`,\n hasWarnings && `${warningPkgCount} packages with warnings`,\n ]\n .filter(Boolean)\n .join('\\n') + '\\n';\n } else {\n completeReason = `All ${totalCount} packages bundled successfully`;\n }\n\n if (changeCount) {\n completeReason += `\\n\\nUpdated \"${userConfigFileName}\" with ${plural(changeCount, 'change')}.`;\n }\n } catch (error) {\n hasErrors = true;\n completeReason = `Unexpected error: ${(error as Error).stack || error}`;\n }\n\n await stopTelemetry();\n reporter.complete(hasErrors ? red(completeReason) : hasWarnings ? yellow(completeReason) : completeReason);\n\n process.exit(hasErrors ? 1 : 0);\n}\n\n/**\n * Actual init operation (minus the completion logging).\n * Exported for testing only.\n */\nexport async function initInternal(\n options: InitOptions,\n context: TaskContext,\n): Promise<{\n changeCount: number;\n errorPkgCount: number;\n warningPkgCount: number;\n successPkgCount: number;\n}> {\n const { appPath, reporter } = context;\n\n if (options.check && options.reset) {\n throw Error('Cannot use --check and --reset together.');\n }\n\n const config = await readConfig(appPath);\n\n // If --reset is specified we ignore generated config.\n if (options.reset) {\n config.generated = {};\n }\n\n const packages = createPackageDefinitions({ config });\n const generatedConfig = options.reset ? {} : await readGeneratedConfig(appPath);\n\n generatedConfig.packageSettings ??= [];\n\n // Try to resolve dependencies.\n const resolveMap = await resolveDependenciesTask({ appPath }, { packages, reporter });\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 let errorPkgCount = 0;\n let warningPkgCount = 0;\n let successPkgCount = 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 // This is very weird and probably won't happen.\n console.error(`Skipping ${packagePath} evaluation because the package.json was not found or not readable.`);\n errorPkgCount++;\n continue;\n }\n\n // Bundle the package and find the imports it depends on.\n const bundleResult = await bundleAndGetImports({ packagePath, definition, packages, reporter, config });\n\n if (!bundleResult.imports?.size) {\n // This is expected if the package just doesn't import anything.\n console.info(`${packagePath} has no additional imports to evaluate.`);\n bundleResult.hasErrors ? errorPkgCount++ : bundleResult.hasWarnings ? warningPkgCount++ : successPkgCount++;\n continue;\n }\n\n // Given the package imports, find the missing exports maps and update packageOverrides.\n const overridesResult = await evaluateImportsForOverrides({\n definition,\n packages,\n packagePathsToEvaluate,\n evaluatedPackages,\n imports: bundleResult.imports,\n generatedConfig,\n resolveMap,\n });\n\n if (options.check && (overridesResult.changeCount || overridesResult.errors.length)) {\n rootSpan?.addEvent('INIT_CHECK_FAILED', {\n reason: overridesResult.changeCount ? 'Config needs to be updated.' : overridesResult.errors,\n });\n throw Error(\n overridesResult.changeCount\n ? 'Run \"cloudpack init --reset\" to update the config.'\n : overridesResult.errors.map((e) => e).join('\\n'),\n );\n }\n\n changeCount += overridesResult.changeCount;\n\n bundleResult.hasErrors || overridesResult.errors.length\n ? errorPkgCount++\n : bundleResult.hasWarnings\n ? warningPkgCount++\n : successPkgCount++;\n }\n\n if (changeCount) {\n // Log the results to a file.\n console.log(\n `Writing updates to \"${generatedConfigFileName}\". If you're in a git repo, this file should be committed with your project.`,\n );\n\n if (generatedConfig.packageSettings?.length) {\n await writeGeneratedConfig(generatedConfig, appPath);\n }\n }\n\n return {\n changeCount,\n errorPkgCount,\n warningPkgCount,\n successPkgCount,\n };\n}\n"]}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createPackageDefinitions,\n generatedConfigFileName,\n readConfig,\n readGeneratedConfig,\n userConfigFileName,\n writeGeneratedConfig,\n} from '@ms-cloudpack/config';\nimport { plural, red, yellow } from '@ms-cloudpack/task-reporter';\nimport { rootSpan, stopTelemetry } from '../../initTelemetry.js';\nimport { resolveDependenciesTask } from '../../tasks/resolveDependenciesTask.js';\nimport { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';\nimport { bundleAndGetImports } from './bundleAndGetImports.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { TaskContext } from '../../types/TaskContext.js';\nimport { setupReporting } from '../start/setupReporting.js';\n\n/** Given the path, updates the Cloudpack config with overrides and project settings. */\nexport async function init(options: InitOptions, context: TaskContext): Promise<void> {\n const { reporter, config } = context;\n\n await setupReporting({ reporter, config });\n\n let completeReason: string | undefined;\n let hasErrors = false;\n let hasWarnings = false;\n try {\n const { changeCount, errorPkgCount, warningPkgCount, successPkgCount } = await initInternal(options, context);\n\n hasErrors = errorPkgCount > 0;\n hasWarnings = warningPkgCount > 0;\n\n const totalCount = errorPkgCount + successPkgCount;\n\n if (hasErrors || hasWarnings) {\n const successPct = ((successPkgCount / totalCount) * 100).toFixed(1);\n completeReason =\n [\n `${successPkgCount}/${totalCount} (${successPct}%) packages bundled successfully`,\n hasErrors && `${errorPkgCount} packages with errors`,\n hasWarnings && `${warningPkgCount} packages with warnings`,\n ]\n .filter(Boolean)\n .join('\\n') + '\\n';\n } else {\n completeReason = `All ${totalCount} packages bundled successfully`;\n }\n\n if (changeCount) {\n completeReason += `\\n\\nUpdated \"${userConfigFileName}\" with ${plural(changeCount, 'change')}.`;\n }\n } catch (error) {\n hasErrors = true;\n completeReason = `Unexpected error: ${(error as Error).stack || error}`;\n }\n\n await stopTelemetry();\n reporter.complete(hasErrors ? red(completeReason) : hasWarnings ? yellow(completeReason) : completeReason);\n\n process.exit(hasErrors ? 1 : 0);\n}\n\n/**\n * Actual init operation (minus the completion logging).\n * Exported for testing only.\n */\nexport async function initInternal(\n options: InitOptions,\n context: TaskContext,\n): Promise<{\n changeCount: number;\n errorPkgCount: number;\n warningPkgCount: number;\n successPkgCount: number;\n}> {\n const { appPath, reporter } = context;\n\n if (options.check && options.reset) {\n throw Error('Cannot use --check and --reset together.');\n }\n\n const config = await readConfig(appPath);\n\n // If --reset is specified we ignore generated config.\n if (options.reset) {\n config.generated = {};\n }\n\n const packages = createPackageDefinitions({ config });\n const generatedConfig = options.reset ? {} : await readGeneratedConfig(appPath);\n\n generatedConfig.packageSettings ??= [];\n\n // Try to resolve dependencies.\n const resolveMap = await resolveDependenciesTask({ appPath }, { packages, reporter });\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 let errorPkgCount = 0;\n let warningPkgCount = 0;\n let successPkgCount = 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 // This is very weird and probably won't happen.\n console.error(`Skipping ${packagePath} evaluation because the package.json was not found or not readable.`);\n errorPkgCount++;\n continue;\n }\n\n // Bundle the package and find the imports it depends on.\n const bundleResult = await bundleAndGetImports({ packagePath, definition, packages, reporter, config });\n\n if (!bundleResult.imports?.size) {\n // This is expected if the package just doesn't import anything.\n console.info(`${packagePath} has no additional imports to evaluate.`);\n if (bundleResult.hasErrors) {\n errorPkgCount++;\n } else {\n successPkgCount++;\n }\n\n if (bundleResult.hasWarnings) {\n warningPkgCount++;\n }\n\n continue;\n }\n\n // Given the package imports, find the missing exports maps and update packageOverrides.\n const overridesResult = await evaluateImportsForOverrides({\n definition,\n packages,\n packagePathsToEvaluate,\n evaluatedPackages,\n imports: bundleResult.imports,\n generatedConfig,\n resolveMap,\n });\n\n if (options.check && (overridesResult.changeCount || overridesResult.errors.length)) {\n rootSpan?.addEvent('INIT_CHECK_FAILED', {\n reason: overridesResult.changeCount ? 'Config needs to be updated.' : overridesResult.errors,\n });\n throw Error(\n overridesResult.changeCount\n ? 'Run \"cloudpack init --reset\" to update the config.'\n : overridesResult.errors.map((e) => e).join('\\n'),\n );\n }\n\n changeCount += overridesResult.changeCount;\n\n if (bundleResult.hasErrors || overridesResult.errors.length) {\n errorPkgCount++;\n } else {\n successPkgCount++;\n }\n if (bundleResult.hasWarnings) {\n warningPkgCount++;\n }\n }\n\n if (changeCount) {\n // Log the results to a file.\n console.log(\n `Writing updates to \"${generatedConfigFileName}\". If you're in a git repo, this file should be committed with your project.`,\n );\n\n if (generatedConfig.packageSettings?.length) {\n await writeGeneratedConfig(generatedConfig, appPath);\n }\n }\n\n return {\n changeCount,\n errorPkgCount,\n warningPkgCount,\n successPkgCount,\n };\n}\n"]}
@@ -18,7 +18,7 @@ export async function startAppServer({ session, bundleServer, apiServer, definit
18
18
  // Directory to serve as plain static assets. Defaults to "public".
19
19
  // Can be overridden by setting the 'publicDir' option in the cloudpack config.
20
20
  // const publicDir = path.resolve(devServer.publicPath ?? 'public');
21
- const task = reporter.addTask('Starting app server');
21
+ const task = reporter.addTask(`Starting app server for "${definition.name}"`);
22
22
  try {
23
23
  const { close, port, url } = await createExpressApp({
24
24
  portRange: ports,
@@ -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,EAAqB,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAItE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,OAAO,EACP,YAAY,EACZ,SAAS,EACT,UAAU,EACV,MAAM,GAAG,EAAqB,EAC9B,QAAQ,EACR,QAAQ,GAST;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;gBACN,QAAQ;aACT,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/BundleServer.js';\nimport type { PackageDefinitionsCache, PackageJson } from '@ms-cloudpack/bundler-types';\nimport { createRoutes } from './createRoutes.js';\nimport { exitIfPortUnavailable } from './exitIfPortUnavailable.js';\nimport { type TaskReporter, 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 packages,\n reporter,\n}: {\n session: Session;\n definition: PackageJson;\n bundleServer: BundleServer;\n apiServer: ApiServer;\n config: CloudpackConfig;\n packages: PackageDefinitionsCache;\n reporter: TaskReporter;\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 packages,\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,EAAqB,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAItE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,OAAO,EACP,YAAY,EACZ,SAAS,EACT,UAAU,EACV,MAAM,GAAG,EAAqB,EAC9B,QAAQ,EACR,QAAQ,GAST;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,4BAA4B,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;IAE9E,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;gBACN,QAAQ;aACT,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/BundleServer.js';\nimport type { PackageDefinitionsCache, PackageJson } from '@ms-cloudpack/bundler-types';\nimport { createRoutes } from './createRoutes.js';\nimport { exitIfPortUnavailable } from './exitIfPortUnavailable.js';\nimport { type TaskReporter, 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 packages,\n reporter,\n}: {\n session: Session;\n definition: PackageJson;\n bundleServer: BundleServer;\n apiServer: ApiServer;\n config: CloudpackConfig;\n packages: PackageDefinitionsCache;\n reporter: TaskReporter;\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 for \"${definition.name}\"`);\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 packages,\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"]}
@@ -0,0 +1,16 @@
1
+ import type { Choice } from 'prompts';
2
+ /**
3
+ *
4
+ * @param appPaths (a array of app paths to Cloudpack-enabled apps)
5
+ * @returns Promise<Map<string, ChoiceWithConfig>>
6
+ * Create a map of app paths (paths to Cloudpack-enabled apps) to Choice objects.
7
+ * Choice comes from prompts package and represents a menu choice
8
+ * Example:
9
+ * /path/to/awesome/app => {
10
+ * title: 'awesome-app',
11
+ * description: 'what a great app',
12
+ * value: '/path/to/awesome/app'
13
+ * }
14
+ */
15
+ export declare function createPathToChoiceMap(appPaths: string[]): Promise<Map<string, Choice>>;
16
+ //# sourceMappingURL=createPathToChoiceMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPathToChoiceMap.d.ts","sourceRoot":"","sources":["../../../src/commands/start/createPathToChoiceMap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC;;;;;;;;;;;;GAYG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,gCAuB7D"}
@@ -0,0 +1,35 @@
1
+ import { PackageDefinitions } from '@ms-cloudpack/package-utilities';
2
+ /**
3
+ *
4
+ * @param appPaths (a array of app paths to Cloudpack-enabled apps)
5
+ * @returns Promise<Map<string, ChoiceWithConfig>>
6
+ * Create a map of app paths (paths to Cloudpack-enabled apps) to Choice objects.
7
+ * Choice comes from prompts package and represents a menu choice
8
+ * Example:
9
+ * /path/to/awesome/app => {
10
+ * title: 'awesome-app',
11
+ * description: 'what a great app',
12
+ * value: '/path/to/awesome/app'
13
+ * }
14
+ */
15
+ export async function createPathToChoiceMap(appPaths) {
16
+ const packages = new PackageDefinitions();
17
+ const availableApps = new Map();
18
+ for (const dir of appPaths) {
19
+ const pkg = await packages.get(dir);
20
+ if (!pkg) {
21
+ throw new Error(`package.json missing in '${dir}'`);
22
+ }
23
+ else if (!pkg.name) {
24
+ throw new Error(`package.json in '${dir}' is missing "name" property`);
25
+ }
26
+ const choice = {
27
+ title: pkg.name,
28
+ description: pkg?.description ?? 'An awesome app that would be even more awesome with a proper description',
29
+ value: dir,
30
+ };
31
+ availableApps.set(dir, choice);
32
+ }
33
+ return availableApps;
34
+ }
35
+ //# sourceMappingURL=createPathToChoiceMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPathToChoiceMap.js","sourceRoot":"","sources":["../../../src/commands/start/createPathToChoiceMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGrE;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,QAAkB;IAC5D,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAC1C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEhD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;QAC1B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpC,IAAI,CAAC,GAAG,EAAE;YACR,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAC;SACrD;aAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,8BAA8B,CAAC,CAAC;SACxE;QAED,MAAM,MAAM,GAAW;YACrB,KAAK,EAAE,GAAG,CAAC,IAAI;YACf,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,0EAA0E;YAC3G,KAAK,EAAE,GAAG;SACX,CAAC;QAEF,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;KAChC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC","sourcesContent":["import { PackageDefinitions } from '@ms-cloudpack/package-utilities';\nimport type { Choice } from 'prompts';\n\n/**\n *\n * @param appPaths (a array of app paths to Cloudpack-enabled apps)\n * @returns Promise<Map<string, ChoiceWithConfig>>\n * Create a map of app paths (paths to Cloudpack-enabled apps) to Choice objects.\n * Choice comes from prompts package and represents a menu choice\n * Example:\n * /path/to/awesome/app => {\n * title: 'awesome-app',\n * description: 'what a great app',\n * value: '/path/to/awesome/app'\n * }\n */\nexport async function createPathToChoiceMap(appPaths: string[]) {\n const packages = new PackageDefinitions();\n const availableApps = new Map<string, Choice>();\n\n for (const dir of appPaths) {\n const pkg = await packages.get(dir);\n\n if (!pkg) {\n throw new Error(`package.json missing in '${dir}'`);\n } else if (!pkg.name) {\n throw new Error(`package.json in '${dir}' is missing \"name\" property`);\n }\n\n const choice: Choice = {\n title: pkg.name,\n description: pkg?.description ?? 'An awesome app that would be even more awesome with a proper description',\n value: dir,\n };\n\n availableApps.set(dir, choice);\n }\n\n return availableApps;\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import { type Choice } from 'prompts';
2
+ /**
3
+ * Gets the app path from user (either implicitly, via command line arg or via menu if needed)
4
+ * @param availableApps - a Map of app paths to Choice objects
5
+ * @param app - the app (partial name ok) specified via --app arg
6
+ * @returns Path to chosen app (could be via --app match or via menu selection)
7
+ */
8
+ export declare function getAppPathFromUser(availableApps: Map<string, Choice>, app: string | undefined): Promise<string>;
9
+ //# sourceMappingURL=getAppPathFromUser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAppPathFromUser.d.ts","sourceRoot":"","sources":["../../../src/commands/start/getAppPathFromUser.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAG/C;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBrH"}
@@ -0,0 +1,28 @@
1
+ import prompts, {} from 'prompts';
2
+ import { getMatchingApps } from './getMatchingApps.js';
3
+ /**
4
+ * Gets the app path from user (either implicitly, via command line arg or via menu if needed)
5
+ * @param availableApps - a Map of app paths to Choice objects
6
+ * @param app - the app (partial name ok) specified via --app arg
7
+ * @returns Path to chosen app (could be via --app match or via menu selection)
8
+ */
9
+ export async function getAppPathFromUser(availableApps, app) {
10
+ const matchingApps = getMatchingApps(availableApps, app);
11
+ if (matchingApps.length === 1) {
12
+ return matchingApps[0].value;
13
+ }
14
+ const response = await prompts({
15
+ type: 'select',
16
+ name: 'value',
17
+ message: 'Select the app you want to start',
18
+ choices: [...availableApps.values()].sort((c1, c2) => c1.title.localeCompare(c2.title)),
19
+ initial: 0,
20
+ }, {
21
+ onCancel: () => {
22
+ console.log('Aborting...');
23
+ process.exit(0);
24
+ },
25
+ });
26
+ return response.value;
27
+ }
28
+ //# sourceMappingURL=getAppPathFromUser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAppPathFromUser.js","sourceRoot":"","sources":["../../../src/commands/start/getAppPathFromUser.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAe,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,aAAkC,EAAE,GAAuB;IAClG,MAAM,YAAY,GAAG,eAAe,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAEzD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7B,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,KAAe,CAAC;KACxC;IAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,kCAAkC;QAC3C,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACvF,OAAO,EAAE,CAAC;KACX,EACD;QACE,QAAQ,EAAE,GAAG,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;KACF,CACF,CAAC;IAEF,OAAO,QAAQ,CAAC,KAAe,CAAC;AAClC,CAAC","sourcesContent":["import prompts, { type Choice } from 'prompts';\nimport { getMatchingApps } from './getMatchingApps.js';\n\n/**\n * Gets the app path from user (either implicitly, via command line arg or via menu if needed)\n * @param availableApps - a Map of app paths to Choice objects\n * @param app - the app (partial name ok) specified via --app arg\n * @returns Path to chosen app (could be via --app match or via menu selection)\n */\nexport async function getAppPathFromUser(availableApps: Map<string, Choice>, app: string | undefined): Promise<string> {\n const matchingApps = getMatchingApps(availableApps, app);\n\n if (matchingApps.length === 1) {\n return matchingApps[0].value as string;\n }\n\n const response = await prompts<string>(\n {\n type: 'select',\n name: 'value',\n message: 'Select the app you want to start',\n choices: [...availableApps.values()].sort((c1, c2) => c1.title.localeCompare(c2.title)),\n initial: 0,\n },\n {\n onCancel: () => {\n console.log('Aborting...');\n process.exit(0);\n },\n },\n );\n\n return response.value as string;\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import type { Choice } from 'prompts';
2
+ /**
3
+ *
4
+ * @param availableApps - Map of app paths to Choice objects
5
+ * @param app - The app specified from --app argument
6
+ * @returns An array of app paths whose package.json name property matches (even partially) the --app arg
7
+ */
8
+ export declare function getMatchingApps(availableApps: Map<string, Choice>, app: string | undefined): Choice[];
9
+ //# sourceMappingURL=getMatchingApps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMatchingApps.d.ts","sourceRoot":"","sources":["../../../src/commands/start/getMatchingApps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,YAE1F"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ *
3
+ * @param availableApps - Map of app paths to Choice objects
4
+ * @param app - The app specified from --app argument
5
+ * @returns An array of app paths whose package.json name property matches (even partially) the --app arg
6
+ */
7
+ export function getMatchingApps(availableApps, app) {
8
+ return [...availableApps.values()].filter((choice) => choice.title?.includes(app ?? ''));
9
+ }
10
+ //# sourceMappingURL=getMatchingApps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMatchingApps.js","sourceRoot":"","sources":["../../../src/commands/start/getMatchingApps.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,aAAkC,EAAE,GAAuB;IACzF,OAAO,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3F,CAAC","sourcesContent":["import type { Choice } from 'prompts';\n\n/**\n *\n * @param availableApps - Map of app paths to Choice objects\n * @param app - The app specified from --app argument\n * @returns An array of app paths whose package.json name property matches (even partially) the --app arg\n */\nexport function getMatchingApps(availableApps: Map<string, Choice>, app: string | undefined) {\n return [...availableApps.values()].filter((choice) => choice.title?.includes(app ?? ''));\n}\n"]}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Gets the appPath from which Cloudpack will start. If the CWD is a Cloudpack-enabled app,
3
+ * we'll start there; otherwise, we'll scan for Cloudpack-enabled app and present the user
4
+ * with a menu. If no app are found, Cloudpack will just try to start the CWD anyway.
5
+ * @param cwd - The current working directory to start in when finding the starting app path
6
+ * @param desiredApp - The app that should be started as specified via --app arg
7
+ * @returns The app path of the app that Cloudpack should start
8
+ */
9
+ export declare function getStartingAppPath(cwd: string, desiredApp?: string): Promise<string>;
10
+ //# sourceMappingURL=getStartingAppPath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getStartingAppPath.d.ts","sourceRoot":"","sources":["../../../src/commands/start/getStartingAppPath.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,mBAcxE"}
@@ -0,0 +1,29 @@
1
+ import { pathExists } from 'fs-extra';
2
+ import { findCloudpackAppPaths } from '../../common/findCloudpackAppPaths.js';
3
+ import path from 'path';
4
+ import { createPathToChoiceMap } from './createPathToChoiceMap.js';
5
+ import { getAppPathFromUser } from './getAppPathFromUser.js';
6
+ /**
7
+ * Gets the appPath from which Cloudpack will start. If the CWD is a Cloudpack-enabled app,
8
+ * we'll start there; otherwise, we'll scan for Cloudpack-enabled app and present the user
9
+ * with a menu. If no app are found, Cloudpack will just try to start the CWD anyway.
10
+ * @param cwd - The current working directory to start in when finding the starting app path
11
+ * @param desiredApp - The app that should be started as specified via --app arg
12
+ * @returns The app path of the app that Cloudpack should start
13
+ */
14
+ export async function getStartingAppPath(cwd, desiredApp) {
15
+ const cwdIsCloudpackApp = await pathExists(path.resolve(path.join(cwd, 'cloudpack.config.json')));
16
+ if (cwdIsCloudpackApp) {
17
+ return cwd;
18
+ }
19
+ const folderPaths = findCloudpackAppPaths(cwd);
20
+ if (folderPaths.length === 1) {
21
+ return folderPaths[0];
22
+ }
23
+ else {
24
+ const pathToCloudpackConfigMap = await createPathToChoiceMap(folderPaths);
25
+ const appPath = await getAppPathFromUser(pathToCloudpackConfigMap, desiredApp);
26
+ return appPath ?? cwd;
27
+ }
28
+ }
29
+ //# sourceMappingURL=getStartingAppPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getStartingAppPath.js","sourceRoot":"","sources":["../../../src/commands/start/getStartingAppPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAW,EAAE,UAAmB;IACvE,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAClG,IAAI,iBAAiB,EAAE;QACrB,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,WAAW,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;QAC5B,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;KACvB;SAAM;QACL,MAAM,wBAAwB,GAAG,MAAM,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,wBAAwB,EAAE,UAAU,CAAC,CAAC;QAC/E,OAAO,OAAO,IAAI,GAAG,CAAC;KACvB;AACH,CAAC","sourcesContent":["import { pathExists } from 'fs-extra';\nimport { findCloudpackAppPaths } from '../../common/findCloudpackAppPaths.js';\nimport path from 'path';\nimport { createPathToChoiceMap } from './createPathToChoiceMap.js';\nimport { getAppPathFromUser } from './getAppPathFromUser.js';\n\n/**\n * Gets the appPath from which Cloudpack will start. If the CWD is a Cloudpack-enabled app,\n * we'll start there; otherwise, we'll scan for Cloudpack-enabled app and present the user\n * with a menu. If no app are found, Cloudpack will just try to start the CWD anyway.\n * @param cwd - The current working directory to start in when finding the starting app path\n * @param desiredApp - The app that should be started as specified via --app arg\n * @returns The app path of the app that Cloudpack should start\n */\nexport async function getStartingAppPath(cwd: string, desiredApp?: string) {\n const cwdIsCloudpackApp = await pathExists(path.resolve(path.join(cwd, 'cloudpack.config.json')));\n if (cwdIsCloudpackApp) {\n return cwd;\n }\n\n const folderPaths = findCloudpackAppPaths(cwd);\n if (folderPaths.length === 1) {\n return folderPaths[0];\n } else {\n const pathToCloudpackConfigMap = await createPathToChoiceMap(folderPaths);\n const appPath = await getAppPathFromUser(pathToCloudpackConfigMap, desiredApp);\n return appPath ?? cwd;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/start/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAItE,eAAO,MAAM,IAAI,EAAE,eAOlB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/start/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAItE,eAAO,MAAM,IAAI,EAAE,eAQlB,CAAC"}
@@ -5,6 +5,7 @@ export const init = (command, context) => {
5
5
  .description('Starts a web inner-loop from the current package folder.')
6
6
  .option('--log-resolve-map', 'Logs the resolve map to "resolve-map.json" for diagnostics.')
7
7
  .option('--features <featureName> [featureNames...]', 'Enable experimental features.')
8
+ .option('--app <appPackageName>', 'Run Cloudpack targeting a specific app.')
8
9
  .action(async (options) => (await import('./start.js')).start(options, context));
9
10
  };
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/start/index.ts"],"names":[],"mappings":"AAGA,+BAA+B;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IACxD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0DAA0D,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,6DAA6D,CAAC;SAC1F,MAAM,CAAC,4CAA4C,EAAE,+BAA+B,CAAC;SACrF,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AACnG,CAAC,CAAC","sourcesContent":["import type { CommandFunction } from '../../types/CommandFunction.js';\nimport type { StartOptions } from './types/StartOptions.js';\n\n/* Defines the \"start\" verb. */\nexport const init: CommandFunction = (command, context) => {\n command\n .command('start')\n .description('Starts a web inner-loop from the current package folder.')\n .option('--log-resolve-map', 'Logs the resolve map to \"resolve-map.json\" for diagnostics.')\n .option('--features <featureName> [featureNames...]', 'Enable experimental features.')\n .action(async (options: StartOptions) => (await import('./start.js')).start(options, context));\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/start/index.ts"],"names":[],"mappings":"AAGA,+BAA+B;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IACxD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0DAA0D,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,6DAA6D,CAAC;SAC1F,MAAM,CAAC,4CAA4C,EAAE,+BAA+B,CAAC;SACrF,MAAM,CAAC,wBAAwB,EAAE,yCAAyC,CAAC;SAC3E,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AACnG,CAAC,CAAC","sourcesContent":["import type { CommandFunction } from '../../types/CommandFunction.js';\nimport type { StartOptions } from './types/StartOptions.js';\n\n/* Defines the \"start\" verb. */\nexport const init: CommandFunction = (command, context) => {\n command\n .command('start')\n .description('Starts a web inner-loop from the current package folder.')\n .option('--log-resolve-map', 'Logs the resolve map to \"resolve-map.json\" for diagnostics.')\n .option('--features <featureName> [featureNames...]', 'Enable experimental features.')\n .option('--app <appPackageName>', 'Run Cloudpack targeting a specific app.')\n .action(async (options: StartOptions) => (await import('./start.js')).start(options, context));\n};\n"]}
@@ -0,0 +1,7 @@
1
+ import type { CloudpackConfig } from '@ms-cloudpack/config';
2
+ /**
3
+ * Runs the pre-requisites specified in the given Cloudpack config
4
+ * @param config - The Cloudpack config of containing a list of prereqs to run
5
+ */
6
+ export declare function runPrereqs(config: CloudpackConfig | undefined, cwd: string): void;
7
+ //# sourceMappingURL=runPrereqs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runPrereqs.d.ts","sourceRoot":"","sources":["../../../src/commands/start/runPrereqs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,QAQ1E"}
@@ -0,0 +1,15 @@
1
+ import spawn from 'cross-spawn';
2
+ /**
3
+ * Runs the pre-requisites specified in the given Cloudpack config
4
+ * @param config - The Cloudpack config of containing a list of prereqs to run
5
+ */
6
+ export function runPrereqs(config, cwd) {
7
+ const dependsOn = config?.dependsOn;
8
+ if (dependsOn) {
9
+ for (const [command, args] of dependsOn) {
10
+ spawn.sync(command, args, { stdio: 'inherit', cwd });
11
+ }
12
+ }
13
+ }
14
+ // cspell:ignore Prereqs
15
+ //# sourceMappingURL=runPrereqs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runPrereqs.js","sourceRoot":"","sources":["../../../src/commands/start/runPrereqs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,aAAa,CAAC;AAEhC;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAmC,EAAE,GAAW;IACzE,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,CAAC;IAEpC,IAAI,SAAS,EAAE;QACb,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE;YACvC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;SACtD;KACF;AACH,CAAC;AAED,wBAAwB","sourcesContent":["import type { CloudpackConfig } from '@ms-cloudpack/config';\nimport spawn from 'cross-spawn';\n\n/**\n * Runs the pre-requisites specified in the given Cloudpack config\n * @param config - The Cloudpack config of containing a list of prereqs to run\n */\nexport function runPrereqs(config: CloudpackConfig | undefined, cwd: string) {\n const dependsOn = config?.dependsOn;\n\n if (dependsOn) {\n for (const [command, args] of dependsOn) {\n spawn.sync(command, args, { stdio: 'inherit', cwd });\n }\n }\n}\n\n// cspell:ignore Prereqs\n"]}
@@ -0,0 +1,3 @@
1
+ import type { TaskContext } from '../../types/TaskContext.js';
2
+ export declare function setupReporting({ reporter, config }: Pick<TaskContext, 'reporter' | 'config'>): Promise<void>;
3
+ //# sourceMappingURL=setupReporting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupReporting.d.ts","sourceRoot":"","sources":["../../../src/commands/start/setupReporting.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAgB9D,wBAAsB,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,QAAQ,CAAC,iBAmBlG"}
@@ -0,0 +1,25 @@
1
+ import { getVersion } from '@ms-cloudpack/package-utilities';
2
+ import { initTelemetry } from '../../initTelemetry.js';
3
+ import { bold, defaultLoggingConfig, verboseLoggingConfig, debugLoggingConfig, } from '@ms-cloudpack/task-reporter';
4
+ const { argv } = process;
5
+ const useDebugLogging = argv.includes('--debug') || argv.includes('-d');
6
+ const verb = argv[2];
7
+ const useVerboseLogging = argv.includes('--verbose') || argv.includes('-v') || verb === 'bundle';
8
+ const version = getVersion(import.meta.url);
9
+ export async function setupReporting({ reporter, config }) {
10
+ reporter.setOptions({
11
+ productName: 'Cloudpack',
12
+ version,
13
+ description: () => `Running "${bold(argv.slice(2).join(' '))}"`,
14
+ helpMessage: config.helpMessage,
15
+ ...defaultLoggingConfig,
16
+ ...(useVerboseLogging && verboseLoggingConfig),
17
+ ...(useDebugLogging && debugLoggingConfig),
18
+ });
19
+ await initTelemetry({
20
+ useDebugLogging,
21
+ useVerboseLogging,
22
+ telemetryConfig: config.telemetry,
23
+ }, reporter);
24
+ }
25
+ //# sourceMappingURL=setupReporting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupReporting.js","sourceRoot":"","sources":["../../../src/commands/start/setupReporting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EACL,IAAI,EACJ,oBAAoB,EACpB,oBAAoB,EAEpB,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AAErC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;AACzB,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,QAAQ,CAAC;AACjG,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAA4C;IACjG,QAAQ,CAAC,UAAU,CAAC;QAClB,WAAW,EAAE,WAAW;QACxB,OAAO;QACP,WAAW,EAAE,GAAG,EAAE,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG;QAC/D,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,GAAG,oBAAoB;QACvB,GAAG,CAAC,iBAAiB,IAAI,oBAAoB,CAAC;QAC9C,GAAG,CAAC,eAAe,IAAI,kBAAkB,CAAC;KACpB,CAAC,CAAC;IAE1B,MAAM,aAAa,CACjB;QACE,eAAe;QACf,iBAAiB;QACjB,eAAe,EAAE,MAAM,CAAC,SAAS;KAClC,EACD,QAAQ,CACT,CAAC;AACJ,CAAC","sourcesContent":["import { getVersion } from '@ms-cloudpack/package-utilities';\nimport type { TaskContext } from '../../types/TaskContext.js';\nimport { initTelemetry } from '../../initTelemetry.js';\nimport {\n bold,\n defaultLoggingConfig,\n verboseLoggingConfig,\n type TaskReporterOptions,\n debugLoggingConfig,\n} from '@ms-cloudpack/task-reporter';\n\nconst { argv } = process;\nconst useDebugLogging = argv.includes('--debug') || argv.includes('-d');\nconst verb = argv[2];\nconst useVerboseLogging = argv.includes('--verbose') || argv.includes('-v') || verb === 'bundle';\nconst version = getVersion(import.meta.url);\n\nexport async function setupReporting({ reporter, config }: Pick<TaskContext, 'reporter' | 'config'>) {\n reporter.setOptions({\n productName: 'Cloudpack',\n version,\n description: () => `Running \"${bold(argv.slice(2).join(' '))}\"`,\n helpMessage: config.helpMessage,\n ...defaultLoggingConfig,\n ...(useVerboseLogging && verboseLoggingConfig),\n ...(useDebugLogging && debugLoggingConfig),\n } as TaskReporterOptions);\n\n await initTelemetry(\n {\n useDebugLogging,\n useVerboseLogging,\n telemetryConfig: config.telemetry,\n },\n reporter,\n );\n}\n"]}
@@ -1,7 +1,9 @@
1
1
  import type { StartOptions } from './types/StartOptions.js';
2
2
  import type { TaskContext } from '../../types/TaskContext.js';
3
+ /** Stop all started cloudpack instances, for testing */
4
+ export declare function stopServers(): Promise<void>;
3
5
  /**
4
6
  * Defines the "start" verb entry point.
5
7
  */
6
- export declare function start(options: StartOptions, { reporter, appPath, config }: TaskContext): Promise<void>;
8
+ export declare function start(options: StartOptions, { reporter, appPath: initialCwd }: TaskContext): Promise<void>;
7
9
  //# sourceMappingURL=start.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/start/start.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAU5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAqB9D;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,WAAW,iBAyH5F"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/start/start.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAU5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAO9D,wDAAwD;AACxD,wBAAsB,WAAW,kBAKhC;AAqBD;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,WAAW,iBAsIhG"}
@@ -3,13 +3,24 @@ import { findResolveMapEntry } from '@ms-cloudpack/package-utilities';
3
3
  import path from 'path';
4
4
  import { createSession } from './createSession.js';
5
5
  import { openBrowser } from './openBrowser.js';
6
- import { createPackageDefinitions } from '@ms-cloudpack/config';
6
+ import { createPackageDefinitions, readConfig } from '@ms-cloudpack/config';
7
7
  import { PerfMarkerCliEntry, PerfMeasurementOpenBrowser } from '../../performance/markers.js';
8
8
  import { setSharedTelemetryAttribute, stopTelemetry, rootSpan } from '../../initTelemetry.js';
9
9
  import { createBundleRequestForPackage } from './createBundleRequestForPackage.js';
10
10
  import { createBundleTask } from './createBundleTask.js';
11
11
  import { mergeFeatures } from './mergeFeatures.js';
12
12
  import { yellow } from '@ms-cloudpack/task-reporter';
13
+ import { getStartingAppPath } from './getStartingAppPath.js';
14
+ import { runPrereqs } from './runPrereqs.js';
15
+ import { setupReporting } from './setupReporting.js';
16
+ let cleanupFunctions = [];
17
+ /** Stop all started cloudpack instances, for testing */
18
+ export async function stopServers() {
19
+ for (const func of cleanupFunctions) {
20
+ await func();
21
+ }
22
+ cleanupFunctions = [];
23
+ }
13
24
  async function createAppBundleTask(options, context) {
14
25
  const { packageName } = options;
15
26
  const { session } = context;
@@ -26,7 +37,13 @@ async function createAppBundleTask(options, context) {
26
37
  /**
27
38
  * Defines the "start" verb entry point.
28
39
  */
29
- export async function start(options, { reporter, appPath, config }) {
40
+ export async function start(options, { reporter, appPath: initialCwd }) {
41
+ const appPath = await getStartingAppPath(initialCwd, options.app);
42
+ const config = await readConfig(appPath);
43
+ await setupReporting({ reporter, config });
44
+ console.log('App path:', yellow(appPath));
45
+ process.chdir(appPath);
46
+ runPrereqs(config, appPath);
30
47
  try {
31
48
  // Merge in any additional features from the command line.
32
49
  config.features = mergeFeatures({
@@ -100,6 +117,7 @@ export async function start(options, { reporter, appPath, config }) {
100
117
  // Flush and close telemetry.
101
118
  await stopTelemetry();
102
119
  };
120
+ cleanupFunctions.push(cleanup);
103
121
  // Setup cleanup and close things on completion.
104
122
  let sigintCount = 0;
105
123
  process.on('SIGINT', () => {
@@ -128,4 +146,5 @@ export async function start(options, { reporter, appPath, config }) {
128
146
  process.exit(1);
129
147
  }
130
148
  }
149
+ // cspell:ignore Prereqs
131
150
  //# sourceMappingURL=start.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/start/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,2BAA2B,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAIrD,KAAK,UAAU,mBAAmB,CAChC,OAAgC,EAChC,OAAyF;IAEzF,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,MAAM,YAAY,GAAG,mBAAmB,CAAC;QACvC,WAAW;QACX,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IAEH,IAAI,CAAC,YAAY,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,WAAW,sBAAsB,CAAC,CAAC;KAC9E;IACD,MAAM,aAAa,GAAG,MAAM,6BAA6B,CAAC,EAAE,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;IAErF,OAAO,gBAAgB,CAAC,aAAa,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAe;IAC3F,IAAI;QACF,0DAA0D;QAC1D,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC;YAC9B,cAAc,EAAE,MAAM,CAAC,QAAQ;YAC/B,mBAAmB,EAAE,OAAO,CAAC,QAAQ;SACtC,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;aACxD,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;aAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAEvB,IAAI,mBAAmB,CAAC,MAAM,EAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,qBAAqB,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC1F;QAED,gCAAgC;QAChC,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAEtD,gDAAgD;QAChD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,IAAI,CAAC,CAAC;SACvE;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;YAC3C,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,uCAAuC,CAAC,CAAC;SACzF;QAED,iCAAiC;QACjC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEjF,gFAAgF;QAChF,2BAA2B,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAErD,IAAI,OAAO,CAAC,aAAa,EAAE;YACzB,iCAAiC;YACjC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;SAC7E;QAED,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAEpE,qEAAqE;QACrE,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC;YACrC,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,QAAQ;SACT,CAAC,CAAC;QAEH,gEAAgE;QAChE,KAAK,SAAS,CAAC,OAAO,CAAC,MAAM,mBAAmB,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEnH,yDAAyD;QACzD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEzF,gCAAgC;QAChC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC;YACrC,OAAO;YACP,UAAU;YACV,YAAY;YACZ,SAAS;YACT,MAAM;YACN,QAAQ;YACR,QAAQ;SACT,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI;gBAC3B,CAAC,WAAW,EAAE,SAAS,CAAU;gBACjC,CAAC,WAAW,EAAE,SAAS,CAAU;gBACjC,CAAC,cAAc,EAAE,YAAY,CAAU;aACxC,EAAE;gBACD,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC/C,IAAI;oBACF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;iBACtB;gBAAC,OAAO,GAAG,EAAE;oBACZ,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;iBAC5C;aACF;YAED,4DAA4D;YAC5D,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAEpB,6BAA6B;YAC7B,MAAM,aAAa,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,gDAAgD;QAChD,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,WAAW,EAAE,CAAC;YACd,IAAI,WAAW,GAAG,CAAC,EAAE;gBACnB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACjB;YAED,6FAA6F;YAC7F,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;gBACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;QAE1B,WAAW,CAAC,OAAO,CAAC,0BAA0B,EAAE,kBAAkB,CAAC,CAAC;QACpE,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7B,sEAAsE;YACtE,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;KACJ;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC","sourcesContent":["import { writeJson } from '@ms-cloudpack/json-utilities';\nimport { findResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport path from 'path';\nimport { createSession } from './createSession.js';\nimport { openBrowser } from './openBrowser.js';\nimport type { Session } from '@ms-cloudpack/api-server';\nimport type { StartOptions } from './types/StartOptions.js';\nimport { createPackageDefinitions } from '@ms-cloudpack/config';\nimport type { CloudpackConfig } from '@ms-cloudpack/config';\nimport { PerfMarkerCliEntry, PerfMeasurementOpenBrowser } from '../../performance/markers.js';\nimport { setSharedTelemetryAttribute, stopTelemetry, rootSpan } from '../../initTelemetry.js';\nimport { createBundleRequestForPackage } from './createBundleRequestForPackage.js';\nimport { createBundleTask } from './createBundleTask.js';\nimport { mergeFeatures } from './mergeFeatures.js';\nimport { yellow } from '@ms-cloudpack/task-reporter';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { TaskContext } from '../../types/TaskContext.js';\n\nasync function createAppBundleTask(\n options: { packageName: string },\n context: { session: Session; config: CloudpackConfig; packages: PackageDefinitionsCache },\n) {\n const { packageName } = options;\n const { session } = context;\n const packageEntry = findResolveMapEntry({\n packageName,\n resolveMap: session.resolveMap,\n });\n\n if (!packageEntry) {\n throw new Error(`Could not find package ${packageName} in the resolve map.`);\n }\n const bundleRequest = await createBundleRequestForPackage({ packageEntry }, context);\n\n return createBundleTask(bundleRequest);\n}\n\n/**\n * Defines the \"start\" verb entry point.\n */\nexport async function start(options: StartOptions, { reporter, appPath, config }: TaskContext) {\n try {\n // Merge in any additional features from the command line.\n config.features = mergeFeatures({\n configFeatures: config.features,\n commandLineFeatures: options.features,\n });\n\n const enabledFeatureNames = Object.entries(config.features)\n .filter(([, value]) => value)\n .map(([key]) => key);\n\n if (enabledFeatureNames.length) {\n console.log(`Enabled features: ${enabledFeatureNames.map((f) => yellow(f)).join(', ')}`);\n }\n\n // Initialize package overrides.\n const packages = createPackageDefinitions({ config });\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 // Initialize session definition.\n const session = await createSession({ appPath, config }, { reporter, packages });\n\n // Set shared telemetry attributes which will be sent with all telemetry events.\n setSharedTelemetryAttribute('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({\n session,\n rootSpan,\n reporter,\n packages,\n });\n\n // Kick off bundling app package as soon as api server is ready.\n void apiServer.addTask(await createAppBundleTask({ packageName: definition.name }, { session, config, packages }));\n\n // Then start bundle and app servers for hosting the app.\n const { startBundleServer } = await import('./startBundleServer.js');\n const bundleServer = await startBundleServer({ apiServer, session, reporter, packages });\n\n // Finally start the app server.\n const { startAppServer } = await import('./appServer/startAppServer.js');\n const appServer = await startAppServer({\n session,\n definition,\n bundleServer,\n apiServer,\n config,\n reporter,\n packages,\n });\n\n const cleanup = async () => {\n for (const [name, server] of [\n ['appServer', appServer] as const,\n ['apiServer', apiServer] as const,\n ['bundleServer', bundleServer] as const,\n ]) {\n console.info(`Closing ${name}: ${server.url}`);\n try {\n await server.close();\n } catch (err) {\n console.warn('Error closing server:', err);\n }\n }\n\n // Complete the reporting and list pending tasks as aborted.\n reporter.complete();\n\n // Flush and close telemetry.\n await stopTelemetry();\n };\n\n // Setup cleanup and close things on completion.\n let sigintCount = 0;\n\n process.on('SIGINT', () => {\n sigintCount++;\n if (sigintCount > 1) {\n console.debug('Forcing exit');\n process.exit(1);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- handler can't be async\n cleanup().finally(() => {\n process.exit(0);\n });\n });\n\n // Open the browser.\n const url = appServer.url;\n\n performance.measure(PerfMeasurementOpenBrowser, PerfMarkerCliEntry);\n openBrowser(url).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:', url);\n });\n } catch (err) {\n console.error(err);\n reporter.complete();\n process.exit(1);\n }\n}\n"]}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/start/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,2BAA2B,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAGrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,IAAI,gBAAgB,GAA+B,EAAE,CAAC;AAEtD,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE;QACnC,MAAM,IAAI,EAAE,CAAC;KACd;IACD,gBAAgB,GAAG,EAAE,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,OAAgC,EAChC,OAAyF;IAEzF,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,MAAM,YAAY,GAAG,mBAAmB,CAAC;QACvC,WAAW;QACX,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IAEH,IAAI,CAAC,YAAY,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,WAAW,sBAAsB,CAAC,CAAC;KAC9E;IACD,MAAM,aAAa,GAAG,MAAM,6BAA6B,CAAC,EAAE,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;IAErF,OAAO,gBAAgB,CAAC,aAAa,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAe;IAC/F,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAEzC,MAAM,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAE1C,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEvB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE5B,IAAI;QACF,0DAA0D;QAC1D,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC;YAC9B,cAAc,EAAE,MAAM,CAAC,QAAQ;YAC/B,mBAAmB,EAAE,OAAO,CAAC,QAAQ;SACtC,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;aACxD,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;aAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAEvB,IAAI,mBAAmB,CAAC,MAAM,EAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,qBAAqB,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC1F;QAED,gCAAgC;QAChC,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAEtD,gDAAgD;QAChD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,IAAI,CAAC,CAAC;SACvE;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;YAC3C,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,uCAAuC,CAAC,CAAC;SACzF;QAED,iCAAiC;QACjC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEjF,gFAAgF;QAChF,2BAA2B,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAErD,IAAI,OAAO,CAAC,aAAa,EAAE;YACzB,iCAAiC;YACjC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;SAC7E;QAED,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAEpE,qEAAqE;QACrE,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC;YACrC,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,QAAQ;SACT,CAAC,CAAC;QAEH,gEAAgE;QAChE,KAAK,SAAS,CAAC,OAAO,CAAC,MAAM,mBAAmB,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEnH,yDAAyD;QACzD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEzF,gCAAgC;QAChC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC;YACrC,OAAO;YACP,UAAU;YACV,YAAY;YACZ,SAAS;YACT,MAAM;YACN,QAAQ;YACR,QAAQ;SACT,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI;gBAC3B,CAAC,WAAW,EAAE,SAAS,CAAU;gBACjC,CAAC,WAAW,EAAE,SAAS,CAAU;gBACjC,CAAC,cAAc,EAAE,YAAY,CAAU;aACxC,EAAE;gBACD,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC/C,IAAI;oBACF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;iBACtB;gBAAC,OAAO,GAAG,EAAE;oBACZ,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;iBAC5C;aACF;YAED,4DAA4D;YAC5D,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAEpB,6BAA6B;YAC7B,MAAM,aAAa,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/B,gDAAgD;QAChD,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,WAAW,EAAE,CAAC;YACd,IAAI,WAAW,GAAG,CAAC,EAAE;gBACnB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACjB;YAED,6FAA6F;YAC7F,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;gBACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;QAE1B,WAAW,CAAC,OAAO,CAAC,0BAA0B,EAAE,kBAAkB,CAAC,CAAC;QACpE,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7B,sEAAsE;YACtE,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;KACJ;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC;AAED,wBAAwB","sourcesContent":["import { writeJson } from '@ms-cloudpack/json-utilities';\nimport { findResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport path from 'path';\nimport { createSession } from './createSession.js';\nimport { openBrowser } from './openBrowser.js';\nimport type { Session } from '@ms-cloudpack/api-server';\nimport type { StartOptions } from './types/StartOptions.js';\nimport { createPackageDefinitions, readConfig } from '@ms-cloudpack/config';\nimport type { CloudpackConfig } from '@ms-cloudpack/config';\nimport { PerfMarkerCliEntry, PerfMeasurementOpenBrowser } from '../../performance/markers.js';\nimport { setSharedTelemetryAttribute, stopTelemetry, rootSpan } from '../../initTelemetry.js';\nimport { createBundleRequestForPackage } from './createBundleRequestForPackage.js';\nimport { createBundleTask } from './createBundleTask.js';\nimport { mergeFeatures } from './mergeFeatures.js';\nimport { yellow } from '@ms-cloudpack/task-reporter';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { TaskContext } from '../../types/TaskContext.js';\nimport { getStartingAppPath } from './getStartingAppPath.js';\nimport { runPrereqs } from './runPrereqs.js';\nimport { setupReporting } from './setupReporting.js';\n\nlet cleanupFunctions: Array<() => Promise<void>> = [];\n\n/** Stop all started cloudpack instances, for testing */\nexport async function stopServers() {\n for (const func of cleanupFunctions) {\n await func();\n }\n cleanupFunctions = [];\n}\n\nasync function createAppBundleTask(\n options: { packageName: string },\n context: { session: Session; config: CloudpackConfig; packages: PackageDefinitionsCache },\n) {\n const { packageName } = options;\n const { session } = context;\n const packageEntry = findResolveMapEntry({\n packageName,\n resolveMap: session.resolveMap,\n });\n\n if (!packageEntry) {\n throw new Error(`Could not find package ${packageName} in the resolve map.`);\n }\n const bundleRequest = await createBundleRequestForPackage({ packageEntry }, context);\n\n return createBundleTask(bundleRequest);\n}\n\n/**\n * Defines the \"start\" verb entry point.\n */\nexport async function start(options: StartOptions, { reporter, appPath: initialCwd }: TaskContext) {\n const appPath = await getStartingAppPath(initialCwd, options.app);\n const config = await readConfig(appPath);\n\n await setupReporting({ reporter, config });\n\n console.log('App path:', yellow(appPath));\n\n process.chdir(appPath);\n\n runPrereqs(config, appPath);\n\n try {\n // Merge in any additional features from the command line.\n config.features = mergeFeatures({\n configFeatures: config.features,\n commandLineFeatures: options.features,\n });\n\n const enabledFeatureNames = Object.entries(config.features)\n .filter(([, value]) => value)\n .map(([key]) => key);\n\n if (enabledFeatureNames.length) {\n console.log(`Enabled features: ${enabledFeatureNames.map((f) => yellow(f)).join(', ')}`);\n }\n\n // Initialize package overrides.\n const packages = createPackageDefinitions({ config });\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 // Initialize session definition.\n const session = await createSession({ appPath, config }, { reporter, packages });\n\n // Set shared telemetry attributes which will be sent with all telemetry events.\n setSharedTelemetryAttribute('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({\n session,\n rootSpan,\n reporter,\n packages,\n });\n\n // Kick off bundling app package as soon as api server is ready.\n void apiServer.addTask(await createAppBundleTask({ packageName: definition.name }, { session, config, packages }));\n\n // Then start bundle and app servers for hosting the app.\n const { startBundleServer } = await import('./startBundleServer.js');\n const bundleServer = await startBundleServer({ apiServer, session, reporter, packages });\n\n // Finally start the app server.\n const { startAppServer } = await import('./appServer/startAppServer.js');\n const appServer = await startAppServer({\n session,\n definition,\n bundleServer,\n apiServer,\n config,\n reporter,\n packages,\n });\n\n const cleanup = async () => {\n for (const [name, server] of [\n ['appServer', appServer] as const,\n ['apiServer', apiServer] as const,\n ['bundleServer', bundleServer] as const,\n ]) {\n console.info(`Closing ${name}: ${server.url}`);\n try {\n await server.close();\n } catch (err) {\n console.warn('Error closing server:', err);\n }\n }\n\n // Complete the reporting and list pending tasks as aborted.\n reporter.complete();\n\n // Flush and close telemetry.\n await stopTelemetry();\n };\n\n cleanupFunctions.push(cleanup);\n\n // Setup cleanup and close things on completion.\n let sigintCount = 0;\n\n process.on('SIGINT', () => {\n sigintCount++;\n if (sigintCount > 1) {\n console.debug('Forcing exit');\n process.exit(1);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- handler can't be async\n cleanup().finally(() => {\n process.exit(0);\n });\n });\n\n // Open the browser.\n const url = appServer.url;\n\n performance.measure(PerfMeasurementOpenBrowser, PerfMarkerCliEntry);\n openBrowser(url).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:', url);\n });\n } catch (err) {\n console.error(err);\n reporter.complete();\n process.exit(1);\n }\n}\n\n// cspell:ignore Prereqs\n"]}
@@ -2,5 +2,6 @@ export interface StartOptions {
2
2
  logResolveMap?: boolean;
3
3
  sourcemap?: boolean;
4
4
  features?: string[];
5
+ app?: string;
5
6
  }
6
7
  //# sourceMappingURL=StartOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StartOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/start/types/StartOptions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB"}
1
+ {"version":3,"file":"StartOptions.d.ts","sourceRoot":"","sources":["../../../../src/commands/start/types/StartOptions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
@@ -1 +1 @@
1
- {"version":3,"file":"StartOptions.js","sourceRoot":"","sources":["../../../../src/commands/start/types/StartOptions.ts"],"names":[],"mappings":"","sourcesContent":["export interface StartOptions {\n logResolveMap?: boolean;\n sourcemap?: boolean;\n features?: string[];\n}\n"]}
1
+ {"version":3,"file":"StartOptions.js","sourceRoot":"","sources":["../../../../src/commands/start/types/StartOptions.ts"],"names":[],"mappings":"","sourcesContent":["export interface StartOptions {\n logResolveMap?: boolean;\n sourcemap?: boolean;\n features?: string[];\n app?: string;\n}\n"]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ *
3
+ * @param startingPath The path to start searching from when finding Cloudpack apps
4
+ * @returns An array of app paths corresponding to all discovered Cloudpack apps
5
+ */
6
+ export declare function findCloudpackAppPaths(startingPath: string): string[];
7
+ //# sourceMappingURL=findCloudpackAppPaths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findCloudpackAppPaths.d.ts","sourceRoot":"","sources":["../../src/common/findCloudpackAppPaths.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,YAIzD"}
@@ -0,0 +1,11 @@
1
+ import glob from 'glob-hasher';
2
+ import path from 'path';
3
+ /**
4
+ *
5
+ * @param startingPath The path to start searching from when finding Cloudpack apps
6
+ * @returns An array of app paths corresponding to all discovered Cloudpack apps
7
+ */
8
+ export function findCloudpackAppPaths(startingPath) {
9
+ return (glob.glob(['**/cloudpack.config.json', '!**/node_modules'], { cwd: startingPath }) ?? []).map((file) => path.dirname(file));
10
+ }
11
+ //# sourceMappingURL=findCloudpackAppPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findCloudpackAppPaths.js","sourceRoot":"","sources":["../../src/common/findCloudpackAppPaths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,YAAoB;IACxD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,0BAA0B,EAAE,kBAAkB,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7G,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CACnB,CAAC;AACJ,CAAC","sourcesContent":["import glob from 'glob-hasher';\nimport path from 'path';\n\n/**\n *\n * @param startingPath The path to start searching from when finding Cloudpack apps\n * @returns An array of app paths corresponding to all discovered Cloudpack apps\n */\nexport function findCloudpackAppPaths(startingPath: string) {\n return (glob.glob(['**/cloudpack.config.json', '!**/node_modules'], { cwd: startingPath }) ?? []).map((file) =>\n path.dirname(file),\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EAKb,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC;;;GAGG;AACH,wBAAsB,IAAI,CAAC,WAAW,CAAC,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD,iBAyEA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC;;;GAGG;AACH,wBAAsB,IAAI,CAAC,WAAW,CAAC,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD,iBAkDA"}
package/lib/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import { getVersion } from '@ms-cloudpack/package-utilities';
2
- import { TaskReporter, bold, debugLoggingConfig, defaultLoggingConfig, verboseLoggingConfig, } from '@ms-cloudpack/task-reporter';
2
+ import { TaskReporter } from '@ms-cloudpack/task-reporter';
3
3
  import { Command } from 'commander';
4
4
  import glob from 'glob';
5
5
  import path from 'path';
6
6
  import { fileURLToPath, pathToFileURL } from 'url';
7
- import { initTelemetry, setSharedTelemetryAttributes } from './initTelemetry.js';
7
+ import { setSharedTelemetryAttributes } from './initTelemetry.js';
8
8
  import { PerfMarkerCliEntry } from './performance/markers.js';
9
9
  import { readConfig } from '@ms-cloudpack/config';
10
10
  import { readJson } from '@ms-cloudpack/json-utilities';
@@ -21,33 +21,15 @@ export async function main(testOptions) {
21
21
  const reporter = testOptions?.reporter || new TaskReporter();
22
22
  const config = await readConfig(appPath);
23
23
  const program = new Command();
24
- const plainTextMode = argv.includes('--no-color') || argv.includes('-n');
25
24
  const version = getVersion(import.meta.url);
26
- const useDebugLogging = argv.includes('--debug') || argv.includes('-d');
27
25
  const verb = argv[2];
28
- const useVerboseLogging = argv.includes('--verbose') || argv.includes('-v') || verb === 'bundle';
29
26
  program.name('cloudpack').version(version).usage('<command> [options]');
30
- reporter.setOptions({
31
- productName: 'Cloudpack',
32
- version,
33
- plainTextMode,
34
- description: () => `Running "${bold(argv.slice(2).join(' '))}"`,
35
- helpMessage: config.helpMessage,
36
- ...defaultLoggingConfig,
37
- ...(useVerboseLogging && verboseLoggingConfig),
38
- ...(useDebugLogging && debugLoggingConfig),
39
- });
40
- await initTelemetry({
41
- useDebugLogging,
42
- useVerboseLogging,
43
- telemetryConfig: config.telemetry,
44
- }, reporter);
45
27
  const definition = (await readJson(path.join(appPath, 'package.json')));
46
28
  setSharedTelemetryAttributes({
47
29
  verb,
48
30
  arguments: argv.slice(3).join(' '),
49
31
  environment: process.env.CI || process.env.TF_BUILD ? 'ci' : 'local',
50
- appName: definition.name || '<unknown>',
32
+ appName: definition?.name || '<unknown>',
51
33
  });
52
34
  // Ensure the glob works in tests
53
35
  const commandsGlob = `commands/*/index${path.extname(currentFilePath)}`;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { getVersion } from '@ms-cloudpack/package-utilities';\nimport {\n TaskReporter,\n bold,\n debugLoggingConfig,\n defaultLoggingConfig,\n verboseLoggingConfig,\n} from '@ms-cloudpack/task-reporter';\nimport { Command } from 'commander';\nimport glob from 'glob';\nimport path from 'path';\nimport { fileURLToPath, pathToFileURL } from 'url';\nimport { initTelemetry, setSharedTelemetryAttributes } from './initTelemetry.js';\nimport { PerfMarkerCliEntry } from './performance/markers.js';\nimport { readConfig } from '@ms-cloudpack/config';\nimport type { CommandFunction } from './types/CommandFunction.js';\nimport { readJson } from '@ms-cloudpack/json-utilities';\nimport type { PackageJson } from '@ms-cloudpack/bundler-types';\n\nconst currentFilePath = fileURLToPath(import.meta.url);\nconst currentPath = path.dirname(currentFilePath);\n\n/**\n * Entry point for the cloudpack CLI.\n * Resolves all commands defined within the \"./commands\" folder.\n */\nexport async function main(testOptions?: {\n appPath: string;\n argv: string[];\n reporter: TaskReporter;\n preParseOverrides?: (program: Command) => void;\n}) {\n performance.mark(PerfMarkerCliEntry);\n\n const argv = testOptions?.argv || process.argv;\n const appPath = testOptions?.appPath || process.cwd();\n const reporter = testOptions?.reporter || new TaskReporter();\n const config = await readConfig(appPath);\n\n const program = new Command();\n const plainTextMode = argv.includes('--no-color') || argv.includes('-n');\n const version = getVersion(import.meta.url);\n const useDebugLogging = argv.includes('--debug') || argv.includes('-d');\n const verb = argv[2];\n const useVerboseLogging = argv.includes('--verbose') || argv.includes('-v') || verb === 'bundle';\n\n program.name('cloudpack').version(version).usage('<command> [options]');\n\n reporter.setOptions({\n productName: 'Cloudpack',\n version,\n plainTextMode,\n description: () => `Running \"${bold(argv.slice(2).join(' '))}\"`,\n helpMessage: config.helpMessage,\n ...defaultLoggingConfig,\n ...(useVerboseLogging && verboseLoggingConfig),\n ...(useDebugLogging && debugLoggingConfig),\n });\n\n await initTelemetry(\n {\n useDebugLogging,\n useVerboseLogging,\n telemetryConfig: config.telemetry,\n },\n reporter,\n );\n\n const definition = (await readJson(path.join(appPath, 'package.json'))) as PackageJson;\n\n setSharedTelemetryAttributes({\n verb,\n arguments: argv.slice(3).join(' '),\n environment: process.env.CI || process.env.TF_BUILD ? 'ci' : 'local',\n appName: definition.name || '<unknown>',\n });\n\n // Ensure the glob works in tests\n const commandsGlob = `commands/*/index${path.extname(currentFilePath)}`;\n const commands = glob.sync(commandsGlob, { cwd: currentPath });\n if (!commands.length) {\n // There was an issue with the glob above not working in tests, so make sure that doesn't happen again\n throw new Error(`No commands found under \"${currentPath}\".`);\n }\n\n for (const commandPath of commands) {\n const commandFunction = (await import(pathToFileURL(path.join(currentPath, commandPath)).toString())) as {\n init: CommandFunction;\n };\n\n commandFunction.init(program, { reporter, appPath, config });\n }\n\n program.option('-v, --verbose', 'Show additional details about the running tasks. (default: false)');\n program.option('-d, --debug', 'Show debug information (superset of --verbose). (default: false)');\n program.option('-n, --no-color', 'Disable colors in the output. (default: false)');\n\n testOptions?.preParseOverrides?.(program);\n\n await program.parseAsync(argv);\n\n if (program.args.length === 0) {\n program.help();\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { getVersion } from '@ms-cloudpack/package-utilities';\nimport { TaskReporter } from '@ms-cloudpack/task-reporter';\nimport { Command } from 'commander';\nimport glob from 'glob';\nimport path from 'path';\nimport { fileURLToPath, pathToFileURL } from 'url';\nimport { setSharedTelemetryAttributes } from './initTelemetry.js';\nimport { PerfMarkerCliEntry } from './performance/markers.js';\nimport { readConfig } from '@ms-cloudpack/config';\nimport type { CommandFunction } from './types/CommandFunction.js';\nimport { readJson } from '@ms-cloudpack/json-utilities';\nimport type { PackageJson } from '@ms-cloudpack/bundler-types';\n\nconst currentFilePath = fileURLToPath(import.meta.url);\nconst currentPath = path.dirname(currentFilePath);\n\n/**\n * Entry point for the cloudpack CLI.\n * Resolves all commands defined within the \"./commands\" folder.\n */\nexport async function main(testOptions?: {\n appPath: string;\n argv: string[];\n reporter: TaskReporter;\n preParseOverrides?: (program: Command) => void;\n}) {\n performance.mark(PerfMarkerCliEntry);\n\n const argv = testOptions?.argv || process.argv;\n const appPath = testOptions?.appPath || process.cwd();\n const reporter = testOptions?.reporter || new TaskReporter();\n const config = await readConfig(appPath);\n\n const program = new Command();\n const version = getVersion(import.meta.url);\n const verb = argv[2];\n\n program.name('cloudpack').version(version).usage('<command> [options]');\n\n const definition = (await readJson(path.join(appPath, 'package.json'))) as PackageJson;\n\n setSharedTelemetryAttributes({\n verb,\n arguments: argv.slice(3).join(' '),\n environment: process.env.CI || process.env.TF_BUILD ? 'ci' : 'local',\n appName: definition?.name || '<unknown>',\n });\n\n // Ensure the glob works in tests\n const commandsGlob = `commands/*/index${path.extname(currentFilePath)}`;\n const commands = glob.sync(commandsGlob, { cwd: currentPath });\n if (!commands.length) {\n // There was an issue with the glob above not working in tests, so make sure that doesn't happen again\n throw new Error(`No commands found under \"${currentPath}\".`);\n }\n\n for (const commandPath of commands) {\n const commandFunction = (await import(pathToFileURL(path.join(currentPath, commandPath)).toString())) as {\n init: CommandFunction;\n };\n\n commandFunction.init(program, { reporter, appPath, config });\n }\n\n program.option('-v, --verbose', 'Show additional details about the running tasks. (default: false)');\n program.option('-d, --debug', 'Show debug information (superset of --verbose). (default: false)');\n program.option('-n, --no-color', 'Disable colors in the output. (default: false)');\n\n testOptions?.preParseOverrides?.(program);\n\n await program.parseAsync(argv);\n\n if (program.args.length === 0) {\n program.help();\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/cli",
3
- "version": "0.40.6",
3
+ "version": "0.41.0",
4
4
  "description": "The Cloudpack command line interface - a tool for managing fast inner and outer looping in web apps.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -11,18 +11,19 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "@lage-run/target-graph": "^0.8.6",
14
- "@ms-cloudpack/api-server": "^0.11.0",
15
- "@ms-cloudpack/bundler": "^0.14.3",
16
- "@ms-cloudpack/config": "^0.9.1",
17
- "@ms-cloudpack/create-express-app": "^1.3.8",
14
+ "@ms-cloudpack/api-server": "^0.12.0",
15
+ "@ms-cloudpack/bundler": "^0.14.4",
16
+ "@ms-cloudpack/config": "^0.10.0",
17
+ "@ms-cloudpack/create-express-app": "^1.3.9",
18
18
  "@ms-cloudpack/json-utilities": "^0.0.7",
19
- "@ms-cloudpack/overlay": "^0.14.0",
20
- "@ms-cloudpack/package-utilities": "^5.0.2",
19
+ "@ms-cloudpack/overlay": "^0.14.1",
20
+ "@ms-cloudpack/package-utilities": "^5.1.0",
21
21
  "@ms-cloudpack/path-string-parsing": "^1.0.3",
22
- "@ms-cloudpack/path-utilities": "^2.3.1",
23
- "@ms-cloudpack/task-reporter": "^0.6.0",
22
+ "@ms-cloudpack/path-utilities": "^2.3.2",
23
+ "@ms-cloudpack/task-reporter": "^0.7.0",
24
24
  "@ms-cloudpack/telemetry": "^0.3.6",
25
25
  "commander": "^11.0.0",
26
+ "cross-spawn": "^7.0.3",
26
27
  "es-module-lexer": "^1.0.3",
27
28
  "fast-glob": "^3.2.12",
28
29
  "filenamify": "^6.0.0",
@@ -32,6 +33,7 @@
32
33
  "jsdom": "^22.0.0",
33
34
  "object-hash": "^3.0.0",
34
35
  "open": "^9.0.0",
36
+ "prompts": "^2.4.2",
35
37
  "semver": "^7.3.7",
36
38
  "uuid": "^9.0.0"
37
39
  },
@@ -40,11 +42,12 @@
40
42
  "@ms-cloudpack/eslint-plugin-internal": "*",
41
43
  "@ms-cloudpack/scripts": "*",
42
44
  "@ms-cloudpack/test-utilities": "*",
45
+ "@types/cross-spawn": "^6.0.2",
43
46
  "@types/glob": "^8.1.0",
44
47
  "@types/jsdom": "^21.1.1",
45
48
  "@types/object-hash": "^3.0.2",
46
- "@types/uuid": "^9.0.1",
47
- "@types/ws": "^8.5.4"
49
+ "@types/prompts": "^2.4.4",
50
+ "@types/uuid": "^9.0.1"
48
51
  },
49
52
  "scripts": {
50
53
  "build:watch": "cloudpack-scripts build-watch",