@lwrjs/core 0.9.0-alpha.1 → 0.9.0-alpha.10
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/{hooks.cjs → configurations.cjs} +33 -9
- package/build/cjs/context/provider.cjs +82 -0
- package/build/cjs/context/server.cjs +75 -0
- package/build/cjs/context/services.cjs +8 -1
- package/build/cjs/index.cjs +39 -139
- package/build/cjs/middleware/asset-middleware.cjs +56 -0
- package/build/cjs/middleware/bundle-middleware.cjs +114 -0
- package/build/cjs/{middlewares → middleware}/hmr-middleware.cjs +4 -4
- 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 +21 -0
- package/build/cjs/middleware/resource-middleware.cjs +64 -0
- package/build/cjs/middleware/utils/error-handling.cjs +56 -0
- package/build/cjs/middleware/utils/identity.cjs +93 -0
- package/build/cjs/middleware/utils/metadata.cjs +49 -0
- package/build/cjs/{middlewares/utils.cjs → middleware/utils/request.cjs} +17 -16
- package/build/cjs/middleware/view-middleware.cjs +154 -0
- package/build/cjs/middleware.cjs +43 -0
- package/build/cjs/tools/server-build.cjs +182 -0
- package/build/cjs/tools/static-generation.cjs +34 -24
- package/build/es/context/configurations.d.ts +9 -0
- package/build/es/context/configurations.js +53 -0
- package/build/es/context/provider.d.ts +3 -0
- package/build/es/context/provider.js +38 -0
- package/build/es/context/server.d.ts +3 -0
- package/build/es/context/server.js +48 -0
- package/build/es/context/services.d.ts +2 -7
- package/build/es/context/services.js +11 -1
- package/build/es/index.d.ts +3 -2
- package/build/es/index.js +45 -130
- package/build/es/middleware/asset-middleware.d.ts +3 -0
- package/build/es/middleware/asset-middleware.js +26 -0
- package/build/es/middleware/bundle-middleware.d.ts +3 -0
- package/build/es/middleware/bundle-middleware.js +87 -0
- package/build/es/middleware/hmr-middleware.d.ts +5 -0
- package/build/es/{middlewares → middleware}/hmr-middleware.js +2 -2
- 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 +62 -0
- package/build/es/middleware/redirects/unsigned-module-redirect.d.ts +5 -0
- package/build/es/middleware/redirects/unsigned-module-redirect.js +10 -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 +64 -0
- package/build/es/middleware/utils/metadata.d.ts +3 -0
- package/build/es/middleware/utils/metadata.js +28 -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 +139 -0
- package/build/es/middleware.d.ts +9 -0
- package/build/es/middleware.js +13 -0
- package/build/es/tools/server-build.d.ts +14 -0
- package/build/es/tools/server-build.js +182 -0
- package/build/es/tools/static-generation.js +50 -34
- package/build/es/tools/types.d.ts +1 -0
- package/package.json +34 -30
- 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/es/context/hooks.d.ts +0 -9
- package/build/es/context/hooks.js +0 -36
- 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
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, {get: all[name], enumerable: true});
|
|
11
|
+
};
|
|
12
|
+
var __exportStar = (target, module2, desc) => {
|
|
13
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(module2))
|
|
15
|
+
if (!__hasOwnProp.call(target, key) && key !== "default")
|
|
16
|
+
__defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
|
|
17
|
+
}
|
|
18
|
+
return target;
|
|
19
|
+
};
|
|
20
|
+
var __toModule = (module2) => {
|
|
21
|
+
return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// packages/@lwrjs/core/src/middleware/view-middleware.ts
|
|
25
|
+
__markAsModule(exports);
|
|
26
|
+
__export(exports, {
|
|
27
|
+
viewMiddleware: () => viewMiddleware
|
|
28
|
+
});
|
|
29
|
+
var import_diagnostics = __toModule(require("@lwrjs/diagnostics"));
|
|
30
|
+
var import_router = __toModule(require("@lwrjs/router"));
|
|
31
|
+
var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
|
|
32
|
+
var import_error_handling = __toModule(require("./utils/error-handling.cjs"));
|
|
33
|
+
var import_view_registry = __toModule(require("@lwrjs/view-registry"));
|
|
34
|
+
var CANONICAL_VIEW_ROUTES = [
|
|
35
|
+
`/:apiVersion/application/:format/l/:locale/ai/:appId`,
|
|
36
|
+
`/:apiVersion/application/:format/l/:locale/e/:environment/ai/:appId`,
|
|
37
|
+
`/:apiVersion/application/:format/ai/:appId`,
|
|
38
|
+
`/:apiVersion/application/:format/e/:environment/ai/:appId`
|
|
39
|
+
];
|
|
40
|
+
function createViewMiddleware(route, context, viewHandler) {
|
|
41
|
+
const {appConfig} = context;
|
|
42
|
+
const errorRoute = appConfig.errorRoutes.find((route2) => route2.status === 500);
|
|
43
|
+
return async (req, res) => {
|
|
44
|
+
if (!req.validateEnvironmentRequest(context.appConfig)) {
|
|
45
|
+
res.status(400);
|
|
46
|
+
res.send(import_diagnostics.descriptions.UNRESOLVABLE.INVALID_ENVIRONMENT(req.params.environment).message);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (!req.validateJsonRequest()) {
|
|
50
|
+
res.status(400);
|
|
51
|
+
res.send(import_diagnostics.descriptions.UNRESOLVABLE.INVALID_JSON().message);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const {runtimeEnvironment, runtimeParams} = req.getRuntimeContext(context.runtimeEnvironment);
|
|
55
|
+
const {environment: environmentConfig} = context.appConfig;
|
|
56
|
+
if (!runtimeParams.environment && environmentConfig?.default) {
|
|
57
|
+
runtimeParams.environment = environmentConfig.default;
|
|
58
|
+
}
|
|
59
|
+
const viewRequest = {
|
|
60
|
+
url: req.originalUrl,
|
|
61
|
+
params: req.params,
|
|
62
|
+
query: req.query,
|
|
63
|
+
requestPath: req.path
|
|
64
|
+
};
|
|
65
|
+
const resolve = req.isJsonRequest() ? viewHandler.getViewJson : viewHandler.getViewContent;
|
|
66
|
+
let viewResponse;
|
|
67
|
+
let resolvedRoute;
|
|
68
|
+
try {
|
|
69
|
+
viewResponse = await resolve.call(viewHandler, viewRequest, route, runtimeEnvironment, runtimeParams);
|
|
70
|
+
resolvedRoute = route;
|
|
71
|
+
} catch (err) {
|
|
72
|
+
if (!errorRoute) {
|
|
73
|
+
throw err;
|
|
74
|
+
}
|
|
75
|
+
viewResponse = await resolve.call(viewHandler, viewRequest, errorRoute, runtimeEnvironment, runtimeParams);
|
|
76
|
+
resolvedRoute = errorRoute;
|
|
77
|
+
}
|
|
78
|
+
if (req.isSiteGeneration()) {
|
|
79
|
+
res.setSiteGenerationMetadata(viewResponse.metadata);
|
|
80
|
+
}
|
|
81
|
+
res.type("text/html");
|
|
82
|
+
if (viewResponse.headers) {
|
|
83
|
+
res.set(viewResponse.headers);
|
|
84
|
+
}
|
|
85
|
+
const cacheTtl = (0, import_shared_utils.shortestTtl)(viewResponse.cache?.ttl, resolvedRoute.cache?.ttl);
|
|
86
|
+
if (cacheTtl) {
|
|
87
|
+
res.setHeader("cache-control", `public, max-age=${cacheTtl}`);
|
|
88
|
+
}
|
|
89
|
+
const status = resolvedRoute.status || viewResponse.status || 200;
|
|
90
|
+
res.status(status);
|
|
91
|
+
res.send(viewResponse.body);
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function createConfigMiddleware(context, viewHandler) {
|
|
95
|
+
const {appConfig} = context;
|
|
96
|
+
const {routes} = appConfig;
|
|
97
|
+
return async (req, res) => {
|
|
98
|
+
const {runtimeEnvironment, runtimeParams} = req.getRuntimeContext(context.runtimeEnvironment);
|
|
99
|
+
const {appId, encodedViewPath} = req.params;
|
|
100
|
+
const route = routes.find((route2) => route2.id === appId);
|
|
101
|
+
if (!route) {
|
|
102
|
+
res.status(404).send(import_diagnostics.descriptions.UNRESOLVABLE.APP_CONFIG(appId).message);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const url = (0, import_shared_utils.decodeViewPath)(encodedViewPath);
|
|
106
|
+
const requestPath = route.path;
|
|
107
|
+
const params = (0, import_shared_utils.extractRequestParams)(requestPath, url, req.params);
|
|
108
|
+
const viewRequest = {
|
|
109
|
+
url,
|
|
110
|
+
params,
|
|
111
|
+
query: req.query,
|
|
112
|
+
requestPath
|
|
113
|
+
};
|
|
114
|
+
const viewResponse = await viewHandler.getViewConfiguration(viewRequest, route, runtimeEnvironment, runtimeParams);
|
|
115
|
+
if (!viewResponse) {
|
|
116
|
+
res.status(404).send(import_diagnostics.descriptions.UNRESOLVABLE.VIEW_CONFIG(url).message);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const cacheTtl = (0, import_shared_utils.shortestTtl)(viewResponse.cache?.ttl, route.cache?.ttl);
|
|
120
|
+
if (cacheTtl) {
|
|
121
|
+
res.setHeader("cache-control", `public, max-age=${cacheTtl}`);
|
|
122
|
+
}
|
|
123
|
+
res.status(200);
|
|
124
|
+
res.type("application/javascript");
|
|
125
|
+
res.status(viewResponse.status || 200);
|
|
126
|
+
res.send(viewResponse.body);
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function createNotFoundMiddleware(context, viewHandler) {
|
|
130
|
+
const {errorRoutes} = context.appConfig;
|
|
131
|
+
const errorRoute = errorRoutes.find((route) => route.status === 404);
|
|
132
|
+
if (errorRoute) {
|
|
133
|
+
return createViewMiddleware(errorRoute, context, viewHandler);
|
|
134
|
+
}
|
|
135
|
+
return (req, res) => {
|
|
136
|
+
res.status(404).send(import_diagnostics.descriptions.UNRESOLVABLE.VIEW(req.originalUrl).message);
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function viewMiddleware(app, context) {
|
|
140
|
+
const {appConfig, viewRegistry, moduleRegistry} = context;
|
|
141
|
+
const viewHandler = new import_view_registry.LwrViewHandler({viewRegistry, moduleRegistry}, appConfig);
|
|
142
|
+
for (const route of appConfig.routes) {
|
|
143
|
+
const paths = [route.path];
|
|
144
|
+
const subRoutes = route.subRoutes && (0, import_router.getClientRoutes)(route.subRoutes);
|
|
145
|
+
if (subRoutes) {
|
|
146
|
+
const prefix = route.path === "/" ? "" : route.path;
|
|
147
|
+
subRoutes.routes.forEach((subRoute) => subRoute.uri !== route.path && paths.push(`${prefix}${subRoute.uri}`));
|
|
148
|
+
}
|
|
149
|
+
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)));
|
|
151
|
+
}
|
|
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)));
|
|
154
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, {get: all[name], enumerable: true});
|
|
11
|
+
};
|
|
12
|
+
var __exportStar = (target, module2, desc) => {
|
|
13
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(module2))
|
|
15
|
+
if (!__hasOwnProp.call(target, key) && key !== "default")
|
|
16
|
+
__defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
|
|
17
|
+
}
|
|
18
|
+
return target;
|
|
19
|
+
};
|
|
20
|
+
var __toModule = (module2) => {
|
|
21
|
+
return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// packages/@lwrjs/core/src/middleware.ts
|
|
25
|
+
__markAsModule(exports);
|
|
26
|
+
__export(exports, {
|
|
27
|
+
assetMiddleware: () => import_asset_middleware.assetMiddleware,
|
|
28
|
+
bundleMiddleware: () => import_bundle_middleware.bundleMiddleware,
|
|
29
|
+
hmrMiddleware: () => import_hmr_middleware.hmrMiddleware,
|
|
30
|
+
localeMiddleware: () => import_locale_middleware.localeMiddleware,
|
|
31
|
+
mappingMiddleware: () => import_mapping_middleware.mappingMiddleware,
|
|
32
|
+
moduleMiddleware: () => import_module_middleware.moduleMiddleware,
|
|
33
|
+
resourceMiddleware: () => import_resource_middleware.resourceMiddleware,
|
|
34
|
+
viewMiddleware: () => import_view_middleware.viewMiddleware
|
|
35
|
+
});
|
|
36
|
+
var import_locale_middleware = __toModule(require("./middleware/locale-middleware.cjs"));
|
|
37
|
+
var import_hmr_middleware = __toModule(require("./middleware/hmr-middleware.cjs"));
|
|
38
|
+
var import_module_middleware = __toModule(require("./middleware/module-middleware.cjs"));
|
|
39
|
+
var import_bundle_middleware = __toModule(require("./middleware/bundle-middleware.cjs"));
|
|
40
|
+
var import_mapping_middleware = __toModule(require("./middleware/mapping-middleware.cjs"));
|
|
41
|
+
var import_asset_middleware = __toModule(require("./middleware/asset-middleware.cjs"));
|
|
42
|
+
var import_view_middleware = __toModule(require("./middleware/view-middleware.cjs"));
|
|
43
|
+
var import_resource_middleware = __toModule(require("./middleware/resource-middleware.cjs"));
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, {get: all[name], enumerable: true});
|
|
11
|
+
};
|
|
12
|
+
var __exportStar = (target, module2, desc) => {
|
|
13
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(module2))
|
|
15
|
+
if (!__hasOwnProp.call(target, key) && key !== "default")
|
|
16
|
+
__defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
|
|
17
|
+
}
|
|
18
|
+
return target;
|
|
19
|
+
};
|
|
20
|
+
var __toModule = (module2) => {
|
|
21
|
+
return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// packages/@lwrjs/core/src/tools/server-build.ts
|
|
25
|
+
__markAsModule(exports);
|
|
26
|
+
__export(exports, {
|
|
27
|
+
buildServer: () => buildServer
|
|
28
|
+
});
|
|
29
|
+
var import_path = __toModule(require("path"));
|
|
30
|
+
var import_fs_extra = __toModule(require("fs-extra"));
|
|
31
|
+
var import_esbuild = __toModule(require("esbuild"));
|
|
32
|
+
var import_config = __toModule(require("@lwrjs/config"));
|
|
33
|
+
var import_configurations = __toModule(require("../context/configurations.cjs"));
|
|
34
|
+
var import_provider = __toModule(require("../context/provider.cjs"));
|
|
35
|
+
var import_server = __toModule(require("../context/server.cjs"));
|
|
36
|
+
function getBuildMetadata(appConfig) {
|
|
37
|
+
const moduleProviders = processServiceEntries("moduleProvider", appConfig.moduleProviders);
|
|
38
|
+
const resourceProviders = processServiceEntries("resourceProvider", appConfig.resourceProviders);
|
|
39
|
+
const viewProviders = processServiceEntries("viewProvider", appConfig.viewProviders);
|
|
40
|
+
const viewTransformers = processServiceEntries("viewTransformer", appConfig.viewTransformers);
|
|
41
|
+
const assetProviders = processServiceEntries("assetProvider", appConfig.assetProviders);
|
|
42
|
+
const assetTransformers = processServiceEntries("assetTransformer", appConfig.assetTransformers);
|
|
43
|
+
const imports = [
|
|
44
|
+
...moduleProviders.imports,
|
|
45
|
+
...resourceProviders.imports,
|
|
46
|
+
...viewProviders.imports,
|
|
47
|
+
...viewTransformers.imports,
|
|
48
|
+
...assetProviders.imports,
|
|
49
|
+
...assetTransformers.imports
|
|
50
|
+
];
|
|
51
|
+
return {
|
|
52
|
+
imports,
|
|
53
|
+
moduleProviders: moduleProviders.services,
|
|
54
|
+
resourceProviders: resourceProviders.services,
|
|
55
|
+
viewProviders: viewProviders.services,
|
|
56
|
+
viewTransformers: viewTransformers.services,
|
|
57
|
+
assetProviders: assetProviders.services,
|
|
58
|
+
assetTransformers: assetTransformers.services
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function processServiceEntries(serviceType, entries) {
|
|
62
|
+
const imports = [];
|
|
63
|
+
const services = [];
|
|
64
|
+
for (const [index, [pkg, config]] of entries.entries()) {
|
|
65
|
+
const name = serviceType + index;
|
|
66
|
+
imports.push(`import ${name} from '${pkg}';`);
|
|
67
|
+
services.push(`[${name}, ${JSON.stringify(config)}]`);
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
imports,
|
|
71
|
+
services
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function generateServices(providerContext) {
|
|
75
|
+
return ([ServiceCtor, serviceConfig = {}]) => new ServiceCtor(serviceConfig, providerContext);
|
|
76
|
+
}
|
|
77
|
+
function isRemote() {
|
|
78
|
+
return process.env.AWS_LAMBDA_FUNCTION_NAME !== void 0;
|
|
79
|
+
}
|
|
80
|
+
function generateServerContextModule(appConfig, runtimeEnvironment, globalData, metadata) {
|
|
81
|
+
const {
|
|
82
|
+
imports,
|
|
83
|
+
moduleProviders,
|
|
84
|
+
resourceProviders,
|
|
85
|
+
viewProviders,
|
|
86
|
+
viewTransformers,
|
|
87
|
+
assetProviders,
|
|
88
|
+
assetTransformers
|
|
89
|
+
} = metadata;
|
|
90
|
+
const config = {
|
|
91
|
+
...appConfig,
|
|
92
|
+
rootDir: void 0,
|
|
93
|
+
ignoreLwrConfigFile: true
|
|
94
|
+
};
|
|
95
|
+
return [
|
|
96
|
+
`/* This module is generated */`,
|
|
97
|
+
`import { LwrCompiler } from '@lwrjs/compiler';`,
|
|
98
|
+
`import { LwrModuleBundler } from '@lwrjs/module-bundler';`,
|
|
99
|
+
`import { LwrModuleRegistry } from '@lwrjs/module-registry';`,
|
|
100
|
+
`import { LwrResourceRegistry } from '@lwrjs/resource-registry';`,
|
|
101
|
+
`import { LwrAssetRegistry } from '@lwrjs/asset-registry';`,
|
|
102
|
+
`import { LwrViewRegistry } from '@lwrjs/view-registry';`,
|
|
103
|
+
`import { LwrApplicationObserver, deepFreeze } from '@lwrjs/shared-utils';`,
|
|
104
|
+
`import { normalizeConfig } from '@lwrjs/config';`,
|
|
105
|
+
...imports,
|
|
106
|
+
import_server.createServerContext.toString(),
|
|
107
|
+
import_provider.createProviderContext.toString(),
|
|
108
|
+
generateServices.toString(),
|
|
109
|
+
isRemote.toString(),
|
|
110
|
+
`const config = ${JSON.stringify(config, null, 4)}`,
|
|
111
|
+
`const runtimeEnvironment = ${JSON.stringify(runtimeEnvironment, null, 4)}`,
|
|
112
|
+
`const globalData = ${JSON.stringify(globalData, null, 4)}`,
|
|
113
|
+
`isRemote() && process.chdir(__dirname);`,
|
|
114
|
+
`isRemote() && (config.rootDir = __dirname);`,
|
|
115
|
+
`isRemote() && (config.cacheDir = '/tmp/__lwr_cache__');`,
|
|
116
|
+
`const normalizedConfig = normalizeConfig(config);`,
|
|
117
|
+
`const serverContext = createServerContext(normalizedConfig, runtimeEnvironment, globalData);`,
|
|
118
|
+
`const providerContext = createProviderContext(serverContext);`,
|
|
119
|
+
`const generate = generateServices(providerContext);`,
|
|
120
|
+
`const moduleProviders = [${moduleProviders}].map(generate);`,
|
|
121
|
+
`const resourceProviders = [${resourceProviders}].map(generate);`,
|
|
122
|
+
`const viewProviders = [${viewProviders}].map(generate);`,
|
|
123
|
+
`const viewTransformers = [${viewTransformers}].map(generate);`,
|
|
124
|
+
`const assetProviders = [${assetProviders}].map(generate);`,
|
|
125
|
+
`const assetTransformers = [${assetTransformers}].map(generate);`,
|
|
126
|
+
`serverContext.moduleRegistry.addModuleProviders(moduleProviders);`,
|
|
127
|
+
`serverContext.resourceRegistry.addResourceProviders(resourceProviders);`,
|
|
128
|
+
`serverContext.viewRegistry.addViewProviders(viewProviders);`,
|
|
129
|
+
`serverContext.viewRegistry.addViewTransformers(viewTransformers);`,
|
|
130
|
+
`serverContext.assetRegistry.addAssetProviders(assetProviders);`,
|
|
131
|
+
`serverContext.assetRegistry.addAssetTransformers(assetTransformers);`,
|
|
132
|
+
`export default serverContext;`
|
|
133
|
+
].join("\n");
|
|
134
|
+
}
|
|
135
|
+
function generateServerSource(target) {
|
|
136
|
+
if (target !== "lambda") {
|
|
137
|
+
throw `Unsupported server build target: ${target}`;
|
|
138
|
+
}
|
|
139
|
+
return [
|
|
140
|
+
`/* This module is generated */`,
|
|
141
|
+
`import { createHandler } from '@lwrjs/lambda';`,
|
|
142
|
+
`import build from './lwr.build.js';`,
|
|
143
|
+
`const handler = createHandler(build);`,
|
|
144
|
+
`export { handler as get };`
|
|
145
|
+
].join("\n");
|
|
146
|
+
}
|
|
147
|
+
async function bundleServer(entryPoint, outputPath) {
|
|
148
|
+
await import_esbuild.default.build({
|
|
149
|
+
entryPoints: [entryPoint],
|
|
150
|
+
bundle: true,
|
|
151
|
+
sourcemap: true,
|
|
152
|
+
logLevel: "silent",
|
|
153
|
+
external: [
|
|
154
|
+
"node:*",
|
|
155
|
+
"fsevents",
|
|
156
|
+
"iltorb",
|
|
157
|
+
"esbuild*",
|
|
158
|
+
"esinstall",
|
|
159
|
+
"jsonc-parser",
|
|
160
|
+
"node-fetch",
|
|
161
|
+
"rollup",
|
|
162
|
+
"rollup-plugin-node-polyfills",
|
|
163
|
+
"@lwrjs/config",
|
|
164
|
+
"@lwrjs/loader"
|
|
165
|
+
],
|
|
166
|
+
format: "cjs",
|
|
167
|
+
platform: "node",
|
|
168
|
+
outfile: outputPath
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
async function buildServer(configArg, options) {
|
|
172
|
+
const config = (0, import_config.normalizeConfig)(configArg, {skipDirNormalization: true, skipCacheDirCreation: true});
|
|
173
|
+
const {appConfig, runtimeEnvironment, globalData} = await (0, import_configurations.resolveConfigurations)(config);
|
|
174
|
+
const metadata = getBuildMetadata(appConfig);
|
|
175
|
+
const serverContext = generateServerContextModule(appConfig, runtimeEnvironment, globalData, metadata);
|
|
176
|
+
const outputDir = import_path.default.join(appConfig.rootDir, options?.outputDir || "/build");
|
|
177
|
+
const serverSource = generateServerSource(options?.target || "lambda");
|
|
178
|
+
await import_fs_extra.default.ensureDir(outputDir);
|
|
179
|
+
await import_fs_extra.default.writeFile(import_path.default.join(outputDir, "lwr.build.js"), serverContext);
|
|
180
|
+
await import_fs_extra.default.writeFile(import_path.default.join(outputDir, "entry.js"), serverSource);
|
|
181
|
+
await bundleServer(import_path.default.join(outputDir, "entry.js"), import_path.default.join(outputDir, "ssr.js"));
|
|
182
|
+
}
|
|
@@ -70,25 +70,31 @@ var SiteGenerator = class {
|
|
|
70
70
|
staticSiteGenerator.locales = ["en-US"];
|
|
71
71
|
}
|
|
72
72
|
const generateUrl = this.createGenerateURLFunction(dispatcher);
|
|
73
|
+
const {skipBaseDocumentGeneration = false} = staticSiteGenerator;
|
|
73
74
|
for (const locale of staticSiteGenerator.locales) {
|
|
74
75
|
for (const route of routes) {
|
|
75
|
-
const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment);
|
|
76
|
+
const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
|
|
76
77
|
await generateUrl(basePath + route.path, siteConfig);
|
|
77
78
|
}
|
|
78
79
|
if (staticSiteGenerator._additionalRoutePaths) {
|
|
79
80
|
for (const uri of staticSiteGenerator._additionalRoutePaths) {
|
|
80
|
-
const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment);
|
|
81
|
+
const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
|
|
81
82
|
await generateUrl(uri, siteConfig);
|
|
82
83
|
}
|
|
83
84
|
}
|
|
84
85
|
const {_additionalModules} = staticSiteGenerator;
|
|
85
86
|
if (_additionalModules) {
|
|
86
87
|
for (const specifier of _additionalModules) {
|
|
87
|
-
const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment);
|
|
88
|
+
const siteConfig = this.createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
|
|
88
89
|
await this.dispatchJSResourceRecursive(specifier, dispatcher, siteConfig, true);
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
}
|
|
93
|
+
const willSSR = routes.some((r) => r.bootstrap?.ssr);
|
|
94
|
+
if (willSSR) {
|
|
95
|
+
const siteConfig = this.createSiteConfig(outputDir, staticSiteGenerator.locales[0], urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment);
|
|
96
|
+
await this.dispatchJSResourceRecursive("@lwrjs/lwc-ssr/lwc_ssr_placeholder", dispatcher, siteConfig, true);
|
|
97
|
+
}
|
|
92
98
|
}
|
|
93
99
|
createGenerateURLFunction(dispatcher) {
|
|
94
100
|
const generateRoute = async (uri, siteConfig) => {
|
|
@@ -183,25 +189,27 @@ var SiteGenerator = class {
|
|
|
183
189
|
}
|
|
184
190
|
}
|
|
185
191
|
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
|
-
|
|
192
|
+
const {outputDir, skipBaseDocumentGeneration} = siteConfig;
|
|
193
|
+
if (!skipBaseDocumentGeneration) {
|
|
194
|
+
let fileName = "index.html";
|
|
195
|
+
let directoryPath = url;
|
|
196
|
+
if (url.endsWith(".html") || url.endsWith(".xml")) {
|
|
197
|
+
const lastPathIndex = url.lastIndexOf("/") + 1;
|
|
198
|
+
fileName = url.substring(lastPathIndex, url.length);
|
|
199
|
+
directoryPath = url.substring(0, lastPathIndex);
|
|
200
|
+
}
|
|
201
|
+
const dir = (0, import_dir.createResourceDir)(directoryPath, outputDir);
|
|
202
|
+
const localeDir = (0, import_dir.createResourceDir)(directoryPath, (0, import_path.join)(outputDir, siteConfig.locale));
|
|
203
|
+
const filePath = (0, import_path.join)(dir, fileName);
|
|
204
|
+
const fileLocalePath = (0, import_path.join)(localeDir, fileName);
|
|
205
|
+
if (siteConfig.locale.toLowerCase().startsWith("en")) {
|
|
206
|
+
siteConfig.viewPaths.add(filePath);
|
|
207
|
+
await (0, import_stream.writeResponse)(context, filePath);
|
|
208
|
+
}
|
|
209
|
+
(0, import_dir.createDir)(localeDir);
|
|
210
|
+
siteConfig.viewPaths.add(fileLocalePath);
|
|
211
|
+
await (0, import_stream.writeResponse)(context, fileLocalePath);
|
|
201
212
|
}
|
|
202
|
-
(0, import_dir.createDir)(localeDir);
|
|
203
|
-
siteConfig.viewPaths.add(fileLocalePath);
|
|
204
|
-
await (0, import_stream.writeResponse)(context, fileLocalePath);
|
|
205
213
|
const viewDefinition = context.fs?.metadata?.viewDefinition;
|
|
206
214
|
if (viewDefinition) {
|
|
207
215
|
await this.handleViewDefinition(viewDefinition, siteConfig, dispatcher);
|
|
@@ -330,7 +338,7 @@ var SiteGenerator = class {
|
|
|
330
338
|
}
|
|
331
339
|
}
|
|
332
340
|
}
|
|
333
|
-
createSiteConfig(outputDir, locale, urlRewriteMap, runtimeEnvironment) {
|
|
341
|
+
createSiteConfig(outputDir, locale, urlRewriteMap, skipBaseDocumentGeneration, runtimeEnvironment) {
|
|
334
342
|
const featureFlags = this.filterFeatureFlags();
|
|
335
343
|
const endpoints = {
|
|
336
344
|
uris: {
|
|
@@ -345,12 +353,14 @@ var SiteGenerator = class {
|
|
|
345
353
|
locale,
|
|
346
354
|
urlRewriteMap,
|
|
347
355
|
endpoints,
|
|
356
|
+
skipBaseDocumentGeneration,
|
|
348
357
|
...featureFlags
|
|
349
358
|
};
|
|
350
359
|
}
|
|
351
360
|
filterFeatureFlags() {
|
|
352
|
-
|
|
353
|
-
|
|
361
|
+
const ffs = (0, import_shared_utils.getFeatureFlags)();
|
|
362
|
+
if (ffs.LEGACY_LOADER) {
|
|
363
|
+
return {featureFlags: {LEGACY_LOADER: true, SSR_STATIC_BUNDLES: ffs.SSR_STATIC_BUNDLES}};
|
|
354
364
|
} else {
|
|
355
365
|
return void 0;
|
|
356
366
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { NormalizedLwrGlobalConfig, RuntimeEnvironment, GlobalData } from '@lwrjs/types';
|
|
2
|
+
interface Configurations {
|
|
3
|
+
appConfig: NormalizedLwrGlobalConfig;
|
|
4
|
+
globalData: GlobalData;
|
|
5
|
+
runtimeEnvironment: RuntimeEnvironment;
|
|
6
|
+
}
|
|
7
|
+
export declare function resolveConfigurations(config: NormalizedLwrGlobalConfig): Promise<Configurations>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=configurations.d.ts.map
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { DEFAULT_LWR_BOOTSTRAP_CONFIG, getFeatureFlags, logger } from '@lwrjs/shared-utils';
|
|
2
|
+
import { explodeMode, validateLwrAppConfig } from '@lwrjs/config';
|
|
3
|
+
import { getGlobalData } from './global-data.js';
|
|
4
|
+
import { getServices } from './services.js';
|
|
5
|
+
// Add missing bootstrap objects to routes
|
|
6
|
+
function normalizeRoutesBootstrap({ routes, errorRoutes }) {
|
|
7
|
+
[...routes, ...errorRoutes].forEach((route) => {
|
|
8
|
+
if (!route.bootstrap) {
|
|
9
|
+
route.bootstrap = { ...DEFAULT_LWR_BOOTSTRAP_CONFIG };
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
async function runConfigurationsHook(hookPlugins, appConfig, globalData, runtimeEnvironment) {
|
|
14
|
+
for (const hookPlugin of hookPlugins) {
|
|
15
|
+
// eslint-disable-next-line no-await-in-loop
|
|
16
|
+
await hookPlugin.initConfigs(appConfig, globalData, runtimeEnvironment);
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
validateLwrAppConfig(JSON.stringify(appConfig), 'post');
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
// TODO: temporary workaround for https://github.com/salesforce/lwr/issues/825
|
|
23
|
+
if (process.env.UNSAFE_IGNORE_CONFIG_VALIDATION === 'true') {
|
|
24
|
+
logger.warn('ignoring config validation errors due to UNSAFE_IGNORE_CONFIG_VALIDATION flag...proceed with caution');
|
|
25
|
+
console.dir(e, { depth: null });
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
throw e;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
normalizeRoutesBootstrap(appConfig);
|
|
32
|
+
return {
|
|
33
|
+
appConfig,
|
|
34
|
+
globalData,
|
|
35
|
+
runtimeEnvironment,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export async function resolveConfigurations(config) {
|
|
39
|
+
const { apiVersion, basePath, lwrVersion, serverMode, globalDataDir, globalData: globalDataConfig, } = config;
|
|
40
|
+
const globalData = getGlobalData(globalDataDir, globalDataConfig);
|
|
41
|
+
const runtimeEnvironment = {
|
|
42
|
+
...explodeMode(serverMode),
|
|
43
|
+
apiVersion,
|
|
44
|
+
basePath,
|
|
45
|
+
lwrVersion,
|
|
46
|
+
debug: false,
|
|
47
|
+
serverMode,
|
|
48
|
+
featureFlags: getFeatureFlags(),
|
|
49
|
+
};
|
|
50
|
+
const hookProviders = await getServices(config.hooks, undefined, config);
|
|
51
|
+
return runConfigurationsHook(hookProviders, config, globalData, runtimeEnvironment);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=configurations.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { deepFreeze } from '@lwrjs/shared-utils';
|
|
2
|
+
export function createProviderContext(serverContext) {
|
|
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;
|
|
5
|
+
const { onModuleDefinitionChange, onModuleSourceChange } = serverContext.appObserver;
|
|
6
|
+
const { notifyModuleDefinitionChanged, notifyModuleSourceChanged, notifyViewSourceChanged, notifyAssetSourceChanged, } = serverContext.appEmitter;
|
|
7
|
+
return {
|
|
8
|
+
compiler: serverContext.compiler,
|
|
9
|
+
appObserver: deepFreeze({ onModuleDefinitionChange, onModuleSourceChange }),
|
|
10
|
+
appEmitter: {
|
|
11
|
+
notifyModuleDefinitionChanged: (payload) => notifyModuleDefinitionChanged.call(serverContext.appEmitter, payload),
|
|
12
|
+
notifyModuleSourceChanged: (payload) => notifyModuleSourceChanged.call(serverContext.appEmitter, payload),
|
|
13
|
+
notifyViewSourceChanged: (payload) => notifyViewSourceChanged.call(serverContext.appEmitter, payload),
|
|
14
|
+
notifyAssetSourceChanged: (payload) => notifyAssetSourceChanged.call(serverContext.appEmitter, payload),
|
|
15
|
+
},
|
|
16
|
+
moduleRegistry: serverContext.moduleRegistry.getPublicApi(),
|
|
17
|
+
moduleBundler: serverContext.moduleBundler,
|
|
18
|
+
resourceRegistry: serverContext.resourceRegistry.getPublicApi(),
|
|
19
|
+
viewRegistry: serverContext.viewRegistry.getPublicApi(),
|
|
20
|
+
assetRegistry: serverContext.assetRegistry.getPublicApi(),
|
|
21
|
+
config: deepFreeze({
|
|
22
|
+
cacheDir,
|
|
23
|
+
modules,
|
|
24
|
+
routes,
|
|
25
|
+
errorRoutes,
|
|
26
|
+
rootDir,
|
|
27
|
+
basePath,
|
|
28
|
+
contentDir,
|
|
29
|
+
layoutsDir,
|
|
30
|
+
locker,
|
|
31
|
+
amdLoader,
|
|
32
|
+
esmLoader,
|
|
33
|
+
environment,
|
|
34
|
+
}),
|
|
35
|
+
runtimeEnvironment: deepFreeze(serverContext.runtimeEnvironment),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { GlobalData, NormalizedLwrGlobalConfig, RuntimeEnvironment, ServerContext } from '@lwrjs/types';
|
|
2
|
+
export declare function createServerContext(appConfig: NormalizedLwrGlobalConfig, runtimeEnvironment: RuntimeEnvironment, globalData: GlobalData): ServerContext;
|
|
3
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { LwrAssetRegistry } from '@lwrjs/asset-registry';
|
|
2
|
+
import { LwrCompiler } from '@lwrjs/compiler';
|
|
3
|
+
import { LwrModuleBundler } from '@lwrjs/module-bundler';
|
|
4
|
+
import { LwrModuleRegistry } from '@lwrjs/module-registry';
|
|
5
|
+
import { LwrResourceRegistry } from '@lwrjs/resource-registry';
|
|
6
|
+
import { LwrApplicationObserver } from '@lwrjs/shared-utils';
|
|
7
|
+
import { LwrViewRegistry } from '@lwrjs/view-registry';
|
|
8
|
+
export function createServerContext(appConfig, runtimeEnvironment, globalData) {
|
|
9
|
+
const appObserver = new LwrApplicationObserver();
|
|
10
|
+
const appEmitter = appObserver.createLwrEmitter();
|
|
11
|
+
const compiler = new LwrCompiler();
|
|
12
|
+
const assetRegistry = new LwrAssetRegistry({
|
|
13
|
+
appObserver,
|
|
14
|
+
appEmitter,
|
|
15
|
+
runtimeEnvironment,
|
|
16
|
+
}, appConfig);
|
|
17
|
+
const moduleRegistry = new LwrModuleRegistry({
|
|
18
|
+
compiler,
|
|
19
|
+
appObserver,
|
|
20
|
+
appEmitter,
|
|
21
|
+
runtimeEnvironment,
|
|
22
|
+
}, appConfig);
|
|
23
|
+
const moduleBundler = new LwrModuleBundler({ compiler, moduleRegistry, appObserver }, appConfig);
|
|
24
|
+
const resourceRegistry = new LwrResourceRegistry();
|
|
25
|
+
const viewRegistry = new LwrViewRegistry({
|
|
26
|
+
moduleRegistry,
|
|
27
|
+
moduleBundler,
|
|
28
|
+
resourceRegistry,
|
|
29
|
+
assetRegistry,
|
|
30
|
+
appObserver,
|
|
31
|
+
appEmitter,
|
|
32
|
+
globalData,
|
|
33
|
+
runtimeEnvironment,
|
|
34
|
+
}, appConfig);
|
|
35
|
+
return {
|
|
36
|
+
compiler,
|
|
37
|
+
appObserver,
|
|
38
|
+
appEmitter,
|
|
39
|
+
moduleRegistry,
|
|
40
|
+
moduleBundler,
|
|
41
|
+
resourceRegistry,
|
|
42
|
+
assetRegistry,
|
|
43
|
+
viewRegistry,
|
|
44
|
+
appConfig,
|
|
45
|
+
runtimeEnvironment,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import { LwrService,
|
|
2
|
-
|
|
3
|
-
cacheDir: string;
|
|
4
|
-
rootDir: string;
|
|
5
|
-
}
|
|
6
|
-
export declare function getServiceModule<T extends LwrService>(path: string, { cacheDir, rootDir }: SubLwrConfig): Promise<ServiceCtor<T>>;
|
|
7
|
-
export {};
|
|
1
|
+
import { LwrService, NormalizedLwrGlobalConfig, ProviderContext, ServiceConfig } from '@lwrjs/types';
|
|
2
|
+
export declare function getServices<T extends LwrService>(services: ServiceConfig[], providerContext: ProviderContext | undefined, lwrConfig: NormalizedLwrGlobalConfig): Promise<T[]>;
|
|
8
3
|
//# sourceMappingURL=services.d.ts.map
|