@lwrjs/core 0.9.0-alpha.1 → 0.9.0-alpha.10

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 (78) hide show
  1. package/build/cjs/context/{hooks.cjs → configurations.cjs} +33 -9
  2. package/build/cjs/context/provider.cjs +82 -0
  3. package/build/cjs/context/server.cjs +75 -0
  4. package/build/cjs/context/services.cjs +8 -1
  5. package/build/cjs/index.cjs +39 -139
  6. package/build/cjs/middleware/asset-middleware.cjs +56 -0
  7. package/build/cjs/middleware/bundle-middleware.cjs +114 -0
  8. package/build/cjs/{middlewares → middleware}/hmr-middleware.cjs +4 -4
  9. package/build/cjs/{middlewares → middleware}/locale-middleware.cjs +2 -2
  10. package/build/cjs/middleware/mapping-middleware.cjs +61 -0
  11. package/build/cjs/middleware/module-middleware.cjs +88 -0
  12. package/build/cjs/middleware/redirects/unsigned-module-redirect.cjs +21 -0
  13. package/build/cjs/middleware/resource-middleware.cjs +64 -0
  14. package/build/cjs/middleware/utils/error-handling.cjs +56 -0
  15. package/build/cjs/middleware/utils/identity.cjs +93 -0
  16. package/build/cjs/middleware/utils/metadata.cjs +49 -0
  17. package/build/cjs/{middlewares/utils.cjs → middleware/utils/request.cjs} +17 -16
  18. package/build/cjs/middleware/view-middleware.cjs +154 -0
  19. package/build/cjs/middleware.cjs +43 -0
  20. package/build/cjs/tools/server-build.cjs +182 -0
  21. package/build/cjs/tools/static-generation.cjs +34 -24
  22. package/build/es/context/configurations.d.ts +9 -0
  23. package/build/es/context/configurations.js +53 -0
  24. package/build/es/context/provider.d.ts +3 -0
  25. package/build/es/context/provider.js +38 -0
  26. package/build/es/context/server.d.ts +3 -0
  27. package/build/es/context/server.js +48 -0
  28. package/build/es/context/services.d.ts +2 -7
  29. package/build/es/context/services.js +11 -1
  30. package/build/es/index.d.ts +3 -2
  31. package/build/es/index.js +45 -130
  32. package/build/es/middleware/asset-middleware.d.ts +3 -0
  33. package/build/es/middleware/asset-middleware.js +26 -0
  34. package/build/es/middleware/bundle-middleware.d.ts +3 -0
  35. package/build/es/middleware/bundle-middleware.js +87 -0
  36. package/build/es/middleware/hmr-middleware.d.ts +5 -0
  37. package/build/es/{middlewares → middleware}/hmr-middleware.js +2 -2
  38. package/build/es/middleware/locale-middleware.d.ts +3 -0
  39. package/build/es/{middlewares → middleware}/locale-middleware.js +2 -1
  40. package/build/es/middleware/mapping-middleware.d.ts +3 -0
  41. package/build/es/middleware/mapping-middleware.js +34 -0
  42. package/build/es/middleware/module-middleware.d.ts +3 -0
  43. package/build/es/middleware/module-middleware.js +62 -0
  44. package/build/es/middleware/redirects/unsigned-module-redirect.d.ts +5 -0
  45. package/build/es/middleware/redirects/unsigned-module-redirect.js +10 -0
  46. package/build/es/middleware/resource-middleware.d.ts +3 -0
  47. package/build/es/middleware/resource-middleware.js +37 -0
  48. package/build/es/middleware/utils/error-handling.d.ts +3 -0
  49. package/build/es/middleware/utils/error-handling.js +32 -0
  50. package/build/es/middleware/utils/identity.d.ts +6 -0
  51. package/build/es/middleware/utils/identity.js +64 -0
  52. package/build/es/middleware/utils/metadata.d.ts +3 -0
  53. package/build/es/middleware/utils/metadata.js +28 -0
  54. package/build/es/middleware/utils/request.d.ts +15 -0
  55. package/build/es/{middlewares/utils.js → middleware/utils/request.js} +15 -23
  56. package/build/es/middleware/view-middleware.d.ts +3 -0
  57. package/build/es/middleware/view-middleware.js +139 -0
  58. package/build/es/middleware.d.ts +9 -0
  59. package/build/es/middleware.js +13 -0
  60. package/build/es/tools/server-build.d.ts +14 -0
  61. package/build/es/tools/server-build.js +182 -0
  62. package/build/es/tools/static-generation.js +50 -34
  63. package/build/es/tools/types.d.ts +1 -0
  64. package/package.json +34 -30
  65. package/build/cjs/middlewares/api-middleware.cjs +0 -359
  66. package/build/cjs/middlewares/base-middleware.cjs +0 -15
  67. package/build/cjs/middlewares/ui-middleware.cjs +0 -183
  68. package/build/es/context/hooks.d.ts +0 -9
  69. package/build/es/context/hooks.js +0 -36
  70. package/build/es/middlewares/api-middleware.d.ts +0 -3
  71. package/build/es/middlewares/api-middleware.js +0 -410
  72. package/build/es/middlewares/base-middleware.d.ts +0 -3
  73. package/build/es/middlewares/base-middleware.js +0 -4
  74. package/build/es/middlewares/hmr-middleware.d.ts +0 -5
  75. package/build/es/middlewares/locale-middleware.d.ts +0 -3
  76. package/build/es/middlewares/ui-middleware.d.ts +0 -3
  77. package/build/es/middlewares/ui-middleware.js +0 -186
  78. package/build/es/middlewares/utils.d.ts +0 -22
@@ -57,17 +57,18 @@ export default class SiteGenerator {
57
57
  }
58
58
  const generateUrl = this.createGenerateURLFunction(dispatcher);
59
59
  // Note: generateUrl can consume a lot of memory so we need to do this sequentially
60
+ const { skipBaseDocumentGeneration = false } = staticSiteGenerator;
60
61
  for (const locale of staticSiteGenerator.locales) {
61
62
  // Generate all the routes
62
63
  for (const route of routes) {
63
- const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment);
64
+ const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
64
65
  // eslint-disable-next-line no-await-in-loop
65
66
  await generateUrl(basePath + route.path, siteConfig);
66
67
  }
67
68
  // Generate any additional urls
68
69
  if (staticSiteGenerator._additionalRoutePaths) {
69
70
  for (const uri of staticSiteGenerator._additionalRoutePaths) {
70
- const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment);
71
+ const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
71
72
  // eslint-disable-next-line no-await-in-loop
72
73
  await generateUrl(uri, siteConfig);
73
74
  }
@@ -76,12 +77,23 @@ export default class SiteGenerator {
76
77
  const { _additionalModules } = staticSiteGenerator;
77
78
  if (_additionalModules) {
78
79
  for (const specifier of _additionalModules) {
79
- const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment);
80
+ const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
80
81
  // eslint-disable-next-line no-await-in-loop
81
82
  await this.dispatchJSResourceRecursive(specifier, dispatcher, siteConfig, true);
82
83
  }
83
84
  }
84
85
  }
86
+ // Generate a generic SSR bundle if there are any routes with bootstrap.ssr = true
87
+ // This bundle will be used by the lwc-ssr view transformer, it includes definitions for:
88
+ // - "@lwrjs/lwc-ssr/lwc_ssr_placeholder"
89
+ // - "@lwc/engine-server"
90
+ // The lwc_ssr_placeholder will be replaced with a root component specifier at SSR time
91
+ const willSSR = routes.some((r) => r.bootstrap?.ssr);
92
+ if (willSSR) {
93
+ const siteConfig = this.createSiteConfig(outputDir, staticSiteGenerator.locales[0], // locale is unused in this bundle
94
+ urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
95
+ await this.dispatchJSResourceRecursive('@lwrjs/lwc-ssr/lwc_ssr_placeholder', dispatcher, siteConfig, true);
96
+ }
85
97
  }
86
98
  /**
87
99
  * Creates a function to dispatch the root requests for a given view url
@@ -256,35 +268,37 @@ export default class SiteGenerator {
256
268
  * @param dispatcher - Network Dispatcher
257
269
  */
258
270
  async handleHtmlResource(url, context, siteConfig, dispatcher) {
259
- const { outputDir } = siteConfig;
260
- let fileName = 'index.html';
261
- let directoryPath = url;
262
- // If we have a route path that ends with a html or xml file extension,
263
- // use that last path segment for the file name
264
- if (url.endsWith('.html') || url.endsWith('.xml')) {
265
- const lastPathIndex = url.lastIndexOf('/') + 1;
266
- fileName = url.substring(lastPathIndex, url.length);
267
- directoryPath = url.substring(0, lastPathIndex);
268
- }
269
- const dir = createResourceDir(directoryPath, outputDir);
270
- const localeDir = createResourceDir(directoryPath, join(outputDir, siteConfig.locale));
271
- // TODO: Should we handle routes with non-html extensions differently?
272
- // Example Route: "path": "/mixed_templates.md" (not sure why you would do this)
273
- // "contentTemplate": "$contentDir/composed_markdown.md"
274
- // Today this will get written to /mixed_templates.md/index.html
275
- // Which we workaround by setting "renderSingle": true in serve.json
276
- const filePath = join(dir, fileName);
277
- const fileLocalePath = join(localeDir, fileName);
278
- // Default Path (only write once)
279
- // The default locale is english
280
- if (siteConfig.locale.toLowerCase().startsWith('en')) {
281
- siteConfig.viewPaths.add(filePath);
282
- await writeResponse(context, filePath);
271
+ const { outputDir, skipBaseDocumentGeneration } = siteConfig;
272
+ if (!skipBaseDocumentGeneration) {
273
+ let fileName = 'index.html';
274
+ let directoryPath = url;
275
+ // If we have a route path that ends with a html or xml file extension,
276
+ // use that last path segment for the file name
277
+ if (url.endsWith('.html') || url.endsWith('.xml')) {
278
+ const lastPathIndex = url.lastIndexOf('/') + 1;
279
+ fileName = url.substring(lastPathIndex, url.length);
280
+ directoryPath = url.substring(0, lastPathIndex);
281
+ }
282
+ const dir = createResourceDir(directoryPath, outputDir);
283
+ const localeDir = createResourceDir(directoryPath, join(outputDir, siteConfig.locale));
284
+ // TODO: Should we handle routes with non-html extensions differently?
285
+ // Example Route: "path": "/mixed_templates.md" (not sure why you would do this)
286
+ // "contentTemplate": "$contentDir/composed_markdown.md"
287
+ // Today this will get written to /mixed_templates.md/index.html
288
+ // Which we workaround by setting "renderSingle": true in serve.json
289
+ const filePath = join(dir, fileName);
290
+ const fileLocalePath = join(localeDir, fileName);
291
+ // Default Path (only write once)
292
+ // The default locale is english
293
+ if (siteConfig.locale.toLowerCase().startsWith('en')) {
294
+ siteConfig.viewPaths.add(filePath);
295
+ await writeResponse(context, filePath);
296
+ }
297
+ // Language path (always write out)
298
+ createDir(localeDir);
299
+ siteConfig.viewPaths.add(fileLocalePath);
300
+ await writeResponse(context, fileLocalePath);
283
301
  }
284
- // Language path (always write out)
285
- createDir(localeDir);
286
- siteConfig.viewPaths.add(fileLocalePath);
287
- await writeResponse(context, fileLocalePath);
288
302
  // Get the metadata
289
303
  const viewDefinition = context.fs?.metadata?.viewDefinition;
290
304
  if (viewDefinition) {
@@ -478,7 +492,7 @@ export default class SiteGenerator {
478
492
  /**
479
493
  * Create a new site config for the current view
480
494
  */
481
- createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment) {
495
+ createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment) {
482
496
  const featureFlags = this.filterFeatureFlags();
483
497
  const endpoints = {
484
498
  uris: {
@@ -494,13 +508,15 @@ export default class SiteGenerator {
494
508
  locale,
495
509
  urlRewriteMap,
496
510
  endpoints,
511
+ skipBaseDocumentGeneration,
497
512
  // Only include LEGACY_LOADER if true
498
513
  ...featureFlags,
499
514
  };
500
515
  }
501
516
  filterFeatureFlags() {
502
- if (getFeatureFlags().LEGACY_LOADER) {
503
- return { featureFlags: { LEGACY_LOADER: true } };
517
+ const ffs = getFeatureFlags();
518
+ if (ffs.LEGACY_LOADER) {
519
+ return { featureFlags: { LEGACY_LOADER: true, SSR_STATIC_BUNDLES: ffs.SSR_STATIC_BUNDLES } };
504
520
  }
505
521
  else {
506
522
  return undefined;
@@ -43,5 +43,6 @@ export interface SiteConfig {
43
43
  viewConfigPath?: string;
44
44
  featureFlags?: FeatureFlags;
45
45
  legacyDefaultMappingEndpoint?: string;
46
+ skipBaseDocumentGeneration?: boolean;
46
47
  }
47
48
  //# sourceMappingURL=types.d.ts.map
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "0.9.0-alpha.1",
7
+ "version": "0.9.0-alpha.10",
8
8
  "homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
9
9
  "repository": {
10
10
  "type": "git",
@@ -23,6 +23,10 @@
23
23
  "import": "./build/es/index.js",
24
24
  "require": "./build/cjs/index.cjs"
25
25
  },
26
+ "./middleware": {
27
+ "import": "./build/es/middleware.js",
28
+ "require": "./build/cjs/middleware.cjs"
29
+ },
26
30
  "./package": "./package.cjs"
27
31
  },
28
32
  "files": [
@@ -32,40 +36,40 @@
32
36
  "package.cjs"
33
37
  ],
34
38
  "dependencies": {
35
- "@lwrjs/app-service": "0.9.0-alpha.1",
36
- "@lwrjs/asset-registry": "0.9.0-alpha.1",
37
- "@lwrjs/asset-transformer": "0.9.0-alpha.1",
38
- "@lwrjs/base-template-engine": "0.9.0-alpha.1",
39
- "@lwrjs/base-view-provider": "0.9.0-alpha.1",
40
- "@lwrjs/base-view-transformer": "0.9.0-alpha.1",
41
- "@lwrjs/client-modules": "0.9.0-alpha.1",
42
- "@lwrjs/compiler": "0.9.0-alpha.1",
43
- "@lwrjs/config": "0.9.0-alpha.1",
44
- "@lwrjs/diagnostics": "0.9.0-alpha.1",
45
- "@lwrjs/fs-asset-provider": "0.9.0-alpha.1",
46
- "@lwrjs/html-view-provider": "0.9.0-alpha.1",
47
- "@lwrjs/loader": "0.9.0-alpha.1",
48
- "@lwrjs/lwc-module-provider": "0.9.0-alpha.1",
49
- "@lwrjs/lwc-ssr": "0.9.0-alpha.1",
50
- "@lwrjs/markdown-view-provider": "0.9.0-alpha.1",
51
- "@lwrjs/module-bundler": "0.9.0-alpha.1",
52
- "@lwrjs/module-registry": "0.9.0-alpha.1",
53
- "@lwrjs/npm-module-provider": "0.9.0-alpha.1",
54
- "@lwrjs/nunjucks-view-provider": "0.9.0-alpha.1",
55
- "@lwrjs/o11y": "0.9.0-alpha.1",
56
- "@lwrjs/resource-registry": "0.9.0-alpha.1",
57
- "@lwrjs/router": "0.9.0-alpha.1",
58
- "@lwrjs/server": "0.9.0-alpha.1",
59
- "@lwrjs/shared-utils": "0.9.0-alpha.1",
60
- "@lwrjs/view-registry": "0.9.0-alpha.1",
39
+ "@lwrjs/app-service": "0.9.0-alpha.10",
40
+ "@lwrjs/asset-registry": "0.9.0-alpha.10",
41
+ "@lwrjs/asset-transformer": "0.9.0-alpha.10",
42
+ "@lwrjs/base-template-engine": "0.9.0-alpha.10",
43
+ "@lwrjs/base-view-provider": "0.9.0-alpha.10",
44
+ "@lwrjs/base-view-transformer": "0.9.0-alpha.10",
45
+ "@lwrjs/client-modules": "0.9.0-alpha.10",
46
+ "@lwrjs/compiler": "0.9.0-alpha.10",
47
+ "@lwrjs/config": "0.9.0-alpha.10",
48
+ "@lwrjs/diagnostics": "0.9.0-alpha.10",
49
+ "@lwrjs/fs-asset-provider": "0.9.0-alpha.10",
50
+ "@lwrjs/html-view-provider": "0.9.0-alpha.10",
51
+ "@lwrjs/loader": "0.9.0-alpha.10",
52
+ "@lwrjs/lwc-module-provider": "0.9.0-alpha.10",
53
+ "@lwrjs/lwc-ssr": "0.9.0-alpha.10",
54
+ "@lwrjs/markdown-view-provider": "0.9.0-alpha.10",
55
+ "@lwrjs/module-bundler": "0.9.0-alpha.10",
56
+ "@lwrjs/module-registry": "0.9.0-alpha.10",
57
+ "@lwrjs/npm-module-provider": "0.9.0-alpha.10",
58
+ "@lwrjs/nunjucks-view-provider": "0.9.0-alpha.10",
59
+ "@lwrjs/o11y": "0.9.0-alpha.10",
60
+ "@lwrjs/resource-registry": "0.9.0-alpha.10",
61
+ "@lwrjs/router": "0.9.0-alpha.10",
62
+ "@lwrjs/server": "0.9.0-alpha.10",
63
+ "@lwrjs/shared-utils": "0.9.0-alpha.10",
64
+ "@lwrjs/view-registry": "0.9.0-alpha.10",
65
+ "esbuild": "^0.9.7",
61
66
  "fs-extra": "^10.1.0",
62
- "ms": "^2.1.3",
63
67
  "path-to-regexp": "^6.2.0",
64
68
  "qs": "^6.9.4",
65
69
  "ws": "^8.8.1"
66
70
  },
67
71
  "devDependencies": {
68
- "@lwrjs/types": "0.9.0-alpha.1",
72
+ "@lwrjs/types": "0.9.0-alpha.10",
69
73
  "@types/ws": "^8.5.3"
70
74
  },
71
75
  "peerDependencies": {
@@ -74,5 +78,5 @@
74
78
  "engines": {
75
79
  "node": ">=14.15.4 <19"
76
80
  },
77
- "gitHead": "7a32c273de67d937fcbcd42293d9e251ed01f123"
81
+ "gitHead": "ecbf031157dd87d2b1a3d528b7fae8f9142eba7e"
78
82
  }
@@ -1,359 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getProtoOf = Object.getPrototypeOf;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
- var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, {get: all[name], enumerable: true});
11
- };
12
- var __exportStar = (target, module2, desc) => {
13
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
- for (let key of __getOwnPropNames(module2))
15
- if (!__hasOwnProp.call(target, key) && key !== "default")
16
- __defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
17
- }
18
- return target;
19
- };
20
- var __toModule = (module2) => {
21
- return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
22
- };
23
-
24
- // packages/@lwrjs/core/src/middlewares/api-middleware.ts
25
- __markAsModule(exports);
26
- __export(exports, {
27
- default: () => apiMiddleware
28
- });
29
- var import_diagnostics = __toModule(require("@lwrjs/diagnostics"));
30
- var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
31
- var import_utils = __toModule(require("./utils.cjs"));
32
- function apiMiddleware(app, context) {
33
- const {
34
- appConfig: {environment: environmentConfig},
35
- moduleRegistry,
36
- moduleBundler,
37
- resourceRegistry,
38
- runtimeEnvironment: defaultRuntimeEnvironment
39
- } = context;
40
- const errors = import_diagnostics.descriptions.UNRESOLVABLE;
41
- app.get([
42
- `/:apiVersion/bundle/:format/:compat?/l/:locale/e/:environment/bi/:bundleSpecifier/module/mi/:specifier/latest/:prettyUrl?`,
43
- `/:apiVersion/bundle/:format/:compat?/l/:locale/e/:environment/bi/:bundleSpecifier/module/mi/:specifier/s/:signature/:prettyUrl?`,
44
- `/:apiVersion/bundle/:format/:compat?/l/:locale/bi/:bundleSpecifier/module/mi/:specifier/latest/:prettyUrl?`,
45
- `/:apiVersion/bundle/:format/:compat?/l/:locale/bi/:bundleSpecifier/module/mi/:specifier/s/:signature/:prettyUrl?`,
46
- `/:apiVersion/bundle/:format/:compat?/e/:environment/bi/:bundleSpecifier/module/mi/:specifier/latest/:prettyUrl?`,
47
- `/:apiVersion/bundle/:format/:compat?/e/:environment/bi/:bundleSpecifier/module/mi/:specifier/s/:signature/:prettyUrl?`,
48
- `/:apiVersion/bundle/:format/:compat?/bi/:bundleSpecifier/module/mi/:specifier/latest/:prettyUrl?`,
49
- `/:apiVersion/bundle/:format/:compat?/bi/:bundleSpecifier/module/mi/:specifier/s/:signature/:prettyUrl?`
50
- ], async (req, res) => {
51
- const runtimeContext = req.getRuntimeContext(defaultRuntimeEnvironment);
52
- const {runtimeEnvironment, runtimeParams} = runtimeContext;
53
- const targetEnvironment = runtimeParams.environment;
54
- if (!(0, import_utils.isSupportedEnvironment)(environmentConfig, targetEnvironment)) {
55
- res.status(400).send({error: `Environment "${targetEnvironment}" is not supported`});
56
- return;
57
- }
58
- let moduleId, signature;
59
- try {
60
- ({moduleId, signature} = (0, import_shared_utils.getModuleIdentity)(req));
61
- const sourceMapUrl = req.path.replace("/bundle/", "/sourcemaps/bundle/");
62
- const sourceMapRuntimeContext = {...runtimeEnvironment, sourceMapUrl};
63
- const importerSpecifier = req.query.importer;
64
- if (importerSpecifier) {
65
- const importerModuleId = (0, import_shared_utils.explodeSpecifier)(importerSpecifier);
66
- const {entry} = await moduleRegistry.getModuleEntry(importerModuleId);
67
- const versionedModuleEntry = await moduleRegistry.getModuleEntry({
68
- ...moduleId,
69
- importer: entry
70
- });
71
- const uri = await moduleRegistry.resolveModuleUri({...moduleId, version: versionedModuleEntry.version}, runtimeEnvironment, runtimeParams);
72
- res.set({
73
- Location: uri
74
- });
75
- res.sendStatus(302);
76
- return;
77
- }
78
- const bundleDef = await moduleBundler.getModuleBundle(moduleId, sourceMapRuntimeContext, runtimeParams);
79
- if (signature !== import_shared_utils.LATEST_SIGNATURE) {
80
- res.setHeader("Cache-control", "public, max-age=31536000, immutable");
81
- }
82
- const resolvedUris = [];
83
- if (req.isSiteGeneration()) {
84
- if (bundleDef.bundleRecord.imports) {
85
- for (const theImport of bundleDef.bundleRecord.imports) {
86
- const childSpecifier = theImport.specifier;
87
- const id = await (0, import_shared_utils.getVersionedModuleId)(childSpecifier, moduleRegistry);
88
- const uri = await moduleRegistry.resolveModuleUri(id, runtimeEnvironment, runtimeParams);
89
- resolvedUris.push(uri);
90
- }
91
- }
92
- if (bundleDef.bundleRecord.dynamicImports) {
93
- for (const theImport of bundleDef.bundleRecord.dynamicImports) {
94
- const childSpecifier = theImport.specifier;
95
- const id = await (0, import_shared_utils.getVersionedModuleId)(childSpecifier, moduleRegistry);
96
- const uri = await moduleRegistry.resolveModuleUri(id, runtimeEnvironment, runtimeParams);
97
- resolvedUris.push(uri);
98
- }
99
- }
100
- }
101
- res.setMetadata({moduleDefinition: bundleDef, resolvedUris});
102
- res.type("application/javascript").send(bundleDef.code);
103
- } catch (e) {
104
- console.log(e);
105
- const error = (0, import_diagnostics.createReturnStatus)(`bundle for "${moduleId?.specifier || req.params?.specifier}"`, e);
106
- res.status(error.status).type("text/plain").send(error.message);
107
- }
108
- });
109
- app.get([
110
- `/:apiVersion/bundle/:format/:compat?/l/:locale/e/:environment/bi/:bundleSpecifier/module/mi/:specifier`,
111
- `/:apiVersion/bundle/:format/:compat?/l/:locale/bi/:bundleSpecifier/module/mi/:specifier`,
112
- `/:apiVersion/bundle/:format/:compat?/e/:environment/bi/:bundleSpecifier/module/mi/:specifier`,
113
- `/:apiVersion/bundle/:format/:compat?/bi/:bundleSpecifier/module/mi/:specifier`
114
- ], async (req, res) => {
115
- const ctx = req.getRuntimeContext(defaultRuntimeEnvironment);
116
- const targetEnvironment = ctx.runtimeParams.environment;
117
- if (!(0, import_utils.isSupportedEnvironment)(environmentConfig, targetEnvironment)) {
118
- res.status(400).send({error: `Environment "${targetEnvironment}" is not supported`});
119
- return;
120
- }
121
- let moduleId;
122
- try {
123
- ({moduleId} = (0, import_shared_utils.getModuleIdentity)(req));
124
- const importerSpecifier = req.query.importer;
125
- if (importerSpecifier) {
126
- const importerModuleId = (0, import_shared_utils.explodeSpecifier)(importerSpecifier);
127
- const {entry} = await moduleRegistry.getModuleEntry(importerModuleId);
128
- moduleId = {...moduleId, importer: entry};
129
- }
130
- const {ownHash, moduleEntry} = await moduleRegistry.getModule(moduleId, ctx.runtimeParams);
131
- if (ownHash) {
132
- const jsonQuery = req.isJsonRequest() ? `${ctx.runtimeEnvironment.debug ? "&" : "?"}json` : "";
133
- const uri = await moduleRegistry.resolveModuleUri({...moduleId, version: moduleEntry.version}, ctx.runtimeEnvironment, ctx.runtimeParams, ownHash);
134
- res.set({
135
- Location: `${uri}${jsonQuery}`
136
- });
137
- res.sendStatus(302);
138
- }
139
- } catch (e) {
140
- console.log(e);
141
- const error = (0, import_diagnostics.createReturnStatus)(`bundle for "${moduleId?.specifier || req.params?.specifier}"`, e);
142
- res.status(error.status).type("text/plain").send(error.message);
143
- }
144
- });
145
- app.get([
146
- `/:apiVersion/sourcemaps/bundle/:format/:compat?/l/:locale/e/:environment/bi/:bundleSpecifier/module/mi/:specifier/latest/:prettyUrl?`,
147
- `/:apiVersion/sourcemaps/bundle/:format/:compat?/l/:locale/e/:environment/bi/:bundleSpecifier/module/mi/:specifier/s/:signature/:prettyUrl?`,
148
- `/:apiVersion/sourcemaps/bundle/:format/:compat?/l/:locale/bi/:bundleSpecifier/module/mi/:specifier/latest/:prettyUrl?`,
149
- `/:apiVersion/sourcemaps/bundle/:format/:compat?/l/:locale/bi/:bundleSpecifier/module/mi/:specifier/s/:signature/:prettyUrl?`,
150
- `/:apiVersion/sourcemaps/bundle/:format/:compat?/e/:environment/bi/:bundleSpecifier/module/mi/:specifier/latest/:prettyUrl?`,
151
- `/:apiVersion/sourcemaps/bundle/:format/:compat?/e/:environment/bi/:bundleSpecifier/module/mi/:specifier/s/:signature/:prettyUrl?`,
152
- `/:apiVersion/sourcemaps/bundle/:format/:compat?/bi/:bundleSpecifier/module/mi/:specifier/latest/:prettyUrl?`,
153
- `/:apiVersion/sourcemaps/bundle/:format/:compat?/bi/:bundleSpecifier/module/mi/:specifier/s/:signature/:prettyUrl?`
154
- ], async (req, res) => {
155
- const runtimeContext = req.getRuntimeContext(defaultRuntimeEnvironment);
156
- const {runtimeParams, runtimeEnvironment} = runtimeContext;
157
- const targetEnvironment = runtimeParams.environment;
158
- if (!(0, import_utils.isSupportedEnvironment)(environmentConfig, targetEnvironment)) {
159
- res.status(400).send({error: `Environment "${targetEnvironment}" is not supported`});
160
- return;
161
- }
162
- let moduleId, signature;
163
- try {
164
- ({moduleId, signature} = (0, import_shared_utils.getModuleIdentity)(req));
165
- const bundleDef = await moduleBundler.getModuleBundle(moduleId, runtimeEnvironment);
166
- if (signature !== import_shared_utils.LATEST_SIGNATURE) {
167
- res.setHeader("Cache-control", "public, max-age=31536000, immutable");
168
- }
169
- res.type("application/json").send(bundleDef.map);
170
- } catch (e) {
171
- console.log(e);
172
- const error = (0, import_diagnostics.createReturnStatus)(`bundle sourcemap for "${moduleId?.specifier || req.params?.specifier}"`, e);
173
- res.status(error.status).type("text/plain").send(error.message);
174
- }
175
- });
176
- app.get([
177
- `/:apiVersion/module/:format/:compat/l/:locale/e/:environment/mi/:specifier/latest/:prettyUrl?`,
178
- `/:apiVersion/module/:format/:compat/l/:locale/e/:environment/mi/:specifier/s/:signature/:prettyUrl?`,
179
- `/:apiVersion/module/:format/:compat/l/:locale/mi/:specifier/latest/:prettyUrl?`,
180
- `/:apiVersion/module/:format/:compat/l/:locale/mi/:specifier/s/:signature/:prettyUrl?`,
181
- `/:apiVersion/module/:format/:compat/e/:environment/mi/:specifier/latest/:prettyUrl?`,
182
- `/:apiVersion/module/:format/:compat/e/:environment/mi/:specifier/s/:signature/:prettyUrl?`,
183
- `/:apiVersion/module/:format/:compat/mi/:specifier/latest/:prettyUrl?`,
184
- `/:apiVersion/module/:format/:compat/mi/:specifier/s/:signature/:prettyUrl?`
185
- ], async (req, res) => {
186
- const {runtimeEnvironment, runtimeParams} = req.getRuntimeContext(defaultRuntimeEnvironment);
187
- const targetEnvironment = runtimeParams.environment;
188
- if (!(0, import_utils.isSupportedEnvironment)(environmentConfig, targetEnvironment)) {
189
- res.status(400).send({error: `Environment "${targetEnvironment}" is not supported`});
190
- return;
191
- }
192
- let moduleId, signature;
193
- try {
194
- ({moduleId, signature} = (0, import_shared_utils.getModuleIdentity)(req));
195
- if (!req.validateJsonRequest()) {
196
- throw (0, import_diagnostics.createSingleDiagnosticError)({description: errors.INVALID_JSON()}, import_diagnostics.LwrUnresolvableError);
197
- }
198
- const theModule = await moduleRegistry.getLinkedModule(moduleId, runtimeEnvironment, runtimeParams);
199
- const {ownHash, linkedSource} = theModule;
200
- if (signature === import_shared_utils.LATEST_SIGNATURE || ownHash === signature) {
201
- const code = linkedSource;
202
- res.setMetadata({moduleDefinition: theModule});
203
- if (req.isJsonRequest()) {
204
- const json = await (0, import_shared_utils.serializeModuleToJson)(code, theModule, moduleRegistry, runtimeParams);
205
- res.type("application/json").send(json);
206
- } else {
207
- res.type("application/javascript").send(code);
208
- }
209
- } else {
210
- throw (0, import_diagnostics.createSingleDiagnosticError)({description: errors.SIGNED_MODULE(moduleId.specifier, signature)}, import_diagnostics.LwrUnresolvableError);
211
- }
212
- } catch (e) {
213
- console.log(e);
214
- const error = (0, import_diagnostics.createReturnStatus)(`module "${moduleId?.specifier || req.params?.specifier}"`, e);
215
- res.status(error.status).type("text/plain").send(error.message);
216
- }
217
- });
218
- app.get([
219
- `/:apiVersion/module/:format/:compat/l/:locale/e/:environment/mi/:specifier`,
220
- `/:apiVersion/module/:format/:compat/l/:locale/mi/:specifier`,
221
- `/:apiVersion/module/:format/:compat/e/:environment/mi/:specifier`,
222
- `/:apiVersion/module/:format/:compat/mi/:specifier`
223
- ], async (req, res) => {
224
- const ctx = req.getRuntimeContext(defaultRuntimeEnvironment);
225
- const targetEnvironment = ctx.runtimeParams.environment;
226
- if (!(0, import_utils.isSupportedEnvironment)(environmentConfig, targetEnvironment)) {
227
- res.status(400).send({error: `Environment "${targetEnvironment}" is not supported`});
228
- return;
229
- }
230
- let moduleId;
231
- try {
232
- ({moduleId} = (0, import_shared_utils.getModuleIdentity)(req));
233
- const importerSpecifier = req.query.importer;
234
- if (importerSpecifier) {
235
- const importerModuleId = (0, import_shared_utils.explodeSpecifier)(importerSpecifier);
236
- const {entry} = await moduleRegistry.getModuleEntry(importerModuleId);
237
- moduleId = {...moduleId, importer: entry};
238
- }
239
- const {ownHash, moduleEntry} = await moduleRegistry.getModule(moduleId, ctx.runtimeParams);
240
- if (ownHash) {
241
- const jsonQuery = req.isJsonRequest() ? `${ctx.runtimeEnvironment.debug ? "&" : "?"}json` : "";
242
- const uri = await moduleRegistry.resolveModuleUri({...moduleId, version: moduleEntry.version}, ctx.runtimeEnvironment, ctx.runtimeParams, ownHash);
243
- res.set({
244
- Location: `${uri}${jsonQuery}`
245
- });
246
- res.sendStatus(302);
247
- }
248
- } catch (e) {
249
- console.log(e);
250
- const error = (0, import_diagnostics.createReturnStatus)(`module "${moduleId?.specifier || req.params?.specifier}"`, e);
251
- res.status(error.status).type("text/plain").send(error.message);
252
- }
253
- });
254
- app.get([
255
- `/:apiVersion/mapping/:format/:compat/l/:locale/e/:environment/bi/:bundleSpecifier/mp/:specifiers`,
256
- `/:apiVersion/mapping/:format/:compat/l/:locale/e/:environment/mp/:specifiers`,
257
- `/:apiVersion/mapping/:format/:compat/l/:locale/bi/:bundleSpecifier/mp/:specifiers`,
258
- `/:apiVersion/mapping/:format/:compat/e/:environment/bi/:bundleSpecifier/mp/:specifiers`,
259
- `/:apiVersion/mapping/:format/:compat/l/:locale/mp/:specifiers`,
260
- `/:apiVersion/mapping/:format/:compat/e/:environment/mp/:specifiers`,
261
- `/:apiVersion/mapping/:format/:compat/bi/:bundleSpecifier/mp/:specifiers`,
262
- `/:apiVersion/mapping/:format/:compat/mp/:specifiers`
263
- ], async (req, res) => {
264
- const requestContext = req.getRuntimeContext(defaultRuntimeEnvironment);
265
- const targetEnvironment = requestContext.runtimeParams.environment;
266
- if (!(0, import_utils.isSupportedEnvironment)(environmentConfig, targetEnvironment)) {
267
- res.status(400).send({error: `Environment "${targetEnvironment}" is not supported`});
268
- return;
269
- }
270
- let moduleIds;
271
- try {
272
- ({moduleIds} = (0, import_shared_utils.getMappingIdentity)(req));
273
- const {runtimeEnvironment, runtimeParams} = requestContext;
274
- const importMetadata = await (0, import_shared_utils.getImportMetadataMappings)(moduleIds, runtimeEnvironment, runtimeParams, moduleRegistry, moduleBundler);
275
- res.setMetadata({importMetadata});
276
- res.status(200).type("application/json").send(importMetadata);
277
- } catch (e) {
278
- console.log(e);
279
- const error = (0, import_diagnostics.createReturnStatus)(`mappings for "${JSON.stringify(moduleIds || req.params?.specifiers)}"`, e);
280
- res.status(error.status).send(error.message);
281
- }
282
- });
283
- app.get([
284
- `/:apiVersion/resource/:format/l/:locale/e/:environment/:specifier`,
285
- `/:apiVersion/resource/:format/l/:locale/:specifier`,
286
- `/:apiVersion/resource/:format/e/:environment/:specifier`,
287
- `/:apiVersion/resource/:format/:specifier`
288
- ], async (req, res) => {
289
- const {runtimeEnvironment, runtimeParams} = req.getRuntimeContext(defaultRuntimeEnvironment);
290
- const targetEnvironment = runtimeParams.environment;
291
- if (!(0, import_utils.isSupportedEnvironment)(environmentConfig, targetEnvironment)) {
292
- res.status(400).send({error: `Environment "${targetEnvironment}" is not supported`});
293
- return;
294
- }
295
- let resourceId;
296
- try {
297
- ({resourceId} = (0, import_shared_utils.getResourceIdentity)(req));
298
- const resource = await resourceRegistry.getResource(resourceId, runtimeEnvironment, runtimeParams);
299
- if (resource && resource.content) {
300
- const type = resource.type === "text/css" ? resource.type : "application/javascript";
301
- res.type(type).send(resource.content);
302
- } else if (resource && resource.stream) {
303
- res.type(resource.type).stream(resource.stream);
304
- } else {
305
- throw (0, import_diagnostics.createSingleDiagnosticError)({description: errors.RESOURCE(resourceId.specifier)}, import_diagnostics.LwrUnresolvableError);
306
- }
307
- res.setMetadata({resource});
308
- } catch (e) {
309
- console.log(e);
310
- const error = (0, import_diagnostics.createReturnStatus)(`resource "${resourceId?.specifier || req.params?.specifier}"`, e);
311
- res.status(error.status).type("text/plain").send(error.message);
312
- }
313
- });
314
- const paths = context.appConfig.assets.map((a) => a.urlPath);
315
- for (let i = 0; i < paths.length; i++) {
316
- paths[i] = paths[i] + app.getRegexWildcard();
317
- }
318
- app.all(paths, async (req, res) => {
319
- const {runtimeEnvironment} = req.getRuntimeContext(defaultRuntimeEnvironment);
320
- try {
321
- const {
322
- assetId: {specifier, type},
323
- signature
324
- } = (0, import_shared_utils.getAssetIdentity)(req);
325
- const assetObj = await context.assetRegistry.getAsset({specifier, signature, type}, runtimeEnvironment);
326
- if (assetObj.mime) {
327
- res.type(assetObj.mime);
328
- }
329
- res.setMetadata({asset: assetObj});
330
- res.stream(assetObj.stream());
331
- } catch (e) {
332
- console.log(e);
333
- const error = (0, import_diagnostics.createReturnStatus)(`asset at "${req.originalUrl}"`, e);
334
- res.status(error.status).send(error.message);
335
- }
336
- });
337
- app.all("/:apiVersion/:assetType/:immutable?/s/:signature/" + app.getRegexWildcard(), async (req, res) => {
338
- const {runtimeEnvironment} = req.getRuntimeContext(defaultRuntimeEnvironment);
339
- const {basePath} = runtimeEnvironment;
340
- const {signature} = req.params;
341
- const {immutable, assetType: type} = req.params;
342
- const specifier = req.params[0] ? `/${req.params[0]}` : req.originalUrl;
343
- const basePathSpecifier = `${basePath}${specifier}`;
344
- try {
345
- const assetObj = await context.assetRegistry.getAsset({specifier: basePathSpecifier, signature, type}, runtimeEnvironment, req.isSiteGeneration());
346
- if (immutable) {
347
- }
348
- if (assetObj.mime) {
349
- res.type(assetObj.mime);
350
- }
351
- res.setMetadata({asset: assetObj});
352
- res.stream(assetObj.stream());
353
- } catch (e) {
354
- console.log(e);
355
- const error = (0, import_diagnostics.createReturnStatus)(`asset at "${specifier}"`, e);
356
- res.status(error.status).type("text/plain").send(error.message);
357
- }
358
- });
359
- }
@@ -1,15 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
3
- var __export = (target, all) => {
4
- for (var name in all)
5
- __defProp(target, name, {get: all[name], enumerable: true});
6
- };
7
-
8
- // packages/@lwrjs/core/src/middlewares/base-middleware.ts
9
- __markAsModule(exports);
10
- __export(exports, {
11
- default: () => baseMiddleware
12
- });
13
- function baseMiddleware(app, _context) {
14
- app.useCompression();
15
- }