@ms-cloudpack/api-server 0.61.1 → 0.61.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/lib/apis/addPackageOverride.d.ts.map +1 -1
  2. package/lib/apis/addPackageOverride.js +3 -0
  3. package/lib/apis/addPackageOverride.js.map +1 -1
  4. package/lib/apis/ensurePackageBundled.js +5 -4
  5. package/lib/apis/ensurePackageBundled.js.map +1 -1
  6. package/lib/apis/syncDownload.d.ts.map +1 -1
  7. package/lib/apis/syncDownload.js +3 -1
  8. package/lib/apis/syncDownload.js.map +1 -1
  9. package/lib/apis/syncUpload.d.ts.map +1 -1
  10. package/lib/apis/syncUpload.js +17 -3
  11. package/lib/apis/syncUpload.js.map +1 -1
  12. package/lib/types/CloudAppContext.d.ts +12 -0
  13. package/lib/types/CloudAppContext.d.ts.map +1 -0
  14. package/lib/types/CloudAppContext.js +2 -0
  15. package/lib/types/CloudAppContext.js.map +1 -0
  16. package/lib/utilities/bundleTask.d.ts.map +1 -1
  17. package/lib/utilities/bundleTask.js +15 -4
  18. package/lib/utilities/bundleTask.js.map +1 -1
  19. package/lib/utilities/createBundleTask.d.ts.map +1 -1
  20. package/lib/utilities/createBundleTask.js +4 -2
  21. package/lib/utilities/createBundleTask.js.map +1 -1
  22. package/lib/utilities/createRemoteCacheClientOperationOptions.d.ts +2 -0
  23. package/lib/utilities/createRemoteCacheClientOperationOptions.d.ts.map +1 -1
  24. package/lib/utilities/createRemoteCacheClientOperationOptions.js +2 -4
  25. package/lib/utilities/createRemoteCacheClientOperationOptions.js.map +1 -1
  26. package/lib/utilities/formatBundleTaskResult.d.ts +2 -2
  27. package/lib/utilities/formatBundleTaskResult.d.ts.map +1 -1
  28. package/lib/utilities/formatBundleTaskResult.js +18 -16
  29. package/lib/utilities/formatBundleTaskResult.js.map +1 -1
  30. package/lib/utilities/getBundleLocation.d.ts +4 -0
  31. package/lib/utilities/getBundleLocation.d.ts.map +1 -1
  32. package/lib/utilities/getBundleLocation.js +8 -8
  33. package/lib/utilities/getBundleLocation.js.map +1 -1
  34. package/lib/utilities/getFileSizeSync.d.ts.map +1 -1
  35. package/lib/utilities/getFileSizeSync.js +8 -1
  36. package/lib/utilities/getFileSizeSync.js.map +1 -1
  37. package/lib/utilities/getPackagesToSync.d.ts +4 -1
  38. package/lib/utilities/getPackagesToSync.d.ts.map +1 -1
  39. package/lib/utilities/getPackagesToSync.js +6 -5
  40. package/lib/utilities/getPackagesToSync.js.map +1 -1
  41. package/lib/utilities/getRemoteCachePackageId.d.ts +2 -0
  42. package/lib/utilities/getRemoteCachePackageId.d.ts.map +1 -1
  43. package/lib/utilities/getRemoteCachePackageId.js +4 -4
  44. package/lib/utilities/getRemoteCachePackageId.js.map +1 -1
  45. package/lib/utilities/readResultFromCache.d.ts +2 -0
  46. package/lib/utilities/readResultFromCache.d.ts.map +1 -1
  47. package/lib/utilities/readResultFromCache.js +2 -2
  48. package/lib/utilities/readResultFromCache.js.map +1 -1
  49. package/lib/utilities/serializeContext.d.ts +3 -0
  50. package/lib/utilities/serializeContext.d.ts.map +1 -0
  51. package/lib/utilities/serializeContext.js +13 -0
  52. package/lib/utilities/serializeContext.js.map +1 -0
  53. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"addPackageOverride.d.ts","sourceRoot":"","sources":["../../src/apis/addPackageOverride.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAWvD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,SAAS,CACf,eAAe,EACf,KAAK,GAAG,eAAe,GAAG,UAAU,GAAG,YAAY,GAAG,iBAAiB,EACvE,QAAQ,GAAG,wBAAwB,GAAG,YAAY,GAAG,UAAU,CAChE,GACA,OAAO,CAAC,OAAO,CAAC,CAqBlB;yBA3BqB,kBAAkB"}
1
+ {"version":3,"file":"addPackageOverride.d.ts","sourceRoot":"","sources":["../../src/apis/addPackageOverride.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAcvD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,SAAS,CACf,eAAe,EACf,KAAK,GAAG,eAAe,GAAG,UAAU,GAAG,YAAY,GAAG,iBAAiB,EACvE,QAAQ,GAAG,wBAAwB,GAAG,YAAY,GAAG,UAAU,CAChE,GACA,OAAO,CAAC,OAAO,CAAC,CAsBlB;yBA5BqB,kBAAkB"}
@@ -10,6 +10,8 @@ const ZodAddPackageOverrideInput = matchingZodObject({
10
10
  version: z.string().optional(),
11
11
  issuerUrl: z.string().optional(),
12
12
  });
13
+ // TODO: consider whether this should be hardcoded or not
14
+ const targetEnvironment = 'browser';
13
15
  /**
14
16
  * Adds an override to the Cloudpack config.
15
17
  */
@@ -23,6 +25,7 @@ export async function addPackageOverride(params) {
23
25
  packagePath: entry.path,
24
26
  isSourceHashingEnabled: false,
25
27
  shouldRecalculate: true,
28
+ targetEnvironment,
26
29
  });
27
30
  taskRunner.remove(entry.path);
28
31
  // Incrementing the target version will cause the import map to be recalculated.
@@ -1 +1 @@
1
- {"version":3,"file":"addPackageOverride.js","sourceRoot":"","sources":["../../src/apis/addPackageOverride.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,MAAM,0BAA0B,GAAG,iBAAiB,CAAkB;IACpE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAIC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAC9B,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC;IACnF,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjF,IAAI,KAAK,IAAI,aAAa,EAAE,CAAC;QAC3B,wFAAwF;QACxF,MAAM,aAAa,CAAC,GAAG,CAAC;YACtB,WAAW,EAAE,KAAK,CAAC,IAAI;YACvB,sBAAsB,EAAE,KAAK;YAC7B,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC;QACH,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,gFAAgF;QAChF,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;YAC/C,uEAAuE;YACvE,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,kBAAkB,CAAC,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\nimport { publicProcedure } from '../trpc/common.js';\nimport { addOverride } from '../utilities/addOverride.js';\nimport { notifyReload } from '../utilities/notifyReload.js';\nimport type { OverrideOptions } from '../types/OverrideOptions.js';\nimport type { ApiParams } from '../types/ApiParams.js';\nimport { errorEntrySource } from '../data/busSources.js';\nimport { matchingZodObject } from '../utilities/matchingZodObject.js';\n\nconst ZodAddPackageOverrideInput = matchingZodObject<OverrideOptions>({\n packageName: z.string(),\n importPath: z.string(),\n version: z.string().optional(),\n issuerUrl: z.string().optional(),\n});\n\n/**\n * Adds an override to the Cloudpack config.\n */\nexport async function addPackageOverride(\n params: ApiParams<\n OverrideOptions,\n 'bus' | 'packageHashes' | 'packages' | 'taskRunner' | 'telemetryClient',\n 'config' | 'incrementTargetVersion' | 'resolveMap' | 'sequence'\n >,\n): Promise<boolean> {\n const { input, ctx } = params;\n const { session, bus, packages, taskRunner, packageHashes, telemetryClient } = ctx;\n const { addedOverride, entry } = await addOverride(input, { session, packages });\n if (entry && addedOverride) {\n // The import map hash needs to be recalculated to ensure that the client is up to date.\n await packageHashes.get({\n packagePath: entry.path,\n isSourceHashingEnabled: false,\n shouldRecalculate: true,\n });\n taskRunner.remove(entry.path);\n // Incrementing the target version will cause the import map to be recalculated.\n session.incrementTargetVersion(entry.path);\n if (session.config.features?.autoUpdateEntries) {\n // We can clear the error message now that the override has been added.\n bus.publish(errorEntrySource, '');\n }\n await notifyReload({ reason: 'add-package-override' }, { bus, session, telemetryClient });\n }\n return addedOverride;\n}\n\naddPackageOverride.procedure = publicProcedure.input(ZodAddPackageOverrideInput).mutation(addPackageOverride);\n"]}
1
+ {"version":3,"file":"addPackageOverride.js","sourceRoot":"","sources":["../../src/apis/addPackageOverride.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,MAAM,0BAA0B,GAAG,iBAAiB,CAAkB;IACpE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,yDAAyD;AACzD,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAIC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAC9B,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC;IACnF,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjF,IAAI,KAAK,IAAI,aAAa,EAAE,CAAC;QAC3B,wFAAwF;QACxF,MAAM,aAAa,CAAC,GAAG,CAAC;YACtB,WAAW,EAAE,KAAK,CAAC,IAAI;YACvB,sBAAsB,EAAE,KAAK;YAC7B,iBAAiB,EAAE,IAAI;YACvB,iBAAiB;SAClB,CAAC,CAAC;QACH,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,gFAAgF;QAChF,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;YAC/C,uEAAuE;YACvE,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,kBAAkB,CAAC,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\nimport { publicProcedure } from '../trpc/common.js';\nimport { addOverride } from '../utilities/addOverride.js';\nimport { notifyReload } from '../utilities/notifyReload.js';\nimport type { OverrideOptions } from '../types/OverrideOptions.js';\nimport type { ApiParams } from '../types/ApiParams.js';\nimport { errorEntrySource } from '../data/busSources.js';\nimport { matchingZodObject } from '../utilities/matchingZodObject.js';\n\nconst ZodAddPackageOverrideInput = matchingZodObject<OverrideOptions>({\n packageName: z.string(),\n importPath: z.string(),\n version: z.string().optional(),\n issuerUrl: z.string().optional(),\n});\n\n// TODO: consider whether this should be hardcoded or not\nconst targetEnvironment = 'browser';\n\n/**\n * Adds an override to the Cloudpack config.\n */\nexport async function addPackageOverride(\n params: ApiParams<\n OverrideOptions,\n 'bus' | 'packageHashes' | 'packages' | 'taskRunner' | 'telemetryClient',\n 'config' | 'incrementTargetVersion' | 'resolveMap' | 'sequence'\n >,\n): Promise<boolean> {\n const { input, ctx } = params;\n const { session, bus, packages, taskRunner, packageHashes, telemetryClient } = ctx;\n const { addedOverride, entry } = await addOverride(input, { session, packages });\n if (entry && addedOverride) {\n // The import map hash needs to be recalculated to ensure that the client is up to date.\n await packageHashes.get({\n packagePath: entry.path,\n isSourceHashingEnabled: false,\n shouldRecalculate: true,\n targetEnvironment,\n });\n taskRunner.remove(entry.path);\n // Incrementing the target version will cause the import map to be recalculated.\n session.incrementTargetVersion(entry.path);\n if (session.config.features?.autoUpdateEntries) {\n // We can clear the error message now that the override has been added.\n bus.publish(errorEntrySource, '');\n }\n await notifyReload({ reason: 'add-package-override' }, { bus, session, telemetryClient });\n }\n return addedOverride;\n}\n\naddPackageOverride.procedure = publicProcedure.input(ZodAddPackageOverrideInput).mutation(addPackageOverride);\n"]}
@@ -68,8 +68,8 @@ async function ensurePackageBundledInternal(params, ctx) {
68
68
  throw new Error(`Could not find package ${name} in the resolve map.`);
69
69
  }
70
70
  const isExternal = !!packageEntry.isExternal;
71
- let hash = undefined;
72
- let sourceHash = undefined;
71
+ let hash;
72
+ let sourceHash;
73
73
  if (useHashAsId) {
74
74
  // If we are using the hash as the task id, we need to calculate it once and pass it to the task
75
75
  // to prevent a race condition in which we get a different hash than the one used in the task id.
@@ -77,6 +77,7 @@ async function ensurePackageBundledInternal(params, ctx) {
77
77
  packagePath: packageEntry.path,
78
78
  isSourceHashingEnabled: false,
79
79
  shouldRecalculate: true,
80
+ targetEnvironment,
80
81
  });
81
82
  if (!packageEntry.isExternal) {
82
83
  // We only need the source hash for internal packages for cache validation.
@@ -84,13 +85,13 @@ async function ensurePackageBundledInternal(params, ctx) {
84
85
  packagePath: packageEntry.path,
85
86
  isSourceHashingEnabled: true,
86
87
  shouldRecalculate: true,
88
+ targetEnvironment,
87
89
  });
88
90
  }
89
91
  }
90
92
  const bundleRequest = {
91
93
  // TODO: David had this as follows--think about what it should be
92
- // id: hash ?? `${packageEntry.path}--env:${targetEnvironment}`,
93
- id: (useHashAsId && hash) || packageEntry.path,
94
+ id: hash ?? `${packageEntry.path}--env:${targetEnvironment}`,
94
95
  packagePath: packageEntry.path,
95
96
  packageName: name,
96
97
  targetEnvironment,
@@ -1 +1 @@
1
- {"version":3,"file":"ensurePackageBundled.js","sourceRoot":"","sources":["../../src/apis/ensurePackageBundled.ts"],"names":[],"mappings":"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","sourcesContent":["import { findResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport { notifyReload } from '../utilities/notifyReload.js';\nimport type { BundleRequest } from '../types/BundleRequest.js';\nimport { createBundleTask } from '../utilities/createBundleTask.js';\nimport type { Context } from '../types/Context.js';\nimport type { WatchOptions } from '@ms-cloudpack/file-watcher';\nimport { getConsumedDependencies } from '../utilities/getConsumedDependencies.js';\nimport type { TargetEnvironment, WithOptional } from '@ms-cloudpack/common-types';\n\n/**\n * Input for `ensurePackageBundled`.\n */\nexport interface EnsurePackageBundledInput\n extends Pick<BundleRequest, 'outputPath' | 'version' | 'disableSourceMaps' | 'shouldGetBundleInfo'> {\n /** Package name */\n name: string;\n /**\n * Target environment for the bundle.\n * @default 'browser'\n */\n targetEnvironment?: TargetEnvironment;\n /** Whether to also ensure dependencies are bundled */\n enqueueDependencies?: boolean;\n /** Whether to re-run the bundle task */\n shouldRerun?: boolean;\n /**\n * Whether to watch for changes (internal packages only).\n * NOTE: requires `ctx.bus` and `ctx.watcher` to be set.\n */\n shouldWatch?: boolean;\n /** Whether to force re-bundling */\n shouldForce?: boolean;\n /** Whether to disable caching. */\n disableCache?: boolean;\n /** Whether to support incremental rebuilds. Defaults to true for internal libraries. */\n isIncremental?: boolean;\n /**\n * Whether to use a hash as the bundle id instead of the path.\n * Reduces performance when used with shouldForce as it hashes twice,\n * but eliminates task cache artifacts when handling many apps.\n */\n useHashAsId?: boolean;\n /** Priority for bundling. Greater priority will be scheduled first (defaults to 0). */\n priority?: number;\n}\n\n/**\n * Result of ensuring a single package is bundled.\n */\nexport interface EnsurePackageBundledResult\n extends Omit<NonNullable<BundleRequest['result']>, 'rebuild' | 'dispose' | 'bundlerName' | 'inputPath'> {\n /** Package name */\n name: string;\n /** Package version */\n version: string;\n /** Package dependency names (prod and peer) */\n dependencies?: string[];\n /** Whether the package is external (not defined in this repo). Unset if it's not found. */\n isExternal?: boolean;\n /** Absolute path of the package. Will be unset if the package couldn't be found. */\n inputPath?: string;\n}\n\n/**\n * Complete output for `ensurePackageBundled`.\n */\nexport interface EnsurePackageBundledOutput {\n /** Result of bundling this package */\n result: EnsurePackageBundledResult;\n /** Results of bundling dependencies */\n dependencies: Promise<EnsurePackageBundledResult[]>;\n}\n\n/**\n * Context for `ensurePackageBundled`. `bus` and `watcher` are only needed if `shouldWatch` is true.\n */\nexport type EnsurePackageBundledContext = WithOptional<Context, 'bus' | 'watcher'>;\n\n/**\n * Checks if the package is bundled or needs bundling, and returns the result.\n * For internal packages, we also notify the watcher to monitor for code changes.\n */\nexport async function ensurePackageBundled(\n input: EnsurePackageBundledInput,\n ctx: EnsurePackageBundledContext,\n): Promise<EnsurePackageBundledOutput> {\n const results: EnsurePackageBundledResult[] = [];\n const visited = new Set<`${string}@${string}`>();\n\n // Bundle the package itself\n let result: EnsurePackageBundledResult;\n let mainDependencies: EnsurePackageBundledInput[];\n try {\n ({ result, dependencyInputs: mainDependencies } = await ensurePackageBundledInternal({ ...input, visited }, ctx));\n } catch (err) {\n return {\n result: getErrorResult(input, err),\n dependencies: Promise.resolve([]),\n };\n }\n\n // Enqueue main dependencies\n // TODO: should processing this queue have a rate limit? right now if enqueueDependencies is enabled,\n // `await dependencies` will fire off all deps at once.\n let pending = 0;\n const dependencies = new Promise<EnsurePackageBundledResult[]>((resolve) => {\n const enqueue = (dependencyInputs: EnsurePackageBundledInput[]) => {\n for (const dependencyInput of dependencyInputs) {\n pending++;\n\n void ensurePackageBundledInternal({ ...dependencyInput, visited }, ctx)\n .then((dependencyBundleResult) => {\n // Save result and enqueue this dep's deps\n results.push(dependencyBundleResult.result);\n enqueue(dependencyBundleResult.dependencyInputs);\n })\n .catch((err) => {\n // If there's an error (most likely that the dependency wasn't found in the resolve map),\n // save it in a result instead of throwing. This generally gives better logging.\n results.push(getErrorResult(dependencyInput, err));\n })\n .then(() => {\n pending--;\n if (!pending) {\n resolve(results);\n }\n });\n }\n };\n\n enqueue(mainDependencies);\n });\n\n return {\n result,\n dependencies,\n };\n}\n\nasync function ensurePackageBundledInternal(\n params: EnsurePackageBundledInput & {\n visited: Set<`${string}@${string}`>;\n },\n ctx: EnsurePackageBundledContext,\n): Promise<{ result: EnsurePackageBundledResult; dependencyInputs: EnsurePackageBundledInput[] }> {\n const { taskRunner, session, watcher, packageHashes, bus, telemetryClient } = ctx;\n const { resolveMap, config } = session;\n const {\n name,\n version,\n shouldWatch,\n disableSourceMaps = config.features?.disableSourceMaps,\n enqueueDependencies = config.features?.enqueueDependencies,\n outputPath,\n shouldGetBundleInfo,\n shouldRerun,\n shouldForce,\n disableCache,\n isIncremental,\n useHashAsId,\n priority,\n targetEnvironment = 'browser',\n visited,\n } = params;\n\n const dependencyInputs: EnsurePackageBundledInput[] = [];\n\n visited.add(`${name}@${version}`);\n\n // First, we find the resolve map entry. This helps us resolve the physical location of the package\n // according to the resolveMap used in the session. (This can change based on linking.)\n const packageEntry = findResolveMapEntry({ packageName: name, version, resolveMap });\n\n if (!packageEntry) {\n throw new Error(`Could not find package ${name} in the resolve map.`);\n }\n\n const isExternal = !!packageEntry.isExternal;\n\n let hash: string | undefined = undefined;\n let sourceHash: string | undefined = undefined;\n\n if (useHashAsId) {\n // If we are using the hash as the task id, we need to calculate it once and pass it to the task\n // to prevent a race condition in which we get a different hash than the one used in the task id.\n hash = await packageHashes.get({\n packagePath: packageEntry.path,\n isSourceHashingEnabled: false,\n shouldRecalculate: true,\n });\n\n if (!packageEntry.isExternal) {\n // We only need the source hash for internal packages for cache validation.\n sourceHash = await packageHashes.get({\n packagePath: packageEntry.path,\n isSourceHashingEnabled: true,\n shouldRecalculate: true,\n });\n }\n }\n\n const bundleRequest: BundleRequest = {\n // TODO: David had this as follows--think about what it should be\n // id: hash ?? `${packageEntry.path}--env:${targetEnvironment}`,\n id: (useHashAsId && hash) || packageEntry.path,\n packagePath: packageEntry.path,\n packageName: name,\n targetEnvironment,\n isExternal,\n isIncremental,\n outputPath,\n version,\n disableSourceMaps,\n shouldGetBundleInfo: shouldGetBundleInfo || enqueueDependencies,\n disableCache,\n mode: config.mode,\n };\n\n // Make priority negative to have retry count set to positive values.\n const retryCount = priority ? -1 * priority : undefined;\n\n const task = createBundleTask({ bundleRequest, force: shouldForce, hash, sourceHash, retryCount }, ctx);\n\n // TODO: Add lage scheduling back.\n const { result } = await taskRunner.add<BundleRequest>(task, { rerun: shouldRerun, priority });\n\n if (!result) {\n throw new Error('Bundle failed, no result');\n }\n\n // For internal packages, make sure we're watching the source to re-trigger bundling.\n if (shouldWatch && !isExternal) {\n if (!bus || !watcher) {\n throw new Error('bus and watcher must be provided in context if shouldWatch is true (this is a bug).');\n }\n\n const definition = await ctx.packages.get(packageEntry.path);\n const watchOptions: WatchOptions = {\n id: bundleRequest.id,\n path: packageEntry.path,\n watchPaths: definition.cloudpack?.inputPaths,\n };\n\n const onPackageChange = async () => {\n const watchedResult = await taskRunner.add<BundleRequest>(task, { rerun: true });\n\n // If the result was successful, notify potential clients for reload.\n if (watchedResult.result?.errors?.length === 0) {\n await notifyReload({ reason: 'on-package-change' }, { bus, session, telemetryClient });\n }\n };\n watcher.watch(watchOptions, () => {\n void onPackageChange();\n });\n }\n\n // If enabled, enqueue dependencies.\n if (enqueueDependencies && result.info) {\n for (const dependencyName of getConsumedDependencies(result.info)) {\n const dependencyVersion = packageEntry.dependencies[dependencyName];\n\n // If we've already visited this package from another package, skip it.\n if (visited.has(`${dependencyName}@${dependencyVersion}`)) {\n continue;\n }\n\n dependencyInputs.push({\n name: dependencyName,\n version: dependencyVersion,\n shouldWatch,\n enqueueDependencies,\n });\n }\n }\n\n return {\n result: {\n version,\n name,\n isExternal,\n ...result,\n },\n dependencyInputs,\n };\n}\n\nfunction getErrorResult(input: EnsurePackageBundledInput, error: unknown): EnsurePackageBundledResult {\n const text = `Error thrown while bundling: ${error instanceof Error ? error.stack || error.message : error}`;\n return {\n name: input.name,\n version: input.version,\n errors: [{ text, source: 'ensurePackageBundled' }],\n };\n}\n\n// This function doesn't have an attached procedure because it's never called via the TRPC server.\n"]}
1
+ {"version":3,"file":"ensurePackageBundled.js","sourceRoot":"","sources":["../../src/apis/ensurePackageBundled.ts"],"names":[],"mappings":"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","sourcesContent":["import { findResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport { notifyReload } from '../utilities/notifyReload.js';\nimport type { BundleRequest } from '../types/BundleRequest.js';\nimport { createBundleTask } from '../utilities/createBundleTask.js';\nimport type { Context } from '../types/Context.js';\nimport type { WatchOptions } from '@ms-cloudpack/file-watcher';\nimport { getConsumedDependencies } from '../utilities/getConsumedDependencies.js';\nimport type { TargetEnvironment, WithOptional } from '@ms-cloudpack/common-types';\n\n/**\n * Input for `ensurePackageBundled`.\n */\nexport interface EnsurePackageBundledInput\n extends Pick<BundleRequest, 'outputPath' | 'version' | 'disableSourceMaps' | 'shouldGetBundleInfo'> {\n /** Package name */\n name: string;\n /**\n * Target environment for the bundle.\n * @default 'browser'\n */\n targetEnvironment?: TargetEnvironment;\n /** Whether to also ensure dependencies are bundled */\n enqueueDependencies?: boolean;\n /** Whether to re-run the bundle task */\n shouldRerun?: boolean;\n /**\n * Whether to watch for changes (internal packages only).\n * NOTE: requires `ctx.bus` and `ctx.watcher` to be set.\n */\n shouldWatch?: boolean;\n /** Whether to force re-bundling */\n shouldForce?: boolean;\n /** Whether to disable caching. */\n disableCache?: boolean;\n /** Whether to support incremental rebuilds. Defaults to true for internal libraries. */\n isIncremental?: boolean;\n /**\n * Whether to use a hash as the bundle id instead of the path.\n * Reduces performance when used with shouldForce as it hashes twice,\n * but eliminates task cache artifacts when handling many apps.\n */\n useHashAsId?: boolean;\n /** Priority for bundling. Greater priority will be scheduled first (defaults to 0). */\n priority?: number;\n}\n\n/**\n * Result of ensuring a single package is bundled.\n */\nexport interface EnsurePackageBundledResult\n extends Omit<NonNullable<BundleRequest['result']>, 'rebuild' | 'dispose' | 'bundlerName' | 'inputPath'> {\n /** Package name */\n name: string;\n /** Package version */\n version: string;\n /** Package dependency names (prod and peer) */\n dependencies?: string[];\n /** Whether the package is external (not defined in this repo). Unset if it's not found. */\n isExternal?: boolean;\n /** Absolute path of the package. Will be unset if the package couldn't be found. */\n inputPath?: string;\n}\n\n/**\n * Complete output for `ensurePackageBundled`.\n */\nexport interface EnsurePackageBundledOutput {\n /** Result of bundling this package */\n result: EnsurePackageBundledResult;\n /** Results of bundling dependencies */\n dependencies: Promise<EnsurePackageBundledResult[]>;\n}\n\n/**\n * Context for `ensurePackageBundled`. `bus` and `watcher` are only needed if `shouldWatch` is true.\n */\nexport type EnsurePackageBundledContext = WithOptional<Context, 'bus' | 'watcher'>;\n\n/**\n * Checks if the package is bundled or needs bundling, and returns the result.\n * For internal packages, we also notify the watcher to monitor for code changes.\n */\nexport async function ensurePackageBundled(\n input: EnsurePackageBundledInput,\n ctx: EnsurePackageBundledContext,\n): Promise<EnsurePackageBundledOutput> {\n const results: EnsurePackageBundledResult[] = [];\n const visited = new Set<`${string}@${string}`>();\n\n // Bundle the package itself\n let result: EnsurePackageBundledResult;\n let mainDependencies: EnsurePackageBundledInput[];\n try {\n ({ result, dependencyInputs: mainDependencies } = await ensurePackageBundledInternal({ ...input, visited }, ctx));\n } catch (err) {\n return {\n result: getErrorResult(input, err),\n dependencies: Promise.resolve([]),\n };\n }\n\n // Enqueue main dependencies\n // TODO: should processing this queue have a rate limit? right now if enqueueDependencies is enabled,\n // `await dependencies` will fire off all deps at once.\n let pending = 0;\n const dependencies = new Promise<EnsurePackageBundledResult[]>((resolve) => {\n const enqueue = (dependencyInputs: EnsurePackageBundledInput[]) => {\n for (const dependencyInput of dependencyInputs) {\n pending++;\n\n void ensurePackageBundledInternal({ ...dependencyInput, visited }, ctx)\n .then((dependencyBundleResult) => {\n // Save result and enqueue this dep's deps\n results.push(dependencyBundleResult.result);\n enqueue(dependencyBundleResult.dependencyInputs);\n })\n .catch((err) => {\n // If there's an error (most likely that the dependency wasn't found in the resolve map),\n // save it in a result instead of throwing. This generally gives better logging.\n results.push(getErrorResult(dependencyInput, err));\n })\n .then(() => {\n pending--;\n if (!pending) {\n resolve(results);\n }\n });\n }\n };\n\n enqueue(mainDependencies);\n });\n\n return {\n result,\n dependencies,\n };\n}\n\nasync function ensurePackageBundledInternal(\n params: EnsurePackageBundledInput & {\n visited: Set<`${string}@${string}`>;\n },\n ctx: EnsurePackageBundledContext,\n): Promise<{ result: EnsurePackageBundledResult; dependencyInputs: EnsurePackageBundledInput[] }> {\n const { taskRunner, session, watcher, packageHashes, bus, telemetryClient } = ctx;\n const { resolveMap, config } = session;\n const {\n name,\n version,\n shouldWatch,\n disableSourceMaps = config.features?.disableSourceMaps,\n enqueueDependencies = config.features?.enqueueDependencies,\n outputPath,\n shouldGetBundleInfo,\n shouldRerun,\n shouldForce,\n disableCache,\n isIncremental,\n useHashAsId,\n priority,\n targetEnvironment = 'browser',\n visited,\n } = params;\n\n const dependencyInputs: EnsurePackageBundledInput[] = [];\n\n visited.add(`${name}@${version}`);\n\n // First, we find the resolve map entry. This helps us resolve the physical location of the package\n // according to the resolveMap used in the session. (This can change based on linking.)\n const packageEntry = findResolveMapEntry({ packageName: name, version, resolveMap });\n\n if (!packageEntry) {\n throw new Error(`Could not find package ${name} in the resolve map.`);\n }\n\n const isExternal = !!packageEntry.isExternal;\n\n let hash: string | undefined;\n let sourceHash: string | undefined;\n\n if (useHashAsId) {\n // If we are using the hash as the task id, we need to calculate it once and pass it to the task\n // to prevent a race condition in which we get a different hash than the one used in the task id.\n hash = await packageHashes.get({\n packagePath: packageEntry.path,\n isSourceHashingEnabled: false,\n shouldRecalculate: true,\n targetEnvironment,\n });\n\n if (!packageEntry.isExternal) {\n // We only need the source hash for internal packages for cache validation.\n sourceHash = await packageHashes.get({\n packagePath: packageEntry.path,\n isSourceHashingEnabled: true,\n shouldRecalculate: true,\n targetEnvironment,\n });\n }\n }\n\n const bundleRequest: BundleRequest = {\n // TODO: David had this as follows--think about what it should be\n id: hash ?? `${packageEntry.path}--env:${targetEnvironment}`,\n packagePath: packageEntry.path,\n packageName: name,\n targetEnvironment,\n isExternal,\n isIncremental,\n outputPath,\n version,\n disableSourceMaps,\n shouldGetBundleInfo: shouldGetBundleInfo || enqueueDependencies,\n disableCache,\n mode: config.mode,\n };\n\n // Make priority negative to have retry count set to positive values.\n const retryCount = priority ? -1 * priority : undefined;\n\n const task = createBundleTask({ bundleRequest, force: shouldForce, hash, sourceHash, retryCount }, ctx);\n\n // TODO: Add lage scheduling back.\n const { result } = await taskRunner.add<BundleRequest>(task, { rerun: shouldRerun, priority });\n\n if (!result) {\n throw new Error('Bundle failed, no result');\n }\n\n // For internal packages, make sure we're watching the source to re-trigger bundling.\n if (shouldWatch && !isExternal) {\n if (!bus || !watcher) {\n throw new Error('bus and watcher must be provided in context if shouldWatch is true (this is a bug).');\n }\n\n const definition = await ctx.packages.get(packageEntry.path);\n const watchOptions: WatchOptions = {\n id: bundleRequest.id,\n path: packageEntry.path,\n watchPaths: definition.cloudpack?.inputPaths,\n };\n\n const onPackageChange = async () => {\n const watchedResult = await taskRunner.add<BundleRequest>(task, { rerun: true });\n\n // If the result was successful, notify potential clients for reload.\n if (watchedResult.result?.errors?.length === 0) {\n await notifyReload({ reason: 'on-package-change' }, { bus, session, telemetryClient });\n }\n };\n watcher.watch(watchOptions, () => {\n void onPackageChange();\n });\n }\n\n // If enabled, enqueue dependencies.\n if (enqueueDependencies && result.info) {\n for (const dependencyName of getConsumedDependencies(result.info)) {\n const dependencyVersion = packageEntry.dependencies[dependencyName];\n\n // If we've already visited this package from another package, skip it.\n if (visited.has(`${dependencyName}@${dependencyVersion}`)) {\n continue;\n }\n\n dependencyInputs.push({\n name: dependencyName,\n version: dependencyVersion,\n shouldWatch,\n enqueueDependencies,\n });\n }\n }\n\n return {\n result: {\n version,\n name,\n isExternal,\n ...result,\n },\n dependencyInputs,\n };\n}\n\nfunction getErrorResult(input: EnsurePackageBundledInput, error: unknown): EnsurePackageBundledResult {\n const text = `Error thrown while bundling: ${error instanceof Error ? error.stack || error.message : error}`;\n return {\n name: input.name,\n version: input.version,\n errors: [{ text, source: 'ensurePackageBundled' }],\n };\n}\n\n// This function doesn't have an attached procedure because it's never called via the TRPC server.\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"syncDownload.d.ts","sourceRoot":"","sources":["../../src/apis/syncDownload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,cAAc,CACjB,UAAU,GAAG,eAAe,GAAG,mBAAmB,GAAG,iBAAiB,EACtE,WAAW,GAAG,QAAQ,GAAG,YAAY,CACtC,GACA,OAAO,CAAC,UAAU,CAAC,CAsBrB"}
1
+ {"version":3,"file":"syncDownload.d.ts","sourceRoot":"","sources":["../../src/apis/syncDownload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMzD;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,cAAc,CACjB,UAAU,GAAG,eAAe,GAAG,mBAAmB,GAAG,iBAAiB,EACtE,WAAW,GAAG,QAAQ,GAAG,YAAY,CACtC,GACA,OAAO,CAAC,UAAU,CAAC,CAsBrB"}
@@ -2,6 +2,8 @@ import { getPackagesToSync } from '../utilities/getPackagesToSync.js';
2
2
  import { PerfMeasurementSyncDownload } from '../performance/markers.js';
3
3
  import { getRemoteCachePromiseResultCounts } from '../utilities/getRemoteCachePromiseResultCounts.js';
4
4
  import { ensureRemoteCacheEnabled } from '../utilities/ensureRemoteCacheEnabled.js';
5
+ // TODO: don't hardcode this
6
+ const targetEnvironment = 'browser';
5
7
  /**
6
8
  * Download all available packages in the current app's resolve map from the remote cache.
7
9
  */
@@ -12,7 +14,7 @@ export async function syncDownload(input, ctx) {
12
14
  throw new Error('Remote cache client is required to sync upload');
13
15
  }
14
16
  return await telemetryClient.tracer.startActiveSpan(PerfMeasurementSyncDownload, async (span) => {
15
- const packagesToSync = await getPackagesToSync(ctx);
17
+ const packagesToSync = await getPackagesToSync({ targetEnvironment }, ctx);
16
18
  const downloads = packagesToSync.map((pkg) => client.downloadFolder(pkg));
17
19
  // Do not reject if there is a failure. Failed downloads will be logged in the task reporter.
18
20
  const promiseResults = await Promise.allSettled(downloads);
@@ -1 +1 @@
1
- {"version":3,"file":"syncDownload.js","sourceRoot":"","sources":["../../src/apis/syncDownload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,iCAAiC,EAAE,MAAM,mDAAmD,CAAC;AAEtG,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAEpF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAgB,EAChB,GAGC;IAED,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;IAEpE,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,MAAM,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,2BAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC9F,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAEpD,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAE1E,6FAA6F;QAC7F,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE3D,MAAM,MAAM,GAAG,iCAAiC,CAAC,cAAc,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAE3B,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kGAAkG","sourcesContent":["import { getPackagesToSync } from '../utilities/getPackagesToSync.js';\nimport type { PartialContext } from '../types/Context.js';\nimport { PerfMeasurementSyncDownload } from '../performance/markers.js';\nimport { getRemoteCachePromiseResultCounts } from '../utilities/getRemoteCachePromiseResultCounts.js';\nimport type { SyncResult } from '../types/SyncResult.js';\nimport { ensureRemoteCacheEnabled } from '../utilities/ensureRemoteCacheEnabled.js';\n\n/**\n * Download all available packages in the current app's resolve map from the remote cache.\n */\nexport async function syncDownload(\n input: undefined,\n ctx: PartialContext<\n 'packages' | 'packageHashes' | 'remoteCacheClient' | 'telemetryClient',\n 'cachePath' | 'config' | 'resolveMap'\n >,\n): Promise<SyncResult> {\n const { telemetryClient, remoteCacheClient: client, session } = ctx;\n\n ensureRemoteCacheEnabled(session.config);\n\n if (!client) {\n throw new Error('Remote cache client is required to sync upload');\n }\n\n return await telemetryClient.tracer.startActiveSpan(PerfMeasurementSyncDownload, async (span) => {\n const packagesToSync = await getPackagesToSync(ctx);\n\n const downloads = packagesToSync.map((pkg) => client.downloadFolder(pkg));\n\n // Do not reject if there is a failure. Failed downloads will be logged in the task reporter.\n const promiseResults = await Promise.allSettled(downloads);\n\n const result = getRemoteCachePromiseResultCounts(promiseResults);\n span.setAttributes(result);\n\n return result;\n });\n}\n\n// This function doesn't have an attached procedure because it's never called via the TRPC server.\n"]}
1
+ {"version":3,"file":"syncDownload.js","sourceRoot":"","sources":["../../src/apis/syncDownload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,iCAAiC,EAAE,MAAM,mDAAmD,CAAC;AAEtG,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAEpF,4BAA4B;AAC5B,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAgB,EAChB,GAGC;IAED,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;IAEpE,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,MAAM,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,2BAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC9F,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;QAE3E,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAE1E,6FAA6F;QAC7F,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE3D,MAAM,MAAM,GAAG,iCAAiC,CAAC,cAAc,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAE3B,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kGAAkG","sourcesContent":["import { getPackagesToSync } from '../utilities/getPackagesToSync.js';\nimport type { PartialContext } from '../types/Context.js';\nimport { PerfMeasurementSyncDownload } from '../performance/markers.js';\nimport { getRemoteCachePromiseResultCounts } from '../utilities/getRemoteCachePromiseResultCounts.js';\nimport type { SyncResult } from '../types/SyncResult.js';\nimport { ensureRemoteCacheEnabled } from '../utilities/ensureRemoteCacheEnabled.js';\n\n// TODO: don't hardcode this\nconst targetEnvironment = 'browser';\n\n/**\n * Download all available packages in the current app's resolve map from the remote cache.\n */\nexport async function syncDownload(\n input: undefined,\n ctx: PartialContext<\n 'packages' | 'packageHashes' | 'remoteCacheClient' | 'telemetryClient',\n 'cachePath' | 'config' | 'resolveMap'\n >,\n): Promise<SyncResult> {\n const { telemetryClient, remoteCacheClient: client, session } = ctx;\n\n ensureRemoteCacheEnabled(session.config);\n\n if (!client) {\n throw new Error('Remote cache client is required to sync upload');\n }\n\n return await telemetryClient.tracer.startActiveSpan(PerfMeasurementSyncDownload, async (span) => {\n const packagesToSync = await getPackagesToSync({ targetEnvironment }, ctx);\n\n const downloads = packagesToSync.map((pkg) => client.downloadFolder(pkg));\n\n // Do not reject if there is a failure. Failed downloads will be logged in the task reporter.\n const promiseResults = await Promise.allSettled(downloads);\n\n const result = getRemoteCachePromiseResultCounts(promiseResults);\n span.setAttributes(result);\n\n return result;\n });\n}\n\n// This function doesn't have an attached procedure because it's never called via the TRPC server.\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"syncUpload.d.ts","sourceRoot":"","sources":["../../src/apis/syncUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAUnG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;GAEG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,EAC7B,GAAG,EAAE,IAAI,CAAC,2BAA2B,EAAE,KAAK,GAAG,SAAS,CAAC,GACxD,OAAO,CAAC,UAAU,CAAC,CAuFrB"}
1
+ {"version":3,"file":"syncUpload.d.ts","sourceRoot":"","sources":["../../src/apis/syncUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAUnG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAW9D;;GAEG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,EAC7B,GAAG,EAAE,IAAI,CAAC,2BAA2B,EAAE,KAAK,GAAG,SAAS,CAAC,GACxD,OAAO,CAAC,UAAU,CAAC,CA+FrB"}
@@ -10,6 +10,13 @@ import { cp } from 'fs/promises';
10
10
  import objectHash from 'object-hash';
11
11
  import { ensureRemoteCacheEnabled } from '../utilities/ensureRemoteCacheEnabled.js';
12
12
  import { getRemoteCachePackageId } from '../utilities/getRemoteCachePackageId.js';
13
+ import { createImportMap } from '@ms-cloudpack/import-map';
14
+ import { serializeContext } from '../utilities/serializeContext.js';
15
+ const cloudpackContextFileName = 'cloudpack-context.json';
16
+ const templateAppServerUrl = 'template://app-server-url';
17
+ const templateBundleServerUrl = 'template://bundle-server-url';
18
+ // TODO: don't hardcode this
19
+ const targetEnvironment = 'browser';
13
20
  /**
14
21
  * Bundle the current app and its dependencies, and upload them to the remote cache.
15
22
  */
@@ -37,9 +44,9 @@ export async function syncUpload(input, ctx) {
37
44
  .filter((p) => p.inputPath && (p.isExternal || syncInternalPackages))
38
45
  .map((p) => createRemoteCacheClientOperationOptions(
39
46
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- verified above that it's set
40
- { packagePath: p.inputPath }, ctx)));
47
+ { packagePath: p.inputPath, targetEnvironment }, ctx)));
41
48
  if (config.features?.enableCloudHosted) {
42
- const appBundleLocation = await getBundleLocation({ packagePath: appPath }, ctx);
49
+ const appBundleLocation = await getBundleLocation({ packagePath: appPath, targetEnvironment }, ctx);
43
50
  const appOutputPath = appBundleLocation.path;
44
51
  const destinationFolder = path.join(appOutputPath, '__cloudpack');
45
52
  const routesPath = path.join(destinationFolder, 'routes');
@@ -51,6 +58,13 @@ export async function syncUpload(input, ctx) {
51
58
  await cp(staticPath, path.join(folderPath, route.staticPath), { recursive: true });
52
59
  }
53
60
  }
61
+ if (!session.urls.appServer) {
62
+ // Using template URLs for the app and bundle servers, because they are not known at this point and the will be replaced with the actual URLs at runtime.
63
+ session.urls.appServer = templateAppServerUrl;
64
+ session.urls.bundleServer = templateBundleServerUrl;
65
+ }
66
+ session.importMap ??= await createImportMap({ targetEnvironment: 'browser' }, ctx);
67
+ await serializeContext(path.join(destinationFolder, cloudpackContextFileName), ctx);
54
68
  const { createAppRegistryClient } = await import('@ms-cloudpack/remote-cache');
55
69
  const appRegistryClient = await createAppRegistryClient({
56
70
  context: ctx,
@@ -60,7 +74,7 @@ export async function syncUpload(input, ctx) {
60
74
  name,
61
75
  // Using the current date and time as the version, because most apps are not versioned.
62
76
  version: new Date().toISOString().slice(16).replace('T', ' '),
63
- resourceId: await getRemoteCachePackageId({ packagePath: appPath }, ctx),
77
+ resourceId: await getRemoteCachePackageId({ packagePath: appPath, targetEnvironment }, ctx),
64
78
  storageAccount: remoteCacheConfig.storageAccount,
65
79
  container: remoteCacheConfig.container,
66
80
  tenantId: remoteCacheConfig.tenantId,
@@ -1 +1 @@
1
- {"version":3,"file":"syncUpload.js","sourceRoot":"","sources":["../../src/apis/syncUpload.ts"],"names":[],"mappings":"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","sourcesContent":["import { ensurePackageBundled, type EnsurePackageBundledContext } from './ensurePackageBundled.js';\nimport { PerfMeasurementSyncUpload } from '../performance/markers.js';\nimport { getRemoteCachePromiseResultCounts } from '../utilities/getRemoteCachePromiseResultCounts.js';\nimport { createRemoteCacheClientOperationOptions } from '../utilities/createRemoteCacheClientOperationOptions.js';\nimport { createUploadTask } from '../utilities/createUploadTask.js';\nimport { isStaticRoute } from '@ms-cloudpack/common-types';\nimport path from 'path';\nimport { getBundleLocation } from '../utilities/getBundleLocation.js';\nimport { cp } from 'fs/promises';\nimport objectHash from 'object-hash';\nimport type { SyncResult } from '../types/SyncResult.js';\nimport { ensureRemoteCacheEnabled } from '../utilities/ensureRemoteCacheEnabled.js';\nimport { getRemoteCachePackageId } from '../utilities/getRemoteCachePackageId.js';\nimport type { LoginMethod } from '@ms-cloudpack/remote-cache';\n\n/**\n * Bundle the current app and its dependencies, and upload them to the remote cache.\n */\nexport async function syncUpload(\n input: { login: LoginMethod },\n ctx: Omit<EnsurePackageBundledContext, 'bus' | 'watcher'>,\n): Promise<SyncResult> {\n const { login } = input;\n const { session, telemetryClient, taskRunner, remoteCacheClient: client } = ctx;\n const { config } = session;\n const { appPath } = config;\n const { remoteCache: remoteCacheConfig } = config;\n const syncInternalPackages = config?.features?.syncInternalPackages ?? false;\n\n ensureRemoteCacheEnabled(config);\n\n if (!client) {\n throw new Error('Remote cache client is required to sync upload');\n }\n\n if (!remoteCacheConfig) {\n throw new Error('Remote cache configuration is required to sync upload');\n }\n\n // Glob pattern for the files to upload.\n const globMatches = ['**/*', '!**/*-input.json', '!**/*-output.json'];\n\n return await telemetryClient.tracer.startActiveSpan(PerfMeasurementSyncUpload, async (span) => {\n const { name, version, description } = await ctx.packages.get(appPath);\n\n const { dependencies, result: bundleResult } = await ensurePackageBundled(\n { name, version, enqueueDependencies: true },\n ctx,\n );\n\n const bundledPackages = [bundleResult, ...(await dependencies)];\n const packagesToUpload = await Promise.all(\n bundledPackages\n .filter((p) => p.inputPath && (p.isExternal || syncInternalPackages))\n .map((p) =>\n createRemoteCacheClientOperationOptions(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- verified above that it's set\n { packagePath: p.inputPath! },\n ctx,\n ),\n ),\n );\n\n if (config.features?.enableCloudHosted) {\n const appBundleLocation = await getBundleLocation({ packagePath: appPath }, ctx);\n const appOutputPath = appBundleLocation.path;\n const destinationFolder = path.join(appOutputPath, '__cloudpack');\n const routesPath = path.join(destinationFolder, 'routes');\n for (const route of config.routes ?? []) {\n if (isStaticRoute(route)) {\n const staticPath = path.resolve(appPath, route.staticPath);\n const routeHash = objectHash(route);\n const folderPath = path.join(routesPath, routeHash);\n await cp(staticPath, path.join(folderPath, route.staticPath), { recursive: true });\n }\n }\n\n const { createAppRegistryClient } = await import('@ms-cloudpack/remote-cache');\n const appRegistryClient = await createAppRegistryClient({\n context: ctx,\n options: { cachePath: session.cachePath, loginMethod: login },\n });\n\n await appRegistryClient.registerApp({\n name,\n // Using the current date and time as the version, because most apps are not versioned.\n version: new Date().toISOString().slice(16).replace('T', ' '),\n resourceId: await getRemoteCachePackageId({ packagePath: appPath }, ctx),\n storageAccount: remoteCacheConfig.storageAccount,\n container: remoteCacheConfig.container,\n tenantId: remoteCacheConfig.tenantId,\n description,\n localBundleFolderName: appBundleLocation.folderName,\n });\n }\n\n const uploads = packagesToUpload.map((pkg) =>\n taskRunner.add(createUploadTask({ client, options: { ...pkg, globMatches } })),\n );\n\n // Do not reject if there is a failure. Failed uploads will be logged in the task reporter.\n const promiseResults = await Promise.allSettled(uploads);\n\n const result = getRemoteCachePromiseResultCounts(promiseResults);\n span.setAttributes(result);\n\n return result;\n });\n}\n\n// This function doesn't have an attached procedure because it's never called via the TRPC server.\n"]}
1
+ {"version":3,"file":"syncUpload.js","sourceRoot":"","sources":["../../src/apis/syncUpload.ts"],"names":[],"mappings":"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","sourcesContent":["import { ensurePackageBundled, type EnsurePackageBundledContext } from './ensurePackageBundled.js';\nimport { PerfMeasurementSyncUpload } from '../performance/markers.js';\nimport { getRemoteCachePromiseResultCounts } from '../utilities/getRemoteCachePromiseResultCounts.js';\nimport { createRemoteCacheClientOperationOptions } from '../utilities/createRemoteCacheClientOperationOptions.js';\nimport { createUploadTask } from '../utilities/createUploadTask.js';\nimport { isStaticRoute } from '@ms-cloudpack/common-types';\nimport path from 'path';\nimport { getBundleLocation } from '../utilities/getBundleLocation.js';\nimport { cp } from 'fs/promises';\nimport objectHash from 'object-hash';\nimport type { SyncResult } from '../types/SyncResult.js';\nimport { ensureRemoteCacheEnabled } from '../utilities/ensureRemoteCacheEnabled.js';\nimport { getRemoteCachePackageId } from '../utilities/getRemoteCachePackageId.js';\nimport type { LoginMethod } from '@ms-cloudpack/remote-cache';\nimport { createImportMap } from '@ms-cloudpack/import-map';\nimport { serializeContext } from '../utilities/serializeContext.js';\n\nconst cloudpackContextFileName = 'cloudpack-context.json';\nconst templateAppServerUrl = 'template://app-server-url';\nconst templateBundleServerUrl = 'template://bundle-server-url';\n\n// TODO: don't hardcode this\nconst targetEnvironment = 'browser';\n\n/**\n * Bundle the current app and its dependencies, and upload them to the remote cache.\n */\nexport async function syncUpload(\n input: { login: LoginMethod },\n ctx: Omit<EnsurePackageBundledContext, 'bus' | 'watcher'>,\n): Promise<SyncResult> {\n const { login } = input;\n const { session, telemetryClient, taskRunner, remoteCacheClient: client } = ctx;\n const { config } = session;\n const { appPath } = config;\n const { remoteCache: remoteCacheConfig } = config;\n const syncInternalPackages = config?.features?.syncInternalPackages ?? false;\n\n ensureRemoteCacheEnabled(config);\n\n if (!client) {\n throw new Error('Remote cache client is required to sync upload');\n }\n\n if (!remoteCacheConfig) {\n throw new Error('Remote cache configuration is required to sync upload');\n }\n\n // Glob pattern for the files to upload.\n const globMatches = ['**/*', '!**/*-input.json', '!**/*-output.json'];\n\n return await telemetryClient.tracer.startActiveSpan(PerfMeasurementSyncUpload, async (span) => {\n const { name, version, description } = await ctx.packages.get(appPath);\n\n const { dependencies, result: bundleResult } = await ensurePackageBundled(\n { name, version, enqueueDependencies: true },\n ctx,\n );\n\n const bundledPackages = [bundleResult, ...(await dependencies)];\n const packagesToUpload = await Promise.all(\n bundledPackages\n .filter((p) => p.inputPath && (p.isExternal || syncInternalPackages))\n .map((p) =>\n createRemoteCacheClientOperationOptions(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- verified above that it's set\n { packagePath: p.inputPath!, targetEnvironment },\n ctx,\n ),\n ),\n );\n\n if (config.features?.enableCloudHosted) {\n const appBundleLocation = await getBundleLocation({ packagePath: appPath, targetEnvironment }, ctx);\n const appOutputPath = appBundleLocation.path;\n const destinationFolder = path.join(appOutputPath, '__cloudpack');\n const routesPath = path.join(destinationFolder, 'routes');\n for (const route of config.routes ?? []) {\n if (isStaticRoute(route)) {\n const staticPath = path.resolve(appPath, route.staticPath);\n const routeHash = objectHash(route);\n const folderPath = path.join(routesPath, routeHash);\n await cp(staticPath, path.join(folderPath, route.staticPath), { recursive: true });\n }\n }\n\n if (!session.urls.appServer) {\n // Using template URLs for the app and bundle servers, because they are not known at this point and the will be replaced with the actual URLs at runtime.\n session.urls.appServer = templateAppServerUrl;\n session.urls.bundleServer = templateBundleServerUrl;\n }\n session.importMap ??= await createImportMap({ targetEnvironment: 'browser' }, ctx);\n await serializeContext(path.join(destinationFolder, cloudpackContextFileName), ctx);\n\n const { createAppRegistryClient } = await import('@ms-cloudpack/remote-cache');\n const appRegistryClient = await createAppRegistryClient({\n context: ctx,\n options: { cachePath: session.cachePath, loginMethod: login },\n });\n\n await appRegistryClient.registerApp({\n name,\n // Using the current date and time as the version, because most apps are not versioned.\n version: new Date().toISOString().slice(16).replace('T', ' '),\n resourceId: await getRemoteCachePackageId({ packagePath: appPath, targetEnvironment }, ctx),\n storageAccount: remoteCacheConfig.storageAccount,\n container: remoteCacheConfig.container,\n tenantId: remoteCacheConfig.tenantId,\n description,\n localBundleFolderName: appBundleLocation.folderName,\n });\n }\n\n const uploads = packagesToUpload.map((pkg) =>\n taskRunner.add(createUploadTask({ client, options: { ...pkg, globMatches } })),\n );\n\n // Do not reject if there is a failure. Failed uploads will be logged in the task reporter.\n const promiseResults = await Promise.allSettled(uploads);\n\n const result = getRemoteCachePromiseResultCounts(promiseResults);\n span.setAttributes(result);\n\n return result;\n });\n}\n\n// This function doesn't have an attached procedure because it's never called via the TRPC server.\n"]}
@@ -0,0 +1,12 @@
1
+ import type { CloudpackConfig, ImportMap, ResolveMap, SerializablePackageHashesCache } from '@ms-cloudpack/common-types';
2
+ /**
3
+ * Serializable representation of the context. It does not include all the data that is in the context,
4
+ * but only the data that is needed for running an app from the cloud.
5
+ */
6
+ export interface CloudAppContext {
7
+ importMap: ImportMap | undefined;
8
+ packageHashes: SerializablePackageHashesCache;
9
+ resolveMap: ResolveMap;
10
+ config: CloudpackConfig;
11
+ }
12
+ //# sourceMappingURL=CloudAppContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudAppContext.d.ts","sourceRoot":"","sources":["../../src/types/CloudAppContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EACT,UAAU,EACV,8BAA8B,EAC/B,MAAM,4BAA4B,CAAC;AAEpC;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,aAAa,EAAE,8BAA8B,CAAC;IAC9C,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;CACzB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CloudAppContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudAppContext.js","sourceRoot":"","sources":["../../src/types/CloudAppContext.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n CloudpackConfig,\n ImportMap,\n ResolveMap,\n SerializablePackageHashesCache,\n} from '@ms-cloudpack/common-types';\n\n/**\n * Serializable representation of the context. It does not include all the data that is in the context,\n * but only the data that is needed for running an app from the cloud.\n */\nexport interface CloudAppContext {\n importMap: ImportMap | undefined;\n packageHashes: SerializablePackageHashesCache;\n resolveMap: ResolveMap;\n config: CloudpackConfig;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bundleTask.d.ts","sourceRoot":"","sources":["../../src/utilities/bundleTask.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAO/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAC5C,UAAU,GAAG,eAAe,GAAG,UAAU,GAAG,iBAAiB,GAAG,mBAAmB,EACnF,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CACnD,CAAC;AAEF;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCtG"}
1
+ {"version":3,"file":"bundleTask.d.ts","sourceRoot":"","sources":["../../src/utilities/bundleTask.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAO/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAC5C,UAAU,GAAG,eAAe,GAAG,UAAU,GAAG,iBAAiB,GAAG,mBAAmB,EACnF,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CACnD,CAAC;AAEF;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CtG"}
@@ -1,6 +1,7 @@
1
1
  import { bundle, getEntriesMapFromPackage, getExternalsFromPackage } from '@ms-cloudpack/bundler';
2
2
  import { writeJson } from '@ms-cloudpack/json-utilities';
3
3
  import { getExportsMap } from '@ms-cloudpack/package-utilities';
4
+ import { SpanStatusCode } from '@ms-cloudpack/telemetry';
4
5
  import { formatPackageName } from '@ms-cloudpack/task-reporter';
5
6
  import path from 'path';
6
7
  import { prepareOutputPath } from '../common/prepareOutputPath.js';
@@ -34,6 +35,10 @@ export async function bundleTask(options, context) {
34
35
  bundler: bundleRequest.result?.bundler,
35
36
  bundlerVersion: bundleRequest.result?.bundlerVersion,
36
37
  });
38
+ if (bundleRequest.result?.errors?.length) {
39
+ // Set the status to `ERROR`
40
+ span.setStatus({ code: SpanStatusCode.ERROR });
41
+ }
37
42
  });
38
43
  }
39
44
  catch (err) {
@@ -46,7 +51,7 @@ export async function bundleTask(options, context) {
46
51
  source: 'bundleTask',
47
52
  });
48
53
  }
49
- task.complete(formatBundleTaskResult(bundleRequest));
54
+ task.complete(formatBundleTaskResult(bundleRequest, reporter));
50
55
  }
51
56
  /**
52
57
  * Actually read the result from the cache or call `bundle()`.
@@ -65,13 +70,19 @@ async function bundleTaskInternal(options, context) {
65
70
  }
66
71
  const { packagePath, isExternal, isIncremental, disableSourceMaps, shouldGetBundleInfo } = bundleRequest;
67
72
  const outputPath = bundleRequest.outputPath ??
68
- (await getBundleLocation({ packagePath, shouldRecalculate: force, hash }, context)).path;
73
+ (await getBundleLocation({ packagePath, targetEnvironment, shouldRecalculate: force, hash }, context)).path;
69
74
  // Rehydrate the result if not incremental.
70
75
  if (bundleRequest.result === undefined && !force) {
71
- bundleRequest.result = await readResultFromCache({ packageName, version, inputPath: packagePath, outputPath }, context);
76
+ bundleRequest.result = await readResultFromCache({ packageName, version, inputPath: packagePath, outputPath, targetEnvironment }, context);
72
77
  }
73
78
  const cacheValidationHash = !isExternal
74
- ? sourceHash || (await packageHashes.get({ packagePath, isSourceHashingEnabled: true, shouldRecalculate: true }))
79
+ ? sourceHash ||
80
+ (await packageHashes.get({
81
+ packagePath,
82
+ targetEnvironment,
83
+ isSourceHashingEnabled: true,
84
+ shouldRecalculate: true,
85
+ }))
75
86
  : undefined;
76
87
  // if the cached result is valid, use it.
77
88
  if (!force && isCachedResultValid({ bundleRequest, hash: cacheValidationHash })) {
@@ -1 +1 @@
1
- {"version":3,"file":"bundleTask.js","sourceRoot":"","sources":["../../src/utilities/bundleTask.ts"],"names":[],"mappings":"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","sourcesContent":["import { bundle, getEntriesMapFromPackage, getExternalsFromPackage } from '@ms-cloudpack/bundler';\nimport type { BundleOptions } from '@ms-cloudpack/common-types';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { getExportsMap } from '@ms-cloudpack/package-utilities';\nimport { formatPackageName } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport { prepareOutputPath } from '../common/prepareOutputPath.js';\nimport type { BundleRequest } from '../types/BundleRequest.js';\nimport { getBundleInfo } from './getBundleInfo.js';\nimport { getBundleLocation } from './getBundleLocation.js';\nimport { isCachedResultValid } from './isCachedResultValid.js';\nimport { readResultFromCache } from './readResultFromCache.js';\nimport { saveResultToCache } from './saveResultToCache.js';\nimport { formatBundleTaskResult } from './formatBundleTaskResult.js';\nimport type { PartialContext } from '../types/Context.js';\nimport { writeStubForDensityEntries } from './writeStubForDensityEntries.js';\n\n/**\n * Options for a bundle task.\n */\nexport interface BundleTaskOptions {\n /** Force a bundle to be rerun */\n force?: boolean;\n /** Hash to avoid re-computing */\n hash?: string;\n /** Source hash to avoid recomputing */\n sourceHash?: string;\n /** Retry count for the task */\n retryCount?: number;\n bundleRequest: BundleRequest;\n}\n\nexport type BundleTaskContext = PartialContext<\n 'packages' | 'packageHashes' | 'reporter' | 'telemetryClient' | 'remoteCacheClient',\n 'resolveMap' | 'config' | 'sequence' | 'cachePath'\n>;\n\n/**\n * Create and run a TaskReporter task which calls `bundle()` from `@ms-cloudpack/bundler` and formats the result.\n */\nexport async function bundleTask(options: BundleTaskOptions, context: BundleTaskContext): Promise<void> {\n const { bundleRequest } = options;\n const { packageName, version } = bundleRequest;\n const { reporter, telemetryClient, session } = context;\n const { sequence } = session;\n const { retryCount } = options;\n\n const task = reporter.addTask(\n `Bundle ${formatPackageName({ name: packageName, version })}${retryCount ? ` (retry ${retryCount})` : ''}`,\n );\n\n try {\n await telemetryClient.tracer.startActiveSpan('BUNDLE_TASK', async (span) => {\n await bundleTaskInternal(options, context);\n\n span.setAttributes({\n sequence,\n isCacheHit: !!bundleRequest.resultFromCache,\n isExternal: bundleRequest.isExternal,\n packageName: bundleRequest.packageName,\n packageVersion: bundleRequest.version,\n bundleSource: bundleRequest.result?.bundleSource,\n bundler: bundleRequest.result?.bundler,\n bundlerVersion: bundleRequest.result?.bundlerVersion,\n });\n });\n } catch (err) {\n // If an unexpected error is thrown, add it to the result.\n // This ensures consistent handling of either actual bundler errors or exceptions.\n bundleRequest.result ??= {};\n bundleRequest.result.errors ??= [];\n bundleRequest.result.errors.push({\n text: `Unexpected exception while bundling: ${(err as Error).stack || String(err)}`,\n source: 'bundleTask',\n });\n }\n\n task.complete(formatBundleTaskResult(bundleRequest));\n}\n\n/**\n * Actually read the result from the cache or call `bundle()`.\n * NOTE: The result is returned by mutating `options.bundleRequest.result`.\n */\nasync function bundleTaskInternal(options: BundleTaskOptions, context: BundleTaskContext): Promise<void> {\n const { bundleRequest, force, hash, sourceHash } = options;\n const { packageName, version, targetEnvironment } = bundleRequest;\n const { packageHashes, packages, session } = context;\n const { config } = session;\n const { mode } = config;\n\n // If force is set, dispose the existing result.\n if (force && bundleRequest.result?.dispose) {\n bundleRequest.result.dispose();\n bundleRequest.result = undefined;\n }\n\n const { packagePath, isExternal, isIncremental, disableSourceMaps, shouldGetBundleInfo } = bundleRequest;\n\n const outputPath =\n bundleRequest.outputPath ??\n (await getBundleLocation({ packagePath, shouldRecalculate: force, hash }, context)).path;\n\n // Rehydrate the result if not incremental.\n if (bundleRequest.result === undefined && !force) {\n bundleRequest.result = await readResultFromCache(\n { packageName, version, inputPath: packagePath, outputPath },\n context,\n );\n }\n\n const cacheValidationHash = !isExternal\n ? sourceHash || (await packageHashes.get({ packagePath, isSourceHashingEnabled: true, shouldRecalculate: true }))\n : undefined;\n\n // if the cached result is valid, use it.\n if (!force && isCachedResultValid({ bundleRequest, hash: cacheValidationHash })) {\n console.debug(`Using cached result for ${bundleRequest.packageName}@${bundleRequest.version}`);\n bundleRequest.resultFromCache = true;\n } else {\n bundleRequest.resultFromCache = false;\n\n // Only use cached result if it's successful.\n await prepareOutputPath(outputPath);\n\n if (bundleRequest.result?.rebuild) {\n bundleRequest.result = {\n ...(await bundleRequest.result.rebuild()),\n outputPath: bundleRequest.result.outputPath,\n hash: cacheValidationHash,\n };\n } else {\n const {\n bundler,\n bundlerOptions,\n inlinedDependencies,\n dynamicImports,\n bundlerCapabilities,\n ignoredBundlerWarnings,\n unsafeCjsExportNames,\n } = (await packages.get(packagePath)).cloudpack || {};\n\n const bundleOptions: BundleOptions = {\n bundler,\n minify: mode === 'production',\n targetEnvironment,\n bundlerOptions,\n inputPath: packagePath,\n outputPath,\n incremental: isIncremental !== undefined ? isIncremental : false,\n sourcemap: !disableSourceMaps,\n entries: await getEntriesMapFromPackage({ inputPath: packagePath, targetEnvironment }, { packages, config }),\n inlined: inlinedDependencies,\n external: await getExternalsFromPackage({ inputPath: packagePath }, { packages }),\n dynamicImports,\n ignoredBundlerWarnings,\n bundlerCapabilities,\n unsafeCjsExportNames,\n };\n\n const bundleInternalResult = await bundle(bundleOptions, { config });\n bundleRequest.result = {\n ...bundleInternalResult,\n outputPath: bundleOptions.outputPath ?? outputPath,\n hash: cacheValidationHash,\n bundleSource: 'bundler',\n };\n\n if (bundlerCapabilities?.density) {\n // Get export maps that need to be written as stubs for density.\n // If there are density exports, write stubs for them.\n const densityErrors = await writeStubForDensityEntries({\n options: {\n packageName,\n packagePath,\n result: bundleInternalResult,\n },\n context: { packages, config },\n });\n\n // Add any errors to the result.\n if (densityErrors.length > 0) {\n bundleRequest.result.errors = [...(bundleRequest.result.errors ?? []), ...densityErrors];\n }\n }\n }\n\n // Write the result to disk.\n await saveResultToCache(bundleRequest.result);\n }\n\n // If we should find required imports and exports per bundle\n if (shouldGetBundleInfo && !bundleRequest.result?.errors?.length && bundleRequest.result?.outputFiles?.length) {\n // Exports map is needed to find the bundle info per entry we intend to bundle.\n // Exports map is used instead of bundleRequest.entries since it is easier to use\n // because it contains the paths other packages use to import the entry and\n // the relative location of the bundled files.\n const exportsMap = await getExportsMap({ packagePath }, { packages, config });\n\n const bundleInfo = await getBundleInfo({\n outputPath,\n outputFiles: bundleRequest.result.outputFiles,\n exportsMap,\n isExternal,\n packagePath,\n });\n\n bundleRequest.result.info = bundleInfo;\n\n if (config.logBundleInfo) {\n // Write to cache for future use. (Ignore the promise result.)\n void writeJson(path.join(outputPath, 'bundle-info.json'), bundleInfo);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"bundleTask.js","sourceRoot":"","sources":["../../src/utilities/bundleTask.ts"],"names":[],"mappings":"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","sourcesContent":["import { bundle, getEntriesMapFromPackage, getExternalsFromPackage } from '@ms-cloudpack/bundler';\nimport type { BundleOptions } from '@ms-cloudpack/common-types';\nimport { writeJson } from '@ms-cloudpack/json-utilities';\nimport { getExportsMap } from '@ms-cloudpack/package-utilities';\nimport { SpanStatusCode } from '@ms-cloudpack/telemetry';\nimport { formatPackageName } from '@ms-cloudpack/task-reporter';\nimport path from 'path';\nimport { prepareOutputPath } from '../common/prepareOutputPath.js';\nimport type { BundleRequest } from '../types/BundleRequest.js';\nimport { getBundleInfo } from './getBundleInfo.js';\nimport { getBundleLocation } from './getBundleLocation.js';\nimport { isCachedResultValid } from './isCachedResultValid.js';\nimport { readResultFromCache } from './readResultFromCache.js';\nimport { saveResultToCache } from './saveResultToCache.js';\nimport { formatBundleTaskResult } from './formatBundleTaskResult.js';\nimport type { PartialContext } from '../types/Context.js';\nimport { writeStubForDensityEntries } from './writeStubForDensityEntries.js';\n\n/**\n * Options for a bundle task.\n */\nexport interface BundleTaskOptions {\n /** Force a bundle to be rerun */\n force?: boolean;\n /** Hash to avoid re-computing */\n hash?: string;\n /** Source hash to avoid recomputing */\n sourceHash?: string;\n /** Retry count for the task */\n retryCount?: number;\n bundleRequest: BundleRequest;\n}\n\nexport type BundleTaskContext = PartialContext<\n 'packages' | 'packageHashes' | 'reporter' | 'telemetryClient' | 'remoteCacheClient',\n 'resolveMap' | 'config' | 'sequence' | 'cachePath'\n>;\n\n/**\n * Create and run a TaskReporter task which calls `bundle()` from `@ms-cloudpack/bundler` and formats the result.\n */\nexport async function bundleTask(options: BundleTaskOptions, context: BundleTaskContext): Promise<void> {\n const { bundleRequest } = options;\n const { packageName, version } = bundleRequest;\n const { reporter, telemetryClient, session } = context;\n const { sequence } = session;\n const { retryCount } = options;\n\n const task = reporter.addTask(\n `Bundle ${formatPackageName({ name: packageName, version })}${retryCount ? ` (retry ${retryCount})` : ''}`,\n );\n\n try {\n await telemetryClient.tracer.startActiveSpan('BUNDLE_TASK', async (span) => {\n await bundleTaskInternal(options, context);\n\n span.setAttributes({\n sequence,\n isCacheHit: !!bundleRequest.resultFromCache,\n isExternal: bundleRequest.isExternal,\n packageName: bundleRequest.packageName,\n packageVersion: bundleRequest.version,\n bundleSource: bundleRequest.result?.bundleSource,\n bundler: bundleRequest.result?.bundler,\n bundlerVersion: bundleRequest.result?.bundlerVersion,\n });\n\n if (bundleRequest.result?.errors?.length) {\n // Set the status to `ERROR`\n span.setStatus({ code: SpanStatusCode.ERROR });\n }\n });\n } catch (err) {\n // If an unexpected error is thrown, add it to the result.\n // This ensures consistent handling of either actual bundler errors or exceptions.\n bundleRequest.result ??= {};\n bundleRequest.result.errors ??= [];\n bundleRequest.result.errors.push({\n text: `Unexpected exception while bundling: ${(err as Error).stack || String(err)}`,\n source: 'bundleTask',\n });\n }\n\n task.complete(formatBundleTaskResult(bundleRequest, reporter));\n}\n\n/**\n * Actually read the result from the cache or call `bundle()`.\n * NOTE: The result is returned by mutating `options.bundleRequest.result`.\n */\nasync function bundleTaskInternal(options: BundleTaskOptions, context: BundleTaskContext): Promise<void> {\n const { bundleRequest, force, hash, sourceHash } = options;\n const { packageName, version, targetEnvironment } = bundleRequest;\n const { packageHashes, packages, session } = context;\n const { config } = session;\n const { mode } = config;\n\n // If force is set, dispose the existing result.\n if (force && bundleRequest.result?.dispose) {\n bundleRequest.result.dispose();\n bundleRequest.result = undefined;\n }\n\n const { packagePath, isExternal, isIncremental, disableSourceMaps, shouldGetBundleInfo } = bundleRequest;\n\n const outputPath =\n bundleRequest.outputPath ??\n (await getBundleLocation({ packagePath, targetEnvironment, shouldRecalculate: force, hash }, context)).path;\n\n // Rehydrate the result if not incremental.\n if (bundleRequest.result === undefined && !force) {\n bundleRequest.result = await readResultFromCache(\n { packageName, version, inputPath: packagePath, outputPath, targetEnvironment },\n context,\n );\n }\n\n const cacheValidationHash = !isExternal\n ? sourceHash ||\n (await packageHashes.get({\n packagePath,\n targetEnvironment,\n isSourceHashingEnabled: true,\n shouldRecalculate: true,\n }))\n : undefined;\n\n // if the cached result is valid, use it.\n if (!force && isCachedResultValid({ bundleRequest, hash: cacheValidationHash })) {\n console.debug(`Using cached result for ${bundleRequest.packageName}@${bundleRequest.version}`);\n bundleRequest.resultFromCache = true;\n } else {\n bundleRequest.resultFromCache = false;\n\n // Only use cached result if it's successful.\n await prepareOutputPath(outputPath);\n\n if (bundleRequest.result?.rebuild) {\n bundleRequest.result = {\n ...(await bundleRequest.result.rebuild()),\n outputPath: bundleRequest.result.outputPath,\n hash: cacheValidationHash,\n };\n } else {\n const {\n bundler,\n bundlerOptions,\n inlinedDependencies,\n dynamicImports,\n bundlerCapabilities,\n ignoredBundlerWarnings,\n unsafeCjsExportNames,\n } = (await packages.get(packagePath)).cloudpack || {};\n\n const bundleOptions: BundleOptions = {\n bundler,\n minify: mode === 'production',\n targetEnvironment,\n bundlerOptions,\n inputPath: packagePath,\n outputPath,\n incremental: isIncremental !== undefined ? isIncremental : false,\n sourcemap: !disableSourceMaps,\n entries: await getEntriesMapFromPackage({ inputPath: packagePath, targetEnvironment }, { packages, config }),\n inlined: inlinedDependencies,\n external: await getExternalsFromPackage({ inputPath: packagePath }, { packages }),\n dynamicImports,\n ignoredBundlerWarnings,\n bundlerCapabilities,\n unsafeCjsExportNames,\n };\n\n const bundleInternalResult = await bundle(bundleOptions, { config });\n bundleRequest.result = {\n ...bundleInternalResult,\n outputPath: bundleOptions.outputPath ?? outputPath,\n hash: cacheValidationHash,\n bundleSource: 'bundler',\n };\n\n if (bundlerCapabilities?.density) {\n // Get export maps that need to be written as stubs for density.\n // If there are density exports, write stubs for them.\n const densityErrors = await writeStubForDensityEntries({\n options: {\n packageName,\n packagePath,\n result: bundleInternalResult,\n },\n context: { packages, config },\n });\n\n // Add any errors to the result.\n if (densityErrors.length > 0) {\n bundleRequest.result.errors = [...(bundleRequest.result.errors ?? []), ...densityErrors];\n }\n }\n }\n\n // Write the result to disk.\n await saveResultToCache(bundleRequest.result);\n }\n\n // If we should find required imports and exports per bundle\n if (shouldGetBundleInfo && !bundleRequest.result?.errors?.length && bundleRequest.result?.outputFiles?.length) {\n // Exports map is needed to find the bundle info per entry we intend to bundle.\n // Exports map is used instead of bundleRequest.entries since it is easier to use\n // because it contains the paths other packages use to import the entry and\n // the relative location of the bundled files.\n const exportsMap = await getExportsMap({ packagePath }, { packages, config });\n\n const bundleInfo = await getBundleInfo({\n outputPath,\n outputFiles: bundleRequest.result.outputFiles,\n exportsMap,\n isExternal,\n packagePath,\n });\n\n bundleRequest.result.info = bundleInfo;\n\n if (config.logBundleInfo) {\n // Write to cache for future use. (Ignore the promise result.)\n void writeJson(path.join(outputPath, 'bundle-info.json'), bundleInfo);\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"createBundleTask.d.ts","sourceRoot":"","sources":["../../src/utilities/createBundleTask.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAc,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,iBAAiB,GACxB,cAAc,CAAC,eAAe,EAAE,MAAM,iBAAiB,CAAC,SAAS,CAAC,GAAG,WAAW,GAAG,oBAAoB,GAAG,MAAM,CAAC,GAClH,IAAI,CAAC,aAAa,CAAC,CA0DrB"}
1
+ {"version":3,"file":"createBundleTask.d.ts","sourceRoot":"","sources":["../../src/utilities/createBundleTask.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAc,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,iBAAiB,GACxB,cAAc,CAAC,eAAe,EAAE,MAAM,iBAAiB,CAAC,SAAS,CAAC,GAAG,WAAW,GAAG,oBAAoB,GAAG,MAAM,CAAC,GAClH,IAAI,CAAC,aAAa,CAAC,CA4DrB"}
@@ -8,7 +8,7 @@ import { bundleTask } from './bundleTask.js';
8
8
  */
9
9
  export function createBundleTask(options, context) {
10
10
  const { bundleRequest } = options;
11
- const { id, packageName, version, packagePath, isExternal } = bundleRequest;
11
+ const { id, packageName, version, packagePath, isExternal, targetEnvironment } = bundleRequest;
12
12
  const { packageHashes, session } = context;
13
13
  const { hash, sourceHash } = options;
14
14
  const name = `Bundle ${packageName}@${version}`;
@@ -24,7 +24,9 @@ export function createBundleTask(options, context) {
24
24
  // Add a hash to the import map for this package.
25
25
  // (Read the session properties here rather than above because they might not be set yet.)
26
26
  if (session.importMap && session.urls.bundleServer && session.urls.appServer) {
27
- const importMapHash = sourceHash || hash || (await packageHashes.get({ packagePath, isSourceHashingEnabled: !isExternal }));
27
+ const importMapHash = sourceHash ||
28
+ hash ||
29
+ (await packageHashes.get({ packagePath, isSourceHashingEnabled: !isExternal, targetEnvironment }));
28
30
  addImportMapHash({ packageName, version, hash: importMapHash }, context);
29
31
  }
30
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createBundleTask.js","sourceRoot":"","sources":["../../src/utilities/createBundleTask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAkD,MAAM,iBAAiB,CAAC;AAG7F;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAA0B,EAC1B,OACmH;IAEnH,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC;IAC5E,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC3C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACrC,MAAM,IAAI,GAAG,UAAU,WAAW,IAAI,OAAO,EAAE,CAAC;IAEhD,OAAO;QACL,gCAAgC;QAChC,IAAI;QACJ,EAAE;QACF,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;QACvC,KAAK,EAAE,CAAC,UAAU;QAClB,KAAK,CAAC,OAAO;YACX,MAAM,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEnC,IAAI,CAAC;gBACH,iDAAiD;gBACjD,0FAA0F;gBAC1F,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC7E,MAAM,aAAa,GACjB,UAAU,IAAI,IAAI,IAAI,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;oBACxG,gBAAgB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC3E,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,uCAAuC,aAAa,CAAC,WAAW,GAAG,EAAG,CAAW,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YAC9G,CAAC;YAED,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;gBACtC,OAAO;YACT,CAAC;YAED,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAEjC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAE7E,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC;QACnC,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;QACpC,CAAC;QACD,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM;QAC7C,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;YAC1B,EAAE;YACF,kCAAkC;YAClC,IAAI;YACJ,SAAS,EAAE,WAAW,IAAI,EAAE;SAC7B,CAAC;QACF,iBAAiB,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAClC,EAAE;YACF,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;YAClC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ;YACtC,UAAU,EAAE,aAAa,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE;SACnD,CAAC;KACH,CAAC;AACJ,CAAC","sourcesContent":["import { addImportMapHash } from '@ms-cloudpack/import-map';\nimport fs from 'fs';\nimport path from 'path';\nimport type { BundleRequest } from '../types/BundleRequest.js';\nimport type { Task } from '../types/Task.js';\nimport { bundleTask, type BundleTaskContext, type BundleTaskOptions } from './bundleTask.js';\nimport type { PartialContext } from '../types/Context.js';\n\n/**\n * Create a bundle task (internally calls `bundleTask()`) that can be executed by the server's TaskRunner.\n * This allows active tasks to be tracked remotely (e.g. in the browser) and allows the user to cancel tasks.\n */\nexport function createBundleTask(\n options: BundleTaskOptions,\n context: BundleTaskContext &\n PartialContext<'packageHashes', keyof BundleTaskContext['session'] | 'importMap' | 'packageImportPaths' | 'urls'>,\n): Task<BundleRequest> {\n const { bundleRequest } = options;\n const { id, packageName, version, packagePath, isExternal } = bundleRequest;\n const { packageHashes, session } = context;\n const { hash, sourceHash } = options;\n const name = `Bundle ${packageName}@${version}`;\n\n return {\n // Name for task runner logging.\n name,\n id,\n dir: `${path.join(packagePath, 'src')}`,\n watch: !isExternal,\n async execute(): Promise<BundleRequest> {\n await bundleTask(options, context);\n\n try {\n // Add a hash to the import map for this package.\n // (Read the session properties here rather than above because they might not be set yet.)\n if (session.importMap && session.urls.bundleServer && session.urls.appServer) {\n const importMapHash =\n sourceHash || hash || (await packageHashes.get({ packagePath, isSourceHashingEnabled: !isExternal }));\n addImportMapHash({ packageName, version, hash: importMapHash }, context);\n }\n } catch (e) {\n console.error(`Error adding hash to import map for ${bundleRequest.packagePath}:`, (e as Error).stack || e);\n }\n\n return bundleRequest;\n },\n clear: () => {\n if (!bundleRequest.result?.outputPath) {\n return;\n }\n\n bundleRequest.result.dispose?.();\n\n fs.rmSync(bundleRequest.result.outputPath, { recursive: true, force: true });\n\n bundleRequest.result = undefined;\n },\n onDispose: () => {\n bundleRequest.result?.dispose?.();\n },\n getErrors: () => bundleRequest.result?.errors,\n getStartDescription: () => ({\n id,\n // Name to display in the overlay.\n name,\n inputPath: packagePath || '',\n }),\n getEndDescription: (taskResult) => ({\n id,\n errors: taskResult?.result?.errors,\n warnings: taskResult?.result?.warnings,\n outputPath: bundleRequest.result?.outputPath || '',\n }),\n };\n}\n"]}
1
+ {"version":3,"file":"createBundleTask.js","sourceRoot":"","sources":["../../src/utilities/createBundleTask.ts"],"names":[],"mappings":"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","sourcesContent":["import { addImportMapHash } from '@ms-cloudpack/import-map';\nimport fs from 'fs';\nimport path from 'path';\nimport type { BundleRequest } from '../types/BundleRequest.js';\nimport type { Task } from '../types/Task.js';\nimport { bundleTask, type BundleTaskContext, type BundleTaskOptions } from './bundleTask.js';\nimport type { PartialContext } from '../types/Context.js';\n\n/**\n * Create a bundle task (internally calls `bundleTask()`) that can be executed by the server's TaskRunner.\n * This allows active tasks to be tracked remotely (e.g. in the browser) and allows the user to cancel tasks.\n */\nexport function createBundleTask(\n options: BundleTaskOptions,\n context: BundleTaskContext &\n PartialContext<'packageHashes', keyof BundleTaskContext['session'] | 'importMap' | 'packageImportPaths' | 'urls'>,\n): Task<BundleRequest> {\n const { bundleRequest } = options;\n const { id, packageName, version, packagePath, isExternal, targetEnvironment } = bundleRequest;\n const { packageHashes, session } = context;\n const { hash, sourceHash } = options;\n const name = `Bundle ${packageName}@${version}`;\n\n return {\n // Name for task runner logging.\n name,\n id,\n dir: `${path.join(packagePath, 'src')}`,\n watch: !isExternal,\n async execute(): Promise<BundleRequest> {\n await bundleTask(options, context);\n\n try {\n // Add a hash to the import map for this package.\n // (Read the session properties here rather than above because they might not be set yet.)\n if (session.importMap && session.urls.bundleServer && session.urls.appServer) {\n const importMapHash =\n sourceHash ||\n hash ||\n (await packageHashes.get({ packagePath, isSourceHashingEnabled: !isExternal, targetEnvironment }));\n addImportMapHash({ packageName, version, hash: importMapHash }, context);\n }\n } catch (e) {\n console.error(`Error adding hash to import map for ${bundleRequest.packagePath}:`, (e as Error).stack || e);\n }\n\n return bundleRequest;\n },\n clear: () => {\n if (!bundleRequest.result?.outputPath) {\n return;\n }\n\n bundleRequest.result.dispose?.();\n\n fs.rmSync(bundleRequest.result.outputPath, { recursive: true, force: true });\n\n bundleRequest.result = undefined;\n },\n onDispose: () => {\n bundleRequest.result?.dispose?.();\n },\n getErrors: () => bundleRequest.result?.errors,\n getStartDescription: () => ({\n id,\n // Name to display in the overlay.\n name,\n inputPath: packagePath || '',\n }),\n getEndDescription: (taskResult) => ({\n id,\n errors: taskResult?.result?.errors,\n warnings: taskResult?.result?.warnings,\n outputPath: bundleRequest.result?.outputPath || '',\n }),\n };\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  import type { RemoteCacheClientOperationOptions } from '@ms-cloudpack/remote-cache';
2
2
  import type { PartialContext } from '../types/Context.js';
3
+ import type { TargetEnvironment } from '@ms-cloudpack/common-types';
3
4
  export declare function createRemoteCacheClientOperationOptions(options: {
4
5
  packagePath: string;
6
+ targetEnvironment: TargetEnvironment;
5
7
  }, context: PartialContext<'packageHashes' | 'packages', 'cachePath'>): Promise<RemoteCacheClientOperationOptions>;
6
8
  //# sourceMappingURL=createRemoteCacheClientOperationOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createRemoteCacheClientOperationOptions.d.ts","sourceRoot":"","sources":["../../src/utilities/createRemoteCacheClientOperationOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAEpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,wBAAsB,uCAAuC,CAC3D,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EAChC,OAAO,EAAE,cAAc,CAAC,eAAe,GAAG,UAAU,EAAE,WAAW,CAAC,GACjE,OAAO,CAAC,iCAAiC,CAAC,CAkB5C"}
1
+ {"version":3,"file":"createRemoteCacheClientOperationOptions.d.ts","sourceRoot":"","sources":["../../src/utilities/createRemoteCacheClientOperationOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAEpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,wBAAsB,uCAAuC,CAC3D,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,iBAAiB,CAAA;CAAE,EACtE,OAAO,EAAE,cAAc,CAAC,eAAe,GAAG,UAAU,EAAE,WAAW,CAAC,GACjE,OAAO,CAAC,iCAAiC,CAAC,CAa5C"}
@@ -4,11 +4,9 @@ export async function createRemoteCacheClientOperationOptions(options, context)
4
4
  const { packagePath } = options;
5
5
  const { packages } = context;
6
6
  const { name, version } = await packages.get(packagePath);
7
- const localLocation = await getBundleLocation({
8
- packagePath,
9
- }, context);
7
+ const localLocation = await getBundleLocation(options, context);
10
8
  return {
11
- id: await getRemoteCachePackageId({ packagePath }, context),
9
+ id: await getRemoteCachePackageId(options, context),
12
10
  path: localLocation.path,
13
11
  friendlyName: `${name}@${version}`,
14
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"createRemoteCacheClientOperationOptions.js","sourceRoot":"","sources":["../../src/utilities/createRemoteCacheClientOperationOptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,uCAAuC,CAC3D,OAAgC,EAChC,OAAkE;IAElE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE1D,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAC3C;QACE,WAAW;KACZ,EACD,OAAO,CACR,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,MAAM,uBAAuB,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC;QAC3D,IAAI,EAAE,aAAa,CAAC,IAAI;QACxB,YAAY,EAAE,GAAG,IAAI,IAAI,OAAO,EAAE;KACnC,CAAC;AACJ,CAAC","sourcesContent":["import type { RemoteCacheClientOperationOptions } from '@ms-cloudpack/remote-cache';\nimport { getBundleLocation } from './getBundleLocation.js';\nimport type { PartialContext } from '../types/Context.js';\nimport { getRemoteCachePackageId } from './getRemoteCachePackageId.js';\n\nexport async function createRemoteCacheClientOperationOptions(\n options: { packagePath: string },\n context: PartialContext<'packageHashes' | 'packages', 'cachePath'>,\n): Promise<RemoteCacheClientOperationOptions> {\n const { packagePath } = options;\n const { packages } = context;\n\n const { name, version } = await packages.get(packagePath);\n\n const localLocation = await getBundleLocation(\n {\n packagePath,\n },\n context,\n );\n\n return {\n id: await getRemoteCachePackageId({ packagePath }, context),\n path: localLocation.path,\n friendlyName: `${name}@${version}`,\n };\n}\n"]}
1
+ {"version":3,"file":"createRemoteCacheClientOperationOptions.js","sourceRoot":"","sources":["../../src/utilities/createRemoteCacheClientOperationOptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,MAAM,CAAC,KAAK,UAAU,uCAAuC,CAC3D,OAAsE,EACtE,OAAkE;IAElE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE1D,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEhE,OAAO;QACL,EAAE,EAAE,MAAM,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC;QACnD,IAAI,EAAE,aAAa,CAAC,IAAI;QACxB,YAAY,EAAE,GAAG,IAAI,IAAI,OAAO,EAAE;KACnC,CAAC;AACJ,CAAC","sourcesContent":["import type { RemoteCacheClientOperationOptions } from '@ms-cloudpack/remote-cache';\nimport { getBundleLocation } from './getBundleLocation.js';\nimport type { PartialContext } from '../types/Context.js';\nimport { getRemoteCachePackageId } from './getRemoteCachePackageId.js';\nimport type { TargetEnvironment } from '@ms-cloudpack/common-types';\n\nexport async function createRemoteCacheClientOperationOptions(\n options: { packagePath: string; targetEnvironment: TargetEnvironment },\n context: PartialContext<'packageHashes' | 'packages', 'cachePath'>,\n): Promise<RemoteCacheClientOperationOptions> {\n const { packagePath } = options;\n const { packages } = context;\n\n const { name, version } = await packages.get(packagePath);\n\n const localLocation = await getBundleLocation(options, context);\n\n return {\n id: await getRemoteCachePackageId(options, context),\n path: localLocation.path,\n friendlyName: `${name}@${version}`,\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { type TaskReporterTaskResult } from '@ms-cloudpack/task-reporter';
1
+ import { type TaskReporterTaskResult, type TaskReporter } from '@ms-cloudpack/task-reporter';
2
2
  import type { BundleRequest } from '../types/BundleRequest.js';
3
3
  /**
4
4
  * Format a bundle result into a TaskReporter task result.
@@ -9,5 +9,5 @@ import type { BundleRequest } from '../types/BundleRequest.js';
9
9
  * - Successful tasks will only be shown with `--verbose` or `--debug`, or if the command sets
10
10
  * `showCompleted` (`cloudpack bundle` does as of writing).
11
11
  */
12
- export declare function formatBundleTaskResult(bundleRequest: BundleRequest): TaskReporterTaskResult;
12
+ export declare function formatBundleTaskResult(bundleRequest: BundleRequest, reporter: TaskReporter): TaskReporterTaskResult;
13
13
  //# sourceMappingURL=formatBundleTaskResult.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatBundleTaskResult.d.ts","sourceRoot":"","sources":["../../src/utilities/formatBundleTaskResult.ts"],"names":[],"mappings":"AACA,OAAO,EAAqC,KAAK,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC7G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK/D;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,aAAa,GAAG,sBAAsB,CAsD3F"}
1
+ {"version":3,"file":"formatBundleTaskResult.d.ts","sourceRoot":"","sources":["../../src/utilities/formatBundleTaskResult.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK/D;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,GAAG,sBAAsB,CAwDnH"}
@@ -1,5 +1,5 @@
1
1
  import { formatLocation } from '@ms-cloudpack/path-utilities';
2
- import { red, bulletedList, plural, indent } from '@ms-cloudpack/task-reporter';
2
+ import { red, bulletedList, plural, indent, } from '@ms-cloudpack/task-reporter';
3
3
  import { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';
4
4
  import { getFileSizeSync } from './getFileSizeSync.js';
5
5
  import path from 'path';
@@ -12,7 +12,7 @@ import path from 'path';
12
12
  * - Successful tasks will only be shown with `--verbose` or `--debug`, or if the command sets
13
13
  * `showCompleted` (`cloudpack bundle` does as of writing).
14
14
  */
15
- export function formatBundleTaskResult(bundleRequest) {
15
+ export function formatBundleTaskResult(bundleRequest, reporter) {
16
16
  const { result, packageName, version, packagePath } = bundleRequest;
17
17
  if (!result) {
18
18
  return {
@@ -37,20 +37,22 @@ export function formatBundleTaskResult(bundleRequest) {
37
37
  const hasErrors = result.errors.length > 0;
38
38
  const status = hasErrors ? 'fail' : 'complete';
39
39
  const message = hasErrors ? plural(result.errors.length, 'error$s found') : undefined;
40
- // Only shown with --verbose or --debug
41
- const details = bulletedList([
42
- `Package: ${bundleRequest.packageName}@${bundleRequest.version}`,
43
- `Bundler: ${result.bundler || 'unknown'}`,
44
- `From cache: ${bundleRequest.resultFromCache}`,
45
- `Input path: ${bundleRequest.packagePath}`,
46
- `Entries:`,
47
- Object.values(result.entries || {}),
48
- `Output path: ${result.outputPath}`,
49
- `Output files:`,
50
- result.outputFiles.map((file) => `${normalizeRelativePath(file.outputPath)} (${getFileSizeSync(
51
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- there are output files, so this is set
52
- path.resolve(result.outputPath, file.outputPath))})`),
53
- ]);
40
+ // Only shown with --verbose or --debug. Don't calculate if not needed.
41
+ const details = reporter.getOptions().showTaskDetails
42
+ ? bulletedList([
43
+ `Package: ${bundleRequest.packageName}@${bundleRequest.version}`,
44
+ `Bundler: ${result.bundler || 'unknown'}`,
45
+ `From cache: ${bundleRequest.resultFromCache}`,
46
+ `Input path: ${bundleRequest.packagePath}`,
47
+ `Entries:`,
48
+ Object.values(result.entries || {}),
49
+ `Output path: ${result.outputPath}`,
50
+ `Output files:`,
51
+ result.outputFiles.map((file) => `${normalizeRelativePath(file.outputPath)} (${getFileSizeSync(
52
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- there are output files, so this is set
53
+ path.resolve(result.outputPath, file.outputPath))})`),
54
+ ])
55
+ : undefined;
54
56
  return {
55
57
  status,
56
58
  message,
@@ -1 +1 @@
1
- {"version":3,"file":"formatBundleTaskResult.js","sourceRoot":"","sources":["../../src/utilities/formatBundleTaskResult.ts"],"names":[],"mappings":"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","sourcesContent":["import { formatLocation } from '@ms-cloudpack/path-utilities';\nimport { red, bulletedList, plural, indent, type TaskReporterTaskResult } from '@ms-cloudpack/task-reporter';\nimport type { BundleRequest } from '../types/BundleRequest.js';\nimport { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';\nimport { getFileSizeSync } from './getFileSizeSync.js';\nimport path from 'path';\n\n/**\n * Format a bundle result into a TaskReporter task result.\n *\n * NOTE: The info as formatted here will only be shown when a task is completed, not in the summary.\n * Reporter configuration may change over time, but as of writing:\n * - Failed tasks (message and errors) will be shown unless `--quiet`.\n * - Successful tasks will only be shown with `--verbose` or `--debug`, or if the command sets\n * `showCompleted` (`cloudpack bundle` does as of writing).\n */\nexport function formatBundleTaskResult(bundleRequest: BundleRequest): TaskReporterTaskResult {\n const { result, packageName, version, packagePath } = bundleRequest;\n\n if (!result) {\n return {\n status: 'fail',\n details: `[bundleTask] No result was found for \"${packageName}@${version}\"`,\n };\n }\n\n result.outputFiles ??= [];\n result.errors ??= [];\n result.warnings ??= [];\n\n if (!result.outputFiles.length && !result.errors?.length) {\n result.warnings.push({\n text: `No output files were found for \"${packageName}\" in \"${result.outputPath}\"`,\n source: 'bundleTask',\n });\n }\n\n const errors = result.errors?.map((error) => {\n const { text, source, location } = error;\n const filePath = location ? ' ' + formatLocation({ ...location, fromPath: packagePath }) : '';\n return `[${source}]${filePath}\\n${red(indent(text, 1))}`;\n });\n const hasErrors = result.errors.length > 0;\n const status = hasErrors ? 'fail' : 'complete';\n const message = hasErrors ? plural(result.errors.length, 'error$s found') : undefined;\n // Only shown with --verbose or --debug\n const details = bulletedList([\n `Package: ${bundleRequest.packageName}@${bundleRequest.version}`,\n `Bundler: ${result.bundler || 'unknown'}`,\n `From cache: ${bundleRequest.resultFromCache}`,\n `Input path: ${bundleRequest.packagePath}`,\n `Entries:`,\n Object.values(result.entries || {}),\n `Output path: ${result.outputPath}`,\n `Output files:`,\n result.outputFiles.map(\n (file) =>\n `${normalizeRelativePath(file.outputPath)} (${getFileSizeSync(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- there are output files, so this is set\n path.resolve(result.outputPath!, file.outputPath),\n )})`,\n ),\n ]);\n\n return {\n status,\n message,\n errors,\n details,\n };\n}\n"]}
1
+ {"version":3,"file":"formatBundleTaskResult.js","sourceRoot":"","sources":["../../src/utilities/formatBundleTaskResult.ts"],"names":[],"mappings":"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","sourcesContent":["import { formatLocation } from '@ms-cloudpack/path-utilities';\nimport {\n red,\n bulletedList,\n plural,\n indent,\n type TaskReporterTaskResult,\n type TaskReporter,\n} from '@ms-cloudpack/task-reporter';\nimport type { BundleRequest } from '../types/BundleRequest.js';\nimport { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';\nimport { getFileSizeSync } from './getFileSizeSync.js';\nimport path from 'path';\n\n/**\n * Format a bundle result into a TaskReporter task result.\n *\n * NOTE: The info as formatted here will only be shown when a task is completed, not in the summary.\n * Reporter configuration may change over time, but as of writing:\n * - Failed tasks (message and errors) will be shown unless `--quiet`.\n * - Successful tasks will only be shown with `--verbose` or `--debug`, or if the command sets\n * `showCompleted` (`cloudpack bundle` does as of writing).\n */\nexport function formatBundleTaskResult(bundleRequest: BundleRequest, reporter: TaskReporter): TaskReporterTaskResult {\n const { result, packageName, version, packagePath } = bundleRequest;\n\n if (!result) {\n return {\n status: 'fail',\n details: `[bundleTask] No result was found for \"${packageName}@${version}\"`,\n };\n }\n\n result.outputFiles ??= [];\n result.errors ??= [];\n result.warnings ??= [];\n\n if (!result.outputFiles.length && !result.errors?.length) {\n result.warnings.push({\n text: `No output files were found for \"${packageName}\" in \"${result.outputPath}\"`,\n source: 'bundleTask',\n });\n }\n\n const errors = result.errors?.map((error) => {\n const { text, source, location } = error;\n const filePath = location ? ' ' + formatLocation({ ...location, fromPath: packagePath }) : '';\n return `[${source}]${filePath}\\n${red(indent(text, 1))}`;\n });\n const hasErrors = result.errors.length > 0;\n const status = hasErrors ? 'fail' : 'complete';\n const message = hasErrors ? plural(result.errors.length, 'error$s found') : undefined;\n // Only shown with --verbose or --debug. Don't calculate if not needed.\n const details = reporter.getOptions().showTaskDetails\n ? bulletedList([\n `Package: ${bundleRequest.packageName}@${bundleRequest.version}`,\n `Bundler: ${result.bundler || 'unknown'}`,\n `From cache: ${bundleRequest.resultFromCache}`,\n `Input path: ${bundleRequest.packagePath}`,\n `Entries:`,\n Object.values(result.entries || {}),\n `Output path: ${result.outputPath}`,\n `Output files:`,\n result.outputFiles.map(\n (file) =>\n `${normalizeRelativePath(file.outputPath)} (${getFileSizeSync(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- there are output files, so this is set\n path.resolve(result.outputPath!, file.outputPath),\n )})`,\n ),\n ])\n : undefined;\n\n return {\n status,\n message,\n errors,\n details,\n };\n}\n"]}
@@ -1,6 +1,10 @@
1
1
  import type { PackageHashOptions } from '@ms-cloudpack/common-types';
2
2
  import type { PartialContext } from '../types/Context.js';
3
+ /**
4
+ * Get the output path (with hash) in the cache for a package bundle.
5
+ */
3
6
  export declare function getBundleLocation(options: Omit<PackageHashOptions, 'isSourceHashingEnabled'> & {
7
+ /** Use this hash instead of calculating. */
4
8
  hash?: string;
5
9
  }, context: PartialContext<'packages' | 'packageHashes', 'cachePath'>): Promise<{
6
10
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"getBundleLocation.d.ts","sourceRoot":"","sources":["../../src/utilities/getBundleLocation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/E,OAAO,EAAE,cAAc,CAAC,UAAU,GAAG,eAAe,EAAE,WAAW,CAAC,GACjE,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CA2B/C"}
1
+ {"version":3,"file":"getBundleLocation.d.ts","sourceRoot":"","sources":["../../src/utilities/getBundleLocation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,GAAG;IAC5D,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,EACD,OAAO,EAAE,cAAc,CAAC,UAAU,GAAG,eAAe,EAAE,WAAW,CAAC,GACjE,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB/C"}
@@ -1,20 +1,20 @@
1
1
  import filenamify from 'filenamify';
2
2
  import path from 'path';
3
+ /**
4
+ * Get the output path (with hash) in the cache for a package bundle.
5
+ */
3
6
  export async function getBundleLocation(options, context) {
4
- const { packagePath, shouldRecalculate, hash } = options;
7
+ const { hash, ...hashOptions } = options;
5
8
  const { packages, packageHashes, session } = context;
6
9
  const { cachePath } = session;
7
- const definition = await packages.get(packagePath);
10
+ const definition = await packages.get(options.packagePath);
8
11
  const { name, version } = definition;
9
12
  const hashResult = hash ||
10
13
  (await packageHashes.get({
11
- packagePath,
12
- /**
13
- * We don't use source hashing for location,
14
- * because we do not want to create a new folder for each change in a package.
15
- */
14
+ ...hashOptions,
15
+ // We don't use source hashing for location,
16
+ // because we do not want to create a new folder for each change in a package.
16
17
  isSourceHashingEnabled: false,
17
- shouldRecalculate,
18
18
  }));
19
19
  // Derive where the output should be.
20
20
  const folderName = `${filenamify(name, { replacement: '^' })}-${version}-${hashResult}`;
@@ -1 +1 @@
1
- {"version":3,"file":"getBundleLocation.js","sourceRoot":"","sources":["../../src/utilities/getBundleLocation.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA+E,EAC/E,OAAkE;IAElE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzD,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACrD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEnD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IAErC,MAAM,UAAU,GACd,IAAI;QACJ,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC;YACvB,WAAW;YACX;;;eAGG;YACH,sBAAsB,EAAE,KAAK;YAC7B,iBAAiB;SAClB,CAAC,CAAC,CAAC;IACN,qCAAqC;IACrC,MAAM,UAAU,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;IACxF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEpD,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,UAAU;KACX,CAAC;AACJ,CAAC","sourcesContent":["import type { PackageHashOptions } from '@ms-cloudpack/common-types';\nimport filenamify from 'filenamify';\nimport path from 'path';\nimport type { PartialContext } from '../types/Context.js';\n\nexport async function getBundleLocation(\n options: Omit<PackageHashOptions, 'isSourceHashingEnabled'> & { hash?: string },\n context: PartialContext<'packages' | 'packageHashes', 'cachePath'>,\n): Promise<{ path: string; folderName: string }> {\n const { packagePath, shouldRecalculate, hash } = options;\n const { packages, packageHashes, session } = context;\n const { cachePath } = session;\n const definition = await packages.get(packagePath);\n\n const { name, version } = definition;\n\n const hashResult =\n hash ||\n (await packageHashes.get({\n packagePath,\n /**\n * We don't use source hashing for location,\n * because we do not want to create a new folder for each change in a package.\n */\n isSourceHashingEnabled: false,\n shouldRecalculate,\n }));\n // Derive where the output should be.\n const folderName = `${filenamify(name, { replacement: '^' })}-${version}-${hashResult}`;\n const outputPath = path.join(cachePath, folderName);\n\n return {\n path: outputPath,\n folderName,\n };\n}\n"]}
1
+ {"version":3,"file":"getBundleLocation.js","sourceRoot":"","sources":["../../src/utilities/getBundleLocation.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAGC,EACD,OAAkE;IAElE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IACzC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACrD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAE3D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IAErC,MAAM,UAAU,GACd,IAAI;QACJ,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC;YACvB,GAAG,WAAW;YACd,4CAA4C;YAC5C,8EAA8E;YAC9E,sBAAsB,EAAE,KAAK;SAC9B,CAAC,CAAC,CAAC;IACN,qCAAqC;IACrC,MAAM,UAAU,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;IACxF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEpD,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,UAAU;KACX,CAAC;AACJ,CAAC","sourcesContent":["import type { PackageHashOptions } from '@ms-cloudpack/common-types';\nimport filenamify from 'filenamify';\nimport path from 'path';\nimport type { PartialContext } from '../types/Context.js';\n\n/**\n * Get the output path (with hash) in the cache for a package bundle.\n */\nexport async function getBundleLocation(\n options: Omit<PackageHashOptions, 'isSourceHashingEnabled'> & {\n /** Use this hash instead of calculating. */\n hash?: string;\n },\n context: PartialContext<'packages' | 'packageHashes', 'cachePath'>,\n): Promise<{ path: string; folderName: string }> {\n const { hash, ...hashOptions } = options;\n const { packages, packageHashes, session } = context;\n const { cachePath } = session;\n const definition = await packages.get(options.packagePath);\n\n const { name, version } = definition;\n\n const hashResult =\n hash ||\n (await packageHashes.get({\n ...hashOptions,\n // We don't use source hashing for location,\n // because we do not want to create a new folder for each change in a package.\n isSourceHashingEnabled: false,\n }));\n // Derive where the output should be.\n const folderName = `${filenamify(name, { replacement: '^' })}-${version}-${hashResult}`;\n const outputPath = path.join(cachePath, folderName);\n\n return {\n path: outputPath,\n folderName,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"getFileSizeSync.d.ts","sourceRoot":"","sources":["../../src/utilities/getFileSizeSync.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYxD"}
1
+ {"version":3,"file":"getFileSizeSync.d.ts","sourceRoot":"","sources":["../../src/utilities/getFileSizeSync.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkBxD"}
@@ -3,7 +3,14 @@ import fs from 'fs';
3
3
  * Given a file path, returns a human-readable file size description.
4
4
  */
5
5
  export function getFileSizeSync(filePath) {
6
- const { size } = fs.statSync(filePath);
6
+ let size;
7
+ try {
8
+ // Sometimes this throws due to file locks or something
9
+ size = fs.statSync(filePath).size;
10
+ }
11
+ catch {
12
+ return '?? bytes';
13
+ }
7
14
  if (size > 1024 * 1024) {
8
15
  return `${(size / 1024 / 1024).toFixed(2)} MB`;
9
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getFileSizeSync.js","sourceRoot":"","sources":["../../src/utilities/getFileSizeSync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACjD,CAAC;IAED,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1C,CAAC;IAED,OAAO,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AACpD,CAAC","sourcesContent":["import fs from 'fs';\n\n/**\n * Given a file path, returns a human-readable file size description.\n */\nexport function getFileSizeSync(filePath: string): string {\n const { size } = fs.statSync(filePath);\n\n if (size > 1024 * 1024) {\n return `${(size / 1024 / 1024).toFixed(2)} MB`;\n }\n\n if (size > 1024) {\n return `${(size / 1024).toFixed(2)} KB`;\n }\n\n return `${size} ${size === 1 ? 'byte' : 'bytes'}`;\n}\n"]}
1
+ {"version":3,"file":"getFileSizeSync.js","sourceRoot":"","sources":["../../src/utilities/getFileSizeSync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,uDAAuD;QACvD,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACjD,CAAC;IAED,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1C,CAAC;IAED,OAAO,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AACpD,CAAC","sourcesContent":["import fs from 'fs';\n\n/**\n * Given a file path, returns a human-readable file size description.\n */\nexport function getFileSizeSync(filePath: string): string {\n let size: number;\n try {\n // Sometimes this throws due to file locks or something\n size = fs.statSync(filePath).size;\n } catch {\n return '?? bytes';\n }\n\n if (size > 1024 * 1024) {\n return `${(size / 1024 / 1024).toFixed(2)} MB`;\n }\n\n if (size > 1024) {\n return `${(size / 1024).toFixed(2)} KB`;\n }\n\n return `${size} ${size === 1 ? 'byte' : 'bytes'}`;\n}\n"]}
@@ -1,4 +1,7 @@
1
+ import type { TargetEnvironment } from '@ms-cloudpack/common-types';
1
2
  import type { RemoteCacheClientOperationOptions } from '@ms-cloudpack/remote-cache';
2
3
  import type { PartialContext } from '../types/Context.js';
3
- export declare function getPackagesToSync(context: PartialContext<'packages' | 'packageHashes', 'resolveMap' | 'cachePath' | 'config'>): Promise<RemoteCacheClientOperationOptions[]>;
4
+ export declare function getPackagesToSync(options: {
5
+ targetEnvironment: TargetEnvironment;
6
+ }, context: PartialContext<'packages' | 'packageHashes', 'resolveMap' | 'cachePath' | 'config'>): Promise<RemoteCacheClientOperationOptions[]>;
4
7
  //# sourceMappingURL=getPackagesToSync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getPackagesToSync.d.ts","sourceRoot":"","sources":["../../src/utilities/getPackagesToSync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAEpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,CAAC,UAAU,GAAG,eAAe,EAAE,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC,GAC3F,OAAO,CAAC,iCAAiC,EAAE,CAAC,CAQ9C"}
1
+ {"version":3,"file":"getPackagesToSync.d.ts","sourceRoot":"","sources":["../../src/utilities/getPackagesToSync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAErF,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAEpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,wBAAsB,iBAAiB,CACrC,OAAO,EAAE;IAAE,iBAAiB,EAAE,iBAAiB,CAAA;CAAE,EACjD,OAAO,EAAE,cAAc,CAAC,UAAU,GAAG,eAAe,EAAE,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC,GAC3F,OAAO,CAAC,iCAAiC,EAAE,CAAC,CAS9C"}
@@ -1,21 +1,22 @@
1
1
  import { isExternalPackage } from '@ms-cloudpack/path-utilities';
2
2
  import { createRemoteCacheClientOperationOptions } from './createRemoteCacheClientOperationOptions.js';
3
- export async function getPackagesToSync(context) {
3
+ export async function getPackagesToSync(options, context) {
4
+ const { targetEnvironment } = options;
4
5
  const { session } = context;
5
6
  const { resolveMap } = session;
6
7
  const list = [];
7
- await processEntries({ entries: Object.values(resolveMap), list }, context);
8
+ await processEntries({ entries: Object.values(resolveMap), list, targetEnvironment }, context);
8
9
  return list;
9
10
  }
10
11
  async function processEntries(options, context) {
11
- const { entries, list } = options;
12
+ const { entries, list, targetEnvironment } = options;
12
13
  const syncInternalPackages = context.session.config.features || {};
13
14
  for (const { path: packagePath, scopedVersions } of entries) {
14
15
  if (isExternalPackage(packagePath) || syncInternalPackages) {
15
- list.push(await createRemoteCacheClientOperationOptions({ packagePath }, context));
16
+ list.push(await createRemoteCacheClientOperationOptions({ packagePath, targetEnvironment }, context));
16
17
  }
17
18
  if (scopedVersions) {
18
- await processEntries({ list, entries: Object.values(scopedVersions) }, context);
19
+ await processEntries({ list, entries: Object.values(scopedVersions), targetEnvironment }, context);
19
20
  }
20
21
  }
21
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getPackagesToSync.js","sourceRoot":"","sources":["../../src/utilities/getPackagesToSync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,uCAAuC,EAAE,MAAM,8CAA8C,CAAC;AAGvG,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA4F;IAE5F,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC/B,MAAM,IAAI,GAAwC,EAAE,CAAC;IAErD,MAAM,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IAE5E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,OAGC,EACD,OAA6E;IAE7E,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IAEnE,KAAK,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,IAAI,OAAO,EAAE,CAAC;QAC5D,IAAI,iBAAiB,CAAC,WAAW,CAAC,IAAI,oBAAoB,EAAE,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,MAAM,uCAAuC,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QACrF,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import type { ResolveMapEntry } from '@ms-cloudpack/common-types';\nimport { isExternalPackage } from '@ms-cloudpack/path-utilities';\nimport type { RemoteCacheClientOperationOptions } from '@ms-cloudpack/remote-cache';\nimport { createRemoteCacheClientOperationOptions } from './createRemoteCacheClientOperationOptions.js';\nimport type { PartialContext } from '../types/Context.js';\n\nexport async function getPackagesToSync(\n context: PartialContext<'packages' | 'packageHashes', 'resolveMap' | 'cachePath' | 'config'>,\n): Promise<RemoteCacheClientOperationOptions[]> {\n const { session } = context;\n const { resolveMap } = session;\n const list: RemoteCacheClientOperationOptions[] = [];\n\n await processEntries({ entries: Object.values(resolveMap), list }, context);\n\n return list;\n}\n\nasync function processEntries(\n options: {\n entries: ResolveMapEntry[];\n list: RemoteCacheClientOperationOptions[];\n },\n context: PartialContext<'packages' | 'packageHashes', 'cachePath' | 'config'>,\n): Promise<void> {\n const { entries, list } = options;\n const syncInternalPackages = context.session.config.features || {};\n\n for (const { path: packagePath, scopedVersions } of entries) {\n if (isExternalPackage(packagePath) || syncInternalPackages) {\n list.push(await createRemoteCacheClientOperationOptions({ packagePath }, context));\n }\n\n if (scopedVersions) {\n await processEntries({ list, entries: Object.values(scopedVersions) }, context);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"getPackagesToSync.js","sourceRoot":"","sources":["../../src/utilities/getPackagesToSync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,uCAAuC,EAAE,MAAM,8CAA8C,CAAC;AAGvG,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAiD,EACjD,OAA4F;IAE5F,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC/B,MAAM,IAAI,GAAwC,EAAE,CAAC;IAErD,MAAM,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,OAAO,CAAC,CAAC;IAE/F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,OAIC,EACD,OAA6E;IAE7E,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IACrD,MAAM,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IAEnE,KAAK,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,IAAI,OAAO,EAAE,CAAC;QAC5D,IAAI,iBAAiB,CAAC,WAAW,CAAC,IAAI,oBAAoB,EAAE,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,MAAM,uCAAuC,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QACxG,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,iBAAiB,EAAE,EAAE,OAAO,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import type { ResolveMapEntry, TargetEnvironment } from '@ms-cloudpack/common-types';\nimport { isExternalPackage } from '@ms-cloudpack/path-utilities';\nimport type { RemoteCacheClientOperationOptions } from '@ms-cloudpack/remote-cache';\nimport { createRemoteCacheClientOperationOptions } from './createRemoteCacheClientOperationOptions.js';\nimport type { PartialContext } from '../types/Context.js';\n\nexport async function getPackagesToSync(\n options: { targetEnvironment: TargetEnvironment },\n context: PartialContext<'packages' | 'packageHashes', 'resolveMap' | 'cachePath' | 'config'>,\n): Promise<RemoteCacheClientOperationOptions[]> {\n const { targetEnvironment } = options;\n const { session } = context;\n const { resolveMap } = session;\n const list: RemoteCacheClientOperationOptions[] = [];\n\n await processEntries({ entries: Object.values(resolveMap), list, targetEnvironment }, context);\n\n return list;\n}\n\nasync function processEntries(\n options: {\n targetEnvironment: TargetEnvironment;\n entries: ResolveMapEntry[];\n list: RemoteCacheClientOperationOptions[];\n },\n context: PartialContext<'packages' | 'packageHashes', 'cachePath' | 'config'>,\n): Promise<void> {\n const { entries, list, targetEnvironment } = options;\n const syncInternalPackages = context.session.config.features || {};\n\n for (const { path: packagePath, scopedVersions } of entries) {\n if (isExternalPackage(packagePath) || syncInternalPackages) {\n list.push(await createRemoteCacheClientOperationOptions({ packagePath, targetEnvironment }, context));\n }\n\n if (scopedVersions) {\n await processEntries({ list, entries: Object.values(scopedVersions), targetEnvironment }, context);\n }\n }\n}\n"]}
@@ -1,5 +1,7 @@
1
+ import type { TargetEnvironment } from '@ms-cloudpack/common-types';
1
2
  import type { PartialContext } from '../types/Context.js';
2
3
  export declare function getRemoteCachePackageId(options: {
3
4
  packagePath: string;
5
+ targetEnvironment: TargetEnvironment;
4
6
  }, context: PartialContext<'packageHashes' | 'packages', 'cachePath'>): Promise<string>;
5
7
  //# sourceMappingURL=getRemoteCachePackageId.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getRemoteCachePackageId.d.ts","sourceRoot":"","sources":["../../src/utilities/getRemoteCachePackageId.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EAChC,OAAO,EAAE,cAAc,CAAC,eAAe,GAAG,UAAU,EAAE,WAAW,CAAC,GACjE,OAAO,CAAC,MAAM,CAAC,CAejB"}
1
+ {"version":3,"file":"getRemoteCachePackageId.d.ts","sourceRoot":"","sources":["../../src/utilities/getRemoteCachePackageId.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,iBAAiB,CAAA;CAAE,EACtE,OAAO,EAAE,cAAc,CAAC,eAAe,GAAG,UAAU,EAAE,WAAW,CAAC,GACjE,OAAO,CAAC,MAAM,CAAC,CAcjB"}
@@ -1,11 +1,11 @@
1
1
  import { getBundleLocation } from './getBundleLocation.js';
2
2
  export async function getRemoteCachePackageId(options, context) {
3
- const { packagePath } = options;
4
3
  const { folderName } = await getBundleLocation({
5
- packagePath,
4
+ ...options,
6
5
  hash: await context.packageHashes.get({
7
- packagePath,
8
- isSourceHashingEnabled: true, // Source hashing is only enabled for internal packages in the PackageHashes, we do not need to check here.
6
+ ...options,
7
+ // Source hashing is only enabled for internal packages in the PackageHashes, we do not need to check here.
8
+ isSourceHashingEnabled: true,
9
9
  }),
10
10
  }, context);
11
11
  return folderName;
@@ -1 +1 @@
1
- {"version":3,"file":"getRemoteCachePackageId.js","sourceRoot":"","sources":["../../src/utilities/getRemoteCachePackageId.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAgC,EAChC,OAAkE;IAElE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEhC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,iBAAiB,CAC5C;QACE,WAAW;QACX,IAAI,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;YACpC,WAAW;YACX,sBAAsB,EAAE,IAAI,EAAE,2GAA2G;SAC1I,CAAC;KACH,EACD,OAAO,CACR,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import type { PartialContext } from '../types/Context.js';\nimport { getBundleLocation } from './getBundleLocation.js';\n\nexport async function getRemoteCachePackageId(\n options: { packagePath: string },\n context: PartialContext<'packageHashes' | 'packages', 'cachePath'>,\n): Promise<string> {\n const { packagePath } = options;\n\n const { folderName } = await getBundleLocation(\n {\n packagePath,\n hash: await context.packageHashes.get({\n packagePath,\n isSourceHashingEnabled: true, // Source hashing is only enabled for internal packages in the PackageHashes, we do not need to check here.\n }),\n },\n context,\n );\n\n return folderName;\n}\n"]}
1
+ {"version":3,"file":"getRemoteCachePackageId.js","sourceRoot":"","sources":["../../src/utilities/getRemoteCachePackageId.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAsE,EACtE,OAAkE;IAElE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,iBAAiB,CAC5C;QACE,GAAG,OAAO;QACV,IAAI,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;YACpC,GAAG,OAAO;YACV,2GAA2G;YAC3G,sBAAsB,EAAE,IAAI;SAC7B,CAAC;KACH,EACD,OAAO,CACR,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import type { TargetEnvironment } from '@ms-cloudpack/common-types';\nimport type { PartialContext } from '../types/Context.js';\nimport { getBundleLocation } from './getBundleLocation.js';\n\nexport async function getRemoteCachePackageId(\n options: { packagePath: string; targetEnvironment: TargetEnvironment },\n context: PartialContext<'packageHashes' | 'packages', 'cachePath'>,\n): Promise<string> {\n const { folderName } = await getBundleLocation(\n {\n ...options,\n hash: await context.packageHashes.get({\n ...options,\n // Source hashing is only enabled for internal packages in the PackageHashes, we do not need to check here.\n isSourceHashingEnabled: true,\n }),\n },\n context,\n );\n\n return folderName;\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import type { BundleRequest } from '../types/BundleRequest.js';
2
2
  import type { RemoteCacheClient } from '@ms-cloudpack/remote-cache';
3
3
  import type { PartialContext } from '../types/Context.js';
4
+ import type { TargetEnvironment } from '@ms-cloudpack/common-types';
4
5
  /**
5
6
  * Reads the `result.json` file from the cache, and construct a BundleRequest.result object from it.
6
7
  * If the package wasn't already cached and `context.remoteCacheClient` is set, attempts to download it.
@@ -12,6 +13,7 @@ export declare function readResultFromCache(params: {
12
13
  inputPath: string;
13
14
  /** The path to the cache directory. */
14
15
  outputPath: string;
16
+ targetEnvironment: TargetEnvironment;
15
17
  /** If provided, and the package isn't found locally, attempt to download it. */
16
18
  remoteCacheClient?: RemoteCacheClient;
17
19
  }, context: PartialContext<'packageHashes' | 'packages', 'cachePath'>): Promise<BundleRequest['result']>;
@@ -1 +1 @@
1
- {"version":3,"file":"readResultFromCache.d.ts","sourceRoot":"","sources":["../../src/utilities/readResultFromCache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IACN,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,EACD,OAAO,EAAE,cAAc,CAAC,eAAe,GAAG,UAAU,EAAE,WAAW,CAAC,GAEjE,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAoDlC"}
1
+ {"version":3,"file":"readResultFromCache.d.ts","sourceRoot":"","sources":["../../src/utilities/readResultFromCache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IACN,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,EACD,OAAO,EAAE,cAAc,CAAC,eAAe,GAAG,UAAU,EAAE,WAAW,CAAC,GAEjE,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAoDlC"}
@@ -6,7 +6,7 @@ import { getResultJsonPath } from './getResultJsonPath.js';
6
6
  * If the package wasn't already cached and `context.remoteCacheClient` is set, attempts to download it.
7
7
  */
8
8
  export async function readResultFromCache(params, context) {
9
- const { packageName, version, inputPath, outputPath, remoteCacheClient } = params;
9
+ const { packageName, version, inputPath, outputPath, targetEnvironment, remoteCacheClient } = params;
10
10
  let bundleSource;
11
11
  const resultPath = getResultJsonPath(outputPath);
12
12
  let resultFromFile = await readJson(resultPath);
@@ -15,7 +15,7 @@ export async function readResultFromCache(params, context) {
15
15
  }
16
16
  else if (remoteCacheClient) {
17
17
  const downloadResult = await remoteCacheClient.downloadFolder({
18
- id: await getRemoteCachePackageId({ packagePath: inputPath }, context),
18
+ id: await getRemoteCachePackageId({ packagePath: inputPath, targetEnvironment }, context),
19
19
  path: outputPath,
20
20
  friendlyName: `${packageName}@${version}`,
21
21
  });
@@ -1 +1 @@
1
- {"version":3,"file":"readResultFromCache.js","sourceRoot":"","sources":["../../src/utilities/readResultFromCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAIxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MASC,EACD,OAAkE;IAGlE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;IAClF,IAAI,YAAkE,CAAC;IAEvE,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAEjD,IAAI,cAAc,GAAG,MAAM,QAAQ,CAAa,UAAU,CAAC,CAAC;IAE5D,IAAI,cAAc,EAAE,CAAC;QACnB,YAAY,GAAG,aAAa,CAAC;IAC/B,CAAC;SAAM,IAAI,iBAAiB,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC;YAC5D,EAAE,EAAE,MAAM,uBAAuB,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC;YACtE,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,GAAG,WAAW,IAAI,OAAO,EAAE;SAC1C,CAAC,CAAC;QAEH,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,cAAc,GAAG,MAAM,QAAQ,CAAa,UAAU,CAAC,CAAC;YACxD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CACb,oDAAoD,UAAU,8CAA8C,CAC7G,CAAC;YACJ,CAAC;YACD,YAAY,GAAG,cAAc,CAAC;QAChC,CAAC;aAAM,IAAI,cAAc,KAAK,eAAe,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,oBAAoB,UAAU,0EAA0E,CACzG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAA4B;QACtC,GAAG,cAAc;QACjB,SAAS;QACT,UAAU;QACV,YAAY;KACb,CAAC;IAEF,8EAA8E;IAC9E,sCAAsC;IACtC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;QACpC,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IACD,qCAAqC;IAErC,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { readJson } from '@ms-cloudpack/json-utilities';\nimport type { BundleRequest } from '../types/BundleRequest.js';\nimport type { ResultJson } from '../types/ResultJson.js';\nimport type { RemoteCacheClient } from '@ms-cloudpack/remote-cache';\nimport { getRemoteCachePackageId } from './getRemoteCachePackageId.js';\nimport type { PartialContext } from '../types/Context.js';\nimport { getResultJsonPath } from './getResultJsonPath.js';\n\n/**\n * Reads the `result.json` file from the cache, and construct a BundleRequest.result object from it.\n * If the package wasn't already cached and `context.remoteCacheClient` is set, attempts to download it.\n */\nexport async function readResultFromCache(\n params: {\n packageName: string;\n version: string;\n /** Package path (will be added to the result). */\n inputPath: string;\n /** The path to the cache directory. */\n outputPath: string;\n /** If provided, and the package isn't found locally, attempt to download it. */\n remoteCacheClient?: RemoteCacheClient;\n },\n context: PartialContext<'packageHashes' | 'packages', 'cachePath'>,\n // outputPath: string,\n): Promise<BundleRequest['result']> {\n const { packageName, version, inputPath, outputPath, remoteCacheClient } = params;\n let bundleSource: NonNullable<BundleRequest['result']>['bundleSource'];\n\n const resultPath = getResultJsonPath(outputPath);\n\n let resultFromFile = await readJson<ResultJson>(resultPath);\n\n if (resultFromFile) {\n bundleSource = 'local-cache';\n } else if (remoteCacheClient) {\n const downloadResult = await remoteCacheClient.downloadFolder({\n id: await getRemoteCachePackageId({ packagePath: inputPath }, context),\n path: outputPath,\n friendlyName: `${packageName}@${version}`,\n });\n\n if (downloadResult === 'success') {\n resultFromFile = await readJson<ResultJson>(resultPath);\n if (!resultFromFile) {\n throw new Error(\n `Downloading from the remote cache succeeded, but ${resultPath} could not be read. This is a Cloudpack bug.`,\n );\n }\n bundleSource = 'remote-cache';\n } else if (downloadResult === 'already-exist') {\n throw new Error(\n `The cache folder ${outputPath} already exists, but result.json was not found. This is a Cloudpack bug.`,\n );\n }\n }\n\n if (!resultFromFile) {\n return undefined;\n }\n\n const result: BundleRequest['result'] = {\n ...resultFromFile,\n inputPath,\n outputPath,\n bundleSource,\n };\n\n // Rename deprecated bundlerName to bundler to avoid bumping the hash version.\n /* eslint-disable etc/no-deprecated */\n if (result.bundlerName) {\n result.bundler = result.bundlerName;\n delete result.bundlerName;\n }\n /* eslint-enable etc/no-deprecated */\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"readResultFromCache.js","sourceRoot":"","sources":["../../src/utilities/readResultFromCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAIxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAUC,EACD,OAAkE;IAGlE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;IACrG,IAAI,YAAkE,CAAC;IAEvE,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAEjD,IAAI,cAAc,GAAG,MAAM,QAAQ,CAAa,UAAU,CAAC,CAAC;IAE5D,IAAI,cAAc,EAAE,CAAC;QACnB,YAAY,GAAG,aAAa,CAAC;IAC/B,CAAC;SAAM,IAAI,iBAAiB,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC;YAC5D,EAAE,EAAE,MAAM,uBAAuB,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,OAAO,CAAC;YACzF,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,GAAG,WAAW,IAAI,OAAO,EAAE;SAC1C,CAAC,CAAC;QAEH,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,cAAc,GAAG,MAAM,QAAQ,CAAa,UAAU,CAAC,CAAC;YACxD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CACb,oDAAoD,UAAU,8CAA8C,CAC7G,CAAC;YACJ,CAAC;YACD,YAAY,GAAG,cAAc,CAAC;QAChC,CAAC;aAAM,IAAI,cAAc,KAAK,eAAe,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,oBAAoB,UAAU,0EAA0E,CACzG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAA4B;QACtC,GAAG,cAAc;QACjB,SAAS;QACT,UAAU;QACV,YAAY;KACb,CAAC;IAEF,8EAA8E;IAC9E,sCAAsC;IACtC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;QACpC,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IACD,qCAAqC;IAErC,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { readJson } from '@ms-cloudpack/json-utilities';\nimport type { BundleRequest } from '../types/BundleRequest.js';\nimport type { ResultJson } from '../types/ResultJson.js';\nimport type { RemoteCacheClient } from '@ms-cloudpack/remote-cache';\nimport { getRemoteCachePackageId } from './getRemoteCachePackageId.js';\nimport type { PartialContext } from '../types/Context.js';\nimport { getResultJsonPath } from './getResultJsonPath.js';\nimport type { TargetEnvironment } from '@ms-cloudpack/common-types';\n\n/**\n * Reads the `result.json` file from the cache, and construct a BundleRequest.result object from it.\n * If the package wasn't already cached and `context.remoteCacheClient` is set, attempts to download it.\n */\nexport async function readResultFromCache(\n params: {\n packageName: string;\n version: string;\n /** Package path (will be added to the result). */\n inputPath: string;\n /** The path to the cache directory. */\n outputPath: string;\n targetEnvironment: TargetEnvironment;\n /** If provided, and the package isn't found locally, attempt to download it. */\n remoteCacheClient?: RemoteCacheClient;\n },\n context: PartialContext<'packageHashes' | 'packages', 'cachePath'>,\n // outputPath: string,\n): Promise<BundleRequest['result']> {\n const { packageName, version, inputPath, outputPath, targetEnvironment, remoteCacheClient } = params;\n let bundleSource: NonNullable<BundleRequest['result']>['bundleSource'];\n\n const resultPath = getResultJsonPath(outputPath);\n\n let resultFromFile = await readJson<ResultJson>(resultPath);\n\n if (resultFromFile) {\n bundleSource = 'local-cache';\n } else if (remoteCacheClient) {\n const downloadResult = await remoteCacheClient.downloadFolder({\n id: await getRemoteCachePackageId({ packagePath: inputPath, targetEnvironment }, context),\n path: outputPath,\n friendlyName: `${packageName}@${version}`,\n });\n\n if (downloadResult === 'success') {\n resultFromFile = await readJson<ResultJson>(resultPath);\n if (!resultFromFile) {\n throw new Error(\n `Downloading from the remote cache succeeded, but ${resultPath} could not be read. This is a Cloudpack bug.`,\n );\n }\n bundleSource = 'remote-cache';\n } else if (downloadResult === 'already-exist') {\n throw new Error(\n `The cache folder ${outputPath} already exists, but result.json was not found. This is a Cloudpack bug.`,\n );\n }\n }\n\n if (!resultFromFile) {\n return undefined;\n }\n\n const result: BundleRequest['result'] = {\n ...resultFromFile,\n inputPath,\n outputPath,\n bundleSource,\n };\n\n // Rename deprecated bundlerName to bundler to avoid bumping the hash version.\n /* eslint-disable etc/no-deprecated */\n if (result.bundlerName) {\n result.bundler = result.bundlerName;\n delete result.bundlerName;\n }\n /* eslint-enable etc/no-deprecated */\n\n return result;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { PartialContext } from '../types/Context.js';
2
+ export declare const serializeContext: (filePath: string, context: PartialContext<"packages" | "packageHashes", "config" | "packageImportPaths" | "resolveMap" | "sessionVersion" | "targetVersions" | "urls" | "importMap">) => Promise<void>;
3
+ //# sourceMappingURL=serializeContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializeContext.d.ts","sourceRoot":"","sources":["../../src/utilities/serializeContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,eAAO,MAAM,gBAAgB,aACjB,MAAM,WACP,cAAc,CACrB,UAAU,GAAG,eAAe,EAC5B,QAAQ,GAAG,oBAAoB,GAAG,YAAY,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,MAAM,GAAG,WAAW,CAC5G,KACA,OAAO,CAAC,IAAI,CAYd,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { writeJson } from '@ms-cloudpack/json-utilities';
2
+ export const serializeContext = (filePath, context) => {
3
+ const { packageHashes, session } = context;
4
+ const { importMap, resolveMap, config } = session;
5
+ const serializableContext = {
6
+ importMap,
7
+ packageHashes: packageHashes.toSerializable(),
8
+ resolveMap,
9
+ config,
10
+ };
11
+ return writeJson(filePath, serializableContext);
12
+ };
13
+ //# sourceMappingURL=serializeContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializeContext.js","sourceRoot":"","sources":["../../src/utilities/serializeContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAIzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,QAAgB,EAChB,OAGC,EACc,EAAE;IACjB,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC3C,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAElD,MAAM,mBAAmB,GAAoB;QAC3C,SAAS;QACT,aAAa,EAAE,aAAa,CAAC,cAAc,EAAE;QAC7C,UAAU;QACV,MAAM;KACP,CAAC;IAEF,OAAO,SAAS,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAClD,CAAC,CAAC","sourcesContent":["import { writeJson } from '@ms-cloudpack/json-utilities';\nimport type { CloudAppContext } from '../types/CloudAppContext.js';\nimport type { PartialContext } from '../types/Context.js';\n\nexport const serializeContext = (\n filePath: string,\n context: PartialContext<\n 'packages' | 'packageHashes',\n 'config' | 'packageImportPaths' | 'resolveMap' | 'sessionVersion' | 'targetVersions' | 'urls' | 'importMap'\n >,\n): Promise<void> => {\n const { packageHashes, session } = context;\n const { importMap, resolveMap, config } = session;\n\n const serializableContext: CloudAppContext = {\n importMap,\n packageHashes: packageHashes.toSerializable(),\n resolveMap,\n config,\n };\n\n return writeJson(filePath, serializableContext);\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/api-server",
3
- "version": "0.61.1",
3
+ "version": "0.61.3",
4
4
  "description": "An implementation of the API server that does interacts with a task scheduler.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -27,22 +27,22 @@
27
27
  "@lage-run/logger": "^1.3.0",
28
28
  "@lage-run/scheduler": "^1.2.1",
29
29
  "@lage-run/target-graph": "^0.11.0",
30
- "@ms-cloudpack/bundler": "^0.24.1",
31
- "@ms-cloudpack/common-types": "^0.24.8",
32
- "@ms-cloudpack/config": "^0.33.17",
33
- "@ms-cloudpack/create-express-app": "^1.10.20",
30
+ "@ms-cloudpack/bundler": "^0.24.2",
31
+ "@ms-cloudpack/common-types": "^0.24.9",
32
+ "@ms-cloudpack/config": "^0.33.18",
33
+ "@ms-cloudpack/create-express-app": "^1.10.21",
34
34
  "@ms-cloudpack/data-bus": "^0.4.3",
35
- "@ms-cloudpack/esm-stub-utilities": "^0.14.9",
35
+ "@ms-cloudpack/esm-stub-utilities": "^0.14.10",
36
36
  "@ms-cloudpack/file-watcher": "^0.2.0",
37
- "@ms-cloudpack/import-map": "^0.9.1",
37
+ "@ms-cloudpack/import-map": "^0.10.0",
38
38
  "@ms-cloudpack/json-utilities": "^0.1.10",
39
- "@ms-cloudpack/package-hashes": "^0.7.29",
40
- "@ms-cloudpack/package-utilities": "^11.3.5",
39
+ "@ms-cloudpack/package-hashes": "^0.7.30",
40
+ "@ms-cloudpack/package-utilities": "^11.3.6",
41
41
  "@ms-cloudpack/path-string-parsing": "^1.2.6",
42
- "@ms-cloudpack/path-utilities": "^3.0.5",
43
- "@ms-cloudpack/remote-cache": "^0.10.12",
42
+ "@ms-cloudpack/path-utilities": "^3.0.6",
43
+ "@ms-cloudpack/remote-cache": "^0.10.14",
44
44
  "@ms-cloudpack/task-reporter": "^0.15.1",
45
- "@ms-cloudpack/telemetry": "^0.10.15",
45
+ "@ms-cloudpack/telemetry": "^0.10.17",
46
46
  "@trpc/client": "11.0.0-rc.682",
47
47
  "@trpc/server": "11.0.0-rc.682",
48
48
  "cors": "^2.8.5",