@sdkgen/node-runtime 1.6.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1 @@
1
- [![Build Status](https://travis-ci.com/sdkgen/node-runtime.svg?branch=master)](https://travis-ci.com/sdkgen/node-runtime)
2
-
3
- # npm i @sdkgen/node-runtime
1
+ # npm i @sdkgen/node-runtime
@@ -18,19 +18,19 @@ const axios_1 = __importDefault(require("axios"));
18
18
  const form_data_1 = __importDefault(require("form-data"));
19
19
  const src_1 = require("../../src");
20
20
  const ast = new parser_1.Parser(`${__dirname}/api.sdkgen`).parse();
21
- fs_1.writeFileSync(`${__dirname}/api.ts`, typescript_generator_1.generateNodeServerSource(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
21
+ (0, fs_1.writeFileSync)(`${__dirname}/api.ts`, (0, typescript_generator_1.generateNodeServerSource)(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
22
22
  const { api, TestError } = require(`${__dirname}/api.ts`);
23
- fs_1.unlinkSync(`${__dirname}/api.ts`);
24
- api.fn.add = async (ctx, { first, second }) => {
23
+ (0, fs_1.unlinkSync)(`${__dirname}/api.ts`);
24
+ api.fn.add = async (_ctx, { first, second }) => {
25
25
  return `${first}${second}`;
26
26
  };
27
- api.fn.maybe = async (ctx, { bin }) => {
27
+ api.fn.maybe = async (_ctx, { bin }) => {
28
28
  return bin === null ? null : Buffer.from(bin, "hex");
29
29
  };
30
- api.fn.hex = async (ctx, { bin }) => {
30
+ api.fn.hex = async (_ctx, { bin }) => {
31
31
  return bin.toString("hex");
32
32
  };
33
- api.fn.obj = async (ctx, { obj }) => {
33
+ api.fn.obj = async (_ctx, { obj }) => {
34
34
  if (obj.val === 0) {
35
35
  throw new Error("Value is zero ~ Fatal");
36
36
  }
@@ -39,13 +39,13 @@ api.fn.obj = async (ctx, { obj }) => {
39
39
  }
40
40
  return obj;
41
41
  };
42
- api.fn.returnArg = async (ctx, { arg }) => {
42
+ api.fn.returnArg = async (_ctx, { arg }) => {
43
43
  return arg;
44
44
  };
45
- api.fn.returnNoArg = async () => {
45
+ api.fn.returnNoArg = async (_ctx) => {
46
46
  return "no-arg";
47
47
  };
48
- api.fn.returnArgConcat = async (ctx, { arg, arg2 }) => {
48
+ api.fn.returnArgConcat = async (_ctx, { arg, arg2 }) => {
49
49
  return `${arg}${arg2}`;
50
50
  };
51
51
  async function readAllStream(stream) {
@@ -68,9 +68,9 @@ api.fn.getHtml = async () => {
68
68
  api.fn.getXml = async () => {
69
69
  return "<h1>Hello world!</h1>";
70
70
  };
71
- fs_1.writeFileSync(`${__dirname}/nodeClient.ts`, typescript_generator_1.generateNodeClientSource(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
71
+ (0, fs_1.writeFileSync)(`${__dirname}/nodeClient.ts`, (0, typescript_generator_1.generateNodeClientSource)(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
72
72
  const { ApiClient: NodeApiClient } = require(`${__dirname}/nodeClient.ts`);
73
- fs_1.unlinkSync(`${__dirname}/nodeClient.ts`);
73
+ (0, fs_1.unlinkSync)(`${__dirname}/nodeClient.ts`);
74
74
  const nodeClient = new NodeApiClient("http://localhost:8001");
75
75
  const server = new src_1.SdkgenHttpServer(api, {});
76
76
  describe("Rest API", () => {
@@ -13,15 +13,15 @@ const parser_1 = require("@sdkgen/parser");
13
13
  const typescript_generator_1 = require("@sdkgen/typescript-generator");
14
14
  const src_1 = require("../../src");
15
15
  const ast = new parser_1.Parser(`${__dirname}/api.sdkgen`).parse();
16
- fs_1.writeFileSync(`${__dirname}/errors-api.ts`, typescript_generator_1.generateNodeServerSource(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
16
+ (0, fs_1.writeFileSync)(`${__dirname}/errors-api.ts`, (0, typescript_generator_1.generateNodeServerSource)(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
17
17
  const { api, CustomError } = require(`${__dirname}/errors-api.ts`);
18
- fs_1.unlinkSync(`${__dirname}/errors-api.ts`);
19
- api.fn.throwCustomError = async (ctx, args) => {
18
+ (0, fs_1.unlinkSync)(`${__dirname}/errors-api.ts`);
19
+ api.fn.throwCustomError = async (_ctx, args) => {
20
20
  throw new CustomError("Some message", args);
21
21
  };
22
- fs_1.writeFileSync(`${__dirname}/errors-nodeClient.ts`, typescript_generator_1.generateNodeClientSource(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
22
+ (0, fs_1.writeFileSync)(`${__dirname}/errors-nodeClient.ts`, (0, typescript_generator_1.generateNodeClientSource)(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
23
23
  const { ApiClient: NodeApiClient } = require(`${__dirname}/errors-nodeClient.ts`);
24
- fs_1.unlinkSync(`${__dirname}/errors-nodeClient.ts`);
24
+ (0, fs_1.unlinkSync)(`${__dirname}/errors-nodeClient.ts`);
25
25
  const nodeClient = new NodeApiClient("http://localhost:35437");
26
26
  const server = new src_1.SdkgenHttpServer(api, {});
27
27
  describe("Errors", () => {
@@ -13,18 +13,18 @@ const parser_1 = require("@sdkgen/parser");
13
13
  const typescript_generator_1 = require("@sdkgen/typescript-generator");
14
14
  const src_1 = require("../../src");
15
15
  const ast = new parser_1.Parser(`${__dirname}/api.sdkgen`).parse();
16
- fs_1.writeFileSync(`${__dirname}/middleware-api.ts`, typescript_generator_1.generateNodeServerSource(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
16
+ (0, fs_1.writeFileSync)(`${__dirname}/middleware-api.ts`, (0, typescript_generator_1.generateNodeServerSource)(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
17
17
  const { api } = require(`${__dirname}/middleware-api.ts`);
18
- fs_1.unlinkSync(`${__dirname}/middleware-api.ts`);
18
+ (0, fs_1.unlinkSync)(`${__dirname}/middleware-api.ts`);
19
19
  api.fn.identity = async (_ctx, args) => {
20
20
  return args.value;
21
21
  };
22
22
  api.fn.sum = async (_ctx, args) => {
23
23
  return args.a + args.b;
24
24
  };
25
- fs_1.writeFileSync(`${__dirname}/middleware-nodeClient.ts`, typescript_generator_1.generateNodeClientSource(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
25
+ (0, fs_1.writeFileSync)(`${__dirname}/middleware-nodeClient.ts`, (0, typescript_generator_1.generateNodeClientSource)(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
26
26
  const { ApiClient: NodeApiClient } = require(`${__dirname}/middleware-nodeClient.ts`);
27
- fs_1.unlinkSync(`${__dirname}/middleware-nodeClient.ts`);
27
+ (0, fs_1.unlinkSync)(`${__dirname}/middleware-nodeClient.ts`);
28
28
  const nodeClient = new NodeApiClient("http://localhost:32542");
29
29
  const server = new src_1.SdkgenHttpServer(api, {});
30
30
  describe("Middleware", () => {
@@ -51,24 +51,6 @@ describe("Middleware", () => {
51
51
  expect(await nodeClient.identity(null, { value: 3 })).toBe(3);
52
52
  api.middlewares.pop();
53
53
  });
54
- test("onRequestStart still work as expected", async () => {
55
- const previous = api.hook.onRequestStart;
56
- expect(await nodeClient.identity(null, { value: 1 })).toBe(1);
57
- expect(await nodeClient.identity(null, { value: 2 })).toBe(2);
58
- expect(await nodeClient.identity(null, { value: 3 })).toBe(3);
59
- api.hook.onRequestStart = async (ctx) => {
60
- if (ctx.request.args.value === 2) {
61
- return {
62
- result: 17,
63
- };
64
- }
65
- return null;
66
- };
67
- expect(await nodeClient.identity(null, { value: 1 })).toBe(1);
68
- expect(await nodeClient.identity(null, { value: 2 })).toBe(17);
69
- expect(await nodeClient.identity(null, { value: 3 })).toBe(3);
70
- api.hook.onRequestStart = previous;
71
- });
72
54
  test("Multiple middlewares stack", async () => {
73
55
  expect(await nodeClient.identity(null, { value: 1 })).toBe(1);
74
56
  expect(await nodeClient.identity(null, { value: 2 })).toBe(2);
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -99,14 +103,14 @@ class ApiClient {
99
103
  }
100
104
  catch (e) {
101
105
  console.error(e);
102
- reject({ type: "Fatal", message: e.toString() });
106
+ reject({ type: "Fatal", message: `${e}` });
103
107
  }
104
108
  }
105
109
  catch (e) {
106
110
  console.error(e);
107
111
  reject({
108
112
  type: "BadFormattedResponse",
109
- message: `Response couldn't be parsed as JSON (${data}):\n${e.toString()}`,
113
+ message: `Response couldn't be parsed as JSON (${data}):\n${e}`,
110
114
  });
111
115
  }
112
116
  });
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ /* eslint-disable @typescript-eslint/no-explicit-any */
6
7
  /* eslint-disable @typescript-eslint/require-await */
7
8
  /* eslint-disable @typescript-eslint/no-unsafe-return */
8
9
  /* eslint-disable @typescript-eslint/naming-convention */
@@ -18,9 +19,9 @@ const typescript_generator_1 = require("@sdkgen/typescript-generator");
18
19
  const axios_1 = __importDefault(require("axios"));
19
20
  const src_1 = require("../../src");
20
21
  const ast = new parser_1.Parser(`${__dirname}/api.sdkgen`).parse();
21
- fs_1.writeFileSync(`${__dirname}/api.ts`, typescript_generator_1.generateNodeServerSource(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
22
+ (0, fs_1.writeFileSync)(`${__dirname}/api.ts`, (0, typescript_generator_1.generateNodeServerSource)(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
22
23
  const { api, SomeError } = require(`${__dirname}/api.ts`);
23
- fs_1.unlinkSync(`${__dirname}/api.ts`);
24
+ (0, fs_1.unlinkSync)(`${__dirname}/api.ts`);
24
25
  let lastCallCtx = null;
25
26
  api.fn.getUser = async (ctx, { id }) => {
26
27
  lastCallCtx = ctx;
@@ -39,9 +40,9 @@ api.fn.throwsError = async () => {
39
40
  // ExecSync(`../../cubos/sdkgen/sdkgen ${__dirname + "/api.sdkgen"} -o ${__dirname + "/legacyNodeClient.ts"} -t typescript_nodeclient`);
40
41
  const { ApiClient: NodeLegacyApiClient } = require(`${__dirname}/legacyNodeClient.ts`);
41
42
  const nodeLegacyClient = new NodeLegacyApiClient("http://localhost:34367");
42
- fs_1.writeFileSync(`${__dirname}/nodeClient.ts`, typescript_generator_1.generateNodeClientSource(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
43
+ (0, fs_1.writeFileSync)(`${__dirname}/nodeClient.ts`, (0, typescript_generator_1.generateNodeClientSource)(ast).replace(/@sdkgen\/node-runtime/gu, "../../src"));
43
44
  const { ApiClient: NodeApiClient } = require(`${__dirname}/nodeClient.ts`);
44
- fs_1.unlinkSync(`${__dirname}/nodeClient.ts`);
45
+ (0, fs_1.unlinkSync)(`${__dirname}/nodeClient.ts`);
45
46
  const nodeClient = new NodeApiClient("http://localhost:34367");
46
47
  const server = new src_1.SdkgenHttpServer(api, { aaa: true });
47
48
  describe("Simple API", () => {
@@ -56,7 +57,7 @@ describe("Simple API", () => {
56
57
  await expect(axios_1.default.get("http://localhost:34367/egesg")).rejects.toThrowError();
57
58
  });
58
59
  test("Can get ast.json at runtime", async () => {
59
- expect(await axios_1.default.get("http://localhost:34367/ast.json")).toMatchObject({ data: parser_1.astToJson(ast) });
60
+ expect(await axios_1.default.get("http://localhost:34367/ast.json")).toMatchObject({ data: (0, parser_1.astToJson)(ast) });
60
61
  server.introspection = false;
61
62
  await expect(axios_1.default.get("http://localhost:34367/ast.json")).rejects.toThrowError();
62
63
  });
@@ -77,7 +78,7 @@ describe("Simple API", () => {
77
78
  arrayOfOptionals: [1, null, 3],
78
79
  base64: "SGVsbG8K",
79
80
  bool: true,
80
- bytes: crypto_1.randomBytes(23),
81
+ bytes: (0, crypto_1.randomBytes)(23),
81
82
  date: new Date(2019, 12, 3),
82
83
  datetime: new Date(),
83
84
  enum: "aa",
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const spec_ts_1 = require("spec.ts");
4
+ const src_1 = require("../src");
5
+ {
6
+ const typeTable = {};
7
+ const encoded = (0, src_1.encode)(typeTable, "", "string", "");
8
+ const decoded = (0, src_1.decode)(typeTable, "", "string", "");
9
+ (0, spec_ts_1.assert)(encoded, spec_ts_1._);
10
+ (0, spec_ts_1.assert)(decoded, spec_ts_1._);
11
+ }
12
+ {
13
+ const typeTable = {};
14
+ const encoded = (0, src_1.encode)(typeTable, "", "bigint", "");
15
+ const decoded = (0, src_1.decode)(typeTable, "", "bigint", "");
16
+ (0, spec_ts_1.assert)(encoded, spec_ts_1._);
17
+ (0, spec_ts_1.assert)(decoded, spec_ts_1._);
18
+ }
19
+ {
20
+ const typeTable = {
21
+ Foo: "string?",
22
+ };
23
+ const encoded = (0, src_1.encode)(typeTable, "", "Foo", "");
24
+ const decoded = (0, src_1.decode)(typeTable, "", "Foo", "");
25
+ (0, spec_ts_1.assert)(encoded, spec_ts_1._);
26
+ (0, spec_ts_1.assert)(decoded, spec_ts_1._);
27
+ }
28
+ {
29
+ const typeTable = {
30
+ Foo: "string?",
31
+ Bar: {
32
+ a: "string",
33
+ b: "Foo[]",
34
+ },
35
+ };
36
+ const encoded = (0, src_1.encode)(typeTable, "", "Bar", "");
37
+ const decoded = (0, src_1.decode)(typeTable, "", "Bar", "");
38
+ (0, spec_ts_1.assert)(encoded, spec_ts_1._);
39
+ (0, spec_ts_1.assert)(decoded, spec_ts_1._);
40
+ }
41
+ {
42
+ const typeTable = {
43
+ Foo: "string?",
44
+ Bar: ["a", "b"],
45
+ };
46
+ const encoded = (0, src_1.encode)(typeTable, "", "Bar", "");
47
+ const decoded = (0, src_1.decode)(typeTable, "", "Bar", "");
48
+ (0, spec_ts_1.assert)(encoded, spec_ts_1._);
49
+ (0, spec_ts_1.assert)(decoded, spec_ts_1._);
50
+ }
51
+ {
52
+ const typeTable = {
53
+ Foo: { x: "string?" },
54
+ Bar: ["a", ["b", "Foo"]],
55
+ };
56
+ const encoded = (0, src_1.encode)(typeTable, "", "Bar", "");
57
+ const decoded = (0, src_1.decode)(typeTable, "", "Bar", "");
58
+ (0, spec_ts_1.assert)(encoded, spec_ts_1._);
59
+ (0, spec_ts_1.assert)(decoded, spec_ts_1._);
60
+ }
@@ -5,108 +5,124 @@ Object.defineProperty(exports, "__esModule", { value: true });
5
5
  const src_1 = require("../src");
6
6
  describe("Encode/Decode", () => {
7
7
  test("Process CPF", () => {
8
- expect(src_1.encode({}, "", "cpf", "067.183.145-36")).toBe("06718314536");
9
- expect(src_1.decode({}, "", "cpf", "06718314536")).toBe("067.183.145-36");
8
+ expect((0, src_1.encode)({}, "", "cpf", "067.183.145-36")).toBe("06718314536");
9
+ expect((0, src_1.decode)({}, "", "cpf", "06718314536")).toBe("067.183.145-36");
10
10
  expect(() => {
11
- src_1.encode({}, "", "cpf", "067.183.145-35");
11
+ (0, src_1.encode)({}, "", "cpf", "067.183.145-35");
12
12
  }).toThrow();
13
13
  expect(() => {
14
- src_1.decode({}, "", "cpf", "06718314535");
14
+ (0, src_1.decode)({}, "", "cpf", "06718314535");
15
15
  }).toThrow();
16
16
  });
17
17
  test("Process CNPJ", () => {
18
- expect(src_1.encode({}, "", "cnpj", "18.571.767/0001-36")).toBe("18571767000136");
19
- expect(src_1.decode({}, "", "cnpj", "18571767000136")).toBe("18.571.767/0001-36");
18
+ expect((0, src_1.encode)({}, "", "cnpj", "18.571.767/0001-36")).toBe("18571767000136");
19
+ expect((0, src_1.decode)({}, "", "cnpj", "18571767000136")).toBe("18.571.767/0001-36");
20
20
  expect(() => {
21
- src_1.encode({}, "", "cnpj", "18.571.767/0001-35");
21
+ (0, src_1.encode)({}, "", "cnpj", "18.571.767/0001-35");
22
22
  }).toThrow();
23
23
  expect(() => {
24
- src_1.decode({}, "", "cnpj", "18571767000135");
24
+ (0, src_1.decode)({}, "", "cnpj", "18571767000135");
25
25
  }).toThrow();
26
26
  });
27
27
  test("Process URL", () => {
28
- expect(src_1.encode({}, "", "url", "https://cubos.io/")).toBe("https://cubos.io/");
29
- expect(src_1.decode({}, "", "url", "https://cubos.io/")).toBe("https://cubos.io/");
30
- expect(src_1.encode({}, "", "url", " https:cubos.io/ ")).toBe("https://cubos.io/");
31
- expect(src_1.encode({}, "", "url", " https:cubos.io ")).toBe("https://cubos.io/");
28
+ expect((0, src_1.encode)({}, "", "url", "https://cubos.io/")).toBe("https://cubos.io/");
29
+ expect((0, src_1.decode)({}, "", "url", "https://cubos.io/")).toBe("https://cubos.io/");
30
+ expect((0, src_1.encode)({}, "", "url", " https:cubos.io/ ")).toBe("https://cubos.io/");
31
+ expect((0, src_1.encode)({}, "", "url", " https:cubos.io ")).toBe("https://cubos.io/");
32
32
  expect(() => {
33
- src_1.encode({}, "", "url", "dfbdfb");
33
+ (0, src_1.encode)({}, "", "url", "dfbdfb");
34
34
  }).toThrow();
35
35
  expect(() => {
36
- src_1.decode({}, "", "url", "hhh.com");
36
+ (0, src_1.decode)({}, "", "url", "hhh.com");
37
37
  }).toThrow();
38
38
  });
39
39
  test("Process Base64", () => {
40
- expect(src_1.encode({}, "", "base64", "c3VyZS4=")).toBe("c3VyZS4=");
41
- expect(src_1.encode({}, "", "base64", "")).toBe("");
40
+ expect((0, src_1.encode)({}, "", "base64", "c3VyZS4=")).toBe("c3VyZS4=");
41
+ expect((0, src_1.encode)({}, "", "base64", "")).toBe("");
42
42
  expect(() => {
43
- src_1.encode({}, "", "base64", "c3VyZS4");
43
+ (0, src_1.encode)({}, "", "base64", "c3VyZS4");
44
44
  }).toThrow();
45
45
  expect(() => {
46
- src_1.encode({}, "", "base64", " c3VyZS4=");
46
+ (0, src_1.encode)({}, "", "base64", " c3VyZS4=");
47
47
  }).toThrow();
48
- expect(src_1.decode({}, "", "base64", "c3VyZS4=")).toBe("c3VyZS4=");
49
- expect(src_1.decode({}, "", "base64", "")).toBe("");
48
+ expect((0, src_1.decode)({}, "", "base64", "c3VyZS4=")).toBe("c3VyZS4=");
49
+ expect((0, src_1.decode)({}, "", "base64", "")).toBe("");
50
50
  expect(() => {
51
- src_1.decode({}, "", "base64", "c3VyZS4");
51
+ (0, src_1.decode)({}, "", "base64", "c3VyZS4");
52
52
  }).toThrow();
53
53
  expect(() => {
54
- src_1.decode({}, "", "base64", " c3VyZS4=");
54
+ (0, src_1.decode)({}, "", "base64", " c3VyZS4=");
55
55
  }).toThrow();
56
56
  });
57
57
  test("Process Date", () => {
58
- expect(src_1.encode({}, "", "date", new Date("2020-11-10T00:00:00Z"))).toBe("2020-11-10");
59
- expect(src_1.encode({}, "", "date", new Date("2020-11-10T15:34:50Z"))).toBe("2020-11-10");
60
- expect(src_1.encode({}, "", "date", "2020-11-10")).toBe("2020-11-10");
58
+ expect((0, src_1.encode)({}, "", "date", new Date("2020-11-10T00:00:00Z"))).toBe("2020-11-10");
59
+ expect((0, src_1.encode)({}, "", "date", new Date("2020-11-10T15:34:50Z"))).toBe("2020-11-10");
60
+ expect((0, src_1.encode)({}, "", "date", "2020-11-10")).toBe("2020-11-10");
61
61
  expect(() => {
62
- src_1.encode({}, "", "date", "2020-11-10T15:34:50Z");
62
+ (0, src_1.encode)({}, "", "date", "2020-11-10T15:34:50Z");
63
63
  }).toThrow();
64
64
  expect(() => {
65
- src_1.encode({}, "", "date", "hello world");
65
+ (0, src_1.encode)({}, "", "date", "hello world");
66
66
  }).toThrow();
67
67
  expect(() => {
68
- src_1.decode({}, "", "date", "2020-02-30");
68
+ (0, src_1.decode)({}, "", "date", "2020-02-30");
69
69
  }).toThrow();
70
70
  expect(() => {
71
- src_1.encode({}, "", "date", new Date(""));
71
+ (0, src_1.encode)({}, "", "date", new Date(""));
72
72
  }).toThrow();
73
73
  });
74
74
  test("Process Datetime", () => {
75
- expect(src_1.encode({}, "", "datetime", new Date("2020-11-10T15:34:50Z"))).toBe("2020-11-10T15:34:50.000");
76
- expect(src_1.encode({}, "", "datetime", "2020-11-10T15:34:50Z")).toBe("2020-11-10T15:34:50.000");
77
- expect(src_1.encode({}, "", "datetime", "2020-11-10T15:34:50.999")).toBe("2020-11-10T15:34:50.999");
78
- expect(src_1.encode({}, "", "datetime", "2020-11-10T15:34:50+01:00")).toBe("2020-11-10T14:34:50.000");
79
- expect(src_1.encode({}, "", "datetime", "2020-11-10T15:34:50.999+01:00")).toBe("2020-11-10T14:34:50.999");
75
+ expect((0, src_1.encode)({}, "", "datetime", new Date("2020-11-10T15:34:50Z"))).toBe("2020-11-10T15:34:50.000");
76
+ expect((0, src_1.encode)({}, "", "datetime", "2020-11-10T15:34:50Z")).toBe("2020-11-10T15:34:50.000");
77
+ expect((0, src_1.encode)({}, "", "datetime", "2020-11-10T15:34:50.999")).toBe("2020-11-10T15:34:50.999");
78
+ expect((0, src_1.encode)({}, "", "datetime", "2020-11-10T15:34:50+01:00")).toBe("2020-11-10T14:34:50.000");
79
+ expect((0, src_1.encode)({}, "", "datetime", "2020-11-10T15:34:50.999+01:00")).toBe("2020-11-10T14:34:50.999");
80
80
  expect(() => {
81
- src_1.encode({}, "", "datetime", "2020-11-10");
81
+ (0, src_1.encode)({}, "", "datetime", "2020-11-10");
82
82
  }).toThrow();
83
83
  expect(() => {
84
- src_1.encode({}, "", "datetime", "hello world");
84
+ (0, src_1.encode)({}, "", "datetime", "hello world");
85
85
  }).toThrow();
86
86
  expect(() => {
87
- src_1.encode({}, "", "datetime", "2020-11-10T15:34:50.999$01:00");
87
+ (0, src_1.encode)({}, "", "datetime", "2020-11-10T15:34:50.999$01:00");
88
88
  }).toThrow();
89
89
  expect(() => {
90
- src_1.decode({}, "", "datetime", "2020-11-10T15:34:50.999$01:00");
90
+ (0, src_1.decode)({}, "", "datetime", "2020-11-10T15:34:50.999$01:00");
91
91
  }).toThrow();
92
- expect(src_1.decode({}, "", "datetime", "2020-11-10T15:34:50Z").getTime()).toBe(new Date("2020-11-10T15:34:50Z").getTime());
93
- expect(src_1.decode({}, "", "datetime", "2020-11-10T15:34:50.000").getTime()).toBe(new Date("2020-11-10T15:34:50Z").getTime());
92
+ expect((0, src_1.decode)({}, "", "datetime", "2020-11-10T15:34:50Z").getTime()).toBe(new Date("2020-11-10T15:34:50Z").getTime());
93
+ expect((0, src_1.decode)({}, "", "datetime", "2020-11-10T15:34:50.000").getTime()).toBe(new Date("2020-11-10T15:34:50Z").getTime());
94
94
  expect(() => {
95
- src_1.encode({}, "", "datetime", new Date(""));
95
+ (0, src_1.encode)({}, "", "datetime", new Date(""));
96
96
  }).toThrow();
97
97
  });
98
98
  test("Process BigInt", () => {
99
- expect(src_1.encode({}, "", "bigint", BigInt(10))).toBe("10");
99
+ expect((0, src_1.encode)({}, "", "bigint", BigInt(10))).toBe("10");
100
100
  expect(() => {
101
- src_1.encode({}, "", "bigint", 10);
101
+ (0, src_1.encode)({}, "", "bigint", 10);
102
102
  }).toThrow();
103
103
  expect(() => {
104
- src_1.encode({}, "", "bigint", "10");
104
+ (0, src_1.encode)({}, "", "bigint", "10");
105
105
  }).toThrow();
106
- expect(src_1.decode({}, "", "bigint", 10)).toBe(BigInt(10));
107
- expect(src_1.decode({}, "", "bigint", "10")).toBe(BigInt(10));
106
+ expect((0, src_1.decode)({}, "", "bigint", 10)).toBe(BigInt(10));
107
+ expect((0, src_1.decode)({}, "", "bigint", "10")).toBe(BigInt(10));
108
108
  expect(() => {
109
- src_1.decode({}, "", "bigint", "hello world");
109
+ (0, src_1.decode)({}, "", "bigint", "hello world");
110
110
  }).toThrow();
111
111
  });
112
+ test("Process Enum", () => {
113
+ for (const func of [src_1.encode, src_1.decode]) {
114
+ expect(func({}, "", ["a", "b"], "a")).toBe("a");
115
+ expect(func({}, "", ["a", "b"], "b")).toBe("b");
116
+ expect(() => {
117
+ func({}, "", ["a", "b"], "c");
118
+ }).toThrow();
119
+ expect(() => {
120
+ func({ X: { v: "int" } }, "", ["a", ["b", "X"]], "b");
121
+ }).toThrow();
122
+ }
123
+ expect((0, src_1.encode)({ X: { v: "int" } }, "", ["a", ["b", "X"]], { tag: "a" })).toBe("a");
124
+ expect((0, src_1.encode)({ X: { v: "int" } }, "", ["a", ["b", "X"]], { tag: "b", v: 4 })).toEqual(["b", { v: 4 }]);
125
+ expect((0, src_1.decode)({ X: { v: "int" } }, "", ["a", ["b", "X"]], "a")).toEqual({ tag: "a" });
126
+ expect((0, src_1.decode)({ X: { v: "int" } }, "", ["a", ["b", "X"]], ["b", { v: 4 }])).toEqual({ tag: "b", v: 4 });
127
+ });
112
128
  });
@@ -3,24 +3,12 @@ import type { Context, ContextReply } from "./context";
3
3
  import type { DeepReadonly } from "./utils";
4
4
  declare type Middleware<ExtraContextT> = (ctx: Context & ExtraContextT, next: () => Promise<ContextReply>) => Promise<ContextReply>;
5
5
  export declare abstract class BaseApiConfig<ExtraContextT = unknown> {
6
- constructor();
7
6
  private _ast;
8
7
  get ast(): AstRoot;
9
8
  astJson: DeepReadonly<AstJson>;
10
9
  fn: {
11
10
  [name: string]: ((ctx: Context & ExtraContextT, args: any) => Promise<any>) | undefined;
12
11
  };
13
- err: {
14
- [name: string]: (message?: string) => never;
15
- };
16
- hook: {
17
- /** @deprecated Use server.registerHealthCheck() instead. */
18
- onHealthCheck(): Promise<boolean>;
19
- /** @deprecated Use middlewares with api.use() instead. */
20
- onRequestEnd(ctx: Context & ExtraContextT, reply: ContextReply): Promise<null | ContextReply>;
21
- /** @deprecated Use middlewares with api.use() instead. */
22
- onRequestStart(ctx: Context & ExtraContextT): Promise<null | ContextReply>;
23
- };
24
12
  readonly middlewares: Array<Middleware<ExtraContextT>>;
25
13
  use(middleware: Middleware<ExtraContextT>): void;
26
14
  }
@@ -5,22 +5,11 @@ const parser_1 = require("@sdkgen/parser");
5
5
  class BaseApiConfig {
6
6
  constructor() {
7
7
  this.fn = {};
8
- this.err = {};
9
- this.hook = {
10
- onHealthCheck: async () => Promise.resolve(true),
11
- onRequestEnd: async () => Promise.resolve(null),
12
- onRequestStart: async () => Promise.resolve(null),
13
- };
14
8
  this.middlewares = [];
15
- this.use(async (ctx, next) => {
16
- var _a, _b;
17
- const reply = (_a = (await this.hook.onRequestStart(ctx))) !== null && _a !== void 0 ? _a : (await next());
18
- return (_b = (await this.hook.onRequestEnd(ctx, reply))) !== null && _b !== void 0 ? _b : reply;
19
- });
20
9
  }
21
10
  get ast() {
22
11
  var _a;
23
- return ((_a = this._ast) !== null && _a !== void 0 ? _a : (this._ast = parser_1.jsonToAst(this.astJson)));
12
+ return ((_a = this._ast) !== null && _a !== void 0 ? _a : (this._ast = (0, parser_1.jsonToAst)(this.astJson)));
24
13
  }
25
14
  use(middleware) {
26
15
  this.middlewares.push(middleware);
@@ -2,18 +2,30 @@
2
2
  import type { AstJson, TypeDescription } from "@sdkgen/parser";
3
3
  import type { DeepReadonly } from "./utils";
4
4
  declare type TypeTable = AstJson["typeTable"];
5
+ declare type ExpandRecursively<T> = T extends object ? (T extends infer O ? {
6
+ [K in keyof O]: ExpandRecursively<O[K]>;
7
+ } : never) : T;
5
8
  declare type JsonType = number | string | boolean | null | JsonType[] | {
6
9
  [Key in string]: JsonType;
7
10
  };
8
11
  declare type AnyDecodedType = number | string | boolean | null | bigint | Buffer | Date | AnyDecodedType[] | {
9
12
  [Key in string]: AnyDecodedType;
10
13
  };
11
- declare type DecodedType<Type, Table extends object> = TypeDescription extends Type ? AnyDecodedType : Type extends "string" | "email" | "html" | "xml" | "url" | "hex" | "uuid" | "base64" | "cpf" | "cnpj" ? string : Type extends "json" ? JsonType : Type extends "bool" ? boolean : Type extends "void" ? null : Type extends "int" | "uint" | "float" | "money" ? number : Type extends "bigint" ? bigint : Type extends "bytes" ? Buffer : Type extends "date" | "datetime" ? Date : Type extends `${infer X}?` ? DecodedType<X, Table> | null : Type extends `${infer X}[]` ? Array<DecodedType<X, Table>> : Type extends string[] ? Type[number] : Type extends readonly string[] ? Type[number] : Type extends object ? {
14
+ declare type DecodedType<Type, Table extends object> = TypeDescription extends Type ? AnyDecodedType : Type extends "string" | "email" | "html" | "xml" | "url" | "hex" | "uuid" | "base64" | "cpf" | "cnpj" ? string : Type extends "json" ? JsonType : Type extends "bool" ? boolean : Type extends "void" ? null : Type extends "int" | "uint" | "float" | "money" ? number : Type extends "bigint" ? bigint : Type extends "bytes" ? Buffer : Type extends "date" | "datetime" ? Date : Type extends `${infer X}?` ? DecodedType<X, Table> | null : Type extends `${infer X}[]` ? Array<DecodedType<X, Table>> : Type extends Array<string | [string, string]> ? DecodedEnumType<Type, Table> : Type extends ReadonlyArray<string | readonly [string, string]> ? DecodedEnumType<Type, Table> : Type extends object ? {
12
15
  -readonly [Key in keyof Type]: DecodedType<Type[Key], Table>;
13
16
  } : object extends Table ? never : Type extends keyof Table ? DecodedType<Table[Type], Table> : never;
14
- declare type EncodedType<Type, Table extends object> = TypeDescription extends Type ? JsonType : Type extends "string" | "email" | "html" | "xml" | "url" | "hex" | "uuid" | "base64" | "cpf" | "cnpj" ? string : Type extends "json" ? JsonType : Type extends "bool" ? boolean : Type extends "void" ? null : Type extends "int" | "uint" | "float" | "money" ? number : Type extends "bigint" | "bytes" | "date" | "datetime" ? string : Type extends `${infer X}?` ? EncodedType<X, Table> | null : Type extends `${infer X}[]` ? Array<EncodedType<X, Table>> : Type extends string[] ? Type[number] : Type extends readonly string[] ? Type[number] : Type extends object ? {
17
+ declare type DecodedEnumType<Type extends Array<string | [string, string]> | ReadonlyArray<string | readonly [string, string]>, Table extends object> = Type[number] extends string ? Type[number] : DecodeTaggedEnumValueType<Type[number], Table>;
18
+ declare type DecodeTaggedEnumValueType<ValueType extends string | [string, string] | readonly [string, string], Table extends object> = ValueType extends string ? {
19
+ tag: ValueType;
20
+ } : ValueType extends [infer Tag, infer Struct] ? ExpandRecursively<{
21
+ tag: Tag;
22
+ } & DecodedType<Struct, Table>> : ValueType extends readonly [infer Tag, infer Struct] ? ExpandRecursively<{
23
+ tag: Tag;
24
+ } & DecodedType<Struct, Table>> : never;
25
+ declare type EncodedType<Type, Table extends object> = TypeDescription extends Type ? JsonType : Type extends "string" | "email" | "html" | "xml" | "url" | "hex" | "uuid" | "base64" | "cpf" | "cnpj" ? string : Type extends "json" ? JsonType : Type extends "bool" ? boolean : Type extends "void" ? null : Type extends "int" | "uint" | "float" | "money" ? number : Type extends "bigint" | "bytes" | "date" | "datetime" ? string : Type extends `${infer X}?` ? EncodedType<X, Table> | null : Type extends `${infer X}[]` ? Array<EncodedType<X, Table>> : Type extends Array<string | [string, string]> ? EnumEncodedValueType<Type[number], Table> : Type extends ReadonlyArray<string | readonly [string, string]> ? EnumEncodedValueType<Type[number], Table> : Type extends object ? {
15
26
  -readonly [Key in keyof Type]: EncodedType<Type[Key], Table>;
16
27
  } : object extends Table ? never : Type extends keyof Table ? EncodedType<Table[Type], Table> : never;
28
+ declare type EnumEncodedValueType<ValueType extends string | [string, string] | readonly [string, string], Table extends object> = ValueType extends string ? ValueType : ValueType extends [infer Tag, infer Struct] ? [Tag, EncodedType<Struct, Table>] : ValueType extends readonly [infer Tag, infer Struct] ? [Tag, EncodedType<Struct, Table>] : never;
17
29
  export declare function encode<Table extends DeepReadonly<TypeTable>, Type extends DeepReadonly<TypeDescription>>(typeTable: Table, path: string, type: Type, value: unknown): EncodedType<Type, Table>;
18
30
  export declare function decode<Table extends DeepReadonly<TypeTable>, Type extends DeepReadonly<TypeDescription>>(typeTable: Table, path: string, type: Type, value: unknown): DecodedType<Type, Table>;
19
31
  export {};