@lwrjs/core 0.9.0-alpha.9 → 0.9.1
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
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { LwrGlobalConfig } from '@lwrjs/types';
|
|
2
|
-
export interface BuildOptions {
|
|
3
|
-
target?: string;
|
|
4
|
-
outputDir?: string;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Resolve application configurations, generate a server context module, and bundle
|
|
8
|
-
* the LWR server. The bundled server will be written to the filesystem.
|
|
9
|
-
*
|
|
10
|
-
* @param {LwrGlobalConfig} configArg - programmatic LWR application config
|
|
11
|
-
* @param {BuildOptions} options - server build configurations
|
|
12
|
-
*/
|
|
13
|
-
export declare function buildServer(configArg?: LwrGlobalConfig, options?: BuildOptions): Promise<void>;
|
|
14
|
-
//# sourceMappingURL=server-build.d.ts.map
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import fs from 'fs-extra';
|
|
3
|
-
import esbuild from 'esbuild';
|
|
4
|
-
import { normalizeConfig } from '@lwrjs/config';
|
|
5
|
-
import { resolveConfigurations } from '../context/configurations.js';
|
|
6
|
-
import { createProviderContext } from '../context/provider.js';
|
|
7
|
-
import { createServerContext } from '../context/server.js';
|
|
8
|
-
function getBuildMetadata(appConfig) {
|
|
9
|
-
const moduleProviders = processServiceEntries('moduleProvider', appConfig.moduleProviders);
|
|
10
|
-
const resourceProviders = processServiceEntries('resourceProvider', appConfig.resourceProviders);
|
|
11
|
-
const viewProviders = processServiceEntries('viewProvider', appConfig.viewProviders);
|
|
12
|
-
const viewTransformers = processServiceEntries('viewTransformer', appConfig.viewTransformers);
|
|
13
|
-
const assetProviders = processServiceEntries('assetProvider', appConfig.assetProviders);
|
|
14
|
-
const assetTransformers = processServiceEntries('assetTransformer', appConfig.assetTransformers);
|
|
15
|
-
const imports = [
|
|
16
|
-
...moduleProviders.imports,
|
|
17
|
-
...resourceProviders.imports,
|
|
18
|
-
...viewProviders.imports,
|
|
19
|
-
...viewTransformers.imports,
|
|
20
|
-
...assetProviders.imports,
|
|
21
|
-
...assetTransformers.imports,
|
|
22
|
-
];
|
|
23
|
-
return {
|
|
24
|
-
imports,
|
|
25
|
-
moduleProviders: moduleProviders.services,
|
|
26
|
-
resourceProviders: resourceProviders.services,
|
|
27
|
-
viewProviders: viewProviders.services,
|
|
28
|
-
viewTransformers: viewTransformers.services,
|
|
29
|
-
assetProviders: assetProviders.services,
|
|
30
|
-
assetTransformers: assetTransformers.services,
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
function processServiceEntries(serviceType, entries) {
|
|
34
|
-
const imports = [];
|
|
35
|
-
const services = [];
|
|
36
|
-
for (const [index, [pkg, config]] of entries.entries()) {
|
|
37
|
-
const name = serviceType + index;
|
|
38
|
-
imports.push(`import ${name} from '${pkg}';`);
|
|
39
|
-
services.push(`[${name}, ${JSON.stringify(config)}]`);
|
|
40
|
-
}
|
|
41
|
-
return {
|
|
42
|
-
imports,
|
|
43
|
-
services,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
function generateServices(providerContext) {
|
|
47
|
-
return ([ServiceCtor, serviceConfig = {}]) => new ServiceCtor(serviceConfig, providerContext);
|
|
48
|
-
}
|
|
49
|
-
function isRemote() {
|
|
50
|
-
return process.env.AWS_LAMBDA_FUNCTION_NAME !== undefined;
|
|
51
|
-
}
|
|
52
|
-
function generateServerContextModule(appConfig, runtimeEnvironment, globalData, metadata) {
|
|
53
|
-
const { imports, moduleProviders, resourceProviders, viewProviders, viewTransformers, assetProviders, assetTransformers, } = metadata;
|
|
54
|
-
// config will be resolved programmatically and relative to the current machine
|
|
55
|
-
const config = {
|
|
56
|
-
...appConfig,
|
|
57
|
-
rootDir: undefined,
|
|
58
|
-
ignoreLwrConfigFile: true,
|
|
59
|
-
};
|
|
60
|
-
return [
|
|
61
|
-
`/* This module is generated */`,
|
|
62
|
-
`import { LwrCompiler } from '@lwrjs/compiler';`,
|
|
63
|
-
`import { LwrModuleBundler } from '@lwrjs/module-bundler';`,
|
|
64
|
-
`import { LwrModuleRegistry } from '@lwrjs/module-registry';`,
|
|
65
|
-
`import { LwrResourceRegistry } from '@lwrjs/resource-registry';`,
|
|
66
|
-
`import { LwrAssetRegistry } from '@lwrjs/asset-registry';`,
|
|
67
|
-
`import { LwrViewRegistry } from '@lwrjs/view-registry';`,
|
|
68
|
-
`import { LwrApplicationObserver, deepFreeze } from '@lwrjs/shared-utils';`,
|
|
69
|
-
`import { normalizeConfig } from '@lwrjs/config';`,
|
|
70
|
-
// all of the static imports for the services
|
|
71
|
-
...imports,
|
|
72
|
-
// reusing context resolution utils
|
|
73
|
-
createServerContext.toString(),
|
|
74
|
-
createProviderContext.toString(),
|
|
75
|
-
// helper function for generically initializing the services
|
|
76
|
-
generateServices.toString(),
|
|
77
|
-
// helper function to check if running on lambda
|
|
78
|
-
isRemote.toString(),
|
|
79
|
-
`const config = ${JSON.stringify(config, null, 4)}`,
|
|
80
|
-
`const runtimeEnvironment = ${JSON.stringify(runtimeEnvironment, null, 4)}`,
|
|
81
|
-
`const globalData = ${JSON.stringify(globalData, null, 4)}`,
|
|
82
|
-
// build artifacts are placed into a build dir on MRT
|
|
83
|
-
`isRemote() && process.chdir(__dirname);`,
|
|
84
|
-
`isRemote() && (config.rootDir = __dirname);`,
|
|
85
|
-
// cache dir must be in tmp dir to be able to write to the filesystem on lambda
|
|
86
|
-
`isRemote() && (config.cacheDir = '/tmp/__lwr_cache__');`,
|
|
87
|
-
// resolve all config config paths relative to the current machine
|
|
88
|
-
`const normalizedConfig = normalizeConfig(config);`,
|
|
89
|
-
`const serverContext = createServerContext(normalizedConfig, runtimeEnvironment, globalData);`,
|
|
90
|
-
`const providerContext = createProviderContext(serverContext);`,
|
|
91
|
-
`const generate = generateServices(providerContext);`,
|
|
92
|
-
`const moduleProviders = [${moduleProviders}].map(generate);`,
|
|
93
|
-
`const resourceProviders = [${resourceProviders}].map(generate);`,
|
|
94
|
-
`const viewProviders = [${viewProviders}].map(generate);`,
|
|
95
|
-
`const viewTransformers = [${viewTransformers}].map(generate);`,
|
|
96
|
-
`const assetProviders = [${assetProviders}].map(generate);`,
|
|
97
|
-
`const assetTransformers = [${assetTransformers}].map(generate);`,
|
|
98
|
-
`serverContext.moduleRegistry.addModuleProviders(moduleProviders);`,
|
|
99
|
-
`serverContext.resourceRegistry.addResourceProviders(resourceProviders);`,
|
|
100
|
-
`serverContext.viewRegistry.addViewProviders(viewProviders);`,
|
|
101
|
-
`serverContext.viewRegistry.addViewTransformers(viewTransformers);`,
|
|
102
|
-
`serverContext.assetRegistry.addAssetProviders(assetProviders);`,
|
|
103
|
-
`serverContext.assetRegistry.addAssetTransformers(assetTransformers);`,
|
|
104
|
-
`export default serverContext;`,
|
|
105
|
-
].join('\n');
|
|
106
|
-
}
|
|
107
|
-
function generateServerSource(target) {
|
|
108
|
-
// `lambda` is the only supported build target for now
|
|
109
|
-
if (target !== 'lambda') {
|
|
110
|
-
// TODO: move to diagnostic error
|
|
111
|
-
throw `Unsupported server build target: ${target}`;
|
|
112
|
-
}
|
|
113
|
-
return [
|
|
114
|
-
`/* This module is generated */`,
|
|
115
|
-
`import { createHandler } from '@lwrjs/lambda';`,
|
|
116
|
-
// Importing the server context module at this point enables support for ESM bundling.
|
|
117
|
-
// If the server context module was imported in `createHandler`, it would need to be exposed
|
|
118
|
-
// as CJS.
|
|
119
|
-
`import build from './lwr.build.js';`,
|
|
120
|
-
// The server context module MUST NOT require asynchronous initialization to support running on MRT
|
|
121
|
-
// Once MRT supports ESM, top-level await could be used at this point to perform some asynchronous
|
|
122
|
-
// initialization.
|
|
123
|
-
`const handler = createHandler(build);`,
|
|
124
|
-
// MRT expects the handler to be a named export: `get`
|
|
125
|
-
`export { handler as get };`,
|
|
126
|
-
].join('\n');
|
|
127
|
-
}
|
|
128
|
-
async function bundleServer(entryPoint, outputPath) {
|
|
129
|
-
await esbuild.build({
|
|
130
|
-
entryPoints: [entryPoint],
|
|
131
|
-
bundle: true,
|
|
132
|
-
sourcemap: true,
|
|
133
|
-
logLevel: 'silent',
|
|
134
|
-
external: [
|
|
135
|
-
// issues with native dependencies
|
|
136
|
-
'node:*',
|
|
137
|
-
'fsevents',
|
|
138
|
-
'iltorb',
|
|
139
|
-
'esbuild*',
|
|
140
|
-
'esinstall',
|
|
141
|
-
'jsonc-parser',
|
|
142
|
-
'node-fetch',
|
|
143
|
-
'rollup',
|
|
144
|
-
'rollup-plugin-node-polyfills',
|
|
145
|
-
// issues resolving relative files after bundling
|
|
146
|
-
'@lwrjs/config',
|
|
147
|
-
'@lwrjs/loader',
|
|
148
|
-
],
|
|
149
|
-
format: 'cjs',
|
|
150
|
-
platform: 'node',
|
|
151
|
-
outfile: outputPath,
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Resolve application configurations, generate a server context module, and bundle
|
|
156
|
-
* the LWR server. The bundled server will be written to the filesystem.
|
|
157
|
-
*
|
|
158
|
-
* @param {LwrGlobalConfig} configArg - programmatic LWR application config
|
|
159
|
-
* @param {BuildOptions} options - server build configurations
|
|
160
|
-
*/
|
|
161
|
-
export async function buildServer(configArg, options) {
|
|
162
|
-
// App config will be included in the generated server context module, but all of the config paths
|
|
163
|
-
// will not be normalized. The config paths will be normalized at runtime to enable running the
|
|
164
|
-
// application on a different machine.
|
|
165
|
-
const config = normalizeConfig(configArg, { skipDirNormalization: true, skipCacheDirCreation: true });
|
|
166
|
-
// Config hooks are applied during generation because they enable asynchronous modification of
|
|
167
|
-
// the LWR configurations. Since config hooks are run at build time, the config hooks MUST NOT be
|
|
168
|
-
// responsible for critical application initialization or have dependencies on normalized config paths.
|
|
169
|
-
const { appConfig, runtimeEnvironment, globalData } = await resolveConfigurations(config);
|
|
170
|
-
// All LWR services are processed and included in the generated server context module. This module will
|
|
171
|
-
// statically import the services and initialize all LWR server components(ie. providers and registries).
|
|
172
|
-
const metadata = getBuildMetadata(appConfig);
|
|
173
|
-
const serverContext = generateServerContextModule(appConfig, runtimeEnvironment, globalData, metadata);
|
|
174
|
-
const outputDir = path.join(appConfig.rootDir, options?.outputDir || '/build');
|
|
175
|
-
const serverSource = generateServerSource(options?.target || 'lambda');
|
|
176
|
-
// HACK: writing the server context module and server entry to a file for debugging
|
|
177
|
-
await fs.ensureDir(outputDir);
|
|
178
|
-
await fs.writeFile(path.join(outputDir, 'lwr.build.js'), serverContext);
|
|
179
|
-
await fs.writeFile(path.join(outputDir, 'entry.js'), serverSource);
|
|
180
|
-
await bundleServer(path.join(outputDir, 'entry.js'), path.join(outputDir, 'ssr.js'));
|
|
181
|
-
}
|
|
182
|
-
//# sourceMappingURL=server-build.js.map
|