@smartlyio/oats-runtime 4.2.0 → 4.3.2

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.
@@ -0,0 +1,30 @@
1
+ import type { Response } from './server';
2
+ declare const REDIRECT_STATUSES: readonly [300, 301, 302, 303, 305, 307, 308];
3
+ declare const DEFAULT_REDIRECT_STATUS = 302;
4
+ declare const TEXT_HTML_CONTENT_TYPE = "text/html";
5
+ declare const TEXT_PLAIN_CONTENT_TYPE = "text/plain";
6
+ export declare type RedirectStatus = typeof REDIRECT_STATUSES[number];
7
+ declare type DefaultValue<ContentType extends string> = ContentType extends typeof TEXT_HTML_CONTENT_TYPE | typeof TEXT_PLAIN_CONTENT_TYPE | `${typeof TEXT_HTML_CONTENT_TYPE};${string}` | `${typeof TEXT_PLAIN_CONTENT_TYPE};${string}` ? string : null;
8
+ /**
9
+ * This hack is needed to use the provided generic types defaults rather than their inferred values.
10
+ * For example, this should result in error because the default status is 302:
11
+ * ```typescript
12
+ * const response: Response<308, 'text/html', string, { Location: string }> = redirect('/');
13
+ * ```
14
+ * But it will pass if type inference is not prevented.
15
+ */
16
+ declare type PreventGenericDefaultValueOverride<T> = [T][T extends unknown ? 0 : never];
17
+ /**
18
+ * Use to perform HTTP redirect.
19
+ * @param url an absolute or relative URL string. Will be encoded with `encodeurl` and set as "Location" header (@see https://github.com/pillarjs/encodeurl).
20
+ * @param options optional `status`, `contentType`, `value` that will override the default ones. Default `status` is 302, `contentType` is "text/html".
21
+ * @returns redirect server response.
22
+ */
23
+ export declare function redirect<Status extends RedirectStatus = typeof DEFAULT_REDIRECT_STATUS, ContentType extends string = typeof TEXT_HTML_CONTENT_TYPE, Value = DefaultValue<ContentType>>(url: string, options?: {
24
+ status?: Status;
25
+ contentType?: ContentType;
26
+ value?: Value;
27
+ }): Response<PreventGenericDefaultValueOverride<Status>, PreventGenericDefaultValueOverride<ContentType>, PreventGenericDefaultValueOverride<Value>, {
28
+ Location: string;
29
+ }>;
30
+ export {};
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redirect = void 0;
4
+ const escapeHtml = require("escape-html");
5
+ const encodeUrl = require("encodeurl");
6
+ const REDIRECT_STATUSES = [300, 301, 302, 303, 305, 307, 308];
7
+ const DEFAULT_REDIRECT_STATUS = 302;
8
+ const TEXT_HTML_CONTENT_TYPE = 'text/html';
9
+ const TEXT_PLAIN_CONTENT_TYPE = 'text/plain';
10
+ /**
11
+ * Use to perform HTTP redirect.
12
+ * @param url an absolute or relative URL string. Will be encoded with `encodeurl` and set as "Location" header (@see https://github.com/pillarjs/encodeurl).
13
+ * @param options optional `status`, `contentType`, `value` that will override the default ones. Default `status` is 302, `contentType` is "text/html".
14
+ * @returns redirect server response.
15
+ */
16
+ function redirect(url, options = {}) {
17
+ const { status = DEFAULT_REDIRECT_STATUS } = options;
18
+ const encodedUrl = encodeUrl(url);
19
+ if (!REDIRECT_STATUSES.includes(status)) {
20
+ throw new Error(`Status "${status}" is not a redirect status.`);
21
+ }
22
+ const { contentType = TEXT_HTML_CONTENT_TYPE, value = getDefaultRedirectValue({ encodedUrl, contentType }) } = options;
23
+ return {
24
+ status,
25
+ value: { contentType, value },
26
+ headers: {
27
+ Location: encodedUrl
28
+ }
29
+ };
30
+ }
31
+ exports.redirect = redirect;
32
+ function getDefaultRedirectValue({ encodedUrl, contentType }) {
33
+ if (isContentType({ contentType, base: TEXT_HTML_CONTENT_TYPE })) {
34
+ // In case automatic redirects are turned off, respond with a redirect link for the user to proceed.
35
+ const escapedUrl = escapeHtml(encodedUrl);
36
+ return `Redirecting to <a href="${escapedUrl}">${escapedUrl}</a>.`;
37
+ }
38
+ if (isContentType({ contentType, base: TEXT_PLAIN_CONTENT_TYPE })) {
39
+ return `Redirecting to ${encodedUrl}.`;
40
+ }
41
+ return null;
42
+ }
43
+ function isContentType({ contentType, base }) {
44
+ return contentType === base || contentType.startsWith(base + ';');
45
+ }
46
+ //# sourceMappingURL=redirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.js","sourceRoot":"","sources":["../src/redirect.ts"],"names":[],"mappings":";;;AACA,0CAA2C;AAC3C,uCAAwC;AAExC,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AACvE,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,sBAAsB,GAAG,WAAW,CAAC;AAC3C,MAAM,uBAAuB,GAAG,YAAY,CAAC;AAsB7C;;;;;GAKG;AACH,SAAgB,QAAQ,CAKtB,GAAW,EACX,UAII,EAAE;IAON,MAAM,EAAE,MAAM,GAAG,uBAAiC,EAAE,GAAG,OAAO,CAAC;IAC/D,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,6BAA6B,CAAC,CAAC;KACjE;IACD,MAAM,EACJ,WAAW,GAAG,sBAAqC,EACnD,KAAK,GAAG,uBAAuB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAqB,EACjF,GAAG,OAAO,CAAC;IAEZ,OAAO;QACL,MAAM;QACN,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;QAC7B,OAAO,EAAE;YACP,QAAQ,EAAE,UAAU;SACrB;KACF,CAAC;AACJ,CAAC;AAnCD,4BAmCC;AAED,SAAS,uBAAuB,CAAC,EAC/B,UAAU,EACV,WAAW,EAIZ;IACC,IAAI,aAAa,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,EAAE;QAChE,oGAAoG;QACpG,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QAC1C,OAAO,2BAA2B,UAAU,KAAK,UAAU,OAAO,CAAC;KACpE;IACD,IAAI,aAAa,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC,EAAE;QACjE,OAAO,kBAAkB,UAAU,GAAG,CAAC;KACxC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,EAAE,WAAW,EAAE,IAAI,EAAyC;IACjF,OAAO,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AACpE,CAAC"}
package/dist/runtime.d.ts CHANGED
@@ -4,6 +4,7 @@ import * as make from './make';
4
4
  import { fromReflection } from './make';
5
5
  import * as valueClass from './value-class';
6
6
  import * as reflection from './reflection-type';
7
+ export { redirect } from './redirect';
7
8
  export { make, fromReflection, server, client, valueClass, reflection };
8
9
  export declare const noContentContentType: "oatsNoContent";
9
10
  declare type Scalar = number | string | boolean;
package/dist/runtime.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.pmap = exports.getAll = exports.map = exports.set = exports.text = exports.json = exports.noContent = exports.setHeaders = exports.noContentContentType = exports.reflection = exports.valueClass = exports.client = exports.server = exports.fromReflection = exports.make = void 0;
3
+ exports.pmap = exports.getAll = exports.map = exports.set = exports.text = exports.json = exports.noContent = exports.setHeaders = exports.noContentContentType = exports.reflection = exports.valueClass = exports.client = exports.server = exports.fromReflection = exports.make = exports.redirect = void 0;
4
4
  const server = require("./server");
5
5
  exports.server = server;
6
6
  const client = require("./client");
@@ -13,6 +13,8 @@ const valueClass = require("./value-class");
13
13
  exports.valueClass = valueClass;
14
14
  const reflection = require("./reflection-type");
15
15
  exports.reflection = reflection;
16
+ var redirect_1 = require("./redirect");
17
+ Object.defineProperty(exports, "redirect", { enumerable: true, get: function () { return redirect_1.redirect; } });
16
18
  exports.noContentContentType = 'oatsNoContent';
17
19
  const typeWitnessKey = Symbol();
18
20
  const tagKey = Symbol();
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AAOJ,wBAAM;AANrC,mCAAmC;AAMI,wBAAM;AAL7C,+BAA+B;AAKtB,oBAAI;AAJb,iCAAwC;AAIzB,+FAJN,qBAAc,OAIM;AAH7B,4CAA4C;AAGG,gCAAU;AAFzD,gDAAgD;AAEW,gCAAU;AAExD,QAAA,oBAAoB,GAAG,eAAwB,CAAC;AAI7D,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC;AAChC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AAgBxB,MAAM,WAAW;CAEhB;AAED,MAAM,YAAY;CAEjB;AAUD,SAAgB,UAAU,CAMxB,QAA2E,EAC3E,OAAgB;IAEhB,uCAAY,QAAQ,KAAE,OAAO,IAAG;AAClC,CAAC;AAVD,gCAUC;AAED,SAAgB,SAAS,CACvB,MAAc;IAEd,OAAO;QACL,MAAM;QACN,KAAK,EAAE,EAAE,WAAW,EAAE,4BAAoB,EAAE,KAAK,EAAE,IAAI,EAAE;QACzD,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AARD,8BAQC;AAED,SAAgB,IAAI,CAClB,MAAc,EACd,KAAY;IAEZ,OAAO;QACL,MAAM;QACN,KAAK,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,EAAE;QACjD,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AATD,oBASC;AAED,SAAgB,IAAI,CAClB,MAAc,EACd,KAAY;IAEZ,OAAO;QACL,MAAM;QACN,KAAK,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE;QAC3C,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AATD,oBASC;AAED,SAAgB,GAAG,CACjB,EAAO,EACP,GAAsE;IAEtE,OAAQ,EAAU,CAAC,WAAW,CAAC,IAAI,iCAAM,EAAE,GAAK,GAAG,EAAG,CAAC;AACzD,CAAC;AALD,kBAKC;AAUD,SAAgB,GAAG,CACjB,KAAQ,EACR,SAA6B,EAC7B,EAAwC;IAExC,OAAO,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAND,kBAMC;AAED,SAAS,WAAW,CAClB,KAAQ,EACR,SAA6B,EAC7B,EAAwC,EACxC,aAAuB;IAEvB,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;QACpB,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,aAAa,CAAQ,CAAC;KACzC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,MAAM,GAAG,GAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACzC,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CACtE,CAAC;QACF,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,CAAQ,CAAC;KACvC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACtC,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAE,KAAa,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;KACpC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,MAAM,CACpB,KAAQ,EACR,SAA6B;IAE7B,OAAO,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC;AALD,wBAKC;AAED,SAAS,cAAc,CACrB,KAAQ,EACR,SAA6B;IAE7B,MAAM,KAAK,GAAQ,EAAE,CAAC;IACtB,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;QACpB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnB;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO;YACL,GAAG,KAAK;YACR,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;SAChF,CAAC;KACH;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACtC,OAAO;YACL,GAAG,KAAK;YACR,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;SAC/F,CAAC;KACH;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,IAAI,CACxB,KAAQ,EACR,SAA6B,EAC7B,GAAkD;IAElD,OAAO,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAND,oBAMC;AAED,SAAS,SAAS,CAAC,CAAM;IACvB,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CACnB,KAAQ,EACR,SAA6B,EAC7B,GAAkD,EAClD,aAAuB;IAEvB,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;QACpB,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,aAAa,CAAQ,CAAC;KAC1C;IACD,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;KACzE;IACD,OAAO,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAAI,QAAa,EAAE,QAAa;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC/B,OAAO,QAAQ,CAAC;SACjB;KACF;IACD,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnE,CAAC;AAED,SAAS,YAAY,CAAuC,QAAW,EAAE,SAAY;IACnF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAC/C,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,QAAQ,CAAC;KACjB;IACD,IAAI,QAAQ,YAAY,UAAU,CAAC,UAAU,EAAE;QAC7C,OAAO,GAAG,CAAwB,QAAQ,EAAE,SAAS,CAAC,CAAC,OAAO,EAAO,CAAC;KACvE;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,SAAS,CAChB,KAAU,EACV,SAA6B,EAC7B,GAAkD,EAClD,aAAuB;IAEvB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChC,YAAY,CAAO,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CACvE,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAC1C,OAAO,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,WAAW,CAAI,KAAK,EAAE,MAAa,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,UAAU,CACjB,KAAQ,EACR,SAA6B,EAC7B,GAAkD,EAClD,aAAuB;IAEvB,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC/B,MAAM,CAAC,GAAG,YAAY,CAAE,KAAa,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACvF,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;YAChB,QAAQ,CAAC,IAAI,CACX,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACd,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACvB,CAAC,CAAC,CACH,CAAC;SACH;aAAM;YACL,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACjB;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,MAAM,EAAE;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;KACtE;IACD,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,aAAa,CACpB,KAAQ,EACR,SAA6B,EAC7B,GAAkD,EAClD,aAAuB;IAEvB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAQ,CAAC;KAC/D;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACtC,OAAO,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;KACzD;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AASJ,wBAAM;AARrC,mCAAmC;AAQI,wBAAM;AAP7C,+BAA+B;AAOtB,oBAAI;AANb,iCAAwC;AAMzB,+FANN,qBAAc,OAMM;AAL7B,4CAA4C;AAKG,gCAAU;AAJzD,gDAAgD;AAIW,gCAAU;AAFrE,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAIJ,QAAA,oBAAoB,GAAG,eAAwB,CAAC;AAI7D,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC;AAChC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AAgBxB,MAAM,WAAW;CAEhB;AAED,MAAM,YAAY;CAEjB;AAUD,SAAgB,UAAU,CAMxB,QAA2E,EAC3E,OAAgB;IAEhB,uCAAY,QAAQ,KAAE,OAAO,IAAG;AAClC,CAAC;AAVD,gCAUC;AAED,SAAgB,SAAS,CACvB,MAAc;IAEd,OAAO;QACL,MAAM;QACN,KAAK,EAAE,EAAE,WAAW,EAAE,4BAAoB,EAAE,KAAK,EAAE,IAAI,EAAE;QACzD,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AARD,8BAQC;AAED,SAAgB,IAAI,CAClB,MAAc,EACd,KAAY;IAEZ,OAAO;QACL,MAAM;QACN,KAAK,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,EAAE;QACjD,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AATD,oBASC;AAED,SAAgB,IAAI,CAClB,MAAc,EACd,KAAY;IAEZ,OAAO;QACL,MAAM;QACN,KAAK,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE;QAC3C,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AATD,oBASC;AAED,SAAgB,GAAG,CACjB,EAAO,EACP,GAAsE;IAEtE,OAAQ,EAAU,CAAC,WAAW,CAAC,IAAI,iCAAM,EAAE,GAAK,GAAG,EAAG,CAAC;AACzD,CAAC;AALD,kBAKC;AAUD,SAAgB,GAAG,CACjB,KAAQ,EACR,SAA6B,EAC7B,EAAwC;IAExC,OAAO,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAND,kBAMC;AAED,SAAS,WAAW,CAClB,KAAQ,EACR,SAA6B,EAC7B,EAAwC,EACxC,aAAuB;IAEvB,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;QACpB,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,aAAa,CAAQ,CAAC;KACzC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,MAAM,GAAG,GAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACzC,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CACtE,CAAC;QACF,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,CAAQ,CAAC;KACvC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACtC,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAE,KAAa,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;KACpC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,MAAM,CACpB,KAAQ,EACR,SAA6B;IAE7B,OAAO,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC;AALD,wBAKC;AAED,SAAS,cAAc,CACrB,KAAQ,EACR,SAA6B;IAE7B,MAAM,KAAK,GAAQ,EAAE,CAAC;IACtB,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;QACpB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnB;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO;YACL,GAAG,KAAK;YACR,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;SAChF,CAAC;KACH;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACtC,OAAO;YACL,GAAG,KAAK;YACR,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;SAC/F,CAAC;KACH;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,IAAI,CACxB,KAAQ,EACR,SAA6B,EAC7B,GAAkD;IAElD,OAAO,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAND,oBAMC;AAED,SAAS,SAAS,CAAC,CAAM;IACvB,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CACnB,KAAQ,EACR,SAA6B,EAC7B,GAAkD,EAClD,aAAuB;IAEvB,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;QACpB,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,aAAa,CAAQ,CAAC;KAC1C;IACD,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;KACzE;IACD,OAAO,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAAI,QAAa,EAAE,QAAa;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC/B,OAAO,QAAQ,CAAC;SACjB;KACF;IACD,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnE,CAAC;AAED,SAAS,YAAY,CAAuC,QAAW,EAAE,SAAY;IACnF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAC/C,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,QAAQ,CAAC;KACjB;IACD,IAAI,QAAQ,YAAY,UAAU,CAAC,UAAU,EAAE;QAC7C,OAAO,GAAG,CAAwB,QAAQ,EAAE,SAAS,CAAC,CAAC,OAAO,EAAO,CAAC;KACvE;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,SAAS,CAChB,KAAU,EACV,SAA6B,EAC7B,GAAkD,EAClD,aAAuB;IAEvB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChC,YAAY,CAAO,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CACvE,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAC1C,OAAO,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,WAAW,CAAI,KAAK,EAAE,MAAa,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,UAAU,CACjB,KAAQ,EACR,SAA6B,EAC7B,GAAkD,EAClD,aAAuB;IAEvB,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC/B,MAAM,CAAC,GAAG,YAAY,CAAE,KAAa,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACvF,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;YAChB,QAAQ,CAAC,IAAI,CACX,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACd,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACvB,CAAC,CAAC,CACH,CAAC;SACH;aAAM;YACL,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACjB;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,MAAM,EAAE;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;KACtE;IACD,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,aAAa,CACpB,KAAQ,EACR,SAA6B,EAC7B,GAAkD,EAClD,aAAuB;IAEvB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAQ,CAAC;KAC/D;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACtC,OAAO,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;KACzD;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/dist/server.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { MakeOptions, Maker, ValidationError } from './make';
2
+ export type { RedirectStatus } from './redirect';
2
3
  export interface Response<Status extends number, ContentType, Value, Headers extends Record<string, any>> {
3
4
  status: Status;
4
5
  value: {
@@ -81,4 +82,3 @@ export interface HandlerOptions {
81
82
  };
82
83
  }
83
84
  export declare function createHandlerFactory<Spec>(handlers: Handler[], opts?: HandlerOptions): HandlerFactory<Spec>;
84
- export {};
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartlyio/oats-runtime",
3
- "version": "4.2.0",
3
+ "version": "4.3.2",
4
4
  "license": "MIT",
5
5
  "description": "Runtime for Oats a Openapi3 based generator for typescript aware servers and clients",
6
6
  "private": false,
@@ -10,7 +10,7 @@
10
10
  "scripts": {
11
11
  "clean": "yarn clean:dist && rm -f ./tmp/*.ts",
12
12
  "clean:dist": "rm -rf ./dist",
13
- "prebuild": "yarn clean",
13
+ "prebuild": "yarn clean && yarn tsc --project tsconfig.test.json --noEmit",
14
14
  "build": "yarn tsc",
15
15
  "lint": "eslint --max-warnings=0 --ext .ts src test"
16
16
  },
@@ -23,6 +23,10 @@
23
23
  },
24
24
  "dependencies": {
25
25
  "@smartlyio/safe-navigation": "^5.0.1",
26
+ "@types/encodeurl": "1.0.0",
27
+ "@types/escape-html": "1.0.1",
28
+ "encodeurl": "1.0.2",
29
+ "escape-html": "1.0.3",
26
30
  "lodash": "^4.17.20"
27
31
  },
28
32
  "keywords": [
@@ -35,17 +39,17 @@
35
39
  "client"
36
40
  ],
37
41
  "devDependencies": {
38
- "@types/jest": "27.4.0",
39
- "@types/lodash": "4.14.178",
40
- "@types/node": "16.11.22",
41
- "fast-check": "2.22.0",
42
+ "@types/jest": "27.4.1",
43
+ "@types/lodash": "4.14.181",
44
+ "@types/node": "16.11.26",
45
+ "fast-check": "2.24.0",
42
46
  "jest": "27.5.1",
43
47
  "jsverify": "0.8.4",
44
- "prettier": "2.5.1",
45
- "ts-jest": "27.1.3",
48
+ "prettier": "2.6.2",
49
+ "ts-jest": "27.1.4",
46
50
  "ts-node": "10.7.0",
47
- "tsconfig-paths": "3.13.0",
48
- "typescript": "4.6.2"
51
+ "tsconfig-paths": "3.14.1",
52
+ "typescript": "4.6.3"
49
53
  },
50
- "gitHead": "539f5a7d4196922df0cc2c9692291004ea85b3b9"
54
+ "gitHead": "8e6ff688c82fb559b853f01041343441be32e15a"
51
55
  }
@@ -0,0 +1,93 @@
1
+ import type { Response } from './server';
2
+ import escapeHtml = require('escape-html');
3
+ import encodeUrl = require('encodeurl');
4
+
5
+ const REDIRECT_STATUSES = [300, 301, 302, 303, 305, 307, 308] as const;
6
+ const DEFAULT_REDIRECT_STATUS = 302;
7
+ const TEXT_HTML_CONTENT_TYPE = 'text/html';
8
+ const TEXT_PLAIN_CONTENT_TYPE = 'text/plain';
9
+
10
+ export type RedirectStatus = typeof REDIRECT_STATUSES[number];
11
+
12
+ type DefaultValue<ContentType extends string> = ContentType extends
13
+ | typeof TEXT_HTML_CONTENT_TYPE
14
+ | typeof TEXT_PLAIN_CONTENT_TYPE
15
+ | `${typeof TEXT_HTML_CONTENT_TYPE};${string}`
16
+ | `${typeof TEXT_PLAIN_CONTENT_TYPE};${string}`
17
+ ? string
18
+ : null;
19
+
20
+ /**
21
+ * This hack is needed to use the provided generic types defaults rather than their inferred values.
22
+ * For example, this should result in error because the default status is 302:
23
+ * ```typescript
24
+ * const response: Response<308, 'text/html', string, { Location: string }> = redirect('/');
25
+ * ```
26
+ * But it will pass if type inference is not prevented.
27
+ */
28
+ type PreventGenericDefaultValueOverride<T> = [T][T extends unknown ? 0 : never];
29
+
30
+ /**
31
+ * Use to perform HTTP redirect.
32
+ * @param url an absolute or relative URL string. Will be encoded with `encodeurl` and set as "Location" header (@see https://github.com/pillarjs/encodeurl).
33
+ * @param options optional `status`, `contentType`, `value` that will override the default ones. Default `status` is 302, `contentType` is "text/html".
34
+ * @returns redirect server response.
35
+ */
36
+ export function redirect<
37
+ Status extends RedirectStatus = typeof DEFAULT_REDIRECT_STATUS,
38
+ ContentType extends string = typeof TEXT_HTML_CONTENT_TYPE,
39
+ Value = DefaultValue<ContentType>
40
+ >(
41
+ url: string,
42
+ options: {
43
+ status?: Status;
44
+ contentType?: ContentType;
45
+ value?: Value;
46
+ } = {}
47
+ ): Response<
48
+ PreventGenericDefaultValueOverride<Status>,
49
+ PreventGenericDefaultValueOverride<ContentType>,
50
+ PreventGenericDefaultValueOverride<Value>,
51
+ { Location: string }
52
+ > {
53
+ const { status = DEFAULT_REDIRECT_STATUS as Status } = options;
54
+ const encodedUrl = encodeUrl(url);
55
+
56
+ if (!REDIRECT_STATUSES.includes(status)) {
57
+ throw new Error(`Status "${status}" is not a redirect status.`);
58
+ }
59
+ const {
60
+ contentType = TEXT_HTML_CONTENT_TYPE as ContentType,
61
+ value = getDefaultRedirectValue({ encodedUrl, contentType }) as unknown as Value
62
+ } = options;
63
+
64
+ return {
65
+ status,
66
+ value: { contentType, value },
67
+ headers: {
68
+ Location: encodedUrl
69
+ }
70
+ };
71
+ }
72
+
73
+ function getDefaultRedirectValue({
74
+ encodedUrl,
75
+ contentType
76
+ }: {
77
+ encodedUrl: string;
78
+ contentType: string;
79
+ }) {
80
+ if (isContentType({ contentType, base: TEXT_HTML_CONTENT_TYPE })) {
81
+ // In case automatic redirects are turned off, respond with a redirect link for the user to proceed.
82
+ const escapedUrl = escapeHtml(encodedUrl);
83
+ return `Redirecting to <a href="${escapedUrl}">${escapedUrl}</a>.`;
84
+ }
85
+ if (isContentType({ contentType, base: TEXT_PLAIN_CONTENT_TYPE })) {
86
+ return `Redirecting to ${encodedUrl}.`;
87
+ }
88
+ return null;
89
+ }
90
+
91
+ function isContentType({ contentType, base }: { contentType: string; base: string }) {
92
+ return contentType === base || contentType.startsWith(base + ';');
93
+ }
package/src/runtime.ts CHANGED
@@ -5,6 +5,8 @@ import { fromReflection } from './make';
5
5
  import * as valueClass from './value-class';
6
6
  import * as reflection from './reflection-type';
7
7
 
8
+ export { redirect } from './redirect';
9
+
8
10
  export { make, fromReflection, server, client, valueClass, reflection };
9
11
 
10
12
  export const noContentContentType = 'oatsNoContent' as const;
package/src/server.ts CHANGED
@@ -2,6 +2,8 @@ import { assert } from './assert';
2
2
  import safeNavigation from '@smartlyio/safe-navigation';
3
3
  import { Make, MakeOptions, Maker, ValidationError, validationErrorPrinter } from './make';
4
4
 
5
+ export type { RedirectStatus } from './redirect';
6
+
5
7
  export interface Response<
6
8
  Status extends number,
7
9
  ContentType,