@lwrjs/config 0.15.0-alpha.2 → 0.15.0-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -37,11 +37,15 @@ __export(exports, {
37
37
  DEFAULT_ROOT_DIR: () => DEFAULT_ROOT_DIR,
38
38
  DEFAULT_SERVICE_PACKAGE_NAME: () => DEFAULT_SERVICE_PACKAGE_NAME,
39
39
  LWR_INFO_ROUTE: () => LWR_INFO_ROUTE,
40
+ MIN_LWC_VERSION: () => MIN_LWC_VERSION,
41
+ MIN_LWR_VERSION: () => MIN_LWR_VERSION,
40
42
  getDefaultBundleConfig: () => getDefaultBundleConfig
41
43
  });
42
44
  var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
43
45
  var import_runtime_config = __toModule(require("./runtime-config.cjs"));
44
46
  var import_package = __toModule(require("@lwrjs/config/package"));
47
+ var MIN_LWR_VERSION = "0.12.0";
48
+ var MIN_LWC_VERSION = "6.1.0";
45
49
  var PORT = process.env.PORT ? parseInt(process.env.PORT, 10) : 3e3;
46
50
  var MODE = process.env.MODE || "prod";
47
51
  var DEFAULT_BASE_PATH = "";
@@ -156,6 +160,7 @@ var DEFAULT_LWR_CONFIG = {
156
160
  viewTransformers: DEFAULT_VIEW_TRANSFORM_PLUGINS,
157
161
  environment: {},
158
162
  lwc: {modules: []},
163
+ caseSensitiveRoutes: false,
159
164
  routes: [
160
165
  LWR_INFO_ROUTE
161
166
  ],
@@ -165,7 +170,8 @@ var DEFAULT_LWR_CONFIG = {
165
170
  serverType: DEFAULT_SERVER_TYPE,
166
171
  locker: import_shared_utils.DEFAULT_LWR_LOCKER_CONFIG,
167
172
  uriTransformers: DEFAULT_URI_TRANSFORM_PLUGINS,
168
- i18n: import_runtime_config.DEFAULT_I18N_CONFIG
173
+ i18n: import_runtime_config.DEFAULT_I18N_CONFIG,
174
+ coreProxy: null
169
175
  };
170
176
  var DEFAULT_LWR_BOOTSTRAP_CONFIG = {
171
177
  autoBoot: true,
@@ -175,9 +181,14 @@ var DEFAULT_LWR_BOOTSTRAP_CONFIG = {
175
181
  configAsSrc: false,
176
182
  ssr: false,
177
183
  preloadData: false,
184
+ proxyForSSR: false,
185
+ includeCookiesForSSR: false,
178
186
  mixedMode: false,
179
187
  module: void 0,
180
188
  preloadModules: [],
181
189
  lwrVersion: import_package.lwrVersion,
182
- lwcVersion: import_package.lwcVersion
190
+ lwcVersion: import_package.lwcVersion,
191
+ preloadResources: {
192
+ patterns: []
193
+ }
183
194
  };
@@ -96,7 +96,7 @@ function executeStartHooks(hooks, globalConfig, runtimeEnvironment, skipValidate
96
96
  };
97
97
  hook.onStart(onStartConfig);
98
98
  runtimeEnvironment.basePath = globalConfig.basePath = onStartConfig.basePath || "";
99
- globalConfig.i18n = onStartConfig.i18n;
99
+ runtimeEnvironment.i18n = globalConfig.i18n = onStartConfig.i18n;
100
100
  globalConfig.routes = onStartConfig.routes || [];
101
101
  globalConfig.errorRoutes = onStartConfig.errorRoutes || [];
102
102
  }
@@ -28,6 +28,8 @@ __export(exports, {
28
28
  DEFAULT_LWR_BOOTSTRAP_CONFIG: () => import_defaults.DEFAULT_LWR_BOOTSTRAP_CONFIG,
29
29
  LWC_VERSION: () => import_package.lwcVersion,
30
30
  LWR_VERSION: () => import_package.lwrVersion,
31
+ MIN_LWC_VERSION: () => import_defaults.MIN_LWC_VERSION,
32
+ MIN_LWR_VERSION: () => import_defaults.MIN_LWR_VERSION,
31
33
  NODE_VERSION: () => import_package.nodeVersion,
32
34
  PWA_KIT_RUNTIME_VERSION: () => import_package.pwaKitRuntimeVersion,
33
35
  getLwrConfigFromFile: () => import_global_config.getLwrConfigFromFile,
@@ -28,6 +28,7 @@ __export(exports, {
28
28
  ASSET_FILE_ATTRIBUTE_KEYS: () => ASSET_FILE_ATTRIBUTE_KEYS,
29
29
  BASE_PATH_REGEX: () => BASE_PATH_REGEX,
30
30
  BOOTSTRAP_ATTRIBUTE_KEYS: () => BOOTSTRAP_ATTRIBUTE_KEYS,
31
+ CORE_PROXY_ATTRIBUTE_KEYS: () => CORE_PROXY_ATTRIBUTE_KEYS,
31
32
  ERROR_ROUTE_ATTRIBUTE_KEYS: () => ERROR_ROUTE_ATTRIBUTE_KEYS,
32
33
  I18N_ATTRIBUTE_KEYS: () => I18N_ATTRIBUTE_KEYS,
33
34
  LOCKER_ATTRIBUTE_KEYS: () => LOCKER_ATTRIBUTE_KEYS,
@@ -52,7 +53,9 @@ var ROOT_ATTRIBUTE_KEYS = createKeys("root", [
52
53
  "bundleConfig",
53
54
  "bundleProviders",
54
55
  "cacheDir",
56
+ "caseSensitiveRoutes",
55
57
  "contentDir",
58
+ "coreProxy",
56
59
  "environment",
57
60
  "errorRoutes",
58
61
  "esmLoader",
@@ -85,6 +88,7 @@ var ASSET_DIR_ATTRIBUTE_KEYS = createKeys("assetDir", ["alias", "dir", "urlPath"
85
88
  var ASSET_FILE_ATTRIBUTE_KEYS = createKeys("assetFile", ["alias", "file", "urlPath"]);
86
89
  var LOCKER_ATTRIBUTE_KEYS = createKeys("locker", ["enabled", "trustedComponents"]);
87
90
  var I18N_ATTRIBUTE_KEYS = createKeys("i18n", ["defaultLocale", "locales", "uriPattern"]);
91
+ var CORE_PROXY_ATTRIBUTE_KEYS = createKeys("coreProxy", ["origin", "host", "servername", "sitePath"]);
88
92
  var STATIC_SITE_GENERATOR_ATTRIBUTE_KEYS = createKeys("staticSiteGenerator", [
89
93
  "outputDir",
90
94
  "skipBaseDocumentGeneration",
@@ -125,11 +129,14 @@ var BOOTSTRAP_ATTRIBUTE_KEYS = createKeys("bootstrap", [
125
129
  "configAsSrc",
126
130
  "ssr",
127
131
  "preloadData",
132
+ "proxyForSSR",
133
+ "includeCookiesForSSR",
128
134
  "mixedMode",
129
135
  "module",
130
136
  "preloadModules",
131
137
  "lwrVersion",
132
- "lwcVersion"
138
+ "lwcVersion",
139
+ "preloadResources"
133
140
  ]);
134
141
  function isNotEmptyString(node) {
135
142
  return node.type === "string" && node.value.length > 0;
@@ -144,7 +151,7 @@ var ValidationContext = class {
144
151
  return (0, import_helpers.calculatePositionFromSource)(this.sourceText, node);
145
152
  }
146
153
  assertIsObject(node, property) {
147
- if (node.type !== "object") {
154
+ if (node?.type !== "object" && node) {
148
155
  this.diagnostics.push({
149
156
  description: import_diagnostics.descriptions.CONFIG_PARSER.INCORRECT_NODE_TYPE(property, "object", node.type),
150
157
  location: this.getLocationFromNode(node)
@@ -175,6 +182,22 @@ var ValidationContext = class {
175
182
  });
176
183
  }
177
184
  }
185
+ assertIsFilePattern(node, property) {
186
+ const fileExtRegex = /^\.[a-zA-Z0-9]+$/;
187
+ if (node) {
188
+ const children = node.children || [];
189
+ for (const [index, child] of children.entries()) {
190
+ const match = (0, import_jsonc_parser.findNodeAtLocation)(child, ["match"])?.value;
191
+ if (!fileExtRegex.test(match)) {
192
+ this.diagnostics.push({
193
+ description: import_diagnostics.descriptions.CONFIG_PARSER.INVALID_FILE_PATTERN(`${property}[${index}].match`, match),
194
+ location: this.getLocationFromNode(node)
195
+ });
196
+ break;
197
+ }
198
+ }
199
+ }
200
+ }
178
201
  assertIsPath(node, property) {
179
202
  if (node && (node.type !== "string" || node.value[0] !== "/")) {
180
203
  this.diagnostics.push({
@@ -183,6 +206,14 @@ var ValidationContext = class {
183
206
  });
184
207
  }
185
208
  }
209
+ assertIsOrigin(node, property) {
210
+ if (node && (node.type !== "string" || !/^https?:\/\//i.test(node.value))) {
211
+ this.diagnostics.push({
212
+ description: import_diagnostics.descriptions.CONFIG_PARSER.INVALID_ORIGIN(property, node.value),
213
+ location: this.getLocationFromNode(node)
214
+ });
215
+ }
216
+ }
186
217
  assertIsPort(node, property) {
187
218
  if (node && (node.type !== "number" || node.value < 0 || node.value > 65353)) {
188
219
  this.diagnostics.push({
@@ -248,7 +279,7 @@ var ValidationContext = class {
248
279
  });
249
280
  }
250
281
  }
251
- assertIsBasePath(node, property) {
282
+ assertIsBasePath(node, property, allowSlash = false) {
252
283
  if (!node) {
253
284
  return;
254
285
  }
@@ -257,7 +288,7 @@ var ValidationContext = class {
257
288
  description: import_diagnostics.descriptions.CONFIG_PARSER.INCORRECT_NODE_TYPE(property, "string", node.type),
258
289
  location: this.getLocationFromNode(node)
259
290
  });
260
- } else if (node.value === "") {
291
+ } else if (node.value === "" || allowSlash && node.value === "/") {
261
292
  return;
262
293
  } else if (node.value.match(BASE_PATH_REGEX) === null) {
263
294
  this.diagnostics.push({
@@ -515,4 +546,23 @@ var ValidationContext = class {
515
546
  });
516
547
  }
517
548
  }
549
+ assertIsCoreProxy(node, validationContext) {
550
+ if (node && node.type !== "null") {
551
+ validationContext.assertIsObject(node, "coreProxy");
552
+ validationContext.assertValidKeys(node, "coreProxy", CORE_PROXY_ATTRIBUTE_KEYS);
553
+ validationContext.assertRequiredKeys(node, "coreProxy", ["origin", "host"]);
554
+ validationContext.assertIsOrigin((0, import_jsonc_parser.findNodeAtLocation)(node, ["origin"]), "coreProxy.origin");
555
+ validationContext.assertNotEmptyString((0, import_jsonc_parser.findNodeAtLocation)(node, ["host"]), "coreProxy.host");
556
+ const servername = (0, import_jsonc_parser.findNodeAtLocation)(node, ["servername"]);
557
+ const sitePath = (0, import_jsonc_parser.findNodeAtLocation)(node, ["sitePath"]);
558
+ if (!servername && !sitePath) {
559
+ this.diagnostics.push({
560
+ description: import_diagnostics.descriptions.CONFIG_PARSER.INCOMPLETE_CORE_PROXY(),
561
+ location: this.getLocationFromNode(node)
562
+ });
563
+ }
564
+ servername && validationContext.assertNotEmptyString(servername, "coreProxy.servername");
565
+ sitePath && validationContext.assertIsBasePath(sitePath, "coreProxy.sitePath", true);
566
+ }
567
+ }
518
568
  };
@@ -48,6 +48,8 @@ function validateBootstrap(node, validationContext, propPrefix) {
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
50
  validationContext.assertIsBoolean((0, import_jsonc_parser.findNodeAtLocation)(node, ["preloadData"]), `${propPrefix}.preloadData`);
51
+ validationContext.assertIsBoolean((0, import_jsonc_parser.findNodeAtLocation)(node, ["proxyForSSR"]), `${propPrefix}.proxyForSSR`);
52
+ validationContext.assertIsBoolean((0, import_jsonc_parser.findNodeAtLocation)(node, ["includeCookiesForSSR"]), `${propPrefix}.includeCookiesForSSR`);
51
53
  validationContext.assertIsBoolean((0, import_jsonc_parser.findNodeAtLocation)(node, ["mixedMode"]), `${propPrefix}.mixedMode`);
52
54
  validationContext.assertIsBoolean((0, import_jsonc_parser.findNodeAtLocation)(node, ["configAsSrc"]), `${propPrefix}.configAsSrc`);
53
55
  validationContext.assertIsSpecifier((0, import_jsonc_parser.findNodeAtLocation)(node, ["module"]), `${propPrefix}.module`);
@@ -55,6 +57,7 @@ function validateBootstrap(node, validationContext, propPrefix) {
55
57
  validationContext.assertNotEmptyString((0, import_jsonc_parser.findNodeAtLocation)(node, ["lwrVersion"]), `${propPrefix}.lwrVersion`);
56
58
  validationContext.assertNotEmptyString((0, import_jsonc_parser.findNodeAtLocation)(node, ["lwcVersion"]), `${propPrefix}.lwcVersion`);
57
59
  validationContext.assertSsrPreloadData(node, propPrefix);
60
+ validationContext.assertIsFilePattern((0, import_jsonc_parser.findNodeAtLocation)(node, ["preloadResources", "patterns"]), `${propPrefix}.preloadResources.patterns`);
58
61
  const workers = (0, import_jsonc_parser.findNodeAtLocation)(node, ["workers"]);
59
62
  if (workers && workers.children) {
60
63
  workers.children.forEach((w, index) => {
@@ -239,6 +242,7 @@ function validateRoot(node, validationContext, preMerge) {
239
242
  validationContext.assertUniqueIds([...routes?.children || [], ...errorRoutes?.children || []], "routes");
240
243
  const lockerNode = (0, import_jsonc_parser.findNodeAtLocation)(node, ["locker"]);
241
244
  const bundleConfigNode = (0, import_jsonc_parser.findNodeAtLocation)(node, ["bundleConfig"]);
245
+ validationContext.assertIsBoolean((0, import_jsonc_parser.findNodeAtLocation)(node, ["caseSensitiveRoutes"]), "caseSensitiveRoutes");
242
246
  validateRoutes(routes, validationContext, preMerge);
243
247
  validateErrorRoutes(errorRoutes, validationContext);
244
248
  validateRouteHandlers((0, import_jsonc_parser.findNodeAtLocation)(node, ["routeHandlers"]), validationContext);
@@ -268,6 +272,7 @@ function validateRoot(node, validationContext, preMerge) {
268
272
  validationContext.assertNotEmptyArray((0, import_jsonc_parser.findNodeAtLocation)(node, ["lwc", "modules"]), "lwc.modules");
269
273
  validationContext.assertIsEnvironment((0, import_jsonc_parser.findNodeAtLocation)(node, ["environment"]), "environment");
270
274
  validationContext.assertIsBasePath((0, import_jsonc_parser.findNodeAtLocation)(node, ["basePath"]), "basePath");
275
+ validationContext.assertIsCoreProxy((0, import_jsonc_parser.findNodeAtLocation)(node, ["coreProxy"]), validationContext);
271
276
  }
272
277
  function validateLwrAppConfig(config, phase) {
273
278
  const span = (0, import_instrumentation.getTracer)().startSpan({name: import_instrumentation.ConfigSpan.ValidateConfig});
@@ -1,4 +1,18 @@
1
1
  import type { BundleConfig, LwrGlobalConfig, LwrRoute, NormalizedLwrAppBootstrapConfig, StaticSiteGenerator } from '@lwrjs/types';
2
+ /**
3
+ * MIN_LWR_VERSION
4
+ * Minimum LWR version required for the routes to function properly.
5
+ * Anytime we believe we are checking in a breaking change, the required version should be updated
6
+ * manually for all routes to continue functioning properly.
7
+ */
8
+ export declare const MIN_LWR_VERSION = "0.12.0";
9
+ /**
10
+ * MIN_LWC_VERSION
11
+ * Minimum LWC version required for the routes to function properly.
12
+ * Anytime we believe we are checking in a breaking change, the required version should be updated
13
+ * manually for all routes to continue functioning properly.
14
+ */
15
+ export declare const MIN_LWC_VERSION = "6.1.0";
2
16
  export declare const DEFAULT_LWR_CONFIG_JSON = "$rootDir/lwr.config.json";
3
17
  export declare const DEFAULT_GENERATOR_CONFIG: StaticSiteGenerator;
4
18
  export declare const DEFAULT_ROOT_DIR: string;
@@ -1,6 +1,20 @@
1
1
  import { DEFAULT_LWR_LOCKER_CONFIG, getFeatureFlags } from '@lwrjs/shared-utils';
2
2
  import { DEFAULT_I18N_CONFIG, getServerModeConfig } from './runtime-config.js';
3
3
  import { lwrVersion as LWR_VERSION, lwcVersion as LWC_VERSION } from '@lwrjs/config/package';
4
+ /**
5
+ * MIN_LWR_VERSION
6
+ * Minimum LWR version required for the routes to function properly.
7
+ * Anytime we believe we are checking in a breaking change, the required version should be updated
8
+ * manually for all routes to continue functioning properly.
9
+ */
10
+ export const MIN_LWR_VERSION = '0.12.0';
11
+ /**
12
+ * MIN_LWC_VERSION
13
+ * Minimum LWC version required for the routes to function properly.
14
+ * Anytime we believe we are checking in a breaking change, the required version should be updated
15
+ * manually for all routes to continue functioning properly.
16
+ */
17
+ export const MIN_LWC_VERSION = '6.1.0';
4
18
  const PORT = process.env.PORT ? parseInt(process.env.PORT, 10) : 3000;
5
19
  const MODE = process.env.MODE || 'prod';
6
20
  const DEFAULT_BASE_PATH = '';
@@ -121,6 +135,7 @@ export const DEFAULT_LWR_CONFIG = {
121
135
  viewTransformers: DEFAULT_VIEW_TRANSFORM_PLUGINS,
122
136
  environment: {},
123
137
  lwc: { modules: [] },
138
+ caseSensitiveRoutes: false,
124
139
  routes: [
125
140
  LWR_INFO_ROUTE,
126
141
  ],
@@ -131,6 +146,7 @@ export const DEFAULT_LWR_CONFIG = {
131
146
  locker: DEFAULT_LWR_LOCKER_CONFIG,
132
147
  uriTransformers: DEFAULT_URI_TRANSFORM_PLUGINS,
133
148
  i18n: DEFAULT_I18N_CONFIG,
149
+ coreProxy: null, // unset by default
134
150
  };
135
151
  export const DEFAULT_LWR_BOOTSTRAP_CONFIG = {
136
152
  autoBoot: true,
@@ -140,10 +156,15 @@ export const DEFAULT_LWR_BOOTSTRAP_CONFIG = {
140
156
  configAsSrc: false,
141
157
  ssr: false,
142
158
  preloadData: false,
159
+ proxyForSSR: false,
160
+ includeCookiesForSSR: false,
143
161
  mixedMode: false,
144
162
  module: undefined,
145
163
  preloadModules: [],
146
164
  lwrVersion: LWR_VERSION,
147
- lwcVersion: LWC_VERSION
165
+ lwcVersion: LWC_VERSION,
166
+ preloadResources: {
167
+ patterns: []
168
+ },
148
169
  };
149
170
  //# sourceMappingURL=defaults.js.map
package/build/es/hooks.js CHANGED
@@ -98,7 +98,7 @@ export function executeStartHooks(hooks, globalConfig, runtimeEnvironment, skipV
98
98
  hook.onStart(onStartConfig);
99
99
  // copy updated values back to the globalConfig
100
100
  runtimeEnvironment.basePath = globalConfig.basePath = onStartConfig.basePath || '';
101
- globalConfig.i18n = onStartConfig.i18n;
101
+ runtimeEnvironment.i18n = globalConfig.i18n = onStartConfig.i18n;
102
102
  globalConfig.routes = (onStartConfig.routes || []);
103
103
  globalConfig.errorRoutes = (onStartConfig.errorRoutes || []);
104
104
  }
@@ -2,6 +2,6 @@ export { lwrVersion as LWR_VERSION, lwcVersion as LWC_VERSION, nodeVersion as NO
2
2
  export { loadConfig, resolveGlobalConfig as normalizeConfig, getLwrConfigFromFile } from './global-config.js';
3
3
  export { getRuntimeEnvironment, DEFAULT_I18N_CONFIG } from './runtime-config.js';
4
4
  export * from './hooks.js';
5
- export { DEFAULT_LWR_BOOTSTRAP_CONFIG } from './defaults.js';
5
+ export { DEFAULT_LWR_BOOTSTRAP_CONFIG, MIN_LWR_VERSION, MIN_LWC_VERSION } from './defaults.js';
6
6
  export { validateLwrAppConfig } from './validation/app-config.js';
7
7
  //# sourceMappingURL=index.d.ts.map
package/build/es/index.js CHANGED
@@ -2,6 +2,6 @@ export { lwrVersion as LWR_VERSION, lwcVersion as LWC_VERSION, nodeVersion as NO
2
2
  export { loadConfig, resolveGlobalConfig as normalizeConfig, getLwrConfigFromFile } from './global-config.js';
3
3
  export { getRuntimeEnvironment, DEFAULT_I18N_CONFIG } from './runtime-config.js';
4
4
  export * from './hooks.js';
5
- export { DEFAULT_LWR_BOOTSTRAP_CONFIG } from './defaults.js';
5
+ export { DEFAULT_LWR_BOOTSTRAP_CONFIG, MIN_LWR_VERSION, MIN_LWC_VERSION } from './defaults.js';
6
6
  export { validateLwrAppConfig } from './validation/app-config.js';
7
7
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import type { AssetDirConfig, AssetFileConfig, LwrErrorRoute, LwrRoute, NormalizedLwrGlobalConfig, NormalizedLwrAppBootstrapConfig, LwrLockerConfig, RouteHandlersConfig, BundleConfig, I18NConfig, Locale, StaticSiteGenerator } from '@lwrjs/types';
1
+ import type { AssetDirConfig, AssetFileConfig, DirectToCoreProxy, LwrErrorRoute, LwrRoute, NormalizedLwrGlobalConfig, NormalizedLwrAppBootstrapConfig, LwrLockerConfig, RouteHandlersConfig, BundleConfig, I18NConfig, Locale, StaticSiteGenerator } from '@lwrjs/types';
2
2
  import { Node } from 'jsonc-parser';
3
3
  import { Diagnostic } from '@lwrjs/diagnostics';
4
4
  type RequiredAssetDirConfig = Required<AssetDirConfig>;
@@ -9,6 +9,7 @@ type RequiredLwrLockerConfig = Required<LwrLockerConfig>;
9
9
  type RequiredI18NConfig = Required<I18NConfig>;
10
10
  type RequiredLocalesConfig = Required<Locale>;
11
11
  type RequiredSSGConfig = Required<StaticSiteGenerator>;
12
+ type RequiredDirectToCoreProxy = Required<DirectToCoreProxy>;
12
13
  interface ConfigMap {
13
14
  root: NormalizedLwrGlobalConfig;
14
15
  assetDir: RequiredAssetDirConfig;
@@ -24,34 +25,38 @@ interface ConfigMap {
24
25
  i18n: RequiredI18NConfig;
25
26
  'i18n.locales': RequiredLocalesConfig;
26
27
  staticSiteGenerator: RequiredSSGConfig;
28
+ coreProxy: RequiredDirectToCoreProxy;
27
29
  }
28
- export declare const ROOT_ATTRIBUTE_KEYS: ["amdLoader", "apiVersion", "assets", "assetProviders", "assetTransformers", "bundleConfig", "bundleProviders", "cacheDir", "contentDir", "environment", "errorRoutes", "esmLoader", "staticSiteGenerator", "globalData", "globalDataDir", "hooks", "i18n", "ignoreLwrConfigFile", "lwrConfigFile", "layoutsDir", "locker", "lwc", "lwrVersion", "moduleProviders", "port", "basePath", "resourceProviders", "rootDir", "routeHandlers", "routes", "serverMode", "minify", "serverType", "uriTransformers", "viewProviders", "viewTransformers"];
30
+ export declare const ROOT_ATTRIBUTE_KEYS: ["amdLoader", "apiVersion", "assets", "assetProviders", "assetTransformers", "bundleConfig", "bundleProviders", "cacheDir", "caseSensitiveRoutes", "contentDir", "coreProxy", "environment", "errorRoutes", "esmLoader", "staticSiteGenerator", "globalData", "globalDataDir", "hooks", "i18n", "ignoreLwrConfigFile", "lwrConfigFile", "layoutsDir", "locker", "lwc", "lwrVersion", "moduleProviders", "port", "basePath", "resourceProviders", "rootDir", "routeHandlers", "routes", "serverMode", "minify", "serverType", "uriTransformers", "viewProviders", "viewTransformers"];
29
31
  export declare const ASSET_DIR_ATTRIBUTE_KEYS: ["alias", "dir", "urlPath", "root"];
30
32
  export declare const ASSET_FILE_ATTRIBUTE_KEYS: ["alias", "file", "urlPath"];
31
33
  export declare const LOCKER_ATTRIBUTE_KEYS: ["enabled", "trustedComponents"];
32
34
  export declare const I18N_ATTRIBUTE_KEYS: ["defaultLocale", "locales", "uriPattern"];
35
+ export declare const CORE_PROXY_ATTRIBUTE_KEYS: ["origin", "host", "servername", "sitePath"];
33
36
  export declare const STATIC_SITE_GENERATOR_ATTRIBUTE_KEYS: ["outputDir", "skipBaseDocumentGeneration", "skipCleanOutputDir", "_additionalModules", "_additionalRoutePaths"];
34
37
  export declare const ROUTE_ATTRIBUTE_KEYS: ["bootstrap", "subRoutes", "contentTemplate", "id", "cache", "layoutTemplate", "method", "path", "rootComponent", "routeHandler", "properties"];
35
38
  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", "preloadData", "mixedMode", "module", "preloadModules", "lwrVersion", "lwcVersion"];
39
+ export declare const BOOTSTRAP_ATTRIBUTE_KEYS: ["autoBoot", "syntheticShadow", "workers", "services", "configAsSrc", "ssr", "preloadData", "proxyForSSR", "includeCookiesForSSR", "mixedMode", "module", "preloadModules", "lwrVersion", "lwcVersion", "preloadResources"];
37
40
  export declare const BASE_PATH_REGEX: RegExp;
38
41
  export declare class ValidationContext {
39
42
  diagnostics: Diagnostic[];
40
43
  sourceText: string;
41
44
  constructor(sourceText: string);
42
45
  private getLocationFromNode;
43
- assertIsObject<T extends keyof ConfigMap>(node: Node, property: T): void;
46
+ assertIsObject(node: Node | undefined, property: string): void;
44
47
  assertIsBoolean(node: Node | undefined, property: string): void;
45
48
  assertIsArray(node: Node | undefined, property: string): void;
46
49
  assertIsSpecifier(node: Node | undefined, property: string): void;
50
+ assertIsFilePattern(node: Node | undefined, property: string): void;
47
51
  assertIsPath(node: Node | undefined, property: string): void;
52
+ assertIsOrigin(node: Node | undefined, property: string): void;
48
53
  assertIsPort(node: Node | undefined, property: string): void;
49
54
  assertIsServerType(node: Node | undefined, property: string): void;
50
55
  assertIsStaticSiteGenerator(node: Node | undefined, property: string): void;
51
56
  assertIsMethod(node: Node | undefined, property: string): void;
52
57
  assertIsStatus(node: Node | undefined, property: string): void;
53
58
  assertIsEnvironment(node: Node | undefined, property: string): void;
54
- assertIsBasePath(node: Node | undefined, property: string): void;
59
+ assertIsBasePath(node: Node | undefined, property: string, allowSlash?: boolean): void;
55
60
  assertNotEmptyString(node: Node | undefined, property: string): void;
56
61
  assertNotEmptyArray(node: Node | undefined, property: string): void;
57
62
  assertHasOneOrMore(node: Node, property: string, childProps: string[]): void;
@@ -69,6 +74,7 @@ export declare class ValidationContext {
69
74
  assertDefaultInLocales(node: Node, defaultLocale: string, localesIds: string[]): void;
70
75
  assertFallbackIds(nodes: Node[]): void;
71
76
  assertSsrPreloadData(node: Node, propPrefix: string): void;
77
+ assertIsCoreProxy(node: Node | undefined, validationContext: ValidationContext): void;
72
78
  }
73
79
  export {};
74
80
  //# sourceMappingURL=app-config-context.d.ts.map
@@ -16,7 +16,9 @@ export const ROOT_ATTRIBUTE_KEYS = createKeys('root', [
16
16
  'bundleConfig',
17
17
  'bundleProviders',
18
18
  'cacheDir',
19
+ 'caseSensitiveRoutes',
19
20
  'contentDir',
21
+ 'coreProxy',
20
22
  'environment',
21
23
  'errorRoutes',
22
24
  'esmLoader',
@@ -49,6 +51,7 @@ export const ASSET_DIR_ATTRIBUTE_KEYS = createKeys('assetDir', ['alias', 'dir',
49
51
  export const ASSET_FILE_ATTRIBUTE_KEYS = createKeys('assetFile', ['alias', 'file', 'urlPath']);
50
52
  export const LOCKER_ATTRIBUTE_KEYS = createKeys('locker', ['enabled', 'trustedComponents']);
51
53
  export const I18N_ATTRIBUTE_KEYS = createKeys('i18n', ['defaultLocale', 'locales', 'uriPattern']);
54
+ export const CORE_PROXY_ATTRIBUTE_KEYS = createKeys('coreProxy', ['origin', 'host', 'servername', 'sitePath']);
52
55
  export const STATIC_SITE_GENERATOR_ATTRIBUTE_KEYS = createKeys('staticSiteGenerator', [
53
56
  'outputDir',
54
57
  'skipBaseDocumentGeneration',
@@ -89,11 +92,14 @@ export const BOOTSTRAP_ATTRIBUTE_KEYS = createKeys('bootstrap', [
89
92
  'configAsSrc',
90
93
  'ssr',
91
94
  'preloadData',
95
+ 'proxyForSSR',
96
+ 'includeCookiesForSSR',
92
97
  'mixedMode',
93
98
  'module',
94
99
  'preloadModules',
95
100
  'lwrVersion',
96
- 'lwcVersion'
101
+ 'lwcVersion',
102
+ 'preloadResources'
97
103
  ]);
98
104
  function isNotEmptyString(node) {
99
105
  return node.type === 'string' && node.value.length > 0;
@@ -108,7 +114,7 @@ export class ValidationContext {
108
114
  return calculatePositionFromSource(this.sourceText, node);
109
115
  }
110
116
  assertIsObject(node, property) {
111
- if (node.type !== 'object') {
117
+ if (node?.type !== 'object' && node) {
112
118
  this.diagnostics.push({
113
119
  description: descriptions.CONFIG_PARSER.INCORRECT_NODE_TYPE(property, 'object', node.type),
114
120
  location: this.getLocationFromNode(node),
@@ -139,6 +145,22 @@ export class ValidationContext {
139
145
  });
140
146
  }
141
147
  }
148
+ assertIsFilePattern(node, property) {
149
+ const fileExtRegex = /^\.[a-zA-Z0-9]+$/;
150
+ if (node) {
151
+ const children = node.children || [];
152
+ for (const [index, child] of children.entries()) {
153
+ const match = findNodeAtLocation(child, ['match'])?.value;
154
+ if (!fileExtRegex.test(match)) {
155
+ this.diagnostics.push({
156
+ description: descriptions.CONFIG_PARSER.INVALID_FILE_PATTERN(`${property}[${index}].match`, match),
157
+ location: this.getLocationFromNode(node)
158
+ });
159
+ break;
160
+ }
161
+ }
162
+ }
163
+ }
142
164
  assertIsPath(node, property) {
143
165
  if (node && (node.type !== 'string' || node.value[0] !== '/')) {
144
166
  this.diagnostics.push({
@@ -147,6 +169,14 @@ export class ValidationContext {
147
169
  });
148
170
  }
149
171
  }
172
+ assertIsOrigin(node, property) {
173
+ if (node && (node.type !== 'string' || !/^https?:\/\//i.test(node.value))) {
174
+ this.diagnostics.push({
175
+ description: descriptions.CONFIG_PARSER.INVALID_ORIGIN(property, node.value),
176
+ location: this.getLocationFromNode(node),
177
+ });
178
+ }
179
+ }
150
180
  assertIsPort(node, property) {
151
181
  if (node && (node.type !== 'number' || node.value < 0 || node.value > 65353)) {
152
182
  this.diagnostics.push({
@@ -212,7 +242,7 @@ export class ValidationContext {
212
242
  });
213
243
  }
214
244
  }
215
- assertIsBasePath(node, property) {
245
+ assertIsBasePath(node, property, allowSlash = false) {
216
246
  if (!node) {
217
247
  return;
218
248
  }
@@ -222,7 +252,7 @@ export class ValidationContext {
222
252
  location: this.getLocationFromNode(node),
223
253
  });
224
254
  }
225
- else if (node.value === '') {
255
+ else if (node.value === '' || allowSlash && node.value === '/') {
226
256
  return;
227
257
  }
228
258
  else if (node.value.match(BASE_PATH_REGEX) === null) {
@@ -502,5 +532,25 @@ export class ValidationContext {
502
532
  });
503
533
  }
504
534
  }
535
+ assertIsCoreProxy(node, validationContext) {
536
+ if (node && node.type !== 'null') {
537
+ validationContext.assertIsObject(node, 'coreProxy');
538
+ validationContext.assertValidKeys(node, 'coreProxy', CORE_PROXY_ATTRIBUTE_KEYS);
539
+ validationContext.assertRequiredKeys(node, 'coreProxy', ['origin', 'host']);
540
+ validationContext.assertIsOrigin(findNodeAtLocation(node, ['origin']), 'coreProxy.origin');
541
+ validationContext.assertNotEmptyString(findNodeAtLocation(node, ['host']), 'coreProxy.host');
542
+ // Validate locales the config has one of [servername, sitePath]
543
+ const servername = findNodeAtLocation(node, ['servername']);
544
+ const sitePath = findNodeAtLocation(node, ['sitePath']);
545
+ if (!servername && !sitePath) {
546
+ this.diagnostics.push({
547
+ description: descriptions.CONFIG_PARSER.INCOMPLETE_CORE_PROXY(),
548
+ location: this.getLocationFromNode(node),
549
+ });
550
+ }
551
+ servername && validationContext.assertNotEmptyString(servername, 'coreProxy.servername');
552
+ sitePath && validationContext.assertIsBasePath(sitePath, 'coreProxy.sitePath', true);
553
+ }
554
+ }
505
555
  }
506
556
  //# sourceMappingURL=app-config-context.js.map
@@ -17,10 +17,12 @@ export const SOURCE_BY_PHASE = {
17
17
  * - syntheticShadow: optional boolean
18
18
  * - workers: optional map of string:specifier pairs
19
19
  * - ssr: optional boolean
20
+ * - proxyForSSR: optional boolean
20
21
  * - configAsSrc: optional boolean to include the client bootstrap config as src via in-lined
21
22
  * - module: optional string specifier
22
23
  * - lwrVersion: optional string version
23
24
  * - lwcVersion: optional string version
25
+ * - preloadResources: optional object
24
26
  */
25
27
  function validateBootstrap(node, validationContext, propPrefix) {
26
28
  if (node) {
@@ -31,6 +33,8 @@ function validateBootstrap(node, validationContext, propPrefix) {
31
33
  validationContext.assertIsBoolean(findNode(node, ['autoBoot']), `${propPrefix}.autoBoot`);
32
34
  validationContext.assertIsBoolean(findNode(node, ['ssr']), `${propPrefix}.ssr`);
33
35
  validationContext.assertIsBoolean(findNode(node, ['preloadData']), `${propPrefix}.preloadData`);
36
+ validationContext.assertIsBoolean(findNode(node, ['proxyForSSR']), `${propPrefix}.proxyForSSR`);
37
+ validationContext.assertIsBoolean(findNode(node, ['includeCookiesForSSR']), `${propPrefix}.includeCookiesForSSR`);
34
38
  validationContext.assertIsBoolean(findNode(node, ['mixedMode']), `${propPrefix}.mixedMode`);
35
39
  validationContext.assertIsBoolean(findNode(node, ['configAsSrc']), `${propPrefix}.configAsSrc`);
36
40
  validationContext.assertIsSpecifier(findNode(node, ['module']), `${propPrefix}.module`);
@@ -38,6 +42,7 @@ function validateBootstrap(node, validationContext, propPrefix) {
38
42
  validationContext.assertNotEmptyString(findNode(node, ['lwrVersion']), `${propPrefix}.lwrVersion`);
39
43
  validationContext.assertNotEmptyString(findNode(node, ['lwcVersion']), `${propPrefix}.lwcVersion`);
40
44
  validationContext.assertSsrPreloadData(node, propPrefix);
45
+ validationContext.assertIsFilePattern(findNode(node, ['preloadResources', 'patterns']), `${propPrefix}.preloadResources.patterns`);
41
46
  // Each value in the worker map msut be a specifier
42
47
  const workers = findNode(node, ['workers']);
43
48
  if (workers && workers.children) {
@@ -306,6 +311,7 @@ function validateRoot(node, validationContext, preMerge) {
306
311
  validationContext.assertUniqueIds([...(routes?.children || []), ...(errorRoutes?.children || [])], 'routes');
307
312
  const lockerNode = findNode(node, ['locker']);
308
313
  const bundleConfigNode = findNode(node, ['bundleConfig']);
314
+ validationContext.assertIsBoolean(findNode(node, ['caseSensitiveRoutes']), 'caseSensitiveRoutes');
309
315
  validateRoutes(routes, validationContext, preMerge);
310
316
  validateErrorRoutes(errorRoutes, validationContext);
311
317
  validateRouteHandlers(findNode(node, ['routeHandlers']), validationContext);
@@ -335,6 +341,7 @@ function validateRoot(node, validationContext, preMerge) {
335
341
  validationContext.assertNotEmptyArray(findNode(node, ['lwc', 'modules']), 'lwc.modules');
336
342
  validationContext.assertIsEnvironment(findNode(node, ['environment']), 'environment');
337
343
  validationContext.assertIsBasePath(findNode(node, ['basePath']), 'basePath');
344
+ validationContext.assertIsCoreProxy(findNode(node, ['coreProxy']), validationContext);
338
345
  }
339
346
  export function validateLwrAppConfig(config, phase) {
340
347
  const span = getTracer().startSpan({ name: ConfigSpan.ValidateConfig });
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "0.15.0-alpha.2",
7
+ "version": "0.15.0-alpha.21",
8
8
  "homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
9
9
  "repository": {
10
10
  "type": "git",
@@ -42,14 +42,14 @@
42
42
  "test": "jest"
43
43
  },
44
44
  "dependencies": {
45
- "@lwrjs/diagnostics": "0.15.0-alpha.2",
46
- "@lwrjs/instrumentation": "0.15.0-alpha.2",
47
- "@lwrjs/shared-utils": "0.15.0-alpha.2",
45
+ "@lwrjs/diagnostics": "0.15.0-alpha.21",
46
+ "@lwrjs/instrumentation": "0.15.0-alpha.21",
47
+ "@lwrjs/shared-utils": "0.15.0-alpha.21",
48
48
  "fs-extra": "^11.2.0",
49
49
  "jsonc-parser": "^3.3.1"
50
50
  },
51
51
  "devDependencies": {
52
- "@lwrjs/types": "0.15.0-alpha.2",
52
+ "@lwrjs/types": "0.15.0-alpha.21",
53
53
  "jest": "^26.6.3",
54
54
  "memfs": "^4.9.3",
55
55
  "ts-jest": "^26.5.6"
@@ -71,5 +71,5 @@
71
71
  "volta": {
72
72
  "extends": "../../../package.json"
73
73
  },
74
- "gitHead": "58fda4341e2aa0f571a63d83f4aa59865e6a54bd"
74
+ "gitHead": "4c09ff654569ab490fc77f196d3230b31404940e"
75
75
  }