@lwrjs/core 0.9.0-alpha.12 → 0.9.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.
- package/build/cjs/context/provider.cjs +6 -4
- package/build/cjs/context/server.cjs +5 -6
- package/build/cjs/index.cjs +35 -26
- package/build/cjs/middleware/bundle-middleware.cjs +2 -2
- package/build/cjs/middleware/module-middleware.cjs +1 -1
- package/build/cjs/middleware/redirects/unsigned-module-redirect.cjs +2 -2
- package/build/cjs/middleware/utils/metadata.cjs +3 -3
- package/build/cjs/middleware/view-middleware.cjs +12 -16
- package/build/cjs/tools/server-warmup.cjs +2 -9
- package/build/cjs/tools/static-generation.cjs +108 -27
- package/build/es/context/provider.js +3 -2
- package/build/es/context/server.js +5 -5
- package/build/es/index.d.ts +0 -1
- package/build/es/index.js +45 -27
- package/build/es/middleware/bundle-middleware.js +2 -2
- package/build/es/middleware/module-middleware.js +1 -1
- package/build/es/middleware/redirects/unsigned-module-redirect.d.ts +2 -2
- package/build/es/middleware/redirects/unsigned-module-redirect.js +2 -2
- package/build/es/middleware/utils/metadata.d.ts +2 -2
- package/build/es/middleware/utils/metadata.js +3 -7
- package/build/es/middleware/view-middleware.d.ts +2 -2
- package/build/es/middleware/view-middleware.js +12 -16
- package/build/es/tools/server-warmup.js +3 -10
- package/build/es/tools/static-generation.d.ts +8 -1
- package/build/es/tools/static-generation.js +126 -29
- package/build/es/tools/types.d.ts +2 -2
- package/package.json +29 -27
- package/build/cjs/context/configurations.cjs +0 -82
- package/build/cjs/context/global-data.cjs +0 -54
- package/build/cjs/context/services.cjs +0 -50
- 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/tools/server-build.d.ts +0 -14
- package/build/es/tools/server-build.js +0 -182
|
@@ -40,7 +40,8 @@ function createProviderContext(serverContext) {
|
|
|
40
40
|
amdLoader,
|
|
41
41
|
esmLoader,
|
|
42
42
|
environment,
|
|
43
|
-
basePath
|
|
43
|
+
basePath,
|
|
44
|
+
bundleConfig
|
|
44
45
|
} = serverContext.appConfig;
|
|
45
46
|
const {onModuleDefinitionChange, onModuleSourceChange} = serverContext.appObserver;
|
|
46
47
|
const {
|
|
@@ -50,7 +51,6 @@ function createProviderContext(serverContext) {
|
|
|
50
51
|
notifyAssetSourceChanged
|
|
51
52
|
} = serverContext.appEmitter;
|
|
52
53
|
return {
|
|
53
|
-
compiler: serverContext.compiler,
|
|
54
54
|
appObserver: (0, import_shared_utils.deepFreeze)({onModuleDefinitionChange, onModuleSourceChange}),
|
|
55
55
|
appEmitter: {
|
|
56
56
|
notifyModuleDefinitionChanged: (payload) => notifyModuleDefinitionChanged.call(serverContext.appEmitter, payload),
|
|
@@ -75,8 +75,10 @@ function createProviderContext(serverContext) {
|
|
|
75
75
|
locker,
|
|
76
76
|
amdLoader,
|
|
77
77
|
esmLoader,
|
|
78
|
-
environment
|
|
78
|
+
environment,
|
|
79
|
+
bundleConfig
|
|
79
80
|
}),
|
|
80
|
-
runtimeEnvironment: (0, import_shared_utils.deepFreeze)(serverContext.runtimeEnvironment)
|
|
81
|
+
runtimeEnvironment: (0, import_shared_utils.deepFreeze)(serverContext.runtimeEnvironment),
|
|
82
|
+
watcherFactory: serverContext.watcherFactory
|
|
81
83
|
};
|
|
82
84
|
}
|
|
@@ -27,28 +27,26 @@ __export(exports, {
|
|
|
27
27
|
createServerContext: () => createServerContext
|
|
28
28
|
});
|
|
29
29
|
var import_asset_registry = __toModule(require("@lwrjs/asset-registry"));
|
|
30
|
-
var import_compiler = __toModule(require("@lwrjs/compiler"));
|
|
31
30
|
var import_module_bundler = __toModule(require("@lwrjs/module-bundler"));
|
|
32
31
|
var import_module_registry = __toModule(require("@lwrjs/module-registry"));
|
|
33
32
|
var import_resource_registry = __toModule(require("@lwrjs/resource-registry"));
|
|
34
33
|
var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
|
|
35
34
|
var import_view_registry = __toModule(require("@lwrjs/view-registry"));
|
|
35
|
+
var import_fs_watch = __toModule(require("@lwrjs/shared-utils/fs-watch"));
|
|
36
36
|
function createServerContext(appConfig, runtimeEnvironment, globalData) {
|
|
37
37
|
const appObserver = new import_shared_utils.LwrApplicationObserver();
|
|
38
38
|
const appEmitter = appObserver.createLwrEmitter();
|
|
39
|
-
const compiler = new import_compiler.LwrCompiler();
|
|
40
39
|
const assetRegistry = new import_asset_registry.LwrAssetRegistry({
|
|
41
40
|
appObserver,
|
|
42
41
|
appEmitter,
|
|
43
42
|
runtimeEnvironment
|
|
44
43
|
}, appConfig);
|
|
45
44
|
const moduleRegistry = new import_module_registry.LwrModuleRegistry({
|
|
46
|
-
compiler,
|
|
47
45
|
appObserver,
|
|
48
46
|
appEmitter,
|
|
49
47
|
runtimeEnvironment
|
|
50
48
|
}, appConfig);
|
|
51
|
-
const moduleBundler = new import_module_bundler.LwrModuleBundler({
|
|
49
|
+
const moduleBundler = new import_module_bundler.LwrModuleBundler({moduleRegistry, appObserver}, appConfig);
|
|
52
50
|
const resourceRegistry = new import_resource_registry.LwrResourceRegistry();
|
|
53
51
|
const viewRegistry = new import_view_registry.LwrViewRegistry({
|
|
54
52
|
moduleRegistry,
|
|
@@ -60,8 +58,8 @@ function createServerContext(appConfig, runtimeEnvironment, globalData) {
|
|
|
60
58
|
globalData,
|
|
61
59
|
runtimeEnvironment
|
|
62
60
|
}, appConfig);
|
|
61
|
+
const watcherFactory = new import_fs_watch.WatcherFactoryImpl();
|
|
63
62
|
return {
|
|
64
|
-
compiler,
|
|
65
63
|
appObserver,
|
|
66
64
|
appEmitter,
|
|
67
65
|
moduleRegistry,
|
|
@@ -70,6 +68,7 @@ function createServerContext(appConfig, runtimeEnvironment, globalData) {
|
|
|
70
68
|
assetRegistry,
|
|
71
69
|
viewRegistry,
|
|
72
70
|
appConfig,
|
|
73
|
-
runtimeEnvironment
|
|
71
|
+
runtimeEnvironment,
|
|
72
|
+
watcherFactory
|
|
74
73
|
};
|
|
75
74
|
}
|
package/build/cjs/index.cjs
CHANGED
|
@@ -25,7 +25,6 @@ var __toModule = (module2) => {
|
|
|
25
25
|
__markAsModule(exports);
|
|
26
26
|
__export(exports, {
|
|
27
27
|
LwrApp: () => LwrApp,
|
|
28
|
-
buildServer: () => import_server_build.buildServer,
|
|
29
28
|
createServer: () => createServer,
|
|
30
29
|
generateStaticSite: () => generateStaticSite
|
|
31
30
|
});
|
|
@@ -33,12 +32,10 @@ var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
|
|
|
33
32
|
var import_server = __toModule(require("@lwrjs/server"));
|
|
34
33
|
var import_diagnostics = __toModule(require("@lwrjs/diagnostics"));
|
|
35
34
|
var import_config = __toModule(require("@lwrjs/config"));
|
|
36
|
-
var import_services = __toModule(require("./context/services.cjs"));
|
|
37
|
-
var import_configurations = __toModule(require("./context/configurations.cjs"));
|
|
38
|
-
var import_provider = __toModule(require("./context/provider.cjs"));
|
|
39
|
-
var import_server2 = __toModule(require("./context/server.cjs"));
|
|
40
35
|
var import_static_generation = __toModule(require("./tools/static-generation.cjs"));
|
|
41
36
|
var import_server_warmup = __toModule(require("./tools/server-warmup.cjs"));
|
|
37
|
+
var import_server2 = __toModule(require("./context/server.cjs"));
|
|
38
|
+
var import_provider = __toModule(require("./context/provider.cjs"));
|
|
42
39
|
var import_locale_middleware = __toModule(require("./middleware/locale-middleware.cjs"));
|
|
43
40
|
var import_module_middleware = __toModule(require("./middleware/module-middleware.cjs"));
|
|
44
41
|
var import_bundle_middleware = __toModule(require("./middleware/bundle-middleware.cjs"));
|
|
@@ -47,8 +44,9 @@ var import_asset_middleware = __toModule(require("./middleware/asset-middleware.
|
|
|
47
44
|
var import_view_middleware = __toModule(require("./middleware/view-middleware.cjs"));
|
|
48
45
|
var import_resource_middleware = __toModule(require("./middleware/resource-middleware.cjs"));
|
|
49
46
|
var import_hmr_middleware = __toModule(require("./middleware/hmr-middleware.cjs"));
|
|
50
|
-
var
|
|
51
|
-
|
|
47
|
+
var import_amd_bundle_provider = __toModule(require("@lwrjs/module-bundler/amd-bundle-provider"));
|
|
48
|
+
var import_esm_bundle_provider = __toModule(require("@lwrjs/module-bundler/esm-bundle-provider"));
|
|
49
|
+
function initMiddleware(app, server, serverContext, routes, errorRoutes) {
|
|
52
50
|
app.useCompression();
|
|
53
51
|
(0, import_locale_middleware.localeMiddleware)(app, serverContext);
|
|
54
52
|
(0, import_module_middleware.moduleMiddleware)(app, serverContext);
|
|
@@ -56,28 +54,34 @@ function initMiddleware(app, server, serverContext) {
|
|
|
56
54
|
(0, import_mapping_middleware.mappingMiddleware)(app, serverContext);
|
|
57
55
|
(0, import_asset_middleware.assetMiddleware)(app, serverContext);
|
|
58
56
|
(0, import_resource_middleware.resourceMiddleware)(app, serverContext);
|
|
59
|
-
(0, import_view_middleware.viewMiddleware)(app, serverContext);
|
|
57
|
+
(0, import_view_middleware.viewMiddleware)(app, serverContext, routes, errorRoutes);
|
|
60
58
|
app.initRoutes();
|
|
61
59
|
if (serverContext.runtimeEnvironment.hmrEnabled) {
|
|
62
60
|
(0, import_hmr_middleware.hmrMiddleware)(server, serverContext);
|
|
63
61
|
}
|
|
64
62
|
}
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
function createServices(entries, providerContext) {
|
|
64
|
+
return entries.map(([ctor, providerConfig = {}]) => new ctor(providerConfig, providerContext));
|
|
65
|
+
}
|
|
66
|
+
async function initContext(appConfig, runtimeEnvironment, globalData, services) {
|
|
67
67
|
const serverContext = (0, import_server2.createServerContext)(appConfig, runtimeEnvironment, globalData);
|
|
68
68
|
const providerContext = (0, import_provider.createProviderContext)(serverContext);
|
|
69
|
-
const {moduleRegistry, resourceRegistry, viewRegistry, assetRegistry} = serverContext;
|
|
70
|
-
const moduleProviders =
|
|
69
|
+
const {moduleRegistry, resourceRegistry, viewRegistry, assetRegistry, moduleBundler} = serverContext;
|
|
70
|
+
const moduleProviders = createServices(services.moduleProviders, providerContext);
|
|
71
71
|
moduleRegistry.addModuleProviders(moduleProviders);
|
|
72
|
-
|
|
72
|
+
moduleBundler.addBundleProviders([
|
|
73
|
+
new import_amd_bundle_provider.default({}, {...providerContext, moduleRegistry}),
|
|
74
|
+
new import_esm_bundle_provider.default({}, {...providerContext, moduleRegistry})
|
|
75
|
+
]);
|
|
76
|
+
const resourceProviders = createServices(services.resourceProviders, providerContext);
|
|
73
77
|
resourceRegistry.addResourceProviders(resourceProviders);
|
|
74
|
-
const viewProviders =
|
|
75
|
-
const viewTransformers =
|
|
78
|
+
const viewProviders = createServices(services.viewProviders, providerContext);
|
|
79
|
+
const viewTransformers = createServices(services.viewTransformers, providerContext);
|
|
76
80
|
viewRegistry.addViewProviders(viewProviders);
|
|
77
81
|
viewRegistry.addViewTransformers(viewTransformers);
|
|
78
82
|
await viewRegistry.initializeViewProviders();
|
|
79
|
-
const assetProviders =
|
|
80
|
-
const assetTransformers =
|
|
83
|
+
const assetProviders = createServices(services.assetProviders, providerContext);
|
|
84
|
+
const assetTransformers = createServices(services.assetTransformers, providerContext);
|
|
81
85
|
assetRegistry.addAssetProviders(assetProviders);
|
|
82
86
|
assetRegistry.addAssetTransformers(assetTransformers);
|
|
83
87
|
return serverContext;
|
|
@@ -97,15 +101,20 @@ var LwrApp = class {
|
|
|
97
101
|
return this.config;
|
|
98
102
|
}
|
|
99
103
|
async init() {
|
|
100
|
-
if (
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
104
|
+
if (this.initialized) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
this.initialized = true;
|
|
108
|
+
try {
|
|
109
|
+
const {appConfig, runtimeEnvironment, globalData} = await (0, import_config.loadConfig)(this.config);
|
|
110
|
+
const services = await (0, import_config.loadServices)(appConfig);
|
|
111
|
+
const {routes, errorRoutes} = await (0, import_config.loadRoutes)(appConfig);
|
|
112
|
+
const context = await initContext(appConfig, runtimeEnvironment, globalData, services);
|
|
113
|
+
initMiddleware(this.app, this.server, context, routes, errorRoutes);
|
|
114
|
+
this.config = appConfig;
|
|
115
|
+
} catch (e) {
|
|
116
|
+
this.initialized = false;
|
|
117
|
+
throw e;
|
|
109
118
|
}
|
|
110
119
|
}
|
|
111
120
|
async listen(callback) {
|
|
@@ -35,7 +35,7 @@ var import_unsigned_module_redirect = __toModule(require("./redirects/unsigned-m
|
|
|
35
35
|
var import_error_handling = __toModule(require("./utils/error-handling.cjs"));
|
|
36
36
|
function createBundleMiddleware(context) {
|
|
37
37
|
const {moduleRegistry, moduleBundler} = context;
|
|
38
|
-
const unsignedRedirect = (0, import_unsigned_module_redirect.createUnsignedModuleRedirect)(moduleRegistry);
|
|
38
|
+
const unsignedRedirect = (0, import_unsigned_module_redirect.createUnsignedModuleRedirect)(moduleRegistry, moduleBundler);
|
|
39
39
|
return async (req, res) => {
|
|
40
40
|
if (!req.validateEnvironmentRequest(context.appConfig)) {
|
|
41
41
|
res.status(400);
|
|
@@ -59,7 +59,7 @@ function createBundleMiddleware(context) {
|
|
|
59
59
|
if (req.isSiteGeneration()) {
|
|
60
60
|
res.setSiteGenerationMetadata({
|
|
61
61
|
moduleDefinition: bundleDefinition,
|
|
62
|
-
resolvedUris: await (0, import_metadata.normalizeResolvedUris)(bundleDefinition, runtimeEnvironment, runtimeParams, moduleRegistry)
|
|
62
|
+
resolvedUris: await (0, import_metadata.normalizeResolvedUris)(bundleDefinition, runtimeEnvironment, runtimeParams, moduleBundler, moduleRegistry)
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
65
|
if (signature !== import_shared_utils.LATEST_SIGNATURE) {
|
|
@@ -34,7 +34,7 @@ var import_unsigned_module_redirect = __toModule(require("./redirects/unsigned-m
|
|
|
34
34
|
var import_error_handling = __toModule(require("./utils/error-handling.cjs"));
|
|
35
35
|
function createModuleMiddleware(context) {
|
|
36
36
|
const {moduleRegistry} = context;
|
|
37
|
-
const unsignedRedirect = (0, import_unsigned_module_redirect.createUnsignedModuleRedirect)(moduleRegistry);
|
|
37
|
+
const unsignedRedirect = (0, import_unsigned_module_redirect.createUnsignedModuleRedirect)(moduleRegistry, moduleRegistry);
|
|
38
38
|
return async (req, res) => {
|
|
39
39
|
if (!req.validateEnvironmentRequest(context.appConfig)) {
|
|
40
40
|
res.status(400);
|
|
@@ -10,11 +10,11 @@ __markAsModule(exports);
|
|
|
10
10
|
__export(exports, {
|
|
11
11
|
createUnsignedModuleRedirect: () => createUnsignedModuleRedirect
|
|
12
12
|
});
|
|
13
|
-
function createUnsignedModuleRedirect(moduleRegistry) {
|
|
13
|
+
function createUnsignedModuleRedirect(moduleRegistry, defRegistry) {
|
|
14
14
|
return async (req, res, moduleId, runtimeEnvironment, runtimeParams) => {
|
|
15
15
|
const jsonQuery = req.isJsonRequest() ? `${runtimeEnvironment.debug ? "&" : "?"}json` : "";
|
|
16
16
|
const {moduleEntry, ownHash} = await moduleRegistry.getModule(moduleId);
|
|
17
|
-
const uri =
|
|
17
|
+
const uri = defRegistry.resolveModuleUri({...moduleId, version: moduleEntry.version}, runtimeEnvironment, runtimeParams, ownHash);
|
|
18
18
|
res.setHeader("Location", `${uri}${jsonQuery}`);
|
|
19
19
|
res.sendStatus(302);
|
|
20
20
|
};
|
|
@@ -27,13 +27,13 @@ __export(exports, {
|
|
|
27
27
|
normalizeResolvedUris: () => normalizeResolvedUris
|
|
28
28
|
});
|
|
29
29
|
var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
|
|
30
|
-
async function normalizeResolvedUris(bundleDefinition, runtimeEnvironment, runtimeParams, moduleRegistry) {
|
|
30
|
+
async function normalizeResolvedUris(bundleDefinition, runtimeEnvironment, runtimeParams, moduleBundler, moduleRegistry) {
|
|
31
31
|
const resolvedUris = [];
|
|
32
32
|
if (bundleDefinition.bundleRecord.imports) {
|
|
33
33
|
for (const theImport of bundleDefinition.bundleRecord.imports) {
|
|
34
34
|
const childSpecifier = theImport.specifier;
|
|
35
35
|
const id = await (0, import_shared_utils.getVersionedModuleId)(childSpecifier, moduleRegistry);
|
|
36
|
-
const uri = await
|
|
36
|
+
const uri = await moduleBundler.resolveModuleUri(id, runtimeEnvironment, runtimeParams);
|
|
37
37
|
resolvedUris.push(uri);
|
|
38
38
|
}
|
|
39
39
|
}
|
|
@@ -41,7 +41,7 @@ async function normalizeResolvedUris(bundleDefinition, runtimeEnvironment, runti
|
|
|
41
41
|
for (const theImport of bundleDefinition.bundleRecord.dynamicImports) {
|
|
42
42
|
const childSpecifier = theImport.specifier;
|
|
43
43
|
const id = await (0, import_shared_utils.getVersionedModuleId)(childSpecifier, moduleRegistry);
|
|
44
|
-
const uri = await
|
|
44
|
+
const uri = await moduleBundler.resolveModuleUri(id, runtimeEnvironment, runtimeParams);
|
|
45
45
|
resolvedUris.push(uri);
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -37,9 +37,8 @@ var CANONICAL_VIEW_ROUTES = [
|
|
|
37
37
|
`/:apiVersion/application/:format/ai/:appId`,
|
|
38
38
|
`/:apiVersion/application/:format/e/:environment/ai/:appId`
|
|
39
39
|
];
|
|
40
|
-
function createViewMiddleware(route, context, viewHandler) {
|
|
41
|
-
const
|
|
42
|
-
const errorRoute = appConfig.errorRoutes.find((route2) => route2.status === 500);
|
|
40
|
+
function createViewMiddleware(route, errorRoutes, context, viewHandler) {
|
|
41
|
+
const errorRoute = errorRoutes.find((route2) => route2.status === 500);
|
|
43
42
|
return async (req, res) => {
|
|
44
43
|
if (!req.validateEnvironmentRequest(context.appConfig)) {
|
|
45
44
|
res.status(400);
|
|
@@ -91,9 +90,7 @@ function createViewMiddleware(route, context, viewHandler) {
|
|
|
91
90
|
res.send(viewResponse.body);
|
|
92
91
|
};
|
|
93
92
|
}
|
|
94
|
-
function createConfigMiddleware(context, viewHandler) {
|
|
95
|
-
const {appConfig} = context;
|
|
96
|
-
const {routes} = appConfig;
|
|
93
|
+
function createConfigMiddleware(routes, context, viewHandler) {
|
|
97
94
|
return async (req, res) => {
|
|
98
95
|
const {runtimeEnvironment, runtimeParams} = req.getRuntimeContext(context.runtimeEnvironment);
|
|
99
96
|
const {appId, encodedViewPath} = req.params;
|
|
@@ -126,20 +123,19 @@ function createConfigMiddleware(context, viewHandler) {
|
|
|
126
123
|
res.send(viewResponse.body);
|
|
127
124
|
};
|
|
128
125
|
}
|
|
129
|
-
function createNotFoundMiddleware(context, viewHandler) {
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
return createViewMiddleware(errorRoute, context, viewHandler);
|
|
126
|
+
function createNotFoundMiddleware(errorRoutes, context, viewHandler) {
|
|
127
|
+
const notFoundRoute = errorRoutes.find((route) => route.status === 404);
|
|
128
|
+
if (notFoundRoute) {
|
|
129
|
+
return createViewMiddleware(notFoundRoute, errorRoutes, context, viewHandler);
|
|
134
130
|
}
|
|
135
131
|
return (req, res) => {
|
|
136
132
|
res.status(404).send(import_diagnostics.descriptions.UNRESOLVABLE.VIEW(req.originalUrl).message);
|
|
137
133
|
};
|
|
138
134
|
}
|
|
139
|
-
function viewMiddleware(app, context) {
|
|
135
|
+
function viewMiddleware(app, context, routes, errorRoutes) {
|
|
140
136
|
const {appConfig, viewRegistry, moduleRegistry} = context;
|
|
141
137
|
const viewHandler = new import_view_registry.LwrViewHandler({viewRegistry, moduleRegistry}, appConfig);
|
|
142
|
-
for (const route of
|
|
138
|
+
for (const route of routes) {
|
|
143
139
|
const paths = [route.path];
|
|
144
140
|
const subRoutes = route.subRoutes && (0, import_router.getClientRoutes)(route.subRoutes);
|
|
145
141
|
if (subRoutes) {
|
|
@@ -147,8 +143,8 @@ function viewMiddleware(app, context) {
|
|
|
147
143
|
subRoutes.routes.forEach((subRoute) => subRoute.uri !== route.path && paths.push(`${prefix}${subRoute.uri}`));
|
|
148
144
|
}
|
|
149
145
|
paths.forEach((routePath) => paths.push(...CANONICAL_VIEW_ROUTES.map((viewRoute) => viewRoute + routePath)));
|
|
150
|
-
app.get(paths, (0, import_error_handling.handleErrors)(createViewMiddleware(route, context, viewHandler)));
|
|
146
|
+
app.get(paths, (0, import_error_handling.handleErrors)(createViewMiddleware(route, errorRoutes, context, viewHandler)));
|
|
151
147
|
}
|
|
152
|
-
app.get((0, import_shared_utils.getClientBootstrapConfigurationRoutes)(), (0, import_error_handling.handleErrors)(createConfigMiddleware(context, viewHandler)));
|
|
153
|
-
app.get("/" + app.getRegexWildcard(), (0, import_error_handling.handleErrors)(createNotFoundMiddleware(context, viewHandler)));
|
|
148
|
+
app.get((0, import_shared_utils.getClientBootstrapConfigurationRoutes)(), (0, import_error_handling.handleErrors)(createConfigMiddleware(routes, context, viewHandler)));
|
|
149
|
+
app.get("/" + app.getRegexWildcard(), (0, import_error_handling.handleErrors)(createNotFoundMiddleware(errorRoutes, context, viewHandler)));
|
|
154
150
|
}
|
|
@@ -36,17 +36,10 @@ async function warmupServer(config, internalRequestKey) {
|
|
|
36
36
|
import_shared_utils.logger.setOptions({dedupe: new Set([import_shared_utils.WARN])});
|
|
37
37
|
}
|
|
38
38
|
import_shared_utils.logger.info("[Server Warmup] starting");
|
|
39
|
-
const {routes, staticSiteGenerator, port,
|
|
39
|
+
const {routes, staticSiteGenerator, port, basePath} = config;
|
|
40
40
|
staticSiteGenerator.outputDir = import_dir.skipDirCreation;
|
|
41
41
|
const urlRewriteMap = new Map();
|
|
42
|
-
const runtimeEnvironment =
|
|
43
|
-
...(0, import_config.explodeMode)(serverMode),
|
|
44
|
-
apiVersion,
|
|
45
|
-
basePath,
|
|
46
|
-
lwrVersion,
|
|
47
|
-
debug: false,
|
|
48
|
-
serverMode
|
|
49
|
-
};
|
|
42
|
+
const runtimeEnvironment = (0, import_config.getRuntimeEnvironment)(config);
|
|
50
43
|
await new import_static_generation.default().generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, new import_network_dispatcher.default(port, internalRequestKey), staticSiteGenerator.outputDir, urlRewriteMap);
|
|
51
44
|
import_shared_utils.logger.info("[Server Warmup] complete");
|
|
52
45
|
}
|
|
@@ -37,7 +37,7 @@ 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
|
}
|
|
@@ -46,24 +46,21 @@ var SiteGenerator = class {
|
|
|
46
46
|
staticSiteGenerator.outputDir = "__generated_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 {
|
|
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
|
-
...(0, import_config.explodeMode)(serverMode),
|
|
55
|
-
apiVersion,
|
|
56
|
-
basePath,
|
|
57
|
-
lwrVersion,
|
|
58
|
-
debug: false,
|
|
59
|
-
serverMode
|
|
60
|
-
};
|
|
56
|
+
const {basePath} = config;
|
|
57
|
+
const runtimeEnvironment = (0, import_config.getRuntimeEnvironment)(config);
|
|
61
58
|
await this.generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, dispatcher, outputDir, urlRewriteMap);
|
|
62
59
|
this.writeNetlifyRedirectConfig(outputDir, urlRewriteMap);
|
|
63
60
|
this.copyAssets(assets, outputDir, basePath);
|
|
64
61
|
const endTime = import_perf_hooks.performance.now();
|
|
65
62
|
const timeDiff = (endTime - startTime) / 1e3;
|
|
66
|
-
import_shared_utils.logger.info(`[Static Generation
|
|
63
|
+
import_shared_utils.logger.info(`[SSG] Static Site Generation complete in ${Math.round(timeDiff)} seconds`);
|
|
67
64
|
}
|
|
68
65
|
async generateRoutes(runtimeEnvironment, staticSiteGenerator, routes, basePath, dispatcher, outputDir, urlRewriteMap = new Map()) {
|
|
69
66
|
if (!staticSiteGenerator.locales) {
|
|
@@ -85,24 +82,39 @@ var SiteGenerator = class {
|
|
|
85
82
|
const {_additionalModules} = staticSiteGenerator;
|
|
86
83
|
if (_additionalModules) {
|
|
87
84
|
for (const specifier of _additionalModules) {
|
|
85
|
+
import_shared_utils.logger.debug(`[SSG] Additional Module: ${locale} ${specifier}`);
|
|
86
|
+
const startTime = import_perf_hooks.performance.now();
|
|
88
87
|
const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
|
|
89
88
|
await this.dispatchJSResourceRecursive(specifier, dispatcher, siteConfig, true);
|
|
89
|
+
await this.captureAdditionalRouteMetadata(siteConfig);
|
|
90
|
+
const endTime = import_perf_hooks.performance.now();
|
|
91
|
+
const timeDiff = endTime - startTime;
|
|
92
|
+
import_shared_utils.logger.info(`[SSG] Additional Module ${locale} ${specifier} in ${Math.round(timeDiff)} ms`);
|
|
90
93
|
}
|
|
91
94
|
}
|
|
92
95
|
}
|
|
93
96
|
const willSSR = routes.some((r) => r.bootstrap?.ssr);
|
|
94
97
|
if (willSSR) {
|
|
98
|
+
import_shared_utils.logger.debug(`[SSG] Fetch SSR Placeholder`);
|
|
99
|
+
const startTime = import_perf_hooks.performance.now();
|
|
95
100
|
const siteConfig = this.createSiteConfig(outputDir, staticSiteGenerator.locales[0], urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
|
|
96
101
|
await this.dispatchJSResourceRecursive("@lwrjs/lwc-ssr/lwc_ssr_placeholder", dispatcher, siteConfig, true);
|
|
102
|
+
await this.captureAdditionalRouteMetadata(siteConfig);
|
|
103
|
+
const endTime = import_perf_hooks.performance.now();
|
|
104
|
+
const timeDiff = endTime - startTime;
|
|
105
|
+
import_shared_utils.logger.info(`[SSG] SSR Placeholder in ${Math.round(timeDiff)} ms`);
|
|
97
106
|
}
|
|
98
107
|
}
|
|
99
108
|
createGenerateURLFunction(dispatcher) {
|
|
100
109
|
const generateRoute = async (uri, siteConfig) => {
|
|
101
110
|
const locale = siteConfig.locale;
|
|
102
|
-
import_shared_utils.logger.
|
|
111
|
+
import_shared_utils.logger.debug(`[SSG] Start Generate: ${locale} ${uri}`);
|
|
112
|
+
const startTime = import_perf_hooks.performance.now();
|
|
103
113
|
await this.dispatchResourceRecursive(uri, dispatcher, {resourceType: "route"}, siteConfig);
|
|
104
|
-
this.
|
|
105
|
-
|
|
114
|
+
await this.captureAdditionalRouteMetadata(siteConfig);
|
|
115
|
+
const endTime = import_perf_hooks.performance.now();
|
|
116
|
+
const timeDiff = endTime - startTime;
|
|
117
|
+
import_shared_utils.logger.info(`[SSG] ${locale} ${uri} in ${Math.round(timeDiff)} ms`);
|
|
106
118
|
};
|
|
107
119
|
return generateRoute.bind(this);
|
|
108
120
|
}
|
|
@@ -110,8 +122,12 @@ var SiteGenerator = class {
|
|
|
110
122
|
const {visitedUrls} = siteConfig;
|
|
111
123
|
if (!visitedUrls.has(url)) {
|
|
112
124
|
visitedUrls.add(url);
|
|
125
|
+
if ((0, import_shared_utils.isExternalUrl)(url)) {
|
|
126
|
+
import_shared_utils.logger.warn("[SSG] Skipped generation of external url: " + url);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
113
129
|
if (url.indexOf("/:") !== -1 || url.indexOf("*") !== -1) {
|
|
114
|
-
import_shared_utils.logger.warn("Skipped generation of url with variable path segment: " + url);
|
|
130
|
+
import_shared_utils.logger.warn("[SSG] Skipped generation of url with variable path segment: " + url);
|
|
115
131
|
return;
|
|
116
132
|
}
|
|
117
133
|
let context;
|
|
@@ -160,6 +176,9 @@ var SiteGenerator = class {
|
|
|
160
176
|
const jsUri = importModule.specifier.startsWith("/") ? importModule.specifier : (0, import_shared_utils.getSpecifier)(importModule);
|
|
161
177
|
dispatchRequests.push(this.dispatchJSResourceRecursive(jsUri, dispatcher, siteConfig));
|
|
162
178
|
}
|
|
179
|
+
if (moduleDefinition.bundleRecord) {
|
|
180
|
+
this.addBundleToSiteMetadata(moduleDefinition, url, siteConfig);
|
|
181
|
+
}
|
|
163
182
|
}
|
|
164
183
|
const uris = context.fs?.metadata?.resolvedUris || [];
|
|
165
184
|
for (const jsUri of uris) {
|
|
@@ -167,6 +186,52 @@ var SiteGenerator = class {
|
|
|
167
186
|
}
|
|
168
187
|
await Promise.all(dispatchRequests);
|
|
169
188
|
}
|
|
189
|
+
addBundleToSiteMetadata(bundleDefinition, url, siteConfig) {
|
|
190
|
+
if (siteConfig.siteMetadata) {
|
|
191
|
+
const specifier = bundleDefinition.specifier;
|
|
192
|
+
const imports = bundleDefinition.bundleRecord.imports?.map((moduleRef) => moduleRef.specifier) || [];
|
|
193
|
+
const bundleMetadata = {
|
|
194
|
+
version: bundleDefinition.version,
|
|
195
|
+
path: decodeURIComponent(url),
|
|
196
|
+
bundleRecord: {
|
|
197
|
+
includedModules: bundleDefinition.bundleRecord.includedModules || [],
|
|
198
|
+
imports
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
const siteBundles = siteConfig.siteMetadata.getSiteBundles().bundles;
|
|
202
|
+
siteBundles[specifier] = bundleMetadata;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
addResourceToSiteMetadata(resourceDefinition, url, siteConfig) {
|
|
206
|
+
if (siteConfig.siteMetadata) {
|
|
207
|
+
if (!resourceDefinition.specifier) {
|
|
208
|
+
import_shared_utils.logger.warn("[SSG] Could not save resource metadata. There was no specifier.", resourceDefinition);
|
|
209
|
+
} else {
|
|
210
|
+
const specifier = resourceDefinition.specifier;
|
|
211
|
+
const resourceMetadata = {
|
|
212
|
+
path: decodeURIComponent(url),
|
|
213
|
+
mimeType: resourceDefinition.type
|
|
214
|
+
};
|
|
215
|
+
const siteResources = siteConfig.siteMetadata.getSiteResources();
|
|
216
|
+
siteResources.resources[specifier] = resourceMetadata;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
addAssetToSiteMetadata(assetDefinition, url, siteConfig) {
|
|
221
|
+
if (siteConfig.siteMetadata) {
|
|
222
|
+
if (!assetDefinition.uri) {
|
|
223
|
+
import_shared_utils.logger.warn("[SSG] Could not save asset metadata. There was no uri.", assetDefinition);
|
|
224
|
+
} else {
|
|
225
|
+
const specifier = assetDefinition.uri;
|
|
226
|
+
const resourceMetadata = {
|
|
227
|
+
path: decodeURIComponent(url),
|
|
228
|
+
mimeType: String(assetDefinition.mime)
|
|
229
|
+
};
|
|
230
|
+
const siteAssets = siteConfig.siteMetadata.getSiteAssets();
|
|
231
|
+
siteAssets.assets[specifier] = resourceMetadata;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
170
235
|
async handleMappingResource(url, context, siteConfig, dispatcher) {
|
|
171
236
|
const {importMetadata: importMetatdata} = siteConfig;
|
|
172
237
|
const statusCode = context.response?.status;
|
|
@@ -185,7 +250,7 @@ var SiteGenerator = class {
|
|
|
185
250
|
await Promise.all(dispatchRequests);
|
|
186
251
|
} else {
|
|
187
252
|
const body = context.fs?.body;
|
|
188
|
-
import_shared_utils.logger.warn(`Failed to fetch ${url}: (${statusCode}) ${body}`);
|
|
253
|
+
import_shared_utils.logger.warn(`[SSG] Failed to fetch ${url}: (${statusCode}) ${body}`);
|
|
189
254
|
}
|
|
190
255
|
}
|
|
191
256
|
async handleHtmlResource(url, context, siteConfig, dispatcher) {
|
|
@@ -251,7 +316,7 @@ var SiteGenerator = class {
|
|
|
251
316
|
siteConfig.viewConfigPath = this.getResourcePathFromUrl(siteConfig, resourceUri);
|
|
252
317
|
}
|
|
253
318
|
} else {
|
|
254
|
-
import_shared_utils.logger.warn("Skipped inline bootstrap resource: %j", resource);
|
|
319
|
+
import_shared_utils.logger.warn("[SSG] Skipped inline bootstrap resource: %j", resource);
|
|
255
320
|
}
|
|
256
321
|
}
|
|
257
322
|
}
|
|
@@ -261,7 +326,7 @@ var SiteGenerator = class {
|
|
|
261
326
|
if (resourceUri.startsWith("/")) {
|
|
262
327
|
dispatchRequests.push(this.dispatchResourceRecursive(resourceUri, dispatcher, {resourceType: "resource"}, siteConfig));
|
|
263
328
|
} else {
|
|
264
|
-
import_shared_utils.logger.warn("Skipped resource: %j", resource);
|
|
329
|
+
import_shared_utils.logger.warn("[SSG] Skipped resource: %j", resource);
|
|
265
330
|
}
|
|
266
331
|
}
|
|
267
332
|
await Promise.all(dispatchRequests);
|
|
@@ -277,7 +342,7 @@ var SiteGenerator = class {
|
|
|
277
342
|
const mappingURL = siteConfig.endpoints?.uris?.mapping + encodeURIComponent(jsUri);
|
|
278
343
|
await this.dispatchResourceRecursive(mappingURL, dispatcher, {resourceType: "mapping"}, siteConfig);
|
|
279
344
|
} else {
|
|
280
|
-
import_shared_utils.logger.warn('Unable to fetch mapping for bare specifier or variable dynamic import: "' + jsUri + '"');
|
|
345
|
+
import_shared_utils.logger.warn('[SSG] Unable to fetch mapping for bare specifier or variable dynamic import: "' + jsUri + '"');
|
|
281
346
|
}
|
|
282
347
|
} else if (isAdditionalModulesRequest) {
|
|
283
348
|
const uri = `${siteConfig.endpoints?.uris.legacyDefault}${encodeURIComponent(jsUri)}`;
|
|
@@ -289,12 +354,17 @@ var SiteGenerator = class {
|
|
|
289
354
|
const metadata = context.fs?.metadata;
|
|
290
355
|
const fullPath = this.getResourcePathFromUrl(siteConfig, url);
|
|
291
356
|
await (0, import_stream.writeResponse)(context, fullPath);
|
|
357
|
+
if (metadata?.resource) {
|
|
358
|
+
this.addResourceToSiteMetadata(metadata?.resource, url, siteConfig);
|
|
359
|
+
} else if (metadata?.asset) {
|
|
360
|
+
this.addAssetToSiteMetadata(metadata?.asset, url, siteConfig);
|
|
361
|
+
}
|
|
292
362
|
const assetReferences = metadata?.asset?.metadata?.assetReferences || [];
|
|
293
363
|
const dispatchRequests = [];
|
|
294
364
|
for (const ref of assetReferences) {
|
|
295
365
|
const refUrl = ref.override?.uri || ref.url;
|
|
296
366
|
dispatchRequests.push(this.dispatchResourceRecursive(refUrl, dispatcher, {resourceType: "asset", asset: metadata?.asset}, siteConfig).catch((err) => {
|
|
297
|
-
import_shared_utils.logger.warn(`Failed to fetch asset reference => ${refUrl} from ${url}`, err);
|
|
367
|
+
import_shared_utils.logger.warn(`[SSG] Failed to fetch asset reference => ${refUrl} from ${url}`, err);
|
|
298
368
|
}));
|
|
299
369
|
}
|
|
300
370
|
return Promise.all(dispatchRequests);
|
|
@@ -331,10 +401,10 @@ var SiteGenerator = class {
|
|
|
331
401
|
if (assetSrcDir && import_fs_extra.default.existsSync(assetSrcDir)) {
|
|
332
402
|
import_fs_extra.default.copySync(assetSrcDir, assetOutputDir);
|
|
333
403
|
} else {
|
|
334
|
-
import_shared_utils.logger.warn("Could not find assets to copy at path: " + assetSrcDir);
|
|
404
|
+
import_shared_utils.logger.warn("[SSG] Could not find assets to copy at path: " + assetSrcDir);
|
|
335
405
|
}
|
|
336
406
|
} catch (e) {
|
|
337
|
-
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);
|
|
338
408
|
}
|
|
339
409
|
}
|
|
340
410
|
}
|
|
@@ -354,13 +424,20 @@ var SiteGenerator = class {
|
|
|
354
424
|
urlRewriteMap,
|
|
355
425
|
endpoints,
|
|
356
426
|
skipBaseDocumentGeneration,
|
|
357
|
-
...featureFlags
|
|
427
|
+
...featureFlags,
|
|
428
|
+
siteMetadata: new import_shared_utils.SiteMetadataImpl({rootDir: outputDir, runtimeEnvironment})
|
|
358
429
|
};
|
|
359
430
|
}
|
|
360
431
|
filterFeatureFlags() {
|
|
361
432
|
const ffs = (0, import_shared_utils.getFeatureFlags)();
|
|
362
|
-
if (ffs.
|
|
363
|
-
|
|
433
|
+
if (ffs && Object.keys(ffs).length) {
|
|
434
|
+
const accumlator = {};
|
|
435
|
+
for (const [key, value] of Object.entries(ffs)) {
|
|
436
|
+
if (value) {
|
|
437
|
+
accumlator[key] = true;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
return {featureFlags: accumlator};
|
|
364
441
|
} else {
|
|
365
442
|
return void 0;
|
|
366
443
|
}
|
|
@@ -397,6 +474,10 @@ ${mergeIndex}
|
|
|
397
474
|
});
|
|
398
475
|
}
|
|
399
476
|
}
|
|
477
|
+
async captureAdditionalRouteMetadata(siteConfig) {
|
|
478
|
+
this.addAdditionalImportMetadataToViewConfig(siteConfig);
|
|
479
|
+
await siteConfig.siteMetadata?.persistSiteMetadata();
|
|
480
|
+
}
|
|
400
481
|
};
|
|
401
482
|
var static_generation_default = SiteGenerator;
|
|
402
483
|
var ViewImportMetadataImpl = class {
|
|
@@ -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 { 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),
|
|
@@ -31,8 +30,10 @@ export function createProviderContext(serverContext) {
|
|
|
31
30
|
amdLoader,
|
|
32
31
|
esmLoader,
|
|
33
32
|
environment,
|
|
33
|
+
bundleConfig,
|
|
34
34
|
}),
|
|
35
35
|
runtimeEnvironment: deepFreeze(serverContext.runtimeEnvironment),
|
|
36
|
+
watcherFactory: serverContext.watcherFactory,
|
|
36
37
|
};
|
|
37
38
|
}
|
|
38
39
|
//# sourceMappingURL=provider.js.map
|