@lwrjs/core 0.7.0-alpha.7 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/env-config.cjs +5 -0
- package/build/cjs/index.cjs +24 -10
- package/build/cjs/middlewares/api-middleware.cjs +20 -20
- package/build/cjs/middlewares/hmr-middleware.cjs +8 -0
- package/build/cjs/middlewares/ui-middleware.cjs +3 -3
- package/build/cjs/middlewares/utils.cjs +0 -20
- package/build/es/env-config.js +5 -0
- package/build/es/index.d.ts +4 -1
- package/build/es/index.js +24 -10
- package/build/es/middlewares/api-middleware.js +11 -11
- package/build/es/middlewares/hmr-middleware.js +9 -0
- package/build/es/middlewares/ui-middleware.js +4 -4
- package/build/es/middlewares/utils.d.ts +0 -10
- package/build/es/middlewares/utils.js +0 -29
- package/package.json +30 -32
package/build/cjs/env-config.cjs
CHANGED
|
@@ -295,6 +295,11 @@ function normalizeConfig(config) {
|
|
|
295
295
|
lwc: normalizeLwcConfig(mergeLWCConfigs(lwrJsonConfig, config)),
|
|
296
296
|
bundleConfig: mergeBundleConfig(lwrJsonConfig, config),
|
|
297
297
|
locker: mergeLockerConfig(lwrJsonConfig, config),
|
|
298
|
+
staticSiteGenerator: {
|
|
299
|
+
...DEFAULT_GENERATOR_CONFIG,
|
|
300
|
+
...lwrJsonConfig?.staticSiteGenerator,
|
|
301
|
+
...config?.staticSiteGenerator
|
|
302
|
+
},
|
|
298
303
|
rootDir
|
|
299
304
|
};
|
|
300
305
|
const assets = normalizeAssetsDir(mergedLwrGlobalConfig.assets, rootDir);
|
package/build/cjs/index.cjs
CHANGED
|
@@ -213,17 +213,31 @@ var LwrApp = class {
|
|
|
213
213
|
await this.init();
|
|
214
214
|
const {server, config, app} = this;
|
|
215
215
|
const {serverMode, port} = config;
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
throw (0, import_diagnostics.createSingleDiagnosticError)({
|
|
222
|
-
description: import_diagnostics.descriptions.SERVER.WARMUP_ERROR(err.message)
|
|
223
|
-
}, import_diagnostics.LwrServerError);
|
|
216
|
+
return new Promise((resolve, reject) => {
|
|
217
|
+
const handleError = (err) => {
|
|
218
|
+
server.off("error", handleError);
|
|
219
|
+
if (err.code === "EADDRINUSE") {
|
|
220
|
+
err = new Error(`Port ${port} is already in use.`);
|
|
224
221
|
}
|
|
225
|
-
|
|
226
|
-
|
|
222
|
+
reject(err);
|
|
223
|
+
};
|
|
224
|
+
server.on("error", handleError);
|
|
225
|
+
server.listen(port, async () => {
|
|
226
|
+
server.off("error", handleError);
|
|
227
|
+
if (process.env.WARMUP?.toLowerCase() === "true") {
|
|
228
|
+
try {
|
|
229
|
+
await (0, import_server_warmup.warmupServer)(config, app.getInternalRequestKey());
|
|
230
|
+
} catch (err) {
|
|
231
|
+
const diagnostic = (0, import_diagnostics.createSingleDiagnosticError)({
|
|
232
|
+
description: import_diagnostics.descriptions.SERVER.WARMUP_ERROR(err.message)
|
|
233
|
+
}, import_diagnostics.LwrServerError);
|
|
234
|
+
return reject(diagnostic);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const opts = {serverMode, port};
|
|
238
|
+
callback?.(opts);
|
|
239
|
+
resolve(opts);
|
|
240
|
+
});
|
|
227
241
|
});
|
|
228
242
|
}
|
|
229
243
|
async close() {
|
|
@@ -102,8 +102,8 @@ function apiMiddleware(app, context) {
|
|
|
102
102
|
res.type("application/javascript").send(bundleDef.code);
|
|
103
103
|
} catch (e) {
|
|
104
104
|
console.log(e);
|
|
105
|
-
const error = (0,
|
|
106
|
-
res.status(error.status).send(error.message);
|
|
105
|
+
const error = (0, import_diagnostics.createReturnStatus)(`bundle for "${moduleId?.specifier || req.params?.specifier}"`, e);
|
|
106
|
+
res.status(error.status).type("text/plain").send(error.message);
|
|
107
107
|
}
|
|
108
108
|
});
|
|
109
109
|
app.get([
|
|
@@ -138,8 +138,8 @@ function apiMiddleware(app, context) {
|
|
|
138
138
|
}
|
|
139
139
|
} catch (e) {
|
|
140
140
|
console.log(e);
|
|
141
|
-
const error = (0,
|
|
142
|
-
res.status(error.status).send(error.message);
|
|
141
|
+
const error = (0, import_diagnostics.createReturnStatus)(`bundle for "${moduleId?.specifier || req.params?.specifier}"`, e);
|
|
142
|
+
res.status(error.status).type("text/plain").send(error.message);
|
|
143
143
|
}
|
|
144
144
|
});
|
|
145
145
|
app.get([
|
|
@@ -169,8 +169,8 @@ function apiMiddleware(app, context) {
|
|
|
169
169
|
res.type("application/json").send(bundleDef.map);
|
|
170
170
|
} catch (e) {
|
|
171
171
|
console.log(e);
|
|
172
|
-
const error = (0,
|
|
173
|
-
res.status(error.status).send(error.message);
|
|
172
|
+
const error = (0, import_diagnostics.createReturnStatus)(`bundle sourcemap for "${moduleId?.specifier || req.params?.specifier}"`, e);
|
|
173
|
+
res.status(error.status).type("text/plain").send(error.message);
|
|
174
174
|
}
|
|
175
175
|
});
|
|
176
176
|
app.get([
|
|
@@ -211,8 +211,8 @@ function apiMiddleware(app, context) {
|
|
|
211
211
|
}
|
|
212
212
|
} catch (e) {
|
|
213
213
|
console.log(e);
|
|
214
|
-
const error = (0,
|
|
215
|
-
res.status(error.status).send(error.message);
|
|
214
|
+
const error = (0, import_diagnostics.createReturnStatus)(`module "${moduleId?.specifier || req.params?.specifier}"`, e);
|
|
215
|
+
res.status(error.status).type("text/plain").send(error.message);
|
|
216
216
|
}
|
|
217
217
|
});
|
|
218
218
|
app.get([
|
|
@@ -247,8 +247,8 @@ function apiMiddleware(app, context) {
|
|
|
247
247
|
}
|
|
248
248
|
} catch (e) {
|
|
249
249
|
console.log(e);
|
|
250
|
-
const error = (0,
|
|
251
|
-
res.status(error.status).send(error.message);
|
|
250
|
+
const error = (0, import_diagnostics.createReturnStatus)(`module "${moduleId?.specifier || req.params?.specifier}"`, e);
|
|
251
|
+
res.status(error.status).type("text/plain").send(error.message);
|
|
252
252
|
}
|
|
253
253
|
});
|
|
254
254
|
app.get([
|
|
@@ -276,7 +276,7 @@ function apiMiddleware(app, context) {
|
|
|
276
276
|
res.status(200).type("application/json").send(importMetadata);
|
|
277
277
|
} catch (e) {
|
|
278
278
|
console.log(e);
|
|
279
|
-
const error = (0,
|
|
279
|
+
const error = (0, import_diagnostics.createReturnStatus)(`mappings for "${JSON.stringify(moduleIds || req.params?.specifiers)}"`, e);
|
|
280
280
|
res.status(error.status).send(error.message);
|
|
281
281
|
}
|
|
282
282
|
});
|
|
@@ -307,8 +307,8 @@ function apiMiddleware(app, context) {
|
|
|
307
307
|
res.setMetadata({resource});
|
|
308
308
|
} catch (e) {
|
|
309
309
|
console.log(e);
|
|
310
|
-
const error = (0,
|
|
311
|
-
res.status(error.status).send(error.message);
|
|
310
|
+
const error = (0, import_diagnostics.createReturnStatus)(`resource "${resourceId?.specifier || req.params?.specifier}"`, e);
|
|
311
|
+
res.status(error.status).type("text/plain").send(error.message);
|
|
312
312
|
}
|
|
313
313
|
});
|
|
314
314
|
const paths = context.appConfig.assets.map((a) => a.urlPath);
|
|
@@ -317,11 +317,11 @@ function apiMiddleware(app, context) {
|
|
|
317
317
|
}
|
|
318
318
|
app.all(paths, async (req, res) => {
|
|
319
319
|
const {runtimeEnvironment} = req.getRuntimeContext(defaultRuntimeEnvironment);
|
|
320
|
-
const {
|
|
321
|
-
assetId: {specifier, type},
|
|
322
|
-
signature
|
|
323
|
-
} = (0, import_shared_utils.getAssetIdentity)(req);
|
|
324
320
|
try {
|
|
321
|
+
const {
|
|
322
|
+
assetId: {specifier, type},
|
|
323
|
+
signature
|
|
324
|
+
} = (0, import_shared_utils.getAssetIdentity)(req);
|
|
325
325
|
const assetObj = await context.assetRegistry.getAsset({specifier, signature, type}, runtimeEnvironment);
|
|
326
326
|
if (assetObj.mime) {
|
|
327
327
|
res.type(assetObj.mime);
|
|
@@ -330,7 +330,7 @@ function apiMiddleware(app, context) {
|
|
|
330
330
|
res.stream(assetObj.stream());
|
|
331
331
|
} catch (e) {
|
|
332
332
|
console.log(e);
|
|
333
|
-
const error = (0,
|
|
333
|
+
const error = (0, import_diagnostics.createReturnStatus)(`asset at "${req.originalUrl}"`, e);
|
|
334
334
|
res.status(error.status).send(error.message);
|
|
335
335
|
}
|
|
336
336
|
});
|
|
@@ -352,8 +352,8 @@ function apiMiddleware(app, context) {
|
|
|
352
352
|
res.stream(assetObj.stream());
|
|
353
353
|
} catch (e) {
|
|
354
354
|
console.log(e);
|
|
355
|
-
const error = (0,
|
|
356
|
-
res.status(error.status).send(error.message);
|
|
355
|
+
const error = (0, import_diagnostics.createReturnStatus)(`asset at "${specifier}"`, e);
|
|
356
|
+
res.status(error.status).type("text/plain").send(error.message);
|
|
357
357
|
}
|
|
358
358
|
});
|
|
359
359
|
}
|
|
@@ -33,6 +33,7 @@ var hmr;
|
|
|
33
33
|
var Hmr = class {
|
|
34
34
|
constructor(server, context) {
|
|
35
35
|
this.server = server;
|
|
36
|
+
this.context = context;
|
|
36
37
|
this.moduleRegistry = context.moduleRegistry;
|
|
37
38
|
const observer = context.appObserver;
|
|
38
39
|
observer.onModuleDefinitionChange(({payload}) => this.updateModuleDefOnClients(payload));
|
|
@@ -57,6 +58,13 @@ var Hmr = class {
|
|
|
57
58
|
ws.on("error", () => connectedClients.delete(ws));
|
|
58
59
|
}
|
|
59
60
|
});
|
|
61
|
+
wss.on("error", (error) => {
|
|
62
|
+
if (error.code === "EADDRINUSE") {
|
|
63
|
+
console.error(`HMR Socket Server: Port ${this.context.appConfig.port} already in use.`);
|
|
64
|
+
} else {
|
|
65
|
+
console.error(error);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
60
68
|
}
|
|
61
69
|
updateModuleDefOnClients(moduleDefinition) {
|
|
62
70
|
const {moduleRegistry} = this;
|
|
@@ -95,11 +95,11 @@ function uiMiddleware(app, context) {
|
|
|
95
95
|
const {appId, encodedViewPath} = req.params;
|
|
96
96
|
const route = routes.find((route2) => route2.id === appId);
|
|
97
97
|
if (!route) {
|
|
98
|
-
res.status(404).send({error: `LWR configuration for "${appId} is not available
|
|
98
|
+
res.status(404).send({error: `LWR configuration for appId "${appId}" is not available`});
|
|
99
99
|
return;
|
|
100
100
|
}
|
|
101
101
|
try {
|
|
102
|
-
const url =
|
|
102
|
+
const url = (0, import_shared_utils.decodeViewPath)(encodedViewPath);
|
|
103
103
|
const requestPath = route.path;
|
|
104
104
|
const params = (0, import_shared_utils.extractRequestParams)(requestPath, url, req.params);
|
|
105
105
|
const viewRequest = {
|
|
@@ -110,7 +110,7 @@ function uiMiddleware(app, context) {
|
|
|
110
110
|
};
|
|
111
111
|
const response = await viewHandler.getViewConfiguration(viewRequest, route, runtimeEnvironment, runtimeParams);
|
|
112
112
|
if (!response) {
|
|
113
|
-
res.status(404).send({error: `LWR configuration for "${
|
|
113
|
+
res.status(404).send({error: `LWR configuration for viewPath "${url}" is not available`});
|
|
114
114
|
return;
|
|
115
115
|
}
|
|
116
116
|
const cacheTtl = response.cache?.ttl || route.cache?.ttl;
|
|
@@ -24,31 +24,11 @@ var __toModule = (module2) => {
|
|
|
24
24
|
// packages/@lwrjs/core/src/middlewares/utils.ts
|
|
25
25
|
__markAsModule(exports);
|
|
26
26
|
__export(exports, {
|
|
27
|
-
createReturnStatus: () => createReturnStatus,
|
|
28
27
|
getRequestProperties: () => getRequestProperties,
|
|
29
28
|
isSupportedEnvironment: () => isSupportedEnvironment
|
|
30
29
|
});
|
|
31
|
-
var import_diagnostics = __toModule(require("@lwrjs/diagnostics"));
|
|
32
30
|
var import_path_to_regexp = __toModule(require("path-to-regexp"));
|
|
33
31
|
var import_qs = __toModule(require("qs"));
|
|
34
|
-
var import_dompurify = __toModule(require("dompurify"));
|
|
35
|
-
var import_jsdom = __toModule(require("jsdom"));
|
|
36
|
-
var window = new import_jsdom.JSDOM("").window;
|
|
37
|
-
var DOMPurify = (0, import_dompurify.default)(window);
|
|
38
|
-
function createReturnStatus(name, error) {
|
|
39
|
-
let returnStatus = {status: 501, message: ""};
|
|
40
|
-
if ((0, import_diagnostics.isNodeError)(error) && error.code === "NO_LWC_MODULE_FOUND") {
|
|
41
|
-
returnStatus = {status: 404, message: import_diagnostics.descriptions.UNRESOLVABLE.LWC_MODULE(name).message};
|
|
42
|
-
} else if (error instanceof import_diagnostics.LwrUnresolvableError && error.diagnostics[0].description.category === "lwrUnresolvable/invalid") {
|
|
43
|
-
returnStatus = {status: 400, message: error.message};
|
|
44
|
-
} else if (error instanceof import_diagnostics.LwrUnresolvableError) {
|
|
45
|
-
returnStatus = {status: 404, message: error.message};
|
|
46
|
-
} else {
|
|
47
|
-
returnStatus = {status: 500, message: import_diagnostics.descriptions.UNRESOLVABLE.SERVER_ERROR(name).message};
|
|
48
|
-
}
|
|
49
|
-
returnStatus.message = DOMPurify.sanitize(returnStatus.message);
|
|
50
|
-
return returnStatus;
|
|
51
|
-
}
|
|
52
32
|
function getRequestProperties(pattern, req) {
|
|
53
33
|
const {url = "/"} = req;
|
|
54
34
|
const [pathname, search] = url.split("?");
|
package/build/es/env-config.js
CHANGED
|
@@ -306,6 +306,11 @@ export function normalizeConfig(config) {
|
|
|
306
306
|
lwc: normalizeLwcConfig(mergeLWCConfigs(lwrJsonConfig, config)),
|
|
307
307
|
bundleConfig: mergeBundleConfig(lwrJsonConfig, config),
|
|
308
308
|
locker: mergeLockerConfig(lwrJsonConfig, config),
|
|
309
|
+
staticSiteGenerator: {
|
|
310
|
+
...DEFAULT_GENERATOR_CONFIG,
|
|
311
|
+
...lwrJsonConfig?.staticSiteGenerator,
|
|
312
|
+
...config?.staticSiteGenerator,
|
|
313
|
+
},
|
|
309
314
|
rootDir,
|
|
310
315
|
};
|
|
311
316
|
// Normalize entries (eg: parse full file paths, etc)
|
package/build/es/index.d.ts
CHANGED
|
@@ -11,7 +11,10 @@ export declare class LwrApp {
|
|
|
11
11
|
listen(callback?: ((opts: {
|
|
12
12
|
serverMode: string;
|
|
13
13
|
port: number;
|
|
14
|
-
}) => void) | undefined): Promise<
|
|
14
|
+
}) => void) | undefined): Promise<{
|
|
15
|
+
serverMode: string;
|
|
16
|
+
port: number;
|
|
17
|
+
}>;
|
|
15
18
|
close(): Promise<void>;
|
|
16
19
|
getInternalServer<S extends ServerTypes>(): ServerTypeImpl<S>;
|
|
17
20
|
getServer(): PublicAppServer<ServerTypes>;
|
package/build/es/index.js
CHANGED
|
@@ -179,18 +179,32 @@ export class LwrApp {
|
|
|
179
179
|
await this.init();
|
|
180
180
|
const { server, config, app } = this;
|
|
181
181
|
const { serverMode, port } = config;
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
182
|
+
return new Promise((resolve, reject) => {
|
|
183
|
+
const handleError = (err) => {
|
|
184
|
+
server.off('error', handleError);
|
|
185
|
+
if (err.code === 'EADDRINUSE') {
|
|
186
|
+
err = new Error(`Port ${port} is already in use.`);
|
|
186
187
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
188
|
+
reject(err);
|
|
189
|
+
};
|
|
190
|
+
server.on('error', handleError);
|
|
191
|
+
server.listen(port, async () => {
|
|
192
|
+
server.off('error', handleError);
|
|
193
|
+
if (process.env.WARMUP?.toLowerCase() === 'true') {
|
|
194
|
+
try {
|
|
195
|
+
await warmupServer(config, app.getInternalRequestKey());
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
const diagnostic = createSingleDiagnosticError({
|
|
199
|
+
description: descriptions.SERVER.WARMUP_ERROR(err.message),
|
|
200
|
+
}, LwrServerError);
|
|
201
|
+
return reject(diagnostic);
|
|
202
|
+
}
|
|
191
203
|
}
|
|
192
|
-
|
|
193
|
-
|
|
204
|
+
const opts = { serverMode, port };
|
|
205
|
+
callback?.(opts);
|
|
206
|
+
resolve(opts);
|
|
207
|
+
});
|
|
194
208
|
});
|
|
195
209
|
}
|
|
196
210
|
async close() {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { LwrUnresolvableError, createSingleDiagnosticError as createDiagnostic, descriptions, } from '@lwrjs/diagnostics';
|
|
1
|
+
import { createReturnStatus, LwrUnresolvableError, createSingleDiagnosticError as createDiagnostic, descriptions, } from '@lwrjs/diagnostics';
|
|
2
2
|
import { LATEST_SIGNATURE, explodeSpecifier, getImportMetadataMappings, serializeModuleToJson, getModuleIdentity, getResourceIdentity, getAssetIdentity, getMappingIdentity, getVersionedModuleId, } from '@lwrjs/shared-utils';
|
|
3
|
-
import {
|
|
3
|
+
import { isSupportedEnvironment } from './utils.js';
|
|
4
4
|
export default function apiMiddleware(app, context) {
|
|
5
5
|
const { appConfig: { environment: environmentConfig }, moduleRegistry, moduleBundler, resourceRegistry, runtimeEnvironment: defaultRuntimeEnvironment, } = context;
|
|
6
6
|
const errors = descriptions.UNRESOLVABLE;
|
|
@@ -87,7 +87,7 @@ export default function apiMiddleware(app, context) {
|
|
|
87
87
|
catch (e) {
|
|
88
88
|
console.log(e);
|
|
89
89
|
const error = createReturnStatus(`bundle for "${moduleId?.specifier || req.params?.specifier}"`, e);
|
|
90
|
-
res.status(error.status).send(error.message);
|
|
90
|
+
res.status(error.status).type('text/plain').send(error.message);
|
|
91
91
|
}
|
|
92
92
|
});
|
|
93
93
|
// Unsigned Bundles => 302
|
|
@@ -134,7 +134,7 @@ export default function apiMiddleware(app, context) {
|
|
|
134
134
|
catch (e) {
|
|
135
135
|
console.log(e);
|
|
136
136
|
const error = createReturnStatus(`bundle for "${moduleId?.specifier || req.params?.specifier}"`, e);
|
|
137
|
-
res.status(error.status).send(error.message);
|
|
137
|
+
res.status(error.status).type('text/plain').send(error.message);
|
|
138
138
|
}
|
|
139
139
|
});
|
|
140
140
|
// Bundle sourcemaps
|
|
@@ -171,7 +171,7 @@ export default function apiMiddleware(app, context) {
|
|
|
171
171
|
catch (e) {
|
|
172
172
|
console.log(e);
|
|
173
173
|
const error = createReturnStatus(`bundle sourcemap for "${moduleId?.specifier || req.params?.specifier}"`, e);
|
|
174
|
-
res.status(error.status).send(error.message);
|
|
174
|
+
res.status(error.status).type('text/plain').send(error.message);
|
|
175
175
|
}
|
|
176
176
|
});
|
|
177
177
|
// Signed Modules
|
|
@@ -224,7 +224,7 @@ export default function apiMiddleware(app, context) {
|
|
|
224
224
|
catch (e) {
|
|
225
225
|
console.log(e);
|
|
226
226
|
const error = createReturnStatus(`module "${moduleId?.specifier || req.params?.specifier}"`, e);
|
|
227
|
-
res.status(error.status).send(error.message);
|
|
227
|
+
res.status(error.status).type('text/plain').send(error.message);
|
|
228
228
|
}
|
|
229
229
|
});
|
|
230
230
|
// Unsigned Modules => 302
|
|
@@ -272,7 +272,7 @@ export default function apiMiddleware(app, context) {
|
|
|
272
272
|
catch (e) {
|
|
273
273
|
console.log(e);
|
|
274
274
|
const error = createReturnStatus(`module "${moduleId?.specifier || req.params?.specifier}"`, e);
|
|
275
|
-
res.status(error.status).send(error.message);
|
|
275
|
+
res.status(error.status).type('text/plain').send(error.message);
|
|
276
276
|
}
|
|
277
277
|
});
|
|
278
278
|
// Mapping Services
|
|
@@ -351,7 +351,7 @@ export default function apiMiddleware(app, context) {
|
|
|
351
351
|
catch (e) {
|
|
352
352
|
console.log(e);
|
|
353
353
|
const error = createReturnStatus(`resource "${resourceId?.specifier || req.params?.specifier}"`, e);
|
|
354
|
-
res.status(error.status).send(error.message);
|
|
354
|
+
res.status(error.status).type('text/plain').send(error.message);
|
|
355
355
|
}
|
|
356
356
|
});
|
|
357
357
|
// -- Asset configuration -----------------------------------------------------------
|
|
@@ -364,8 +364,8 @@ export default function apiMiddleware(app, context) {
|
|
|
364
364
|
}
|
|
365
365
|
app.all(paths, async (req, res) => {
|
|
366
366
|
const { runtimeEnvironment } = req.getRuntimeContext(defaultRuntimeEnvironment);
|
|
367
|
-
const { assetId: { specifier, type }, signature, } = getAssetIdentity(req);
|
|
368
367
|
try {
|
|
368
|
+
const { assetId: { specifier, type }, signature, } = getAssetIdentity(req);
|
|
369
369
|
const assetObj = await context.assetRegistry.getAsset({ specifier, signature, type }, runtimeEnvironment);
|
|
370
370
|
if (assetObj.mime) {
|
|
371
371
|
res.type(assetObj.mime);
|
|
@@ -375,7 +375,7 @@ export default function apiMiddleware(app, context) {
|
|
|
375
375
|
}
|
|
376
376
|
catch (e) {
|
|
377
377
|
console.log(e);
|
|
378
|
-
const error = createReturnStatus(`asset at "${
|
|
378
|
+
const error = createReturnStatus(`asset at "${req.originalUrl}"`, e);
|
|
379
379
|
res.status(error.status).send(error.message);
|
|
380
380
|
}
|
|
381
381
|
});
|
|
@@ -403,7 +403,7 @@ export default function apiMiddleware(app, context) {
|
|
|
403
403
|
catch (e) {
|
|
404
404
|
console.log(e);
|
|
405
405
|
const error = createReturnStatus(`asset at "${specifier}"`, e);
|
|
406
|
-
res.status(error.status).send(error.message);
|
|
406
|
+
res.status(error.status).type('text/plain').send(error.message);
|
|
407
407
|
}
|
|
408
408
|
});
|
|
409
409
|
}
|
|
@@ -5,6 +5,7 @@ let hmr;
|
|
|
5
5
|
class Hmr {
|
|
6
6
|
constructor(server, context) {
|
|
7
7
|
this.server = server;
|
|
8
|
+
this.context = context;
|
|
8
9
|
this.moduleRegistry = context.moduleRegistry;
|
|
9
10
|
const observer = context.appObserver;
|
|
10
11
|
observer.onModuleDefinitionChange(({ payload }) => this.updateModuleDefOnClients(payload));
|
|
@@ -30,6 +31,14 @@ class Hmr {
|
|
|
30
31
|
ws.on('error', () => connectedClients.delete(ws));
|
|
31
32
|
}
|
|
32
33
|
});
|
|
34
|
+
wss.on('error', (error) => {
|
|
35
|
+
if (error.code === 'EADDRINUSE') {
|
|
36
|
+
console.error(`HMR Socket Server: Port ${this.context.appConfig.port} already in use.`);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
console.error(error);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
33
42
|
}
|
|
34
43
|
updateModuleDefOnClients(moduleDefinition) {
|
|
35
44
|
const { moduleRegistry } = this;
|
|
@@ -2,7 +2,7 @@ import ms from 'ms';
|
|
|
2
2
|
import { DiagnosticsError } from '@lwrjs/diagnostics';
|
|
3
3
|
import { LwrViewHandler } from '@lwrjs/view-registry';
|
|
4
4
|
import { isSupportedEnvironment } from './utils.js';
|
|
5
|
-
import { getClientBootstrapConfigurationRoutes, extractRequestParams } from '@lwrjs/shared-utils';
|
|
5
|
+
import { decodeViewPath, getClientBootstrapConfigurationRoutes, extractRequestParams, } from '@lwrjs/shared-utils';
|
|
6
6
|
export default function uiMiddleware(app, context) {
|
|
7
7
|
const { viewRegistry, moduleRegistry, runtimeEnvironment: defaultRuntimeEnvironment } = context;
|
|
8
8
|
const { environment: environmentConfig, routes, errorRoutes } = context.appConfig;
|
|
@@ -76,12 +76,12 @@ export default function uiMiddleware(app, context) {
|
|
|
76
76
|
// Match the route id
|
|
77
77
|
const route = routes.find((route) => route.id === appId);
|
|
78
78
|
if (!route) {
|
|
79
|
-
res.status(404).send({ error: `LWR configuration for "${appId} is not available
|
|
79
|
+
res.status(404).send({ error: `LWR configuration for appId "${appId}" is not available` });
|
|
80
80
|
return;
|
|
81
81
|
}
|
|
82
82
|
try {
|
|
83
83
|
// decode the resolved view path and extract any params.
|
|
84
|
-
const url =
|
|
84
|
+
const url = decodeViewPath(encodedViewPath);
|
|
85
85
|
const requestPath = route.path;
|
|
86
86
|
const params = extractRequestParams(requestPath, url, req.params);
|
|
87
87
|
// HTML document
|
|
@@ -93,7 +93,7 @@ export default function uiMiddleware(app, context) {
|
|
|
93
93
|
};
|
|
94
94
|
const response = await viewHandler.getViewConfiguration(viewRequest, route, runtimeEnvironment, runtimeParams);
|
|
95
95
|
if (!response) {
|
|
96
|
-
res.status(404).send({ error: `LWR configuration for "${
|
|
96
|
+
res.status(404).send({ error: `LWR configuration for viewPath "${url}" is not available` });
|
|
97
97
|
return;
|
|
98
98
|
}
|
|
99
99
|
// Same cache ttl as the Content response
|
|
@@ -2,16 +2,6 @@
|
|
|
2
2
|
import http from 'http';
|
|
3
3
|
import { EnvironmentConfig } from '@lwrjs/types';
|
|
4
4
|
import qs from 'qs';
|
|
5
|
-
/**
|
|
6
|
-
* Create a status object Express can return when there is an error
|
|
7
|
-
*
|
|
8
|
-
* @param name - string name of the problem module/resource
|
|
9
|
-
* @param error - an Error/Diagnostic object; thrown from try/catch
|
|
10
|
-
*/
|
|
11
|
-
export declare function createReturnStatus(name: string, error: unknown): {
|
|
12
|
-
status: number;
|
|
13
|
-
message: string;
|
|
14
|
-
};
|
|
15
5
|
interface Params {
|
|
16
6
|
[key: string]: string;
|
|
17
7
|
}
|
|
@@ -1,34 +1,5 @@
|
|
|
1
|
-
import { LwrUnresolvableError, descriptions, isNodeError } from '@lwrjs/diagnostics';
|
|
2
1
|
import { pathToRegexp } from 'path-to-regexp';
|
|
3
2
|
import qs from 'qs';
|
|
4
|
-
import createDOMPurify from 'dompurify';
|
|
5
|
-
import { JSDOM } from 'jsdom';
|
|
6
|
-
const window = new JSDOM('').window;
|
|
7
|
-
const DOMPurify = createDOMPurify(window);
|
|
8
|
-
/**
|
|
9
|
-
* Create a status object Express can return when there is an error
|
|
10
|
-
*
|
|
11
|
-
* @param name - string name of the problem module/resource
|
|
12
|
-
* @param error - an Error/Diagnostic object; thrown from try/catch
|
|
13
|
-
*/
|
|
14
|
-
export function createReturnStatus(name, error) {
|
|
15
|
-
let returnStatus = { status: 501, message: '' };
|
|
16
|
-
if (isNodeError(error) && error.code === 'NO_LWC_MODULE_FOUND') {
|
|
17
|
-
returnStatus = { status: 404, message: descriptions.UNRESOLVABLE.LWC_MODULE(name).message };
|
|
18
|
-
}
|
|
19
|
-
else if (error instanceof LwrUnresolvableError &&
|
|
20
|
-
error.diagnostics[0].description.category === 'lwrUnresolvable/invalid') {
|
|
21
|
-
returnStatus = { status: 400, message: error.message };
|
|
22
|
-
}
|
|
23
|
-
else if (error instanceof LwrUnresolvableError) {
|
|
24
|
-
returnStatus = { status: 404, message: error.message };
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
returnStatus = { status: 500, message: descriptions.UNRESOLVABLE.SERVER_ERROR(name).message };
|
|
28
|
-
}
|
|
29
|
-
returnStatus.message = DOMPurify.sanitize(returnStatus.message);
|
|
30
|
-
return returnStatus;
|
|
31
|
-
}
|
|
32
3
|
// Adapted from https://github.com/expressjs/express/blob/master/lib/router/layer.js
|
|
33
4
|
export function getRequestProperties(pattern, req) {
|
|
34
5
|
const { url = '/' } = req;
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.7.0
|
|
7
|
+
"version": "0.7.0",
|
|
8
8
|
"homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
@@ -33,47 +33,45 @@
|
|
|
33
33
|
"package.cjs"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@lwrjs/app-service": "0.7.0
|
|
37
|
-
"@lwrjs/asset-registry": "0.7.0
|
|
38
|
-
"@lwrjs/asset-transformer": "0.7.0
|
|
39
|
-
"@lwrjs/base-template-engine": "0.7.0
|
|
40
|
-
"@lwrjs/base-view-provider": "0.7.0
|
|
41
|
-
"@lwrjs/base-view-transformer": "0.7.0
|
|
42
|
-
"@lwrjs/client-modules": "0.7.0
|
|
43
|
-
"@lwrjs/compiler": "0.7.0
|
|
44
|
-
"@lwrjs/diagnostics": "0.7.0
|
|
45
|
-
"@lwrjs/fs-asset-provider": "0.7.0
|
|
46
|
-
"@lwrjs/html-view-provider": "0.7.0
|
|
47
|
-
"@lwrjs/loader": "0.7.0
|
|
48
|
-
"@lwrjs/lwc-module-provider": "0.7.0
|
|
49
|
-
"@lwrjs/lwc-ssr": "0.7.0
|
|
50
|
-
"@lwrjs/markdown-view-provider": "0.7.0
|
|
51
|
-
"@lwrjs/module-bundler": "0.7.0
|
|
52
|
-
"@lwrjs/module-registry": "0.7.0
|
|
53
|
-
"@lwrjs/npm-module-provider": "0.7.0
|
|
54
|
-
"@lwrjs/nunjucks-view-provider": "0.7.0
|
|
55
|
-
"@lwrjs/o11y": "0.7.0
|
|
56
|
-
"@lwrjs/resource-registry": "0.7.0
|
|
57
|
-
"@lwrjs/router": "0.7.0
|
|
58
|
-
"@lwrjs/server": "0.7.0
|
|
59
|
-
"@lwrjs/shared-utils": "0.7.0
|
|
60
|
-
"@lwrjs/view-registry": "0.7.0
|
|
61
|
-
"
|
|
62
|
-
"fs-extra": "^10.0.0",
|
|
63
|
-
"jsdom": "^16.7.0",
|
|
36
|
+
"@lwrjs/app-service": "0.7.0",
|
|
37
|
+
"@lwrjs/asset-registry": "0.7.0",
|
|
38
|
+
"@lwrjs/asset-transformer": "0.7.0",
|
|
39
|
+
"@lwrjs/base-template-engine": "0.7.0",
|
|
40
|
+
"@lwrjs/base-view-provider": "0.7.0",
|
|
41
|
+
"@lwrjs/base-view-transformer": "0.7.0",
|
|
42
|
+
"@lwrjs/client-modules": "0.7.0",
|
|
43
|
+
"@lwrjs/compiler": "0.7.0",
|
|
44
|
+
"@lwrjs/diagnostics": "0.7.0",
|
|
45
|
+
"@lwrjs/fs-asset-provider": "0.7.0",
|
|
46
|
+
"@lwrjs/html-view-provider": "0.7.0",
|
|
47
|
+
"@lwrjs/loader": "0.7.0",
|
|
48
|
+
"@lwrjs/lwc-module-provider": "0.7.0",
|
|
49
|
+
"@lwrjs/lwc-ssr": "0.7.0",
|
|
50
|
+
"@lwrjs/markdown-view-provider": "0.7.0",
|
|
51
|
+
"@lwrjs/module-bundler": "0.7.0",
|
|
52
|
+
"@lwrjs/module-registry": "0.7.0",
|
|
53
|
+
"@lwrjs/npm-module-provider": "0.7.0",
|
|
54
|
+
"@lwrjs/nunjucks-view-provider": "0.7.0",
|
|
55
|
+
"@lwrjs/o11y": "0.7.0",
|
|
56
|
+
"@lwrjs/resource-registry": "0.7.0",
|
|
57
|
+
"@lwrjs/router": "0.7.0",
|
|
58
|
+
"@lwrjs/server": "0.7.0",
|
|
59
|
+
"@lwrjs/shared-utils": "0.7.0",
|
|
60
|
+
"@lwrjs/view-registry": "0.7.0",
|
|
61
|
+
"fs-extra": "^10.1.0",
|
|
64
62
|
"jsonc-parser": "^3.0.0",
|
|
65
63
|
"ms": "^2.1.3",
|
|
66
64
|
"path-to-regexp": "^6.2.0",
|
|
67
65
|
"qs": "^6.9.4"
|
|
68
66
|
},
|
|
69
67
|
"devDependencies": {
|
|
70
|
-
"@lwrjs/types": "0.7.0
|
|
68
|
+
"@lwrjs/types": "0.7.0"
|
|
71
69
|
},
|
|
72
70
|
"peerDependencies": {
|
|
73
71
|
"lwc": ">= 1.x <= 2.x"
|
|
74
72
|
},
|
|
75
73
|
"engines": {
|
|
76
|
-
"node": ">=14.15.4 <
|
|
74
|
+
"node": ">=14.15.4 <19"
|
|
77
75
|
},
|
|
78
|
-
"gitHead": "
|
|
76
|
+
"gitHead": "c6dcb52144a8da80170e30d49a87e29d2da30f9b"
|
|
79
77
|
}
|