@lwrjs/core 0.6.0-alpha.13 → 0.6.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.
@@ -39,7 +39,16 @@ async function runConfigurationsHook(hookPlugins, lwrConfig, dataConfig, runtime
39
39
  for (const hookPlugin of hookPlugins) {
40
40
  await hookPlugin.initConfigs(lwrConfig, dataConfig, runtimeConfig);
41
41
  }
42
- (0, import_app_config.validateLwrAppConfig)(JSON.stringify(lwrConfig), "post");
42
+ try {
43
+ (0, import_app_config.validateLwrAppConfig)(JSON.stringify(lwrConfig), "post");
44
+ } catch (e) {
45
+ if (process.env.UNSAFE_IGNORE_CONFIG_VALIDATION === "true") {
46
+ console.warn("ignoring config validation errors due to UNSAFE_IGNORE_CONFIG_VALIDATION flag...proceed with caution");
47
+ console.dir(e, {depth: null});
48
+ } else {
49
+ throw e;
50
+ }
51
+ }
43
52
  normalizeRoutesBootstrap(lwrConfig);
44
53
  return {
45
54
  lwrConfig,
@@ -126,11 +126,18 @@ function createCacheFolder(cache, rootDir) {
126
126
  function getLwrConfigFromFile(rootDir, customDir = DEFAULT_LWR_CONFIG_JSON) {
127
127
  const lwrConfigPath = import_path.default.resolve((0, import_shared_utils.normalizeDirectory)(customDir, rootDir));
128
128
  if (import_fs.default.existsSync(lwrConfigPath)) {
129
+ const configAsString = (0, import_shared_utils.readFile)(lwrConfigPath);
129
130
  try {
130
- return (0, import_app_config.validateLwrAppConfig)((0, import_shared_utils.readFile)(lwrConfigPath), "file");
131
+ return (0, import_app_config.validateLwrAppConfig)(configAsString, "file");
131
132
  } catch (e) {
132
133
  if (e instanceof import_diagnostics.LwrConfigValidationError) {
133
- throw e;
134
+ if (process.env.UNSAFE_IGNORE_CONFIG_VALIDATION === "true") {
135
+ console.warn("ignoring config validation errors due to UNSAFE_IGNORE_CONFIG_VALIDATION flag...proceed with caution");
136
+ console.dir(e, {depth: null});
137
+ return JSON.parse(configAsString);
138
+ } else {
139
+ throw e;
140
+ }
134
141
  }
135
142
  return void 0;
136
143
  }
@@ -265,7 +272,16 @@ function trimLwrConfig(config) {
265
272
  function normalizeConfig(config) {
266
273
  if (config !== void 0) {
267
274
  config = trimLwrConfig(config);
268
- (0, import_app_config.validateLwrAppConfig)(JSON.stringify(config), "pre");
275
+ try {
276
+ (0, import_app_config.validateLwrAppConfig)(JSON.stringify(config), "pre");
277
+ } catch (e) {
278
+ if (process.env.UNSAFE_IGNORE_CONFIG_VALIDATION === "true") {
279
+ console.warn("ignoring config validation errors due to UNSAFE_IGNORE_CONFIG_VALIDATION flag...proceed with caution");
280
+ console.dir(e, {depth: null});
281
+ } else {
282
+ throw e;
283
+ }
284
+ }
269
285
  }
270
286
  const rootDir = import_path.default.resolve(config?.rootDir || DEFAULT_ROOT_DIR);
271
287
  const lwrJsonConfig = config?.ignoreLwrConfigFile === true ? void 0 : getLwrConfigFromFile(rootDir, config?.lwrConfigFile);
@@ -127,17 +127,12 @@ function apiMiddleware(app, context) {
127
127
  const {entry} = await moduleRegistry.getModuleEntry(importerModuleId);
128
128
  moduleId = {...moduleId, importer: entry};
129
129
  }
130
- const {format, compat, locale, apiVersion} = req.params;
131
130
  const {ownHash, moduleEntry} = await moduleRegistry.getModule(moduleId, ctx.runtimeParams);
132
131
  if (ownHash) {
133
- const localeSegment = locale ? `/l/${locale}` : "";
134
- const uriSpecifier = encodeURIComponent((0, import_shared_utils.getSpecifier)({
135
- specifier: moduleEntry.specifier,
136
- version: (0, import_shared_utils.normalizeVersionToUri)(moduleEntry.version)
137
- }));
138
- const jsonQuery = req.isJsonRequest() ? "?json" : "";
132
+ const jsonQuery = req.isJsonRequest() ? `${ctx.runtimeEnvironment.debug ? "&" : "?"}json` : "";
133
+ const uri = await moduleRegistry.resolveModuleUri({...moduleId, version: moduleEntry.version}, ctx.runtimeEnvironment, ctx.runtimeParams);
139
134
  res.set({
140
- Location: `/${apiVersion}/bundle/${format}/${compat}${localeSegment}/bi/0/module/mi/${uriSpecifier}/s/${ownHash}/${moduleId.specifier.replace(/\//g, "_")}${jsonQuery}`
135
+ Location: `${uri}${jsonQuery}`
141
136
  });
142
137
  res.sendStatus(302);
143
138
  }
@@ -241,17 +236,12 @@ function apiMiddleware(app, context) {
241
236
  const {entry} = await moduleRegistry.getModuleEntry(importerModuleId);
242
237
  moduleId = {...moduleId, importer: entry};
243
238
  }
244
- const {format, compat, locale, apiVersion} = req.params;
245
239
  const {ownHash, moduleEntry} = await moduleRegistry.getModule(moduleId, ctx.runtimeParams);
246
240
  if (ownHash) {
247
- const localeSegment = locale ? `/l/${locale}` : "";
248
- const uriSpecifier = encodeURIComponent((0, import_shared_utils.getSpecifier)({
249
- specifier: moduleEntry.specifier,
250
- version: (0, import_shared_utils.normalizeVersionToUri)(moduleEntry.version)
251
- }));
252
- const jsonQuery = req.isJsonRequest() ? "?json" : "";
241
+ const jsonQuery = req.isJsonRequest() ? `${ctx.runtimeEnvironment.debug ? "&" : "?"}json` : "";
242
+ const uri = await moduleRegistry.resolveModuleUri({...moduleId, version: moduleEntry.version}, ctx.runtimeEnvironment, ctx.runtimeParams);
253
243
  res.set({
254
- Location: `/${apiVersion}/module/${format}/${compat}${localeSegment}/mi/${uriSpecifier}/s/${ownHash}/${moduleId.specifier.replace(/\//g, "_")}${jsonQuery}`
244
+ Location: `${uri}${jsonQuery}`
255
245
  });
256
246
  res.sendStatus(302);
257
247
  }
@@ -108,9 +108,10 @@ var SiteGenerator = class {
108
108
  await (0, import_stream.writeResponse)(context, fullPath);
109
109
  const dispatchRequests = [];
110
110
  if (normalizedUrl.indexOf("/s/") !== -1) {
111
- const rewriteUrl = normalizedUrl.substring(0, normalizedUrl.indexOf("/s/"));
112
- siteConfig.urlRewriteMap.set(rewriteUrl, normalizedUrl);
111
+ siteConfig.urlRewriteMap.set(normalizedUrl.substring(0, normalizedUrl.indexOf("/s/")), normalizedUrl);
113
112
  siteConfig.urlRewriteMap.set(url.substring(0, url.indexOf("/s/")), normalizedUrl);
113
+ siteConfig.urlRewriteMap.set(normalizedUrl.substring(0, normalizedUrl.indexOf("/v/")), normalizedUrl);
114
+ siteConfig.urlRewriteMap.set(url.substring(0, url.indexOf("%2Fv%2F")), normalizedUrl);
114
115
  }
115
116
  const moduleDefinition = context.fs?.metadata?.moduleDefinition;
116
117
  if (moduleDefinition) {
@@ -13,7 +13,19 @@ export async function runConfigurationsHook(hookPlugins, lwrConfig, dataConfig,
13
13
  // eslint-disable-next-line no-await-in-loop
14
14
  await hookPlugin.initConfigs(lwrConfig, dataConfig, runtimeConfig);
15
15
  }
16
- validateLwrAppConfig(JSON.stringify(lwrConfig), 'post');
16
+ try {
17
+ validateLwrAppConfig(JSON.stringify(lwrConfig), 'post');
18
+ }
19
+ catch (e) {
20
+ // TODO: temporary workaround for https://github.com/salesforce/lwr/issues/825
21
+ if (process.env.UNSAFE_IGNORE_CONFIG_VALIDATION === 'true') {
22
+ console.warn('ignoring config validation errors due to UNSAFE_IGNORE_CONFIG_VALIDATION flag...proceed with caution');
23
+ console.dir(e, { depth: null });
24
+ }
25
+ else {
26
+ throw e;
27
+ }
28
+ }
17
29
  normalizeRoutesBootstrap(lwrConfig);
18
30
  return {
19
31
  lwrConfig,
@@ -101,12 +101,21 @@ function createCacheFolder(cache, rootDir) {
101
101
  function getLwrConfigFromFile(rootDir, customDir = DEFAULT_LWR_CONFIG_JSON) {
102
102
  const lwrConfigPath = path.resolve(normalizeDirectory(customDir, rootDir));
103
103
  if (fs.existsSync(lwrConfigPath)) {
104
+ const configAsString = readFile(lwrConfigPath);
104
105
  try {
105
- return validateLwrAppConfig(readFile(lwrConfigPath), 'file');
106
+ return validateLwrAppConfig(configAsString, 'file');
106
107
  }
107
108
  catch (e) {
108
109
  if (e instanceof LwrConfigValidationError) {
109
- throw e;
110
+ // TODO: temporary workaround for https://github.com/salesforce/lwr/issues/825
111
+ if (process.env.UNSAFE_IGNORE_CONFIG_VALIDATION === 'true') {
112
+ console.warn('ignoring config validation errors due to UNSAFE_IGNORE_CONFIG_VALIDATION flag...proceed with caution');
113
+ console.dir(e, { depth: null });
114
+ return JSON.parse(configAsString);
115
+ }
116
+ else {
117
+ throw e;
118
+ }
110
119
  }
111
120
  return undefined;
112
121
  }
@@ -268,7 +277,19 @@ function trimLwrConfig(config) {
268
277
  export function normalizeConfig(config) {
269
278
  if (config !== undefined) {
270
279
  config = trimLwrConfig(config);
271
- validateLwrAppConfig(JSON.stringify(config), 'pre');
280
+ try {
281
+ validateLwrAppConfig(JSON.stringify(config), 'pre');
282
+ }
283
+ catch (e) {
284
+ // TODO: temporary workaround for https://github.com/salesforce/lwr/issues/825
285
+ if (process.env.UNSAFE_IGNORE_CONFIG_VALIDATION === 'true') {
286
+ console.warn('ignoring config validation errors due to UNSAFE_IGNORE_CONFIG_VALIDATION flag...proceed with caution');
287
+ console.dir(e, { depth: null });
288
+ }
289
+ else {
290
+ throw e;
291
+ }
292
+ }
272
293
  }
273
294
  // Merge all configurations together, and return
274
295
  const rootDir = path.resolve(config?.rootDir || DEFAULT_ROOT_DIR);
@@ -1,5 +1,5 @@
1
1
  import { LwrUnresolvableError, createSingleDiagnosticError as createDiagnostic, descriptions, } from '@lwrjs/diagnostics';
2
- import { LATEST_SIGNATURE, explodeSpecifier, getImportMetadataMappings, getSpecifier, normalizeVersionToUri, serializeModuleToJson, getModuleIdentity, getResourceIdentity, getAssetIdentity, getMappingIdentity, getVersionedModuleId, } from '@lwrjs/shared-utils';
2
+ import { LATEST_SIGNATURE, explodeSpecifier, getImportMetadataMappings, serializeModuleToJson, getModuleIdentity, getResourceIdentity, getAssetIdentity, getMappingIdentity, getVersionedModuleId, } from '@lwrjs/shared-utils';
3
3
  import { createReturnStatus, isSupportedEnvironment } from './utils.js';
4
4
  export default function apiMiddleware(app, context) {
5
5
  const { appConfig: { environment: environmentConfig }, moduleRegistry, moduleBundler, resourceRegistry, runtimeEnvironment: defaultRuntimeEnvironment, } = context;
@@ -118,20 +118,15 @@ export default function apiMiddleware(app, context) {
118
118
  const { entry } = await moduleRegistry.getModuleEntry(importerModuleId);
119
119
  moduleId = { ...moduleId, importer: entry };
120
120
  }
121
- // const { ownHash, moduleEntry } = await moduleRegistry.getModule(moduleId, ctx.runtimeParams);
122
- const { format, compat, locale, apiVersion } = req.params;
123
121
  const { ownHash, moduleEntry } = await moduleRegistry.getModule(moduleId, ctx.runtimeParams);
124
122
  if (ownHash) {
125
- const localeSegment = locale ? `/l/${locale}` : '';
126
- const uriSpecifier = encodeURIComponent(getSpecifier({
127
- specifier: moduleEntry.specifier,
128
- version: normalizeVersionToUri(moduleEntry.version),
129
- })); // get specifier from registry, not req.params
130
- const jsonQuery = req.isJsonRequest() ? '?json' : '';
123
+ const jsonQuery = req.isJsonRequest()
124
+ ? `${ctx.runtimeEnvironment.debug ? '&' : '?'}json`
125
+ : '';
126
+ const uri = await moduleRegistry.resolveModuleUri({ ...moduleId, version: moduleEntry.version }, ctx.runtimeEnvironment, ctx.runtimeParams);
131
127
  res.set({
132
128
  // This redirects to a signed URI
133
- // A prettifier is added to the end so resources have a meaningful name in browser devtools
134
- Location: `/${apiVersion}/bundle/${format}/${compat}${localeSegment}/bi/0/module/mi/${uriSpecifier}/s/${ownHash}/${moduleId.specifier.replace(/\//g, '_')}${jsonQuery}`,
129
+ Location: `${uri}${jsonQuery}`,
135
130
  });
136
131
  res.sendStatus(302);
137
132
  }
@@ -261,19 +256,15 @@ export default function apiMiddleware(app, context) {
261
256
  moduleId = { ...moduleId, importer: entry };
262
257
  }
263
258
  // Get the module's signature from the registry
264
- const { format, compat, locale, apiVersion } = req.params;
265
259
  const { ownHash, moduleEntry } = await moduleRegistry.getModule(moduleId, ctx.runtimeParams);
266
260
  if (ownHash) {
267
- const localeSegment = locale ? `/l/${locale}` : '';
268
- const uriSpecifier = encodeURIComponent(getSpecifier({
269
- specifier: moduleEntry.specifier,
270
- version: normalizeVersionToUri(moduleEntry.version),
271
- })); // get specifier from registry, not req.params
272
- const jsonQuery = req.isJsonRequest() ? '?json' : '';
261
+ const jsonQuery = req.isJsonRequest()
262
+ ? `${ctx.runtimeEnvironment.debug ? '&' : '?'}json`
263
+ : '';
264
+ const uri = await moduleRegistry.resolveModuleUri({ ...moduleId, version: moduleEntry.version }, ctx.runtimeEnvironment, ctx.runtimeParams);
273
265
  res.set({
274
266
  // This redirects to a signed URI
275
- // A prettifier is added to the end so resources have a meaningful name in browser devtools
276
- Location: `/${apiVersion}/module/${format}/${compat}${localeSegment}/mi/${uriSpecifier}/s/${ownHash}/${moduleId.specifier.replace(/\//g, '_')}${jsonQuery}`,
267
+ Location: `${uri}${jsonQuery}`,
277
268
  });
278
269
  res.sendStatus(302);
279
270
  }
@@ -129,13 +129,20 @@ export default class SiteGenerator {
129
129
  const dispatchRequests = [];
130
130
  // Add URL re-writes for module redirects
131
131
  if (normalizedUrl.indexOf('/s/') !== -1) {
132
- const rewriteUrl = normalizedUrl.substring(0, normalizedUrl.indexOf('/s/'));
133
- // Redirect /1/bundle/amd/l/en-US/bi/0/module/mi/lwr/navigation/v/0_1_6 -> /1/bundle/amd/l/en-US/bi/0/module/mi/lwr/navigation/v/0_1_6/s/{signature}
134
- siteConfig.urlRewriteMap.set(rewriteUrl, normalizedUrl);
135
- // Redirect /1/bundle/amd/l/en-US/bi/0/module/mi/lwr%2Fnavigation%2Fv%2F0_1_6 -> /1/bundle/amd/l/en-US/bi/0/module/mi/lwr/navigation/v/0_1_6/s/{signature}
132
+ // Redirect unsigned to signed URIs
133
+ // e.g. /1/bundle/amd/l/en-US/bi/0/module/mi/c/module/v/0_1_6 -> /1/bundle/amd/l/en-US/bi/0/module/mi/c/module/v/0_1_6/s/{signature}
134
+ siteConfig.urlRewriteMap.set(normalizedUrl.substring(0, normalizedUrl.indexOf('/s/')), normalizedUrl);
135
+ // Redirect encoded signed URIs to UNencoded signed URIs
136
+ // e.g. /1/bundle/amd/l/en-US/bi/0/module/mi/c%2Fmodule%2Fv%2F0_1_6/s/{signature} -> /1/bundle/amd/l/en-US/bi/0/module/mi/c/module/v/0_1_6/s/{signature}
136
137
  siteConfig.urlRewriteMap.set(url.substring(0, url.indexOf('/s/')), normalizedUrl);
137
- // TODO Redirect /1/bundle/amd/l/en-US/bi/0/module/mi/lwr/navigation -> /1/bundle/amd/l/en-US/bi/0/module/mi/lwr/navigation/v/0_1_6/s/{signature}
138
- // Dynamic import example /1/bundle/amd/l/en-US/bi/0/module/mi/dynamic%2Fmodule?importer=examples%2Fhome%2Fv%2F0_1_6
138
+ // Redirect unversioned/unsigned URIs to signed URIs
139
+ // e.g. /1/bundle/amd/l/en-US/bi/0/module/mi/c/module -> /1/bundle/amd/l/en-US/bi/0/module/mi/c/module/v/0_1_6/s/{signature}
140
+ // e.g. with importer /1/bundle/amd/l/en-US/bi/0/module/mi/c/module?importer=parent%2Fmodule%2Fv%2F2_1_0 -> /1/bundle/amd/l/en-US/bi/0/module/mi/c/module/v/0_1_6/s/{signature}
141
+ siteConfig.urlRewriteMap.set(normalizedUrl.substring(0, normalizedUrl.indexOf('/v/')), normalizedUrl);
142
+ // Redirect encoded unversioned/unsigned URIs to UNencoded signed URIs
143
+ // e.g. /1/bundle/amd/l/en-US/bi/0/module/mi/c%2Fmodule -> /1/bundle/amd/l/en-US/bi/0/module/mi/c/module/v/0_1_6/s/{signature}
144
+ // e.g. with importer /1/bundle/amd/l/en-US/bi/0/module/mi/c%2Fmodule?importer=parent%2Fmodule%2Fv%2F2_1_0 -> /1/bundle/amd/l/en-US/bi/0/module/mi/c/module/v/0_1_6/s/{signature}
145
+ siteConfig.urlRewriteMap.set(url.substring(0, url.indexOf('%2Fv%2F')), normalizedUrl);
139
146
  }
140
147
  // Recursively traverse dependencies
141
148
  const moduleDefinition = context.fs?.metadata?.moduleDefinition; // LinkedModuleDefinition | BundleDefinition
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "0.6.0-alpha.13",
7
+ "version": "0.6.0-alpha.14",
8
8
  "homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
9
9
  "repository": {
10
10
  "type": "git",
@@ -33,31 +33,31 @@
33
33
  "package.cjs"
34
34
  ],
35
35
  "dependencies": {
36
- "@lwrjs/app-service": "0.6.0-alpha.13",
37
- "@lwrjs/asset-registry": "0.6.0-alpha.13",
38
- "@lwrjs/asset-transformer": "0.6.0-alpha.13",
39
- "@lwrjs/base-template-engine": "0.6.0-alpha.13",
40
- "@lwrjs/base-view-provider": "0.6.0-alpha.13",
41
- "@lwrjs/base-view-transformer": "0.6.0-alpha.13",
42
- "@lwrjs/client-modules": "0.6.0-alpha.13",
43
- "@lwrjs/compiler": "0.6.0-alpha.13",
44
- "@lwrjs/diagnostics": "0.6.0-alpha.13",
45
- "@lwrjs/fs-asset-provider": "0.6.0-alpha.13",
46
- "@lwrjs/html-view-provider": "0.6.0-alpha.13",
47
- "@lwrjs/loader": "0.6.0-alpha.13",
48
- "@lwrjs/lwc-module-provider": "0.6.0-alpha.13",
49
- "@lwrjs/lwc-ssr": "0.6.0-alpha.13",
50
- "@lwrjs/markdown-view-provider": "0.6.0-alpha.13",
51
- "@lwrjs/module-bundler": "0.6.0-alpha.13",
52
- "@lwrjs/module-registry": "0.6.0-alpha.13",
53
- "@lwrjs/npm-module-provider": "0.6.0-alpha.13",
54
- "@lwrjs/nunjucks-view-provider": "0.6.0-alpha.13",
55
- "@lwrjs/o11y": "0.6.0-alpha.13",
56
- "@lwrjs/resource-registry": "0.6.0-alpha.13",
57
- "@lwrjs/router": "0.6.0-alpha.13",
58
- "@lwrjs/server": "0.6.0-alpha.13",
59
- "@lwrjs/shared-utils": "0.6.0-alpha.13",
60
- "@lwrjs/view-registry": "0.6.0-alpha.13",
36
+ "@lwrjs/app-service": "0.6.0-alpha.14",
37
+ "@lwrjs/asset-registry": "0.6.0-alpha.14",
38
+ "@lwrjs/asset-transformer": "0.6.0-alpha.14",
39
+ "@lwrjs/base-template-engine": "0.6.0-alpha.14",
40
+ "@lwrjs/base-view-provider": "0.6.0-alpha.14",
41
+ "@lwrjs/base-view-transformer": "0.6.0-alpha.14",
42
+ "@lwrjs/client-modules": "0.6.0-alpha.14",
43
+ "@lwrjs/compiler": "0.6.0-alpha.14",
44
+ "@lwrjs/diagnostics": "0.6.0-alpha.14",
45
+ "@lwrjs/fs-asset-provider": "0.6.0-alpha.14",
46
+ "@lwrjs/html-view-provider": "0.6.0-alpha.14",
47
+ "@lwrjs/loader": "0.6.0-alpha.14",
48
+ "@lwrjs/lwc-module-provider": "0.6.0-alpha.14",
49
+ "@lwrjs/lwc-ssr": "0.6.0-alpha.14",
50
+ "@lwrjs/markdown-view-provider": "0.6.0-alpha.14",
51
+ "@lwrjs/module-bundler": "0.6.0-alpha.14",
52
+ "@lwrjs/module-registry": "0.6.0-alpha.14",
53
+ "@lwrjs/npm-module-provider": "0.6.0-alpha.14",
54
+ "@lwrjs/nunjucks-view-provider": "0.6.0-alpha.14",
55
+ "@lwrjs/o11y": "0.6.0-alpha.14",
56
+ "@lwrjs/resource-registry": "0.6.0-alpha.14",
57
+ "@lwrjs/router": "0.6.0-alpha.14",
58
+ "@lwrjs/server": "0.6.0-alpha.14",
59
+ "@lwrjs/shared-utils": "0.6.0-alpha.14",
60
+ "@lwrjs/view-registry": "0.6.0-alpha.14",
61
61
  "dompurify": "^2.3.0",
62
62
  "fs-extra": "^10.0.0",
63
63
  "jsdom": "^16.7.0",
@@ -67,7 +67,7 @@
67
67
  "qs": "^6.9.4"
68
68
  },
69
69
  "devDependencies": {
70
- "@lwrjs/types": "0.6.0-alpha.13"
70
+ "@lwrjs/types": "0.6.0-alpha.14"
71
71
  },
72
72
  "peerDependencies": {
73
73
  "lwc": ">= 1.x <= 2.x"
@@ -75,5 +75,5 @@
75
75
  "engines": {
76
76
  "node": ">=14.15.4 <17"
77
77
  },
78
- "gitHead": "056d10307fe29540d1586f8fd75e357b82ce2acc"
78
+ "gitHead": "2850ceddcf17cdc561abbdbeb465edc5d5391cfa"
79
79
  }