@lwrjs/core 0.6.0 → 0.7.0-alpha.0

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,6 +36,7 @@ var import_app_config = __toModule(require("./validation/app-config.cjs"));
36
36
  var import_diagnostics = __toModule(require("@lwrjs/diagnostics"));
37
37
  var PORT = process.env.PORT ? parseInt(process.env.PORT, 10) : 3e3;
38
38
  var MODE = process.env.MODE || "dev";
39
+ var DEFAULT_BASE_PATH = "";
39
40
  var DEFAULT_API_VERSION = "1";
40
41
  var LWR_VERSION = import_package.version;
41
42
  var DEFAULT_SERVER_TYPE = "express";
@@ -91,6 +92,7 @@ var DEFAULT_LWR_CONFIG = {
91
92
  port: PORT,
92
93
  ignoreLwrConfigFile: false,
93
94
  lwrConfigFile: DEFAULT_LWR_CONFIG_JSON,
95
+ basePath: DEFAULT_BASE_PATH,
94
96
  rootDir: DEFAULT_ROOT_DIR,
95
97
  cacheDir: DEFAULT_CACHE_FOLDER,
96
98
  serverMode: MODE,
@@ -66,11 +66,12 @@ function initMiddlewares(app, server, serverContext) {
66
66
  }
67
67
  }
68
68
  async function initContext(app, server, rawLwrConfig) {
69
- const {apiVersion, lwrVersion, serverMode, globalDataDir, globalData} = rawLwrConfig;
69
+ const {apiVersion, basePath, lwrVersion, serverMode, globalDataDir, globalData} = rawLwrConfig;
70
70
  const rawDataConfig = (0, import_global_data.getGlobalData)(globalDataDir, globalData);
71
71
  const rawRuntimeEnvConfig = {
72
72
  ...(0, import_env_config.explodeMode)(serverMode),
73
73
  apiVersion,
74
+ basePath,
74
75
  lwrVersion,
75
76
  debug: false,
76
77
  serverMode,
@@ -159,6 +160,7 @@ async function initContext(app, server, rawLwrConfig) {
159
160
  routes,
160
161
  errorRoutes,
161
162
  rootDir,
163
+ basePath,
162
164
  contentDir,
163
165
  layoutsDir,
164
166
  locker,
@@ -185,7 +187,8 @@ var LwrApp = class {
185
187
  constructor(config) {
186
188
  this.initialized = false;
187
189
  this.config = (0, import_env_config.normalizeConfig)(config);
188
- this.app = (0, import_server.createInternalServer)(this.config.serverType);
190
+ const {basePath} = this.config;
191
+ this.app = (0, import_server.createInternalServer)(this.config.serverType, {basePath});
189
192
  this.server = this.app.createHttpServer();
190
193
  }
191
194
  setConfig(config) {
@@ -332,11 +332,13 @@ function apiMiddleware(app, context) {
332
332
  });
333
333
  app.all("/:apiVersion/:assetType/:immutable?/s/:signature/" + app.getRegexWildcard(), async (req, res) => {
334
334
  const {runtimeEnvironment} = req.getRuntimeContext(defaultRuntimeEnvironment);
335
+ const {basePath} = runtimeEnvironment;
335
336
  const {signature} = req.params;
336
337
  const {immutable, assetType: type} = req.params;
337
338
  const specifier = req.params[0] ? `/${req.params[0]}` : req.originalUrl;
339
+ const basePathSpecifier = `${basePath}${specifier}`;
338
340
  try {
339
- const assetObj = await context.assetRegistry.getAsset({specifier, signature, type}, runtimeEnvironment);
341
+ const assetObj = await context.assetRegistry.getAsset({specifier: basePathSpecifier, signature, type}, runtimeEnvironment);
340
342
  if (immutable) {
341
343
  }
342
344
  if (assetObj.mime) {
@@ -27,6 +27,7 @@ __export(exports, {
27
27
  ViewImportMetadataImpl: () => ViewImportMetadataImpl,
28
28
  default: () => static_generation_default
29
29
  });
30
+ var import_perf_hooks = __toModule(require("perf_hooks"));
30
31
  var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
31
32
  var import_path = __toModule(require("path"));
32
33
  var import_fs_extra = __toModule(require("fs-extra"));
@@ -34,6 +35,7 @@ var import_stream = __toModule(require("./utils/stream.cjs"));
34
35
  var import_dir = __toModule(require("./utils/dir.cjs"));
35
36
  var SiteGenerator = class {
36
37
  async buildStaticApplication(config, dispatcher) {
38
+ const startTime = import_perf_hooks.performance.now();
37
39
  console.log("[Static Generation] starting");
38
40
  const {routes, staticSiteGenerator, rootDir, assets} = config;
39
41
  if (!staticSiteGenerator.outputDir) {
@@ -46,27 +48,27 @@ var SiteGenerator = class {
46
48
  await this.generateRoutes(staticSiteGenerator, routes, dispatcher, outputDir, urlRewriteMap);
47
49
  this.writeNetlifyRedirectConfig(outputDir, urlRewriteMap);
48
50
  this.copyAssets(assets, outputDir);
49
- console.log("[Static Generation] complete");
51
+ const endTime = import_perf_hooks.performance.now();
52
+ const timeDiff = (endTime - startTime) / 1e3;
53
+ console.log(`[Static Generation] complete in ${Math.round(timeDiff)} seconds`);
50
54
  }
51
55
  async generateRoutes(staticSiteGenerator, routes, dispatcher, outputDir, urlRewriteMap = new Map()) {
52
56
  if (!staticSiteGenerator.locales) {
53
57
  staticSiteGenerator.locales = ["en-US"];
54
58
  }
55
- const dispatchRequests = [];
56
59
  const generateUrl = this.createGenerateURLFunction(dispatcher);
57
60
  for (const locale of staticSiteGenerator.locales) {
58
61
  for (const route of routes) {
59
62
  const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap);
60
- dispatchRequests.push(generateUrl(route.path, siteConfig));
63
+ await generateUrl(route.path, siteConfig);
61
64
  }
62
65
  if (staticSiteGenerator._additionalRoutePaths) {
63
66
  for (const uri of staticSiteGenerator._additionalRoutePaths) {
64
67
  const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap);
65
- dispatchRequests.push(generateUrl(uri, siteConfig));
68
+ await generateUrl(uri, siteConfig);
66
69
  }
67
70
  }
68
71
  }
69
- await Promise.all(dispatchRequests);
70
72
  }
71
73
  createGenerateURLFunction(dispatcher) {
72
74
  const generateRoute = async (uri, siteConfig) => {
@@ -235,8 +237,6 @@ var SiteGenerator = class {
235
237
  } else {
236
238
  console.warn('[WARN] Unable to fetch mapping for bare specifier or variable dynamic import: "' + jsUri + '"');
237
239
  }
238
- } else {
239
- console.warn('[WARN] Unable to resolve bare specifier or variable dynamic import: "' + jsUri + '"');
240
240
  }
241
241
  }
242
242
  }
@@ -63,6 +63,7 @@ var ROOT_ATTRIBUTE_KEYS = createKeys("root", [
63
63
  "lwrVersion",
64
64
  "moduleProviders",
65
65
  "port",
66
+ "basePath",
66
67
  "resourceProviders",
67
68
  "rootDir",
68
69
  "routes",
@@ -7,6 +7,7 @@ import { validateLwrAppConfig } from './validation/app-config.js';
7
7
  import { LwrConfigValidationError } from '@lwrjs/diagnostics';
8
8
  const PORT = process.env.PORT ? parseInt(process.env.PORT, 10) : 3000;
9
9
  const MODE = process.env.MODE || 'dev';
10
+ const DEFAULT_BASE_PATH = '';
10
11
  const DEFAULT_API_VERSION = '1';
11
12
  const LWR_VERSION = version;
12
13
  const DEFAULT_SERVER_TYPE = 'express';
@@ -66,6 +67,7 @@ const DEFAULT_LWR_CONFIG = {
66
67
  port: PORT,
67
68
  ignoreLwrConfigFile: false,
68
69
  lwrConfigFile: DEFAULT_LWR_CONFIG_JSON,
70
+ basePath: DEFAULT_BASE_PATH,
69
71
  rootDir: DEFAULT_ROOT_DIR,
70
72
  cacheDir: DEFAULT_CACHE_FOLDER,
71
73
  serverMode: MODE,
package/build/es/index.js CHANGED
@@ -41,11 +41,12 @@ function initMiddlewares(app, server, serverContext) {
41
41
  }
42
42
  }
43
43
  async function initContext(app, server, rawLwrConfig) {
44
- const { apiVersion, lwrVersion, serverMode, globalDataDir, globalData } = rawLwrConfig;
44
+ const { apiVersion, basePath, lwrVersion, serverMode, globalDataDir, globalData } = rawLwrConfig;
45
45
  const rawDataConfig = getGlobalData(globalDataDir, globalData);
46
46
  const rawRuntimeEnvConfig = {
47
47
  ...explodeMode(serverMode),
48
48
  apiVersion,
49
+ basePath,
49
50
  lwrVersion,
50
51
  debug: false,
51
52
  serverMode,
@@ -119,6 +120,7 @@ async function initContext(app, server, rawLwrConfig) {
119
120
  routes,
120
121
  errorRoutes,
121
122
  rootDir,
123
+ basePath,
122
124
  contentDir,
123
125
  layoutsDir,
124
126
  locker,
@@ -150,7 +152,8 @@ export class LwrApp {
150
152
  constructor(config) {
151
153
  this.initialized = false;
152
154
  this.config = normalizeConfig(config);
153
- this.app = createInternalServer(this.config.serverType);
155
+ const { basePath } = this.config;
156
+ this.app = createInternalServer(this.config.serverType, { basePath });
154
157
  this.server = this.app.createHttpServer();
155
158
  }
156
159
  setConfig(config) {
@@ -380,11 +380,13 @@ export default function apiMiddleware(app, context) {
380
380
  // Koa routing (Path-To-RegExp) breaks compatibility with Express routing & asterisk wildcards
381
381
  app.all('/:apiVersion/:assetType/:immutable?/s/:signature/' + app.getRegexWildcard(), async (req, res) => {
382
382
  const { runtimeEnvironment } = req.getRuntimeContext(defaultRuntimeEnvironment);
383
+ const { basePath } = runtimeEnvironment;
383
384
  const { signature } = req.params;
384
385
  const { immutable, assetType: type } = req.params;
385
386
  const specifier = req.params[0] ? `/${req.params[0]}` : req.originalUrl;
387
+ const basePathSpecifier = `${basePath}${specifier}`;
386
388
  try {
387
- const assetObj = await context.assetRegistry.getAsset({ specifier, signature, type: type }, runtimeEnvironment);
389
+ const assetObj = await context.assetRegistry.getAsset({ specifier: basePathSpecifier, signature, type: type }, runtimeEnvironment);
388
390
  if (immutable) {
389
391
  // WIP: ?
390
392
  }
@@ -1,3 +1,4 @@
1
+ import { performance } from 'perf_hooks';
1
2
  import { getSpecifier, getExperimentalFeatures, hashContent } from '@lwrjs/shared-utils';
2
3
  import { join, dirname, extname } from 'path';
3
4
  import fs from 'fs-extra';
@@ -13,6 +14,7 @@ export default class SiteGenerator {
13
14
  * @param dispatcher - Facilitate server requests
14
15
  */
15
16
  async buildStaticApplication(config, dispatcher) {
17
+ const startTime = performance.now();
16
18
  console.log('[Static Generation] starting');
17
19
  const { routes, staticSiteGenerator, rootDir, assets } = config;
18
20
  if (!staticSiteGenerator.outputDir) {
@@ -28,7 +30,9 @@ export default class SiteGenerator {
28
30
  this.writeNetlifyRedirectConfig(outputDir, urlRewriteMap);
29
31
  // Copy over assets
30
32
  this.copyAssets(assets, outputDir);
31
- console.log('[Static Generation] complete');
33
+ const endTime = performance.now();
34
+ const timeDiff = (endTime - startTime) / 1000;
35
+ console.log(`[Static Generation] complete in ${Math.round(timeDiff)} seconds`);
32
36
  }
33
37
  /**
34
38
  * Crawl all view routes for a site
@@ -37,25 +41,24 @@ export default class SiteGenerator {
37
41
  if (!staticSiteGenerator.locales) {
38
42
  staticSiteGenerator.locales = ['en-US'];
39
43
  }
40
- // Build up a list of dispatch requests to kick off in parallel
41
- const dispatchRequests = [];
42
44
  const generateUrl = this.createGenerateURLFunction(dispatcher);
45
+ // Note: generateUrl can consume a lot of memory so we need to do this sequentially
43
46
  for (const locale of staticSiteGenerator.locales) {
44
47
  // Generate all the routes
45
48
  for (const route of routes) {
46
49
  const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap);
47
- dispatchRequests.push(generateUrl(route.path, siteConfig));
50
+ // eslint-disable-next-line no-await-in-loop
51
+ await generateUrl(route.path, siteConfig);
48
52
  }
49
53
  // Generate any additional urls
50
54
  if (staticSiteGenerator._additionalRoutePaths) {
51
55
  for (const uri of staticSiteGenerator._additionalRoutePaths) {
52
56
  const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap);
53
- dispatchRequests.push(generateUrl(uri, siteConfig));
57
+ // eslint-disable-next-line no-await-in-loop
58
+ await generateUrl(uri, siteConfig);
54
59
  }
55
60
  }
56
61
  }
57
- // -- Dispatch routes
58
- await Promise.all(dispatchRequests);
59
62
  }
60
63
  /**
61
64
  * Creates a function to dispatch the root requests for a given view url
@@ -336,9 +339,6 @@ export default class SiteGenerator {
336
339
  '"');
337
340
  }
338
341
  }
339
- else {
340
- console.warn('[WARN] Unable to resolve bare specifier or variable dynamic import: "' + jsUri + '"');
341
- }
342
342
  }
343
343
  }
344
344
  /**
@@ -15,7 +15,7 @@ interface ConfigMap {
15
15
  bootstrap: NormalizedLwrAppBootstrapConfig;
16
16
  locker: RequiredLwrLockerConfig;
17
17
  }
18
- export declare const ROOT_ATTRIBUTE_KEYS: ["amdLoader", "apiVersion", "assets", "assetProviders", "assetTransformers", "bundleConfig", "cacheDir", "contentDir", "environment", "errorRoutes", "esmLoader", "staticSiteGenerator", "globalData", "globalDataDir", "hooks", "ignoreLwrConfigFile", "lwrConfigFile", "layoutsDir", "locker", "lwc", "lwrVersion", "moduleProviders", "port", "resourceProviders", "rootDir", "routes", "serverMode", "serverType", "templateEngine", "viewProviders", "viewTransformers"];
18
+ export declare const ROOT_ATTRIBUTE_KEYS: ["amdLoader", "apiVersion", "assets", "assetProviders", "assetTransformers", "bundleConfig", "cacheDir", "contentDir", "environment", "errorRoutes", "esmLoader", "staticSiteGenerator", "globalData", "globalDataDir", "hooks", "ignoreLwrConfigFile", "lwrConfigFile", "layoutsDir", "locker", "lwc", "lwrVersion", "moduleProviders", "port", "basePath", "resourceProviders", "rootDir", "routes", "serverMode", "serverType", "templateEngine", "viewProviders", "viewTransformers"];
19
19
  export declare const ASSET_DIR_ATTRIBUTE_KEYS: ["alias", "dir", "urlPath"];
20
20
  export declare const ASSET_FILE_ATTRIBUTE_KEYS: ["alias", "file", "urlPath"];
21
21
  export declare const LOCKER_ATTRIBUTE_KEYS: ["enabled", "trustedComponents", "clientOnly"];
@@ -30,6 +30,7 @@ export const ROOT_ATTRIBUTE_KEYS = createKeys('root', [
30
30
  'lwrVersion',
31
31
  'moduleProviders',
32
32
  'port',
33
+ 'basePath',
33
34
  'resourceProviders',
34
35
  'rootDir',
35
36
  'routes',
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "0.6.0",
7
+ "version": "0.7.0-alpha.0",
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",
37
- "@lwrjs/asset-registry": "0.6.0",
38
- "@lwrjs/asset-transformer": "0.6.0",
39
- "@lwrjs/base-template-engine": "0.6.0",
40
- "@lwrjs/base-view-provider": "0.6.0",
41
- "@lwrjs/base-view-transformer": "0.6.0",
42
- "@lwrjs/client-modules": "0.6.0",
43
- "@lwrjs/compiler": "0.6.0",
44
- "@lwrjs/diagnostics": "0.6.0",
45
- "@lwrjs/fs-asset-provider": "0.6.0",
46
- "@lwrjs/html-view-provider": "0.6.0",
47
- "@lwrjs/loader": "0.6.0",
48
- "@lwrjs/lwc-module-provider": "0.6.0",
49
- "@lwrjs/lwc-ssr": "0.6.0",
50
- "@lwrjs/markdown-view-provider": "0.6.0",
51
- "@lwrjs/module-bundler": "0.6.0",
52
- "@lwrjs/module-registry": "0.6.0",
53
- "@lwrjs/npm-module-provider": "0.6.0",
54
- "@lwrjs/nunjucks-view-provider": "0.6.0",
55
- "@lwrjs/o11y": "0.6.0",
56
- "@lwrjs/resource-registry": "0.6.0",
57
- "@lwrjs/router": "0.6.0",
58
- "@lwrjs/server": "0.6.0",
59
- "@lwrjs/shared-utils": "0.6.0",
60
- "@lwrjs/view-registry": "0.6.0",
36
+ "@lwrjs/app-service": "0.7.0-alpha.0",
37
+ "@lwrjs/asset-registry": "0.7.0-alpha.0",
38
+ "@lwrjs/asset-transformer": "0.7.0-alpha.0",
39
+ "@lwrjs/base-template-engine": "0.7.0-alpha.0",
40
+ "@lwrjs/base-view-provider": "0.7.0-alpha.0",
41
+ "@lwrjs/base-view-transformer": "0.7.0-alpha.0",
42
+ "@lwrjs/client-modules": "0.7.0-alpha.0",
43
+ "@lwrjs/compiler": "0.7.0-alpha.0",
44
+ "@lwrjs/diagnostics": "0.7.0-alpha.0",
45
+ "@lwrjs/fs-asset-provider": "0.7.0-alpha.0",
46
+ "@lwrjs/html-view-provider": "0.7.0-alpha.0",
47
+ "@lwrjs/loader": "0.7.0-alpha.0",
48
+ "@lwrjs/lwc-module-provider": "0.7.0-alpha.0",
49
+ "@lwrjs/lwc-ssr": "0.7.0-alpha.0",
50
+ "@lwrjs/markdown-view-provider": "0.7.0-alpha.0",
51
+ "@lwrjs/module-bundler": "0.7.0-alpha.0",
52
+ "@lwrjs/module-registry": "0.7.0-alpha.0",
53
+ "@lwrjs/npm-module-provider": "0.7.0-alpha.0",
54
+ "@lwrjs/nunjucks-view-provider": "0.7.0-alpha.0",
55
+ "@lwrjs/o11y": "0.7.0-alpha.0",
56
+ "@lwrjs/resource-registry": "0.7.0-alpha.0",
57
+ "@lwrjs/router": "0.7.0-alpha.0",
58
+ "@lwrjs/server": "0.7.0-alpha.0",
59
+ "@lwrjs/shared-utils": "0.7.0-alpha.0",
60
+ "@lwrjs/view-registry": "0.7.0-alpha.0",
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"
70
+ "@lwrjs/types": "0.7.0-alpha.0"
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": "31769655f0155ad7e54cf37bccdf72d0baaf44ab"
78
+ "gitHead": "4ed70d0bb9fd53feb629468b558b882adade0967"
79
79
  }