@lwrjs/config 0.15.0-alpha.16 → 0.15.0-alpha.18

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.
@@ -160,6 +160,7 @@ var DEFAULT_LWR_CONFIG = {
160
160
  viewTransformers: DEFAULT_VIEW_TRANSFORM_PLUGINS,
161
161
  environment: {},
162
162
  lwc: {modules: []},
163
+ caseSensitiveRoutes: false,
163
164
  routes: [
164
165
  LWR_INFO_ROUTE
165
166
  ],
@@ -169,7 +170,8 @@ var DEFAULT_LWR_CONFIG = {
169
170
  serverType: DEFAULT_SERVER_TYPE,
170
171
  locker: import_shared_utils.DEFAULT_LWR_LOCKER_CONFIG,
171
172
  uriTransformers: DEFAULT_URI_TRANSFORM_PLUGINS,
172
- i18n: import_runtime_config.DEFAULT_I18N_CONFIG
173
+ i18n: import_runtime_config.DEFAULT_I18N_CONFIG,
174
+ coreProxy: null
173
175
  };
174
176
  var DEFAULT_LWR_BOOTSTRAP_CONFIG = {
175
177
  autoBoot: true,
@@ -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",
@@ -202,6 +206,14 @@ var ValidationContext = class {
202
206
  });
203
207
  }
204
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
+ }
205
217
  assertIsPort(node, property) {
206
218
  if (node && (node.type !== "number" || node.value < 0 || node.value > 65353)) {
207
219
  this.diagnostics.push({
@@ -267,7 +279,7 @@ var ValidationContext = class {
267
279
  });
268
280
  }
269
281
  }
270
- assertIsBasePath(node, property) {
282
+ assertIsBasePath(node, property, allowSlash = false) {
271
283
  if (!node) {
272
284
  return;
273
285
  }
@@ -276,7 +288,7 @@ var ValidationContext = class {
276
288
  description: import_diagnostics.descriptions.CONFIG_PARSER.INCORRECT_NODE_TYPE(property, "string", node.type),
277
289
  location: this.getLocationFromNode(node)
278
290
  });
279
- } else if (node.value === "") {
291
+ } else if (node.value === "" || allowSlash && node.value === "/") {
280
292
  return;
281
293
  } else if (node.value.match(BASE_PATH_REGEX) === null) {
282
294
  this.diagnostics.push({
@@ -534,4 +546,23 @@ var ValidationContext = class {
534
546
  });
535
547
  }
536
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
+ }
537
568
  };
@@ -242,6 +242,7 @@ function validateRoot(node, validationContext, preMerge) {
242
242
  validationContext.assertUniqueIds([...routes?.children || [], ...errorRoutes?.children || []], "routes");
243
243
  const lockerNode = (0, import_jsonc_parser.findNodeAtLocation)(node, ["locker"]);
244
244
  const bundleConfigNode = (0, import_jsonc_parser.findNodeAtLocation)(node, ["bundleConfig"]);
245
+ validationContext.assertIsBoolean((0, import_jsonc_parser.findNodeAtLocation)(node, ["caseSensitiveRoutes"]), "caseSensitiveRoutes");
245
246
  validateRoutes(routes, validationContext, preMerge);
246
247
  validateErrorRoutes(errorRoutes, validationContext);
247
248
  validateRouteHandlers((0, import_jsonc_parser.findNodeAtLocation)(node, ["routeHandlers"]), validationContext);
@@ -271,6 +272,7 @@ function validateRoot(node, validationContext, preMerge) {
271
272
  validationContext.assertNotEmptyArray((0, import_jsonc_parser.findNodeAtLocation)(node, ["lwc", "modules"]), "lwc.modules");
272
273
  validationContext.assertIsEnvironment((0, import_jsonc_parser.findNodeAtLocation)(node, ["environment"]), "environment");
273
274
  validationContext.assertIsBasePath((0, import_jsonc_parser.findNodeAtLocation)(node, ["basePath"]), "basePath");
275
+ validationContext.assertIsCoreProxy((0, import_jsonc_parser.findNodeAtLocation)(node, ["coreProxy"]), validationContext);
274
276
  }
275
277
  function validateLwrAppConfig(config, phase) {
276
278
  const span = (0, import_instrumentation.getTracer)().startSpan({name: import_instrumentation.ConfigSpan.ValidateConfig});
@@ -135,6 +135,7 @@ export const DEFAULT_LWR_CONFIG = {
135
135
  viewTransformers: DEFAULT_VIEW_TRANSFORM_PLUGINS,
136
136
  environment: {},
137
137
  lwc: { modules: [] },
138
+ caseSensitiveRoutes: false,
138
139
  routes: [
139
140
  LWR_INFO_ROUTE,
140
141
  ],
@@ -145,6 +146,7 @@ export const DEFAULT_LWR_CONFIG = {
145
146
  locker: DEFAULT_LWR_LOCKER_CONFIG,
146
147
  uriTransformers: DEFAULT_URI_TRANSFORM_PLUGINS,
147
148
  i18n: DEFAULT_I18N_CONFIG,
149
+ coreProxy: null, // unset by default
148
150
  };
149
151
  export const DEFAULT_LWR_BOOTSTRAP_CONFIG = {
150
152
  autoBoot: true,
@@ -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,12 +25,14 @@ 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"];
@@ -46,13 +49,14 @@ export declare class ValidationContext {
46
49
  assertIsSpecifier(node: Node | undefined, property: string): void;
47
50
  assertIsFilePattern(node: Node | undefined, property: string): void;
48
51
  assertIsPath(node: Node | undefined, property: string): void;
52
+ assertIsOrigin(node: Node | undefined, property: string): void;
49
53
  assertIsPort(node: Node | undefined, property: string): void;
50
54
  assertIsServerType(node: Node | undefined, property: string): void;
51
55
  assertIsStaticSiteGenerator(node: Node | undefined, property: string): void;
52
56
  assertIsMethod(node: Node | undefined, property: string): void;
53
57
  assertIsStatus(node: Node | undefined, property: string): void;
54
58
  assertIsEnvironment(node: Node | undefined, property: string): void;
55
- assertIsBasePath(node: Node | undefined, property: string): void;
59
+ assertIsBasePath(node: Node | undefined, property: string, allowSlash?: boolean): void;
56
60
  assertNotEmptyString(node: Node | undefined, property: string): void;
57
61
  assertNotEmptyArray(node: Node | undefined, property: string): void;
58
62
  assertHasOneOrMore(node: Node, property: string, childProps: string[]): void;
@@ -70,6 +74,7 @@ export declare class ValidationContext {
70
74
  assertDefaultInLocales(node: Node, defaultLocale: string, localesIds: string[]): void;
71
75
  assertFallbackIds(nodes: Node[]): void;
72
76
  assertSsrPreloadData(node: Node, propPrefix: string): void;
77
+ assertIsCoreProxy(node: Node | undefined, validationContext: ValidationContext): void;
73
78
  }
74
79
  export {};
75
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',
@@ -166,6 +169,14 @@ export class ValidationContext {
166
169
  });
167
170
  }
168
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
+ }
169
180
  assertIsPort(node, property) {
170
181
  if (node && (node.type !== 'number' || node.value < 0 || node.value > 65353)) {
171
182
  this.diagnostics.push({
@@ -231,7 +242,7 @@ export class ValidationContext {
231
242
  });
232
243
  }
233
244
  }
234
- assertIsBasePath(node, property) {
245
+ assertIsBasePath(node, property, allowSlash = false) {
235
246
  if (!node) {
236
247
  return;
237
248
  }
@@ -241,7 +252,7 @@ export class ValidationContext {
241
252
  location: this.getLocationFromNode(node),
242
253
  });
243
254
  }
244
- else if (node.value === '') {
255
+ else if (node.value === '' || allowSlash && node.value === '/') {
245
256
  return;
246
257
  }
247
258
  else if (node.value.match(BASE_PATH_REGEX) === null) {
@@ -521,5 +532,25 @@ export class ValidationContext {
521
532
  });
522
533
  }
523
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
+ }
524
555
  }
525
556
  //# sourceMappingURL=app-config-context.js.map
@@ -311,6 +311,7 @@ function validateRoot(node, validationContext, preMerge) {
311
311
  validationContext.assertUniqueIds([...(routes?.children || []), ...(errorRoutes?.children || [])], 'routes');
312
312
  const lockerNode = findNode(node, ['locker']);
313
313
  const bundleConfigNode = findNode(node, ['bundleConfig']);
314
+ validationContext.assertIsBoolean(findNode(node, ['caseSensitiveRoutes']), 'caseSensitiveRoutes');
314
315
  validateRoutes(routes, validationContext, preMerge);
315
316
  validateErrorRoutes(errorRoutes, validationContext);
316
317
  validateRouteHandlers(findNode(node, ['routeHandlers']), validationContext);
@@ -340,6 +341,7 @@ function validateRoot(node, validationContext, preMerge) {
340
341
  validationContext.assertNotEmptyArray(findNode(node, ['lwc', 'modules']), 'lwc.modules');
341
342
  validationContext.assertIsEnvironment(findNode(node, ['environment']), 'environment');
342
343
  validationContext.assertIsBasePath(findNode(node, ['basePath']), 'basePath');
344
+ validationContext.assertIsCoreProxy(findNode(node, ['coreProxy']), validationContext);
343
345
  }
344
346
  export function validateLwrAppConfig(config, phase) {
345
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.16",
7
+ "version": "0.15.0-alpha.18",
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.16",
46
- "@lwrjs/instrumentation": "0.15.0-alpha.16",
47
- "@lwrjs/shared-utils": "0.15.0-alpha.16",
45
+ "@lwrjs/diagnostics": "0.15.0-alpha.18",
46
+ "@lwrjs/instrumentation": "0.15.0-alpha.18",
47
+ "@lwrjs/shared-utils": "0.15.0-alpha.18",
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.16",
52
+ "@lwrjs/types": "0.15.0-alpha.18",
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": "7aed7f695758ebce4869f0f3d42c54b057fc4d76"
74
+ "gitHead": "fefc639770948be769b1ace03b7759e7b8906cae"
75
75
  }