@ms-cloudpack/cli 0.54.9 → 0.54.11

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 (43) hide show
  1. package/lib/commands/bundle/execute.js.map +1 -1
  2. package/lib/commands/cache/clean.js.map +1 -1
  3. package/lib/commands/info/lockFile/checkResolvedVersions.js.map +1 -1
  4. package/lib/commands/info/lockFile/execute.js.map +1 -1
  5. package/lib/commands/info/lockFile/processYarnLock.js.map +1 -1
  6. package/lib/commands/info/lockFile/readYarnLock.js.map +1 -1
  7. package/lib/commands/info/nonSemverDeps/execute.js.map +1 -1
  8. package/lib/commands/info/nonSemverDeps/getNonSemverDeps.js.map +1 -1
  9. package/lib/commands/init/InitSummaryData.js.map +1 -1
  10. package/lib/commands/init/evaluateImportsForOverrides.js.map +1 -1
  11. package/lib/commands/init/evaluatePath.js.map +1 -1
  12. package/lib/commands/init/formatInitSummary.js.map +1 -1
  13. package/lib/commands/init/init.js.map +1 -1
  14. package/lib/commands/init/optimizeDependencies.js.map +1 -1
  15. package/lib/commands/init/verifyExports.js.map +1 -1
  16. package/lib/commands/start/appServer/createRoutes.js.map +1 -1
  17. package/lib/commands/start/appServer/exitIfPortUnavailable.js.map +1 -1
  18. package/lib/commands/start/appServer/getHtmlResponse.js.map +1 -1
  19. package/lib/commands/start/appServer/inlineScripts/getBrowserCacheRatio.inline.js.map +1 -1
  20. package/lib/commands/start/appServer/inlineScripts/getInlineScripts.js.map +1 -1
  21. package/lib/commands/start/appServer/inlineScripts/getPageLoadTime.inline.js.map +1 -1
  22. package/lib/commands/start/appServer/startAppServer.js.map +1 -1
  23. package/lib/commands/start/createPathToChoiceMap.js.map +1 -1
  24. package/lib/commands/start/execute.js.map +1 -1
  25. package/lib/commands/start/getAppPathFromUser.js.map +1 -1
  26. package/lib/commands/start/getStartingAppPath.js.map +1 -1
  27. package/lib/commands/start/openBrowser.js.map +1 -1
  28. package/lib/commands/start/startBundleServer.js +1 -1
  29. package/lib/commands/start/startBundleServer.js.map +1 -1
  30. package/lib/commands/sync/execute.js.map +1 -1
  31. package/lib/commands/sync/index.js.map +1 -1
  32. package/lib/common/AutoDisposableList.js.map +1 -1
  33. package/lib/common/checkFeatures.js.map +1 -1
  34. package/lib/common/createCommand.js.map +1 -1
  35. package/lib/common/createCommandActionFunction.js.map +1 -1
  36. package/lib/common/createExitFunction.js.map +1 -1
  37. package/lib/common/createInitializeFunction.js.map +1 -1
  38. package/lib/common/mergeFeatures.js.map +1 -1
  39. package/lib/common/runPrerequisites.js.map +1 -1
  40. package/lib/index.js.map +1 -1
  41. package/lib/initTelemetry.js.map +1 -1
  42. package/lib/performance/registerPerformanceObservers.js.map +1 -1
  43. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/bundle/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAGtE,OAAO,EACL,uBAAuB,EACvB,oBAAoB,GAErB,MAAM,+BAA+B,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,OAAO,GAAiC,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;IAClH,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAC9C,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,UAAU,CAAC;QACnD,OAAO,EAAE,GAAG;QACZ,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;KACxD,CAAC,CAAC;IAEH,IAAI,WAAW,GAAG,GAAG,CAAC;IAEtB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAEzF,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CACvB,MAAM,uBAAuB,CAAC;QAC5B,OAAO,EAAE,WAAW;QACpB,MAAM;QACN,QAAQ;QACR,eAAe;QACf,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB,EAAE,eAAe,CAAC;KACtG,CAAC,CACH,CAAC;IAEF,IAAI,WAAW,EAAE;QACf,MAAM,KAAK,GAAG,mBAAmB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACvF,IAAI,KAAK,EAAE;YACT,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,YAAY,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;SAC9D;aAAM;YACL,MAAM,IAAI,CAAC;gBACT,OAAO,EAAE,2BAA2B,WAAW,IAAI;gBACnD,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,OAAO;SACR;KACF;IAED,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,MAAM,GAA2C,SAAS,CAAC;IAE/D,MAAM,GAAG,CACP,MAAM,oBAAoB,CAAC;QACzB,KAAK,EAAE;YACL,IAAI,EAAE,UAAU,EAAE,IAAI,IAAI,WAAW;YACrC,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,OAAO;YACvC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;YAC7C,WAAW;YACX,iBAAiB;YACjB,WAAW,EAAE,IAAI;YACjB,aAAa,EAAE,KAAK;SACrB;QACD,GAAG;KACJ,CAAC,CACH,CAAC,MAAM,CAAC;IACT,MAAM,IAAI,CAAC;QACT,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/C,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { findResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport type { CommandAction } from '../../types/CommandAction.js';\nimport type { BundleOptions } from './types/BundleOptions.js';\nimport {\n createPartialApiContext,\n ensurePackageBundled,\n type EnsurePackageBundledResult,\n} from '@ms-cloudpack/api-server/apis';\nimport path from 'path';\n\nexport const execute: CommandAction<BundleOptions> = async ({ options, reporter, initialize, exit, autoDispose }) => {\n const { cwd, package: packageName } = options;\n const { config, telemetryClient } = await initialize({\n appPath: cwd,\n overrideOptions: { debug: !process.env.JEST_WORKER_ID },\n });\n\n let packagePath = cwd;\n\n const { bundler: bundlerType, outdir = 'dist/browser-esm', disableSourceMaps } = options;\n\n const [ctx] = autoDispose(\n await createPartialApiContext({\n appPath: packagePath,\n config,\n reporter,\n telemetryClient,\n items: ['packages', 'watcher', 'session', 'taskRunner', 'bus', 'packageImportPaths', 'packageHashes'],\n }),\n );\n\n if (packageName) {\n const entry = findResolveMapEntry({ packageName, resolveMap: ctx.session.resolveMap });\n if (entry) {\n packagePath = entry.path;\n console.log(`Package \"${packageName}\" found: ${entry.path}`);\n } else {\n await exit({\n message: `No package found named \"${packageName}\".`,\n exitCode: 1,\n });\n\n return;\n }\n }\n\n const definition = await ctx.packages.get(packagePath);\n let result: EnsurePackageBundledResult | undefined = undefined;\n\n result = (\n await ensurePackageBundled({\n input: {\n name: definition?.name ?? '<unknown>',\n version: definition?.version ?? '0.0.0',\n outputPath: path.resolve(packagePath, outdir),\n bundlerType,\n disableSourceMaps,\n shouldForce: true,\n isIncremental: false,\n },\n ctx,\n })\n ).result;\n await exit({\n exitCode: result?.errors?.length === 0 ? 0 : 1,\n });\n};\n"]}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/commands/bundle/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAGtE,OAAO,EACL,uBAAuB,EACvB,oBAAoB,GAErB,MAAM,+BAA+B,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,OAAO,GAAiC,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;IAClH,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAC9C,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,UAAU,CAAC;QACnD,OAAO,EAAE,GAAG;QACZ,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;KACxD,CAAC,CAAC;IAEH,IAAI,WAAW,GAAG,GAAG,CAAC;IAEtB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAEzF,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CACvB,MAAM,uBAAuB,CAAC;QAC5B,OAAO,EAAE,WAAW;QACpB,MAAM;QACN,QAAQ;QACR,eAAe;QACf,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB,EAAE,eAAe,CAAC;KACtG,CAAC,CACH,CAAC;IAEF,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,mBAAmB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACvF,IAAI,KAAK,EAAE,CAAC;YACV,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,YAAY,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC;gBACT,OAAO,EAAE,2BAA2B,WAAW,IAAI;gBACnD,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,MAAM,GAA2C,SAAS,CAAC;IAE/D,MAAM,GAAG,CACP,MAAM,oBAAoB,CAAC;QACzB,KAAK,EAAE;YACL,IAAI,EAAE,UAAU,EAAE,IAAI,IAAI,WAAW;YACrC,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,OAAO;YACvC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;YAC7C,WAAW;YACX,iBAAiB;YACjB,WAAW,EAAE,IAAI;YACjB,aAAa,EAAE,KAAK;SACrB;QACD,GAAG;KACJ,CAAC,CACH,CAAC,MAAM,CAAC;IACT,MAAM,IAAI,CAAC;QACT,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/C,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { findResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport type { CommandAction } from '../../types/CommandAction.js';\nimport type { BundleOptions } from './types/BundleOptions.js';\nimport {\n createPartialApiContext,\n ensurePackageBundled,\n type EnsurePackageBundledResult,\n} from '@ms-cloudpack/api-server/apis';\nimport path from 'path';\n\nexport const execute: CommandAction<BundleOptions> = async ({ options, reporter, initialize, exit, autoDispose }) => {\n const { cwd, package: packageName } = options;\n const { config, telemetryClient } = await initialize({\n appPath: cwd,\n overrideOptions: { debug: !process.env.JEST_WORKER_ID },\n });\n\n let packagePath = cwd;\n\n const { bundler: bundlerType, outdir = 'dist/browser-esm', disableSourceMaps } = options;\n\n const [ctx] = autoDispose(\n await createPartialApiContext({\n appPath: packagePath,\n config,\n reporter,\n telemetryClient,\n items: ['packages', 'watcher', 'session', 'taskRunner', 'bus', 'packageImportPaths', 'packageHashes'],\n }),\n );\n\n if (packageName) {\n const entry = findResolveMapEntry({ packageName, resolveMap: ctx.session.resolveMap });\n if (entry) {\n packagePath = entry.path;\n console.log(`Package \"${packageName}\" found: ${entry.path}`);\n } else {\n await exit({\n message: `No package found named \"${packageName}\".`,\n exitCode: 1,\n });\n\n return;\n }\n }\n\n const definition = await ctx.packages.get(packagePath);\n let result: EnsurePackageBundledResult | undefined = undefined;\n\n result = (\n await ensurePackageBundled({\n input: {\n name: definition?.name ?? '<unknown>',\n version: definition?.version ?? '0.0.0',\n outputPath: path.resolve(packagePath, outdir),\n bundlerType,\n disableSourceMaps,\n shouldForce: true,\n isIncremental: false,\n },\n ctx,\n })\n ).result;\n await exit({\n exitCode: result?.errors?.length === 0 ? 0 : 1,\n });\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../src/commands/cache/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,UAAU,MAAM,aAAa,CAAC;AAKrC,iCAAiC;AACjC,MAAM,CAAC,MAAM,OAAO,GAAgC,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;IAC1F,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxB,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEnC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,gBAAgB,GAAG,wBAAwB,SAAS,GAAG,CAAC;IAC9D,IAAI,OAAe,CAAC;IACpB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI;QACF,MAAM,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO,GAAG,wBAAwB,gBAAgB,EAAE,CAAC;QACrD,SAAS,GAAG,KAAK,CAAC;KACnB;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,GAAG,mBAAmB,gBAAgB,KAAM,GAAa,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;QAClF,SAAS,GAAG,IAAI,CAAC;KAClB;IAED,MAAM,IAAI,CAAC;QACT,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { getCachePath } from '@ms-cloudpack/api-server';\nimport fsPromises from 'fs/promises';\nimport type { CommandAction } from '../../types/CommandAction.js';\n\ninterface CleanOptions {}\n\n/** Clear the Cloudpack cache. */\nexport const execute: CommandAction<CleanOptions> = async ({ options, initialize, exit }) => {\n const { cwd } = options;\n await initialize({ appPath: cwd });\n\n const cachePath = getCachePath();\n const cacheDescription = `the Cloudpack cache (${cachePath})`;\n let message: string;\n let hasErrors = false;\n\n try {\n await fsPromises.rm(cachePath, { recursive: true, force: true });\n message = `Successfully cleared ${cacheDescription}`;\n hasErrors = false;\n } catch (err) {\n message = `Failed to clear ${cacheDescription}: ${(err as Error).message || err}`;\n hasErrors = true;\n }\n\n await exit({\n exitCode: hasErrors ? 1 : 0,\n message,\n });\n};\n"]}
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../src/commands/cache/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,UAAU,MAAM,aAAa,CAAC;AAKrC,iCAAiC;AACjC,MAAM,CAAC,MAAM,OAAO,GAAgC,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;IAC1F,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxB,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEnC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,gBAAgB,GAAG,wBAAwB,SAAS,GAAG,CAAC;IAC9D,IAAI,OAAe,CAAC;IACpB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO,GAAG,wBAAwB,gBAAgB,EAAE,CAAC;QACrD,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,mBAAmB,gBAAgB,KAAM,GAAa,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;QAClF,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,CAAC;QACT,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { getCachePath } from '@ms-cloudpack/api-server';\nimport fsPromises from 'fs/promises';\nimport type { CommandAction } from '../../types/CommandAction.js';\n\ninterface CleanOptions {}\n\n/** Clear the Cloudpack cache. */\nexport const execute: CommandAction<CleanOptions> = async ({ options, initialize, exit }) => {\n const { cwd } = options;\n await initialize({ appPath: cwd });\n\n const cachePath = getCachePath();\n const cacheDescription = `the Cloudpack cache (${cachePath})`;\n let message: string;\n let hasErrors = false;\n\n try {\n await fsPromises.rm(cachePath, { recursive: true, force: true });\n message = `Successfully cleared ${cacheDescription}`;\n hasErrors = false;\n } catch (err) {\n message = `Failed to clear ${cacheDescription}: ${(err as Error).message || err}`;\n hasErrors = true;\n }\n\n await exit({\n exitCode: hasErrors ? 1 : 0,\n message,\n });\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"checkResolvedVersions.js","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/checkResolvedVersions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmB,MAAM,6BAA6B,CAAC;AAC5E,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,gBAAkC;IACtE,gCAAgC;IAChC,0BAA0B;IAC1B,uEAAuE;IACvE,8DAA8D;IAC9D,4BAA4B;IAC5B,wBAAwB;IACxB,sFAAsF;IACtF,sEAAsE;IACtE,yEAAyE;IAEzE,MAAM,QAAQ,GAAe,EAAE,CAAC;IAEhC,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;QACtE,MAAM,MAAM,GAAe,EAAE,CAAC;QAE9B,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAClF,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAE/F,IAAI,WAAW,CAAC,MAAM,EAAE;YACtB,8FAA8F;YAC9F,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SACxF;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;YACvC,oEAAoE;YACpE,wFAAwF;YACxF,6EAA6E;YAC7E,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;YAC9F,MAAM,CAAC,IAAI,CACT,UAAU,CAAC;gBACT,KAAK;gBACL,IAAI;gBACJ,8EAA8E;gBAC9E,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;aAC5D,CAAC,CACH,CAAC;SACH;QAED,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;SACjD;KACF;IAED,IAAI,QAAQ,CAAC,MAAM,EAAE;QACnB,OAAO,CACL,6DAA6D;YAC7D,2DAA2D;YAC3D,YAAY,CAAC,QAAQ,CAAC;YACtB,IAAI,CACL,CAAC;KACH;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,UAAU,CAAC,MAA4E;IAC9F,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAC3C,OAAO,KAAK,CAAC,GAAG,CACd,CAAC,EAAE,WAAW,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CACxC,WAAW;QACX,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACnD,CAAC;AACJ,CAAC","sourcesContent":["import { bulletedList, type BulletList } from '@ms-cloudpack/task-reporter';\nimport semver from 'semver';\nimport type { ResolvedVersions, ResolvedVersionSpec } from './types/ResolvedVersions.js';\n\n/**\n * Check resolved versions from the lock file for potential issues.\n * @returns A message describing any issues found.\n */\nexport function checkResolvedVersions(resolvedVersions: ResolvedVersions): string {\n // What the lock file tells you:\n // - non-semver specs used\n // - if two specs resolved to the same package (name, version, and URL)\n // - if non-semver specs overlap but one is renamed, it's ok\n // What it doesn't tell you:\n // - installation layout\n // - if multiple versions are present, don't know which is hoisted (or any nohoist);\n // a non-semver version not being hoisted might resolve an overlap\n // - where the weird dep came from (without walking the dependency graph)\n\n const messages: BulletList = [];\n\n for (const { name, version, specs } of Object.values(resolvedVersions)) {\n const issues: BulletList = [];\n\n const semverSpecs = specs.filter((spec) => !!semver.validRange(spec.specVersion));\n const forcedSpecs = semverSpecs.filter((spec) => !semver.satisfies(version, spec.specVersion));\n\n if (forcedSpecs.length) {\n // Cloudpack attempts to handle this, but there may be some places which rely on semver checks\n issues.push('Resolutions violating semver:', getStrings({ specs: forcedSpecs, name }));\n }\n\n if (semverSpecs.length !== specs.length) {\n // Whether or not this will be an issue depends on a lot of details.\n // There are enough permutations of possible issues that it's hard to have distinct logs\n // for all cases, so just go with a general list that includes relevant info.\n issues.push(semverSpecs.length ? 'Mix of semver and non-semver specs:' : 'Non-semver specs:');\n issues.push(\n getStrings({\n specs,\n name,\n // Only include the URL if there are specs with different URLs (reduces noise)\n includeUrl: specs.some((spec) => spec.url !== specs[0].url),\n }),\n );\n }\n\n if (issues.length) {\n messages.push([`${name} (${version})`, issues]);\n }\n }\n\n if (messages.length) {\n return (\n 'Found possible issues with dependencies based on lock file ' +\n '(use \"yarn why\" to figure out where these came from):\\n\\n' +\n bulletedList(messages) +\n '\\n'\n );\n }\n return 'No issues found';\n}\n\nfunction getStrings(params: { specs: ResolvedVersionSpec[]; name: string; includeUrl?: boolean }): string[] {\n const { specs, name, includeUrl } = params;\n return specs.map(\n ({ specVersion, realName = name, url }) =>\n specVersion +\n (realName !== name ? ` (real name: ${realName})` : '') +\n (includeUrl && url ? ` resolved to ${url}` : ''),\n );\n}\n"]}
1
+ {"version":3,"file":"checkResolvedVersions.js","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/checkResolvedVersions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmB,MAAM,6BAA6B,CAAC;AAC5E,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,gBAAkC;IACtE,gCAAgC;IAChC,0BAA0B;IAC1B,uEAAuE;IACvE,8DAA8D;IAC9D,4BAA4B;IAC5B,wBAAwB;IACxB,sFAAsF;IACtF,sEAAsE;IACtE,yEAAyE;IAEzE,MAAM,QAAQ,GAAe,EAAE,CAAC;IAEhC,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvE,MAAM,MAAM,GAAe,EAAE,CAAC;QAE9B,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAClF,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAE/F,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvB,8FAA8F;YAC9F,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzF,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YACxC,oEAAoE;YACpE,wFAAwF;YACxF,6EAA6E;YAC7E,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;YAC9F,MAAM,CAAC,IAAI,CACT,UAAU,CAAC;gBACT,KAAK;gBACL,IAAI;gBACJ,8EAA8E;gBAC9E,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;aAC5D,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CACL,6DAA6D;YAC7D,2DAA2D;YAC3D,YAAY,CAAC,QAAQ,CAAC;YACtB,IAAI,CACL,CAAC;IACJ,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,UAAU,CAAC,MAA4E;IAC9F,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAC3C,OAAO,KAAK,CAAC,GAAG,CACd,CAAC,EAAE,WAAW,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CACxC,WAAW;QACX,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACnD,CAAC;AACJ,CAAC","sourcesContent":["import { bulletedList, type BulletList } from '@ms-cloudpack/task-reporter';\nimport semver from 'semver';\nimport type { ResolvedVersions, ResolvedVersionSpec } from './types/ResolvedVersions.js';\n\n/**\n * Check resolved versions from the lock file for potential issues.\n * @returns A message describing any issues found.\n */\nexport function checkResolvedVersions(resolvedVersions: ResolvedVersions): string {\n // What the lock file tells you:\n // - non-semver specs used\n // - if two specs resolved to the same package (name, version, and URL)\n // - if non-semver specs overlap but one is renamed, it's ok\n // What it doesn't tell you:\n // - installation layout\n // - if multiple versions are present, don't know which is hoisted (or any nohoist);\n // a non-semver version not being hoisted might resolve an overlap\n // - where the weird dep came from (without walking the dependency graph)\n\n const messages: BulletList = [];\n\n for (const { name, version, specs } of Object.values(resolvedVersions)) {\n const issues: BulletList = [];\n\n const semverSpecs = specs.filter((spec) => !!semver.validRange(spec.specVersion));\n const forcedSpecs = semverSpecs.filter((spec) => !semver.satisfies(version, spec.specVersion));\n\n if (forcedSpecs.length) {\n // Cloudpack attempts to handle this, but there may be some places which rely on semver checks\n issues.push('Resolutions violating semver:', getStrings({ specs: forcedSpecs, name }));\n }\n\n if (semverSpecs.length !== specs.length) {\n // Whether or not this will be an issue depends on a lot of details.\n // There are enough permutations of possible issues that it's hard to have distinct logs\n // for all cases, so just go with a general list that includes relevant info.\n issues.push(semverSpecs.length ? 'Mix of semver and non-semver specs:' : 'Non-semver specs:');\n issues.push(\n getStrings({\n specs,\n name,\n // Only include the URL if there are specs with different URLs (reduces noise)\n includeUrl: specs.some((spec) => spec.url !== specs[0].url),\n }),\n );\n }\n\n if (issues.length) {\n messages.push([`${name} (${version})`, issues]);\n }\n }\n\n if (messages.length) {\n return (\n 'Found possible issues with dependencies based on lock file ' +\n '(use \"yarn why\" to figure out where these came from):\\n\\n' +\n bulletedList(messages) +\n '\\n'\n );\n }\n return 'No issues found';\n}\n\nfunction getStrings(params: { specs: ResolvedVersionSpec[]; name: string; includeUrl?: boolean }): string[] {\n const { specs, name, includeUrl } = params;\n return specs.map(\n ({ specVersion, realName = name, url }) =>\n specVersion +\n (realName !== name ? ` (real name: ${realName})` : '') +\n (includeUrl && url ? ` resolved to ${url}` : ''),\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,OAAO,GAAmC,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;IAC7F,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxB,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEnC,IAAI,OAAe,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,IAAI;QACF,iEAAiE;QACjE,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,OAAO,GAAG,UAAU,CAAC;SACtB;aAAM;YACL,MAAM,gBAAgB,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YACrD,OAAO,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;YAClD,OAAO,GAAG,IAAI,CAAC;SAChB;KACF;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,GAAG,qCAAsC,GAAa,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC;KAC9E;IAED,MAAM,IAAI,CAAC;QACT,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import type { CommandAction } from '../../../types/CommandAction.js';\nimport { checkResolvedVersions } from './checkResolvedVersions.js';\nimport { readYarnLock } from './readYarnLock.js';\nimport { processYarnLock } from './processYarnLock.js';\n\ninterface LockFileOptions {}\n\n/** Executor for the \"info lock-file\" verb */\nexport const execute: CommandAction<LockFileOptions> = async ({ options, initialize, exit }) => {\n const { cwd } = options;\n await initialize({ appPath: cwd });\n\n let message: string;\n let success = false;\n\n try {\n // This returns either the lock file contents or an error message\n const lockResult = await readYarnLock(cwd);\n if (typeof lockResult === 'string') {\n message = lockResult;\n } else {\n const resolvedVersions = processYarnLock(lockResult);\n message = checkResolvedVersions(resolvedVersions);\n success = true;\n }\n } catch (err) {\n message = `Error getting info from lockfile: ${(err as Error).stack || err}`;\n }\n\n await exit({\n exitCode: success ? 0 : 1,\n message,\n });\n};\n"]}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,OAAO,GAAmC,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;IAC7F,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxB,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEnC,IAAI,OAAe,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,GAAG,UAAU,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,gBAAgB,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YACrD,OAAO,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;YAClD,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,qCAAsC,GAAa,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC;IAC/E,CAAC;IAED,MAAM,IAAI,CAAC;QACT,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import type { CommandAction } from '../../../types/CommandAction.js';\nimport { checkResolvedVersions } from './checkResolvedVersions.js';\nimport { readYarnLock } from './readYarnLock.js';\nimport { processYarnLock } from './processYarnLock.js';\n\ninterface LockFileOptions {}\n\n/** Executor for the \"info lock-file\" verb */\nexport const execute: CommandAction<LockFileOptions> = async ({ options, initialize, exit }) => {\n const { cwd } = options;\n await initialize({ appPath: cwd });\n\n let message: string;\n let success = false;\n\n try {\n // This returns either the lock file contents or an error message\n const lockResult = await readYarnLock(cwd);\n if (typeof lockResult === 'string') {\n message = lockResult;\n } else {\n const resolvedVersions = processYarnLock(lockResult);\n message = checkResolvedVersions(resolvedVersions);\n success = true;\n }\n } catch (err) {\n message = `Error getting info from lockfile: ${(err as Error).stack || err}`;\n }\n\n await exit({\n exitCode: success ? 0 : 1,\n message,\n });\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"processYarnLock.js","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/processYarnLock.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAwB;IACtD,MAAM,iBAAiB,GAAqB,EAAE,CAAC;IAE/C,sCAAsC;IACtC,mCAAmC;IACnC,wBAAwB;IACxB,uHAAuH;IACvH,OAAO;IACP,0DAA0D;IAC1D,qBAAqB;IACrB,yBAAyB;IACzB,8GAA8G;IAC9G,OAAO;IACP,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAwB,EAAE,WAAW,EAAE,CAAC;QACvD,MAAM,aAAa,GAAG,GAAG,IAAI,IAAI,OAAO,EAAW,CAAC;QACpD,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAClE,iBAAiB,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvD,wHAAwH;QACxH,iGAAiG;QACjG,gIAAgI;QAChI,0IAA0I;QAC1I,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7D,SAAS,CAAC,GAAG,GAAG,QAAQ,CAAC;YACzB,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,YAAY,IAAI,OAAO,MAAM,EAAE;gBAC7D,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;aACxF;SACF;QAAC,MAAM;YACN,wDAAwD;SACzD;KACF;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC","sourcesContent":["import type { LockFileObject } from '@yarnpkg/lockfile';\nimport type { ResolvedVersionSpec, ResolvedVersions } from './types/ResolvedVersions.js';\n\n/**\n * Process yarn.lock file contents into a map of resolved package name+version.\n */\nexport function processYarnLock(lockFile: LockFileObject): ResolvedVersions {\n const installedVersions: ResolvedVersions = {};\n\n // Examples of LockFileObject entries:\n // 'prettier-2@npm:prettier@2': {\n // version: '2.8.8',\n // resolved: 'https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da',\n // },\n // 'weird-stuff@file:weird-stuff': { version: '1.0.0' },\n // 'zod@^3.21.4': {\n // version: '3.22.4',\n // resolved: 'https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff',\n // },\n for (const [spec, { version, resolved }] of Object.entries(lockFile)) {\n const atIndex = spec.indexOf('@', 1);\n const name = spec.slice(0, atIndex);\n const specVersion = spec.slice(atIndex + 1);\n const specEntry: ResolvedVersionSpec = { specVersion };\n const installedSpec = `${name}@${version}` as const;\n installedVersions[installedSpec] ??= { name, version, specs: [] };\n installedVersions[installedSpec].specs.push(specEntry);\n\n // https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf\n // https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66\n // https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644\n // https://example.pkgs.visualstudio.com/_packaging/Example/npm/registry/@foo/bar/-/bar-1.9.2.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644\n try {\n const segments = new URL(resolved || '').pathname.split('/');\n specEntry.url = resolved;\n const [scope, unscopedName, dash, file] = segments.slice(-4);\n if (dash === '-' && file === `${unscopedName}-${version}.tgz`) {\n specEntry.realName = scope.startsWith('@') ? `${scope}/${unscopedName}` : unscopedName;\n }\n } catch {\n // ignore URL parsing error (not all entries have a URL)\n }\n }\n\n return installedVersions;\n}\n"]}
1
+ {"version":3,"file":"processYarnLock.js","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/processYarnLock.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAwB;IACtD,MAAM,iBAAiB,GAAqB,EAAE,CAAC;IAE/C,sCAAsC;IACtC,mCAAmC;IACnC,wBAAwB;IACxB,uHAAuH;IACvH,OAAO;IACP,0DAA0D;IAC1D,qBAAqB;IACrB,yBAAyB;IACzB,8GAA8G;IAC9G,OAAO;IACP,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAwB,EAAE,WAAW,EAAE,CAAC;QACvD,MAAM,aAAa,GAAG,GAAG,IAAI,IAAI,OAAO,EAAW,CAAC;QACpD,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAClE,iBAAiB,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvD,wHAAwH;QACxH,iGAAiG;QACjG,gIAAgI;QAChI,0IAA0I;QAC1I,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7D,SAAS,CAAC,GAAG,GAAG,QAAQ,CAAC;YACzB,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,YAAY,IAAI,OAAO,MAAM,EAAE,CAAC;gBAC9D,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;YACzF,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;QAC1D,CAAC;IACH,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC","sourcesContent":["import type { LockFileObject } from '@yarnpkg/lockfile';\nimport type { ResolvedVersionSpec, ResolvedVersions } from './types/ResolvedVersions.js';\n\n/**\n * Process yarn.lock file contents into a map of resolved package name+version.\n */\nexport function processYarnLock(lockFile: LockFileObject): ResolvedVersions {\n const installedVersions: ResolvedVersions = {};\n\n // Examples of LockFileObject entries:\n // 'prettier-2@npm:prettier@2': {\n // version: '2.8.8',\n // resolved: 'https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da',\n // },\n // 'weird-stuff@file:weird-stuff': { version: '1.0.0' },\n // 'zod@^3.21.4': {\n // version: '3.22.4',\n // resolved: 'https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff',\n // },\n for (const [spec, { version, resolved }] of Object.entries(lockFile)) {\n const atIndex = spec.indexOf('@', 1);\n const name = spec.slice(0, atIndex);\n const specVersion = spec.slice(atIndex + 1);\n const specEntry: ResolvedVersionSpec = { specVersion };\n const installedSpec = `${name}@${version}` as const;\n installedVersions[installedSpec] ??= { name, version, specs: [] };\n installedVersions[installedSpec].specs.push(specEntry);\n\n // https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf\n // https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66\n // https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644\n // https://example.pkgs.visualstudio.com/_packaging/Example/npm/registry/@foo/bar/-/bar-1.9.2.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644\n try {\n const segments = new URL(resolved || '').pathname.split('/');\n specEntry.url = resolved;\n const [scope, unscopedName, dash, file] = segments.slice(-4);\n if (dash === '-' && file === `${unscopedName}-${version}.tgz`) {\n specEntry.realName = scope.startsWith('@') ? `${scope}/${unscopedName}` : unscopedName;\n }\n } catch {\n // ignore URL parsing error (not all entries have a URL)\n }\n }\n\n return installedVersions;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"readYarnLock.js","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/readYarnLock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,qFAAqF;AACrF,OAAO,QAAQ,EAAE,EAAuB,MAAM,mBAAmB,CAAC;AAElE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAEzC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;QAChC,OAAO,GAAG,YAAY,kDAAkD,CAAC;KAC1E;IAED,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACrE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;QAChD,OAAO,qCAAqC,CAAC;KAC9C;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;QAC/B,OAAO,QAAQ,CAAC,MAAM,CAAC;KACxB;IAED,OAAO,2BAA2B,QAAQ,CAAC,IAAI,GAAG,CAAC;AACrD,CAAC","sourcesContent":["import fs from 'fs';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { findProjectRoot } from 'workspace-tools';\n// This module doesn't actually provide named exports for functions (types are wrong)\nimport yarnLock, { type LockFileObject } from '@yarnpkg/lockfile';\n\n/**\n * Read and parse the yarn v1 lock file at the project root (usually git root), if it exists.\n * @param cwd Find the project root from here.\n * @returns Parsed lock file contents if repo uses yarn v1 and parsing was successful,\n * or an error message otherwise.\n */\nexport async function readYarnLock(cwd: string): Promise<string | LockFileObject> {\n const projectRoot = findProjectRoot(cwd);\n\n const yarnLockPath = path.join(projectRoot, 'yarn.lock');\n if (!fs.existsSync(yarnLockPath)) {\n return `${yarnLockPath} not found (this command only works with Yarn 1)`;\n }\n\n const lockContents = await fsPromises.readFile(yarnLockPath, 'utf8');\n if (!lockContents.includes('# yarn lockfile v1')) {\n return 'This command only works with Yarn 1';\n }\n\n const lockfile = yarnLock.parse(lockContents);\n if (lockfile.type === 'success') {\n return lockfile.object;\n }\n\n return `Error parsing lockfile (${lockfile.type})`;\n}\n"]}
1
+ {"version":3,"file":"readYarnLock.js","sourceRoot":"","sources":["../../../../src/commands/info/lockFile/readYarnLock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,qFAAqF;AACrF,OAAO,QAAQ,EAAE,EAAuB,MAAM,mBAAmB,CAAC;AAElE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAEzC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,YAAY,kDAAkD,CAAC;IAC3E,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACrE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACjD,OAAO,qCAAqC,CAAC;IAC/C,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,OAAO,2BAA2B,QAAQ,CAAC,IAAI,GAAG,CAAC;AACrD,CAAC","sourcesContent":["import fs from 'fs';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { findProjectRoot } from 'workspace-tools';\n// This module doesn't actually provide named exports for functions (types are wrong)\nimport yarnLock, { type LockFileObject } from '@yarnpkg/lockfile';\n\n/**\n * Read and parse the yarn v1 lock file at the project root (usually git root), if it exists.\n * @param cwd Find the project root from here.\n * @returns Parsed lock file contents if repo uses yarn v1 and parsing was successful,\n * or an error message otherwise.\n */\nexport async function readYarnLock(cwd: string): Promise<string | LockFileObject> {\n const projectRoot = findProjectRoot(cwd);\n\n const yarnLockPath = path.join(projectRoot, 'yarn.lock');\n if (!fs.existsSync(yarnLockPath)) {\n return `${yarnLockPath} not found (this command only works with Yarn 1)`;\n }\n\n const lockContents = await fsPromises.readFile(yarnLockPath, 'utf8');\n if (!lockContents.includes('# yarn lockfile v1')) {\n return 'This command only works with Yarn 1';\n }\n\n const lockfile = yarnLock.parse(lockContents);\n if (lockfile.type === 'success') {\n return lockfile.object;\n }\n\n return `Error parsing lockfile (${lockfile.type})`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../src/commands/info/nonSemverDeps/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAOzD,mDAAmD;AACnD,MAAM,CAAC,MAAM,OAAO,GAAwC,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;IAClG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxB,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEnC,IAAI,OAAe,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,IAAI;QACF,OAAO,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,GAAG,IAAI,CAAC;KAChB;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,GAAG,4CAA6C,GAAa,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC;KACrF;IAED,MAAM,IAAI,CAAC;QACT,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import type { CommandAction } from '../../../types/CommandAction.js';\nimport { getNonSemverDeps } from './getNonSemverDeps.js';\n\nexport interface NonSemverDepsOptions {\n /** Only get production deps */\n prod?: boolean;\n}\n\n/** Executor for the \"info non-semver-deps\" verb */\nexport const execute: CommandAction<NonSemverDepsOptions> = async ({ options, initialize, exit }) => {\n const { cwd } = options;\n await initialize({ appPath: cwd });\n\n let message: string;\n let success = false;\n\n try {\n message = await getNonSemverDeps(options);\n success = true;\n } catch (err) {\n message = `Error attempting to get non-semver deps: ${(err as Error).stack || err}`;\n }\n\n await exit({\n exitCode: success ? 0 : 1,\n message,\n });\n};\n"]}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../src/commands/info/nonSemverDeps/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAOzD,mDAAmD;AACnD,MAAM,CAAC,MAAM,OAAO,GAAwC,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;IAClG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxB,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEnC,IAAI,OAAe,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,4CAA6C,GAAa,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC;IACtF,CAAC;IAED,MAAM,IAAI,CAAC;QACT,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import type { CommandAction } from '../../../types/CommandAction.js';\nimport { getNonSemverDeps } from './getNonSemverDeps.js';\n\nexport interface NonSemverDepsOptions {\n /** Only get production deps */\n prod?: boolean;\n}\n\n/** Executor for the \"info non-semver-deps\" verb */\nexport const execute: CommandAction<NonSemverDepsOptions> = async ({ options, initialize, exit }) => {\n const { cwd } = options;\n await initialize({ appPath: cwd });\n\n let message: string;\n let success = false;\n\n try {\n message = await getNonSemverDeps(options);\n success = true;\n } catch (err) {\n message = `Error attempting to get non-semver deps: ${(err as Error).stack || err}`;\n }\n\n await exit({\n exitCode: success ? 0 : 1,\n message,\n });\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"getNonSemverDeps.js","sourceRoot":"","sources":["../../../../src/commands/info/nonSemverDeps/getNonSemverDeps.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageJson } from '@ms-cloudpack/config-types';\nimport { readJson } from '@ms-cloudpack/json-utilities';\nimport { table } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport semver from 'semver';\nimport { findProjectRoot, getPackageInfos, type PackageInfo } from 'workspace-tools';\n\ninterface NonSemverDep {\n parent: string | undefined;\n depName: string;\n type: string;\n version: string | undefined;\n}\n\n// resolutions might apply to prod or dev dependencies, so include it just in case\nconst prodDeps = ['dependencies', 'peerDependencies', 'resolutions'] as const;\nconst allDeps = [...prodDeps, 'devDependencies'] as const;\n\nconst depTypeNames = {\n dependencies: 'prod',\n peerDependencies: 'peer',\n devDependencies: 'dev',\n resolutions: 'resolution',\n};\n\n/**\n * Check the local packages in the monorepo for non-semver deps.\n * Returns either a table of those deps or a message saying there are none.\n */\nexport async function getNonSemverDeps(params: {\n cwd: string;\n /** Only include production dependencies */\n prod?: boolean;\n /** Use this directoy as the root instead of calling `findProjectRoot` (for testing) */\n overrideProjectRoot?: string;\n}): Promise<string> {\n const { cwd, prod, overrideProjectRoot } = params;\n\n const projectRoot = overrideProjectRoot || findProjectRoot(cwd);\n const packages = getPackageInfos(projectRoot);\n\n // add the root package.json to the package infos\n const rootPkgJsonPath = path.join(projectRoot, 'package.json');\n const rootPkg = await readJson<PackageJson>(rootPkgJsonPath);\n if (!rootPkg) {\n throw new Error(`${rootPkgJsonPath} does not exist`);\n }\n if (!rootPkg.name || !rootPkg.version) {\n throw new Error(`${rootPkgJsonPath} is missing a name and/or version`);\n }\n packages[rootPkg.name] = rootPkg as PackageInfo;\n\n const depTypes = prod ? prodDeps : allDeps;\n\n const nonSemverDeps = Object.values(packages)\n .map((pkg: PackageJson) =>\n depTypes\n // get dependencies, peerDependencies, etc from the package\n .map((dt) => Object.entries(pkg[dt] || {}).map(([name, version]) => ({ name, version, type: dt })))\n .flat(1)\n // get non-semver versions\n .filter(({ version }) => !semver.validRange(version))\n .map(\n ({ name, version, type }): NonSemverDep => ({\n parent: pkg.name,\n depName: name,\n type: depTypeNames[type],\n version,\n }),\n ),\n )\n .flat();\n\n if (!nonSemverDeps.length) {\n return 'No non-semver dependencies found';\n }\n\n return (\n table(nonSemverDeps, {\n parent: 'Parent package',\n depName: 'Dependency',\n type: 'Dep type',\n version: 'Version',\n }) + '\\n'\n );\n}\n"]}
1
+ {"version":3,"file":"getNonSemverDeps.js","sourceRoot":"","sources":["../../../../src/commands/info/nonSemverDeps/getNonSemverDeps.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageJson } from '@ms-cloudpack/config-types';\nimport { readJson } from '@ms-cloudpack/json-utilities';\nimport { table } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport semver from 'semver';\nimport { findProjectRoot, getPackageInfos, type PackageInfo } from 'workspace-tools';\n\ninterface NonSemverDep {\n parent: string | undefined;\n depName: string;\n type: string;\n version: string | undefined;\n}\n\n// resolutions might apply to prod or dev dependencies, so include it just in case\nconst prodDeps = ['dependencies', 'peerDependencies', 'resolutions'] as const;\nconst allDeps = [...prodDeps, 'devDependencies'] as const;\n\nconst depTypeNames = {\n dependencies: 'prod',\n peerDependencies: 'peer',\n devDependencies: 'dev',\n resolutions: 'resolution',\n};\n\n/**\n * Check the local packages in the monorepo for non-semver deps.\n * Returns either a table of those deps or a message saying there are none.\n */\nexport async function getNonSemverDeps(params: {\n cwd: string;\n /** Only include production dependencies */\n prod?: boolean;\n /** Use this directoy as the root instead of calling `findProjectRoot` (for testing) */\n overrideProjectRoot?: string;\n}): Promise<string> {\n const { cwd, prod, overrideProjectRoot } = params;\n\n const projectRoot = overrideProjectRoot || findProjectRoot(cwd);\n const packages = getPackageInfos(projectRoot);\n\n // add the root package.json to the package infos\n const rootPkgJsonPath = path.join(projectRoot, 'package.json');\n const rootPkg = await readJson<PackageJson>(rootPkgJsonPath);\n if (!rootPkg) {\n throw new Error(`${rootPkgJsonPath} does not exist`);\n }\n if (!rootPkg.name || !rootPkg.version) {\n throw new Error(`${rootPkgJsonPath} is missing a name and/or version`);\n }\n packages[rootPkg.name] = rootPkg as PackageInfo;\n\n const depTypes = prod ? prodDeps : allDeps;\n\n const nonSemverDeps = Object.values(packages)\n .map((pkg: PackageJson) =>\n depTypes\n // get dependencies, peerDependencies, etc from the package\n .map((dt) => Object.entries(pkg[dt] || {}).map(([name, version]) => ({ name, version, type: dt })))\n .flat(1)\n // get non-semver versions\n .filter(({ version }) => !semver.validRange(version))\n .map(\n ({ name, version, type }): NonSemverDep => ({\n parent: pkg.name,\n depName: name,\n type: depTypeNames[type],\n version,\n }),\n ),\n )\n .flat();\n\n if (!nonSemverDeps.length) {\n return 'No non-semver dependencies found';\n }\n\n return (\n table(nonSemverDeps, {\n parent: 'Parent package',\n depName: 'Dependency',\n type: 'Dep type',\n version: 'Version',\n }) + '\\n'\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"InitSummaryData.js","sourceRoot":"","sources":["../../../src/commands/init/InitSummaryData.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InitSummary } from './types/InitSummary.js';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport type { InitPackageResultWarnings } from './types/InitPackageResultWarnings.js';\nimport type { InitPackageResultErrors } from './types/InitPackageResultErrors.js';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\n\n/**\n * Creates a summary tracking helper for the `init` verb to use to record statistics about results and needed\n * changes. The `record*` methods of the returned object will be used within init to add the stats, and the\n * `get` method will return the final tally. The resulting `InitSummary` object can be used in the `formatInitSummary`\n * helper to convert it to a string for the user.\n *\n * The `getMissingExportsMessage` method can be used to check that the imports/exports of packages match.\n */\nexport class InitSummaryData {\n private _packageResults: Record<string, InitPackageResult>;\n private _generatedUpdates: Record<string, GeneratedPackageChanges>;\n private _startTime: number;\n\n constructor() {\n this._packageResults = {};\n this._generatedUpdates = {};\n this._startTime = Date.now();\n }\n\n /**\n * Saves a package result.\n * @param packageResult - The package result to save.\n * @returns void.\n */\n public recordResult(options: { packageResult: InitPackageResult; append?: boolean }) {\n const { packageResult, append } = options;\n if (append && this._packageResults[packageResult.path]) {\n // Merge previous errors and warnings if any.\n if (packageResult.errors?.length) {\n this._packageResults[packageResult.path].errors ??= [];\n this._packageResults[packageResult.path].errors?.push(...packageResult.errors);\n }\n if (packageResult.warnings?.length) {\n this._packageResults[packageResult.path].warnings ??= [];\n this._packageResults[packageResult.path].warnings?.push(...packageResult.warnings);\n }\n } else {\n this._packageResults[packageResult.path] = packageResult;\n }\n }\n\n /**\n * Returns the package results.\n * @returns The package results.\n */\n public getResults(): Record<string, InitPackageResult> {\n return this._packageResults;\n }\n\n /**\n * Saves a generated file update.\n * @param allChanges - The generated file update to save.\n * @returns void.\n */\n public recordGeneratedChanges(allChanges: GeneratedPackageChanges[]) {\n for (const update of allChanges) {\n const { name, version, path, changes } = update;\n const updatesForPackage = (this._generatedUpdates[path] ??= { name, version, path, changes: [] });\n\n updatesForPackage.changes.push(...changes);\n }\n }\n\n /**\n * Returns the summary of the results.\n * @returns The summary of the results.\n */\n public summarize(): InitSummary {\n const duration = Date.now() - this._startTime;\n let totalSuccess = 0;\n let totalErrors = 0;\n let totalWarnings = 0;\n let totalChanges = 0;\n const packagesWithErrors: InitPackageResultErrors[] = [];\n const packagesWithWarnings: InitPackageResultWarnings[] = [];\n\n for (const packageResult of Object.values(this._packageResults)) {\n if (packageResult.errors?.length) {\n packagesWithErrors.push(packageResult as InitPackageResultErrors);\n totalErrors += packageResult.errors.length;\n } else {\n totalSuccess++;\n }\n\n if (packageResult.warnings?.length) {\n packagesWithWarnings.push(packageResult as InitPackageResultWarnings);\n totalWarnings += packageResult.warnings.length;\n }\n }\n\n const sortedUpdates = Object.values(this._generatedUpdates).sort((a, b) => a.path.localeCompare(b.path));\n\n for (const updates of sortedUpdates) {\n totalChanges += updates.changes.length;\n updates.changes = updates.changes.sort((a, b) => a.change.localeCompare(b.change));\n }\n\n return {\n duration,\n totalPackages: Object.keys(this._packageResults).length,\n totalSuccess,\n totalErrors,\n totalWarnings,\n totalChanges,\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates: sortedUpdates,\n };\n }\n}\n"]}
1
+ {"version":3,"file":"InitSummaryData.js","sourceRoot":"","sources":["../../../src/commands/init/InitSummaryData.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,MAAM,OAAO,eAAe;IAK1B;QACE,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,OAA+D;QACjF,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC1C,IAAI,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,6CAA6C;YAC7C,IAAI,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC;gBACvD,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACjF,CAAC;YACD,IAAI,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACnC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC;gBACzD,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,UAAU;QACf,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACI,sBAAsB,CAAC,UAAqC;QACjE,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;YAChD,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAElG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,SAAS;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC9C,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,kBAAkB,GAA8B,EAAE,CAAC;QACzD,MAAM,oBAAoB,GAAgC,EAAE,CAAC;QAE7D,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YAChE,IAAI,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBACjC,kBAAkB,CAAC,IAAI,CAAC,aAAwC,CAAC,CAAC;gBAClE,WAAW,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,YAAY,EAAE,CAAC;YACjB,CAAC;YAED,IAAI,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACnC,oBAAoB,CAAC,IAAI,CAAC,aAA0C,CAAC,CAAC;gBACtE,aAAa,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjD,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzG,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YACvC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACrF,CAAC;QAED,OAAO;YACL,QAAQ;YACR,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM;YACvD,YAAY;YACZ,WAAW;YACX,aAAa;YACb,YAAY;YACZ,kBAAkB;YAClB,oBAAoB;YACpB,oBAAoB,EAAE,aAAa;SACpC,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type { InitSummary } from './types/InitSummary.js';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\nimport type { InitPackageResultWarnings } from './types/InitPackageResultWarnings.js';\nimport type { InitPackageResultErrors } from './types/InitPackageResultErrors.js';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\n\n/**\n * Creates a summary tracking helper for the `init` verb to use to record statistics about results and needed\n * changes. The `record*` methods of the returned object will be used within init to add the stats, and the\n * `get` method will return the final tally. The resulting `InitSummary` object can be used in the `formatInitSummary`\n * helper to convert it to a string for the user.\n *\n * The `getMissingExportsMessage` method can be used to check that the imports/exports of packages match.\n */\nexport class InitSummaryData {\n private _packageResults: Record<string, InitPackageResult>;\n private _generatedUpdates: Record<string, GeneratedPackageChanges>;\n private _startTime: number;\n\n constructor() {\n this._packageResults = {};\n this._generatedUpdates = {};\n this._startTime = Date.now();\n }\n\n /**\n * Saves a package result.\n * @param packageResult - The package result to save.\n * @returns void.\n */\n public recordResult(options: { packageResult: InitPackageResult; append?: boolean }) {\n const { packageResult, append } = options;\n if (append && this._packageResults[packageResult.path]) {\n // Merge previous errors and warnings if any.\n if (packageResult.errors?.length) {\n this._packageResults[packageResult.path].errors ??= [];\n this._packageResults[packageResult.path].errors?.push(...packageResult.errors);\n }\n if (packageResult.warnings?.length) {\n this._packageResults[packageResult.path].warnings ??= [];\n this._packageResults[packageResult.path].warnings?.push(...packageResult.warnings);\n }\n } else {\n this._packageResults[packageResult.path] = packageResult;\n }\n }\n\n /**\n * Returns the package results.\n * @returns The package results.\n */\n public getResults(): Record<string, InitPackageResult> {\n return this._packageResults;\n }\n\n /**\n * Saves a generated file update.\n * @param allChanges - The generated file update to save.\n * @returns void.\n */\n public recordGeneratedChanges(allChanges: GeneratedPackageChanges[]) {\n for (const update of allChanges) {\n const { name, version, path, changes } = update;\n const updatesForPackage = (this._generatedUpdates[path] ??= { name, version, path, changes: [] });\n\n updatesForPackage.changes.push(...changes);\n }\n }\n\n /**\n * Returns the summary of the results.\n * @returns The summary of the results.\n */\n public summarize(): InitSummary {\n const duration = Date.now() - this._startTime;\n let totalSuccess = 0;\n let totalErrors = 0;\n let totalWarnings = 0;\n let totalChanges = 0;\n const packagesWithErrors: InitPackageResultErrors[] = [];\n const packagesWithWarnings: InitPackageResultWarnings[] = [];\n\n for (const packageResult of Object.values(this._packageResults)) {\n if (packageResult.errors?.length) {\n packagesWithErrors.push(packageResult as InitPackageResultErrors);\n totalErrors += packageResult.errors.length;\n } else {\n totalSuccess++;\n }\n\n if (packageResult.warnings?.length) {\n packagesWithWarnings.push(packageResult as InitPackageResultWarnings);\n totalWarnings += packageResult.warnings.length;\n }\n }\n\n const sortedUpdates = Object.values(this._generatedUpdates).sort((a, b) => a.path.localeCompare(b.path));\n\n for (const updates of sortedUpdates) {\n totalChanges += updates.changes.length;\n updates.changes = updates.changes.sort((a, b) => a.change.localeCompare(b.change));\n }\n\n return {\n duration,\n totalPackages: Object.keys(this._packageResults).length,\n totalSuccess,\n totalErrors,\n totalWarnings,\n totalChanges,\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates: sortedUpdates,\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"evaluateImportsForOverrides.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BundleInfo } from '@ms-cloudpack/api-server';\nimport type { PackageDefinitionsCache, PackageImporterContext } from '@ms-cloudpack/bundler-types';\nimport type { CloudpackConfig, PackageJson, PackageSettings } from '@ms-cloudpack/config-types';\nimport { getPackageSettings } from '@ms-cloudpack/config';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport {\n addExportsMapEntry,\n findResolveMapEntry,\n flattenExportsMap,\n getDependencies,\n getExportsMap,\n} from '@ms-cloudpack/package-utilities';\nimport { bulletedList, cyan } from '@ms-cloudpack/task-reporter';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\n\n/**\n * Evaluate the imports depended on by a package to determine if missing exports map paths need to be added.\n * If so, updates package overrides in the config.\n */\nexport async function evaluateImportsForOverrides(options: {\n packages: PackageDefinitionsCache;\n info: BundleInfo;\n definition: PackageJson;\n packagePath: string;\n /** Config so far. This will be modified if new overrides are needed. */\n config: CloudpackConfig;\n resolveMap: ResolveMap;\n}): Promise<{\n /** Changes made to the generated config */\n changes: GeneratedPackageChanges[];\n /** Any errors encountered */\n errors: string[];\n /** Map from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate: Map<string, PackageImporterContext | undefined>;\n /** Package paths for which new exports were added, so the package should be re-processed. */\n pathsToRefresh: Set<string>;\n}> {\n const { packages, info, definition, packagePath, config, resolveMap } = options;\n const displayName = `${definition.name}@${definition.version}`;\n const changes: GeneratedPackageChanges[] = [];\n const errors: string[] = [];\n const pathsToEvaluate = new Map<string, PackageImporterContext | undefined>();\n const pathsToRefresh = new Set<string>();\n const dependencyVersions = getDependencies(definition);\n\n // Iterate through imports and find their path from the resolve map.\n for (const entryInfo of Object.values(info.entry)) {\n // iterate through all package names of result.info.entry.consumes\n for (const consume of entryInfo.consumes) {\n const dependencyName = consume.packageName;\n const dependencyImportPath = consume.importPath;\n const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });\n const dependencyPath = resolveEntry?.path;\n const dependencyDefinition = dependencyPath ? await packages.get(dependencyPath) : undefined;\n\n if (!dependencyPath || !dependencyDefinition) {\n errors.push(\n `Package \"${displayName}\" imports from the package \"${dependencyName}\" but it couldn't be found. ` +\n `Ensure that \"${dependencyName}\" is listed in dependencies of \"${displayName}\".`,\n );\n continue;\n }\n\n const { name, version } = dependencyDefinition as Required<PackageJson>;\n if (!name || !version) {\n throw new Error(`Package \"${displayName}\" depends on \"${dependencyName}\" but it is missing a name or version.`);\n }\n\n let importerContext: PackageImporterContext | undefined;\n const versionRequirement = dependencyVersions[dependencyName];\n if (versionRequirement && definition.name && definition.version) {\n importerContext = {\n parentName: definition.name,\n parentVersion: definition.version,\n importedName: dependencyName,\n versionRequirement,\n };\n }\n\n // Make sure to add the package to the list of packages to evaluate.\n pathsToEvaluate.set(dependencyPath, importerContext);\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: dependencyPath }, { packages, config });\n const flattenedExports = flattenExportsMap(exports);\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings: PackageSettings | undefined;\n\n if (flattenedExports[dependencyImportPath]) {\n continue;\n }\n\n // We are missing an import path. We need to add this entry to the exports map in package settings.\n generatedPackageSettings ??= getPackageSettings({\n config: { generated: { packageSettings } },\n name,\n version,\n firstMatch: true,\n }).generatedPackageSettings;\n\n if (!generatedPackageSettings) {\n generatedPackageSettings = {\n match: { name, version: `^${version}` },\n exports: {},\n };\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.exports ??= {};\n\n const addedEntry = await addExportsMapEntry(\n {\n exports: generatedPackageSettings.exports,\n packagePath: dependencyPath,\n importPath: dependencyImportPath,\n },\n { packages, config },\n );\n\n if (addedEntry) {\n changes.push({\n name: dependencyName,\n version: dependencyDefinition.version || '',\n path: dependencyPath,\n changes: [\n {\n type: 'added-export',\n change: dependencyImportPath,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n\n // Since we've found a missing export, we need to re-enqueue the dependency for evaluation.\n pathsToRefresh.add(dependencyPath);\n } else {\n const errorMessage = `Imported \"${cyan(\n dependencyImportPath.replace('.', dependencyName),\n )}\" but a corresponding file couldn't be found. Either correct the import or adjust the \"${cyan(\n dependencyName,\n )}\" package version to one that supports this import path.\\n${bulletedList(\n [`${cyan(displayName)}: ${packagePath}`, `${cyan(dependencyName)}: ${dependencyPath}`],\n 2,\n )}`;\n errors.push(errorMessage);\n }\n }\n }\n\n return { changes, errors, pathsToEvaluate, pathsToRefresh };\n}\n"]}
1
+ {"version":3,"file":"evaluateImportsForOverrides.js","sourceRoot":"","sources":["../../../src/commands/init/evaluateImportsForOverrides.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BundleInfo } from '@ms-cloudpack/api-server';\nimport type { PackageDefinitionsCache, PackageImporterContext } from '@ms-cloudpack/bundler-types';\nimport type { CloudpackConfig, PackageJson, PackageSettings } from '@ms-cloudpack/config-types';\nimport { getPackageSettings } from '@ms-cloudpack/config';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport {\n addExportsMapEntry,\n findResolveMapEntry,\n flattenExportsMap,\n getDependencies,\n getExportsMap,\n} from '@ms-cloudpack/package-utilities';\nimport { bulletedList, cyan } from '@ms-cloudpack/task-reporter';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\n\n/**\n * Evaluate the imports depended on by a package to determine if missing exports map paths need to be added.\n * If so, updates package overrides in the config.\n */\nexport async function evaluateImportsForOverrides(options: {\n packages: PackageDefinitionsCache;\n info: BundleInfo;\n definition: PackageJson;\n packagePath: string;\n /** Config so far. This will be modified if new overrides are needed. */\n config: CloudpackConfig;\n resolveMap: ResolveMap;\n}): Promise<{\n /** Changes made to the generated config */\n changes: GeneratedPackageChanges[];\n /** Any errors encountered */\n errors: string[];\n /** Map from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate: Map<string, PackageImporterContext | undefined>;\n /** Package paths for which new exports were added, so the package should be re-processed. */\n pathsToRefresh: Set<string>;\n}> {\n const { packages, info, definition, packagePath, config, resolveMap } = options;\n const displayName = `${definition.name}@${definition.version}`;\n const changes: GeneratedPackageChanges[] = [];\n const errors: string[] = [];\n const pathsToEvaluate = new Map<string, PackageImporterContext | undefined>();\n const pathsToRefresh = new Set<string>();\n const dependencyVersions = getDependencies(definition);\n\n // Iterate through imports and find their path from the resolve map.\n for (const entryInfo of Object.values(info.entry)) {\n // iterate through all package names of result.info.entry.consumes\n for (const consume of entryInfo.consumes) {\n const dependencyName = consume.packageName;\n const dependencyImportPath = consume.importPath;\n const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });\n const dependencyPath = resolveEntry?.path;\n const dependencyDefinition = dependencyPath ? await packages.get(dependencyPath) : undefined;\n\n if (!dependencyPath || !dependencyDefinition) {\n errors.push(\n `Package \"${displayName}\" imports from the package \"${dependencyName}\" but it couldn't be found. ` +\n `Ensure that \"${dependencyName}\" is listed in dependencies of \"${displayName}\".`,\n );\n continue;\n }\n\n const { name, version } = dependencyDefinition as Required<PackageJson>;\n if (!name || !version) {\n throw new Error(`Package \"${displayName}\" depends on \"${dependencyName}\" but it is missing a name or version.`);\n }\n\n let importerContext: PackageImporterContext | undefined;\n const versionRequirement = dependencyVersions[dependencyName];\n if (versionRequirement && definition.name && definition.version) {\n importerContext = {\n parentName: definition.name,\n parentVersion: definition.version,\n importedName: dependencyName,\n versionRequirement,\n };\n }\n\n // Make sure to add the package to the list of packages to evaluate.\n pathsToEvaluate.set(dependencyPath, importerContext);\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: dependencyPath }, { packages, config });\n const flattenedExports = flattenExportsMap(exports);\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings: PackageSettings | undefined;\n\n if (flattenedExports[dependencyImportPath]) {\n continue;\n }\n\n // We are missing an import path. We need to add this entry to the exports map in package settings.\n generatedPackageSettings ??= getPackageSettings({\n config: { generated: { packageSettings } },\n name,\n version,\n firstMatch: true,\n }).generatedPackageSettings;\n\n if (!generatedPackageSettings) {\n generatedPackageSettings = {\n match: { name, version: `^${version}` },\n exports: {},\n };\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.exports ??= {};\n\n const addedEntry = await addExportsMapEntry(\n {\n exports: generatedPackageSettings.exports,\n packagePath: dependencyPath,\n importPath: dependencyImportPath,\n },\n { packages, config },\n );\n\n if (addedEntry) {\n changes.push({\n name: dependencyName,\n version: dependencyDefinition.version || '',\n path: dependencyPath,\n changes: [\n {\n type: 'added-export',\n change: dependencyImportPath,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n\n // Since we've found a missing export, we need to re-enqueue the dependency for evaluation.\n pathsToRefresh.add(dependencyPath);\n } else {\n const errorMessage = `Imported \"${cyan(\n dependencyImportPath.replace('.', dependencyName),\n )}\" but a corresponding file couldn't be found. Either correct the import or adjust the \"${cyan(\n dependencyName,\n )}\" package version to one that supports this import path.\\n${bulletedList(\n [`${cyan(displayName)}: ${packagePath}`, `${cyan(dependencyName)}: ${dependencyPath}`],\n 2,\n )}`;\n errors.push(errorMessage);\n }\n }\n }\n\n return { changes, errors, pathsToEvaluate, pathsToRefresh };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"evaluatePath.js","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EnsurePackageBundledContext } from '@ms-cloudpack/api-server/apis';\nimport type { CloudpackConfig } from '@ms-cloudpack/config-types';\nimport type { PackageImporterContext } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { TelemetryClient } from '@ms-cloudpack/telemetry';\nimport type { InitSummaryData } from './InitSummaryData.js';\nimport type { InitOptions } from './types/InitOptions.js';\n\nimport { ensurePackageBundled } from '@ms-cloudpack/api-server/apis';\nimport { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';\nimport { optimizeDependencies } from './optimizeDependencies.js';\n\n/**\n * A helper which given the packagePath, tries to evaluate the path by bundling things, finding imports,\n * and cross checking the imports with explicit exports. If any exports are missing, they are documented\n * in the generated config.\n */\nexport async function evaluatePath(options: {\n /** Path to evaluate. */\n packagePath: string;\n /** Info about how the parent package */\n importerContext: PackageImporterContext | undefined;\n /** Config so far. This will be modified if new overrides are needed. */\n config: CloudpackConfig;\n resolveMap: ResolveMap;\n telemetryClient: TelemetryClient;\n initOptions: InitOptions;\n summaryData: InitSummaryData;\n shouldForce: boolean;\n ctx: EnsurePackageBundledContext;\n}): Promise<{\n /** Map from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate?: Map<string, PackageImporterContext | undefined>;\n /** Package paths for which new exports were added, so the package should be re-processed. */\n pathsToRefresh?: Set<string>;\n /** Whether a fatal error was encountered. */\n shouldExit?: boolean;\n}> {\n const {\n packagePath,\n config,\n initOptions,\n telemetryClient,\n resolveMap,\n summaryData,\n shouldForce,\n ctx,\n importerContext,\n } = options;\n const { packages } = ctx;\n const { features } = config;\n\n // This line is the reason we have to track the importerContext for packages to evaluate:\n // otherwise if a non-semver package is read here, we'd lose the modifications from the initial\n // time the package was read (and getNonSemverTransform was called) when building the resolve map.\n const definition = await packages.get(packagePath, { refresh: true, importerContext });\n const { name, version } = definition || {};\n\n if (!definition || !name || !version) {\n // Unsure why a package would be missing a definition/name/version - we've built the resolve map already.\n throw new Error(\n `${packagePath} evaluation failed because the package.json with a name/version was not found or not readable.`,\n );\n }\n\n // Bundle the package and find the imports it depends on.\n const { result } = await ensurePackageBundled({\n input: {\n name,\n version,\n isIncremental: false,\n shouldGetBundleInfo: true,\n shouldForce,\n shouldRerun: shouldForce,\n },\n ctx,\n });\n\n const { errors, warnings, info } = result;\n\n // Record the results for the summary.\n const resultIdentifier = {\n name: definition.name || '',\n version: definition.version || '',\n path: packagePath,\n };\n\n summaryData.recordResult({ packageResult: { ...resultIdentifier, errors, warnings, info } });\n\n // If there were errors or no imports, return early.\n if (errors?.length || !info?.entry) {\n return {};\n }\n\n // Given the package imports, find the missing exports maps and update packageOverrides.\n const {\n changes,\n errors: evalErrors,\n pathsToEvaluate,\n pathsToRefresh,\n } = await evaluateImportsForOverrides({ definition, packagePath, packages, info, config, resolveMap });\n\n if (evalErrors.length) {\n summaryData.recordResult({\n packageResult: {\n ...resultIdentifier,\n errors: evalErrors.map((text) => ({ text })),\n },\n append: true,\n });\n } else {\n summaryData.recordGeneratedChanges(changes);\n }\n\n // Conditionally scan dependency usage so that we can populate\n // include/excludeDependencies automatically, ensuring the dep list\n // is both minimal (remove unused deps) and complete (include\n // specific devDeps.)\n let importWarnings = [];\n let importChanges = [];\n if (features?.optimizeDependencies) {\n ({ warnings: importWarnings, changes: importChanges } = await optimizeDependencies(\n { definition, packagePath, info, resolveMap },\n { packages, config },\n ));\n\n if (importWarnings.length) {\n summaryData.recordResult({\n packageResult: {\n ...resultIdentifier,\n warnings: importWarnings.map((text) => ({ text })),\n },\n append: true,\n });\n }\n summaryData.recordGeneratedChanges(importChanges);\n }\n\n // Uncomment this when #1694 init does not cache packages correctly after editing config is fixed\n // and the heap does not reach the limit as almost every package is enqueued.\n // importPathsToEvaluate?.forEach((path) => pathsToEvaluate.set(path, importerContext));\n // importPathsToRefresh?.forEach((path) => pathsToRefresh.add(path));\n\n if (initOptions.check && (changes.length || evalErrors.length || importChanges.length)) {\n telemetryClient.rootSpan.addEvent('INIT_CHECK_FAILED', {\n reason: changes.length || importChanges.length ? 'Config needs to be updated.' : evalErrors,\n });\n\n return { shouldExit: true };\n }\n\n return {\n pathsToEvaluate,\n pathsToRefresh,\n };\n}\n"]}
1
+ {"version":3,"file":"evaluatePath.js","sourceRoot":"","sources":["../../../src/commands/init/evaluatePath.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EnsurePackageBundledContext } from '@ms-cloudpack/api-server/apis';\nimport type { CloudpackConfig } from '@ms-cloudpack/config-types';\nimport type { PackageImporterContext } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { TelemetryClient } from '@ms-cloudpack/telemetry';\nimport type { InitSummaryData } from './InitSummaryData.js';\nimport type { InitOptions } from './types/InitOptions.js';\n\nimport { ensurePackageBundled } from '@ms-cloudpack/api-server/apis';\nimport { evaluateImportsForOverrides } from './evaluateImportsForOverrides.js';\nimport { optimizeDependencies } from './optimizeDependencies.js';\n\n/**\n * A helper which given the packagePath, tries to evaluate the path by bundling things, finding imports,\n * and cross checking the imports with explicit exports. If any exports are missing, they are documented\n * in the generated config.\n */\nexport async function evaluatePath(options: {\n /** Path to evaluate. */\n packagePath: string;\n /** Info about how the parent package */\n importerContext: PackageImporterContext | undefined;\n /** Config so far. This will be modified if new overrides are needed. */\n config: CloudpackConfig;\n resolveMap: ResolveMap;\n telemetryClient: TelemetryClient;\n initOptions: InitOptions;\n summaryData: InitSummaryData;\n shouldForce: boolean;\n ctx: EnsurePackageBundledContext;\n}): Promise<{\n /** Map from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate?: Map<string, PackageImporterContext | undefined>;\n /** Package paths for which new exports were added, so the package should be re-processed. */\n pathsToRefresh?: Set<string>;\n /** Whether a fatal error was encountered. */\n shouldExit?: boolean;\n}> {\n const {\n packagePath,\n config,\n initOptions,\n telemetryClient,\n resolveMap,\n summaryData,\n shouldForce,\n ctx,\n importerContext,\n } = options;\n const { packages } = ctx;\n const { features } = config;\n\n // This line is the reason we have to track the importerContext for packages to evaluate:\n // otherwise if a non-semver package is read here, we'd lose the modifications from the initial\n // time the package was read (and getNonSemverTransform was called) when building the resolve map.\n const definition = await packages.get(packagePath, { refresh: true, importerContext });\n const { name, version } = definition || {};\n\n if (!definition || !name || !version) {\n // Unsure why a package would be missing a definition/name/version - we've built the resolve map already.\n throw new Error(\n `${packagePath} evaluation failed because the package.json with a name/version was not found or not readable.`,\n );\n }\n\n // Bundle the package and find the imports it depends on.\n const { result } = await ensurePackageBundled({\n input: {\n name,\n version,\n isIncremental: false,\n shouldGetBundleInfo: true,\n shouldForce,\n shouldRerun: shouldForce,\n },\n ctx,\n });\n\n const { errors, warnings, info } = result;\n\n // Record the results for the summary.\n const resultIdentifier = {\n name: definition.name || '',\n version: definition.version || '',\n path: packagePath,\n };\n\n summaryData.recordResult({ packageResult: { ...resultIdentifier, errors, warnings, info } });\n\n // If there were errors or no imports, return early.\n if (errors?.length || !info?.entry) {\n return {};\n }\n\n // Given the package imports, find the missing exports maps and update packageOverrides.\n const {\n changes,\n errors: evalErrors,\n pathsToEvaluate,\n pathsToRefresh,\n } = await evaluateImportsForOverrides({ definition, packagePath, packages, info, config, resolveMap });\n\n if (evalErrors.length) {\n summaryData.recordResult({\n packageResult: {\n ...resultIdentifier,\n errors: evalErrors.map((text) => ({ text })),\n },\n append: true,\n });\n } else {\n summaryData.recordGeneratedChanges(changes);\n }\n\n // Conditionally scan dependency usage so that we can populate\n // include/excludeDependencies automatically, ensuring the dep list\n // is both minimal (remove unused deps) and complete (include\n // specific devDeps.)\n let importWarnings = [];\n let importChanges = [];\n if (features?.optimizeDependencies) {\n ({ warnings: importWarnings, changes: importChanges } = await optimizeDependencies(\n { definition, packagePath, info, resolveMap },\n { packages, config },\n ));\n\n if (importWarnings.length) {\n summaryData.recordResult({\n packageResult: {\n ...resultIdentifier,\n warnings: importWarnings.map((text) => ({ text })),\n },\n append: true,\n });\n }\n summaryData.recordGeneratedChanges(importChanges);\n }\n\n // Uncomment this when #1694 init does not cache packages correctly after editing config is fixed\n // and the heap does not reach the limit as almost every package is enqueued.\n // importPathsToEvaluate?.forEach((path) => pathsToEvaluate.set(path, importerContext));\n // importPathsToRefresh?.forEach((path) => pathsToRefresh.add(path));\n\n if (initOptions.check && (changes.length || evalErrors.length || importChanges.length)) {\n telemetryClient.rootSpan.addEvent('INIT_CHECK_FAILED', {\n reason: changes.length || importChanges.length ? 'Config needs to be updated.' : evalErrors,\n });\n\n return { shouldExit: true };\n }\n\n return {\n pathsToEvaluate,\n pathsToRefresh,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"formatInitSummary.js","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"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","sourcesContent":["import { slash } from '@ms-cloudpack/path-string-parsing';\nimport {\n bold,\n bulletedList,\n cyan,\n green,\n lightCyan,\n plural,\n red,\n yellow,\n formatTime,\n statusCharacter,\n} from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitPackageIdentifier } from './types/InitPackageIdentifier.js';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\nimport type { InitSummary } from './types/InitSummary.js';\n\n/**\n * Given an init summary and init options, returns a formatted string message to display to the user via console.\n */\nexport function formatInitSummary(summary: InitSummary, options?: InitOptions) {\n const {\n totalPackages,\n totalErrors,\n totalWarnings,\n totalChanges,\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates,\n } = summary;\n const { check } = options || {};\n const summaryString: (string | undefined)[] = [];\n\n // Report the \"Summary\" title if no errors or warnings are listed (seems redundant otherwise.\n if (!packagesWithErrors.length && !packagesWithWarnings.length) {\n summaryString.push('Summary:\\n');\n }\n\n // Report work done to the generated file.\n if (!packagesWithErrors.length && generatedFileUpdates.length) {\n summaryString.push(`Updates ${check ? 'needed for' : 'made to'} ${cyan(`cloudpack.generated.json`)}:\\n`);\n\n for (const packageUpdates of generatedFileUpdates) {\n const exportsUpdates = packageUpdates.changes.filter((u) => u.type === 'added-export');\n\n if (exportsUpdates.length) {\n summaryString.push(\n `${formatPackageName(packageUpdates)} - ${yellow(\n plural(exportsUpdates.length, 'path'),\n )} missing from exports map`,\n );\n summaryString.push(\n bulletedList(exportsUpdates.map((u) => `${cyan(u.change)}${u.reason ? ` - ${u.reason}` : ``}`)),\n '',\n );\n }\n }\n }\n\n // Report packages with warnings.\n if (packagesWithWarnings.length) {\n summaryString.push(`${plural(packagesWithWarnings.length, 'package')} with ${yellow('warnings')}:\\n`);\n let currentCount = 1;\n\n for (const packageWithWarnings of packagesWithWarnings) {\n summaryString.push(\n `${yellow(`${statusCharacter.warn} ${currentCount++}.`)} ${formatPackageName(packageWithWarnings)} - ${yellow(\n plural(packageWithWarnings.warnings.length, 'warning'),\n )}, ${packageWithWarnings.path}:`,\n );\n summaryString.push(formatBundleMessages(packageWithWarnings as InitPackageResult, false), '');\n }\n }\n\n // Report packages with errors.\n if (packagesWithErrors.length) {\n summaryString.push(`${plural(packagesWithErrors.length, 'package')} ${red('failed')}:\\n`);\n let currentCount = 1;\n for (const packageWithErrors of packagesWithErrors) {\n summaryString.push(\n `${red(`${statusCharacter.fail} ${currentCount++}.`)} ${formatPackageName(packageWithErrors)} - ${red(\n plural(packageWithErrors.errors.length, 'error'),\n )}, ${packageWithErrors.path}:`,\n );\n summaryString.push(formatBundleMessages(packageWithErrors as InitPackageResult, true), '');\n }\n }\n\n const generatedUpdateCount = (check && !!generatedFileUpdates.length) || 0;\n const blockingIssueCount = packagesWithErrors.length || 0;\n const requiresChanges = (check && totalChanges) || 0;\n\n // Add summary.\n summaryString.push(\n `${cyan(plural(totalPackages, 'total package'))} evaluated in ${formatTime(summary.duration)}:`,\n bulletedList(\n [\n requiresChanges ? `${red(plural(totalChanges, 'change'))} required` : undefined,\n `${green(plural(totalPackages - blockingIssueCount, 'package'))} built successfully${\n packagesWithWarnings.length\n ? ` (${yellow(plural(packagesWithWarnings.length, 'package'))} with warnings)`\n : ''\n }`,\n blockingIssueCount ? `${red(plural(blockingIssueCount, 'package'))} failed to build` : undefined,\n `Totals: ${red(plural(totalErrors, 'error'))}, ${yellow(plural(totalWarnings, 'warning'))}`,\n ].filter(Boolean),\n ),\n );\n\n if (generatedUpdateCount) {\n summaryString.push(\n `Run \"${yellow('cloudpack init')}\" in your application folder to apply changes to the ${cyan(\n 'cloudpack.generated.json',\n )} file.`,\n );\n }\n\n return summaryString.filter((a) => a !== undefined).join('\\n');\n}\n\n/** Helper to format bundle messages. */\nfunction formatBundleMessages(result: InitPackageResult, formatErrors: boolean) {\n const messages: string[] = [];\n const unformattedMessages = (formatErrors ? result.errors : result.warnings) || [];\n\n for (const message of unformattedMessages) {\n const { location, text } = message;\n const prefix = formatErrors ? red('Error') : yellow('Warning');\n\n if (!location?.file) {\n messages.push(`${prefix}: ${text}`);\n } else {\n const relativeFilePath = cyan(slash(path.relative(result.path, location.file)));\n const characterLocation =\n location.line !== undefined && location.column !== undefined\n ? yellow(`:${location.line}:${location.column}`)\n : ``;\n\n messages.push(`${prefix}: ${relativeFilePath}${characterLocation} - ${text}`);\n }\n }\n\n return messages.length ? bulletedList(messages) : undefined;\n}\n\n/** Helper to format package names. */\nfunction formatPackageName(packageIdentifier: InitPackageIdentifier) {\n const { name, version } = packageIdentifier;\n\n return bold(lightCyan(`${name}@${version || `<no-version>`}`));\n}\n"]}
1
+ {"version":3,"file":"formatInitSummary.js","sourceRoot":"","sources":["../../../src/commands/init/formatInitSummary.ts"],"names":[],"mappings":"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","sourcesContent":["import { slash } from '@ms-cloudpack/path-string-parsing';\nimport {\n bold,\n bulletedList,\n cyan,\n green,\n lightCyan,\n plural,\n red,\n yellow,\n formatTime,\n statusCharacter,\n} from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitPackageIdentifier } from './types/InitPackageIdentifier.js';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\nimport type { InitSummary } from './types/InitSummary.js';\n\n/**\n * Given an init summary and init options, returns a formatted string message to display to the user via console.\n */\nexport function formatInitSummary(summary: InitSummary, options?: InitOptions) {\n const {\n totalPackages,\n totalErrors,\n totalWarnings,\n totalChanges,\n packagesWithErrors,\n packagesWithWarnings,\n generatedFileUpdates,\n } = summary;\n const { check } = options || {};\n const summaryString: (string | undefined)[] = [];\n\n // Report the \"Summary\" title if no errors or warnings are listed (seems redundant otherwise.\n if (!packagesWithErrors.length && !packagesWithWarnings.length) {\n summaryString.push('Summary:\\n');\n }\n\n // Report work done to the generated file.\n if (!packagesWithErrors.length && generatedFileUpdates.length) {\n summaryString.push(`Updates ${check ? 'needed for' : 'made to'} ${cyan(`cloudpack.generated.json`)}:\\n`);\n\n for (const packageUpdates of generatedFileUpdates) {\n const exportsUpdates = packageUpdates.changes.filter((u) => u.type === 'added-export');\n\n if (exportsUpdates.length) {\n summaryString.push(\n `${formatPackageName(packageUpdates)} - ${yellow(\n plural(exportsUpdates.length, 'path'),\n )} missing from exports map`,\n );\n summaryString.push(\n bulletedList(exportsUpdates.map((u) => `${cyan(u.change)}${u.reason ? ` - ${u.reason}` : ``}`)),\n '',\n );\n }\n }\n }\n\n // Report packages with warnings.\n if (packagesWithWarnings.length) {\n summaryString.push(`${plural(packagesWithWarnings.length, 'package')} with ${yellow('warnings')}:\\n`);\n let currentCount = 1;\n\n for (const packageWithWarnings of packagesWithWarnings) {\n summaryString.push(\n `${yellow(`${statusCharacter.warn} ${currentCount++}.`)} ${formatPackageName(packageWithWarnings)} - ${yellow(\n plural(packageWithWarnings.warnings.length, 'warning'),\n )}, ${packageWithWarnings.path}:`,\n );\n summaryString.push(formatBundleMessages(packageWithWarnings as InitPackageResult, false), '');\n }\n }\n\n // Report packages with errors.\n if (packagesWithErrors.length) {\n summaryString.push(`${plural(packagesWithErrors.length, 'package')} ${red('failed')}:\\n`);\n let currentCount = 1;\n for (const packageWithErrors of packagesWithErrors) {\n summaryString.push(\n `${red(`${statusCharacter.fail} ${currentCount++}.`)} ${formatPackageName(packageWithErrors)} - ${red(\n plural(packageWithErrors.errors.length, 'error'),\n )}, ${packageWithErrors.path}:`,\n );\n summaryString.push(formatBundleMessages(packageWithErrors as InitPackageResult, true), '');\n }\n }\n\n const generatedUpdateCount = (check && !!generatedFileUpdates.length) || 0;\n const blockingIssueCount = packagesWithErrors.length || 0;\n const requiresChanges = (check && totalChanges) || 0;\n\n // Add summary.\n summaryString.push(\n `${cyan(plural(totalPackages, 'total package'))} evaluated in ${formatTime(summary.duration)}:`,\n bulletedList(\n [\n requiresChanges ? `${red(plural(totalChanges, 'change'))} required` : undefined,\n `${green(plural(totalPackages - blockingIssueCount, 'package'))} built successfully${\n packagesWithWarnings.length\n ? ` (${yellow(plural(packagesWithWarnings.length, 'package'))} with warnings)`\n : ''\n }`,\n blockingIssueCount ? `${red(plural(blockingIssueCount, 'package'))} failed to build` : undefined,\n `Totals: ${red(plural(totalErrors, 'error'))}, ${yellow(plural(totalWarnings, 'warning'))}`,\n ].filter(Boolean),\n ),\n );\n\n if (generatedUpdateCount) {\n summaryString.push(\n `Run \"${yellow('cloudpack init')}\" in your application folder to apply changes to the ${cyan(\n 'cloudpack.generated.json',\n )} file.`,\n );\n }\n\n return summaryString.filter((a) => a !== undefined).join('\\n');\n}\n\n/** Helper to format bundle messages. */\nfunction formatBundleMessages(result: InitPackageResult, formatErrors: boolean) {\n const messages: string[] = [];\n const unformattedMessages = (formatErrors ? result.errors : result.warnings) || [];\n\n for (const message of unformattedMessages) {\n const { location, text } = message;\n const prefix = formatErrors ? red('Error') : yellow('Warning');\n\n if (!location?.file) {\n messages.push(`${prefix}: ${text}`);\n } else {\n const relativeFilePath = cyan(slash(path.relative(result.path, location.file)));\n const characterLocation =\n location.line !== undefined && location.column !== undefined\n ? yellow(`:${location.line}:${location.column}`)\n : ``;\n\n messages.push(`${prefix}: ${relativeFilePath}${characterLocation} - ${text}`);\n }\n }\n\n return messages.length ? bulletedList(messages) : undefined;\n}\n\n/** Helper to format package names. */\nfunction formatPackageName(packageIdentifier: InitPackageIdentifier) {\n const { name, version } = packageIdentifier;\n\n return bold(lightCyan(`${name}@${version || `<no-version>`}`));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context } from '@ms-cloudpack/api-server';\nimport type { CloudpackConfig, GeneratedConfig, PackageJsonExportsObject } from '@ms-cloudpack/config-types';\nimport type { PackageImporterContext } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { TaskReporter } from '@ms-cloudpack/task-reporter';\nimport type { TelemetryClient } from '@ms-cloudpack/telemetry';\nimport type { AutoDispose } from '../../types/AutoDispose.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitSummary } from './types/InitSummary.js';\n\nimport { createPartialApiContext } from '@ms-cloudpack/api-server/apis';\nimport { writeGeneratedConfig } from '@ms-cloudpack/config';\nimport { bold, bulletedList, formatPackageName, plural } from '@ms-cloudpack/task-reporter';\nimport { InitSummaryData } from './InitSummaryData.js';\nimport { evaluatePath } from './evaluatePath.js';\nimport { verifyExports } from './verifyExports.js';\n\n/**\n * Init execution function.\n */\nexport async function init(parameters: {\n options: InitOptions;\n appPath: string;\n config: CloudpackConfig;\n autoDispose: AutoDispose;\n reporter: TaskReporter;\n telemetryClient: TelemetryClient;\n}): Promise<InitSummary> {\n const { options, appPath, config, reporter, autoDispose, telemetryClient } = parameters;\n\n // Don't allow --check and --reset together.\n if (options.check && options.reset) {\n throw Error('Cannot use --check and --reset together.');\n }\n\n // If --reset is specified, reset the generated config.\n if (options.reset) {\n config.generated = {};\n }\n\n const ctx: Context = await createPartialApiContext({\n appPath,\n config,\n reporter,\n telemetryClient,\n items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n });\n autoDispose(ctx);\n const resolveMap = ctx.session.resolveMap;\n\n // Ensure config.generated.packageSettings is initialized.\n config.generated.packageSettings ??= [];\n\n const summaryData = new InitSummaryData();\n\n await new Promise<void>((resolve, reject) => {\n let pending = 0;\n let isExitingPrematurely = false;\n const visitedSet = new Set<string>();\n const refreshPaths = new Set<string>();\n\n // Start with the app path or requested matches\n enqueuePaths(getInitialPaths({ appPath, match: options.match, resolveMap, reporter }));\n\n /**\n * Enqueue more paths.\n * @param newPaths Mapping from package path to importer context.\n */\n function enqueuePaths(newPaths: Map<string, PackageImporterContext | undefined>) {\n if (isExitingPrematurely) {\n return;\n }\n\n // Iterate through the given paths.\n for (const [packagePath, importerContext] of newPaths) {\n if (visitedSet.has(packagePath)) {\n continue;\n }\n\n const shouldForce = refreshPaths.delete(packagePath);\n\n visitedSet.add(packagePath);\n pending++;\n\n // Evaluate this path, but don't await - when we're done, we'll re-enqueue newly discovered paths.\n evaluatePath({\n packagePath,\n importerContext,\n config,\n telemetryClient,\n resolveMap,\n shouldForce,\n initOptions: options,\n summaryData,\n ctx,\n })\n .then(({ pathsToEvaluate, pathsToRefresh, shouldExit }) => {\n pending--;\n\n if (shouldExit) {\n isExitingPrematurely = true;\n } else if (pathsToEvaluate?.size && !options.match) {\n // If there are paths that need to be rebuilt, add them to the refresh set so that on re-enqueuing\n // we pass the `shouldRerun` flag through\n pathsToRefresh?.forEach((refreshPath) => {\n refreshPaths.add(refreshPath);\n visitedSet.delete(refreshPath);\n });\n\n // Try to enqueue the new paths.\n enqueuePaths(pathsToEvaluate);\n }\n\n // If nothing is pending after this call, we're complete.\n if (!pending) {\n resolve();\n }\n })\n .catch((error) => {\n reject(error);\n });\n }\n }\n });\n\n if (config.features?.verifyExports) {\n const warnings = verifyExports(summaryData.getResults(), resolveMap);\n warnings.forEach((warning) => summaryData.recordResult({ packageResult: warning, append: true }));\n }\n\n const summary = summaryData.summarize();\n\n if (!options.check && summary.totalChanges && config.generated.packageSettings?.length) {\n sortExportKeys(config.generated);\n\n await writeGeneratedConfig(config.generated, appPath);\n }\n\n return summary;\n}\n\n/**\n * Get initial package paths to process: either the app path, or packages matching `match` in the init options.\n */\nfunction getInitialPaths(params: {\n appPath: string;\n /** Only evaluate packages matching this string (from init options). */\n match: string | undefined;\n resolveMap: ResolveMap;\n reporter: TaskReporter;\n}): Map<string, PackageImporterContext | undefined> {\n const { appPath, match, resolveMap, reporter } = params;\n\n if (!match) {\n return new Map([[appPath, undefined]]);\n }\n\n // Find matching packages in the resolve map\n const resolveMapEntries = Object.values(resolveMap).filter((entry) => entry.name.includes(match));\n\n reporter.log(\n `\\nFound ${plural(resolveMapEntries.length, 'package')} matching \"${bold(match)}\":\\n`,\n bulletedList(resolveMapEntries.map((entry) => `${formatPackageName(entry)}: ${entry.path}`)),\n );\n\n return new Map(resolveMapEntries.map((entry) => [entry.path, undefined]));\n}\n\nfunction sortExportKeys({ packageSettings = [] }: GeneratedConfig) {\n for (const settings of packageSettings) {\n if (!settings.exports) {\n continue;\n }\n\n const unsortedExports = settings.exports as PackageJsonExportsObject;\n\n settings.exports = Object.fromEntries(\n Object.keys(unsortedExports)\n .sort()\n .map((k) => [k, unsortedExports[k]]),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init/init.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context } from '@ms-cloudpack/api-server';\nimport type { CloudpackConfig, GeneratedConfig, PackageJsonExportsObject } from '@ms-cloudpack/config-types';\nimport type { PackageImporterContext } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { TaskReporter } from '@ms-cloudpack/task-reporter';\nimport type { TelemetryClient } from '@ms-cloudpack/telemetry';\nimport type { AutoDispose } from '../../types/AutoDispose.js';\nimport type { InitOptions } from './types/InitOptions.js';\nimport type { InitSummary } from './types/InitSummary.js';\n\nimport { createPartialApiContext } from '@ms-cloudpack/api-server/apis';\nimport { writeGeneratedConfig } from '@ms-cloudpack/config';\nimport { bold, bulletedList, formatPackageName, plural } from '@ms-cloudpack/task-reporter';\nimport { InitSummaryData } from './InitSummaryData.js';\nimport { evaluatePath } from './evaluatePath.js';\nimport { verifyExports } from './verifyExports.js';\n\n/**\n * Init execution function.\n */\nexport async function init(parameters: {\n options: InitOptions;\n appPath: string;\n config: CloudpackConfig;\n autoDispose: AutoDispose;\n reporter: TaskReporter;\n telemetryClient: TelemetryClient;\n}): Promise<InitSummary> {\n const { options, appPath, config, reporter, autoDispose, telemetryClient } = parameters;\n\n // Don't allow --check and --reset together.\n if (options.check && options.reset) {\n throw Error('Cannot use --check and --reset together.');\n }\n\n // If --reset is specified, reset the generated config.\n if (options.reset) {\n config.generated = {};\n }\n\n const ctx: Context = await createPartialApiContext({\n appPath,\n config,\n reporter,\n telemetryClient,\n items: ['bus', 'taskRunner', 'watcher', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n });\n autoDispose(ctx);\n const resolveMap = ctx.session.resolveMap;\n\n // Ensure config.generated.packageSettings is initialized.\n config.generated.packageSettings ??= [];\n\n const summaryData = new InitSummaryData();\n\n await new Promise<void>((resolve, reject) => {\n let pending = 0;\n let isExitingPrematurely = false;\n const visitedSet = new Set<string>();\n const refreshPaths = new Set<string>();\n\n // Start with the app path or requested matches\n enqueuePaths(getInitialPaths({ appPath, match: options.match, resolveMap, reporter }));\n\n /**\n * Enqueue more paths.\n * @param newPaths Mapping from package path to importer context.\n */\n function enqueuePaths(newPaths: Map<string, PackageImporterContext | undefined>) {\n if (isExitingPrematurely) {\n return;\n }\n\n // Iterate through the given paths.\n for (const [packagePath, importerContext] of newPaths) {\n if (visitedSet.has(packagePath)) {\n continue;\n }\n\n const shouldForce = refreshPaths.delete(packagePath);\n\n visitedSet.add(packagePath);\n pending++;\n\n // Evaluate this path, but don't await - when we're done, we'll re-enqueue newly discovered paths.\n evaluatePath({\n packagePath,\n importerContext,\n config,\n telemetryClient,\n resolveMap,\n shouldForce,\n initOptions: options,\n summaryData,\n ctx,\n })\n .then(({ pathsToEvaluate, pathsToRefresh, shouldExit }) => {\n pending--;\n\n if (shouldExit) {\n isExitingPrematurely = true;\n } else if (pathsToEvaluate?.size && !options.match) {\n // If there are paths that need to be rebuilt, add them to the refresh set so that on re-enqueuing\n // we pass the `shouldRerun` flag through\n pathsToRefresh?.forEach((refreshPath) => {\n refreshPaths.add(refreshPath);\n visitedSet.delete(refreshPath);\n });\n\n // Try to enqueue the new paths.\n enqueuePaths(pathsToEvaluate);\n }\n\n // If nothing is pending after this call, we're complete.\n if (!pending) {\n resolve();\n }\n })\n .catch((error) => {\n reject(error);\n });\n }\n }\n });\n\n if (config.features?.verifyExports) {\n const warnings = verifyExports(summaryData.getResults(), resolveMap);\n warnings.forEach((warning) => summaryData.recordResult({ packageResult: warning, append: true }));\n }\n\n const summary = summaryData.summarize();\n\n if (!options.check && summary.totalChanges && config.generated.packageSettings?.length) {\n sortExportKeys(config.generated);\n\n await writeGeneratedConfig(config.generated, appPath);\n }\n\n return summary;\n}\n\n/**\n * Get initial package paths to process: either the app path, or packages matching `match` in the init options.\n */\nfunction getInitialPaths(params: {\n appPath: string;\n /** Only evaluate packages matching this string (from init options). */\n match: string | undefined;\n resolveMap: ResolveMap;\n reporter: TaskReporter;\n}): Map<string, PackageImporterContext | undefined> {\n const { appPath, match, resolveMap, reporter } = params;\n\n if (!match) {\n return new Map([[appPath, undefined]]);\n }\n\n // Find matching packages in the resolve map\n const resolveMapEntries = Object.values(resolveMap).filter((entry) => entry.name.includes(match));\n\n reporter.log(\n `\\nFound ${plural(resolveMapEntries.length, 'package')} matching \"${bold(match)}\":\\n`,\n bulletedList(resolveMapEntries.map((entry) => `${formatPackageName(entry)}: ${entry.path}`)),\n );\n\n return new Map(resolveMapEntries.map((entry) => [entry.path, undefined]));\n}\n\nfunction sortExportKeys({ packageSettings = [] }: GeneratedConfig) {\n for (const settings of packageSettings) {\n if (!settings.exports) {\n continue;\n }\n\n const unsortedExports = settings.exports as PackageJsonExportsObject;\n\n settings.exports = Object.fromEntries(\n Object.keys(unsortedExports)\n .sort()\n .map((k) => [k, unsortedExports[k]]),\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"optimizeDependencies.js","sourceRoot":"","sources":["../../../src/commands/init/optimizeDependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPackageSettings } from '@ms-cloudpack/config';\nimport { findResolveMapEntry, type ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { BundleInfo } from '@ms-cloudpack/api-server';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { CloudpackConfig, PackageJson } from '@ms-cloudpack/config-types';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\n\n/**\n * Optimizes the dependencies of a package to determine if there are any missing or unused.\n * If so, adds the the missing dependencies to included and the unused dependencies to excluded.\n */\nexport async function optimizeDependencies(\n options: {\n info: BundleInfo;\n definition: PackageJson;\n packagePath: string;\n resolveMap: ResolveMap;\n },\n context: {\n packages: PackageDefinitionsCache;\n config: CloudpackConfig;\n },\n): Promise<{\n /** Changes made to the generated config */\n changes: GeneratedPackageChanges[];\n /** Any warnings encountered */\n warnings: string[];\n /** Set from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate: Set<string>;\n /** Package paths for which dependencies where included or excluded, so the package should be re-processed. */\n pathsToRefresh: Set<string>;\n}> {\n const { info, definition, packagePath, resolveMap } = options;\n const { packages, config } = context;\n const displayName = `${definition.name}@${definition.version}`;\n const changes: GeneratedPackageChanges[] = [];\n const warnings: string[] = [];\n const pathsToEvaluate = new Set<string>();\n const pathsToRefresh = new Set<string>();\n\n const { name, version } = definition;\n if (!name || !version) {\n throw new Error(`Package \"${displayName}\" is missing a name or version.`);\n }\n\n const consumedDependencies = new Set<string>();\n // Iterate through imports and find their path from the resolve map.\n for (const entryInfo of Object.values(info.entry)) {\n // iterate through all package names of result.info.entry.consumes\n for (const consume of entryInfo.consumes) {\n consumedDependencies.add(consume.packageName);\n }\n }\n\n // Iterate through imports and find their path from the resolve map.\n for (const dependencyName of consumedDependencies) {\n // Add to includedDependencies if it is not listed as a dependency or peer dependency in the package.json.\n if (\n definition.dependencies?.[dependencyName] ||\n definition.peerDependencies?.[dependencyName] ||\n dependencyName === name\n ) {\n // Skip if it is listed as a dependency, peer dependency or it is importing itself.\n continue;\n }\n\n // If the dependency is not listed in the package.json, add an error or warning.\n if (!definition.devDependencies?.[dependencyName]) {\n const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });\n const dependencyPath = resolveEntry?.path;\n const dependencyDefinition = dependencyPath ? await packages.get(dependencyPath) : undefined;\n const message =\n `Optimize Dependencies: Package \"${displayName}\" imports from the package \"${dependencyName}\" but it is not listed in dependencies. ` +\n `Ensure that \"${dependencyName}\" is listed in dependencies of \"${displayName}\".`;\n if (!dependencyPath || !dependencyDefinition) {\n // If the dependency is not found in the resolve map, add an error.\n // Error is already caught by evaluateImportsForOverrides.\n continue;\n } else {\n // If the dependency is found in the resolve map, add a warning.\n warnings.push(message);\n }\n }\n\n // Make sure to add the package to the list of packages to evaluate.\n pathsToEvaluate.add(packagePath);\n\n // Add to includedDependencies\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings = getPackageSettings({\n config: { generated: { packageSettings } },\n name,\n version,\n firstMatch: true,\n }).generatedPackageSettings;\n\n if (!generatedPackageSettings) {\n generatedPackageSettings = {\n match: { name, version: `^${version}` },\n };\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.includedDependencies ??= [];\n\n // Add to includedDependencies if it is not already included.\n if (generatedPackageSettings.includedDependencies.includes(dependencyName)) {\n continue;\n }\n\n generatedPackageSettings.includedDependencies.push(dependencyName);\n\n changes.push({\n name,\n version,\n path: packagePath,\n changes: [\n {\n type: 'included-dependency',\n change: dependencyName,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n\n pathsToRefresh.add(packagePath);\n }\n\n const dependencies = new Set([\n ...Object.keys(definition.dependencies ?? {}),\n ...Object.keys(definition.peerDependencies ?? {}),\n ]);\n\n // Iterate through dependencies and find unused.\n for (const dependencyName of dependencies) {\n if (consumedDependencies.has(dependencyName)) {\n continue;\n }\n\n pathsToEvaluate.add(packagePath);\n\n // Add to excludedDependencies\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings = getPackageSettings({\n config: { generated: { packageSettings } },\n name,\n version,\n firstMatch: true,\n }).generatedPackageSettings;\n\n if (!generatedPackageSettings) {\n generatedPackageSettings = {\n match: { name, version: `^${version}` },\n };\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.excludedDependencies ??= [];\n\n // Add to includedDependencies if it is not already included.\n if (generatedPackageSettings.excludedDependencies.includes(dependencyName)) {\n continue;\n }\n\n generatedPackageSettings.excludedDependencies.push(dependencyName);\n\n changes.push({\n name,\n version,\n path: packagePath,\n changes: [\n {\n type: 'excluded-dependency',\n change: dependencyName,\n reason: `Not imported by \"${displayName}\"`,\n },\n ],\n });\n\n pathsToRefresh.add(packagePath);\n }\n return { warnings, changes, pathsToEvaluate, pathsToRefresh };\n}\n"]}
1
+ {"version":3,"file":"optimizeDependencies.js","sourceRoot":"","sources":["../../../src/commands/init/optimizeDependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPackageSettings } from '@ms-cloudpack/config';\nimport { findResolveMapEntry, type ResolveMap } from '@ms-cloudpack/package-utilities';\nimport type { BundleInfo } from '@ms-cloudpack/api-server';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { CloudpackConfig, PackageJson } from '@ms-cloudpack/config-types';\nimport type { GeneratedPackageChanges } from './types/GeneratedPackageChanges.js';\n\n/**\n * Optimizes the dependencies of a package to determine if there are any missing or unused.\n * If so, adds the the missing dependencies to included and the unused dependencies to excluded.\n */\nexport async function optimizeDependencies(\n options: {\n info: BundleInfo;\n definition: PackageJson;\n packagePath: string;\n resolveMap: ResolveMap;\n },\n context: {\n packages: PackageDefinitionsCache;\n config: CloudpackConfig;\n },\n): Promise<{\n /** Changes made to the generated config */\n changes: GeneratedPackageChanges[];\n /** Any warnings encountered */\n warnings: string[];\n /** Set from new package path (to be evaluated) to info about the parent. */\n pathsToEvaluate: Set<string>;\n /** Package paths for which dependencies where included or excluded, so the package should be re-processed. */\n pathsToRefresh: Set<string>;\n}> {\n const { info, definition, packagePath, resolveMap } = options;\n const { packages, config } = context;\n const displayName = `${definition.name}@${definition.version}`;\n const changes: GeneratedPackageChanges[] = [];\n const warnings: string[] = [];\n const pathsToEvaluate = new Set<string>();\n const pathsToRefresh = new Set<string>();\n\n const { name, version } = definition;\n if (!name || !version) {\n throw new Error(`Package \"${displayName}\" is missing a name or version.`);\n }\n\n const consumedDependencies = new Set<string>();\n // Iterate through imports and find their path from the resolve map.\n for (const entryInfo of Object.values(info.entry)) {\n // iterate through all package names of result.info.entry.consumes\n for (const consume of entryInfo.consumes) {\n consumedDependencies.add(consume.packageName);\n }\n }\n\n // Iterate through imports and find their path from the resolve map.\n for (const dependencyName of consumedDependencies) {\n // Add to includedDependencies if it is not listed as a dependency or peer dependency in the package.json.\n if (\n definition.dependencies?.[dependencyName] ||\n definition.peerDependencies?.[dependencyName] ||\n dependencyName === name\n ) {\n // Skip if it is listed as a dependency, peer dependency or it is importing itself.\n continue;\n }\n\n // If the dependency is not listed in the package.json, add an error or warning.\n if (!definition.devDependencies?.[dependencyName]) {\n const resolveEntry = findResolveMapEntry({ definition, packageName: dependencyName, resolveMap });\n const dependencyPath = resolveEntry?.path;\n const dependencyDefinition = dependencyPath ? await packages.get(dependencyPath) : undefined;\n const message =\n `Optimize Dependencies: Package \"${displayName}\" imports from the package \"${dependencyName}\" but it is not listed in dependencies. ` +\n `Ensure that \"${dependencyName}\" is listed in dependencies of \"${displayName}\".`;\n if (!dependencyPath || !dependencyDefinition) {\n // If the dependency is not found in the resolve map, add an error.\n // Error is already caught by evaluateImportsForOverrides.\n continue;\n } else {\n // If the dependency is found in the resolve map, add a warning.\n warnings.push(message);\n }\n }\n\n // Make sure to add the package to the list of packages to evaluate.\n pathsToEvaluate.add(packagePath);\n\n // Add to includedDependencies\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings = getPackageSettings({\n config: { generated: { packageSettings } },\n name,\n version,\n firstMatch: true,\n }).generatedPackageSettings;\n\n if (!generatedPackageSettings) {\n generatedPackageSettings = {\n match: { name, version: `^${version}` },\n };\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.includedDependencies ??= [];\n\n // Add to includedDependencies if it is not already included.\n if (generatedPackageSettings.includedDependencies.includes(dependencyName)) {\n continue;\n }\n\n generatedPackageSettings.includedDependencies.push(dependencyName);\n\n changes.push({\n name,\n version,\n path: packagePath,\n changes: [\n {\n type: 'included-dependency',\n change: dependencyName,\n reason: `Imported by \"${displayName}\"`,\n },\n ],\n });\n\n pathsToRefresh.add(packagePath);\n }\n\n const dependencies = new Set([\n ...Object.keys(definition.dependencies ?? {}),\n ...Object.keys(definition.peerDependencies ?? {}),\n ]);\n\n // Iterate through dependencies and find unused.\n for (const dependencyName of dependencies) {\n if (consumedDependencies.has(dependencyName)) {\n continue;\n }\n\n pathsToEvaluate.add(packagePath);\n\n // Add to excludedDependencies\n const packageSettings = (config.generated.packageSettings ??= []);\n let generatedPackageSettings = getPackageSettings({\n config: { generated: { packageSettings } },\n name,\n version,\n firstMatch: true,\n }).generatedPackageSettings;\n\n if (!generatedPackageSettings) {\n generatedPackageSettings = {\n match: { name, version: `^${version}` },\n };\n packageSettings.push(generatedPackageSettings);\n }\n\n generatedPackageSettings.excludedDependencies ??= [];\n\n // Add to includedDependencies if it is not already included.\n if (generatedPackageSettings.excludedDependencies.includes(dependencyName)) {\n continue;\n }\n\n generatedPackageSettings.excludedDependencies.push(dependencyName);\n\n changes.push({\n name,\n version,\n path: packagePath,\n changes: [\n {\n type: 'excluded-dependency',\n change: dependencyName,\n reason: `Not imported by \"${displayName}\"`,\n },\n ],\n });\n\n pathsToRefresh.add(packagePath);\n }\n return { warnings, changes, pathsToEvaluate, pathsToRefresh };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"verifyExports.js","sourceRoot":"","sources":["../../../src/commands/init/verifyExports.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ResolveMap, findResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\n\n/**\n * Checks that the imports/exports of packages match.\n * To be called before `summarize`.\n * @param packageResults - The package results to check.\n * @param resolveMap - The resolve map used to find the imported packages.\n */\nexport function verifyExports(\n packageResults: Record<string, InitPackageResult>,\n resolveMap: ResolveMap,\n): InitPackageResult[] {\n const allWarnings: InitPackageResult[] = [];\n const packageResultsArray = Object.values(packageResults);\n\n // Iterate through each package\n for (const packagePath in packageResults) {\n const result = packageResults[packagePath];\n\n // Skip packages with errors\n if (!result || result.errors?.length) {\n continue;\n }\n\n const { info } = result;\n const definition = {\n name: result.name,\n version: result.version,\n path: result.path,\n };\n\n const packageWarning: InitPackageResult = {\n ...definition,\n };\n // Makes sure that the warnings array is initialized and typescript happy.\n packageWarning.warnings = [];\n\n // Skip packages with no info\n if (!info) {\n packageWarning.warnings.push({ text: `Can't find bundle info` });\n allWarnings.push(packageWarning);\n continue;\n }\n\n // Iterate through each entry\n for (const required of Object.values(info.entry ?? {})) {\n const { consumes, bundlePath } = required;\n\n // Skip entries with no imports\n if (!consumes?.length) {\n continue;\n }\n\n const namedExports: string[] = [];\n let missingExport = false;\n\n // Iterate through each imported package\n for (const { packageName, importPath, names } of consumes) {\n let prettyImportPath = importPath;\n const entry = findResolveMapEntry({ packageName, definition, resolveMap });\n\n // Remove leading dot from import path\n if (importPath.startsWith('.')) {\n prettyImportPath = importPath.substring(1);\n }\n\n // Warn if we can't find the imported package in the resolve map\n if (!entry) {\n packageWarning.warnings.push({\n text: `Can't find entry in resolve map for ${packageName}`,\n });\n continue;\n }\n\n const packageResult = packageResultsArray.find((r) => r.name === entry.name && r.version === entry.version);\n\n // Warn if we can't find the imported package in the package results\n if (!packageResult) {\n packageWarning.warnings.push({\n text: `In ${bundlePath} can't find package result of ${packageName}@${entry.version}`,\n });\n continue;\n }\n\n // Warn if the imported package has no entry for the import path\n if (!packageResult.info?.entry?.[importPath] && !packageResult.info?.entry?.[importPath + '.js']) {\n packageWarning.warnings.push({\n text: `In ${bundlePath} can't find entry ${importPath} for ${packageName}@${entry.version})`,\n });\n continue;\n }\n\n const { bundlePath: importBundlePath, produces: importProduces } =\n packageResult.info.entry[importPath] || packageResult.info?.entry?.[importPath + '.js'] || {};\n\n const location = `${packageName}@${entry.version}${prettyImportPath} ${importBundlePath}`;\n const missingNamedExports = [];\n\n const catchAll = [];\n if (importProduces.includes('*')) {\n catchAll.push('*');\n }\n if (importProduces.includes('default')) {\n catchAll.push('default');\n }\n\n // Iterate through each imported name\n for (const name of names) {\n // Warn if the imported name is not exported\n if ((name !== '*' && !importProduces.includes(name)) || (name === '*' && importProduces.length === 0)) {\n missingExport = true;\n // Warn if the imported name is not exported\n missingNamedExports.push(name);\n }\n }\n\n if (missingNamedExports.length) {\n namedExports.push(\n `${missingNamedExports.join(', ')} from ${location}${\n catchAll.length ? `, but it exports ${catchAll.join(', ')} which might be dynamically generated` : ''\n }`,\n );\n }\n }\n\n // Warn if the entry has missing exports\n if (missingExport) {\n packageWarning.warnings.push({\n text: `In ${bundlePath} can't find exports:\\n` + namedExports.join('\\n'),\n });\n }\n }\n if (packageWarning.warnings?.length) {\n allWarnings.push(packageWarning);\n }\n }\n\n return allWarnings;\n}\n"]}
1
+ {"version":3,"file":"verifyExports.js","sourceRoot":"","sources":["../../../src/commands/init/verifyExports.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ResolveMap, findResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport type { InitPackageResult } from './types/InitPackageResult.js';\n\n/**\n * Checks that the imports/exports of packages match.\n * To be called before `summarize`.\n * @param packageResults - The package results to check.\n * @param resolveMap - The resolve map used to find the imported packages.\n */\nexport function verifyExports(\n packageResults: Record<string, InitPackageResult>,\n resolveMap: ResolveMap,\n): InitPackageResult[] {\n const allWarnings: InitPackageResult[] = [];\n const packageResultsArray = Object.values(packageResults);\n\n // Iterate through each package\n for (const packagePath in packageResults) {\n const result = packageResults[packagePath];\n\n // Skip packages with errors\n if (!result || result.errors?.length) {\n continue;\n }\n\n const { info } = result;\n const definition = {\n name: result.name,\n version: result.version,\n path: result.path,\n };\n\n const packageWarning: InitPackageResult = {\n ...definition,\n };\n // Makes sure that the warnings array is initialized and typescript happy.\n packageWarning.warnings = [];\n\n // Skip packages with no info\n if (!info) {\n packageWarning.warnings.push({ text: `Can't find bundle info` });\n allWarnings.push(packageWarning);\n continue;\n }\n\n // Iterate through each entry\n for (const required of Object.values(info.entry ?? {})) {\n const { consumes, bundlePath } = required;\n\n // Skip entries with no imports\n if (!consumes?.length) {\n continue;\n }\n\n const namedExports: string[] = [];\n let missingExport = false;\n\n // Iterate through each imported package\n for (const { packageName, importPath, names } of consumes) {\n let prettyImportPath = importPath;\n const entry = findResolveMapEntry({ packageName, definition, resolveMap });\n\n // Remove leading dot from import path\n if (importPath.startsWith('.')) {\n prettyImportPath = importPath.substring(1);\n }\n\n // Warn if we can't find the imported package in the resolve map\n if (!entry) {\n packageWarning.warnings.push({\n text: `Can't find entry in resolve map for ${packageName}`,\n });\n continue;\n }\n\n const packageResult = packageResultsArray.find((r) => r.name === entry.name && r.version === entry.version);\n\n // Warn if we can't find the imported package in the package results\n if (!packageResult) {\n packageWarning.warnings.push({\n text: `In ${bundlePath} can't find package result of ${packageName}@${entry.version}`,\n });\n continue;\n }\n\n // Warn if the imported package has no entry for the import path\n if (!packageResult.info?.entry?.[importPath] && !packageResult.info?.entry?.[importPath + '.js']) {\n packageWarning.warnings.push({\n text: `In ${bundlePath} can't find entry ${importPath} for ${packageName}@${entry.version})`,\n });\n continue;\n }\n\n const { bundlePath: importBundlePath, produces: importProduces } =\n packageResult.info.entry[importPath] || packageResult.info?.entry?.[importPath + '.js'] || {};\n\n const location = `${packageName}@${entry.version}${prettyImportPath} ${importBundlePath}`;\n const missingNamedExports = [];\n\n const catchAll = [];\n if (importProduces.includes('*')) {\n catchAll.push('*');\n }\n if (importProduces.includes('default')) {\n catchAll.push('default');\n }\n\n // Iterate through each imported name\n for (const name of names) {\n // Warn if the imported name is not exported\n if ((name !== '*' && !importProduces.includes(name)) || (name === '*' && importProduces.length === 0)) {\n missingExport = true;\n // Warn if the imported name is not exported\n missingNamedExports.push(name);\n }\n }\n\n if (missingNamedExports.length) {\n namedExports.push(\n `${missingNamedExports.join(', ')} from ${location}${\n catchAll.length ? `, but it exports ${catchAll.join(', ')} which might be dynamically generated` : ''\n }`,\n );\n }\n }\n\n // Warn if the entry has missing exports\n if (missingExport) {\n packageWarning.warnings.push({\n text: `In ${bundlePath} can't find exports:\\n` + namedExports.join('\\n'),\n });\n }\n }\n if (packageWarning.warnings?.length) {\n allWarnings.push(packageWarning);\n }\n }\n\n return allWarnings;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"createRoutes.js","sourceRoot":"","sources":["../../../../src/commands/start/appServer/createRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { Express, Request, Response } from '@ms-cloudpack/create-express-app';\nimport { express } from '@ms-cloudpack/create-express-app';\nimport { createImportMap } from '@ms-cloudpack/package-utilities';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\nimport path from 'path';\nimport type { BundleServer } from '../../../types/BundleServer.js';\nimport type { ApiServer, Session } from '@ms-cloudpack/api-server';\nimport { getHtmlResponse } from './getHtmlResponse.js';\nimport { getInlineScripts } from './inlineScripts/getInlineScripts.js';\nimport { setHeaders } from './setHeaders.js';\nimport type { CloudpackConfig, PackageJson } from '@ms-cloudpack/config-types';\nimport type { PackageImportPaths } from '@ms-cloudpack/package-utilities';\nimport type { PackageHashes } from '@ms-cloudpack/package-hashes';\n\n/**\n * Creates the routes for the express app, considering how the config is defined.\n */\nexport function createRoutes({\n app,\n url,\n session,\n definition,\n bundleServer,\n apiServer,\n config,\n packages,\n packageImportPaths,\n packageHashes,\n}: {\n app: Express;\n url: string;\n session: Session;\n definition: PackageJson;\n bundleServer: BundleServer;\n apiServer: ApiServer;\n config: CloudpackConfig;\n packages: PackageDefinitionsCache;\n packageImportPaths: PackageImportPaths;\n packageHashes: PackageHashes;\n}) {\n const routes = [...(config.devServer?.routes || [])];\n const hasDefaultRoute = routes.some((route) => route.match === '*' || route.match === '/');\n\n if (!hasDefaultRoute) {\n routes.push({\n match: '*',\n exportEntry: '.',\n });\n }\n\n // Hashes from external packages to be used in the import map.\n const getPackageHash = (packagePath: string) => {\n return packageHashes.get({ packagePath, isSourceHashingEnabled: false });\n };\n\n for (const route of routes) {\n if (route.staticPath) {\n app.use(route.match, express.static(path.resolve(session.appPath, route.staticPath)));\n } else {\n app.get(route.match, (req: Request, res: Response) => {\n (async () => {\n // Build the import map if it hasn't been built yet for this session version.\n const importMap =\n session.getImportMap() ||\n session.setImportMap(\n await createImportMap(\n {\n resolveMap: session.resolveMap,\n bundleServerUrl: bundleServer.url,\n sessionVersion: session.getSessionVersion(),\n targetVersions: session.targetVersions,\n hashPackages: config.features?.hashPackages,\n },\n { packages, packageImportPaths, getPackageHash, config: session.config },\n ),\n );\n\n // Parse the request path, extension, grab the overlay script path.\n const requestPath = slash(req.path.substring(1));\n const requestExt = path.extname(requestPath);\n const overlayScript = importMap.imports['@ms-cloudpack/overlay'];\n const entryScript =\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n route.exportEntry && importMap.imports[slash(path.join(definition.name!, route.exportEntry))];\n // Set the appropriate Cloudpack headers/cookies in the response.\n // TODO: setting the headers here prohibits cases where the page rendering is owned by existing server code\n // that can only accept changing the scripts. We should consider moving to a model where an initial script\n // fetch loads the import map and sets Cloudpack settings in local storage rather than headers/cookies.\n setHeaders({ res, session, apiServer, bundleServer });\n const inlineScripts = await getInlineScripts();\n const { content, statusCode, contentType } = await getHtmlResponse({\n route,\n baseUrl: url,\n importMap,\n overlayScript,\n entryScript,\n session,\n definition,\n inlineScripts,\n req,\n res,\n });\n\n res.type(contentType).status(statusCode).send(content).end();\n\n console.debug(`App server: Request: ${requestPath}, ext: ${requestExt}`);\n })().catch((err) => {\n console.error((err as Error)?.stack || err);\n res.status(500).send(`Error loading app: ${err}`);\n });\n });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"createRoutes.js","sourceRoot":"","sources":["../../../../src/commands/start/appServer/createRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { Express, Request, Response } from '@ms-cloudpack/create-express-app';\nimport { express } from '@ms-cloudpack/create-express-app';\nimport { createImportMap } from '@ms-cloudpack/package-utilities';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\nimport path from 'path';\nimport type { BundleServer } from '../../../types/BundleServer.js';\nimport type { ApiServer, Session } from '@ms-cloudpack/api-server';\nimport { getHtmlResponse } from './getHtmlResponse.js';\nimport { getInlineScripts } from './inlineScripts/getInlineScripts.js';\nimport { setHeaders } from './setHeaders.js';\nimport type { CloudpackConfig, PackageJson } from '@ms-cloudpack/config-types';\nimport type { PackageImportPaths } from '@ms-cloudpack/package-utilities';\nimport type { PackageHashes } from '@ms-cloudpack/package-hashes';\n\n/**\n * Creates the routes for the express app, considering how the config is defined.\n */\nexport function createRoutes({\n app,\n url,\n session,\n definition,\n bundleServer,\n apiServer,\n config,\n packages,\n packageImportPaths,\n packageHashes,\n}: {\n app: Express;\n url: string;\n session: Session;\n definition: PackageJson;\n bundleServer: BundleServer;\n apiServer: ApiServer;\n config: CloudpackConfig;\n packages: PackageDefinitionsCache;\n packageImportPaths: PackageImportPaths;\n packageHashes: PackageHashes;\n}) {\n const routes = [...(config.devServer?.routes || [])];\n const hasDefaultRoute = routes.some((route) => route.match === '*' || route.match === '/');\n\n if (!hasDefaultRoute) {\n routes.push({\n match: '*',\n exportEntry: '.',\n });\n }\n\n // Hashes from external packages to be used in the import map.\n const getPackageHash = (packagePath: string) => {\n return packageHashes.get({ packagePath, isSourceHashingEnabled: false });\n };\n\n for (const route of routes) {\n if (route.staticPath) {\n app.use(route.match, express.static(path.resolve(session.appPath, route.staticPath)));\n } else {\n app.get(route.match, (req: Request, res: Response) => {\n (async () => {\n // Build the import map if it hasn't been built yet for this session version.\n const importMap =\n session.getImportMap() ||\n session.setImportMap(\n await createImportMap(\n {\n resolveMap: session.resolveMap,\n bundleServerUrl: bundleServer.url,\n sessionVersion: session.getSessionVersion(),\n targetVersions: session.targetVersions,\n hashPackages: config.features?.hashPackages,\n },\n { packages, packageImportPaths, getPackageHash, config: session.config },\n ),\n );\n\n // Parse the request path, extension, grab the overlay script path.\n const requestPath = slash(req.path.substring(1));\n const requestExt = path.extname(requestPath);\n const overlayScript = importMap.imports['@ms-cloudpack/overlay'];\n const entryScript =\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n route.exportEntry && importMap.imports[slash(path.join(definition.name!, route.exportEntry))];\n // Set the appropriate Cloudpack headers/cookies in the response.\n // TODO: setting the headers here prohibits cases where the page rendering is owned by existing server code\n // that can only accept changing the scripts. We should consider moving to a model where an initial script\n // fetch loads the import map and sets Cloudpack settings in local storage rather than headers/cookies.\n setHeaders({ res, session, apiServer, bundleServer });\n const inlineScripts = await getInlineScripts();\n const { content, statusCode, contentType } = await getHtmlResponse({\n route,\n baseUrl: url,\n importMap,\n overlayScript,\n entryScript,\n session,\n definition,\n inlineScripts,\n req,\n res,\n });\n\n res.type(contentType).status(statusCode).send(content).end();\n\n console.debug(`App server: Request: ${requestPath}, ext: ${requestExt}`);\n })().catch((err) => {\n console.error((err as Error)?.stack || err);\n res.status(500).send(`Error loading app: ${err}`);\n });\n });\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"exitIfPortUnavailable.js","sourceRoot":"","sources":["../../../../src/commands/start/appServer/exitIfPortUnavailable.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY,EAAE,WAAmB,EAAE,KAAwB;IAC/F,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9D,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,8BAA8B,EAAE;QAC1E,MAAM,mBAAmB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;YAC/D,CAAC,CAAC,iKAAiK;YACnK,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,KAAK,CACX,8BAA8B,WAAW,0DAA0D,SAAS,CAAC,IAAI,CAC/G,IAAI,CACL,uCAAuC,EACxC,mBAAmB,CACpB,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC","sourcesContent":["/**\n * Report the error and exit if the port is already in use.\n */\nexport function exitIfPortUnavailable(err: unknown, projectName: string, ports: number | number[]) {\n const portRange = typeof ports === 'number' ? [ports] : ports;\n if (err instanceof Error && err.message === 'Specified port not available') {\n const portNeedsPrivileges = portRange.some((port) => port < 1024)\n ? '\\nNote: for Mac/Linux/WSL users, you may need to run Cloudpack with elevated privileges to use port numbers less than 1024. Try running `sudo cloudpack start`.'\n : '';\n console.error(\n `Cloudpack could not start \"${projectName}\" because no port from the allowed list was available: ${portRange.join(\n ', ',\n )}. Close other programs and try again.`,\n portNeedsPrivileges,\n );\n\n process.exit(1);\n }\n}\n"]}
1
+ {"version":3,"file":"exitIfPortUnavailable.js","sourceRoot":"","sources":["../../../../src/commands/start/appServer/exitIfPortUnavailable.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY,EAAE,WAAmB,EAAE,KAAwB;IAC/F,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9D,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,8BAA8B,EAAE,CAAC;QAC3E,MAAM,mBAAmB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;YAC/D,CAAC,CAAC,iKAAiK;YACnK,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,KAAK,CACX,8BAA8B,WAAW,0DAA0D,SAAS,CAAC,IAAI,CAC/G,IAAI,CACL,uCAAuC,EACxC,mBAAmB,CACpB,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC","sourcesContent":["/**\n * Report the error and exit if the port is already in use.\n */\nexport function exitIfPortUnavailable(err: unknown, projectName: string, ports: number | number[]) {\n const portRange = typeof ports === 'number' ? [ports] : ports;\n if (err instanceof Error && err.message === 'Specified port not available') {\n const portNeedsPrivileges = portRange.some((port) => port < 1024)\n ? '\\nNote: for Mac/Linux/WSL users, you may need to run Cloudpack with elevated privileges to use port numbers less than 1024. Try running `sudo cloudpack start`.'\n : '';\n console.error(\n `Cloudpack could not start \"${projectName}\" because no port from the allowed list was available: ${portRange.join(\n ', ',\n )}. Close other programs and try again.`,\n portNeedsPrivileges,\n );\n\n process.exit(1);\n }\n}\n"]}