@lwrjs/core 0.9.0-alpha.2 → 0.9.0-alpha.21

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 (77) hide show
  1. package/build/cjs/context/provider.cjs +84 -0
  2. package/build/cjs/context/server.cjs +75 -0
  3. package/build/cjs/index.cjs +69 -153
  4. package/build/cjs/middleware/asset-middleware.cjs +56 -0
  5. package/build/cjs/middleware/bundle-middleware.cjs +113 -0
  6. package/build/cjs/{middlewares → middleware}/hmr-middleware.cjs +4 -4
  7. package/build/cjs/{middlewares → middleware}/locale-middleware.cjs +2 -2
  8. package/build/cjs/middleware/mapping-middleware.cjs +61 -0
  9. package/build/cjs/middleware/module-middleware.cjs +88 -0
  10. package/build/cjs/middleware/redirects/unsigned-module-redirect.cjs +37 -0
  11. package/build/cjs/middleware/resource-middleware.cjs +64 -0
  12. package/build/cjs/{context/services.cjs → middleware/utils/error-handling.cjs} +28 -15
  13. package/build/cjs/middleware/utils/identity.cjs +93 -0
  14. package/build/cjs/{context/hooks.cjs → middleware/utils/metadata.cjs} +17 -26
  15. package/build/cjs/{middlewares/utils.cjs → middleware/utils/request.cjs} +17 -16
  16. package/build/cjs/middleware/view-middleware.cjs +151 -0
  17. package/build/cjs/middleware.cjs +43 -0
  18. package/build/cjs/tools/server-warmup.cjs +2 -9
  19. package/build/cjs/tools/static-generation.cjs +127 -49
  20. package/build/es/context/provider.d.ts +3 -0
  21. package/build/es/context/provider.js +39 -0
  22. package/build/es/context/server.d.ts +3 -0
  23. package/build/es/context/server.js +49 -0
  24. package/build/es/index.d.ts +4 -2
  25. package/build/es/index.js +89 -150
  26. package/build/es/middleware/asset-middleware.d.ts +3 -0
  27. package/build/es/middleware/asset-middleware.js +26 -0
  28. package/build/es/middleware/bundle-middleware.d.ts +3 -0
  29. package/build/es/middleware/bundle-middleware.js +88 -0
  30. package/build/es/middleware/hmr-middleware.d.ts +5 -0
  31. package/build/es/{middlewares → middleware}/hmr-middleware.js +2 -2
  32. package/build/es/middleware/locale-middleware.d.ts +3 -0
  33. package/build/es/{middlewares → middleware}/locale-middleware.js +2 -1
  34. package/build/es/middleware/mapping-middleware.d.ts +3 -0
  35. package/build/es/middleware/mapping-middleware.js +34 -0
  36. package/build/es/middleware/module-middleware.d.ts +3 -0
  37. package/build/es/middleware/module-middleware.js +64 -0
  38. package/build/es/middleware/redirects/unsigned-module-redirect.d.ts +6 -0
  39. package/build/es/middleware/redirects/unsigned-module-redirect.js +25 -0
  40. package/build/es/middleware/resource-middleware.d.ts +3 -0
  41. package/build/es/middleware/resource-middleware.js +37 -0
  42. package/build/es/middleware/utils/error-handling.d.ts +3 -0
  43. package/build/es/middleware/utils/error-handling.js +32 -0
  44. package/build/es/middleware/utils/identity.d.ts +6 -0
  45. package/build/es/middleware/utils/identity.js +64 -0
  46. package/build/es/middleware/utils/metadata.d.ts +3 -0
  47. package/build/es/middleware/utils/metadata.js +24 -0
  48. package/build/es/middleware/utils/request.d.ts +15 -0
  49. package/build/es/{middlewares/utils.js → middleware/utils/request.js} +15 -23
  50. package/build/es/middleware/view-middleware.d.ts +3 -0
  51. package/build/es/middleware/view-middleware.js +136 -0
  52. package/build/es/middleware.d.ts +9 -0
  53. package/build/es/middleware.js +13 -0
  54. package/build/es/tools/server-warmup.js +3 -10
  55. package/build/es/tools/static-generation.d.ts +8 -1
  56. package/build/es/tools/static-generation.js +155 -62
  57. package/build/es/tools/types.d.ts +3 -2
  58. package/package.json +36 -32
  59. package/build/cjs/context/global-data.cjs +0 -54
  60. package/build/cjs/middlewares/api-middleware.cjs +0 -359
  61. package/build/cjs/middlewares/base-middleware.cjs +0 -15
  62. package/build/cjs/middlewares/ui-middleware.cjs +0 -183
  63. package/build/es/context/global-data.d.ts +0 -3
  64. package/build/es/context/global-data.js +0 -29
  65. package/build/es/context/hooks.d.ts +0 -9
  66. package/build/es/context/hooks.js +0 -36
  67. package/build/es/context/services.d.ts +0 -8
  68. package/build/es/context/services.js +0 -17
  69. package/build/es/middlewares/api-middleware.d.ts +0 -3
  70. package/build/es/middlewares/api-middleware.js +0 -410
  71. package/build/es/middlewares/base-middleware.d.ts +0 -3
  72. package/build/es/middlewares/base-middleware.js +0 -4
  73. package/build/es/middlewares/hmr-middleware.d.ts +0 -5
  74. package/build/es/middlewares/locale-middleware.d.ts +0 -3
  75. package/build/es/middlewares/ui-middleware.d.ts +0 -3
  76. package/build/es/middlewares/ui-middleware.js +0 -186
  77. package/build/es/middlewares/utils.d.ts +0 -22
@@ -0,0 +1,43 @@
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/middleware.ts
25
+ __markAsModule(exports);
26
+ __export(exports, {
27
+ assetMiddleware: () => import_asset_middleware.assetMiddleware,
28
+ bundleMiddleware: () => import_bundle_middleware.bundleMiddleware,
29
+ hmrMiddleware: () => import_hmr_middleware.hmrMiddleware,
30
+ localeMiddleware: () => import_locale_middleware.localeMiddleware,
31
+ mappingMiddleware: () => import_mapping_middleware.mappingMiddleware,
32
+ moduleMiddleware: () => import_module_middleware.moduleMiddleware,
33
+ resourceMiddleware: () => import_resource_middleware.resourceMiddleware,
34
+ viewMiddleware: () => import_view_middleware.viewMiddleware
35
+ });
36
+ var import_locale_middleware = __toModule(require("./middleware/locale-middleware.cjs"));
37
+ var import_hmr_middleware = __toModule(require("./middleware/hmr-middleware.cjs"));
38
+ var import_module_middleware = __toModule(require("./middleware/module-middleware.cjs"));
39
+ var import_bundle_middleware = __toModule(require("./middleware/bundle-middleware.cjs"));
40
+ var import_mapping_middleware = __toModule(require("./middleware/mapping-middleware.cjs"));
41
+ var import_asset_middleware = __toModule(require("./middleware/asset-middleware.cjs"));
42
+ var import_view_middleware = __toModule(require("./middleware/view-middleware.cjs"));
43
+ var import_resource_middleware = __toModule(require("./middleware/resource-middleware.cjs"));
@@ -36,17 +36,10 @@ async function warmupServer(config, internalRequestKey) {
36
36
  import_shared_utils.logger.setOptions({dedupe: new Set([import_shared_utils.WARN])});
37
37
  }
38
38
  import_shared_utils.logger.info("[Server Warmup] starting");
39
- const {routes, staticSiteGenerator, port, apiVersion, basePath, lwrVersion, serverMode} = config;
39
+ const {routes, staticSiteGenerator, port, basePath} = config;
40
40
  staticSiteGenerator.outputDir = import_dir.skipDirCreation;
41
41
  const urlRewriteMap = new Map();
42
- const runtimeEnvironment = {
43
- ...(0, import_config.explodeMode)(serverMode),
44
- apiVersion,
45
- basePath,
46
- lwrVersion,
47
- debug: false,
48
- serverMode
49
- };
42
+ const runtimeEnvironment = (0, import_config.getRuntimeEnvironment)(config);
50
43
  await new import_static_generation.default().generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, new import_network_dispatcher.default(port, internalRequestKey), staticSiteGenerator.outputDir, urlRewriteMap);
51
44
  import_shared_utils.logger.info("[Server Warmup] complete");
52
45
  }
@@ -37,7 +37,7 @@ var import_config = __toModule(require("@lwrjs/config"));
37
37
  var SiteGenerator = class {
38
38
  async buildStaticApplication(config, dispatcher) {
39
39
  const startTime = import_perf_hooks.performance.now();
40
- import_shared_utils.logger.info("[Static Generation] starting");
40
+ import_shared_utils.logger.info("[SSG] Static Site Generation");
41
41
  if (!import_shared_utils.logger.currentLevel || import_shared_utils.logger.currentLevel == import_shared_utils.WARN || import_shared_utils.logger.currentLevel == import_shared_utils.INFO) {
42
42
  import_shared_utils.logger.setOptions({dedupe: new Set([import_shared_utils.WARN])});
43
43
  }
@@ -46,46 +46,50 @@ var SiteGenerator = class {
46
46
  staticSiteGenerator.outputDir = "__generated_site__";
47
47
  }
48
48
  const outputDir = (0, import_path.join)(rootDir, staticSiteGenerator.outputDir);
49
- import_shared_utils.logger.info(`Clear Output Location: ${outputDir}`);
50
- import_fs_extra.default.rmSync(outputDir, {recursive: true, force: true});
49
+ if (!staticSiteGenerator.skipCleanOutputDir) {
50
+ import_shared_utils.logger.info(`[SSG] Clearing output directory: ${outputDir}`);
51
+ import_fs_extra.default.rmSync(outputDir, {recursive: true, force: true});
52
+ } else {
53
+ import_shared_utils.logger.info(`[SSG] Reusing existing output directory: ${outputDir}`);
54
+ }
51
55
  const urlRewriteMap = new Map();
52
- const {apiVersion, basePath, lwrVersion, serverMode} = config;
53
- const runtimeEnvironment = {
54
- ...(0, import_config.explodeMode)(serverMode),
55
- apiVersion,
56
- basePath,
57
- lwrVersion,
58
- debug: false,
59
- serverMode
60
- };
56
+ const {basePath} = config;
57
+ const runtimeEnvironment = (0, import_config.getRuntimeEnvironment)(config);
61
58
  await this.generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, dispatcher, outputDir, urlRewriteMap);
62
59
  this.writeNetlifyRedirectConfig(outputDir, urlRewriteMap);
63
60
  this.copyAssets(assets, outputDir, basePath);
64
61
  const endTime = import_perf_hooks.performance.now();
65
62
  const timeDiff = (endTime - startTime) / 1e3;
66
- import_shared_utils.logger.info(`[Static Generation] complete in ${Math.round(timeDiff)} seconds`);
63
+ import_shared_utils.logger.info(`[SSG] Static Site Generation complete in ${Math.round(timeDiff)} seconds`);
67
64
  }
68
65
  async generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, dispatcher, outputDir, urlRewriteMap = new Map()) {
69
66
  if (!staticSiteGenerator.locales) {
70
67
  staticSiteGenerator.locales = ["en-US"];
71
68
  }
72
69
  const generateUrl = this.createGenerateURLFunction(dispatcher);
70
+ const {skipBaseDocumentGeneration = false} = staticSiteGenerator;
73
71
  for (const locale of staticSiteGenerator.locales) {
74
72
  for (const route of routes) {
75
- const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment);
73
+ const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
76
74
  await generateUrl(basePath + route.path, siteConfig);
77
75
  }
78
76
  if (staticSiteGenerator._additionalRoutePaths) {
79
77
  for (const uri of staticSiteGenerator._additionalRoutePaths) {
80
- const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment);
78
+ const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
81
79
  await generateUrl(uri, siteConfig);
82
80
  }
83
81
  }
84
82
  const {_additionalModules} = staticSiteGenerator;
85
83
  if (_additionalModules) {
86
84
  for (const specifier of _additionalModules) {
87
- const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment);
85
+ import_shared_utils.logger.debug(`[SSG] Additional Module: ${locale} ${specifier}`);
86
+ const startTime = import_perf_hooks.performance.now();
87
+ const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
88
88
  await this.dispatchJSResourceRecursive(specifier, dispatcher, siteConfig, true);
89
+ await this.captureAdditionalRouteMetadata(siteConfig);
90
+ const endTime = import_perf_hooks.performance.now();
91
+ const timeDiff = endTime - startTime;
92
+ import_shared_utils.logger.info(`[SSG] Additional Module ${locale} ${specifier} in ${Math.round(timeDiff)} ms`);
89
93
  }
90
94
  }
91
95
  }
@@ -93,10 +97,13 @@ var SiteGenerator = class {
93
97
  createGenerateURLFunction(dispatcher) {
94
98
  const generateRoute = async (uri, siteConfig) => {
95
99
  const locale = siteConfig.locale;
96
- import_shared_utils.logger.info(`Start Generate: ${locale} ${uri}`);
100
+ import_shared_utils.logger.debug(`[SSG] Start Generate: ${locale} ${uri}`);
101
+ const startTime = import_perf_hooks.performance.now();
97
102
  await this.dispatchResourceRecursive(uri, dispatcher, {resourceType: "route"}, siteConfig);
98
- this.addAdditionalImportMetadataToViewConfig(siteConfig);
99
- import_shared_utils.logger.info(`End Generate ${locale} ${uri}`);
103
+ await this.captureAdditionalRouteMetadata(siteConfig);
104
+ const endTime = import_perf_hooks.performance.now();
105
+ const timeDiff = endTime - startTime;
106
+ import_shared_utils.logger.info(`[SSG] ${locale} ${uri} in ${Math.round(timeDiff)} ms`);
100
107
  };
101
108
  return generateRoute.bind(this);
102
109
  }
@@ -104,8 +111,12 @@ var SiteGenerator = class {
104
111
  const {visitedUrls} = siteConfig;
105
112
  if (!visitedUrls.has(url)) {
106
113
  visitedUrls.add(url);
114
+ if ((0, import_shared_utils.isExternalUrl)(url)) {
115
+ import_shared_utils.logger.warn("[SSG] Skipped generation of external url: " + url);
116
+ return;
117
+ }
107
118
  if (url.indexOf("/:") !== -1 || url.indexOf("*") !== -1) {
108
- import_shared_utils.logger.warn("Skipped generation of url with variable path segment: " + url);
119
+ import_shared_utils.logger.warn("[SSG] Skipped generation of url with variable path segment: " + url);
109
120
  return;
110
121
  }
111
122
  let context;
@@ -154,6 +165,9 @@ var SiteGenerator = class {
154
165
  const jsUri = importModule.specifier.startsWith("/") ? importModule.specifier : (0, import_shared_utils.getSpecifier)(importModule);
155
166
  dispatchRequests.push(this.dispatchJSResourceRecursive(jsUri, dispatcher, siteConfig));
156
167
  }
168
+ if (moduleDefinition.bundleRecord) {
169
+ this.addBundleToSiteMetadata(moduleDefinition, url, siteConfig);
170
+ }
157
171
  }
158
172
  const uris = context.fs?.metadata?.resolvedUris || [];
159
173
  for (const jsUri of uris) {
@@ -161,6 +175,50 @@ var SiteGenerator = class {
161
175
  }
162
176
  await Promise.all(dispatchRequests);
163
177
  }
178
+ addBundleToSiteMetadata(bundleDefinition, url, siteConfig) {
179
+ if (siteConfig.siteMetadata) {
180
+ const specifier = bundleDefinition.specifier;
181
+ const imports = bundleDefinition.bundleRecord.imports?.map((moduleRef) => moduleRef.specifier) || [];
182
+ const bundleMetadata = {
183
+ version: bundleDefinition.version,
184
+ path: decodeURIComponent(url),
185
+ includedModules: bundleDefinition.bundleRecord.includedModules || [],
186
+ imports
187
+ };
188
+ const siteBundles = siteConfig.siteMetadata.getSiteBundles().bundles;
189
+ siteBundles[specifier] = bundleMetadata;
190
+ }
191
+ }
192
+ addResourceToSiteMetadata(resourceDefinition, url, siteConfig) {
193
+ if (siteConfig.siteMetadata) {
194
+ if (!resourceDefinition.specifier) {
195
+ import_shared_utils.logger.warn("[SSG] Could not save resource metadata. There was no specifier.", resourceDefinition);
196
+ } else {
197
+ const specifier = resourceDefinition.specifier;
198
+ const resourceMetadata = {
199
+ path: decodeURIComponent(url),
200
+ mimeType: resourceDefinition.type
201
+ };
202
+ const siteResources = siteConfig.siteMetadata.getSiteResources();
203
+ siteResources.resources[specifier] = resourceMetadata;
204
+ }
205
+ }
206
+ }
207
+ addAssetToSiteMetadata(assetDefinition, url, siteConfig) {
208
+ if (siteConfig.siteMetadata) {
209
+ if (!assetDefinition.uri) {
210
+ import_shared_utils.logger.warn("[SSG] Could not save asset metadata. There was no uri.", assetDefinition);
211
+ } else {
212
+ const specifier = assetDefinition.uri;
213
+ const resourceMetadata = {
214
+ path: decodeURIComponent(url),
215
+ mimeType: String(assetDefinition.mime)
216
+ };
217
+ const siteAssets = siteConfig.siteMetadata.getSiteAssets();
218
+ siteAssets.assets[specifier] = resourceMetadata;
219
+ }
220
+ }
221
+ }
164
222
  async handleMappingResource(url, context, siteConfig, dispatcher) {
165
223
  const {importMetadata: importMetatdata} = siteConfig;
166
224
  const statusCode = context.response?.status;
@@ -179,29 +237,31 @@ var SiteGenerator = class {
179
237
  await Promise.all(dispatchRequests);
180
238
  } else {
181
239
  const body = context.fs?.body;
182
- import_shared_utils.logger.warn(`Failed to fetch ${url}: (${statusCode}) ${body}`);
240
+ import_shared_utils.logger.warn(`[SSG] Failed to fetch ${url}: (${statusCode}) ${body}`);
183
241
  }
184
242
  }
185
243
  async handleHtmlResource(url, context, siteConfig, dispatcher) {
186
- const {outputDir} = siteConfig;
187
- let fileName = "index.html";
188
- let directoryPath = url;
189
- if (url.endsWith(".html") || url.endsWith(".xml")) {
190
- const lastPathIndex = url.lastIndexOf("/") + 1;
191
- fileName = url.substring(lastPathIndex, url.length);
192
- directoryPath = url.substring(0, lastPathIndex);
193
- }
194
- const dir = (0, import_dir.createResourceDir)(directoryPath, outputDir);
195
- const localeDir = (0, import_dir.createResourceDir)(directoryPath, (0, import_path.join)(outputDir, siteConfig.locale));
196
- const filePath = (0, import_path.join)(dir, fileName);
197
- const fileLocalePath = (0, import_path.join)(localeDir, fileName);
198
- if (siteConfig.locale.toLowerCase().startsWith("en")) {
199
- siteConfig.viewPaths.add(filePath);
200
- await (0, import_stream.writeResponse)(context, filePath);
244
+ const {outputDir, skipBaseDocumentGeneration} = siteConfig;
245
+ if (!skipBaseDocumentGeneration) {
246
+ let fileName = "index.html";
247
+ let directoryPath = url;
248
+ if (url.endsWith(".html") || url.endsWith(".xml")) {
249
+ const lastPathIndex = url.lastIndexOf("/") + 1;
250
+ fileName = url.substring(lastPathIndex, url.length);
251
+ directoryPath = url.substring(0, lastPathIndex);
252
+ }
253
+ const dir = (0, import_dir.createResourceDir)(directoryPath, outputDir);
254
+ const localeDir = (0, import_dir.createResourceDir)(directoryPath, (0, import_path.join)(outputDir, siteConfig.locale));
255
+ const filePath = (0, import_path.join)(dir, fileName);
256
+ const fileLocalePath = (0, import_path.join)(localeDir, fileName);
257
+ if (siteConfig.locale.toLowerCase().startsWith("en")) {
258
+ siteConfig.viewPaths.add(filePath);
259
+ await (0, import_stream.writeResponse)(context, filePath);
260
+ }
261
+ (0, import_dir.createDir)(localeDir);
262
+ siteConfig.viewPaths.add(fileLocalePath);
263
+ await (0, import_stream.writeResponse)(context, fileLocalePath);
201
264
  }
202
- (0, import_dir.createDir)(localeDir);
203
- siteConfig.viewPaths.add(fileLocalePath);
204
- await (0, import_stream.writeResponse)(context, fileLocalePath);
205
265
  const viewDefinition = context.fs?.metadata?.viewDefinition;
206
266
  if (viewDefinition) {
207
267
  await this.handleViewDefinition(viewDefinition, siteConfig, dispatcher);
@@ -243,7 +303,7 @@ var SiteGenerator = class {
243
303
  siteConfig.viewConfigPath = this.getResourcePathFromUrl(siteConfig, resourceUri);
244
304
  }
245
305
  } else {
246
- import_shared_utils.logger.warn("Skipped inline bootstrap resource: %j", resource);
306
+ import_shared_utils.logger.warn("[SSG] Skipped inline bootstrap resource: %j", resource);
247
307
  }
248
308
  }
249
309
  }
@@ -253,7 +313,7 @@ var SiteGenerator = class {
253
313
  if (resourceUri.startsWith("/")) {
254
314
  dispatchRequests.push(this.dispatchResourceRecursive(resourceUri, dispatcher, {resourceType: "resource"}, siteConfig));
255
315
  } else {
256
- import_shared_utils.logger.warn("Skipped resource: %j", resource);
316
+ import_shared_utils.logger.warn("[SSG] Skipped resource: %j", resource);
257
317
  }
258
318
  }
259
319
  await Promise.all(dispatchRequests);
@@ -269,7 +329,7 @@ var SiteGenerator = class {
269
329
  const mappingURL = siteConfig.endpoints?.uris?.mapping + encodeURIComponent(jsUri);
270
330
  await this.dispatchResourceRecursive(mappingURL, dispatcher, {resourceType: "mapping"}, siteConfig);
271
331
  } else {
272
- import_shared_utils.logger.warn('Unable to fetch mapping for bare specifier or variable dynamic import: "' + jsUri + '"');
332
+ import_shared_utils.logger.warn('[SSG] Unable to fetch mapping for bare specifier or variable dynamic import: "' + jsUri + '"');
273
333
  }
274
334
  } else if (isAdditionalModulesRequest) {
275
335
  const uri = `${siteConfig.endpoints?.uris.legacyDefault}${encodeURIComponent(jsUri)}`;
@@ -281,12 +341,17 @@ var SiteGenerator = class {
281
341
  const metadata = context.fs?.metadata;
282
342
  const fullPath = this.getResourcePathFromUrl(siteConfig, url);
283
343
  await (0, import_stream.writeResponse)(context, fullPath);
344
+ if (metadata?.resource) {
345
+ this.addResourceToSiteMetadata(metadata?.resource, url, siteConfig);
346
+ } else if (metadata?.asset) {
347
+ this.addAssetToSiteMetadata(metadata?.asset, url, siteConfig);
348
+ }
284
349
  const assetReferences = metadata?.asset?.metadata?.assetReferences || [];
285
350
  const dispatchRequests = [];
286
351
  for (const ref of assetReferences) {
287
352
  const refUrl = ref.override?.uri || ref.url;
288
353
  dispatchRequests.push(this.dispatchResourceRecursive(refUrl, dispatcher, {resourceType: "asset", asset: metadata?.asset}, siteConfig).catch((err) => {
289
- import_shared_utils.logger.warn(`Failed to fetch asset reference => ${refUrl} from ${url}`, err);
354
+ import_shared_utils.logger.warn(`[SSG] Failed to fetch asset reference => ${refUrl} from ${url}`, err);
290
355
  }));
291
356
  }
292
357
  return Promise.all(dispatchRequests);
@@ -323,14 +388,14 @@ var SiteGenerator = class {
323
388
  if (assetSrcDir && import_fs_extra.default.existsSync(assetSrcDir)) {
324
389
  import_fs_extra.default.copySync(assetSrcDir, assetOutputDir);
325
390
  } else {
326
- import_shared_utils.logger.warn("Could not find assets to copy at path: " + assetSrcDir);
391
+ import_shared_utils.logger.warn("[SSG] Could not find assets to copy at path: " + assetSrcDir);
327
392
  }
328
393
  } catch (e) {
329
- import_shared_utils.logger.error("Error occurred processing asset config: " + JSON.stringify(asset), e);
394
+ import_shared_utils.logger.error("[SSG] Error occurred processing asset config: " + JSON.stringify(asset), e);
330
395
  }
331
396
  }
332
397
  }
333
- createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment) {
398
+ createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment) {
334
399
  const featureFlags = this.filterFeatureFlags();
335
400
  const endpoints = {
336
401
  uris: {
@@ -345,12 +410,21 @@ var SiteGenerator = class {
345
410
  locale,
346
411
  urlRewriteMap,
347
412
  endpoints,
348
- ...featureFlags
413
+ skipBaseDocumentGeneration,
414
+ ...featureFlags,
415
+ siteMetadata: new import_shared_utils.SiteMetadataImpl({rootDir: outputDir})
349
416
  };
350
417
  }
351
418
  filterFeatureFlags() {
352
- if ((0, import_shared_utils.getFeatureFlags)().LEGACY_LOADER) {
353
- return {featureFlags: {LEGACY_LOADER: true}};
419
+ const ffs = (0, import_shared_utils.getFeatureFlags)();
420
+ if (ffs && Object.keys(ffs).length) {
421
+ const accumlator = {};
422
+ for (const [key, value] of Object.entries(ffs)) {
423
+ if (value) {
424
+ accumlator[key] = true;
425
+ }
426
+ }
427
+ return {featureFlags: accumlator};
354
428
  } else {
355
429
  return void 0;
356
430
  }
@@ -387,6 +461,10 @@ ${mergeIndex}
387
461
  });
388
462
  }
389
463
  }
464
+ async captureAdditionalRouteMetadata(siteConfig) {
465
+ this.addAdditionalImportMetadataToViewConfig(siteConfig);
466
+ await siteConfig.siteMetadata?.persistSiteMetadata();
467
+ }
390
468
  };
391
469
  var static_generation_default = SiteGenerator;
392
470
  var ViewImportMetadataImpl = class {
@@ -0,0 +1,3 @@
1
+ import { ProviderContext, ServerContext } from '@lwrjs/types';
2
+ export declare function createProviderContext(serverContext: ServerContext): ProviderContext;
3
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1,39 @@
1
+ import { deepFreeze } from '@lwrjs/shared-utils';
2
+ export function createProviderContext(serverContext) {
3
+ // This is a subset of config to user-land code
4
+ const { cacheDir, lwc: { modules = [] }, routes, errorRoutes, rootDir, contentDir, layoutsDir, locker, amdLoader, esmLoader, environment, basePath, bundleConfig, } = serverContext.appConfig;
5
+ const { onModuleDefinitionChange, onModuleSourceChange } = serverContext.appObserver;
6
+ const { notifyModuleDefinitionChanged, notifyModuleSourceChanged, notifyViewSourceChanged, notifyAssetSourceChanged, } = serverContext.appEmitter;
7
+ return {
8
+ appObserver: deepFreeze({ onModuleDefinitionChange, onModuleSourceChange }),
9
+ appEmitter: {
10
+ notifyModuleDefinitionChanged: (payload) => notifyModuleDefinitionChanged.call(serverContext.appEmitter, payload),
11
+ notifyModuleSourceChanged: (payload) => notifyModuleSourceChanged.call(serverContext.appEmitter, payload),
12
+ notifyViewSourceChanged: (payload) => notifyViewSourceChanged.call(serverContext.appEmitter, payload),
13
+ notifyAssetSourceChanged: (payload) => notifyAssetSourceChanged.call(serverContext.appEmitter, payload),
14
+ },
15
+ moduleRegistry: serverContext.moduleRegistry.getPublicApi(),
16
+ moduleBundler: serverContext.moduleBundler.getPublicApi(),
17
+ resourceRegistry: serverContext.resourceRegistry.getPublicApi(),
18
+ viewRegistry: serverContext.viewRegistry.getPublicApi(),
19
+ assetRegistry: serverContext.assetRegistry.getPublicApi(),
20
+ config: deepFreeze({
21
+ cacheDir,
22
+ modules,
23
+ routes,
24
+ errorRoutes,
25
+ rootDir,
26
+ basePath,
27
+ contentDir,
28
+ layoutsDir,
29
+ locker,
30
+ amdLoader,
31
+ esmLoader,
32
+ environment,
33
+ bundleConfig,
34
+ }),
35
+ runtimeEnvironment: deepFreeze(serverContext.runtimeEnvironment),
36
+ watcherFactory: serverContext.watcherFactory,
37
+ };
38
+ }
39
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1,3 @@
1
+ import type { GlobalData, NormalizedLwrGlobalConfig, RuntimeEnvironment, ServerContext } from '@lwrjs/types';
2
+ export declare function createServerContext(appConfig: NormalizedLwrGlobalConfig, runtimeEnvironment: RuntimeEnvironment, globalData: GlobalData): ServerContext;
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1,49 @@
1
+ import { LwrAssetRegistry } from '@lwrjs/asset-registry';
2
+ import { LwrModuleBundler } from '@lwrjs/module-bundler';
3
+ import { LwrModuleRegistry } from '@lwrjs/module-registry';
4
+ import { LwrResourceRegistry } from '@lwrjs/resource-registry';
5
+ import { LwrApplicationObserver } from '@lwrjs/shared-utils';
6
+ import { LwrViewRegistry } from '@lwrjs/view-registry';
7
+ // dependency chokidar in this package.json is to statisfy the optional dependency in shared-utils for fs-watch.
8
+ import { WatcherFactoryImpl } from '@lwrjs/shared-utils/fs-watch';
9
+ export function createServerContext(appConfig, runtimeEnvironment, globalData) {
10
+ const appObserver = new LwrApplicationObserver();
11
+ const appEmitter = appObserver.createLwrEmitter();
12
+ const assetRegistry = new LwrAssetRegistry({
13
+ appObserver,
14
+ appEmitter,
15
+ runtimeEnvironment,
16
+ }, appConfig);
17
+ const moduleRegistry = new LwrModuleRegistry({
18
+ appObserver,
19
+ appEmitter,
20
+ runtimeEnvironment,
21
+ }, appConfig);
22
+ const moduleBundler = new LwrModuleBundler({ moduleRegistry, appObserver }, appConfig);
23
+ const resourceRegistry = new LwrResourceRegistry();
24
+ const viewRegistry = new LwrViewRegistry({
25
+ moduleRegistry,
26
+ moduleBundler,
27
+ resourceRegistry,
28
+ assetRegistry,
29
+ appObserver,
30
+ appEmitter,
31
+ globalData,
32
+ runtimeEnvironment,
33
+ }, appConfig);
34
+ const watcherFactory = new WatcherFactoryImpl();
35
+ return {
36
+ appObserver,
37
+ appEmitter,
38
+ moduleRegistry,
39
+ moduleBundler,
40
+ resourceRegistry,
41
+ assetRegistry,
42
+ viewRegistry,
43
+ watcherFactory,
44
+ appConfig,
45
+ runtimeEnvironment,
46
+ routeHandlers: {},
47
+ };
48
+ }
49
+ //# sourceMappingURL=server.js.map
@@ -1,9 +1,11 @@
1
- import { LwrGlobalConfig, NormalizedLwrGlobalConfig, ServerTypeImpl, PublicAppServer, ServerTypes } from '@lwrjs/types';
1
+ import type { LwrGlobalConfig, NormalizedLwrGlobalConfig, ServerTypeImpl, PublicAppServer, ServerTypes } from '@lwrjs/types';
2
2
  export declare class LwrApp {
3
3
  private app;
4
4
  private server;
5
5
  private initialized;
6
6
  private config;
7
+ private runtimeEnvironment;
8
+ private globalData;
7
9
  constructor(config?: LwrGlobalConfig);
8
10
  setConfig(config: LwrGlobalConfig): void;
9
11
  getConfig(): NormalizedLwrGlobalConfig;
@@ -20,5 +22,5 @@ export declare class LwrApp {
20
22
  getServer(): PublicAppServer<ServerTypes>;
21
23
  }
22
24
  export declare function createServer(config?: LwrGlobalConfig): LwrApp;
23
- export declare function generateStaticSite(config?: LwrGlobalConfig): Promise<void>;
25
+ export declare function generateStaticSite(config?: LwrGlobalConfig): Promise<NormalizedLwrGlobalConfig>;
24
26
  //# sourceMappingURL=index.d.ts.map