@lwrjs/core 0.9.0-alpha.0 → 0.9.0-alpha.2

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.
@@ -47,6 +47,6 @@ async function warmupServer(config, internalRequestKey) {
47
47
  debug: false,
48
48
  serverMode
49
49
  };
50
- await new import_static_generation.default().generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, new import_network_dispatcher.default(port, internalRequestKey), staticSiteGenerator.outputDir, urlRewriteMap);
50
+ await new import_static_generation.default().generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, new import_network_dispatcher.default(port, internalRequestKey), staticSiteGenerator.outputDir, urlRewriteMap);
51
51
  import_shared_utils.logger.info("[Server Warmup] complete");
52
52
  }
@@ -58,14 +58,14 @@ var SiteGenerator = class {
58
58
  debug: false,
59
59
  serverMode
60
60
  };
61
- await this.generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, dispatcher, outputDir, urlRewriteMap);
61
+ await this.generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, dispatcher, outputDir, urlRewriteMap);
62
62
  this.writeNetlifyRedirectConfig(outputDir, urlRewriteMap);
63
- this.copyAssets(assets, outputDir);
63
+ this.copyAssets(assets, outputDir, basePath);
64
64
  const endTime = import_perf_hooks.performance.now();
65
65
  const timeDiff = (endTime - startTime) / 1e3;
66
66
  import_shared_utils.logger.info(`[Static Generation] complete in ${Math.round(timeDiff)} seconds`);
67
67
  }
68
- async generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, dispatcher, outputDir, urlRewriteMap = new Map()) {
68
+ async generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, dispatcher, outputDir, urlRewriteMap = new Map()) {
69
69
  if (!staticSiteGenerator.locales) {
70
70
  staticSiteGenerator.locales = ["en-US"];
71
71
  }
@@ -73,7 +73,7 @@ var SiteGenerator = class {
73
73
  for (const locale of staticSiteGenerator.locales) {
74
74
  for (const route of routes) {
75
75
  const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment);
76
- await generateUrl(route.path, siteConfig);
76
+ await generateUrl(basePath + route.path, siteConfig);
77
77
  }
78
78
  if (staticSiteGenerator._additionalRoutePaths) {
79
79
  for (const uri of staticSiteGenerator._additionalRoutePaths) {
@@ -315,11 +315,11 @@ var SiteGenerator = class {
315
315
  });
316
316
  import_fs_extra.default.writeFileSync(serveJsonPath, JSON.stringify({rewrites, directoryListing: false, renderSingle: true}, null, 1));
317
317
  }
318
- copyAssets(assets, outputDir) {
318
+ copyAssets(assets, outputDir, basePath) {
319
319
  for (const asset of assets) {
320
320
  try {
321
321
  const assetSrcDir = asset.dir || asset.file;
322
- const assetOutputDir = (0, import_path.join)(outputDir, asset.urlPath);
322
+ const assetOutputDir = (0, import_path.join)(outputDir, basePath ? basePath + asset.urlPath : asset.urlPath);
323
323
  if (assetSrcDir && import_fs_extra.default.existsSync(assetSrcDir)) {
324
324
  import_fs_extra.default.copySync(assetSrcDir, assetOutputDir);
325
325
  } else {
@@ -28,7 +28,7 @@ __export(exports, {
28
28
  });
29
29
  var import_http = __toModule(require("http"));
30
30
  var import_https = __toModule(require("https"));
31
- var import_diagnostics = __toModule(require("@lwrjs/diagnostics"));
31
+ var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
32
32
  var NetworkDispatcher = class {
33
33
  constructor(port, internalRequestKey) {
34
34
  this.port = port || 3e3;
@@ -39,7 +39,11 @@ var NetworkDispatcher = class {
39
39
  this.internalRequestKey = internalRequestKey || "";
40
40
  }
41
41
  dispatchUrl(url, method, lang) {
42
- const options = {
42
+ const options = this.createRequestOptions(url, method, lang);
43
+ return this.handleRequest(options, url, method, lang);
44
+ }
45
+ createRequestOptions(url, method, lang) {
46
+ return {
43
47
  method,
44
48
  host: "localhost",
45
49
  port: this.port,
@@ -50,41 +54,53 @@ var NetworkDispatcher = class {
50
54
  "lwr-metadata-request": this.internalRequestKey
51
55
  }
52
56
  };
57
+ }
58
+ handleRequest(options, url, method, lang) {
53
59
  return new Promise((resolve, reject) => {
54
60
  const httpClient = options.port == 443 ? import_https.default : import_http.default;
55
61
  const bodyChunks = [];
62
+ import_shared_utils.logger.verbose(`[NetworkDispatcher] Request: [${method}][${lang}] ${url}`);
56
63
  const req = httpClient.request(options, (res) => {
57
64
  res.on("data", (chunk) => {
58
65
  bodyChunks.push(chunk);
59
66
  });
60
67
  res.on("end", () => {
61
- const body = Buffer.concat(bodyChunks).toString();
62
- try {
63
- const jsonResponse = JSON.parse(body);
64
- resolve(jsonResponse);
65
- } catch (e) {
66
- console.error(`[ERROR][NetworkDispatcher] unexpected response body: [${method}][${lang}] ${url}: '${body}'`);
67
- if (e instanceof import_diagnostics.DiagnosticsError) {
68
- console.log("LWR Diagnostic Error: ");
69
- console.log(e.diagnostics);
70
- console.log(e.stack);
68
+ import_shared_utils.logger.verbose(`[END][NetworkDispatcher] Request: [${method}][${lang}] ${url}`);
69
+ if (!res.statusCode || res.statusCode >= 200 && res.statusCode < 300) {
70
+ const body = Buffer.concat(bodyChunks).toString();
71
+ try {
72
+ const jsonResponse = JSON.parse(body);
73
+ resolve(jsonResponse);
74
+ } catch (err) {
75
+ if (import_shared_utils.logger.currentLevel == import_shared_utils.DEBUG || import_shared_utils.logger.currentLevel == import_shared_utils.VERBOSE) {
76
+ import_shared_utils.logger.warn(`[NetworkDispatcher] unexpected response body: [${method}][${lang}] ${url}: '${body}'`, err);
77
+ } else {
78
+ import_shared_utils.logger.warn(`[NetworkDispatcher] unexpected response body: [${method}][${lang}] ${url}: '${body}'`);
79
+ }
80
+ resolve({});
81
+ }
82
+ } else if (res.statusCode === 301 || res.statusCode === 302) {
83
+ if (res.headers?.location && (0, import_shared_utils.isModuleOrBundleUrl)(res.headers?.location)) {
84
+ import_shared_utils.logger.debug(`[NetworkDispatcher] Follow redirect: [${method}][${lang}][${res.statusCode}] ${url} -> ${res.headers.location}`);
85
+ const location = res.headers.location;
86
+ return this.handleRequest(this.createRequestOptions(location, method, lang), location, method, lang).then((resRedirect) => resolve(resRedirect)).catch((rejectRedirect) => reject(rejectRedirect));
71
87
  } else {
72
- console.error(e);
88
+ import_shared_utils.logger.warn(`Redirect not followed: [${method}][${lang}][${res.statusCode}] ${url} -> ${res.headers.location}`);
89
+ resolve({});
73
90
  }
91
+ } else {
92
+ import_shared_utils.logger.warn(`Unexpected status code: [${method}][${lang}][${res.statusCode}] ${url}`);
74
93
  resolve({});
75
94
  }
76
95
  });
77
96
  });
78
97
  req.on("error", (err) => {
79
- console.error(`[ERROR][NetworkDispatcher] Request: [${method}][${lang}] ${url}`);
80
- if (err instanceof import_diagnostics.DiagnosticsError) {
81
- console.log("LWR Diagnostic Error: ");
82
- console.log(err.diagnostics);
83
- console.log(err.stack);
98
+ if (import_shared_utils.logger.currentLevel == import_shared_utils.DEBUG || import_shared_utils.logger.currentLevel == import_shared_utils.VERBOSE) {
99
+ import_shared_utils.logger.warn(`[NetworkDispatcher] Request Failed: [${method}][${lang}] ${url}`, err);
84
100
  } else {
85
- console.error(err);
101
+ import_shared_utils.logger.warn(`[NetworkDispatcher] Request Failed: [${method}][${lang}] ${url}`);
86
102
  }
87
- reject(err);
103
+ resolve({});
88
104
  });
89
105
  req.end();
90
106
  });
@@ -21,7 +21,7 @@ export async function warmupServer(config, internalRequestKey) {
21
21
  serverMode,
22
22
  };
23
23
  // For each locale, generate all the modules
24
- await new SiteGenerator().generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, new NetworkDispatcher(port, internalRequestKey), staticSiteGenerator.outputDir, urlRewriteMap);
24
+ await new SiteGenerator().generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, new NetworkDispatcher(port, internalRequestKey), staticSiteGenerator.outputDir, urlRewriteMap);
25
25
  logger.info('[Server Warmup] complete');
26
26
  }
27
27
  //# sourceMappingURL=server-warmup.js.map
@@ -13,7 +13,7 @@ export default class SiteGenerator {
13
13
  /**
14
14
  * Crawl all view routes for a site
15
15
  */
16
- generateRoutes(runtimeEnvironment: RuntimeEnvironment, staticSiteGenerator: StaticSiteGenerator, routes: LwrRoute[], dispatcher: LwrDispatcher, outputDir: string, urlRewriteMap?: Map<string, string>): Promise<void>;
16
+ generateRoutes(runtimeEnvironment: RuntimeEnvironment, staticSiteGenerator: StaticSiteGenerator, routes: LwrRoute[], basePath: string, dispatcher: LwrDispatcher, outputDir: string, urlRewriteMap?: Map<string, string>): Promise<void>;
17
17
  /**
18
18
  * Creates a function to dispatch the root requests for a given view url
19
19
  */
@@ -39,11 +39,11 @@ export default class SiteGenerator {
39
39
  serverMode,
40
40
  };
41
41
  // For each locale, generate all the modules
42
- await this.generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, dispatcher, outputDir, urlRewriteMap);
42
+ await this.generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, dispatcher, outputDir, urlRewriteMap);
43
43
  // Write redirect files
44
44
  this.writeNetlifyRedirectConfig(outputDir, urlRewriteMap);
45
45
  // Copy over assets
46
- this.copyAssets(assets, outputDir);
46
+ this.copyAssets(assets, outputDir, basePath);
47
47
  const endTime = performance.now();
48
48
  const timeDiff = (endTime - startTime) / 1000;
49
49
  logger.info(`[Static Generation] complete in ${Math.round(timeDiff)} seconds`);
@@ -51,7 +51,7 @@ export default class SiteGenerator {
51
51
  /**
52
52
  * Crawl all view routes for a site
53
53
  */
54
- async generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, dispatcher, outputDir, urlRewriteMap = new Map()) {
54
+ async generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, dispatcher, outputDir, urlRewriteMap = new Map()) {
55
55
  if (!staticSiteGenerator.locales) {
56
56
  staticSiteGenerator.locales = ['en-US'];
57
57
  }
@@ -62,7 +62,7 @@ export default class SiteGenerator {
62
62
  for (const route of routes) {
63
63
  const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment);
64
64
  // eslint-disable-next-line no-await-in-loop
65
- await generateUrl(route.path, siteConfig);
65
+ await generateUrl(basePath + route.path, siteConfig);
66
66
  }
67
67
  // Generate any additional urls
68
68
  if (staticSiteGenerator._additionalRoutePaths) {
@@ -458,11 +458,11 @@ export default class SiteGenerator {
458
458
  * @param assets AssetConfig
459
459
  *
460
460
  */
461
- copyAssets(assets, outputDir) {
461
+ copyAssets(assets, outputDir, basePath) {
462
462
  for (const asset of assets) {
463
463
  try {
464
464
  const assetSrcDir = asset.dir || asset.file;
465
- const assetOutputDir = join(outputDir, asset.urlPath);
465
+ const assetOutputDir = join(outputDir, basePath ? basePath + asset.urlPath : asset.urlPath);
466
466
  if (assetSrcDir && fs.existsSync(assetSrcDir)) {
467
467
  fs.copySync(assetSrcDir, assetOutputDir);
468
468
  }
@@ -7,5 +7,7 @@ export default class NetworkDispatcher implements LwrDispatcher {
7
7
  pool: http.Agent;
8
8
  constructor(port: number, internalRequestKey: string);
9
9
  dispatchUrl(url: string, method: string, lang: string): Promise<FsContext>;
10
+ private createRequestOptions;
11
+ private handleRequest;
10
12
  }
11
13
  //# sourceMappingURL=network-dispatcher.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import http from 'http';
2
2
  import https from 'https';
3
- import { DiagnosticsError } from '@lwrjs/diagnostics';
3
+ import { DEBUG, isModuleOrBundleUrl, logger, VERBOSE } from '@lwrjs/shared-utils';
4
4
  export default class NetworkDispatcher {
5
5
  constructor(port, internalRequestKey) {
6
6
  this.port = port || 3000;
@@ -11,7 +11,11 @@ export default class NetworkDispatcher {
11
11
  this.internalRequestKey = internalRequestKey || '';
12
12
  }
13
13
  dispatchUrl(url, method, lang) {
14
- const options = {
14
+ const options = this.createRequestOptions(url, method, lang);
15
+ return this.handleRequest(options, url, method, lang);
16
+ }
17
+ createRequestOptions(url, method, lang) {
18
+ return {
15
19
  method: method,
16
20
  host: 'localhost',
17
21
  port: this.port,
@@ -23,46 +27,65 @@ export default class NetworkDispatcher {
23
27
  'lwr-metadata-request': this.internalRequestKey,
24
28
  },
25
29
  };
30
+ }
31
+ handleRequest(options, url, method, lang) {
26
32
  return new Promise((resolve, reject) => {
27
33
  const httpClient = options.port == 443 ? https : http;
28
34
  const bodyChunks = [];
29
- // console.log(`[INFO][NetworkDispatcher] Request: [${method}][${lang}] ${url}`);
35
+ logger.verbose(`[NetworkDispatcher] Request: [${method}][${lang}] ${url}`);
30
36
  const req = httpClient.request(options, (res) => {
31
37
  res.on('data', (chunk) => {
32
38
  bodyChunks.push(chunk);
33
39
  });
34
40
  res.on('end', () => {
35
- // console.log(`[END][NetworkDispatcher] Request: [${method}][${lang}] ${url}`);
36
- const body = Buffer.concat(bodyChunks).toString();
37
- try {
38
- const jsonResponse = JSON.parse(body);
39
- resolve(jsonResponse);
41
+ logger.verbose(`[END][NetworkDispatcher] Request: [${method}][${lang}] ${url}`);
42
+ if (!res.statusCode || (res.statusCode >= 200 && res.statusCode < 300)) {
43
+ const body = Buffer.concat(bodyChunks).toString();
44
+ try {
45
+ const jsonResponse = JSON.parse(body);
46
+ resolve(jsonResponse);
47
+ }
48
+ catch (err) {
49
+ if (logger.currentLevel == DEBUG || logger.currentLevel == VERBOSE) {
50
+ logger.warn(`[NetworkDispatcher] unexpected response body: [${method}][${lang}] ${url}: '${body}'`, err);
51
+ }
52
+ else {
53
+ logger.warn(`[NetworkDispatcher] unexpected response body: [${method}][${lang}] ${url}: '${body}'`);
54
+ }
55
+ resolve({});
56
+ }
40
57
  }
41
- catch (e) {
42
- console.error(`[ERROR][NetworkDispatcher] unexpected response body: [${method}][${lang}] ${url}: '${body}'`);
43
- if (e instanceof DiagnosticsError) {
44
- console.log('LWR Diagnostic Error: ');
45
- console.log(e.diagnostics);
46
- console.log(e.stack);
58
+ else if (res.statusCode === 301 || res.statusCode === 302) {
59
+ // Lets follw if we know it is a module or bundle refrence
60
+ if (res.headers?.location && isModuleOrBundleUrl(res.headers?.location)) {
61
+ logger.debug(`[NetworkDispatcher] Follow redirect: [${method}][${lang}][${res.statusCode}] ${url} -> ${res.headers.location}`);
62
+ const location = res.headers.location;
63
+ return (this.handleRequest(this.createRequestOptions(location, method, lang), location, method, lang)
64
+ // Send nested response to the resolve or reject functions defined above
65
+ .then((resRedirect) => resolve(resRedirect))
66
+ // Should not happen since we are just warning on error
67
+ .catch((rejectRedirect) => reject(rejectRedirect)));
47
68
  }
48
69
  else {
49
- console.error(e);
70
+ logger.warn(`Redirect not followed: [${method}][${lang}][${res.statusCode}] ${url} -> ${res.headers.location}`);
71
+ resolve({});
50
72
  }
73
+ }
74
+ // if any other status codes are returned, those needed to be added here
75
+ else {
76
+ logger.warn(`Unexpected status code: [${method}][${lang}][${res.statusCode}] ${url}`);
51
77
  resolve({});
52
78
  }
53
79
  });
54
80
  });
55
81
  req.on('error', (err) => {
56
- console.error(`[ERROR][NetworkDispatcher] Request: [${method}][${lang}] ${url}`);
57
- if (err instanceof DiagnosticsError) {
58
- console.log('LWR Diagnostic Error: ');
59
- console.log(err.diagnostics);
60
- console.log(err.stack);
82
+ if (logger.currentLevel == DEBUG || logger.currentLevel == VERBOSE) {
83
+ logger.warn(`[NetworkDispatcher] Request Failed: [${method}][${lang}] ${url}`, err);
61
84
  }
62
85
  else {
63
- console.error(err);
86
+ logger.warn(`[NetworkDispatcher] Request Failed: [${method}][${lang}] ${url}`);
64
87
  }
65
- reject(err);
88
+ resolve({});
66
89
  });
67
90
  req.end();
68
91
  });
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "0.9.0-alpha.0",
7
+ "version": "0.9.0-alpha.2",
8
8
  "homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
9
9
  "repository": {
10
10
  "type": "git",
@@ -32,32 +32,32 @@
32
32
  "package.cjs"
33
33
  ],
34
34
  "dependencies": {
35
- "@lwrjs/app-service": "0.9.0-alpha.0",
36
- "@lwrjs/asset-registry": "0.9.0-alpha.0",
37
- "@lwrjs/asset-transformer": "0.9.0-alpha.0",
38
- "@lwrjs/base-template-engine": "0.9.0-alpha.0",
39
- "@lwrjs/base-view-provider": "0.9.0-alpha.0",
40
- "@lwrjs/base-view-transformer": "0.9.0-alpha.0",
41
- "@lwrjs/client-modules": "0.9.0-alpha.0",
42
- "@lwrjs/compiler": "0.9.0-alpha.0",
43
- "@lwrjs/config": "0.9.0-alpha.0",
44
- "@lwrjs/diagnostics": "0.9.0-alpha.0",
45
- "@lwrjs/fs-asset-provider": "0.9.0-alpha.0",
46
- "@lwrjs/html-view-provider": "0.9.0-alpha.0",
47
- "@lwrjs/loader": "0.9.0-alpha.0",
48
- "@lwrjs/lwc-module-provider": "0.9.0-alpha.0",
49
- "@lwrjs/lwc-ssr": "0.9.0-alpha.0",
50
- "@lwrjs/markdown-view-provider": "0.9.0-alpha.0",
51
- "@lwrjs/module-bundler": "0.9.0-alpha.0",
52
- "@lwrjs/module-registry": "0.9.0-alpha.0",
53
- "@lwrjs/npm-module-provider": "0.9.0-alpha.0",
54
- "@lwrjs/nunjucks-view-provider": "0.9.0-alpha.0",
55
- "@lwrjs/o11y": "0.9.0-alpha.0",
56
- "@lwrjs/resource-registry": "0.9.0-alpha.0",
57
- "@lwrjs/router": "0.9.0-alpha.0",
58
- "@lwrjs/server": "0.9.0-alpha.0",
59
- "@lwrjs/shared-utils": "0.9.0-alpha.0",
60
- "@lwrjs/view-registry": "0.9.0-alpha.0",
35
+ "@lwrjs/app-service": "0.9.0-alpha.2",
36
+ "@lwrjs/asset-registry": "0.9.0-alpha.2",
37
+ "@lwrjs/asset-transformer": "0.9.0-alpha.2",
38
+ "@lwrjs/base-template-engine": "0.9.0-alpha.2",
39
+ "@lwrjs/base-view-provider": "0.9.0-alpha.2",
40
+ "@lwrjs/base-view-transformer": "0.9.0-alpha.2",
41
+ "@lwrjs/client-modules": "0.9.0-alpha.2",
42
+ "@lwrjs/compiler": "0.9.0-alpha.2",
43
+ "@lwrjs/config": "0.9.0-alpha.2",
44
+ "@lwrjs/diagnostics": "0.9.0-alpha.2",
45
+ "@lwrjs/fs-asset-provider": "0.9.0-alpha.2",
46
+ "@lwrjs/html-view-provider": "0.9.0-alpha.2",
47
+ "@lwrjs/loader": "0.9.0-alpha.2",
48
+ "@lwrjs/lwc-module-provider": "0.9.0-alpha.2",
49
+ "@lwrjs/lwc-ssr": "0.9.0-alpha.2",
50
+ "@lwrjs/markdown-view-provider": "0.9.0-alpha.2",
51
+ "@lwrjs/module-bundler": "0.9.0-alpha.2",
52
+ "@lwrjs/module-registry": "0.9.0-alpha.2",
53
+ "@lwrjs/npm-module-provider": "0.9.0-alpha.2",
54
+ "@lwrjs/nunjucks-view-provider": "0.9.0-alpha.2",
55
+ "@lwrjs/o11y": "0.9.0-alpha.2",
56
+ "@lwrjs/resource-registry": "0.9.0-alpha.2",
57
+ "@lwrjs/router": "0.9.0-alpha.2",
58
+ "@lwrjs/server": "0.9.0-alpha.2",
59
+ "@lwrjs/shared-utils": "0.9.0-alpha.2",
60
+ "@lwrjs/view-registry": "0.9.0-alpha.2",
61
61
  "fs-extra": "^10.1.0",
62
62
  "ms": "^2.1.3",
63
63
  "path-to-regexp": "^6.2.0",
@@ -65,7 +65,7 @@
65
65
  "ws": "^8.8.1"
66
66
  },
67
67
  "devDependencies": {
68
- "@lwrjs/types": "0.9.0-alpha.0",
68
+ "@lwrjs/types": "0.9.0-alpha.2",
69
69
  "@types/ws": "^8.5.3"
70
70
  },
71
71
  "peerDependencies": {
@@ -74,5 +74,5 @@
74
74
  "engines": {
75
75
  "node": ">=14.15.4 <19"
76
76
  },
77
- "gitHead": "6890d8619b295a49ee1ed8253a372337d83863be"
77
+ "gitHead": "bcf63de23d1a2a53fb0e961dba4396e8753710dd"
78
78
  }