@lwrjs/core 0.9.0-alpha.9 → 0.9.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.
- package/build/cjs/context/provider.cjs +9 -5
- package/build/cjs/context/server.cjs +6 -6
- package/build/cjs/index.cjs +66 -41
- package/build/cjs/middleware/asset-middleware.cjs +70 -0
- package/build/cjs/middleware/bundle-middleware.cjs +113 -0
- package/build/cjs/{middlewares → middleware}/hmr-middleware.cjs +6 -6
- package/build/cjs/{middlewares → middleware}/locale-middleware.cjs +2 -2
- package/build/cjs/middleware/mapping-middleware.cjs +61 -0
- package/build/cjs/middleware/module-middleware.cjs +88 -0
- package/build/cjs/middleware/redirects/unsigned-module-redirect.cjs +37 -0
- package/build/cjs/middleware/resource-middleware.cjs +64 -0
- package/build/cjs/{context/global-data.cjs → middleware/utils/error-handling.cjs} +26 -24
- package/build/cjs/middleware/utils/identity.cjs +92 -0
- package/build/cjs/{context/services.cjs → middleware/utils/metadata.cjs} +19 -20
- package/build/cjs/{middlewares/utils.cjs → middleware/utils/request.cjs} +17 -16
- package/build/cjs/middleware/view-middleware.cjs +151 -0
- package/build/cjs/middleware.cjs +16 -9
- package/build/cjs/tools/server-warmup.cjs +2 -9
- package/build/cjs/tools/static-generation.cjs +190 -62
- package/build/es/context/provider.js +5 -3
- package/build/es/context/server.d.ts +1 -1
- package/build/es/context/server.js +6 -5
- package/build/es/index.d.ts +3 -2
- package/build/es/index.js +85 -49
- package/build/es/middleware/asset-middleware.d.ts +3 -0
- package/build/es/middleware/asset-middleware.js +42 -0
- package/build/es/middleware/bundle-middleware.d.ts +3 -0
- package/build/es/middleware/bundle-middleware.js +88 -0
- package/build/es/middleware/hmr-middleware.d.ts +5 -0
- package/build/es/{middlewares → middleware}/hmr-middleware.js +4 -4
- package/build/es/middleware/locale-middleware.d.ts +3 -0
- package/build/es/{middlewares → middleware}/locale-middleware.js +2 -1
- package/build/es/middleware/mapping-middleware.d.ts +3 -0
- package/build/es/middleware/mapping-middleware.js +34 -0
- package/build/es/middleware/module-middleware.d.ts +3 -0
- package/build/es/middleware/module-middleware.js +64 -0
- package/build/es/middleware/redirects/unsigned-module-redirect.d.ts +6 -0
- package/build/es/middleware/redirects/unsigned-module-redirect.js +25 -0
- package/build/es/middleware/resource-middleware.d.ts +3 -0
- package/build/es/middleware/resource-middleware.js +37 -0
- package/build/es/middleware/utils/error-handling.d.ts +3 -0
- package/build/es/middleware/utils/error-handling.js +32 -0
- package/build/es/middleware/utils/identity.d.ts +6 -0
- package/build/es/middleware/utils/identity.js +62 -0
- package/build/es/middleware/utils/metadata.d.ts +3 -0
- package/build/es/middleware/utils/metadata.js +24 -0
- package/build/es/middleware/utils/request.d.ts +15 -0
- package/build/es/{middlewares/utils.js → middleware/utils/request.js} +15 -23
- package/build/es/middleware/view-middleware.d.ts +3 -0
- package/build/es/middleware/view-middleware.js +136 -0
- package/build/es/middleware.d.ts +8 -14
- package/build/es/middleware.js +12 -20
- package/build/es/tools/server-warmup.js +3 -10
- package/build/es/tools/static-generation.d.ts +11 -1
- package/build/es/tools/static-generation.js +230 -79
- package/build/es/tools/types.d.ts +3 -2
- package/package.json +33 -34
- package/build/cjs/context/configurations.cjs +0 -82
- package/build/cjs/middlewares/api-middleware.cjs +0 -359
- package/build/cjs/middlewares/base-middleware.cjs +0 -15
- package/build/cjs/middlewares/ui-middleware.cjs +0 -183
- package/build/cjs/tools/server-build.cjs +0 -182
- package/build/es/context/configurations.d.ts +0 -9
- package/build/es/context/configurations.js +0 -53
- package/build/es/context/global-data.d.ts +0 -3
- package/build/es/context/global-data.js +0 -29
- package/build/es/context/services.d.ts +0 -3
- package/build/es/context/services.js +0 -27
- package/build/es/middlewares/api-middleware.d.ts +0 -3
- package/build/es/middlewares/api-middleware.js +0 -410
- package/build/es/middlewares/base-middleware.d.ts +0 -3
- package/build/es/middlewares/base-middleware.js +0 -4
- package/build/es/middlewares/hmr-middleware.d.ts +0 -5
- package/build/es/middlewares/locale-middleware.d.ts +0 -3
- package/build/es/middlewares/ui-middleware.d.ts +0 -3
- package/build/es/middlewares/ui-middleware.js +0 -186
- package/build/es/middlewares/utils.d.ts +0 -22
- package/build/es/tools/server-build.d.ts +0 -14
- package/build/es/tools/server-build.js +0 -182
|
@@ -37,55 +37,60 @@ var import_config = __toModule(require("@lwrjs/config"));
|
|
|
37
37
|
var SiteGenerator = class {
|
|
38
38
|
async buildStaticApplication(config, dispatcher) {
|
|
39
39
|
const startTime = import_perf_hooks.performance.now();
|
|
40
|
-
import_shared_utils.logger.info("[Static Generation
|
|
40
|
+
import_shared_utils.logger.info("[SSG] Static Site Generation");
|
|
41
41
|
if (!import_shared_utils.logger.currentLevel || import_shared_utils.logger.currentLevel == import_shared_utils.WARN || import_shared_utils.logger.currentLevel == import_shared_utils.INFO) {
|
|
42
42
|
import_shared_utils.logger.setOptions({dedupe: new Set([import_shared_utils.WARN])});
|
|
43
43
|
}
|
|
44
44
|
const {routes, staticSiteGenerator, rootDir, assets} = config;
|
|
45
45
|
if (!staticSiteGenerator.outputDir) {
|
|
46
|
-
staticSiteGenerator.outputDir = "
|
|
46
|
+
staticSiteGenerator.outputDir = "site";
|
|
47
47
|
}
|
|
48
48
|
const outputDir = (0, import_path.join)(rootDir, staticSiteGenerator.outputDir);
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
if (!staticSiteGenerator.skipCleanOutputDir) {
|
|
50
|
+
import_shared_utils.logger.info(`[SSG] Clearing output directory: ${outputDir}`);
|
|
51
|
+
import_fs_extra.default.rmSync(outputDir, {recursive: true, force: true});
|
|
52
|
+
} else if (import_fs_extra.default.existsSync(outputDir)) {
|
|
53
|
+
import_shared_utils.logger.info(`[SSG] Reusing existing output directory: ${outputDir}`);
|
|
54
|
+
}
|
|
51
55
|
const urlRewriteMap = new Map();
|
|
52
|
-
const {
|
|
53
|
-
const runtimeEnvironment =
|
|
54
|
-
|
|
55
|
-
apiVersion,
|
|
56
|
-
basePath,
|
|
57
|
-
lwrVersion,
|
|
58
|
-
debug: false,
|
|
59
|
-
serverMode
|
|
60
|
-
};
|
|
56
|
+
const {basePath} = config;
|
|
57
|
+
const runtimeEnvironment = (0, import_config.getRuntimeEnvironment)(config);
|
|
58
|
+
import_shared_utils.logger.info(`[SSG] Building routes (this may take some time to complete)`);
|
|
61
59
|
await this.generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, dispatcher, outputDir, urlRewriteMap);
|
|
62
60
|
this.writeNetlifyRedirectConfig(outputDir, urlRewriteMap);
|
|
63
|
-
this.copyAssets(assets, outputDir,
|
|
61
|
+
await this.copyAssets(assets, outputDir, config);
|
|
64
62
|
const endTime = import_perf_hooks.performance.now();
|
|
65
63
|
const timeDiff = (endTime - startTime) / 1e3;
|
|
66
|
-
import_shared_utils.logger.info(`[Static Generation
|
|
64
|
+
import_shared_utils.logger.info(`[SSG] Static Site Generation complete in ${Math.round(timeDiff)} seconds`);
|
|
67
65
|
}
|
|
68
66
|
async generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, dispatcher, outputDir, urlRewriteMap = new Map()) {
|
|
69
67
|
if (!staticSiteGenerator.locales) {
|
|
70
68
|
staticSiteGenerator.locales = ["en-US"];
|
|
71
69
|
}
|
|
72
70
|
const generateUrl = this.createGenerateURLFunction(dispatcher);
|
|
71
|
+
const {skipBaseDocumentGeneration = false} = staticSiteGenerator;
|
|
73
72
|
for (const locale of staticSiteGenerator.locales) {
|
|
74
73
|
for (const route of routes) {
|
|
75
|
-
const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment);
|
|
74
|
+
const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
|
|
76
75
|
await generateUrl(basePath + route.path, siteConfig);
|
|
77
76
|
}
|
|
78
77
|
if (staticSiteGenerator._additionalRoutePaths) {
|
|
79
78
|
for (const uri of staticSiteGenerator._additionalRoutePaths) {
|
|
80
|
-
const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment);
|
|
79
|
+
const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
|
|
81
80
|
await generateUrl(uri, siteConfig);
|
|
82
81
|
}
|
|
83
82
|
}
|
|
84
83
|
const {_additionalModules} = staticSiteGenerator;
|
|
85
84
|
if (_additionalModules) {
|
|
86
85
|
for (const specifier of _additionalModules) {
|
|
87
|
-
|
|
86
|
+
import_shared_utils.logger.debug(`[SSG] Additional Module: ${locale} ${specifier}`);
|
|
87
|
+
const startTime = import_perf_hooks.performance.now();
|
|
88
|
+
const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
|
|
88
89
|
await this.dispatchJSResourceRecursive(specifier, dispatcher, siteConfig, true);
|
|
90
|
+
await this.captureAdditionalRouteMetadata(siteConfig);
|
|
91
|
+
const endTime = import_perf_hooks.performance.now();
|
|
92
|
+
const timeDiff = endTime - startTime;
|
|
93
|
+
import_shared_utils.logger.info(`[SSG] Additional Module ${locale} ${specifier} in ${Math.round(timeDiff)} ms`);
|
|
89
94
|
}
|
|
90
95
|
}
|
|
91
96
|
}
|
|
@@ -93,10 +98,13 @@ var SiteGenerator = class {
|
|
|
93
98
|
createGenerateURLFunction(dispatcher) {
|
|
94
99
|
const generateRoute = async (uri, siteConfig) => {
|
|
95
100
|
const locale = siteConfig.locale;
|
|
96
|
-
import_shared_utils.logger.
|
|
101
|
+
import_shared_utils.logger.debug(`[SSG] Start Generate: ${locale} ${uri}`);
|
|
102
|
+
const startTime = import_perf_hooks.performance.now();
|
|
97
103
|
await this.dispatchResourceRecursive(uri, dispatcher, {resourceType: "route"}, siteConfig);
|
|
98
|
-
this.
|
|
99
|
-
|
|
104
|
+
await this.captureAdditionalRouteMetadata(siteConfig);
|
|
105
|
+
const endTime = import_perf_hooks.performance.now();
|
|
106
|
+
const timeDiff = endTime - startTime;
|
|
107
|
+
import_shared_utils.logger.info(`[SSG] ${locale} ${uri} in ${Math.round(timeDiff)} ms`);
|
|
100
108
|
};
|
|
101
109
|
return generateRoute.bind(this);
|
|
102
110
|
}
|
|
@@ -104,8 +112,12 @@ var SiteGenerator = class {
|
|
|
104
112
|
const {visitedUrls} = siteConfig;
|
|
105
113
|
if (!visitedUrls.has(url)) {
|
|
106
114
|
visitedUrls.add(url);
|
|
115
|
+
if ((0, import_shared_utils.isExternalUrl)(url)) {
|
|
116
|
+
import_shared_utils.logger.warn("[SSG] Skipped generation of external url: " + url);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
107
119
|
if (url.indexOf("/:") !== -1 || url.indexOf("*") !== -1) {
|
|
108
|
-
import_shared_utils.logger.warn("Skipped generation of url with variable path segment: " + url);
|
|
120
|
+
import_shared_utils.logger.warn("[SSG] Skipped generation of url with variable path segment: " + url);
|
|
109
121
|
return;
|
|
110
122
|
}
|
|
111
123
|
let context;
|
|
@@ -154,6 +166,9 @@ var SiteGenerator = class {
|
|
|
154
166
|
const jsUri = importModule.specifier.startsWith("/") ? importModule.specifier : (0, import_shared_utils.getSpecifier)(importModule);
|
|
155
167
|
dispatchRequests.push(this.dispatchJSResourceRecursive(jsUri, dispatcher, siteConfig));
|
|
156
168
|
}
|
|
169
|
+
if (moduleDefinition.bundleRecord) {
|
|
170
|
+
this.addBundleToSiteMetadata(moduleDefinition, url, siteConfig);
|
|
171
|
+
}
|
|
157
172
|
}
|
|
158
173
|
const uris = context.fs?.metadata?.resolvedUris || [];
|
|
159
174
|
for (const jsUri of uris) {
|
|
@@ -161,16 +176,64 @@ var SiteGenerator = class {
|
|
|
161
176
|
}
|
|
162
177
|
await Promise.all(dispatchRequests);
|
|
163
178
|
}
|
|
179
|
+
addBundleToSiteMetadata(bundleDefinition, url, siteConfig) {
|
|
180
|
+
if (siteConfig.siteMetadata) {
|
|
181
|
+
const specifier = bundleDefinition.specifier;
|
|
182
|
+
const imports = bundleDefinition.bundleRecord.imports?.map((moduleRef) => (0, import_shared_utils.getSpecifier)(moduleRef)) || [];
|
|
183
|
+
const bundleMetadata = {
|
|
184
|
+
version: bundleDefinition.version,
|
|
185
|
+
path: decodeURIComponent(url),
|
|
186
|
+
includedModules: bundleDefinition.bundleRecord.includedModules || [],
|
|
187
|
+
imports
|
|
188
|
+
};
|
|
189
|
+
const siteBundles = siteConfig.siteMetadata.getSiteBundles().bundles;
|
|
190
|
+
siteBundles[specifier] = bundleMetadata;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
addResourceToSiteMetadata(resourceDefinition, url, siteConfig) {
|
|
194
|
+
if (siteConfig.siteMetadata) {
|
|
195
|
+
if (!resourceDefinition.specifier) {
|
|
196
|
+
import_shared_utils.logger.warn("[SSG] Could not save resource metadata. There was no specifier.", resourceDefinition);
|
|
197
|
+
} else {
|
|
198
|
+
const specifier = resourceDefinition.specifier;
|
|
199
|
+
const resourceMetadata = {
|
|
200
|
+
path: decodeURIComponent(url),
|
|
201
|
+
mimeType: resourceDefinition.type
|
|
202
|
+
};
|
|
203
|
+
const siteResources = siteConfig.siteMetadata.getSiteResources();
|
|
204
|
+
siteResources.resources[specifier] = resourceMetadata;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
addAssetToSiteMetadata(assetDefinition, url, siteConfig) {
|
|
209
|
+
if (siteConfig.siteMetadata) {
|
|
210
|
+
if (!assetDefinition.uri) {
|
|
211
|
+
import_shared_utils.logger.warn("[SSG] Could not save asset metadata. There was no uri.", assetDefinition);
|
|
212
|
+
} else {
|
|
213
|
+
const specifier = assetDefinition.uri;
|
|
214
|
+
const resourceMetadata = {
|
|
215
|
+
path: decodeURIComponent(url),
|
|
216
|
+
mimeType: String(assetDefinition.mime)
|
|
217
|
+
};
|
|
218
|
+
const siteAssets = siteConfig.siteMetadata.getSiteAssets();
|
|
219
|
+
if (!siteAssets.assets[specifier]) {
|
|
220
|
+
siteAssets.assets[specifier] = resourceMetadata;
|
|
221
|
+
} else {
|
|
222
|
+
import_shared_utils.logger.debug(`[SSG] Ignore asset redefinition ${specifier}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
164
227
|
async handleMappingResource(url, context, siteConfig, dispatcher) {
|
|
165
|
-
const {importMetadata
|
|
228
|
+
const {importMetadata} = siteConfig;
|
|
166
229
|
const statusCode = context.response?.status;
|
|
167
230
|
if (statusCode === 200) {
|
|
168
231
|
const newImportMetadata = context.fs?.body;
|
|
169
232
|
let filteredImportMetadata;
|
|
170
|
-
if (!
|
|
233
|
+
if (!importMetadata) {
|
|
171
234
|
filteredImportMetadata = newImportMetadata;
|
|
172
235
|
} else {
|
|
173
|
-
filteredImportMetadata =
|
|
236
|
+
filteredImportMetadata = importMetadata.addAdditionalMetadata(newImportMetadata);
|
|
174
237
|
}
|
|
175
238
|
const dispatchRequests = [];
|
|
176
239
|
for (const uri of Object.keys(filteredImportMetadata.imports)) {
|
|
@@ -179,29 +242,31 @@ var SiteGenerator = class {
|
|
|
179
242
|
await Promise.all(dispatchRequests);
|
|
180
243
|
} else {
|
|
181
244
|
const body = context.fs?.body;
|
|
182
|
-
import_shared_utils.logger.warn(`Failed to fetch ${url}: (${statusCode}) ${body}`);
|
|
245
|
+
import_shared_utils.logger.warn(`[SSG] Failed to fetch ${url}: (${statusCode}) ${body}`);
|
|
183
246
|
}
|
|
184
247
|
}
|
|
185
248
|
async handleHtmlResource(url, context, siteConfig, dispatcher) {
|
|
186
|
-
const {outputDir} = siteConfig;
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
siteConfig.
|
|
200
|
-
|
|
249
|
+
const {outputDir, skipBaseDocumentGeneration} = siteConfig;
|
|
250
|
+
if (!skipBaseDocumentGeneration) {
|
|
251
|
+
let fileName = "index.html";
|
|
252
|
+
let directoryPath = url;
|
|
253
|
+
if (url.endsWith(".html") || url.endsWith(".xml")) {
|
|
254
|
+
const lastPathIndex = url.lastIndexOf("/") + 1;
|
|
255
|
+
fileName = url.substring(lastPathIndex, url.length);
|
|
256
|
+
directoryPath = url.substring(0, lastPathIndex);
|
|
257
|
+
}
|
|
258
|
+
const dir = (0, import_dir.createResourceDir)(directoryPath, outputDir);
|
|
259
|
+
const localeDir = (0, import_dir.createResourceDir)(directoryPath, (0, import_path.join)(outputDir, siteConfig.locale));
|
|
260
|
+
const filePath = (0, import_path.join)(dir, fileName);
|
|
261
|
+
const fileLocalePath = (0, import_path.join)(localeDir, fileName);
|
|
262
|
+
if (siteConfig.locale.toLowerCase().startsWith("en")) {
|
|
263
|
+
siteConfig.viewPaths.add(filePath);
|
|
264
|
+
await (0, import_stream.writeResponse)(context, filePath);
|
|
265
|
+
}
|
|
266
|
+
(0, import_dir.createDir)(localeDir);
|
|
267
|
+
siteConfig.viewPaths.add(fileLocalePath);
|
|
268
|
+
await (0, import_stream.writeResponse)(context, fileLocalePath);
|
|
201
269
|
}
|
|
202
|
-
(0, import_dir.createDir)(localeDir);
|
|
203
|
-
siteConfig.viewPaths.add(fileLocalePath);
|
|
204
|
-
await (0, import_stream.writeResponse)(context, fileLocalePath);
|
|
205
270
|
const viewDefinition = context.fs?.metadata?.viewDefinition;
|
|
206
271
|
if (viewDefinition) {
|
|
207
272
|
await this.handleViewDefinition(viewDefinition, siteConfig, dispatcher);
|
|
@@ -243,7 +308,7 @@ var SiteGenerator = class {
|
|
|
243
308
|
siteConfig.viewConfigPath = this.getResourcePathFromUrl(siteConfig, resourceUri);
|
|
244
309
|
}
|
|
245
310
|
} else {
|
|
246
|
-
import_shared_utils.logger.warn("Skipped inline bootstrap resource: %j", resource);
|
|
311
|
+
import_shared_utils.logger.warn("[SSG] Skipped inline bootstrap resource: %j", resource);
|
|
247
312
|
}
|
|
248
313
|
}
|
|
249
314
|
}
|
|
@@ -253,7 +318,7 @@ var SiteGenerator = class {
|
|
|
253
318
|
if (resourceUri.startsWith("/")) {
|
|
254
319
|
dispatchRequests.push(this.dispatchResourceRecursive(resourceUri, dispatcher, {resourceType: "resource"}, siteConfig));
|
|
255
320
|
} else {
|
|
256
|
-
import_shared_utils.logger.warn("Skipped resource: %j", resource);
|
|
321
|
+
import_shared_utils.logger.warn("[SSG] Skipped resource: %j", resource);
|
|
257
322
|
}
|
|
258
323
|
}
|
|
259
324
|
await Promise.all(dispatchRequests);
|
|
@@ -269,7 +334,7 @@ var SiteGenerator = class {
|
|
|
269
334
|
const mappingURL = siteConfig.endpoints?.uris?.mapping + encodeURIComponent(jsUri);
|
|
270
335
|
await this.dispatchResourceRecursive(mappingURL, dispatcher, {resourceType: "mapping"}, siteConfig);
|
|
271
336
|
} else {
|
|
272
|
-
import_shared_utils.logger.warn('Unable to fetch mapping for bare specifier or variable dynamic import: "' + jsUri + '"');
|
|
337
|
+
import_shared_utils.logger.warn('[SSG] Unable to fetch mapping for bare specifier or variable dynamic import: "' + jsUri + '"');
|
|
273
338
|
}
|
|
274
339
|
} else if (isAdditionalModulesRequest) {
|
|
275
340
|
const uri = `${siteConfig.endpoints?.uris.legacyDefault}${encodeURIComponent(jsUri)}`;
|
|
@@ -281,12 +346,17 @@ var SiteGenerator = class {
|
|
|
281
346
|
const metadata = context.fs?.metadata;
|
|
282
347
|
const fullPath = this.getResourcePathFromUrl(siteConfig, url);
|
|
283
348
|
await (0, import_stream.writeResponse)(context, fullPath);
|
|
349
|
+
if (metadata?.resource) {
|
|
350
|
+
this.addResourceToSiteMetadata(metadata?.resource, url, siteConfig);
|
|
351
|
+
} else if (metadata?.asset) {
|
|
352
|
+
this.addAssetToSiteMetadata(metadata?.asset, url, siteConfig);
|
|
353
|
+
}
|
|
284
354
|
const assetReferences = metadata?.asset?.metadata?.assetReferences || [];
|
|
285
355
|
const dispatchRequests = [];
|
|
286
356
|
for (const ref of assetReferences) {
|
|
287
357
|
const refUrl = ref.override?.uri || ref.url;
|
|
288
358
|
dispatchRequests.push(this.dispatchResourceRecursive(refUrl, dispatcher, {resourceType: "asset", asset: metadata?.asset}, siteConfig).catch((err) => {
|
|
289
|
-
import_shared_utils.logger.warn(`Failed to fetch asset reference => ${refUrl} from ${url}`, err);
|
|
359
|
+
import_shared_utils.logger.warn(`[SSG] Failed to fetch asset reference => ${refUrl} from ${url}`, err);
|
|
290
360
|
}));
|
|
291
361
|
}
|
|
292
362
|
return Promise.all(dispatchRequests);
|
|
@@ -315,22 +385,67 @@ var SiteGenerator = class {
|
|
|
315
385
|
});
|
|
316
386
|
import_fs_extra.default.writeFileSync(serveJsonPath, JSON.stringify({rewrites, directoryListing: false, renderSingle: true}, null, 1));
|
|
317
387
|
}
|
|
318
|
-
copyAssets(assets, outputDir,
|
|
388
|
+
async copyAssets(assets, outputDir, config) {
|
|
389
|
+
const {basePath} = config;
|
|
390
|
+
const runtimeEnvironment = (0, import_config.getRuntimeEnvironment)(config);
|
|
391
|
+
const siteConfig = this.createSiteConfig(outputDir, "en-US", new Map(), true, runtimeEnvironment);
|
|
319
392
|
for (const asset of assets) {
|
|
320
393
|
try {
|
|
321
|
-
const
|
|
322
|
-
const
|
|
394
|
+
const assetSrcFile = asset.file;
|
|
395
|
+
const assetSrcDir = asset.dir;
|
|
396
|
+
const assetsPath = (0, import_path.join)(outputDir, basePath ? basePath + asset.urlPath : asset.urlPath);
|
|
323
397
|
if (assetSrcDir && import_fs_extra.default.existsSync(assetSrcDir)) {
|
|
324
|
-
import_fs_extra.default.copySync(assetSrcDir,
|
|
398
|
+
import_fs_extra.default.copySync(assetSrcDir, assetsPath);
|
|
399
|
+
this.addAssetsToMetadata(assetsPath, siteConfig);
|
|
400
|
+
} else if (assetSrcFile && import_fs_extra.default.existsSync(assetSrcFile)) {
|
|
401
|
+
import_fs_extra.default.copySync(assetSrcFile, assetsPath);
|
|
402
|
+
this.addAssetToMetadata(assetsPath, siteConfig);
|
|
325
403
|
} else {
|
|
326
|
-
import_shared_utils.logger.warn("Could not find assets to copy at path: " +
|
|
404
|
+
import_shared_utils.logger.warn("[SSG] Could not find assets to copy at path: " + assetsPath);
|
|
327
405
|
}
|
|
328
406
|
} catch (e) {
|
|
329
|
-
import_shared_utils.logger.error("Error occurred processing asset config: " + JSON.stringify(asset), e);
|
|
407
|
+
import_shared_utils.logger.error("[SSG] Error occurred processing asset config: " + JSON.stringify(asset), e);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
await siteConfig.siteMetadata?.persistSiteMetadata();
|
|
411
|
+
}
|
|
412
|
+
addAssetsToMetadata(directoryPath, siteConfig) {
|
|
413
|
+
try {
|
|
414
|
+
const files = import_fs_extra.default.readdirSync(directoryPath);
|
|
415
|
+
for (const file of files) {
|
|
416
|
+
const filePath = (0, import_path.join)(directoryPath, file);
|
|
417
|
+
if (import_fs_extra.default.statSync(filePath).isDirectory()) {
|
|
418
|
+
this.addAssetsToMetadata(filePath, siteConfig);
|
|
419
|
+
} else {
|
|
420
|
+
this.addAssetToMetadata(filePath, siteConfig);
|
|
421
|
+
}
|
|
330
422
|
}
|
|
423
|
+
} catch (err) {
|
|
424
|
+
import_shared_utils.logger.warn(`[SSG] Unexpected error collecting asset directory metadata for ${directoryPath}`, err);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
addAssetToMetadata(filePath, siteConfig) {
|
|
428
|
+
try {
|
|
429
|
+
const uri = encodeURI((0, import_path.normalize)(filePath).replace(siteConfig.outputDir, ""));
|
|
430
|
+
this.addAssetToSiteMetadata({
|
|
431
|
+
uri,
|
|
432
|
+
type: "asset",
|
|
433
|
+
stream: function(encoding) {
|
|
434
|
+
throw new Error("Function not implemented.");
|
|
435
|
+
},
|
|
436
|
+
entry: filePath,
|
|
437
|
+
ext: (0, import_path.extname)(filePath),
|
|
438
|
+
mime: (0, import_shared_utils.mimeLookup)(filePath),
|
|
439
|
+
ownHash: "not-provided",
|
|
440
|
+
content: function(encoding) {
|
|
441
|
+
throw new Error("Function not implemented.");
|
|
442
|
+
}
|
|
443
|
+
}, uri, siteConfig);
|
|
444
|
+
} catch (err) {
|
|
445
|
+
import_shared_utils.logger.warn(`[SSG] Unexpected error collecting asset metadata for ${filePath}`, err);
|
|
331
446
|
}
|
|
332
447
|
}
|
|
333
|
-
createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment) {
|
|
448
|
+
createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment) {
|
|
334
449
|
const featureFlags = this.filterFeatureFlags();
|
|
335
450
|
const endpoints = {
|
|
336
451
|
uris: {
|
|
@@ -345,12 +460,21 @@ var SiteGenerator = class {
|
|
|
345
460
|
locale,
|
|
346
461
|
urlRewriteMap,
|
|
347
462
|
endpoints,
|
|
348
|
-
|
|
463
|
+
skipBaseDocumentGeneration,
|
|
464
|
+
...featureFlags,
|
|
465
|
+
siteMetadata: new import_shared_utils.SiteMetadataImpl({rootDir: outputDir})
|
|
349
466
|
};
|
|
350
467
|
}
|
|
351
468
|
filterFeatureFlags() {
|
|
352
|
-
|
|
353
|
-
|
|
469
|
+
const ffs = (0, import_shared_utils.getFeatureFlags)();
|
|
470
|
+
if (ffs && Object.keys(ffs).length) {
|
|
471
|
+
const accumulator = {};
|
|
472
|
+
for (const [key, value] of Object.entries(ffs)) {
|
|
473
|
+
if (value) {
|
|
474
|
+
accumulator[key] = true;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
return {featureFlags: accumulator};
|
|
354
478
|
} else {
|
|
355
479
|
return void 0;
|
|
356
480
|
}
|
|
@@ -387,6 +511,10 @@ ${mergeIndex}
|
|
|
387
511
|
});
|
|
388
512
|
}
|
|
389
513
|
}
|
|
514
|
+
async captureAdditionalRouteMetadata(siteConfig) {
|
|
515
|
+
this.addAdditionalImportMetadataToViewConfig(siteConfig);
|
|
516
|
+
await siteConfig.siteMetadata?.persistSiteMetadata();
|
|
517
|
+
}
|
|
390
518
|
};
|
|
391
519
|
var static_generation_default = SiteGenerator;
|
|
392
520
|
var ViewImportMetadataImpl = class {
|
|
@@ -414,10 +542,10 @@ var ViewImportMetadataImpl = class {
|
|
|
414
542
|
index
|
|
415
543
|
};
|
|
416
544
|
}
|
|
417
|
-
mergeImportMetadata(
|
|
418
|
-
Object.assign(
|
|
419
|
-
if (
|
|
420
|
-
Object.assign(
|
|
545
|
+
mergeImportMetadata(targetImportMetadata, newImportMetadata) {
|
|
546
|
+
Object.assign(targetImportMetadata.imports, newImportMetadata.imports);
|
|
547
|
+
if (targetImportMetadata.index) {
|
|
548
|
+
Object.assign(targetImportMetadata.index, newImportMetadata.index || {});
|
|
421
549
|
}
|
|
422
550
|
}
|
|
423
551
|
};
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { deepFreeze } from '@lwrjs/shared-utils';
|
|
2
2
|
export function createProviderContext(serverContext) {
|
|
3
3
|
// This is a subset of config to user-land code
|
|
4
|
-
const { cacheDir, lwc: { modules = [] }, routes, errorRoutes, rootDir, contentDir, layoutsDir, locker, amdLoader, esmLoader, environment, basePath, } = serverContext.appConfig;
|
|
4
|
+
const { assets, cacheDir, lwc: { modules = [] }, routes, errorRoutes, rootDir, contentDir, layoutsDir, locker, amdLoader, esmLoader, environment, basePath, bundleConfig, } = serverContext.appConfig;
|
|
5
5
|
const { onModuleDefinitionChange, onModuleSourceChange } = serverContext.appObserver;
|
|
6
6
|
const { notifyModuleDefinitionChanged, notifyModuleSourceChanged, notifyViewSourceChanged, notifyAssetSourceChanged, } = serverContext.appEmitter;
|
|
7
7
|
return {
|
|
8
|
-
compiler: serverContext.compiler,
|
|
9
8
|
appObserver: deepFreeze({ onModuleDefinitionChange, onModuleSourceChange }),
|
|
10
9
|
appEmitter: {
|
|
11
10
|
notifyModuleDefinitionChanged: (payload) => notifyModuleDefinitionChanged.call(serverContext.appEmitter, payload),
|
|
@@ -14,11 +13,12 @@ export function createProviderContext(serverContext) {
|
|
|
14
13
|
notifyAssetSourceChanged: (payload) => notifyAssetSourceChanged.call(serverContext.appEmitter, payload),
|
|
15
14
|
},
|
|
16
15
|
moduleRegistry: serverContext.moduleRegistry.getPublicApi(),
|
|
17
|
-
moduleBundler: serverContext.moduleBundler,
|
|
16
|
+
moduleBundler: serverContext.moduleBundler.getPublicApi(),
|
|
18
17
|
resourceRegistry: serverContext.resourceRegistry.getPublicApi(),
|
|
19
18
|
viewRegistry: serverContext.viewRegistry.getPublicApi(),
|
|
20
19
|
assetRegistry: serverContext.assetRegistry.getPublicApi(),
|
|
21
20
|
config: deepFreeze({
|
|
21
|
+
assets,
|
|
22
22
|
cacheDir,
|
|
23
23
|
modules,
|
|
24
24
|
routes,
|
|
@@ -31,8 +31,10 @@ export function createProviderContext(serverContext) {
|
|
|
31
31
|
amdLoader,
|
|
32
32
|
esmLoader,
|
|
33
33
|
environment,
|
|
34
|
+
bundleConfig,
|
|
34
35
|
}),
|
|
35
36
|
runtimeEnvironment: deepFreeze(serverContext.runtimeEnvironment),
|
|
37
|
+
watcherFactory: serverContext.watcherFactory,
|
|
36
38
|
};
|
|
37
39
|
}
|
|
38
40
|
//# sourceMappingURL=provider.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { GlobalData, NormalizedLwrGlobalConfig, RuntimeEnvironment, ServerContext } from '@lwrjs/types';
|
|
1
|
+
import type { GlobalData, NormalizedLwrGlobalConfig, RuntimeEnvironment, ServerContext } from '@lwrjs/types';
|
|
2
2
|
export declare function createServerContext(appConfig: NormalizedLwrGlobalConfig, runtimeEnvironment: RuntimeEnvironment, globalData: GlobalData): ServerContext;
|
|
3
3
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1,26 +1,25 @@
|
|
|
1
1
|
import { LwrAssetRegistry } from '@lwrjs/asset-registry';
|
|
2
|
-
import { LwrCompiler } from '@lwrjs/compiler';
|
|
3
2
|
import { LwrModuleBundler } from '@lwrjs/module-bundler';
|
|
4
3
|
import { LwrModuleRegistry } from '@lwrjs/module-registry';
|
|
5
4
|
import { LwrResourceRegistry } from '@lwrjs/resource-registry';
|
|
6
5
|
import { LwrApplicationObserver } from '@lwrjs/shared-utils';
|
|
7
6
|
import { LwrViewRegistry } from '@lwrjs/view-registry';
|
|
7
|
+
// dependency chokidar in this package.json is to statisfy the optional dependency in shared-utils for fs-watch.
|
|
8
|
+
import { WatcherFactoryImpl } from '@lwrjs/shared-utils/fs-watch';
|
|
8
9
|
export function createServerContext(appConfig, runtimeEnvironment, globalData) {
|
|
9
10
|
const appObserver = new LwrApplicationObserver();
|
|
10
11
|
const appEmitter = appObserver.createLwrEmitter();
|
|
11
|
-
const compiler = new LwrCompiler();
|
|
12
12
|
const assetRegistry = new LwrAssetRegistry({
|
|
13
13
|
appObserver,
|
|
14
14
|
appEmitter,
|
|
15
15
|
runtimeEnvironment,
|
|
16
16
|
}, appConfig);
|
|
17
17
|
const moduleRegistry = new LwrModuleRegistry({
|
|
18
|
-
compiler,
|
|
19
18
|
appObserver,
|
|
20
19
|
appEmitter,
|
|
21
20
|
runtimeEnvironment,
|
|
22
21
|
}, appConfig);
|
|
23
|
-
const moduleBundler = new LwrModuleBundler({
|
|
22
|
+
const moduleBundler = new LwrModuleBundler({ moduleRegistry, appObserver }, appConfig);
|
|
24
23
|
const resourceRegistry = new LwrResourceRegistry();
|
|
25
24
|
const viewRegistry = new LwrViewRegistry({
|
|
26
25
|
moduleRegistry,
|
|
@@ -32,8 +31,8 @@ export function createServerContext(appConfig, runtimeEnvironment, globalData) {
|
|
|
32
31
|
globalData,
|
|
33
32
|
runtimeEnvironment,
|
|
34
33
|
}, appConfig);
|
|
34
|
+
const watcherFactory = new WatcherFactoryImpl();
|
|
35
35
|
return {
|
|
36
|
-
compiler,
|
|
37
36
|
appObserver,
|
|
38
37
|
appEmitter,
|
|
39
38
|
moduleRegistry,
|
|
@@ -41,8 +40,10 @@ export function createServerContext(appConfig, runtimeEnvironment, globalData) {
|
|
|
41
40
|
resourceRegistry,
|
|
42
41
|
assetRegistry,
|
|
43
42
|
viewRegistry,
|
|
43
|
+
watcherFactory,
|
|
44
44
|
appConfig,
|
|
45
45
|
runtimeEnvironment,
|
|
46
|
+
routeHandlers: {},
|
|
46
47
|
};
|
|
47
48
|
}
|
|
48
49
|
//# sourceMappingURL=server.js.map
|
package/build/es/index.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { LwrGlobalConfig, NormalizedLwrGlobalConfig, ServerTypeImpl, PublicAppServer, ServerTypes } from '@lwrjs/types';
|
|
1
|
+
import type { LwrGlobalConfig, NormalizedLwrGlobalConfig, ServerTypeImpl, PublicAppServer, ServerTypes } from '@lwrjs/types';
|
|
2
2
|
export declare class LwrApp {
|
|
3
3
|
private app;
|
|
4
4
|
private server;
|
|
5
5
|
private initialized;
|
|
6
6
|
private config;
|
|
7
|
+
private runtimeEnvironment;
|
|
8
|
+
private globalData;
|
|
7
9
|
constructor(config?: LwrGlobalConfig);
|
|
8
10
|
setConfig(config: LwrGlobalConfig): void;
|
|
9
11
|
getConfig(): NormalizedLwrGlobalConfig;
|
|
@@ -21,5 +23,4 @@ export declare class LwrApp {
|
|
|
21
23
|
}
|
|
22
24
|
export declare function createServer(config?: LwrGlobalConfig): LwrApp;
|
|
23
25
|
export declare function generateStaticSite(config?: LwrGlobalConfig): Promise<NormalizedLwrGlobalConfig>;
|
|
24
|
-
export { buildServer } from './tools/server-build.js';
|
|
25
26
|
//# sourceMappingURL=index.d.ts.map
|