@lwrjs/core 0.9.0-alpha.13 → 0.9.0-alpha.14

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 (31) hide show
  1. package/build/cjs/context/provider.cjs +4 -3
  2. package/build/cjs/context/server.cjs +1 -5
  3. package/build/cjs/index.cjs +12 -8
  4. package/build/cjs/middleware/bundle-middleware.cjs +2 -2
  5. package/build/cjs/middleware/module-middleware.cjs +1 -1
  6. package/build/cjs/middleware/redirects/unsigned-module-redirect.cjs +2 -2
  7. package/build/cjs/middleware/utils/metadata.cjs +3 -3
  8. package/build/cjs/tools/static-generation.cjs +102 -18
  9. package/build/es/context/provider.js +2 -2
  10. package/build/es/context/server.js +1 -5
  11. package/build/es/index.d.ts +0 -1
  12. package/build/es/index.js +14 -7
  13. package/build/es/middleware/bundle-middleware.js +2 -2
  14. package/build/es/middleware/module-middleware.js +1 -1
  15. package/build/es/middleware/redirects/unsigned-module-redirect.d.ts +2 -2
  16. package/build/es/middleware/redirects/unsigned-module-redirect.js +2 -2
  17. package/build/es/middleware/utils/metadata.d.ts +2 -2
  18. package/build/es/middleware/utils/metadata.js +3 -7
  19. package/build/es/tools/static-generation.d.ts +8 -1
  20. package/build/es/tools/static-generation.js +118 -19
  21. package/build/es/tools/types.d.ts +2 -2
  22. package/package.json +28 -27
  23. package/build/cjs/tools/plugins/build-server-plugin.cjs +0 -137
  24. package/build/cjs/tools/plugins/generate-entry-plugin.cjs +0 -55
  25. package/build/cjs/tools/server-build.cjs +0 -68
  26. package/build/es/tools/plugins/build-server-plugin.d.ts +0 -18
  27. package/build/es/tools/plugins/build-server-plugin.js +0 -132
  28. package/build/es/tools/plugins/generate-entry-plugin.d.ts +0 -11
  29. package/build/es/tools/plugins/generate-entry-plugin.js +0 -45
  30. package/build/es/tools/server-build.d.ts +0 -13
  31. package/build/es/tools/server-build.js +0 -52
@@ -40,7 +40,8 @@ function createProviderContext(serverContext) {
40
40
  amdLoader,
41
41
  esmLoader,
42
42
  environment,
43
- basePath
43
+ basePath,
44
+ bundleConfig
44
45
  } = serverContext.appConfig;
45
46
  const {onModuleDefinitionChange, onModuleSourceChange} = serverContext.appObserver;
46
47
  const {
@@ -50,7 +51,6 @@ function createProviderContext(serverContext) {
50
51
  notifyAssetSourceChanged
51
52
  } = serverContext.appEmitter;
52
53
  return {
53
- compiler: serverContext.compiler,
54
54
  appObserver: (0, import_shared_utils.deepFreeze)({onModuleDefinitionChange, onModuleSourceChange}),
55
55
  appEmitter: {
56
56
  notifyModuleDefinitionChanged: (payload) => notifyModuleDefinitionChanged.call(serverContext.appEmitter, payload),
@@ -75,7 +75,8 @@ function createProviderContext(serverContext) {
75
75
  locker,
76
76
  amdLoader,
77
77
  esmLoader,
78
- environment
78
+ environment,
79
+ bundleConfig
79
80
  }),
80
81
  runtimeEnvironment: (0, import_shared_utils.deepFreeze)(serverContext.runtimeEnvironment),
81
82
  watcherFactory: serverContext.watcherFactory
@@ -27,7 +27,6 @@ __export(exports, {
27
27
  createServerContext: () => createServerContext
28
28
  });
29
29
  var import_asset_registry = __toModule(require("@lwrjs/asset-registry"));
30
- var import_compiler = __toModule(require("@lwrjs/compiler"));
31
30
  var import_module_bundler = __toModule(require("@lwrjs/module-bundler"));
32
31
  var import_module_registry = __toModule(require("@lwrjs/module-registry"));
33
32
  var import_resource_registry = __toModule(require("@lwrjs/resource-registry"));
@@ -37,19 +36,17 @@ var import_fs_watch = __toModule(require("@lwrjs/shared-utils/fs-watch"));
37
36
  function createServerContext(appConfig, runtimeEnvironment, globalData) {
38
37
  const appObserver = new import_shared_utils.LwrApplicationObserver();
39
38
  const appEmitter = appObserver.createLwrEmitter();
40
- const compiler = new import_compiler.LwrCompiler();
41
39
  const assetRegistry = new import_asset_registry.LwrAssetRegistry({
42
40
  appObserver,
43
41
  appEmitter,
44
42
  runtimeEnvironment
45
43
  }, appConfig);
46
44
  const moduleRegistry = new import_module_registry.LwrModuleRegistry({
47
- compiler,
48
45
  appObserver,
49
46
  appEmitter,
50
47
  runtimeEnvironment
51
48
  }, appConfig);
52
- const moduleBundler = new import_module_bundler.LwrModuleBundler({compiler, moduleRegistry, appObserver}, appConfig);
49
+ const moduleBundler = new import_module_bundler.LwrModuleBundler({moduleRegistry, appObserver}, appConfig);
53
50
  const resourceRegistry = new import_resource_registry.LwrResourceRegistry();
54
51
  const viewRegistry = new import_view_registry.LwrViewRegistry({
55
52
  moduleRegistry,
@@ -63,7 +60,6 @@ function createServerContext(appConfig, runtimeEnvironment, globalData) {
63
60
  }, appConfig);
64
61
  const watcherFactory = new import_fs_watch.WatcherFactoryImpl();
65
62
  return {
66
- compiler,
67
63
  appObserver,
68
64
  appEmitter,
69
65
  moduleRegistry,
@@ -25,7 +25,6 @@ var __toModule = (module2) => {
25
25
  __markAsModule(exports);
26
26
  __export(exports, {
27
27
  LwrApp: () => LwrApp,
28
- buildServer: () => import_server_build.buildServer,
29
28
  createServer: () => createServer,
30
29
  generateStaticSite: () => generateStaticSite
31
30
  });
@@ -45,7 +44,8 @@ var import_asset_middleware = __toModule(require("./middleware/asset-middleware.
45
44
  var import_view_middleware = __toModule(require("./middleware/view-middleware.cjs"));
46
45
  var import_resource_middleware = __toModule(require("./middleware/resource-middleware.cjs"));
47
46
  var import_hmr_middleware = __toModule(require("./middleware/hmr-middleware.cjs"));
48
- var import_server_build = __toModule(require("./tools/server-build.cjs"));
47
+ var import_amd_bundle_provider = __toModule(require("@lwrjs/module-bundler/amd-bundle-provider"));
48
+ var import_esm_bundle_provider = __toModule(require("@lwrjs/module-bundler/esm-bundle-provider"));
49
49
  function initMiddleware(app, server, serverContext, routes, errorRoutes) {
50
50
  app.useCompression();
51
51
  (0, import_locale_middleware.localeMiddleware)(app, serverContext);
@@ -66,18 +66,22 @@ function createServices(entries, providerContext) {
66
66
  async function initContext(appConfig, runtimeEnvironment, globalData, services) {
67
67
  const serverContext = (0, import_server2.createServerContext)(appConfig, runtimeEnvironment, globalData);
68
68
  const providerContext = (0, import_provider.createProviderContext)(serverContext);
69
- const {moduleRegistry, resourceRegistry, viewRegistry, assetRegistry} = serverContext;
69
+ const {moduleRegistry, resourceRegistry, viewRegistry, assetRegistry, moduleBundler} = serverContext;
70
70
  const moduleProviders = createServices(services.moduleProviders, providerContext);
71
71
  moduleRegistry.addModuleProviders(moduleProviders);
72
- const resourceProviders = await createServices(services.resourceProviders, providerContext);
72
+ moduleBundler.addBundleProviders([
73
+ new import_amd_bundle_provider.default({}, {...providerContext, moduleRegistry}),
74
+ new import_esm_bundle_provider.default({}, {...providerContext, moduleRegistry})
75
+ ]);
76
+ const resourceProviders = createServices(services.resourceProviders, providerContext);
73
77
  resourceRegistry.addResourceProviders(resourceProviders);
74
- const viewProviders = await createServices(services.viewProviders, providerContext);
75
- const viewTransformers = await createServices(services.viewTransformers, providerContext);
78
+ const viewProviders = createServices(services.viewProviders, providerContext);
79
+ const viewTransformers = createServices(services.viewTransformers, providerContext);
76
80
  viewRegistry.addViewProviders(viewProviders);
77
81
  viewRegistry.addViewTransformers(viewTransformers);
78
82
  await viewRegistry.initializeViewProviders();
79
- const assetProviders = await createServices(services.assetProviders, providerContext);
80
- const assetTransformers = await createServices(services.assetTransformers, providerContext);
83
+ const assetProviders = createServices(services.assetProviders, providerContext);
84
+ const assetTransformers = createServices(services.assetTransformers, providerContext);
81
85
  assetRegistry.addAssetProviders(assetProviders);
82
86
  assetRegistry.addAssetTransformers(assetTransformers);
83
87
  return serverContext;
@@ -35,7 +35,7 @@ var import_unsigned_module_redirect = __toModule(require("./redirects/unsigned-m
35
35
  var import_error_handling = __toModule(require("./utils/error-handling.cjs"));
36
36
  function createBundleMiddleware(context) {
37
37
  const {moduleRegistry, moduleBundler} = context;
38
- const unsignedRedirect = (0, import_unsigned_module_redirect.createUnsignedModuleRedirect)(moduleRegistry);
38
+ const unsignedRedirect = (0, import_unsigned_module_redirect.createUnsignedModuleRedirect)(moduleRegistry, moduleBundler);
39
39
  return async (req, res) => {
40
40
  if (!req.validateEnvironmentRequest(context.appConfig)) {
41
41
  res.status(400);
@@ -59,7 +59,7 @@ function createBundleMiddleware(context) {
59
59
  if (req.isSiteGeneration()) {
60
60
  res.setSiteGenerationMetadata({
61
61
  moduleDefinition: bundleDefinition,
62
- resolvedUris: await (0, import_metadata.normalizeResolvedUris)(bundleDefinition, runtimeEnvironment, runtimeParams, moduleRegistry)
62
+ resolvedUris: await (0, import_metadata.normalizeResolvedUris)(bundleDefinition, runtimeEnvironment, runtimeParams, moduleBundler, moduleRegistry)
63
63
  });
64
64
  }
65
65
  if (signature !== import_shared_utils.LATEST_SIGNATURE) {
@@ -34,7 +34,7 @@ var import_unsigned_module_redirect = __toModule(require("./redirects/unsigned-m
34
34
  var import_error_handling = __toModule(require("./utils/error-handling.cjs"));
35
35
  function createModuleMiddleware(context) {
36
36
  const {moduleRegistry} = context;
37
- const unsignedRedirect = (0, import_unsigned_module_redirect.createUnsignedModuleRedirect)(moduleRegistry);
37
+ const unsignedRedirect = (0, import_unsigned_module_redirect.createUnsignedModuleRedirect)(moduleRegistry, moduleRegistry);
38
38
  return async (req, res) => {
39
39
  if (!req.validateEnvironmentRequest(context.appConfig)) {
40
40
  res.status(400);
@@ -10,11 +10,11 @@ __markAsModule(exports);
10
10
  __export(exports, {
11
11
  createUnsignedModuleRedirect: () => createUnsignedModuleRedirect
12
12
  });
13
- function createUnsignedModuleRedirect(moduleRegistry) {
13
+ function createUnsignedModuleRedirect(moduleRegistry, defRegistry) {
14
14
  return async (req, res, moduleId, runtimeEnvironment, runtimeParams) => {
15
15
  const jsonQuery = req.isJsonRequest() ? `${runtimeEnvironment.debug ? "&" : "?"}json` : "";
16
16
  const {moduleEntry, ownHash} = await moduleRegistry.getModule(moduleId);
17
- const uri = await moduleRegistry.resolveModuleUri({...moduleId, version: moduleEntry.version}, runtimeEnvironment, runtimeParams, ownHash);
17
+ const uri = defRegistry.resolveModuleUri({...moduleId, version: moduleEntry.version}, runtimeEnvironment, runtimeParams, ownHash);
18
18
  res.setHeader("Location", `${uri}${jsonQuery}`);
19
19
  res.sendStatus(302);
20
20
  };
@@ -27,13 +27,13 @@ __export(exports, {
27
27
  normalizeResolvedUris: () => normalizeResolvedUris
28
28
  });
29
29
  var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
30
- async function normalizeResolvedUris(bundleDefinition, runtimeEnvironment, runtimeParams, moduleRegistry) {
30
+ async function normalizeResolvedUris(bundleDefinition, runtimeEnvironment, runtimeParams, moduleBundler, moduleRegistry) {
31
31
  const resolvedUris = [];
32
32
  if (bundleDefinition.bundleRecord.imports) {
33
33
  for (const theImport of bundleDefinition.bundleRecord.imports) {
34
34
  const childSpecifier = theImport.specifier;
35
35
  const id = await (0, import_shared_utils.getVersionedModuleId)(childSpecifier, moduleRegistry);
36
- const uri = await moduleRegistry.resolveModuleUri(id, runtimeEnvironment, runtimeParams);
36
+ const uri = await moduleBundler.resolveModuleUri(id, runtimeEnvironment, runtimeParams);
37
37
  resolvedUris.push(uri);
38
38
  }
39
39
  }
@@ -41,7 +41,7 @@ async function normalizeResolvedUris(bundleDefinition, runtimeEnvironment, runti
41
41
  for (const theImport of bundleDefinition.bundleRecord.dynamicImports) {
42
42
  const childSpecifier = theImport.specifier;
43
43
  const id = await (0, import_shared_utils.getVersionedModuleId)(childSpecifier, moduleRegistry);
44
- const uri = await moduleRegistry.resolveModuleUri(id, runtimeEnvironment, runtimeParams);
44
+ const uri = await moduleBundler.resolveModuleUri(id, runtimeEnvironment, runtimeParams);
45
45
  resolvedUris.push(uri);
46
46
  }
47
47
  }
@@ -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
  }
@@ -47,10 +47,10 @@ var SiteGenerator = class {
47
47
  }
48
48
  const outputDir = (0, import_path.join)(rootDir, staticSiteGenerator.outputDir);
49
49
  if (!staticSiteGenerator.skipCleanOutputDir) {
50
- import_shared_utils.logger.info(`Clearing output directory: ${outputDir}`);
50
+ import_shared_utils.logger.info(`[SSG] Clearing output directory: ${outputDir}`);
51
51
  import_fs_extra.default.rmSync(outputDir, {recursive: true, force: true});
52
52
  } else {
53
- import_shared_utils.logger.info(`Reusing existing output directory: ${outputDir}`);
53
+ import_shared_utils.logger.info(`[SSG] Reusing existing output directory: ${outputDir}`);
54
54
  }
55
55
  const urlRewriteMap = new Map();
56
56
  const {basePath} = config;
@@ -60,7 +60,7 @@ var SiteGenerator = class {
60
60
  this.copyAssets(assets, outputDir, basePath);
61
61
  const endTime = import_perf_hooks.performance.now();
62
62
  const timeDiff = (endTime - startTime) / 1e3;
63
- 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`);
64
64
  }
65
65
  async generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, dispatcher, outputDir, urlRewriteMap = new Map()) {
66
66
  if (!staticSiteGenerator.locales) {
@@ -82,24 +82,39 @@ var SiteGenerator = class {
82
82
  const {_additionalModules} = staticSiteGenerator;
83
83
  if (_additionalModules) {
84
84
  for (const specifier of _additionalModules) {
85
+ import_shared_utils.logger.debug(`[SSG] Additional Module: ${locale} ${specifier}`);
86
+ const startTime = import_perf_hooks.performance.now();
85
87
  const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
86
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`);
87
93
  }
88
94
  }
89
95
  }
90
96
  const willSSR = routes.some((r) => r.bootstrap?.ssr);
91
97
  if (willSSR) {
98
+ import_shared_utils.logger.debug(`[SSG] Fetch SSR Placeholder`);
99
+ const startTime = import_perf_hooks.performance.now();
92
100
  const siteConfig = this.createSiteConfig(outputDir, staticSiteGenerator.locales[0], urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
93
101
  await this.dispatchJSResourceRecursive("@lwrjs/lwc-ssr/lwc_ssr_placeholder", dispatcher, siteConfig, true);
102
+ await this.captureAdditionalRouteMetadata(siteConfig);
103
+ const endTime = import_perf_hooks.performance.now();
104
+ const timeDiff = endTime - startTime;
105
+ import_shared_utils.logger.info(`[SSG] SSR Placeholder in ${Math.round(timeDiff)} ms`);
94
106
  }
95
107
  }
96
108
  createGenerateURLFunction(dispatcher) {
97
109
  const generateRoute = async (uri, siteConfig) => {
98
110
  const locale = siteConfig.locale;
99
- import_shared_utils.logger.info(`Start Generate: ${locale} ${uri}`);
111
+ import_shared_utils.logger.debug(`[SSG] Start Generate: ${locale} ${uri}`);
112
+ const startTime = import_perf_hooks.performance.now();
100
113
  await this.dispatchResourceRecursive(uri, dispatcher, {resourceType: "route"}, siteConfig);
101
- this.addAdditionalImportMetadataToViewConfig(siteConfig);
102
- import_shared_utils.logger.info(`End Generate ${locale} ${uri}`);
114
+ await this.captureAdditionalRouteMetadata(siteConfig);
115
+ const endTime = import_perf_hooks.performance.now();
116
+ const timeDiff = endTime - startTime;
117
+ import_shared_utils.logger.info(`[SSG] ${locale} ${uri} in ${Math.round(timeDiff)} ms`);
103
118
  };
104
119
  return generateRoute.bind(this);
105
120
  }
@@ -107,8 +122,12 @@ var SiteGenerator = class {
107
122
  const {visitedUrls} = siteConfig;
108
123
  if (!visitedUrls.has(url)) {
109
124
  visitedUrls.add(url);
125
+ if ((0, import_shared_utils.isExternalUrl)(url)) {
126
+ import_shared_utils.logger.warn("[SSG] Skipped generation of external url: " + url);
127
+ return;
128
+ }
110
129
  if (url.indexOf("/:") !== -1 || url.indexOf("*") !== -1) {
111
- import_shared_utils.logger.warn("Skipped generation of url with variable path segment: " + url);
130
+ import_shared_utils.logger.warn("[SSG] Skipped generation of url with variable path segment: " + url);
112
131
  return;
113
132
  }
114
133
  let context;
@@ -157,6 +176,9 @@ var SiteGenerator = class {
157
176
  const jsUri = importModule.specifier.startsWith("/") ? importModule.specifier : (0, import_shared_utils.getSpecifier)(importModule);
158
177
  dispatchRequests.push(this.dispatchJSResourceRecursive(jsUri, dispatcher, siteConfig));
159
178
  }
179
+ if (moduleDefinition.bundleRecord) {
180
+ this.addBundleToSiteMetadata(moduleDefinition, url, siteConfig);
181
+ }
160
182
  }
161
183
  const uris = context.fs?.metadata?.resolvedUris || [];
162
184
  for (const jsUri of uris) {
@@ -164,6 +186,52 @@ var SiteGenerator = class {
164
186
  }
165
187
  await Promise.all(dispatchRequests);
166
188
  }
189
+ addBundleToSiteMetadata(bundleDefinition, url, siteConfig) {
190
+ if (siteConfig.siteMetadata) {
191
+ const specifier = bundleDefinition.specifier;
192
+ const imports = bundleDefinition.bundleRecord.imports?.map((moduleRef) => moduleRef.specifier) || [];
193
+ const bundleMetadata = {
194
+ version: bundleDefinition.version,
195
+ path: decodeURIComponent(url),
196
+ bundleRecord: {
197
+ includedModules: bundleDefinition.bundleRecord.includedModules || [],
198
+ imports
199
+ }
200
+ };
201
+ const siteBundles = siteConfig.siteMetadata.getSiteBundles().bundles;
202
+ siteBundles[specifier] = bundleMetadata;
203
+ }
204
+ }
205
+ addResourceToSiteMetadata(resourceDefinition, url, siteConfig) {
206
+ if (siteConfig.siteMetadata) {
207
+ if (!resourceDefinition.specifier) {
208
+ import_shared_utils.logger.warn("[SSG] Could not save resource metadata. There was no specifier.", resourceDefinition);
209
+ } else {
210
+ const specifier = resourceDefinition.specifier;
211
+ const resourceMetadata = {
212
+ path: decodeURIComponent(url),
213
+ mimeType: resourceDefinition.type
214
+ };
215
+ const siteResources = siteConfig.siteMetadata.getSiteResources();
216
+ siteResources.resources[specifier] = resourceMetadata;
217
+ }
218
+ }
219
+ }
220
+ addAssetToSiteMetadata(assetDefinition, url, siteConfig) {
221
+ if (siteConfig.siteMetadata) {
222
+ if (!assetDefinition.uri) {
223
+ import_shared_utils.logger.warn("[SSG] Could not save asset metadata. There was no uri.", assetDefinition);
224
+ } else {
225
+ const specifier = assetDefinition.uri;
226
+ const resourceMetadata = {
227
+ path: decodeURIComponent(url),
228
+ mimeType: String(assetDefinition.mime)
229
+ };
230
+ const siteAssets = siteConfig.siteMetadata.getSiteAssets();
231
+ siteAssets.assets[specifier] = resourceMetadata;
232
+ }
233
+ }
234
+ }
167
235
  async handleMappingResource(url, context, siteConfig, dispatcher) {
168
236
  const {importMetadata: importMetatdata} = siteConfig;
169
237
  const statusCode = context.response?.status;
@@ -182,7 +250,7 @@ var SiteGenerator = class {
182
250
  await Promise.all(dispatchRequests);
183
251
  } else {
184
252
  const body = context.fs?.body;
185
- import_shared_utils.logger.warn(`Failed to fetch ${url}: (${statusCode}) ${body}`);
253
+ import_shared_utils.logger.warn(`[SSG] Failed to fetch ${url}: (${statusCode}) ${body}`);
186
254
  }
187
255
  }
188
256
  async handleHtmlResource(url, context, siteConfig, dispatcher) {
@@ -248,7 +316,7 @@ var SiteGenerator = class {
248
316
  siteConfig.viewConfigPath = this.getResourcePathFromUrl(siteConfig, resourceUri);
249
317
  }
250
318
  } else {
251
- import_shared_utils.logger.warn("Skipped inline bootstrap resource: %j", resource);
319
+ import_shared_utils.logger.warn("[SSG] Skipped inline bootstrap resource: %j", resource);
252
320
  }
253
321
  }
254
322
  }
@@ -258,7 +326,7 @@ var SiteGenerator = class {
258
326
  if (resourceUri.startsWith("/")) {
259
327
  dispatchRequests.push(this.dispatchResourceRecursive(resourceUri, dispatcher, {resourceType: "resource"}, siteConfig));
260
328
  } else {
261
- import_shared_utils.logger.warn("Skipped resource: %j", resource);
329
+ import_shared_utils.logger.warn("[SSG] Skipped resource: %j", resource);
262
330
  }
263
331
  }
264
332
  await Promise.all(dispatchRequests);
@@ -274,7 +342,7 @@ var SiteGenerator = class {
274
342
  const mappingURL = siteConfig.endpoints?.uris?.mapping + encodeURIComponent(jsUri);
275
343
  await this.dispatchResourceRecursive(mappingURL, dispatcher, {resourceType: "mapping"}, siteConfig);
276
344
  } else {
277
- import_shared_utils.logger.warn('Unable to fetch mapping for bare specifier or variable dynamic import: "' + jsUri + '"');
345
+ import_shared_utils.logger.warn('[SSG] Unable to fetch mapping for bare specifier or variable dynamic import: "' + jsUri + '"');
278
346
  }
279
347
  } else if (isAdditionalModulesRequest) {
280
348
  const uri = `${siteConfig.endpoints?.uris.legacyDefault}${encodeURIComponent(jsUri)}`;
@@ -286,12 +354,17 @@ var SiteGenerator = class {
286
354
  const metadata = context.fs?.metadata;
287
355
  const fullPath = this.getResourcePathFromUrl(siteConfig, url);
288
356
  await (0, import_stream.writeResponse)(context, fullPath);
357
+ if (metadata?.resource) {
358
+ this.addResourceToSiteMetadata(metadata?.resource, url, siteConfig);
359
+ } else if (metadata?.asset) {
360
+ this.addAssetToSiteMetadata(metadata?.asset, url, siteConfig);
361
+ }
289
362
  const assetReferences = metadata?.asset?.metadata?.assetReferences || [];
290
363
  const dispatchRequests = [];
291
364
  for (const ref of assetReferences) {
292
365
  const refUrl = ref.override?.uri || ref.url;
293
366
  dispatchRequests.push(this.dispatchResourceRecursive(refUrl, dispatcher, {resourceType: "asset", asset: metadata?.asset}, siteConfig).catch((err) => {
294
- import_shared_utils.logger.warn(`Failed to fetch asset reference => ${refUrl} from ${url}`, err);
367
+ import_shared_utils.logger.warn(`[SSG] Failed to fetch asset reference => ${refUrl} from ${url}`, err);
295
368
  }));
296
369
  }
297
370
  return Promise.all(dispatchRequests);
@@ -328,10 +401,10 @@ var SiteGenerator = class {
328
401
  if (assetSrcDir && import_fs_extra.default.existsSync(assetSrcDir)) {
329
402
  import_fs_extra.default.copySync(assetSrcDir, assetOutputDir);
330
403
  } else {
331
- import_shared_utils.logger.warn("Could not find assets to copy at path: " + assetSrcDir);
404
+ import_shared_utils.logger.warn("[SSG] Could not find assets to copy at path: " + assetSrcDir);
332
405
  }
333
406
  } catch (e) {
334
- import_shared_utils.logger.error("Error occurred processing asset config: " + JSON.stringify(asset), e);
407
+ import_shared_utils.logger.error("[SSG] Error occurred processing asset config: " + JSON.stringify(asset), e);
335
408
  }
336
409
  }
337
410
  }
@@ -351,13 +424,20 @@ var SiteGenerator = class {
351
424
  urlRewriteMap,
352
425
  endpoints,
353
426
  skipBaseDocumentGeneration,
354
- ...featureFlags
427
+ ...featureFlags,
428
+ siteMetadata: new import_shared_utils.SiteMetadataImpl({rootDir: outputDir, runtimeEnvironment})
355
429
  };
356
430
  }
357
431
  filterFeatureFlags() {
358
432
  const ffs = (0, import_shared_utils.getFeatureFlags)();
359
- if (ffs.LEGACY_LOADER) {
360
- return {featureFlags: {LEGACY_LOADER: true, SSR_STATIC_BUNDLES: ffs.SSR_STATIC_BUNDLES}};
433
+ if (ffs && Object.keys(ffs).length) {
434
+ const accumlator = {};
435
+ for (const [key, value] of Object.entries(ffs)) {
436
+ if (value) {
437
+ accumlator[key] = true;
438
+ }
439
+ }
440
+ return {featureFlags: accumlator};
361
441
  } else {
362
442
  return void 0;
363
443
  }
@@ -394,6 +474,10 @@ ${mergeIndex}
394
474
  });
395
475
  }
396
476
  }
477
+ async captureAdditionalRouteMetadata(siteConfig) {
478
+ this.addAdditionalImportMetadataToViewConfig(siteConfig);
479
+ await siteConfig.siteMetadata?.persistSiteMetadata();
480
+ }
397
481
  };
398
482
  var static_generation_default = SiteGenerator;
399
483
  var ViewImportMetadataImpl = class {
@@ -1,11 +1,10 @@
1
1
  import { deepFreeze } from '@lwrjs/shared-utils';
2
2
  export function createProviderContext(serverContext) {
3
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, } = serverContext.appConfig;
4
+ const { cacheDir, lwc: { modules = [] }, routes, errorRoutes, rootDir, contentDir, layoutsDir, locker, amdLoader, esmLoader, environment, basePath, bundleConfig, } = serverContext.appConfig;
5
5
  const { onModuleDefinitionChange, onModuleSourceChange } = serverContext.appObserver;
6
6
  const { notifyModuleDefinitionChanged, notifyModuleSourceChanged, notifyViewSourceChanged, notifyAssetSourceChanged, } = serverContext.appEmitter;
7
7
  return {
8
- compiler: serverContext.compiler,
9
8
  appObserver: deepFreeze({ onModuleDefinitionChange, onModuleSourceChange }),
10
9
  appEmitter: {
11
10
  notifyModuleDefinitionChanged: (payload) => notifyModuleDefinitionChanged.call(serverContext.appEmitter, payload),
@@ -31,6 +30,7 @@ export function createProviderContext(serverContext) {
31
30
  amdLoader,
32
31
  esmLoader,
33
32
  environment,
33
+ bundleConfig,
34
34
  }),
35
35
  runtimeEnvironment: deepFreeze(serverContext.runtimeEnvironment),
36
36
  watcherFactory: serverContext.watcherFactory,
@@ -1,5 +1,4 @@
1
1
  import { LwrAssetRegistry } from '@lwrjs/asset-registry';
2
- import { LwrCompiler } from '@lwrjs/compiler';
3
2
  import { LwrModuleBundler } from '@lwrjs/module-bundler';
4
3
  import { LwrModuleRegistry } from '@lwrjs/module-registry';
5
4
  import { LwrResourceRegistry } from '@lwrjs/resource-registry';
@@ -10,19 +9,17 @@ import { WatcherFactoryImpl } from '@lwrjs/shared-utils/fs-watch';
10
9
  export function createServerContext(appConfig, runtimeEnvironment, globalData) {
11
10
  const appObserver = new LwrApplicationObserver();
12
11
  const appEmitter = appObserver.createLwrEmitter();
13
- const compiler = new LwrCompiler();
14
12
  const assetRegistry = new LwrAssetRegistry({
15
13
  appObserver,
16
14
  appEmitter,
17
15
  runtimeEnvironment,
18
16
  }, appConfig);
19
17
  const moduleRegistry = new LwrModuleRegistry({
20
- compiler,
21
18
  appObserver,
22
19
  appEmitter,
23
20
  runtimeEnvironment,
24
21
  }, appConfig);
25
- const moduleBundler = new LwrModuleBundler({ compiler, moduleRegistry, appObserver }, appConfig);
22
+ const moduleBundler = new LwrModuleBundler({ moduleRegistry, appObserver }, appConfig);
26
23
  const resourceRegistry = new LwrResourceRegistry();
27
24
  const viewRegistry = new LwrViewRegistry({
28
25
  moduleRegistry,
@@ -36,7 +33,6 @@ export function createServerContext(appConfig, runtimeEnvironment, globalData) {
36
33
  }, appConfig);
37
34
  const watcherFactory = new WatcherFactoryImpl();
38
35
  return {
39
- compiler,
40
36
  appObserver,
41
37
  appEmitter,
42
38
  moduleRegistry,
@@ -21,5 +21,4 @@ export declare class LwrApp {
21
21
  }
22
22
  export declare function createServer(config?: LwrGlobalConfig): LwrApp;
23
23
  export declare function generateStaticSite(config?: LwrGlobalConfig): Promise<NormalizedLwrGlobalConfig>;
24
- export { buildServer } from './tools/server-build.js';
25
24
  //# sourceMappingURL=index.d.ts.map
package/build/es/index.js CHANGED
@@ -14,6 +14,9 @@ import { assetMiddleware } from './middleware/asset-middleware.js';
14
14
  import { viewMiddleware } from './middleware/view-middleware.js';
15
15
  import { resourceMiddleware } from './middleware/resource-middleware.js';
16
16
  import { hmrMiddleware } from './middleware/hmr-middleware.js';
17
+ import AmdBundlerProvider from '@lwrjs/module-bundler/amd-bundle-provider';
18
+ // dependency esbuild in this package.json is to satisfy the optional dependency in module-bundler for ESM bundle minification
19
+ import EsmBundlerProvider from '@lwrjs/module-bundler/esm-bundle-provider';
17
20
  function initMiddleware(app, server, serverContext, routes, errorRoutes) {
18
21
  // all middleware attached AFTER compression will have compressed responses
19
22
  app.useCompression();
@@ -40,23 +43,28 @@ async function initContext(appConfig, runtimeEnvironment, globalData, services)
40
43
  // Initialized PRIVATE server-side context, passed to middleware
41
44
  const serverContext = createServerContext(appConfig, runtimeEnvironment, globalData);
42
45
  const providerContext = createProviderContext(serverContext);
43
- const { moduleRegistry, resourceRegistry, viewRegistry, assetRegistry } = serverContext;
46
+ const { moduleRegistry, resourceRegistry, viewRegistry, assetRegistry, moduleBundler } = serverContext;
44
47
  // Module Providers
45
48
  const moduleProviders = createServices(services.moduleProviders, providerContext);
46
49
  moduleRegistry.addModuleProviders(moduleProviders);
50
+ // Bundle Providers
51
+ moduleBundler.addBundleProviders([
52
+ new AmdBundlerProvider({}, { ...providerContext, moduleRegistry }),
53
+ new EsmBundlerProvider({}, { ...providerContext, moduleRegistry }),
54
+ ]);
47
55
  // Resource Providers
48
- const resourceProviders = await createServices(services.resourceProviders, providerContext);
56
+ const resourceProviders = createServices(services.resourceProviders, providerContext);
49
57
  resourceRegistry.addResourceProviders(resourceProviders);
50
58
  // View Providers
51
- const viewProviders = await createServices(services.viewProviders, providerContext);
59
+ const viewProviders = createServices(services.viewProviders, providerContext);
52
60
  // View Transformers
53
- const viewTransformers = await createServices(services.viewTransformers, providerContext);
61
+ const viewTransformers = createServices(services.viewTransformers, providerContext);
54
62
  viewRegistry.addViewProviders(viewProviders);
55
63
  viewRegistry.addViewTransformers(viewTransformers);
56
64
  await viewRegistry.initializeViewProviders();
57
65
  // Asset Providers
58
- const assetProviders = await createServices(services.assetProviders, providerContext);
59
- const assetTransformers = await createServices(services.assetTransformers, providerContext);
66
+ const assetProviders = createServices(services.assetProviders, providerContext);
67
+ const assetTransformers = createServices(services.assetTransformers, providerContext);
60
68
  assetRegistry.addAssetProviders(assetProviders);
61
69
  assetRegistry.addAssetTransformers(assetTransformers);
62
70
  return serverContext;
@@ -168,7 +176,6 @@ export async function generateStaticSite(config) {
168
176
  await new SiteGenerator().buildStaticApplication(lwrApp.getConfig(), dispatcher);
169
177
  return lwrApp.getConfig();
170
178
  }
171
- export { buildServer } from './tools/server-build.js';
172
179
  /**
173
180
  * Create normalized config for static generation forcing the app config to come as src
174
181
  */
@@ -7,7 +7,7 @@ import { createUnsignedModuleRedirect } from './redirects/unsigned-module-redire
7
7
  import { handleErrors } from './utils/error-handling.js';
8
8
  function createBundleMiddleware(context) {
9
9
  const { moduleRegistry, moduleBundler } = context;
10
- const unsignedRedirect = createUnsignedModuleRedirect(moduleRegistry);
10
+ const unsignedRedirect = createUnsignedModuleRedirect(moduleRegistry, moduleBundler);
11
11
  return async (req, res) => {
12
12
  if (!req.validateEnvironmentRequest(context.appConfig)) {
13
13
  res.status(400);
@@ -33,7 +33,7 @@ function createBundleMiddleware(context) {
33
33
  if (req.isSiteGeneration()) {
34
34
  res.setSiteGenerationMetadata({
35
35
  moduleDefinition: bundleDefinition,
36
- resolvedUris: await normalizeResolvedUris(bundleDefinition, runtimeEnvironment, runtimeParams, moduleRegistry),
36
+ resolvedUris: await normalizeResolvedUris(bundleDefinition, runtimeEnvironment, runtimeParams, moduleBundler, moduleRegistry),
37
37
  });
38
38
  }
39
39
  if (signature !== LATEST_SIGNATURE) {
@@ -6,7 +6,7 @@ import { createUnsignedModuleRedirect } from './redirects/unsigned-module-redire
6
6
  import { handleErrors } from './utils/error-handling.js';
7
7
  function createModuleMiddleware(context) {
8
8
  const { moduleRegistry } = context;
9
- const unsignedRedirect = createUnsignedModuleRedirect(moduleRegistry);
9
+ const unsignedRedirect = createUnsignedModuleRedirect(moduleRegistry, moduleRegistry);
10
10
  return async (req, res) => {
11
11
  if (!req.validateEnvironmentRequest(context.appConfig)) {
12
12
  res.status(400);
@@ -1,5 +1,5 @@
1
- import type { AbstractModuleId, MiddlewareRequest, MiddlewareResponse, ModuleRegistry, RuntimeEnvironment, RuntimeParams } from '@lwrjs/types';
1
+ import type { AbstractModuleId, MiddlewareRequest, MiddlewareResponse, ModuleBundler, ModuleRegistry, RuntimeEnvironment, RuntimeParams } from '@lwrjs/types';
2
2
  declare type UnsignedRedirect = (req: MiddlewareRequest, res: MiddlewareResponse, moduleId: AbstractModuleId, runtimeEnvironment: RuntimeEnvironment, runtimeParams: RuntimeParams) => Promise<void>;
3
- export declare function createUnsignedModuleRedirect(moduleRegistry: ModuleRegistry): UnsignedRedirect;
3
+ export declare function createUnsignedModuleRedirect(moduleRegistry: ModuleRegistry, defRegistry: ModuleRegistry | ModuleBundler): UnsignedRedirect;
4
4
  export {};
5
5
  //# sourceMappingURL=unsigned-module-redirect.d.ts.map
@@ -1,8 +1,8 @@
1
- export function createUnsignedModuleRedirect(moduleRegistry) {
1
+ export function createUnsignedModuleRedirect(moduleRegistry, defRegistry) {
2
2
  return async (req, res, moduleId, runtimeEnvironment, runtimeParams) => {
3
3
  const jsonQuery = req.isJsonRequest() ? `${runtimeEnvironment.debug ? '&' : '?'}json` : '';
4
4
  const { moduleEntry, ownHash } = await moduleRegistry.getModule(moduleId);
5
- const uri = await moduleRegistry.resolveModuleUri({ ...moduleId, version: moduleEntry.version }, runtimeEnvironment, runtimeParams, ownHash);
5
+ const uri = defRegistry.resolveModuleUri({ ...moduleId, version: moduleEntry.version }, runtimeEnvironment, runtimeParams, ownHash);
6
6
  res.setHeader('Location', `${uri}${jsonQuery}`);
7
7
  res.sendStatus(302);
8
8
  };
@@ -1,3 +1,3 @@
1
- import { BundleDefinition, ModuleRegistry, RuntimeEnvironment, RuntimeParams } from '@lwrjs/types';
2
- export declare function normalizeResolvedUris(bundleDefinition: BundleDefinition, runtimeEnvironment: RuntimeEnvironment, runtimeParams: RuntimeParams, moduleRegistry: ModuleRegistry): Promise<string[]>;
1
+ import type { BundleDefinition, ModuleBundler, ModuleRegistry, RuntimeEnvironment, RuntimeParams } from '@lwrjs/types';
2
+ export declare function normalizeResolvedUris(bundleDefinition: BundleDefinition, runtimeEnvironment: RuntimeEnvironment, runtimeParams: RuntimeParams, moduleBundler: ModuleBundler, moduleRegistry: ModuleRegistry): Promise<string[]>;
3
3
  //# sourceMappingURL=metadata.d.ts.map
@@ -1,25 +1,21 @@
1
1
  import { getVersionedModuleId } from '@lwrjs/shared-utils';
2
- export async function normalizeResolvedUris(bundleDefinition, runtimeEnvironment, runtimeParams, moduleRegistry) {
2
+ export async function normalizeResolvedUris(bundleDefinition, runtimeEnvironment, runtimeParams, moduleBundler, moduleRegistry) {
3
3
  const resolvedUris = [];
4
4
  // TODO might be able to remove this in the future but not sure how to properly send
5
5
  // back bundleRecord imports with absolute uris (lwc is the main one)
6
6
  if (bundleDefinition.bundleRecord.imports) {
7
7
  for (const theImport of bundleDefinition.bundleRecord.imports) {
8
8
  const childSpecifier = theImport.specifier;
9
- // eslint-disable-next-line no-await-in-loop
10
9
  const id = await getVersionedModuleId(childSpecifier, moduleRegistry);
11
- // eslint-disable-next-line no-await-in-loop
12
- const uri = await moduleRegistry.resolveModuleUri(id, runtimeEnvironment, runtimeParams);
10
+ const uri = await moduleBundler.resolveModuleUri(id, runtimeEnvironment, runtimeParams);
13
11
  resolvedUris.push(uri);
14
12
  }
15
13
  }
16
14
  if (bundleDefinition.bundleRecord.dynamicImports) {
17
15
  for (const theImport of bundleDefinition.bundleRecord.dynamicImports) {
18
16
  const childSpecifier = theImport.specifier;
19
- // eslint-disable-next-line no-await-in-loop
20
17
  const id = await getVersionedModuleId(childSpecifier, moduleRegistry);
21
- // eslint-disable-next-line no-await-in-loop
22
- const uri = await moduleRegistry.resolveModuleUri(id, runtimeEnvironment, runtimeParams);
18
+ const uri = await moduleBundler.resolveModuleUri(id, runtimeEnvironment, runtimeParams);
23
19
  resolvedUris.push(uri);
24
20
  }
25
21
  }