@lwrjs/config 0.12.0-alpha.3 → 0.12.0-alpha.5

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.
@@ -36,8 +36,6 @@ __export(exports, {
36
36
  DEFAULT_ROOT_DIR: () => DEFAULT_ROOT_DIR,
37
37
  DEFAULT_SERVICE_PACKAGE_NAME: () => DEFAULT_SERVICE_PACKAGE_NAME,
38
38
  LWR_VERSION: () => LWR_VERSION,
39
- SSR_MODULE_PROVIDER: () => SSR_MODULE_PROVIDER,
40
- SSR_VIEW_TRANSFORM_PLUGIN: () => SSR_VIEW_TRANSFORM_PLUGIN,
41
39
  getDefaultBundleConfig: () => getDefaultBundleConfig
42
40
  });
43
41
  var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
@@ -47,7 +45,7 @@ var PORT = process.env.PORT ? parseInt(process.env.PORT, 10) : 3e3;
47
45
  var MODE = process.env.MODE || "prod";
48
46
  var DEFAULT_BASE_PATH = "";
49
47
  var DEFAULT_API_VERSION = "1";
50
- var LWR_VERSION = import_package.version;
48
+ var LWR_VERSION = import_package.lwrVersion;
51
49
  var DEFAULT_SERVER_TYPE = "express";
52
50
  var DEFAULT_LWR_CONFIG_JSON = "$rootDir/lwr.config.json";
53
51
  var DEFAULT_GENERATOR_CONFIG = {
@@ -67,9 +65,9 @@ var DEFAULT_MODULE_PROVIDERS = [
67
65
  "@lwrjs/app-service/moduleProvider",
68
66
  "@lwrjs/router/module-provider",
69
67
  "@lwrjs/lwc-module-provider",
68
+ "@lwrjs/lwc-ssr/moduleProvider",
70
69
  "@lwrjs/npm-module-provider"
71
70
  ];
72
- var SSR_MODULE_PROVIDER = "@lwrjs/lwc-ssr/moduleProvider";
73
71
  var DEFAULT_RESOURCE_PROVIDERS = ["@lwrjs/loader"];
74
72
  var DEFAULT_VIEW_PROVIDERS = [
75
73
  "@lwrjs/nunjucks-view-provider",
@@ -81,9 +79,12 @@ var DEFAULT_BUNDLE_PROVIDERS = [
81
79
  "@lwrjs/module-bundler/amd-bundle-provider",
82
80
  "@lwrjs/module-bundler/esm-bundle-provider"
83
81
  ];
84
- var DEFAULT_VIEW_TRANSFORM_PLUGINS = ["@lwrjs/base-view-transformer"];
85
- var SSR_VIEW_TRANSFORM_PLUGIN = "@lwrjs/lwc-ssr/viewTransformer";
86
82
  var DEFAULT_ASSET_PROVIDERS = ["@lwrjs/fs-asset-provider"];
83
+ var DEFAULT_VIEW_TRANSFORM_PLUGINS = [
84
+ "@lwrjs/base-view-transformer",
85
+ "@lwrjs/lwc-ssr/viewTransformer",
86
+ "@lwrjs/lwc-ssr/dataViewTransformer"
87
+ ];
87
88
  var DEFAULT_ASSET_TRANSFORM_PLUGINS = ["@lwrjs/asset-transformer"];
88
89
  var DEFAULT_URI_TRANSFORM_PLUGINS = [];
89
90
  var DEFAULT_AMD_LOADER = "lwr/loader";
@@ -150,7 +151,13 @@ var DEFAULT_LWR_CONFIG = {
150
151
  viewTransformers: DEFAULT_VIEW_TRANSFORM_PLUGINS,
151
152
  environment: {},
152
153
  lwc: {modules: []},
153
- routes: [],
154
+ routes: [
155
+ {
156
+ id: "lwrInfo",
157
+ path: "/lwr-info",
158
+ routeHandler: `@lwrjs/config/info/route-handler`
159
+ }
160
+ ],
154
161
  errorRoutes: [],
155
162
  routeHandlers: {},
156
163
  bundleConfig: getDefaultBundleConfig(MODE),
@@ -24,7 +24,6 @@ var __toModule = (module2) => {
24
24
  // packages/@lwrjs/config/src/global-config.ts
25
25
  __markAsModule(exports);
26
26
  __export(exports, {
27
- applySsrConfig: () => applySsrConfig,
28
27
  applyStaticProviderConfig: () => applyStaticProviderConfig,
29
28
  getLwrConfigFromFile: () => getLwrConfigFromFile,
30
29
  loadConfig: () => loadConfig,
@@ -36,7 +35,6 @@ var import_jsonc_parser = __toModule(require("jsonc-parser"));
36
35
  var import_diagnostics = __toModule(require("@lwrjs/diagnostics"));
37
36
  var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
38
37
  var import_defaults = __toModule(require("./defaults.cjs"));
39
- var import_defaults2 = __toModule(require("./defaults.cjs"));
40
38
  var import_app_config = __toModule(require("./validation/app-config.cjs"));
41
39
  var import_assets = __toModule(require("./utils/assets.cjs"));
42
40
  var import_services = __toModule(require("./utils/services.cjs"));
@@ -46,7 +44,7 @@ var import_lwc = __toModule(require("./utils/lwc.cjs"));
46
44
  var import_runtime_config = __toModule(require("./runtime-config.cjs"));
47
45
  var import_global_data = __toModule(require("./utils/global-data.cjs"));
48
46
  var import_instrumentation = __toModule(require("@lwrjs/instrumentation"));
49
- function getLwrConfigFromFile(rootDir, lwrConfigPath = import_defaults2.DEFAULT_LWR_CONFIG_JSON) {
47
+ function getLwrConfigFromFile(rootDir, lwrConfigPath = import_defaults.DEFAULT_LWR_CONFIG_JSON) {
50
48
  const resolvedLwrConfigPath = import_path.default.resolve((0, import_shared_utils.normalizeDirectory)(lwrConfigPath, rootDir));
51
49
  if (!import_fs.default.existsSync(resolvedLwrConfigPath)) {
52
50
  import_diagnostics.logger.warn({label: `config`, message: `LWR Config not found on "${resolvedLwrConfigPath}"`});
@@ -67,10 +65,13 @@ function mergeConfig(configArg) {
67
65
  configArg = (0, import_merge.trimLwrConfig)(configArg);
68
66
  (0, import_app_config.validateLwrAppConfig)(configArg, "pre");
69
67
  }
70
- const rootDir = import_path.default.resolve(configArg?.rootDir || import_defaults2.DEFAULT_ROOT_DIR);
68
+ const rootDir = import_path.default.resolve(configArg?.rootDir || import_defaults.DEFAULT_ROOT_DIR);
71
69
  const configFile = !configArg?.ignoreLwrConfigFile ? getLwrConfigFromFile(rootDir, configArg?.lwrConfigFile) : void 0;
70
+ if (configFile) {
71
+ configFile.routes = (configFile?.routes ?? []).concat(import_defaults.DEFAULT_LWR_CONFIG.routes);
72
+ }
72
73
  return {
73
- ...import_defaults2.DEFAULT_LWR_CONFIG,
74
+ ...import_defaults.DEFAULT_LWR_CONFIG,
74
75
  ...configFile,
75
76
  ...configArg,
76
77
  lwc: (0, import_merge.mergeLwcConfig)(configFile, configArg),
@@ -81,12 +82,12 @@ function mergeConfig(configArg) {
81
82
  };
82
83
  }
83
84
  function normalizeConfig(config) {
84
- const amdLoader = (0, import_shared_utils.getFeatureFlags)().LEGACY_LOADER ? import_defaults2.DEFAULT_AMD_LOADER_LEGACY : import_defaults2.DEFAULT_AMD_LOADER;
85
+ const amdLoader = (0, import_shared_utils.getFeatureFlags)().LEGACY_LOADER ? import_defaults.DEFAULT_AMD_LOADER_LEGACY : import_defaults.DEFAULT_AMD_LOADER;
85
86
  return {
86
87
  ...config,
87
88
  amdLoader,
88
- esmLoader: import_defaults2.DEFAULT_ESM_LOADER,
89
- lwrVersion: import_defaults2.LWR_VERSION,
89
+ esmLoader: import_defaults.DEFAULT_ESM_LOADER,
90
+ lwrVersion: import_defaults.LWR_VERSION,
90
91
  assets: (0, import_assets.normalizeAssets)(config.assets),
91
92
  lwc: (0, import_lwc.normalizeLwcConfig)(config.lwc),
92
93
  hooks: (0, import_services.normalizeServices)(config.hooks),
@@ -104,7 +105,7 @@ function normalizeConfig(config) {
104
105
  };
105
106
  }
106
107
  function normalizeConfigPaths(config) {
107
- const rootDir = config.rootDir || import_defaults2.DEFAULT_ROOT_DIR;
108
+ const rootDir = config.rootDir || import_defaults.DEFAULT_ROOT_DIR;
108
109
  const resourcePaths = {
109
110
  rootDir,
110
111
  assets: (0, import_assets.normalizeAssetPaths)(config.assets, rootDir),
@@ -134,26 +135,16 @@ function normalizeConfigPaths(config) {
134
135
  routeHandlers: (0, import_routes.normalizeRouteHandlerPaths)(config.routeHandlers, resourcePaths)
135
136
  };
136
137
  }
137
- function applySsrConfig(config) {
138
- const hasSSR = config.routes.some((r) => r.bootstrap.ssr);
139
- if (!hasSSR) {
140
- return config;
141
- }
142
- const hasSsrModuleProvider = config.moduleProviders.some(([m]) => m === import_defaults.SSR_MODULE_PROVIDER);
143
- const hasSsrViewTransformer = config.viewTransformers.some(([v]) => v === import_defaults.SSR_VIEW_TRANSFORM_PLUGIN);
144
- return {
145
- ...config,
146
- moduleProviders: hasSsrModuleProvider ? config.moduleProviders : [[import_defaults.SSR_MODULE_PROVIDER, void 0], ...config.moduleProviders],
147
- viewTransformers: hasSsrViewTransformer ? config.viewTransformers : [...config.viewTransformers, [import_defaults.SSR_VIEW_TRANSFORM_PLUGIN, void 0]]
148
- };
149
- }
150
138
  function applyStaticProviderConfig(config) {
151
139
  return {
152
140
  ...config,
153
141
  assetProviders: [["@lwrjs/static/asset-provider", void 0]],
154
142
  assetTransformers: [],
155
143
  resourceProviders: [["@lwrjs/static/resource-provider", {}]],
156
- moduleProviders: [["@lwrjs/static/module-provider", void 0]],
144
+ moduleProviders: [
145
+ ["@lwrjs/static/module-provider", void 0],
146
+ ["@lwrjs/lwc-ssr/moduleProvider", void 0]
147
+ ],
157
148
  bundleProviders: [
158
149
  ["@lwrjs/static/bundle-provider", void 0],
159
150
  ["@lwrjs/module-bundler/amd-runtime-bundle-provider", void 0]
@@ -168,7 +159,6 @@ function resolveGlobalConfig(configArg, options) {
168
159
  if (options?.useStaticProviders) {
169
160
  normalizedConfig = applyStaticProviderConfig(normalizedConfig);
170
161
  }
171
- normalizedConfig = applySsrConfig(normalizedConfig);
172
162
  if (!options?.skipCacheDirCreation) {
173
163
  createCacheFolder(normalizedConfig.cacheDir, normalizedConfig.rootDir);
174
164
  }
@@ -30,7 +30,6 @@ __export(exports, {
30
30
  });
31
31
  var import_routes = __toModule(require("./utils/routes.cjs"));
32
32
  var import_app_config = __toModule(require("./validation/app-config.cjs"));
33
- var import_global_config = __toModule(require("./global-config.cjs"));
34
33
  var import_instrumentation = __toModule(require("@lwrjs/instrumentation"));
35
34
  async function executeConfigHooks(hooks, globalConfig, runtimeEnvironment, globalData, skipValidate = false) {
36
35
  const span = (0, import_instrumentation.getTracer)().startSpan({name: import_instrumentation.ConfigSpan.ExecuteConfigHooks});
@@ -46,9 +45,6 @@ async function executeConfigHooks(hooks, globalConfig, runtimeEnvironment, globa
46
45
  }
47
46
  globalConfig.routes = (0, import_routes.normalizeRoutes)(globalConfig.routes, globalConfig.routeHandlers);
48
47
  globalConfig.errorRoutes = (0, import_routes.normalizeRoutes)(globalConfig.errorRoutes, globalConfig.routeHandlers);
49
- const ssrConfig = (0, import_global_config.applySsrConfig)(globalConfig);
50
- globalConfig.moduleProviders = ssrConfig.moduleProviders;
51
- globalConfig.viewTransformers = ssrConfig.viewTransformers;
52
48
  if (!skipValidate) {
53
49
  (0, import_app_config.validateLwrAppConfig)(globalConfig, "post");
54
50
  }
@@ -78,9 +74,6 @@ function executeStartHooks(hooks, globalConfig, runtimeEnvironment, skipValidate
78
74
  }
79
75
  globalConfig.routes = (0, import_routes.normalizeRoutes)(globalConfig.routes, globalConfig.routeHandlers);
80
76
  globalConfig.errorRoutes = (0, import_routes.normalizeRoutes)(globalConfig.errorRoutes, globalConfig.routeHandlers);
81
- const ssrConfig = (0, import_global_config.applySsrConfig)(globalConfig);
82
- globalConfig.moduleProviders = ssrConfig.moduleProviders;
83
- globalConfig.viewTransformers = ssrConfig.viewTransformers;
84
77
  if (!skipValidate) {
85
78
  (0, import_app_config.validateLwrAppConfig)(globalConfig, "post");
86
79
  }
@@ -25,7 +25,10 @@ var __toModule = (module2) => {
25
25
  __markAsModule(exports);
26
26
  __export(exports, {
27
27
  LWC_VERSION: () => import_package.lwcVersion,
28
- LWR_VERSION: () => import_package.version,
28
+ LWR_VERSION: () => import_package.lwrVersion,
29
+ NODE_VERSION: () => import_package.nodeVersion,
30
+ PWA_KIT_RUNTIME_VERSION: () => import_package.pwaKitRuntimeVersion,
31
+ default: () => import_route_handler.default,
29
32
  executeConfigHooks: () => import_hooks.executeConfigHooks,
30
33
  executeInstrumentationHooks: () => import_hooks.executeInstrumentationHooks,
31
34
  executeStartHooks: () => import_hooks.executeStartHooks,
@@ -40,3 +43,4 @@ var import_global_config = __toModule(require("./global-config.cjs"));
40
43
  var import_runtime_config = __toModule(require("./runtime-config.cjs"));
41
44
  var import_hooks = __toModule(require("./hooks.cjs"));
42
45
  var import_app_config = __toModule(require("./validation/app-config.cjs"));
46
+ var import_route_handler = __toModule(require("./info/route-handler.cjs"));
@@ -0,0 +1,64 @@
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/config/src/info/route-handler.ts
25
+ __markAsModule(exports);
26
+ __export(exports, {
27
+ default: () => siteInformation
28
+ });
29
+ var import_package = __toModule(require("@lwrjs/config/package"));
30
+ var baseHtml = `<!DOCTYPE html>
31
+ <html lang="en">
32
+ <head>
33
+ <meta charset="utf-8" />
34
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
35
+ <title>Site Information</title>
36
+ </head>
37
+ <body>
38
+ <h1>Site Information</h1>
39
+ <div id="informationContainer">
40
+ {{ info }}
41
+ </div>
42
+ </body>
43
+ </html>`;
44
+ async function siteInformation(request, context) {
45
+ const details = {
46
+ "LWR Version": import_package.lwrVersion,
47
+ "LWC Version": import_package.lwcVersion,
48
+ "Node Version": import_package.nodeVersion,
49
+ "PWA Kit Runtime Version": import_package.pwaKitRuntimeVersion
50
+ };
51
+ let detailsString = "";
52
+ for (const key in details) {
53
+ detailsString += `<p>${key}: ${details[key]}</p>
54
+ `;
55
+ }
56
+ let infoHTML = baseHtml;
57
+ infoHTML = infoHTML.replace("{{ info }}", detailsString);
58
+ return {
59
+ body: infoHTML,
60
+ cache: {
61
+ ttl: "200s"
62
+ }
63
+ };
64
+ }
@@ -36,6 +36,13 @@ function normalizeRoutes(routes, routeHandlers) {
36
36
  return routes.map((route) => {
37
37
  const rawServices = route?.bootstrap?.services || [];
38
38
  const services = rawServices.map((s) => typeof s === "string" ? {name: s, ssr: false} : s);
39
+ const preloadData = route.bootstrap?.preloadData === void 0 ? route.bootstrap?.ssr === true ? true : false : route.bootstrap?.preloadData;
40
+ const bootstrap = {
41
+ ...import_shared_utils.DEFAULT_LWR_BOOTSTRAP_CONFIG,
42
+ ...route.bootstrap,
43
+ preloadData,
44
+ services
45
+ };
39
46
  if (route.routeHandler) {
40
47
  const handler = typeof route.routeHandler === "string" ? route.routeHandler : route.routeHandler[0];
41
48
  if (!(handler in routeHandlers)) {
@@ -44,20 +51,12 @@ function normalizeRoutes(routes, routeHandlers) {
44
51
  return {
45
52
  ...route,
46
53
  routeHandler: typeof route.routeHandler === "string" ? [route.routeHandler, void 0] : route.routeHandler,
47
- bootstrap: {
48
- ...import_shared_utils.DEFAULT_LWR_BOOTSTRAP_CONFIG,
49
- ...route.bootstrap,
50
- services
51
- }
54
+ bootstrap
52
55
  };
53
56
  }
54
57
  return {
55
58
  ...route,
56
- bootstrap: {
57
- ...import_shared_utils.DEFAULT_LWR_BOOTSTRAP_CONFIG,
58
- ...route.bootstrap,
59
- services
60
- }
59
+ bootstrap
61
60
  };
62
61
  });
63
62
  }
@@ -124,6 +124,7 @@ var BOOTSTRAP_ATTRIBUTE_KEYS = createKeys("bootstrap", [
124
124
  "services",
125
125
  "configAsSrc",
126
126
  "ssr",
127
+ "preloadData",
127
128
  "mixedMode",
128
129
  "module",
129
130
  "preloadModules"
@@ -502,4 +503,14 @@ var ValidationContext = class {
502
503
  }
503
504
  }
504
505
  }
506
+ assertSsrPreloadData(node, propPrefix) {
507
+ const ssr = (0, import_jsonc_parser.findNodeAtLocation)(node, ["ssr"])?.value;
508
+ const preloadData = (0, import_jsonc_parser.findNodeAtLocation)(node, ["preloadData"])?.value;
509
+ if (ssr === true && preloadData === false) {
510
+ this.diagnostics.push({
511
+ description: import_diagnostics.descriptions.CONFIG_PARSER.SSR_WITHOUT_PRELOAD(propPrefix),
512
+ location: this.getLocationFromNode(node)
513
+ });
514
+ }
515
+ }
505
516
  };
@@ -47,10 +47,12 @@ function validateBootstrap(node, validationContext, propPrefix) {
47
47
  validationContext.assertArrayOfSpecifiers((0, import_jsonc_parser.findNodeAtLocation)(node, ["preloadModules"]), `${propPrefix}.preloadModules`);
48
48
  validationContext.assertIsBoolean((0, import_jsonc_parser.findNodeAtLocation)(node, ["autoBoot"]), `${propPrefix}.autoBoot`);
49
49
  validationContext.assertIsBoolean((0, import_jsonc_parser.findNodeAtLocation)(node, ["ssr"]), `${propPrefix}.ssr`);
50
+ validationContext.assertIsBoolean((0, import_jsonc_parser.findNodeAtLocation)(node, ["preloadData"]), `${propPrefix}.preloadData`);
50
51
  validationContext.assertIsBoolean((0, import_jsonc_parser.findNodeAtLocation)(node, ["mixedMode"]), `${propPrefix}.mixedMode`);
51
52
  validationContext.assertIsBoolean((0, import_jsonc_parser.findNodeAtLocation)(node, ["configAsSrc"]), `${propPrefix}.configAsSrc`);
52
53
  validationContext.assertIsSpecifier((0, import_jsonc_parser.findNodeAtLocation)(node, ["module"]), `${propPrefix}.module`);
53
54
  validationContext.assertIsBoolean((0, import_jsonc_parser.findNodeAtLocation)(node, ["syntheticShadow"]), `${propPrefix}.syntheticShadow`);
55
+ validationContext.assertSsrPreloadData(node, propPrefix);
54
56
  const workers = (0, import_jsonc_parser.findNodeAtLocation)(node, ["workers"]);
55
57
  if (workers && workers.children) {
56
58
  workers.children.forEach((w, index) => {
@@ -3,8 +3,6 @@ export declare const LWR_VERSION: string;
3
3
  export declare const DEFAULT_LWR_CONFIG_JSON = "$rootDir/lwr.config.json";
4
4
  export declare const DEFAULT_GENERATOR_CONFIG: StaticSiteGenerator;
5
5
  export declare const DEFAULT_ROOT_DIR: string;
6
- export declare const SSR_MODULE_PROVIDER = "@lwrjs/lwc-ssr/moduleProvider";
7
- export declare const SSR_VIEW_TRANSFORM_PLUGIN = "@lwrjs/lwc-ssr/viewTransformer";
8
6
  export declare const DEFAULT_AMD_LOADER = "lwr/loader";
9
7
  export declare const DEFAULT_AMD_LOADER_LEGACY = "lwr/loaderLegacy";
10
8
  export declare const DEFAULT_ESM_LOADER = "lwr/esmLoader";
@@ -1,11 +1,11 @@
1
1
  import { DEFAULT_LWR_LOCKER_CONFIG, getFeatureFlags } from '@lwrjs/shared-utils';
2
- import { version } from '@lwrjs/config/package';
2
+ import { lwrVersion } from '@lwrjs/config/package';
3
3
  import { DEFAULT_I18N_CONFIG, getServerModeConfig } from './runtime-config.js';
4
4
  const PORT = process.env.PORT ? parseInt(process.env.PORT, 10) : 3000;
5
5
  const MODE = process.env.MODE || 'prod';
6
6
  const DEFAULT_BASE_PATH = '';
7
7
  const DEFAULT_API_VERSION = '1';
8
- export const LWR_VERSION = version;
8
+ export const LWR_VERSION = lwrVersion;
9
9
  const DEFAULT_SERVER_TYPE = 'express';
10
10
  export const DEFAULT_LWR_CONFIG_JSON = '$rootDir/lwr.config.json';
11
11
  export const DEFAULT_GENERATOR_CONFIG = {
@@ -27,9 +27,9 @@ const DEFAULT_MODULE_PROVIDERS = [
27
27
  '@lwrjs/app-service/moduleProvider',
28
28
  '@lwrjs/router/module-provider',
29
29
  '@lwrjs/lwc-module-provider',
30
+ '@lwrjs/lwc-ssr/moduleProvider',
30
31
  '@lwrjs/npm-module-provider',
31
32
  ];
32
- export const SSR_MODULE_PROVIDER = '@lwrjs/lwc-ssr/moduleProvider';
33
33
  const DEFAULT_RESOURCE_PROVIDERS = ['@lwrjs/loader'];
34
34
  const DEFAULT_VIEW_PROVIDERS = [
35
35
  '@lwrjs/nunjucks-view-provider',
@@ -41,9 +41,12 @@ const DEFAULT_BUNDLE_PROVIDERS = [
41
41
  '@lwrjs/module-bundler/amd-bundle-provider',
42
42
  '@lwrjs/module-bundler/esm-bundle-provider',
43
43
  ];
44
- const DEFAULT_VIEW_TRANSFORM_PLUGINS = ['@lwrjs/base-view-transformer'];
45
- export const SSR_VIEW_TRANSFORM_PLUGIN = '@lwrjs/lwc-ssr/viewTransformer';
46
44
  const DEFAULT_ASSET_PROVIDERS = ['@lwrjs/fs-asset-provider'];
45
+ const DEFAULT_VIEW_TRANSFORM_PLUGINS = [
46
+ '@lwrjs/base-view-transformer',
47
+ '@lwrjs/lwc-ssr/viewTransformer',
48
+ '@lwrjs/lwc-ssr/dataViewTransformer',
49
+ ];
47
50
  const DEFAULT_ASSET_TRANSFORM_PLUGINS = ['@lwrjs/asset-transformer'];
48
51
  const DEFAULT_URI_TRANSFORM_PLUGINS = [];
49
52
  export const DEFAULT_AMD_LOADER = 'lwr/loader';
@@ -114,7 +117,13 @@ export const DEFAULT_LWR_CONFIG = {
114
117
  viewTransformers: DEFAULT_VIEW_TRANSFORM_PLUGINS,
115
118
  environment: {},
116
119
  lwc: { modules: [] },
117
- routes: [],
120
+ routes: [
121
+ {
122
+ id: 'lwrInfo',
123
+ path: '/lwr-info',
124
+ routeHandler: `@lwrjs/config/info/route-handler`,
125
+ },
126
+ ],
118
127
  errorRoutes: [],
119
128
  routeHandlers: {},
120
129
  bundleConfig: getDefaultBundleConfig(MODE),
@@ -24,13 +24,6 @@ export interface Configurations {
24
24
  * @returns {LwrGlobalConfig | undefined} the validated config file contents if it exists
25
25
  */
26
26
  export declare function getLwrConfigFromFile(rootDir: string, lwrConfigPath?: string): LwrGlobalConfig | undefined;
27
- /**
28
- * Add the SSR module provider and view transformer, if any route has `ssr` turned on.
29
- *
30
- * @param {NormalizedLwrGlobalConfig} config - a normalized global config to check / mutate
31
- * @returns {NormalizedLwrGlobalConfig} an SSR-enabled normalized global config, if needed
32
- */
33
- export declare function applySsrConfig(config: NormalizedLwrGlobalConfig): NormalizedLwrGlobalConfig;
34
27
  /**
35
28
  * Apply Static Providers for MRT runtime (used exclusively by buildServer)
36
29
  *
@@ -3,7 +3,6 @@ import path from 'path';
3
3
  import { parse } from 'jsonc-parser';
4
4
  import { logger } from '@lwrjs/diagnostics';
5
5
  import { readFile, normalizeDirectory, getFeatureFlags, ASSETS_CACHE_DIR } from '@lwrjs/shared-utils';
6
- import { SSR_MODULE_PROVIDER, SSR_VIEW_TRANSFORM_PLUGIN } from './defaults.js';
7
6
  import { DEFAULT_AMD_LOADER, DEFAULT_AMD_LOADER_LEGACY, DEFAULT_ESM_LOADER, DEFAULT_LWR_CONFIG, DEFAULT_LWR_CONFIG_JSON, DEFAULT_ROOT_DIR, LWR_VERSION, } from './defaults.js';
8
7
  import { validateLwrAppConfig } from './validation/app-config.js';
9
8
  import { normalizeAssetPaths, normalizeAssets } from './utils/assets.js';
@@ -78,6 +77,10 @@ function mergeConfig(configArg) {
78
77
  const configFile = !configArg?.ignoreLwrConfigFile
79
78
  ? getLwrConfigFromFile(rootDir, configArg?.lwrConfigFile)
80
79
  : undefined;
80
+ // merge default routes with the config file routes
81
+ if (configFile) {
82
+ configFile.routes = (configFile?.routes ?? []).concat(DEFAULT_LWR_CONFIG.routes);
83
+ }
81
84
  // merge the various configs in order of priority
82
85
  return {
83
86
  ...DEFAULT_LWR_CONFIG,
@@ -172,33 +175,6 @@ function normalizeConfigPaths(config) {
172
175
  routeHandlers: normalizeRouteHandlerPaths(config.routeHandlers, resourcePaths),
173
176
  };
174
177
  }
175
- /**
176
- * Add the SSR module provider and view transformer, if any route has `ssr` turned on.
177
- *
178
- * @param {NormalizedLwrGlobalConfig} config - a normalized global config to check / mutate
179
- * @returns {NormalizedLwrGlobalConfig} an SSR-enabled normalized global config, if needed
180
- */
181
- export function applySsrConfig(config) {
182
- // check if any route has SSR turned on
183
- const hasSSR = config.routes.some((r) => r.bootstrap.ssr);
184
- if (!hasSSR) {
185
- return config;
186
- }
187
- // add the SSR configuration, if it's not already there
188
- // note: this is a noop when called from an onStart hook of an LWR@MRT app,
189
- // since the app has already been built / rolled up
190
- const hasSsrModuleProvider = config.moduleProviders.some(([m]) => m === SSR_MODULE_PROVIDER);
191
- const hasSsrViewTransformer = config.viewTransformers.some(([v]) => v === SSR_VIEW_TRANSFORM_PLUGIN);
192
- return {
193
- ...config,
194
- moduleProviders: hasSsrModuleProvider
195
- ? config.moduleProviders
196
- : [[SSR_MODULE_PROVIDER, undefined], ...config.moduleProviders],
197
- viewTransformers: hasSsrViewTransformer
198
- ? config.viewTransformers
199
- : [...config.viewTransformers, [SSR_VIEW_TRANSFORM_PLUGIN, undefined]],
200
- };
201
- }
202
178
  /**
203
179
  * Apply Static Providers for MRT runtime (used exclusively by buildServer)
204
180
  *
@@ -211,7 +187,10 @@ export function applyStaticProviderConfig(config) {
211
187
  assetProviders: [['@lwrjs/static/asset-provider', undefined]],
212
188
  assetTransformers: [],
213
189
  resourceProviders: [['@lwrjs/static/resource-provider', {}]],
214
- moduleProviders: [['@lwrjs/static/module-provider', undefined]],
190
+ moduleProviders: [
191
+ ['@lwrjs/static/module-provider', undefined],
192
+ ['@lwrjs/lwc-ssr/moduleProvider', undefined],
193
+ ],
215
194
  bundleProviders: [
216
195
  ['@lwrjs/static/bundle-provider', undefined],
217
196
  ['@lwrjs/module-bundler/amd-runtime-bundle-provider', undefined],
@@ -242,8 +221,6 @@ export function resolveGlobalConfig(configArg, options) {
242
221
  if (options?.useStaticProviders) {
243
222
  normalizedConfig = applyStaticProviderConfig(normalizedConfig);
244
223
  }
245
- // Add SSR config if applicable
246
- normalizedConfig = applySsrConfig(normalizedConfig);
247
224
  // skip cache dir creation when the option is set
248
225
  if (!options?.skipCacheDirCreation) {
249
226
  createCacheFolder(normalizedConfig.cacheDir, normalizedConfig.rootDir);
package/build/es/hooks.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { normalizeRoutes } from './utils/routes.js';
2
2
  import { validateLwrAppConfig } from './validation/app-config.js';
3
- import { applySsrConfig } from './global-config.js';
4
3
  import { getTracer, ConfigSpan } from '@lwrjs/instrumentation';
5
4
  /**
6
5
  * Run `initConfigs` hooks
@@ -31,9 +30,6 @@ export async function executeConfigHooks(hooks, globalConfig, runtimeEnvironment
31
30
  }
32
31
  globalConfig.routes = normalizeRoutes(globalConfig.routes, globalConfig.routeHandlers);
33
32
  globalConfig.errorRoutes = normalizeRoutes(globalConfig.errorRoutes, globalConfig.routeHandlers);
34
- const ssrConfig = applySsrConfig(globalConfig);
35
- globalConfig.moduleProviders = ssrConfig.moduleProviders;
36
- globalConfig.viewTransformers = ssrConfig.viewTransformers;
37
33
  if (!skipValidate) {
38
34
  validateLwrAppConfig(globalConfig, 'post');
39
35
  }
@@ -78,9 +74,6 @@ export function executeStartHooks(hooks, globalConfig, runtimeEnvironment, skipV
78
74
  }
79
75
  globalConfig.routes = normalizeRoutes(globalConfig.routes, globalConfig.routeHandlers);
80
76
  globalConfig.errorRoutes = normalizeRoutes(globalConfig.errorRoutes, globalConfig.routeHandlers);
81
- const ssrConfig = applySsrConfig(globalConfig);
82
- globalConfig.moduleProviders = ssrConfig.moduleProviders;
83
- globalConfig.viewTransformers = ssrConfig.viewTransformers;
84
77
  if (!skipValidate) {
85
78
  validateLwrAppConfig(globalConfig, 'post');
86
79
  }
@@ -1,6 +1,7 @@
1
- export { version as LWR_VERSION, lwcVersion as LWC_VERSION } from '@lwrjs/config/package';
1
+ export { lwrVersion as LWR_VERSION, lwcVersion as LWC_VERSION, nodeVersion as NODE_VERSION, pwaKitRuntimeVersion as PWA_KIT_RUNTIME_VERSION, } from '@lwrjs/config/package';
2
2
  export { loadConfig, resolveGlobalConfig as normalizeConfig, getLwrConfigFromFile } from './global-config.js';
3
3
  export { getRuntimeEnvironment } from './runtime-config.js';
4
4
  export { executeConfigHooks, executeStartHooks, executeInstrumentationHooks } from './hooks.js';
5
5
  export { validateLwrAppConfig } from './validation/app-config.js';
6
+ export { default } from './info/route-handler.js';
6
7
  //# sourceMappingURL=index.d.ts.map
package/build/es/index.js CHANGED
@@ -1,6 +1,7 @@
1
- export { version as LWR_VERSION, lwcVersion as LWC_VERSION } from '@lwrjs/config/package';
1
+ export { lwrVersion as LWR_VERSION, lwcVersion as LWC_VERSION, nodeVersion as NODE_VERSION, pwaKitRuntimeVersion as PWA_KIT_RUNTIME_VERSION, } from '@lwrjs/config/package';
2
2
  export { loadConfig, resolveGlobalConfig as normalizeConfig, getLwrConfigFromFile } from './global-config.js';
3
3
  export { getRuntimeEnvironment } from './runtime-config.js';
4
4
  export { executeConfigHooks, executeStartHooks, executeInstrumentationHooks } from './hooks.js';
5
5
  export { validateLwrAppConfig } from './validation/app-config.js';
6
+ export { default } from './info/route-handler.js';
6
7
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,3 @@
1
+ import type { HandlerContext, ViewRequest, ViewResponse } from '@lwrjs/types';
2
+ export default function siteInformation(request: ViewRequest, context: HandlerContext): Promise<ViewResponse>;
3
+ //# sourceMappingURL=route-handler.d.ts.map
@@ -0,0 +1,36 @@
1
+ import { lwcVersion, lwrVersion, pwaKitRuntimeVersion, nodeVersion } from '@lwrjs/config/package';
2
+ const baseHtml = `<!DOCTYPE html>
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="utf-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
7
+ <title>Site Information</title>
8
+ </head>
9
+ <body>
10
+ <h1>Site Information</h1>
11
+ <div id="informationContainer">
12
+ {{ info }}
13
+ </div>
14
+ </body>
15
+ </html>`;
16
+ export default async function siteInformation(request, context) {
17
+ const details = {
18
+ 'LWR Version': lwrVersion,
19
+ 'LWC Version': lwcVersion,
20
+ 'Node Version': nodeVersion,
21
+ 'PWA Kit Runtime Version': pwaKitRuntimeVersion,
22
+ };
23
+ let detailsString = '';
24
+ for (const key in details) {
25
+ detailsString += `<p>${key}: ${details[key]}</p>\n`;
26
+ }
27
+ let infoHTML = baseHtml;
28
+ infoHTML = infoHTML.replace('{{ info }}', detailsString);
29
+ return {
30
+ body: infoHTML,
31
+ cache: {
32
+ ttl: '200s',
33
+ },
34
+ };
35
+ }
36
+ //# sourceMappingURL=route-handler.js.map
@@ -6,6 +6,18 @@ export function normalizeRoutes(routes, routeHandlers) {
6
6
  // normalize the bootstrap services
7
7
  const rawServices = route?.bootstrap?.services || [];
8
8
  const services = rawServices.map((s) => (typeof s === 'string' ? { name: s, ssr: false } : s));
9
+ // default preloadData to true if ssr is true
10
+ const preloadData = route.bootstrap?.preloadData === undefined
11
+ ? route.bootstrap?.ssr === true
12
+ ? true
13
+ : false
14
+ : route.bootstrap?.preloadData;
15
+ const bootstrap = {
16
+ ...DEFAULT_LWR_BOOTSTRAP_CONFIG,
17
+ ...route.bootstrap,
18
+ preloadData,
19
+ services,
20
+ };
9
21
  // when a route handler is set, ensure it is set in the route handler config
10
22
  if (route.routeHandler) {
11
23
  const handler = typeof route.routeHandler === 'string' ? route.routeHandler : route.routeHandler[0];
@@ -17,20 +29,12 @@ export function normalizeRoutes(routes, routeHandlers) {
17
29
  routeHandler: typeof route.routeHandler === 'string'
18
30
  ? [route.routeHandler, undefined]
19
31
  : route.routeHandler,
20
- bootstrap: {
21
- ...DEFAULT_LWR_BOOTSTRAP_CONFIG,
22
- ...route.bootstrap,
23
- services,
24
- },
32
+ bootstrap,
25
33
  };
26
34
  }
27
35
  return {
28
36
  ...route,
29
- bootstrap: {
30
- ...DEFAULT_LWR_BOOTSTRAP_CONFIG,
31
- ...route.bootstrap,
32
- services,
33
- },
37
+ bootstrap,
34
38
  };
35
39
  });
36
40
  }
@@ -33,7 +33,7 @@ export declare const I18N_ATTRIBUTE_KEYS: ["defaultLocale", "locales", "uriPatte
33
33
  export declare const STATIC_SITE_GENERATOR_ATTRIBUTE_KEYS: ["outputDir", "skipBaseDocumentGeneration", "skipCleanOutputDir", "_additionalModules", "_additionalRoutePaths"];
34
34
  export declare const ROUTE_ATTRIBUTE_KEYS: ["bootstrap", "subRoutes", "contentTemplate", "id", "cache", "layoutTemplate", "method", "path", "rootComponent", "routeHandler", "properties"];
35
35
  export declare const ERROR_ROUTE_ATTRIBUTE_KEYS: ["bootstrap", "subRoutes", "contentTemplate", "id", "layoutTemplate", "rootComponent", "routeHandler", "status", "properties", "cache"];
36
- export declare const BOOTSTRAP_ATTRIBUTE_KEYS: ["autoBoot", "syntheticShadow", "workers", "services", "configAsSrc", "ssr", "mixedMode", "module", "preloadModules"];
36
+ export declare const BOOTSTRAP_ATTRIBUTE_KEYS: ["autoBoot", "syntheticShadow", "workers", "services", "configAsSrc", "ssr", "preloadData", "mixedMode", "module", "preloadModules"];
37
37
  export declare const BASE_PATH_REGEX: RegExp;
38
38
  export declare class ValidationContext {
39
39
  diagnostics: Diagnostic[];
@@ -68,6 +68,7 @@ export declare class ValidationContext {
68
68
  assertNoBundleConfigDupes(node: Node, dupes: string[]): void;
69
69
  assertDefaultInLocales(node: Node, defaultLocale: string, localesIds: string[]): void;
70
70
  assertFallbackIds(nodes: Node[]): void;
71
+ assertSsrPreloadData(node: Node, propPrefix: string): void;
71
72
  }
72
73
  export {};
73
74
  //# sourceMappingURL=app-config-context.d.ts.map
@@ -88,6 +88,7 @@ export const BOOTSTRAP_ATTRIBUTE_KEYS = createKeys('bootstrap', [
88
88
  'services',
89
89
  'configAsSrc',
90
90
  'ssr',
91
+ 'preloadData',
91
92
  'mixedMode',
92
93
  'module',
93
94
  'preloadModules',
@@ -489,5 +490,15 @@ export class ValidationContext {
489
490
  }
490
491
  }
491
492
  }
493
+ assertSsrPreloadData(node, propPrefix) {
494
+ const ssr = findNodeAtLocation(node, ['ssr'])?.value;
495
+ const preloadData = findNodeAtLocation(node, ['preloadData'])?.value;
496
+ if (ssr === true && preloadData === false) {
497
+ this.diagnostics.push({
498
+ description: descriptions.CONFIG_PARSER.SSR_WITHOUT_PRELOAD(propPrefix),
499
+ location: this.getLocationFromNode(node),
500
+ });
501
+ }
502
+ }
492
503
  }
493
504
  //# sourceMappingURL=app-config-context.js.map
@@ -28,10 +28,12 @@ function validateBootstrap(node, validationContext, propPrefix) {
28
28
  validationContext.assertArrayOfSpecifiers(findNode(node, ['preloadModules']), `${propPrefix}.preloadModules`);
29
29
  validationContext.assertIsBoolean(findNode(node, ['autoBoot']), `${propPrefix}.autoBoot`);
30
30
  validationContext.assertIsBoolean(findNode(node, ['ssr']), `${propPrefix}.ssr`);
31
+ validationContext.assertIsBoolean(findNode(node, ['preloadData']), `${propPrefix}.preloadData`);
31
32
  validationContext.assertIsBoolean(findNode(node, ['mixedMode']), `${propPrefix}.mixedMode`);
32
33
  validationContext.assertIsBoolean(findNode(node, ['configAsSrc']), `${propPrefix}.configAsSrc`);
33
34
  validationContext.assertIsSpecifier(findNode(node, ['module']), `${propPrefix}.module`);
34
35
  validationContext.assertIsBoolean(findNode(node, ['syntheticShadow']), `${propPrefix}.syntheticShadow`);
36
+ validationContext.assertSsrPreloadData(node, propPrefix);
35
37
  // Each value in the worker map msut be a specifier
36
38
  const workers = findNode(node, ['workers']);
37
39
  if (workers && workers.children) {
package/package.cjs CHANGED
@@ -4,17 +4,17 @@ const resolve = require('resolve');
4
4
  const rootPath = path.join(__dirname, './');
5
5
 
6
6
  // Get the LWR Version
7
- let version;
7
+ let lwrVersion;
8
8
  if (globalThis.LWR_VERSION) {
9
- version = globalThis.LWR_VERSION;
9
+ lwrVersion = globalThis.LWR_VERSION;
10
10
  } else {
11
- version = JSON.parse(fs.readFileSync(path.join(rootPath, 'package.json'), 'utf-8')).version;
11
+ lwrVersion = JSON.parse(fs.readFileSync(path.join(rootPath, 'package.json'), 'utf-8')).version;
12
12
  }
13
13
 
14
14
  // Get the LWC Version
15
15
  let lwcVersion;
16
16
  if (globalThis.LWC_VERSION) {
17
- version = globalThis.LWC_VERSION;
17
+ lwcVersion = globalThis.LWC_VERSION;
18
18
  } else {
19
19
  try {
20
20
  const packageJsonPath = resolve.sync(`lwc/package.json`);
@@ -26,8 +26,23 @@ if (globalThis.LWC_VERSION) {
26
26
  }
27
27
  }
28
28
 
29
+ // Get the PWA Kit Dev Runtime Version
30
+ let pwaKitRuntimeVersion;
31
+ try {
32
+ const packageJsonPath = resolve.sync(`@salesforce/pwa-kit-runtime/package.json`);
33
+ const { version: packageVersion } = JSON.parse(fs.readFileSync(packageJsonPath), 'utf-8');
34
+ pwaKitRuntimeVersion = packageVersion;
35
+ } catch(err) {
36
+ console.log(`[config] peer dependency pwa-kit-runtime was not provided`);
37
+ pwaKitRuntimeVersion = 'not-provided';
38
+ }
39
+
40
+ const nodeVersion = process.version
41
+
29
42
  module.exports = {
30
43
  rootPath,
31
- version,
32
- lwcVersion
44
+ lwrVersion,
45
+ lwcVersion,
46
+ nodeVersion,
47
+ pwaKitRuntimeVersion
33
48
  };
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "0.12.0-alpha.3",
7
+ "version": "0.12.0-alpha.5",
8
8
  "homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
9
9
  "repository": {
10
10
  "type": "git",
@@ -27,7 +27,11 @@
27
27
  "import": "./build/es/modules.js",
28
28
  "require": "./build/cjs/modules.cjs"
29
29
  },
30
- "./package": "./package.cjs"
30
+ "./package": "./package.cjs",
31
+ "./info/route-handler": {
32
+ "import": "./build/es/info/route-handler.js",
33
+ "require": "./build/cjs/info/route-handler.cjs"
34
+ }
31
35
  },
32
36
  "files": [
33
37
  "build/**/*.js",
@@ -41,14 +45,14 @@
41
45
  "test": "jest"
42
46
  },
43
47
  "dependencies": {
44
- "@lwrjs/diagnostics": "0.12.0-alpha.3",
45
- "@lwrjs/instrumentation": "0.12.0-alpha.3",
46
- "@lwrjs/shared-utils": "0.12.0-alpha.3",
48
+ "@lwrjs/diagnostics": "0.12.0-alpha.5",
49
+ "@lwrjs/instrumentation": "0.12.0-alpha.5",
50
+ "@lwrjs/shared-utils": "0.12.0-alpha.5",
47
51
  "fs-extra": "^11.1.1",
48
52
  "jsonc-parser": "^3.0.0"
49
53
  },
50
54
  "devDependencies": {
51
- "@lwrjs/types": "0.12.0-alpha.3",
55
+ "@lwrjs/types": "0.12.0-alpha.5",
52
56
  "jest": "^26.6.3",
53
57
  "ts-jest": "^26.5.6"
54
58
  },
@@ -69,5 +73,5 @@
69
73
  "volta": {
70
74
  "extends": "../../../package.json"
71
75
  },
72
- "gitHead": "48f97b40cbacce6cd6a6faee9206a465832c6774"
76
+ "gitHead": "cee1db278fe57d5221b0c9f6b3c8f6244cf94ae6"
73
77
  }