@lwrjs/server 0.9.0-alpha.0 → 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.
Files changed (37) hide show
  1. package/build/cjs/common/abstract-internal-app-server.cjs +1 -1
  2. package/build/cjs/common/abstract-request.cjs +66 -0
  3. package/build/cjs/express/express-request.cjs +20 -40
  4. package/build/cjs/express/express-response.cjs +7 -6
  5. package/build/cjs/express/express-server.cjs +5 -5
  6. package/build/cjs/fs/fs-request.cjs +0 -6
  7. package/build/cjs/fs/fs-response.cjs +1 -1
  8. package/build/cjs/fs/fs-server.cjs +2 -2
  9. package/build/cjs/index.cjs +2 -2
  10. package/build/cjs/koa/koa-request.cjs +20 -35
  11. package/build/cjs/koa/koa-response.cjs +7 -6
  12. package/build/cjs/koa/koa-server.cjs +6 -6
  13. package/build/es/common/abstract-internal-app-server.d.ts +1 -1
  14. package/build/es/common/abstract-internal-app-server.js +1 -1
  15. package/build/es/common/abstract-request.d.ts +24 -0
  16. package/build/es/common/abstract-request.js +61 -0
  17. package/build/es/express/express-request.d.ts +5 -11
  18. package/build/es/express/express-request.js +4 -45
  19. package/build/es/express/express-response.d.ts +3 -3
  20. package/build/es/express/express-response.js +8 -6
  21. package/build/es/express/express-server.d.ts +5 -5
  22. package/build/es/express/express-server.js +5 -5
  23. package/build/es/fs/fs-request.d.ts +0 -2
  24. package/build/es/fs/fs-request.js +0 -6
  25. package/build/es/fs/fs-response.d.ts +1 -1
  26. package/build/es/fs/fs-response.js +1 -1
  27. package/build/es/fs/fs-server.d.ts +2 -2
  28. package/build/es/fs/fs-server.js +2 -2
  29. package/build/es/index.d.ts +2 -1
  30. package/build/es/index.js +2 -2
  31. package/build/es/koa/koa-request.d.ts +5 -10
  32. package/build/es/koa/koa-request.js +4 -39
  33. package/build/es/koa/koa-response.d.ts +3 -3
  34. package/build/es/koa/koa-response.js +8 -6
  35. package/build/es/koa/koa-server.d.ts +6 -6
  36. package/build/es/koa/koa-server.js +6 -6
  37. package/package.json +8 -4
@@ -34,7 +34,7 @@ var AbstractInternalAppServer = class {
34
34
  getInternalRequestKey() {
35
35
  return this.internalRequestKey;
36
36
  }
37
- isMetadataRequest(headers) {
37
+ isSiteGenerationRequest(headers) {
38
38
  const metadataRequestHeader = headers["lwr-metadata-request"];
39
39
  return metadataRequestHeader === this.internalRequestKey;
40
40
  }
@@ -0,0 +1,66 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
3
+ var __export = (target, all) => {
4
+ for (var name in all)
5
+ __defProp(target, name, {get: all[name], enumerable: true});
6
+ };
7
+
8
+ // packages/@lwrjs/server/src/common/abstract-request.ts
9
+ __markAsModule(exports);
10
+ __export(exports, {
11
+ AbstractMiddlewareRequest: () => AbstractMiddlewareRequest
12
+ });
13
+ var AbstractMiddlewareRequest = class {
14
+ constructor(isSiteGenerationRequest) {
15
+ this.isSiteGenerationRequest = isSiteGenerationRequest || false;
16
+ }
17
+ cookie(key) {
18
+ const rawCookies = (this.headers.cookie?.split(";") || []).map((c) => c.trim());
19
+ const rawCookie = rawCookies.find((c) => c.startsWith(`${key}=`));
20
+ return rawCookie ? decodeURIComponent(rawCookie.replace(`${key}=`, "")) : void 0;
21
+ }
22
+ isSiteGeneration() {
23
+ return this.isSiteGenerationRequest;
24
+ }
25
+ hasJsonParam() {
26
+ return this.query.json !== void 0;
27
+ }
28
+ isJsonRequest() {
29
+ const acceptHeader = this.headers?.accept || "";
30
+ const hasJsonHeader = acceptHeader.indexOf("application/json") >= 0;
31
+ return hasJsonHeader || this.query.json !== void 0;
32
+ }
33
+ validateJsonRequest() {
34
+ const hasJsonQueryParam = this.hasJsonParam();
35
+ const hasAcceptHeader = this.headers?.accept !== void 0;
36
+ const hasJsonAcceptHeader = hasAcceptHeader && this.headers?.accept?.includes("application/json");
37
+ return !hasAcceptHeader && !hasJsonQueryParam || hasJsonQueryParam !== hasAcceptHeader || hasJsonQueryParam === hasJsonAcceptHeader;
38
+ }
39
+ validateEnvironmentRequest(config) {
40
+ const targetEnvironment = this.params.environment;
41
+ const defaultEnvironment = config.environment.default;
42
+ const supportedEnvironments = config.environment.supported || [];
43
+ return !targetEnvironment || targetEnvironment === defaultEnvironment || supportedEnvironments?.includes(targetEnvironment);
44
+ }
45
+ getRuntimeContext(defaultRuntimeEnvironment) {
46
+ const {format, apiVersion, compat, locale, environment, bundleSpecifier} = this.params;
47
+ const debug = !!this.query.debug;
48
+ const bundle = !!bundleSpecifier;
49
+ const runtimeEnvironment = {
50
+ ...defaultRuntimeEnvironment,
51
+ format: format || defaultRuntimeEnvironment.format,
52
+ compat: compat || defaultRuntimeEnvironment.compat,
53
+ debug: debug || defaultRuntimeEnvironment.debug,
54
+ apiVersion: apiVersion || defaultRuntimeEnvironment.apiVersion,
55
+ bundle: bundle || defaultRuntimeEnvironment.bundle
56
+ };
57
+ const runtimeParams = {
58
+ locale: locale || this.locale || defaultRuntimeEnvironment.defaultLocale,
59
+ environment
60
+ };
61
+ return {
62
+ runtimeEnvironment,
63
+ runtimeParams
64
+ };
65
+ }
66
+ };
@@ -1,19 +1,36 @@
1
+ var __create = Object.create;
1
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;
2
7
  var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
3
8
  var __export = (target, all) => {
4
9
  for (var name in all)
5
10
  __defProp(target, name, {get: all[name], enumerable: true});
6
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
+ };
7
23
 
8
24
  // packages/@lwrjs/server/src/express/express-request.ts
9
25
  __markAsModule(exports);
10
26
  __export(exports, {
11
27
  default: () => express_request_default
12
28
  });
13
- var ExpressRequest = class {
14
- constructor(expressRequest, isMetadataRequest) {
29
+ var import_abstract_request = __toModule(require("../common/abstract-request.cjs"));
30
+ var ExpressRequest = class extends import_abstract_request.AbstractMiddlewareRequest {
31
+ constructor(expressRequest, isSiteGenerationRequest) {
32
+ super(isSiteGenerationRequest);
15
33
  this.req = expressRequest;
16
- this.isMetadataRequest = isMetadataRequest || false;
17
34
  }
18
35
  get params() {
19
36
  return this.req.params;
@@ -51,42 +68,5 @@ var ExpressRequest = class {
51
68
  get(field) {
52
69
  return this.req.get(field);
53
70
  }
54
- cookie(key) {
55
- const rawCookies = (this.req.headers.cookie?.split(";") || []).map((c) => c.trim());
56
- const rawCookie = rawCookies.find((c) => c.startsWith(`${key}=`));
57
- return rawCookie ? decodeURIComponent(rawCookie.replace(`${key}=`, "")) : void 0;
58
- }
59
- hasJsonParam() {
60
- return this.req.query.json !== void 0;
61
- }
62
- isJsonRequest() {
63
- const acceptHeader = this.req.get("Accept") || "";
64
- const hasJsonHeader = acceptHeader.indexOf("application/json") >= 0;
65
- return hasJsonHeader || this.hasJsonParam();
66
- }
67
- isSiteGeneration() {
68
- return this.isMetadataRequest;
69
- }
70
- validateJsonRequest() {
71
- return !this.hasJsonParam() || this.req.accepts("json") === "json";
72
- }
73
- getRuntimeContext(defaultRuntimeEnvironment) {
74
- const {format, apiVersion, compat, locale, environment, bundleSpecifier} = this.req.params;
75
- const {debug} = this.req.query;
76
- return {
77
- runtimeEnvironment: {
78
- ...defaultRuntimeEnvironment,
79
- format: format ? format : defaultRuntimeEnvironment.format,
80
- compat: compat !== void 0 ? compat : defaultRuntimeEnvironment.compat,
81
- debug: debug !== void 0 ? true : defaultRuntimeEnvironment.debug,
82
- apiVersion: apiVersion ? apiVersion : defaultRuntimeEnvironment.apiVersion,
83
- bundle: bundleSpecifier !== void 0 ? true : false
84
- },
85
- runtimeParams: {
86
- locale: locale ? locale : this.req.locale ? this.req.locale : defaultRuntimeEnvironment.defaultLocale,
87
- environment
88
- }
89
- };
90
- }
91
71
  };
92
72
  var express_request_default = ExpressRequest;
@@ -11,9 +11,9 @@ __export(exports, {
11
11
  default: () => express_response_default
12
12
  });
13
13
  var ExpressResponse = class {
14
- constructor(expressResponse, isMetadataRequest) {
14
+ constructor(expressResponse, isSiteGenerationRequest) {
15
15
  this.res = expressResponse;
16
- this.isMetadataRequest = isMetadataRequest || false;
16
+ this.isSiteGenerationRequest = isSiteGenerationRequest || false;
17
17
  }
18
18
  set(header) {
19
19
  this.res.set(header);
@@ -21,8 +21,8 @@ var ExpressResponse = class {
21
21
  setHeader(name, value) {
22
22
  this.res.setHeader(name, value);
23
23
  }
24
- setMetadata(meta) {
25
- if (this.isMetadataRequest) {
24
+ setSiteGenerationMetadata(meta) {
25
+ if (this.isSiteGenerationRequest) {
26
26
  this.metadata = meta;
27
27
  }
28
28
  }
@@ -31,7 +31,7 @@ var ExpressResponse = class {
31
31
  return this;
32
32
  }
33
33
  send(object) {
34
- if (this.isMetadataRequest) {
34
+ if (this.isSiteGenerationRequest) {
35
35
  const context = {
36
36
  fs: {
37
37
  metadata: this.metadata
@@ -46,12 +46,13 @@ var ExpressResponse = class {
46
46
  this.res.sendStatus(httpCode);
47
47
  }
48
48
  stream(stream) {
49
- if (this.isMetadataRequest) {
49
+ if (this.isSiteGenerationRequest) {
50
50
  const context = {
51
51
  fs: {
52
52
  metadata: this.metadata
53
53
  }
54
54
  };
55
+ stream.destroy();
55
56
  this.res.send(context);
56
57
  } else {
57
58
  stream.pipe(this.res);
@@ -35,7 +35,7 @@ var import_express_response = __toModule(require("./express-response.cjs"));
35
35
  var ExpressInternalServer = class extends import_abstract_internal_app_server.default {
36
36
  constructor(options) {
37
37
  super();
38
- this.expressApp = (0, import_express.default)();
38
+ this.expressApp = options?.app || (0, import_express.default)();
39
39
  if (options.basePath) {
40
40
  this.basePath = options.basePath;
41
41
  }
@@ -55,7 +55,7 @@ var ExpressInternalServer = class extends import_abstract_internal_app_server.de
55
55
  }
56
56
  use(middleware) {
57
57
  this.expressApp.use(async (req, res, next) => {
58
- const metadataRequest = this.isMetadataRequest(req.headers);
58
+ const metadataRequest = this.isSiteGenerationRequest(req.headers);
59
59
  const lwrReq = new import_express_request.default(req, metadataRequest);
60
60
  const lwrRes = new import_express_response.default(res, metadataRequest);
61
61
  await middleware(lwrReq, lwrRes, next);
@@ -63,7 +63,7 @@ var ExpressInternalServer = class extends import_abstract_internal_app_server.de
63
63
  }
64
64
  all(path, middleware) {
65
65
  this.expressApp.use(path, async (req, res, next) => {
66
- const metadataRequest = this.isMetadataRequest(req.headers);
66
+ const metadataRequest = this.isSiteGenerationRequest(req.headers);
67
67
  const lwrReq = new import_express_request.default(req, metadataRequest);
68
68
  const lwrRes = new import_express_response.default(res, metadataRequest);
69
69
  await middleware(lwrReq, lwrRes, next);
@@ -71,7 +71,7 @@ var ExpressInternalServer = class extends import_abstract_internal_app_server.de
71
71
  }
72
72
  get(path, middleware) {
73
73
  this.expressApp.get(path, async (req, res, next) => {
74
- const metadataRequest = this.isMetadataRequest(req.headers);
74
+ const metadataRequest = this.isSiteGenerationRequest(req.headers);
75
75
  const lwrReq = new import_express_request.default(req, metadataRequest);
76
76
  const lwrRes = new import_express_response.default(res, metadataRequest);
77
77
  await middleware(lwrReq, lwrRes, next);
@@ -79,7 +79,7 @@ var ExpressInternalServer = class extends import_abstract_internal_app_server.de
79
79
  }
80
80
  post(path, middleware) {
81
81
  this.expressApp.post(path, async (req, res, next) => {
82
- const metadataRequest = this.isMetadataRequest(req.headers);
82
+ const metadataRequest = this.isSiteGenerationRequest(req.headers);
83
83
  const lwrReq = new import_express_request.default(req, metadataRequest);
84
84
  const lwrRes = new import_express_response.default(res, metadataRequest);
85
85
  await middleware(lwrReq, lwrRes, next);
@@ -34,15 +34,9 @@ var FsRequest = class extends import_koa_request.default {
34
34
  acceptsLanguages() {
35
35
  return [this.ctx.locale];
36
36
  }
37
- hasJsonParam() {
38
- return this.ctx.isJsonRequest;
39
- }
40
37
  isJsonRequest() {
41
38
  return this.ctx.isJsonRequest;
42
39
  }
43
- validateJsonRequest() {
44
- return true;
45
- }
46
40
  isSiteGeneration() {
47
41
  return true;
48
42
  }
@@ -30,7 +30,7 @@ var FsResponse = class {
30
30
  send(body) {
31
31
  this.context.fs.body = body;
32
32
  }
33
- setMetadata(metadata) {
33
+ setSiteGenerationMetadata(metadata) {
34
34
  this.context.fs.metadata = metadata;
35
35
  }
36
36
  sendStatus(httpCode) {
@@ -56,11 +56,11 @@ var LwrFsKoa = class extends import_koa.default {
56
56
  }
57
57
  };
58
58
  var FsInternalServer = class extends import_abstract_internal_app_server.default {
59
- constructor() {
59
+ constructor(options) {
60
60
  super();
61
61
  this.middlewares = [];
62
62
  this.lwrFsKoaApp = new LwrFsKoa();
63
- this.koaRouter = new import_router.default();
63
+ this.koaRouter = options.basePath ? new import_router.default({prefix: options.basePath}) : new import_router.default();
64
64
  }
65
65
  createHttpServer() {
66
66
  return import_http.default.createServer();
@@ -41,11 +41,11 @@ function createInternalServer(serverType = "express", options = {}) {
41
41
  return expressAppServer;
42
42
  }
43
43
  if (serverType === "koa") {
44
- const koaAppServer = new import_koa_server.default();
44
+ const koaAppServer = new import_koa_server.default(options);
45
45
  return koaAppServer;
46
46
  }
47
47
  if (serverType === "fs") {
48
- const fsAppServer = new import_fs_server.FsInternalServer();
48
+ const fsAppServer = new import_fs_server.FsInternalServer(options);
49
49
  return fsAppServer;
50
50
  }
51
51
  throw (0, import_diagnostics.createSingleDiagnosticError)({description: import_diagnostics.descriptions.CONFIG_PARSER.INVALID_PROPERTY("serverType", serverType)}, import_diagnostics.LwrConfigValidationError);
@@ -1,19 +1,36 @@
1
+ var __create = Object.create;
1
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;
2
7
  var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
3
8
  var __export = (target, all) => {
4
9
  for (var name in all)
5
10
  __defProp(target, name, {get: all[name], enumerable: true});
6
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
+ };
7
23
 
8
24
  // packages/@lwrjs/server/src/koa/koa-request.ts
9
25
  __markAsModule(exports);
10
26
  __export(exports, {
11
27
  default: () => koa_request_default
12
28
  });
13
- var KoaRequest = class {
14
- constructor(ctx, isMetadataRequest) {
29
+ var import_abstract_request = __toModule(require("../common/abstract-request.cjs"));
30
+ var KoaRequest = class extends import_abstract_request.AbstractMiddlewareRequest {
31
+ constructor(ctx, isSiteGenerationRequest) {
32
+ super(isSiteGenerationRequest);
15
33
  this.ctx = ctx;
16
- this.isMetadataRequest = isMetadataRequest || false;
17
34
  }
18
35
  get params() {
19
36
  return this.ctx.params || {};
@@ -45,9 +62,6 @@ var KoaRequest = class {
45
62
  set locale(l) {
46
63
  this.ctx.locale = l;
47
64
  }
48
- isSiteGeneration() {
49
- return this.isMetadataRequest;
50
- }
51
65
  acceptsLanguages() {
52
66
  return this.ctx.request.acceptsLanguages();
53
67
  }
@@ -57,34 +71,5 @@ var KoaRequest = class {
57
71
  cookie(key) {
58
72
  return this.ctx.cookies.get(key);
59
73
  }
60
- hasJsonParam() {
61
- return this.ctx.query.json !== void 0;
62
- }
63
- isJsonRequest() {
64
- const acceptHeader = this.ctx.request.get("Accept") || "";
65
- const hasJsonHeader = acceptHeader.indexOf("application/json") >= 0;
66
- return hasJsonHeader || this.hasJsonParam();
67
- }
68
- validateJsonRequest() {
69
- return !this.hasJsonParam() || this.ctx.request.accepts("json") === "json";
70
- }
71
- getRuntimeContext(defaultRuntimeEnvironment) {
72
- const {format, apiVersion, compat, locale, environment, bundleSpecifier} = this.params;
73
- const {debug} = this.ctx.request.query;
74
- return {
75
- runtimeEnvironment: {
76
- ...defaultRuntimeEnvironment,
77
- format: format ? format : defaultRuntimeEnvironment.format,
78
- compat: compat !== void 0 ? compat : defaultRuntimeEnvironment.compat,
79
- debug: debug !== void 0 ? true : defaultRuntimeEnvironment.debug,
80
- apiVersion: apiVersion ? apiVersion : defaultRuntimeEnvironment.apiVersion,
81
- bundle: bundleSpecifier !== void 0 ? true : false
82
- },
83
- runtimeParams: {
84
- locale: locale ? locale : this.ctx.locale ? this.ctx.locale : defaultRuntimeEnvironment.defaultLocale,
85
- environment
86
- }
87
- };
88
- }
89
74
  };
90
75
  var koa_request_default = KoaRequest;
@@ -28,9 +28,9 @@ __export(exports, {
28
28
  });
29
29
  var import_stream = __toModule(require("stream"));
30
30
  var KoaResponse = class {
31
- constructor(ctx, isMetadataRequest) {
31
+ constructor(ctx, isSiteGenerationRequest) {
32
32
  this.ctx = ctx;
33
- this.isMetadataRequest = isMetadataRequest || false;
33
+ this.isSiteGenerationRequest = isSiteGenerationRequest || false;
34
34
  }
35
35
  set(header) {
36
36
  this.ctx.response.set(header);
@@ -42,13 +42,13 @@ var KoaResponse = class {
42
42
  this.ctx.response.status = status;
43
43
  return this;
44
44
  }
45
- setMetadata(meta) {
46
- if (this.isMetadataRequest) {
45
+ setSiteGenerationMetadata(meta) {
46
+ if (this.isSiteGenerationRequest) {
47
47
  this.metadata = meta;
48
48
  }
49
49
  }
50
50
  send(object) {
51
- if (this.isMetadataRequest) {
51
+ if (this.isSiteGenerationRequest) {
52
52
  const context = {
53
53
  fs: {
54
54
  metadata: this.metadata
@@ -63,12 +63,13 @@ var KoaResponse = class {
63
63
  this.ctx.response.status = httpCode;
64
64
  }
65
65
  stream(stream) {
66
- if (this.isMetadataRequest) {
66
+ if (this.isSiteGenerationRequest) {
67
67
  const context = {
68
68
  fs: {
69
69
  metadata: this.metadata
70
70
  }
71
71
  };
72
+ stream.destroy();
72
73
  this.ctx.response.body = context;
73
74
  } else {
74
75
  this.ctx.response.body = stream.on("error", this.ctx.onerror).pipe(new import_stream.PassThrough());
@@ -34,10 +34,10 @@ var import_abstract_internal_app_server = __toModule(require("../common/abstract
34
34
  var import_koa_request = __toModule(require("./koa-request.cjs"));
35
35
  var import_koa_response = __toModule(require("./koa-response.cjs"));
36
36
  var KoaInternalServer = class extends import_abstract_internal_app_server.default {
37
- constructor() {
37
+ constructor(options) {
38
38
  super();
39
39
  this.koaApp = new import_koa.default();
40
- this.koaRouter = new import_router.default();
40
+ this.koaRouter = options.basePath ? new import_router.default({prefix: options.basePath}) : new import_router.default();
41
41
  }
42
42
  getImpl() {
43
43
  return this.koaApp;
@@ -48,7 +48,7 @@ var KoaInternalServer = class extends import_abstract_internal_app_server.defaul
48
48
  }
49
49
  use(middleware) {
50
50
  this.koaApp.use(async (ctx, next) => {
51
- const metadataRequest = this.isMetadataRequest(ctx.request.headers);
51
+ const metadataRequest = this.isSiteGenerationRequest(ctx.request.headers);
52
52
  const lwrReq = new import_koa_request.default(ctx, metadataRequest);
53
53
  const lwrRes = new import_koa_response.default(ctx, metadataRequest);
54
54
  await middleware(lwrReq, lwrRes, next);
@@ -56,7 +56,7 @@ var KoaInternalServer = class extends import_abstract_internal_app_server.defaul
56
56
  }
57
57
  all(path, middleware) {
58
58
  this.koaRouter.all(path, async (ctx, next) => {
59
- const metadataRequest = this.isMetadataRequest(ctx.request.headers);
59
+ const metadataRequest = this.isSiteGenerationRequest(ctx.request.headers);
60
60
  const lwrReq = new import_koa_request.default(ctx, metadataRequest);
61
61
  const lwrRes = new import_koa_response.default(ctx, metadataRequest);
62
62
  await middleware(lwrReq, lwrRes, next);
@@ -64,7 +64,7 @@ var KoaInternalServer = class extends import_abstract_internal_app_server.defaul
64
64
  }
65
65
  get(path, middleware) {
66
66
  this.koaRouter.get(path, async (ctx, next) => {
67
- const metadataRequest = this.isMetadataRequest(ctx.request.headers);
67
+ const metadataRequest = this.isSiteGenerationRequest(ctx.request.headers);
68
68
  const lwrReq = new import_koa_request.default(ctx, metadataRequest);
69
69
  const lwrRes = new import_koa_response.default(ctx, metadataRequest);
70
70
  await middleware(lwrReq, lwrRes, next);
@@ -72,7 +72,7 @@ var KoaInternalServer = class extends import_abstract_internal_app_server.defaul
72
72
  }
73
73
  post(path, middleware) {
74
74
  this.koaRouter.post(path, async (ctx, next) => {
75
- const metadataRequest = this.isMetadataRequest(ctx.request.headers);
75
+ const metadataRequest = this.isSiteGenerationRequest(ctx.request.headers);
76
76
  const lwrReq = new import_koa_request.default(ctx, metadataRequest);
77
77
  const lwrRes = new import_koa_response.default(ctx, metadataRequest);
78
78
  await middleware(lwrReq, lwrRes, next);
@@ -5,6 +5,6 @@ export default abstract class AbstractInternalAppServer {
5
5
  internalRequestKey: string;
6
6
  constructor();
7
7
  getInternalRequestKey(): string;
8
- isMetadataRequest(headers: any): boolean;
8
+ isSiteGenerationRequest(headers: any): boolean;
9
9
  }
10
10
  //# sourceMappingURL=abstract-internal-app-server.d.ts.map
@@ -10,7 +10,7 @@ export default class AbstractInternalAppServer {
10
10
  return this.internalRequestKey;
11
11
  }
12
12
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
13
- isMetadataRequest(headers) {
13
+ isSiteGenerationRequest(headers) {
14
14
  const metadataRequestHeader = headers['lwr-metadata-request'];
15
15
  return metadataRequestHeader === this.internalRequestKey;
16
16
  }
@@ -0,0 +1,24 @@
1
+ import { RuntimeContext, RuntimeEnvironment, Headers, MiddlewareRequest, NormalizedLwrGlobalConfig } from '@lwrjs/types';
2
+ export declare abstract class AbstractMiddlewareRequest implements MiddlewareRequest {
3
+ isSiteGenerationRequest: boolean;
4
+ constructor(isSiteGenerationRequest?: boolean);
5
+ abstract originalUrl: string;
6
+ abstract path: string;
7
+ abstract body: any;
8
+ abstract method: string;
9
+ abstract protocol: string;
10
+ abstract params: any;
11
+ abstract query: any;
12
+ abstract locale: string;
13
+ abstract headers: Headers;
14
+ abstract acceptsLanguages(): string[];
15
+ abstract get(field: string): string | undefined;
16
+ cookie(key: string): string | undefined;
17
+ isSiteGeneration(): boolean;
18
+ hasJsonParam(): boolean;
19
+ isJsonRequest(): boolean;
20
+ validateJsonRequest(): boolean;
21
+ validateEnvironmentRequest(config: NormalizedLwrGlobalConfig): boolean;
22
+ getRuntimeContext(defaultRuntimeEnvironment: RuntimeEnvironment): RuntimeContext;
23
+ }
24
+ //# sourceMappingURL=abstract-request.d.ts.map
@@ -0,0 +1,61 @@
1
+ export class AbstractMiddlewareRequest {
2
+ constructor(isSiteGenerationRequest) {
3
+ this.isSiteGenerationRequest = isSiteGenerationRequest || false;
4
+ }
5
+ cookie(key) {
6
+ // Does not require the cookie-parser middleware
7
+ const rawCookies = (this.headers.cookie?.split(';') || []).map((c) => c.trim());
8
+ const rawCookie = rawCookies.find((c) => c.startsWith(`${key}=`));
9
+ return rawCookie ? decodeURIComponent(rawCookie.replace(`${key}=`, '')) : undefined;
10
+ }
11
+ isSiteGeneration() {
12
+ return this.isSiteGenerationRequest;
13
+ }
14
+ hasJsonParam() {
15
+ return this.query.json !== undefined;
16
+ }
17
+ isJsonRequest() {
18
+ const acceptHeader = this.headers?.accept || '';
19
+ const hasJsonHeader = acceptHeader.indexOf('application/json') >= 0;
20
+ return hasJsonHeader || this.query.json !== undefined;
21
+ }
22
+ validateJsonRequest() {
23
+ const hasJsonQueryParam = this.hasJsonParam();
24
+ const hasAcceptHeader = this.headers?.accept !== undefined;
25
+ const hasJsonAcceptHeader = hasAcceptHeader && this.headers?.accept?.includes('application/json');
26
+ return ((!hasAcceptHeader && !hasJsonQueryParam) ||
27
+ hasJsonQueryParam !== hasAcceptHeader ||
28
+ hasJsonQueryParam === hasJsonAcceptHeader);
29
+ }
30
+ validateEnvironmentRequest(config) {
31
+ const targetEnvironment = this.params.environment;
32
+ const defaultEnvironment = config.environment.default;
33
+ const supportedEnvironments = config.environment.supported || [];
34
+ return (!targetEnvironment ||
35
+ targetEnvironment === defaultEnvironment ||
36
+ supportedEnvironments?.includes(targetEnvironment));
37
+ }
38
+ getRuntimeContext(defaultRuntimeEnvironment) {
39
+ const { format, apiVersion, compat, locale, environment, bundleSpecifier } = this.params;
40
+ const debug = !!this.query.debug;
41
+ const bundle = !!bundleSpecifier;
42
+ const runtimeEnvironment = {
43
+ ...defaultRuntimeEnvironment,
44
+ // override default runtime environment with request parameters
45
+ format: format || defaultRuntimeEnvironment.format,
46
+ compat: compat || defaultRuntimeEnvironment.compat,
47
+ debug: debug || defaultRuntimeEnvironment.debug,
48
+ apiVersion: apiVersion || defaultRuntimeEnvironment.apiVersion,
49
+ bundle: bundle || defaultRuntimeEnvironment.bundle,
50
+ };
51
+ const runtimeParams = {
52
+ locale: locale || this.locale || defaultRuntimeEnvironment.defaultLocale,
53
+ environment,
54
+ };
55
+ return {
56
+ runtimeEnvironment,
57
+ runtimeParams,
58
+ };
59
+ }
60
+ }
61
+ //# sourceMappingURL=abstract-request.js.map
@@ -1,9 +1,9 @@
1
- import { Request } from 'express';
2
- import { RuntimeContext, RuntimeEnvironment, MiddlewareRequest, Headers } from '@lwrjs/types';
3
- export default class ExpressRequest implements MiddlewareRequest {
1
+ import type { Request } from 'express';
2
+ import type { Headers } from '@lwrjs/types';
3
+ import { AbstractMiddlewareRequest } from '../common/abstract-request.js';
4
+ export default class ExpressRequest extends AbstractMiddlewareRequest {
4
5
  private req;
5
- isMetadataRequest: boolean;
6
- constructor(expressRequest: Request, isMetadataRequest?: boolean);
6
+ constructor(expressRequest: Request, isSiteGenerationRequest?: boolean);
7
7
  get params(): any;
8
8
  get originalUrl(): string;
9
9
  get path(): string;
@@ -16,11 +16,5 @@ export default class ExpressRequest implements MiddlewareRequest {
16
16
  set locale(l: string);
17
17
  acceptsLanguages(): string[];
18
18
  get(field: string): string | undefined;
19
- cookie(key: string): string | undefined;
20
- hasJsonParam(): boolean;
21
- isJsonRequest(): boolean;
22
- isSiteGeneration(): boolean;
23
- validateJsonRequest(): boolean;
24
- getRuntimeContext(defaultRuntimeEnvironment: RuntimeEnvironment): RuntimeContext;
25
19
  }
26
20
  //# sourceMappingURL=express-request.d.ts.map
@@ -1,7 +1,8 @@
1
- export default class ExpressRequest {
2
- constructor(expressRequest, isMetadataRequest) {
1
+ import { AbstractMiddlewareRequest } from '../common/abstract-request.js';
2
+ export default class ExpressRequest extends AbstractMiddlewareRequest {
3
+ constructor(expressRequest, isSiteGenerationRequest) {
4
+ super(isSiteGenerationRequest);
3
5
  this.req = expressRequest;
4
- this.isMetadataRequest = isMetadataRequest || false;
5
6
  }
6
7
  get params() {
7
8
  return this.req.params;
@@ -40,47 +41,5 @@ export default class ExpressRequest {
40
41
  get(field) {
41
42
  return this.req.get(field);
42
43
  }
43
- cookie(key) {
44
- // Does not require the cookie-parser middleware
45
- const rawCookies = (this.req.headers.cookie?.split(';') || []).map((c) => c.trim());
46
- const rawCookie = rawCookies.find((c) => c.startsWith(`${key}=`));
47
- return rawCookie ? decodeURIComponent(rawCookie.replace(`${key}=`, '')) : undefined;
48
- }
49
- hasJsonParam() {
50
- return this.req.query.json !== undefined;
51
- }
52
- isJsonRequest() {
53
- const acceptHeader = this.req.get('Accept') || '';
54
- const hasJsonHeader = acceptHeader.indexOf('application/json') >= 0;
55
- return hasJsonHeader || this.hasJsonParam();
56
- }
57
- isSiteGeneration() {
58
- return this.isMetadataRequest;
59
- }
60
- validateJsonRequest() {
61
- return !this.hasJsonParam() || this.req.accepts('json') === 'json';
62
- }
63
- getRuntimeContext(defaultRuntimeEnvironment) {
64
- const { format, apiVersion, compat, locale, environment, bundleSpecifier } = this.req.params;
65
- const { debug } = this.req.query;
66
- return {
67
- runtimeEnvironment: {
68
- ...defaultRuntimeEnvironment,
69
- format: format ? format : defaultRuntimeEnvironment.format,
70
- compat: compat !== undefined ? compat : defaultRuntimeEnvironment.compat,
71
- debug: debug !== undefined ? true : defaultRuntimeEnvironment.debug,
72
- apiVersion: apiVersion ? apiVersion : defaultRuntimeEnvironment.apiVersion,
73
- bundle: bundleSpecifier !== undefined ? true : false, // the absence of a bundle strategy means bundling is off
74
- },
75
- runtimeParams: {
76
- locale: locale
77
- ? locale
78
- : this.req.locale
79
- ? this.req.locale
80
- : defaultRuntimeEnvironment.defaultLocale,
81
- environment,
82
- },
83
- };
84
- }
85
44
  }
86
45
  //# sourceMappingURL=express-request.js.map
@@ -5,11 +5,11 @@ import { MiddlewareResponse } from '@lwrjs/types';
5
5
  export default class ExpressResponse implements MiddlewareResponse {
6
6
  private res;
7
7
  private metadata;
8
- private isMetadataRequest;
9
- constructor(expressResponse: Response, isMetadataRequest?: boolean);
8
+ private isSiteGenerationRequest;
9
+ constructor(expressResponse: Response, isSiteGenerationRequest?: boolean);
10
10
  set(header: any): void;
11
11
  setHeader(name: string, value: string | string[]): void;
12
- setMetadata(meta: any): void;
12
+ setSiteGenerationMetadata(meta: any): void;
13
13
  status(status: number): MiddlewareResponse;
14
14
  send(object: any): void;
15
15
  sendStatus(httpCode: number): void;
@@ -1,7 +1,7 @@
1
1
  export default class ExpressResponse {
2
- constructor(expressResponse, isMetadataRequest) {
2
+ constructor(expressResponse, isSiteGenerationRequest) {
3
3
  this.res = expressResponse;
4
- this.isMetadataRequest = isMetadataRequest || false;
4
+ this.isSiteGenerationRequest = isSiteGenerationRequest || false;
5
5
  }
6
6
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
7
7
  set(header) {
@@ -11,8 +11,8 @@ export default class ExpressResponse {
11
11
  this.res.setHeader(name, value);
12
12
  }
13
13
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
14
- setMetadata(meta) {
15
- if (this.isMetadataRequest) {
14
+ setSiteGenerationMetadata(meta) {
15
+ if (this.isSiteGenerationRequest) {
16
16
  this.metadata = meta;
17
17
  }
18
18
  }
@@ -22,7 +22,7 @@ export default class ExpressResponse {
22
22
  }
23
23
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
24
24
  send(object) {
25
- if (this.isMetadataRequest) {
25
+ if (this.isSiteGenerationRequest) {
26
26
  const context = {
27
27
  fs: {
28
28
  metadata: this.metadata,
@@ -38,12 +38,14 @@ export default class ExpressResponse {
38
38
  this.res.sendStatus(httpCode);
39
39
  }
40
40
  stream(stream) {
41
- if (this.isMetadataRequest) {
41
+ if (this.isSiteGenerationRequest) {
42
42
  const context = {
43
43
  fs: {
44
44
  metadata: this.metadata,
45
45
  },
46
46
  };
47
+ // destroying the stream to prevent lingering processes
48
+ stream.destroy();
47
49
  this.res.send(context);
48
50
  }
49
51
  else {
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  import { Application as ExpressApp } from 'express';
3
3
  import http from 'http';
4
- import { InternalAppServer, InternalAppServerOptions } from '@lwrjs/types';
4
+ import { InternalAppServer, InternalAppServerOptions, MiddlewareFunction } from '@lwrjs/types';
5
5
  import AbstractInternalAppServer from '../common/abstract-internal-app-server.js';
6
6
  /**
7
7
  * Express Server Implementation (https://expressjs.com/)
@@ -13,10 +13,10 @@ export default class ExpressInternalServer extends AbstractInternalAppServer imp
13
13
  constructor(options: InternalAppServerOptions);
14
14
  getImpl(): ExpressApp;
15
15
  createHttpServer(): http.Server;
16
- use(middleware: Function): void;
17
- all(path: string | Array<string>, middleware: Function): void;
18
- get(path: string | Array<string>, middleware: Function): void;
19
- post(path: string | Array<string>, middleware: Function): void;
16
+ use(middleware: MiddlewareFunction): void;
17
+ all(path: string | Array<string>, middleware: MiddlewareFunction): void;
18
+ get(path: string | Array<string>, middleware: MiddlewareFunction): void;
19
+ post(path: string | Array<string>, middleware: MiddlewareFunction): void;
20
20
  useCompression(): void;
21
21
  getRegexWildcard(): string;
22
22
  initRoutes(): void;
@@ -10,7 +10,7 @@ import ExpressResponse from './express-response.js';
10
10
  export default class ExpressInternalServer extends AbstractInternalAppServer {
11
11
  constructor(options) {
12
12
  super();
13
- this.expressApp = express();
13
+ this.expressApp = options?.app || express();
14
14
  if (options.basePath) {
15
15
  this.basePath = options.basePath;
16
16
  }
@@ -31,7 +31,7 @@ export default class ExpressInternalServer extends AbstractInternalAppServer {
31
31
  }
32
32
  use(middleware) {
33
33
  this.expressApp.use(async (req, res, next) => {
34
- const metadataRequest = this.isMetadataRequest(req.headers);
34
+ const metadataRequest = this.isSiteGenerationRequest(req.headers);
35
35
  const lwrReq = new ExpressRequest(req, metadataRequest);
36
36
  const lwrRes = new ExpressResponse(res, metadataRequest);
37
37
  await middleware(lwrReq, lwrRes, next);
@@ -39,7 +39,7 @@ export default class ExpressInternalServer extends AbstractInternalAppServer {
39
39
  }
40
40
  all(path, middleware) {
41
41
  this.expressApp.use(path, async (req, res, next) => {
42
- const metadataRequest = this.isMetadataRequest(req.headers);
42
+ const metadataRequest = this.isSiteGenerationRequest(req.headers);
43
43
  const lwrReq = new ExpressRequest(req, metadataRequest);
44
44
  const lwrRes = new ExpressResponse(res, metadataRequest);
45
45
  await middleware(lwrReq, lwrRes, next);
@@ -47,7 +47,7 @@ export default class ExpressInternalServer extends AbstractInternalAppServer {
47
47
  }
48
48
  get(path, middleware) {
49
49
  this.expressApp.get(path, async (req, res, next) => {
50
- const metadataRequest = this.isMetadataRequest(req.headers);
50
+ const metadataRequest = this.isSiteGenerationRequest(req.headers);
51
51
  const lwrReq = new ExpressRequest(req, metadataRequest);
52
52
  const lwrRes = new ExpressResponse(res, metadataRequest);
53
53
  await middleware(lwrReq, lwrRes, next);
@@ -55,7 +55,7 @@ export default class ExpressInternalServer extends AbstractInternalAppServer {
55
55
  }
56
56
  post(path, middleware) {
57
57
  this.expressApp.post(path, async (req, res, next) => {
58
- const metadataRequest = this.isMetadataRequest(req.headers);
58
+ const metadataRequest = this.isSiteGenerationRequest(req.headers);
59
59
  const lwrReq = new ExpressRequest(req, metadataRequest);
60
60
  const lwrRes = new ExpressResponse(res, metadataRequest);
61
61
  await middleware(lwrReq, lwrRes, next);
@@ -2,9 +2,7 @@ import KoaRequest from '../koa/koa-request.js';
2
2
  export default class FsRequest extends KoaRequest {
3
3
  get query(): any;
4
4
  acceptsLanguages(): string[];
5
- hasJsonParam(): boolean;
6
5
  isJsonRequest(): boolean;
7
- validateJsonRequest(): boolean;
8
6
  isSiteGeneration(): boolean;
9
7
  }
10
8
  //# sourceMappingURL=fs-request.d.ts.map
@@ -6,15 +6,9 @@ export default class FsRequest extends KoaRequest {
6
6
  acceptsLanguages() {
7
7
  return [this.ctx.locale];
8
8
  }
9
- hasJsonParam() {
10
- return this.ctx.isJsonRequest;
11
- }
12
9
  isJsonRequest() {
13
10
  return this.ctx.isJsonRequest;
14
11
  }
15
- validateJsonRequest() {
16
- return true;
17
- }
18
12
  isSiteGeneration() {
19
13
  return true;
20
14
  }
@@ -10,7 +10,7 @@ export default class FsResponse implements MiddlewareResponse {
10
10
  setHeader(name: string, value: string | string[]): void;
11
11
  status(status: number): MiddlewareResponse;
12
12
  send(body: any): void;
13
- setMetadata(metadata: any): void;
13
+ setSiteGenerationMetadata(metadata: any): void;
14
14
  sendStatus(httpCode: number): void;
15
15
  stream(stream: Readable): void;
16
16
  type(type: string): MiddlewareResponse;
@@ -20,7 +20,7 @@ export default class FsResponse {
20
20
  this.context.fs.body = body;
21
21
  }
22
22
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
23
- setMetadata(metadata) {
23
+ setSiteGenerationMetadata(metadata) {
24
24
  this.context.fs.metadata = metadata;
25
25
  }
26
26
  sendStatus(httpCode) {
@@ -2,7 +2,7 @@
2
2
  /// <reference types="node" />
3
3
  import Koa from 'koa';
4
4
  import KoaRouter, { Middleware as KoaMiddleware } from '@koa/router';
5
- import { LwrDispatcher, FsContext, InternalAppServer, MiddlewareFunction } from '@lwrjs/types';
5
+ import { LwrDispatcher, FsContext, InternalAppServer, InternalAppServerOptions, MiddlewareFunction } from '@lwrjs/types';
6
6
  import { Server as HttpServer } from 'http';
7
7
  import AbstractInternalAppServer from '../common/abstract-internal-app-server.js';
8
8
  export declare class LwrFsKoa extends Koa implements LwrDispatcher {
@@ -19,7 +19,7 @@ export declare class FsInternalServer extends AbstractInternalAppServer implemen
19
19
  private lwrFsKoaApp;
20
20
  protected koaRouter: KoaRouter;
21
21
  private middlewares;
22
- constructor();
22
+ constructor(options: InternalAppServerOptions);
23
23
  createHttpServer(): HttpServer;
24
24
  use(middleware: MiddlewareFunction): void;
25
25
  all(path: string | string[], middleware: MiddlewareFunction): void;
@@ -30,11 +30,11 @@ export class LwrFsKoa extends Koa {
30
30
  * FS Server (FS == FileSystem) implementation used for static generation. Should not be configured directly by consumers.
31
31
  */
32
32
  export class FsInternalServer extends AbstractInternalAppServer {
33
- constructor() {
33
+ constructor(options) {
34
34
  super();
35
35
  this.middlewares = [];
36
36
  this.lwrFsKoaApp = new LwrFsKoa();
37
- this.koaRouter = new KoaRouter();
37
+ this.koaRouter = options.basePath ? new KoaRouter({ prefix: options.basePath }) : new KoaRouter();
38
38
  }
39
39
  // TODO: mock this API as is not used for now
40
40
  createHttpServer() {
@@ -1,7 +1,8 @@
1
1
  import { LwrFsKoa } from './fs/fs-server.js';
2
- import { InternalAppServer, MiddlewareRequest, MiddlewareResponse, ServerTypes } from '@lwrjs/types';
2
+ import { InternalAppServer, MiddlewareRequest, MiddlewareResponse, ServerTypeImpl, ServerTypes } from '@lwrjs/types';
3
3
  import { Request, Response } from 'express';
4
4
  declare type ServerOptions = {
5
+ app?: ServerTypeImpl<ServerTypes>;
5
6
  basePath?: string;
6
7
  };
7
8
  declare function createInternalServer<T extends ServerTypes>(serverType?: string, options?: ServerOptions): InternalAppServer<T>;
package/build/es/index.js CHANGED
@@ -10,11 +10,11 @@ function createInternalServer(serverType = 'express', options = {}) {
10
10
  return expressAppServer;
11
11
  }
12
12
  if (serverType === 'koa') {
13
- const koaAppServer = new KoaInternalServer();
13
+ const koaAppServer = new KoaInternalServer(options);
14
14
  return koaAppServer;
15
15
  }
16
16
  if (serverType === 'fs') {
17
- const fsAppServer = new FsInternalServer();
17
+ const fsAppServer = new FsInternalServer(options);
18
18
  return fsAppServer;
19
19
  }
20
20
  throw createSingleDiagnosticError({ description: descriptions.CONFIG_PARSER.INVALID_PROPERTY('serverType', serverType) }, LwrConfigValidationError);
@@ -1,9 +1,9 @@
1
- import Koa from 'koa';
2
- import { RuntimeContext, RuntimeEnvironment, MiddlewareRequest, Headers } from '@lwrjs/types';
3
- export default class KoaRequest implements MiddlewareRequest {
1
+ import type Koa from 'koa';
2
+ import type { Headers } from '@lwrjs/types';
3
+ import { AbstractMiddlewareRequest } from '../common/abstract-request.js';
4
+ export default class KoaRequest extends AbstractMiddlewareRequest {
4
5
  protected ctx: Koa.Context;
5
- isMetadataRequest: boolean;
6
- constructor(ctx: Koa.Context, isMetadataRequest?: boolean);
6
+ constructor(ctx: Koa.Context, isSiteGenerationRequest?: boolean);
7
7
  get params(): any;
8
8
  get originalUrl(): string;
9
9
  get path(): string;
@@ -14,13 +14,8 @@ export default class KoaRequest implements MiddlewareRequest {
14
14
  get headers(): Headers;
15
15
  get locale(): string;
16
16
  set locale(l: string);
17
- isSiteGeneration(): boolean;
18
17
  acceptsLanguages(): string[];
19
18
  get(field: string): string | undefined;
20
19
  cookie(key: string): string | undefined;
21
- hasJsonParam(): boolean;
22
- isJsonRequest(): boolean;
23
- validateJsonRequest(): boolean;
24
- getRuntimeContext(defaultRuntimeEnvironment: RuntimeEnvironment): RuntimeContext;
25
20
  }
26
21
  //# sourceMappingURL=koa-request.d.ts.map
@@ -1,7 +1,8 @@
1
- export default class KoaRequest {
2
- constructor(ctx, isMetadataRequest) {
1
+ import { AbstractMiddlewareRequest } from '../common/abstract-request.js';
2
+ export default class KoaRequest extends AbstractMiddlewareRequest {
3
+ constructor(ctx, isSiteGenerationRequest) {
4
+ super(isSiteGenerationRequest);
3
5
  this.ctx = ctx;
4
- this.isMetadataRequest = isMetadataRequest || false;
5
6
  }
6
7
  get params() {
7
8
  return this.ctx.params || {};
@@ -33,9 +34,6 @@ export default class KoaRequest {
33
34
  set locale(l) {
34
35
  this.ctx.locale = l;
35
36
  }
36
- isSiteGeneration() {
37
- return this.isMetadataRequest;
38
- }
39
37
  acceptsLanguages() {
40
38
  return this.ctx.request.acceptsLanguages();
41
39
  }
@@ -45,38 +43,5 @@ export default class KoaRequest {
45
43
  cookie(key) {
46
44
  return this.ctx.cookies.get(key);
47
45
  }
48
- hasJsonParam() {
49
- return this.ctx.query.json !== undefined;
50
- }
51
- isJsonRequest() {
52
- const acceptHeader = this.ctx.request.get('Accept') || '';
53
- const hasJsonHeader = acceptHeader.indexOf('application/json') >= 0;
54
- return hasJsonHeader || this.hasJsonParam();
55
- }
56
- validateJsonRequest() {
57
- return !this.hasJsonParam() || this.ctx.request.accepts('json') === 'json';
58
- }
59
- getRuntimeContext(defaultRuntimeEnvironment) {
60
- const { format, apiVersion, compat, locale, environment, bundleSpecifier } = this.params;
61
- const { debug } = this.ctx.request.query;
62
- return {
63
- runtimeEnvironment: {
64
- ...defaultRuntimeEnvironment,
65
- format: format ? format : defaultRuntimeEnvironment.format,
66
- compat: compat !== undefined ? compat : defaultRuntimeEnvironment.compat,
67
- debug: debug !== undefined ? true : defaultRuntimeEnvironment.debug,
68
- apiVersion: apiVersion ? apiVersion : defaultRuntimeEnvironment.apiVersion,
69
- bundle: bundleSpecifier !== undefined ? true : false, // the absence of a bundle strategy means bundling is off
70
- },
71
- runtimeParams: {
72
- locale: locale
73
- ? locale
74
- : this.ctx.locale
75
- ? this.ctx.locale
76
- : defaultRuntimeEnvironment.defaultLocale,
77
- environment,
78
- },
79
- };
80
- }
81
46
  }
82
47
  //# sourceMappingURL=koa-request.js.map
@@ -5,12 +5,12 @@ import { MiddlewareResponse } from '@lwrjs/types';
5
5
  export default class KoaResponse implements MiddlewareResponse {
6
6
  protected ctx: Koa.Context;
7
7
  private metadata;
8
- private isMetadataRequest;
9
- constructor(ctx: Koa.Context, isMetadataRequest?: boolean);
8
+ private isSiteGenerationRequest;
9
+ constructor(ctx: Koa.Context, isSiteGenerationRequest?: boolean);
10
10
  set(header: any): void;
11
11
  setHeader(name: string, value: string | string[]): void;
12
12
  status(status: number): MiddlewareResponse;
13
- setMetadata(meta: any): void;
13
+ setSiteGenerationMetadata(meta: any): void;
14
14
  send(object: any): void;
15
15
  sendStatus(httpCode: number): void;
16
16
  stream(stream: Readable): void;
@@ -1,8 +1,8 @@
1
1
  import { PassThrough } from 'stream';
2
2
  export default class KoaResponse {
3
- constructor(ctx, isMetadataRequest) {
3
+ constructor(ctx, isSiteGenerationRequest) {
4
4
  this.ctx = ctx;
5
- this.isMetadataRequest = isMetadataRequest || false;
5
+ this.isSiteGenerationRequest = isSiteGenerationRequest || false;
6
6
  }
7
7
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
8
8
  set(header) {
@@ -16,14 +16,14 @@ export default class KoaResponse {
16
16
  return this;
17
17
  }
18
18
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
19
- setMetadata(meta) {
20
- if (this.isMetadataRequest) {
19
+ setSiteGenerationMetadata(meta) {
20
+ if (this.isSiteGenerationRequest) {
21
21
  this.metadata = meta;
22
22
  }
23
23
  }
24
24
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
25
25
  send(object) {
26
- if (this.isMetadataRequest) {
26
+ if (this.isSiteGenerationRequest) {
27
27
  const context = {
28
28
  fs: {
29
29
  metadata: this.metadata,
@@ -39,12 +39,14 @@ export default class KoaResponse {
39
39
  this.ctx.response.status = httpCode;
40
40
  }
41
41
  stream(stream) {
42
- if (this.isMetadataRequest) {
42
+ if (this.isSiteGenerationRequest) {
43
43
  const context = {
44
44
  fs: {
45
45
  metadata: this.metadata,
46
46
  },
47
47
  };
48
+ // destroying the stream to prevent lingering processes
49
+ stream.destroy();
48
50
  this.ctx.response.body = context;
49
51
  }
50
52
  else {
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  import Koa from 'koa';
3
3
  import http from 'http';
4
- import { InternalAppServer } from '@lwrjs/types';
4
+ import { InternalAppServer, InternalAppServerOptions, MiddlewareFunction } from '@lwrjs/types';
5
5
  import AbstractInternalAppServer from '../common/abstract-internal-app-server.js';
6
6
  /**
7
7
  * Koa Server Implementation (https://koajs.com/)
@@ -10,13 +10,13 @@ export default class KoaInternalServer extends AbstractInternalAppServer impleme
10
10
  private koaApp;
11
11
  private koaRouter;
12
12
  private httpServer?;
13
- constructor();
13
+ constructor(options: InternalAppServerOptions);
14
14
  getImpl(): Koa;
15
15
  createHttpServer(): http.Server;
16
- use(middleware: Function): void;
17
- all(path: string | string[], middleware: Function): void;
18
- get(path: string | string[], middleware: Function): void;
19
- post(path: string | string[], middleware: Function): void;
16
+ use(middleware: MiddlewareFunction): void;
17
+ all(path: string | string[], middleware: MiddlewareFunction): void;
18
+ get(path: string | string[], middleware: MiddlewareFunction): void;
19
+ post(path: string | string[], middleware: MiddlewareFunction): void;
20
20
  useCompression(): void;
21
21
  getRegexWildcard(): string;
22
22
  initRoutes(): void;
@@ -9,10 +9,10 @@ import KoaResponse from './koa-response.js';
9
9
  * Koa Server Implementation (https://koajs.com/)
10
10
  */
11
11
  export default class KoaInternalServer extends AbstractInternalAppServer {
12
- constructor() {
12
+ constructor(options) {
13
13
  super();
14
14
  this.koaApp = new Koa();
15
- this.koaRouter = new KoaRouter();
15
+ this.koaRouter = options.basePath ? new KoaRouter({ prefix: options.basePath }) : new KoaRouter();
16
16
  }
17
17
  getImpl() {
18
18
  return this.koaApp;
@@ -23,7 +23,7 @@ export default class KoaInternalServer extends AbstractInternalAppServer {
23
23
  }
24
24
  use(middleware) {
25
25
  this.koaApp.use(async (ctx, next) => {
26
- const metadataRequest = this.isMetadataRequest(ctx.request.headers);
26
+ const metadataRequest = this.isSiteGenerationRequest(ctx.request.headers);
27
27
  const lwrReq = new KoaRequest(ctx, metadataRequest);
28
28
  const lwrRes = new KoaResponse(ctx, metadataRequest);
29
29
  await middleware(lwrReq, lwrRes, next);
@@ -31,7 +31,7 @@ export default class KoaInternalServer extends AbstractInternalAppServer {
31
31
  }
32
32
  all(path, middleware) {
33
33
  this.koaRouter.all(path, async (ctx, next) => {
34
- const metadataRequest = this.isMetadataRequest(ctx.request.headers);
34
+ const metadataRequest = this.isSiteGenerationRequest(ctx.request.headers);
35
35
  const lwrReq = new KoaRequest(ctx, metadataRequest);
36
36
  const lwrRes = new KoaResponse(ctx, metadataRequest);
37
37
  await middleware(lwrReq, lwrRes, next);
@@ -39,7 +39,7 @@ export default class KoaInternalServer extends AbstractInternalAppServer {
39
39
  }
40
40
  get(path, middleware) {
41
41
  this.koaRouter.get(path, async (ctx, next) => {
42
- const metadataRequest = this.isMetadataRequest(ctx.request.headers);
42
+ const metadataRequest = this.isSiteGenerationRequest(ctx.request.headers);
43
43
  const lwrReq = new KoaRequest(ctx, metadataRequest);
44
44
  const lwrRes = new KoaResponse(ctx, metadataRequest);
45
45
  await middleware(lwrReq, lwrRes, next);
@@ -47,7 +47,7 @@ export default class KoaInternalServer extends AbstractInternalAppServer {
47
47
  }
48
48
  post(path, middleware) {
49
49
  this.koaRouter.post(path, async (ctx, next) => {
50
- const metadataRequest = this.isMetadataRequest(ctx.request.headers);
50
+ const metadataRequest = this.isSiteGenerationRequest(ctx.request.headers);
51
51
  const lwrReq = new KoaRequest(ctx, metadataRequest);
52
52
  const lwrRes = new KoaResponse(ctx, metadataRequest);
53
53
  await middleware(lwrReq, lwrRes, next);
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "0.9.0-alpha.0",
7
+ "version": "0.9.0-alpha.10",
8
8
  "homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
9
9
  "repository": {
10
10
  "type": "git",
@@ -22,6 +22,10 @@
22
22
  ".": {
23
23
  "import": "./build/es/index.js",
24
24
  "require": "./build/cjs/index.cjs"
25
+ },
26
+ "./express": {
27
+ "import": "./build/es/express/express-server.js",
28
+ "require": "./build/cjs/express/express-server.cjs"
25
29
  }
26
30
  },
27
31
  "files": [
@@ -30,14 +34,14 @@
30
34
  "build/**/*.d.ts"
31
35
  ],
32
36
  "devDependencies": {
33
- "@lwrjs/types": "0.9.0-alpha.0",
37
+ "@lwrjs/types": "0.9.0-alpha.10",
34
38
  "@types/koa-compress": "^4.0.1",
35
39
  "@types/koa__router": "^8.0.4",
36
40
  "jest-express": "^1.12.0"
37
41
  },
38
42
  "dependencies": {
39
43
  "@koa/router": "^10.0.0",
40
- "@lwrjs/shared-utils": "0.9.0-alpha.0",
44
+ "@lwrjs/shared-utils": "0.9.0-alpha.10",
41
45
  "@types/compression": "^1.7.2",
42
46
  "@types/express": "^4.17.13",
43
47
  "@types/koa": "^2.11.7",
@@ -53,5 +57,5 @@
53
57
  "engines": {
54
58
  "node": ">=14.15.4 <19"
55
59
  },
56
- "gitHead": "6890d8619b295a49ee1ed8253a372337d83863be"
60
+ "gitHead": "ecbf031157dd87d2b1a3d528b7fae8f9142eba7e"
57
61
  }