@lwrjs/core 0.9.0-alpha.12 → 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 (39) hide show
  1. package/build/cjs/context/provider.cjs +6 -4
  2. package/build/cjs/context/server.cjs +5 -6
  3. package/build/cjs/index.cjs +35 -26
  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/middleware/view-middleware.cjs +12 -16
  9. package/build/cjs/tools/server-warmup.cjs +2 -9
  10. package/build/cjs/tools/static-generation.cjs +108 -27
  11. package/build/es/context/provider.js +3 -2
  12. package/build/es/context/server.js +5 -5
  13. package/build/es/index.d.ts +0 -1
  14. package/build/es/index.js +45 -27
  15. package/build/es/middleware/bundle-middleware.js +2 -2
  16. package/build/es/middleware/module-middleware.js +1 -1
  17. package/build/es/middleware/redirects/unsigned-module-redirect.d.ts +2 -2
  18. package/build/es/middleware/redirects/unsigned-module-redirect.js +2 -2
  19. package/build/es/middleware/utils/metadata.d.ts +2 -2
  20. package/build/es/middleware/utils/metadata.js +3 -7
  21. package/build/es/middleware/view-middleware.d.ts +2 -2
  22. package/build/es/middleware/view-middleware.js +12 -16
  23. package/build/es/tools/server-warmup.js +3 -10
  24. package/build/es/tools/static-generation.d.ts +8 -1
  25. package/build/es/tools/static-generation.js +126 -29
  26. package/build/es/tools/types.d.ts +2 -2
  27. package/package.json +29 -27
  28. package/build/cjs/context/configurations.cjs +0 -82
  29. package/build/cjs/context/global-data.cjs +0 -54
  30. package/build/cjs/context/services.cjs +0 -50
  31. package/build/cjs/tools/server-build.cjs +0 -182
  32. package/build/es/context/configurations.d.ts +0 -9
  33. package/build/es/context/configurations.js +0 -53
  34. package/build/es/context/global-data.d.ts +0 -3
  35. package/build/es/context/global-data.js +0 -29
  36. package/build/es/context/services.d.ts +0 -3
  37. package/build/es/context/services.js +0 -27
  38. package/build/es/tools/server-build.d.ts +0 -14
  39. package/build/es/tools/server-build.js +0 -182
@@ -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,8 +75,10 @@ function createProviderContext(serverContext) {
75
75
  locker,
76
76
  amdLoader,
77
77
  esmLoader,
78
- environment
78
+ environment,
79
+ bundleConfig
79
80
  }),
80
- runtimeEnvironment: (0, import_shared_utils.deepFreeze)(serverContext.runtimeEnvironment)
81
+ runtimeEnvironment: (0, import_shared_utils.deepFreeze)(serverContext.runtimeEnvironment),
82
+ watcherFactory: serverContext.watcherFactory
81
83
  };
82
84
  }
@@ -27,28 +27,26 @@ __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"));
34
33
  var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
35
34
  var import_view_registry = __toModule(require("@lwrjs/view-registry"));
35
+ var import_fs_watch = __toModule(require("@lwrjs/shared-utils/fs-watch"));
36
36
  function createServerContext(appConfig, runtimeEnvironment, globalData) {
37
37
  const appObserver = new import_shared_utils.LwrApplicationObserver();
38
38
  const appEmitter = appObserver.createLwrEmitter();
39
- const compiler = new import_compiler.LwrCompiler();
40
39
  const assetRegistry = new import_asset_registry.LwrAssetRegistry({
41
40
  appObserver,
42
41
  appEmitter,
43
42
  runtimeEnvironment
44
43
  }, appConfig);
45
44
  const moduleRegistry = new import_module_registry.LwrModuleRegistry({
46
- compiler,
47
45
  appObserver,
48
46
  appEmitter,
49
47
  runtimeEnvironment
50
48
  }, appConfig);
51
- const moduleBundler = new import_module_bundler.LwrModuleBundler({compiler, moduleRegistry, appObserver}, appConfig);
49
+ const moduleBundler = new import_module_bundler.LwrModuleBundler({moduleRegistry, appObserver}, appConfig);
52
50
  const resourceRegistry = new import_resource_registry.LwrResourceRegistry();
53
51
  const viewRegistry = new import_view_registry.LwrViewRegistry({
54
52
  moduleRegistry,
@@ -60,8 +58,8 @@ function createServerContext(appConfig, runtimeEnvironment, globalData) {
60
58
  globalData,
61
59
  runtimeEnvironment
62
60
  }, appConfig);
61
+ const watcherFactory = new import_fs_watch.WatcherFactoryImpl();
63
62
  return {
64
- compiler,
65
63
  appObserver,
66
64
  appEmitter,
67
65
  moduleRegistry,
@@ -70,6 +68,7 @@ function createServerContext(appConfig, runtimeEnvironment, globalData) {
70
68
  assetRegistry,
71
69
  viewRegistry,
72
70
  appConfig,
73
- runtimeEnvironment
71
+ runtimeEnvironment,
72
+ watcherFactory
74
73
  };
75
74
  }
@@ -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
  });
@@ -33,12 +32,10 @@ var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
33
32
  var import_server = __toModule(require("@lwrjs/server"));
34
33
  var import_diagnostics = __toModule(require("@lwrjs/diagnostics"));
35
34
  var import_config = __toModule(require("@lwrjs/config"));
36
- var import_services = __toModule(require("./context/services.cjs"));
37
- var import_configurations = __toModule(require("./context/configurations.cjs"));
38
- var import_provider = __toModule(require("./context/provider.cjs"));
39
- var import_server2 = __toModule(require("./context/server.cjs"));
40
35
  var import_static_generation = __toModule(require("./tools/static-generation.cjs"));
41
36
  var import_server_warmup = __toModule(require("./tools/server-warmup.cjs"));
37
+ var import_server2 = __toModule(require("./context/server.cjs"));
38
+ var import_provider = __toModule(require("./context/provider.cjs"));
42
39
  var import_locale_middleware = __toModule(require("./middleware/locale-middleware.cjs"));
43
40
  var import_module_middleware = __toModule(require("./middleware/module-middleware.cjs"));
44
41
  var import_bundle_middleware = __toModule(require("./middleware/bundle-middleware.cjs"));
@@ -47,8 +44,9 @@ var import_asset_middleware = __toModule(require("./middleware/asset-middleware.
47
44
  var import_view_middleware = __toModule(require("./middleware/view-middleware.cjs"));
48
45
  var import_resource_middleware = __toModule(require("./middleware/resource-middleware.cjs"));
49
46
  var import_hmr_middleware = __toModule(require("./middleware/hmr-middleware.cjs"));
50
- var import_server_build = __toModule(require("./tools/server-build.cjs"));
51
- function initMiddleware(app, server, serverContext) {
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
+ function initMiddleware(app, server, serverContext, routes, errorRoutes) {
52
50
  app.useCompression();
53
51
  (0, import_locale_middleware.localeMiddleware)(app, serverContext);
54
52
  (0, import_module_middleware.moduleMiddleware)(app, serverContext);
@@ -56,28 +54,34 @@ function initMiddleware(app, server, serverContext) {
56
54
  (0, import_mapping_middleware.mappingMiddleware)(app, serverContext);
57
55
  (0, import_asset_middleware.assetMiddleware)(app, serverContext);
58
56
  (0, import_resource_middleware.resourceMiddleware)(app, serverContext);
59
- (0, import_view_middleware.viewMiddleware)(app, serverContext);
57
+ (0, import_view_middleware.viewMiddleware)(app, serverContext, routes, errorRoutes);
60
58
  app.initRoutes();
61
59
  if (serverContext.runtimeEnvironment.hmrEnabled) {
62
60
  (0, import_hmr_middleware.hmrMiddleware)(server, serverContext);
63
61
  }
64
62
  }
65
- async function initContext(app, server, rawAppConfig) {
66
- const {appConfig, runtimeEnvironment, globalData} = await (0, import_configurations.resolveConfigurations)(rawAppConfig);
63
+ function createServices(entries, providerContext) {
64
+ return entries.map(([ctor, providerConfig = {}]) => new ctor(providerConfig, providerContext));
65
+ }
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;
70
- const moduleProviders = await (0, import_services.getServices)(appConfig.moduleProviders, providerContext, appConfig);
69
+ const {moduleRegistry, resourceRegistry, viewRegistry, assetRegistry, moduleBundler} = serverContext;
70
+ const moduleProviders = createServices(services.moduleProviders, providerContext);
71
71
  moduleRegistry.addModuleProviders(moduleProviders);
72
- const resourceProviders = await (0, import_services.getServices)(appConfig.resourceProviders, providerContext, appConfig);
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 (0, import_services.getServices)(appConfig.viewProviders, providerContext, appConfig);
75
- const viewTransformers = await (0, import_services.getServices)(appConfig.viewTransformers, providerContext, rawAppConfig);
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 (0, import_services.getServices)(appConfig.assetProviders, providerContext, appConfig);
80
- const assetTransformers = await (0, import_services.getServices)(appConfig.assetTransformers, void 0, appConfig);
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;
@@ -97,15 +101,20 @@ var LwrApp = class {
97
101
  return this.config;
98
102
  }
99
103
  async init() {
100
- if (!this.initialized) {
101
- this.initialized = true;
102
- try {
103
- const context = await initContext(this.app, this.server, this.config);
104
- initMiddleware(this.app, this.server, context);
105
- } catch (e) {
106
- this.initialized = false;
107
- throw e;
108
- }
104
+ if (this.initialized) {
105
+ return;
106
+ }
107
+ this.initialized = true;
108
+ try {
109
+ const {appConfig, runtimeEnvironment, globalData} = await (0, import_config.loadConfig)(this.config);
110
+ const services = await (0, import_config.loadServices)(appConfig);
111
+ const {routes, errorRoutes} = await (0, import_config.loadRoutes)(appConfig);
112
+ const context = await initContext(appConfig, runtimeEnvironment, globalData, services);
113
+ initMiddleware(this.app, this.server, context, routes, errorRoutes);
114
+ this.config = appConfig;
115
+ } catch (e) {
116
+ this.initialized = false;
117
+ throw e;
109
118
  }
110
119
  }
111
120
  async listen(callback) {
@@ -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,9 +37,8 @@ var CANONICAL_VIEW_ROUTES = [
37
37
  `/:apiVersion/application/:format/ai/:appId`,
38
38
  `/:apiVersion/application/:format/e/:environment/ai/:appId`
39
39
  ];
40
- function createViewMiddleware(route, context, viewHandler) {
41
- const {appConfig} = context;
42
- const errorRoute = appConfig.errorRoutes.find((route2) => route2.status === 500);
40
+ function createViewMiddleware(route, errorRoutes, context, viewHandler) {
41
+ const errorRoute = errorRoutes.find((route2) => route2.status === 500);
43
42
  return async (req, res) => {
44
43
  if (!req.validateEnvironmentRequest(context.appConfig)) {
45
44
  res.status(400);
@@ -91,9 +90,7 @@ function createViewMiddleware(route, context, viewHandler) {
91
90
  res.send(viewResponse.body);
92
91
  };
93
92
  }
94
- function createConfigMiddleware(context, viewHandler) {
95
- const {appConfig} = context;
96
- const {routes} = appConfig;
93
+ function createConfigMiddleware(routes, context, viewHandler) {
97
94
  return async (req, res) => {
98
95
  const {runtimeEnvironment, runtimeParams} = req.getRuntimeContext(context.runtimeEnvironment);
99
96
  const {appId, encodedViewPath} = req.params;
@@ -126,20 +123,19 @@ function createConfigMiddleware(context, viewHandler) {
126
123
  res.send(viewResponse.body);
127
124
  };
128
125
  }
129
- function createNotFoundMiddleware(context, viewHandler) {
130
- const {errorRoutes} = context.appConfig;
131
- const errorRoute = errorRoutes.find((route) => route.status === 404);
132
- if (errorRoute) {
133
- return createViewMiddleware(errorRoute, context, viewHandler);
126
+ function createNotFoundMiddleware(errorRoutes, context, viewHandler) {
127
+ const notFoundRoute = errorRoutes.find((route) => route.status === 404);
128
+ if (notFoundRoute) {
129
+ return createViewMiddleware(notFoundRoute, errorRoutes, context, viewHandler);
134
130
  }
135
131
  return (req, res) => {
136
132
  res.status(404).send(import_diagnostics.descriptions.UNRESOLVABLE.VIEW(req.originalUrl).message);
137
133
  };
138
134
  }
139
- function viewMiddleware(app, context) {
135
+ function viewMiddleware(app, context, routes, errorRoutes) {
140
136
  const {appConfig, viewRegistry, moduleRegistry} = context;
141
137
  const viewHandler = new import_view_registry.LwrViewHandler({viewRegistry, moduleRegistry}, appConfig);
142
- for (const route of appConfig.routes) {
138
+ for (const route of routes) {
143
139
  const paths = [route.path];
144
140
  const subRoutes = route.subRoutes && (0, import_router.getClientRoutes)(route.subRoutes);
145
141
  if (subRoutes) {
@@ -147,8 +143,8 @@ function viewMiddleware(app, context) {
147
143
  subRoutes.routes.forEach((subRoute) => subRoute.uri !== route.path && paths.push(`${prefix}${subRoute.uri}`));
148
144
  }
149
145
  paths.forEach((routePath) => paths.push(...CANONICAL_VIEW_ROUTES.map((viewRoute) => viewRoute + routePath)));
150
- app.get(paths, (0, import_error_handling.handleErrors)(createViewMiddleware(route, context, viewHandler)));
146
+ app.get(paths, (0, import_error_handling.handleErrors)(createViewMiddleware(route, errorRoutes, context, viewHandler)));
151
147
  }
152
- app.get((0, import_shared_utils.getClientBootstrapConfigurationRoutes)(), (0, import_error_handling.handleErrors)(createConfigMiddleware(context, viewHandler)));
153
- app.get("/" + app.getRegexWildcard(), (0, import_error_handling.handleErrors)(createNotFoundMiddleware(context, viewHandler)));
148
+ app.get((0, import_shared_utils.getClientBootstrapConfigurationRoutes)(), (0, import_error_handling.handleErrors)(createConfigMiddleware(routes, context, viewHandler)));
149
+ app.get("/" + app.getRegexWildcard(), (0, import_error_handling.handleErrors)(createNotFoundMiddleware(errorRoutes, context, viewHandler)));
154
150
  }
@@ -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,24 +46,21 @@ 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) {
@@ -85,24 +82,39 @@ var SiteGenerator = class {
85
82
  const {_additionalModules} = staticSiteGenerator;
86
83
  if (_additionalModules) {
87
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();
88
87
  const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
89
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`);
90
93
  }
91
94
  }
92
95
  }
93
96
  const willSSR = routes.some((r) => r.bootstrap?.ssr);
94
97
  if (willSSR) {
98
+ import_shared_utils.logger.debug(`[SSG] Fetch SSR Placeholder`);
99
+ const startTime = import_perf_hooks.performance.now();
95
100
  const siteConfig = this.createSiteConfig(outputDir, staticSiteGenerator.locales[0], urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
96
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`);
97
106
  }
98
107
  }
99
108
  createGenerateURLFunction(dispatcher) {
100
109
  const generateRoute = async (uri, siteConfig) => {
101
110
  const locale = siteConfig.locale;
102
- 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();
103
113
  await this.dispatchResourceRecursive(uri, dispatcher, {resourceType: "route"}, siteConfig);
104
- this.addAdditionalImportMetadataToViewConfig(siteConfig);
105
- 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`);
106
118
  };
107
119
  return generateRoute.bind(this);
108
120
  }
@@ -110,8 +122,12 @@ var SiteGenerator = class {
110
122
  const {visitedUrls} = siteConfig;
111
123
  if (!visitedUrls.has(url)) {
112
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
+ }
113
129
  if (url.indexOf("/:") !== -1 || url.indexOf("*") !== -1) {
114
- 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);
115
131
  return;
116
132
  }
117
133
  let context;
@@ -160,6 +176,9 @@ var SiteGenerator = class {
160
176
  const jsUri = importModule.specifier.startsWith("/") ? importModule.specifier : (0, import_shared_utils.getSpecifier)(importModule);
161
177
  dispatchRequests.push(this.dispatchJSResourceRecursive(jsUri, dispatcher, siteConfig));
162
178
  }
179
+ if (moduleDefinition.bundleRecord) {
180
+ this.addBundleToSiteMetadata(moduleDefinition, url, siteConfig);
181
+ }
163
182
  }
164
183
  const uris = context.fs?.metadata?.resolvedUris || [];
165
184
  for (const jsUri of uris) {
@@ -167,6 +186,52 @@ var SiteGenerator = class {
167
186
  }
168
187
  await Promise.all(dispatchRequests);
169
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
+ }
170
235
  async handleMappingResource(url, context, siteConfig, dispatcher) {
171
236
  const {importMetadata: importMetatdata} = siteConfig;
172
237
  const statusCode = context.response?.status;
@@ -185,7 +250,7 @@ var SiteGenerator = class {
185
250
  await Promise.all(dispatchRequests);
186
251
  } else {
187
252
  const body = context.fs?.body;
188
- import_shared_utils.logger.warn(`Failed to fetch ${url}: (${statusCode}) ${body}`);
253
+ import_shared_utils.logger.warn(`[SSG] Failed to fetch ${url}: (${statusCode}) ${body}`);
189
254
  }
190
255
  }
191
256
  async handleHtmlResource(url, context, siteConfig, dispatcher) {
@@ -251,7 +316,7 @@ var SiteGenerator = class {
251
316
  siteConfig.viewConfigPath = this.getResourcePathFromUrl(siteConfig, resourceUri);
252
317
  }
253
318
  } else {
254
- import_shared_utils.logger.warn("Skipped inline bootstrap resource: %j", resource);
319
+ import_shared_utils.logger.warn("[SSG] Skipped inline bootstrap resource: %j", resource);
255
320
  }
256
321
  }
257
322
  }
@@ -261,7 +326,7 @@ var SiteGenerator = class {
261
326
  if (resourceUri.startsWith("/")) {
262
327
  dispatchRequests.push(this.dispatchResourceRecursive(resourceUri, dispatcher, {resourceType: "resource"}, siteConfig));
263
328
  } else {
264
- import_shared_utils.logger.warn("Skipped resource: %j", resource);
329
+ import_shared_utils.logger.warn("[SSG] Skipped resource: %j", resource);
265
330
  }
266
331
  }
267
332
  await Promise.all(dispatchRequests);
@@ -277,7 +342,7 @@ var SiteGenerator = class {
277
342
  const mappingURL = siteConfig.endpoints?.uris?.mapping + encodeURIComponent(jsUri);
278
343
  await this.dispatchResourceRecursive(mappingURL, dispatcher, {resourceType: "mapping"}, siteConfig);
279
344
  } else {
280
- 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 + '"');
281
346
  }
282
347
  } else if (isAdditionalModulesRequest) {
283
348
  const uri = `${siteConfig.endpoints?.uris.legacyDefault}${encodeURIComponent(jsUri)}`;
@@ -289,12 +354,17 @@ var SiteGenerator = class {
289
354
  const metadata = context.fs?.metadata;
290
355
  const fullPath = this.getResourcePathFromUrl(siteConfig, url);
291
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
+ }
292
362
  const assetReferences = metadata?.asset?.metadata?.assetReferences || [];
293
363
  const dispatchRequests = [];
294
364
  for (const ref of assetReferences) {
295
365
  const refUrl = ref.override?.uri || ref.url;
296
366
  dispatchRequests.push(this.dispatchResourceRecursive(refUrl, dispatcher, {resourceType: "asset", asset: metadata?.asset}, siteConfig).catch((err) => {
297
- 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);
298
368
  }));
299
369
  }
300
370
  return Promise.all(dispatchRequests);
@@ -331,10 +401,10 @@ var SiteGenerator = class {
331
401
  if (assetSrcDir && import_fs_extra.default.existsSync(assetSrcDir)) {
332
402
  import_fs_extra.default.copySync(assetSrcDir, assetOutputDir);
333
403
  } else {
334
- 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);
335
405
  }
336
406
  } catch (e) {
337
- 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);
338
408
  }
339
409
  }
340
410
  }
@@ -354,13 +424,20 @@ var SiteGenerator = class {
354
424
  urlRewriteMap,
355
425
  endpoints,
356
426
  skipBaseDocumentGeneration,
357
- ...featureFlags
427
+ ...featureFlags,
428
+ siteMetadata: new import_shared_utils.SiteMetadataImpl({rootDir: outputDir, runtimeEnvironment})
358
429
  };
359
430
  }
360
431
  filterFeatureFlags() {
361
432
  const ffs = (0, import_shared_utils.getFeatureFlags)();
362
- if (ffs.LEGACY_LOADER) {
363
- 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};
364
441
  } else {
365
442
  return void 0;
366
443
  }
@@ -397,6 +474,10 @@ ${mergeIndex}
397
474
  });
398
475
  }
399
476
  }
477
+ async captureAdditionalRouteMetadata(siteConfig) {
478
+ this.addAdditionalImportMetadataToViewConfig(siteConfig);
479
+ await siteConfig.siteMetadata?.persistSiteMetadata();
480
+ }
400
481
  };
401
482
  var static_generation_default = SiteGenerator;
402
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,8 +30,10 @@ export function createProviderContext(serverContext) {
31
30
  amdLoader,
32
31
  esmLoader,
33
32
  environment,
33
+ bundleConfig,
34
34
  }),
35
35
  runtimeEnvironment: deepFreeze(serverContext.runtimeEnvironment),
36
+ watcherFactory: serverContext.watcherFactory,
36
37
  };
37
38
  }
38
39
  //# sourceMappingURL=provider.js.map