@ms-cloudpack/bundle-server 0.6.89 → 0.6.90

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.
@@ -0,0 +1,9 @@
1
+ import type { LinkedPath, ResolveMapEntry } from '@ms-cloudpack/common-types';
2
+ export declare function getLinkedPackageRedirectUrl(options: {
3
+ linkedPaths: LinkedPath[];
4
+ packageName: string;
5
+ version: string;
6
+ packageEntry: ResolveMapEntry;
7
+ originalUrl: string;
8
+ }): string | undefined;
9
+ //# sourceMappingURL=getLinkedPackageRedirectUrl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getLinkedPackageRedirectUrl.d.ts","sourceRoot":"","sources":["../src/getLinkedPackageRedirectUrl.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAI9E,wBAAgB,2BAA2B,CAAC,OAAO,EAAE;IACnD,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,eAAe,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,GAAG,SAAS,CAwBrB"}
@@ -0,0 +1,27 @@
1
+ import { makeUrl } from '@ms-cloudpack/path-string-parsing';
2
+ import { findResolveMapEntry } from '@ms-cloudpack/package-utilities';
3
+ // Helper function to determine if we need to redirect to a remote host.
4
+ export function getLinkedPackageRedirectUrl(options) {
5
+ const { linkedPaths, packageName, version, packageEntry, originalUrl } = options;
6
+ // If there is any linked path with a remote we need to check if we should redirect to it.
7
+ for (const { remote } of linkedPaths) {
8
+ // Early exit if there is no remote.
9
+ if (!remote) {
10
+ continue;
11
+ }
12
+ // Remove the -linked suffix if it is linked to compare the version with the linked package map correctly.
13
+ const realVersion = packageEntry.isLinked ? version.replace(/-linked$/, '') : version;
14
+ const entry = findResolveMapEntry({ packageName, version: realVersion, resolveMap: remote.resolveMap });
15
+ // Compare by path to see if we should redirect, since we could have multiple versions of the same package.
16
+ if (entry?.path === packageEntry.path) {
17
+ // Use the original URL to construct the new URL to keep query params.
18
+ const nameIndexEnd = originalUrl.indexOf(packageName) + packageName.length + version.length + 1;
19
+ // We want the request path to start with the package name and version to ignore any prefix.
20
+ const linkedRequestPath = `./${packageName}@${realVersion}${originalUrl.substring(nameIndexEnd)}`;
21
+ // Redirect URL using the remote host.
22
+ return makeUrl(linkedRequestPath, remote.hostUrl).href;
23
+ }
24
+ }
25
+ return undefined;
26
+ }
27
+ //# sourceMappingURL=getLinkedPackageRedirectUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getLinkedPackageRedirectUrl.js","sourceRoot":"","sources":["../src/getLinkedPackageRedirectUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,wEAAwE;AACxE,MAAM,UAAU,2BAA2B,CAAC,OAM3C;IACC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEjF,0FAA0F;IAC1F,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QACrC,oCAAoC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS;QACX,CAAC;QACD,0GAA0G;QAC1G,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACtF,MAAM,KAAK,GAAG,mBAAmB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACxG,2GAA2G;QAC3G,IAAI,KAAK,EAAE,IAAI,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC;YACtC,sEAAsE;YACtE,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAChG,4FAA4F;YAC5F,MAAM,iBAAiB,GAAG,KAAK,WAAW,IAAI,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;YAClG,sCAAsC;YACtC,OAAO,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;QACzD,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import { makeUrl } from '@ms-cloudpack/path-string-parsing';\nimport type { LinkedPath, ResolveMapEntry } from '@ms-cloudpack/common-types';\nimport { findResolveMapEntry } from '@ms-cloudpack/package-utilities';\n\n// Helper function to determine if we need to redirect to a remote host.\nexport function getLinkedPackageRedirectUrl(options: {\n linkedPaths: LinkedPath[];\n packageName: string;\n version: string;\n packageEntry: ResolveMapEntry;\n originalUrl: string;\n}): string | undefined {\n const { linkedPaths, packageName, version, packageEntry, originalUrl } = options;\n\n // If there is any linked path with a remote we need to check if we should redirect to it.\n for (const { remote } of linkedPaths) {\n // Early exit if there is no remote.\n if (!remote) {\n continue;\n }\n // Remove the -linked suffix if it is linked to compare the version with the linked package map correctly.\n const realVersion = packageEntry.isLinked ? version.replace(/-linked$/, '') : version;\n const entry = findResolveMapEntry({ packageName, version: realVersion, resolveMap: remote.resolveMap });\n // Compare by path to see if we should redirect, since we could have multiple versions of the same package.\n if (entry?.path === packageEntry.path) {\n // Use the original URL to construct the new URL to keep query params.\n const nameIndexEnd = originalUrl.indexOf(packageName) + packageName.length + version.length + 1;\n // We want the request path to start with the package name and version to ignore any prefix.\n const linkedRequestPath = `./${packageName}@${realVersion}${originalUrl.substring(nameIndexEnd)}`;\n // Redirect URL using the remote host.\n return makeUrl(linkedRequestPath, remote.hostUrl).href;\n }\n }\n\n return undefined;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"handleBundleRequest.d.ts","sourceRoot":"","sources":["../src/handleBundleRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8D,KAAK,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACpH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAM1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAG1E,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,mBAAmB,GAAG;IAC7B,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,QAAQ,CAAC;CACf,EACD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAoKf"}
1
+ {"version":3,"file":"handleBundleRequest.d.ts","sourceRoot":"","sources":["../src/handleBundleRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8D,KAAK,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACpH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAM1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAI1E,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,mBAAmB,GAAG;IAC7B,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,QAAQ,CAAC;CACf,EACD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAsLf"}
@@ -5,10 +5,11 @@ import { isExternalPackage } from '@ms-cloudpack/path-utilities';
5
5
  import { normalizeRelativePath, slash } from '@ms-cloudpack/path-string-parsing';
6
6
  import path from 'path';
7
7
  import { handleWorker } from './handleWorker.js';
8
+ import { getLinkedPackageRedirectUrl } from './getLinkedPackageRedirectUrl.js';
8
9
  export async function handleBundleRequest(options, context) {
9
10
  const { req, res, disableCache } = options;
10
11
  const { session, packageHashes, bus, telemetryClient } = context;
11
- const { resolveMap, config } = session;
12
+ const { resolveMap, config, linkedPaths } = session;
12
13
  const { features = {} } = config;
13
14
  const requestPath = slash(req.path.substring(1));
14
15
  const force = req.query.force !== undefined;
@@ -23,6 +24,22 @@ export async function handleBundleRequest(options, context) {
23
24
  return;
24
25
  }
25
26
  console.debug(`Request: "${packageRequestPath}"`);
27
+ // This is a hot path, so doing a quick check first.
28
+ if (linkedPaths.length) {
29
+ // Try to redirect to remote host if necessary.
30
+ const redirectUrl = getLinkedPackageRedirectUrl({
31
+ linkedPaths,
32
+ packageName,
33
+ version,
34
+ packageEntry,
35
+ originalUrl: req.originalUrl,
36
+ });
37
+ if (redirectUrl) {
38
+ console.debug(`Redirecting to linked package: ${redirectUrl}`);
39
+ res.redirect(redirectUrl);
40
+ return;
41
+ }
42
+ }
26
43
  // If the package is missing, invalid arguments.
27
44
  if (!requestPath || !packageName) {
28
45
  console.debug(`Response (400): "${packageRequestPath}"`);
@@ -1 +1 @@
1
- {"version":3,"file":"handleBundleRequest.js","sourceRoot":"","sources":["../src/handleBundleRequest.ts"],"names":[],"mappings":"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","sourcesContent":["import { ensurePackageBundled, addPackageOverride, errorEntrySource, type Context } from '@ms-cloudpack/api-server';\nimport type { Request, Response } from '@ms-cloudpack/create-express-app';\nimport { parseRequestInfo } from '@ms-cloudpack/import-map';\nimport { findResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport { isExternalPackage } from '@ms-cloudpack/path-utilities';\nimport { normalizeRelativePath, slash } from '@ms-cloudpack/path-string-parsing';\nimport path from 'path';\nimport type { BundleServerOptions } from './types/BundleServerOptions.js';\nimport { handleWorker } from './handleWorker.js';\n\nexport async function handleBundleRequest(\n options: BundleServerOptions & {\n req: Request;\n res: Response;\n },\n context: Context,\n): Promise<void> {\n const { req, res, disableCache } = options;\n const { session, packageHashes, bus, telemetryClient } = context;\n const { resolveMap, config } = session;\n const { features = {} } = config;\n const requestPath = slash(req.path.substring(1));\n const force = req.query.force !== undefined;\n const worker = req.query.worker !== undefined;\n const { packageName, version, hash, bundled, filePath, missing } = parseRequestInfo(requestPath);\n const packageEntry = findResolveMapEntry({ packageName, version, resolveMap });\n\n const packageRequestPath = `${packageName}@${version || '<unknown>'}${filePath}`;\n\n if (!packageEntry) {\n // If the package is missing, invalid arguments.\n console.debug(`Response (404): Unrecognized package \"${packageRequestPath}\"`);\n res.status(404).send(`Unrecognized package \"${packageRequestPath}\".`);\n return;\n }\n\n console.debug(`Request: \"${packageRequestPath}\"`);\n\n // If the package is missing, invalid arguments.\n if (!requestPath || !packageName) {\n console.debug(`Response (400): \"${packageRequestPath}\"`);\n\n res.status(400).send(`Requests must be in the format \"/{packageName}@{version}/{type}/path/file.ext\".`);\n return;\n }\n\n // If the version is missing, redirect to the primary version.\n if (!version) {\n res.redirect(`/${packageName}@${packageEntry.version}${filePath}`);\n return;\n }\n\n if (missing && features.autoUpdateEntries) {\n const addedPackageOverride = await addPackageOverride({\n input: { packageName, version, importPath: filePath, initiatedBy: 'autoUpdateEntries' },\n ctx: context,\n });\n\n if (addedPackageOverride) {\n // Trigger a re-bundle to ensure there is no stale cache.\n await ensurePackageBundled(\n {\n name: packageName,\n version,\n shouldForce: true,\n shouldRerun: true,\n disableCache,\n },\n context,\n );\n // This will never be seen by the user, but it is needed to satisfy the response type.\n res.status(202).type('application/javascript').send('');\n return;\n }\n // If no entry was added, the import path could not resolve to a file in the package.\n const message = `Failed to resolve module specifier \"${packageRequestPath}\".`;\n // We need to pass the error to the bus so that it can be displayed in the UI,\n // and notify the user when autoUpdateEntries is enabled.\n bus.publish(errorEntrySource, message);\n res.status(500).type('text/plain').send(message);\n return;\n }\n\n // If we are accessing a non-bundled asset, return the file directly.\n if (!bundled) {\n const fullPath = path.join(packageEntry.path, filePath);\n\n if (fullPath.length < packageEntry.path.length) {\n console.debug(`Response (400): \"${packageName}@${version}${filePath}\"`);\n\n res.status(400).send(`Invalid file path.`);\n } else {\n console.debug(`Unbundled response returning: \"${packageName}@${version}${filePath}\"`);\n // If the package is external, set cache headers.\n if (isExternalPackage(packageEntry.path)) {\n res.setHeader('Cache-Control', 'public, max-age=31536000');\n }\n\n res.sendFile(path.join(packageEntry.path, filePath));\n }\n return;\n }\n\n console.debug(`Trying to bundle \"${packageName}@${version}\"`);\n const { result } = await ensurePackageBundled(\n {\n name: packageName,\n version,\n shouldForce: force,\n shouldRerun: force,\n shouldWatch: true, // This will only watch the package if it is internal.\n disableCache,\n },\n context,\n );\n\n if (result.errors?.length || !result.outputPath) {\n res.status(500).type('json').send(result);\n return;\n }\n\n // If worker is not set but the file is a worker, handle it.\n if (\n features.enableModuleWorkers &&\n !worker &&\n // Currently, only webpack and rspack setup isWorker in the result.\n // Webpack is fully supported, but support for rspack is still in progress.\n result.outputFiles?.find((file) => file.isWorker && file.outputPath === normalizeRelativePath(filePath))\n ) {\n await handleWorker({ req, res }, context);\n return;\n }\n\n console.debug(`Bundle returning: \"${packageName}@${version}${filePath}\"`);\n // Try to return the result.\n if (\n result.isExternal ||\n (hash !== 'pending' &&\n hash ===\n (await packageHashes.get({\n packagePath: packageEntry.path,\n isSourceHashingEnabled: true,\n targetEnvironment: 'browser',\n })))\n ) {\n res.setHeader('Cache-Control', 'public, max-age=31536000');\n }\n\n // The below header is need to be able to track the browser cache hit ratio.\n res.setHeader('Timing-Allow-Origin', '*');\n\n res.sendFile(path.join(result.outputPath, filePath), (err) => {\n if (err) {\n console.error(`Error serving file ${packageRequestPath}. Please refresh your browser to try again.`);\n // This is a workaround for the browser cache issue.\n // It seems to happen when a file is cached in the browser but the imported files are not cached and not on disk.\n // Increase the target version to clear browser cache for that specific package.\n session.incrementTargetVersion(packageEntry.path);\n // Only send a response if headers haven't been sent yet\n if (!res.headersSent) {\n res.status(404).send(`File not found: ${packageRequestPath}`);\n }\n // If the file is not found, we need to report it to telemetry.\n void telemetryClient.tracer.startActiveSpan('FILE_SERVE_ERROR', (span) => {\n span.setAttributes({\n isCacheHit: !!result.bundleSource,\n isExternal: result.isExternal,\n packageName,\n packageVersion: version,\n bundleSource: result?.bundleSource,\n bundler: result?.bundler,\n bundlerVersion: result?.bundlerVersion,\n filePath,\n request: requestPath,\n hash: result.hash,\n errorCode: (err as { code?: string })?.code || '',\n });\n });\n }\n });\n}\n"]}
1
+ {"version":3,"file":"handleBundleRequest.js","sourceRoot":"","sources":["../src/handleBundleRequest.ts"],"names":[],"mappings":"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","sourcesContent":["import { ensurePackageBundled, addPackageOverride, errorEntrySource, type Context } from '@ms-cloudpack/api-server';\nimport type { Request, Response } from '@ms-cloudpack/create-express-app';\nimport { parseRequestInfo } from '@ms-cloudpack/import-map';\nimport { findResolveMapEntry } from '@ms-cloudpack/package-utilities';\nimport { isExternalPackage } from '@ms-cloudpack/path-utilities';\nimport { normalizeRelativePath, slash } from '@ms-cloudpack/path-string-parsing';\nimport path from 'path';\nimport type { BundleServerOptions } from './types/BundleServerOptions.js';\nimport { handleWorker } from './handleWorker.js';\nimport { getLinkedPackageRedirectUrl } from './getLinkedPackageRedirectUrl.js';\n\nexport async function handleBundleRequest(\n options: BundleServerOptions & {\n req: Request;\n res: Response;\n },\n context: Context,\n): Promise<void> {\n const { req, res, disableCache } = options;\n const { session, packageHashes, bus, telemetryClient } = context;\n const { resolveMap, config, linkedPaths } = session;\n const { features = {} } = config;\n const requestPath = slash(req.path.substring(1));\n const force = req.query.force !== undefined;\n const worker = req.query.worker !== undefined;\n const { packageName, version, hash, bundled, filePath, missing } = parseRequestInfo(requestPath);\n const packageEntry = findResolveMapEntry({ packageName, version, resolveMap });\n\n const packageRequestPath = `${packageName}@${version || '<unknown>'}${filePath}`;\n\n if (!packageEntry) {\n // If the package is missing, invalid arguments.\n console.debug(`Response (404): Unrecognized package \"${packageRequestPath}\"`);\n res.status(404).send(`Unrecognized package \"${packageRequestPath}\".`);\n return;\n }\n\n console.debug(`Request: \"${packageRequestPath}\"`);\n\n // This is a hot path, so doing a quick check first.\n if (linkedPaths.length) {\n // Try to redirect to remote host if necessary.\n const redirectUrl = getLinkedPackageRedirectUrl({\n linkedPaths,\n packageName,\n version,\n packageEntry,\n originalUrl: req.originalUrl,\n });\n\n if (redirectUrl) {\n console.debug(`Redirecting to linked package: ${redirectUrl}`);\n res.redirect(redirectUrl);\n return;\n }\n }\n\n // If the package is missing, invalid arguments.\n if (!requestPath || !packageName) {\n console.debug(`Response (400): \"${packageRequestPath}\"`);\n\n res.status(400).send(`Requests must be in the format \"/{packageName}@{version}/{type}/path/file.ext\".`);\n return;\n }\n\n // If the version is missing, redirect to the primary version.\n if (!version) {\n res.redirect(`/${packageName}@${packageEntry.version}${filePath}`);\n return;\n }\n\n if (missing && features.autoUpdateEntries) {\n const addedPackageOverride = await addPackageOverride({\n input: { packageName, version, importPath: filePath, initiatedBy: 'autoUpdateEntries' },\n ctx: context,\n });\n\n if (addedPackageOverride) {\n // Trigger a re-bundle to ensure there is no stale cache.\n await ensurePackageBundled(\n {\n name: packageName,\n version,\n shouldForce: true,\n shouldRerun: true,\n disableCache,\n },\n context,\n );\n // This will never be seen by the user, but it is needed to satisfy the response type.\n res.status(202).type('application/javascript').send('');\n return;\n }\n // If no entry was added, the import path could not resolve to a file in the package.\n const message = `Failed to resolve module specifier \"${packageRequestPath}\".`;\n // We need to pass the error to the bus so that it can be displayed in the UI,\n // and notify the user when autoUpdateEntries is enabled.\n bus.publish(errorEntrySource, message);\n res.status(500).type('text/plain').send(message);\n return;\n }\n\n // If we are accessing a non-bundled asset, return the file directly.\n if (!bundled) {\n const fullPath = path.join(packageEntry.path, filePath);\n\n if (fullPath.length < packageEntry.path.length) {\n console.debug(`Response (400): \"${packageName}@${version}${filePath}\"`);\n\n res.status(400).send(`Invalid file path.`);\n } else {\n console.debug(`Unbundled response returning: \"${packageName}@${version}${filePath}\"`);\n // If the package is external, set cache headers.\n if (isExternalPackage(packageEntry.path)) {\n res.setHeader('Cache-Control', 'public, max-age=31536000');\n }\n\n res.sendFile(path.join(packageEntry.path, filePath));\n }\n return;\n }\n\n console.debug(`Trying to bundle \"${packageName}@${version}\"`);\n const { result } = await ensurePackageBundled(\n {\n name: packageName,\n version,\n shouldForce: force,\n shouldRerun: force,\n shouldWatch: true, // This will only watch the package if it is internal.\n disableCache,\n },\n context,\n );\n\n if (result.errors?.length || !result.outputPath) {\n res.status(500).type('json').send(result);\n return;\n }\n\n // If worker is not set but the file is a worker, handle it.\n if (\n features.enableModuleWorkers &&\n !worker &&\n // Currently, only webpack and rspack setup isWorker in the result.\n // Webpack is fully supported, but support for rspack is still in progress.\n result.outputFiles?.find((file) => file.isWorker && file.outputPath === normalizeRelativePath(filePath))\n ) {\n await handleWorker({ req, res }, context);\n return;\n }\n\n console.debug(`Bundle returning: \"${packageName}@${version}${filePath}\"`);\n // Try to return the result.\n if (\n result.isExternal ||\n (hash !== 'pending' &&\n hash ===\n (await packageHashes.get({\n packagePath: packageEntry.path,\n isSourceHashingEnabled: true,\n targetEnvironment: 'browser',\n })))\n ) {\n res.setHeader('Cache-Control', 'public, max-age=31536000');\n }\n\n // The below header is need to be able to track the browser cache hit ratio.\n res.setHeader('Timing-Allow-Origin', '*');\n\n res.sendFile(path.join(result.outputPath, filePath), (err) => {\n if (err) {\n console.error(`Error serving file ${packageRequestPath}. Please refresh your browser to try again.`);\n // This is a workaround for the browser cache issue.\n // It seems to happen when a file is cached in the browser but the imported files are not cached and not on disk.\n // Increase the target version to clear browser cache for that specific package.\n session.incrementTargetVersion(packageEntry.path);\n // Only send a response if headers haven't been sent yet\n if (!res.headersSent) {\n res.status(404).send(`File not found: ${packageRequestPath}`);\n }\n // If the file is not found, we need to report it to telemetry.\n void telemetryClient.tracer.startActiveSpan('FILE_SERVE_ERROR', (span) => {\n span.setAttributes({\n isCacheHit: !!result.bundleSource,\n isExternal: result.isExternal,\n packageName,\n packageVersion: version,\n bundleSource: result?.bundleSource,\n bundler: result?.bundler,\n bundlerVersion: result?.bundlerVersion,\n filePath,\n request: requestPath,\n hash: result.hash,\n errorCode: (err as { code?: string })?.code || '',\n });\n });\n }\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/bundle-server",
3
- "version": "0.6.89",
3
+ "version": "0.6.90",
4
4
  "description": "An implementation of the Bundle server for Cloudpack.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -14,13 +14,14 @@
14
14
  }
15
15
  },
16
16
  "dependencies": {
17
- "@ms-cloudpack/api-server": "^0.61.28",
18
- "@ms-cloudpack/create-express-app": "^1.10.27",
19
- "@ms-cloudpack/import-map": "^0.10.13",
20
- "@ms-cloudpack/inline-scripts": "^0.1.13",
21
- "@ms-cloudpack/package-utilities": "^12.2.3",
17
+ "@ms-cloudpack/api-server": "^0.61.29",
18
+ "@ms-cloudpack/common-types": "^0.24.16",
19
+ "@ms-cloudpack/create-express-app": "^1.10.28",
20
+ "@ms-cloudpack/import-map": "^0.10.14",
21
+ "@ms-cloudpack/inline-scripts": "^0.1.14",
22
+ "@ms-cloudpack/package-utilities": "^12.2.4",
22
23
  "@ms-cloudpack/path-string-parsing": "^1.2.7",
23
- "@ms-cloudpack/path-utilities": "^3.0.12",
24
+ "@ms-cloudpack/path-utilities": "^3.0.13",
24
25
  "es-module-shims": "^1.10.0",
25
26
  "ts-dedent": "^2.2.0"
26
27
  },