@nestia/sdk 1.1.1 → 1.2.0-dev.20230504-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.
Files changed (79) hide show
  1. package/assets/bundle/api/index.ts +4 -0
  2. package/assets/bundle/api/module.ts +5 -0
  3. package/assets/bundle/e2e/index.ts +41 -0
  4. package/lib/INestiaConfig.d.ts +6 -0
  5. package/lib/NestiaSdkApplication.d.ts +1 -0
  6. package/lib/NestiaSdkApplication.js +35 -14
  7. package/lib/NestiaSdkApplication.js.map +1 -1
  8. package/lib/analyses/ControllerAnalyzer.js +1 -0
  9. package/lib/analyses/ControllerAnalyzer.js.map +1 -1
  10. package/lib/analyses/ReflectAnalyzer.js +12 -1
  11. package/lib/analyses/ReflectAnalyzer.js.map +1 -1
  12. package/lib/executable/internal/NestiaSdkCommand.d.ts +3 -2
  13. package/lib/executable/internal/NestiaSdkCommand.js +52 -56
  14. package/lib/executable/internal/NestiaSdkCommand.js.map +1 -1
  15. package/lib/executable/internal/NestiaSdkConfig.js +5 -1
  16. package/lib/executable/internal/NestiaSdkConfig.js.map +1 -1
  17. package/lib/executable/sdk.js +5 -8
  18. package/lib/executable/sdk.js.map +1 -1
  19. package/lib/generates/E2eGenerator.d.ts +5 -0
  20. package/lib/generates/E2eGenerator.js +52 -0
  21. package/lib/generates/E2eGenerator.js.map +1 -0
  22. package/lib/generates/SdkGenerator.d.ts +1 -2
  23. package/lib/generates/SdkGenerator.js +20 -22
  24. package/lib/generates/SdkGenerator.js.map +1 -1
  25. package/lib/generates/SwaggerGenerator.d.ts +1 -1
  26. package/lib/generates/SwaggerGenerator.js +40 -43
  27. package/lib/generates/SwaggerGenerator.js.map +1 -1
  28. package/lib/generates/internal/E2eFileProgrammer.d.ts +8 -0
  29. package/lib/generates/internal/E2eFileProgrammer.js +105 -0
  30. package/lib/generates/internal/E2eFileProgrammer.js.map +1 -0
  31. package/lib/generates/internal/SdkFileProgrammer.d.ts +5 -0
  32. package/lib/generates/internal/SdkFileProgrammer.js +121 -0
  33. package/lib/generates/internal/SdkFileProgrammer.js.map +1 -0
  34. package/lib/generates/internal/SdkFunctionProgrammer.d.ts +5 -0
  35. package/lib/generates/{FunctionGenerator.js → internal/SdkFunctionProgrammer.js} +58 -57
  36. package/lib/generates/internal/SdkFunctionProgrammer.js.map +1 -0
  37. package/lib/generates/internal/SdkRouteDirectory.d.ts +10 -0
  38. package/lib/generates/internal/SdkRouteDirectory.js +18 -0
  39. package/lib/generates/internal/SdkRouteDirectory.js.map +1 -0
  40. package/lib/structures/IController.d.ts +4 -0
  41. package/lib/structures/IRoute.d.ts +4 -0
  42. package/lib/utils/NestiaConfigUtil.d.ts +4 -0
  43. package/lib/utils/NestiaConfigUtil.js +24 -0
  44. package/lib/utils/NestiaConfigUtil.js.map +1 -0
  45. package/lib/utils/SourceFinder.d.ts +9 -0
  46. package/lib/utils/SourceFinder.js +60 -0
  47. package/lib/utils/SourceFinder.js.map +1 -0
  48. package/package.json +2 -3
  49. package/src/INestiaConfig.ts +7 -0
  50. package/src/NestiaSdkApplication.ts +54 -17
  51. package/src/analyses/ControllerAnalyzer.ts +1 -0
  52. package/src/analyses/ReflectAnalyzer.ts +12 -2
  53. package/src/executable/internal/NestiaSdkCommand.ts +87 -105
  54. package/src/executable/sdk.ts +4 -8
  55. package/src/generates/E2eGenerator.ts +65 -0
  56. package/src/generates/SdkGenerator.ts +29 -30
  57. package/src/generates/SwaggerGenerator.ts +66 -64
  58. package/src/generates/internal/E2eFileProgrammer.ts +123 -0
  59. package/src/generates/internal/SdkFileProgrammer.ts +144 -0
  60. package/src/generates/internal/SdkFunctionProgrammer.ts +371 -0
  61. package/src/generates/internal/SdkRouteDirectory.ts +21 -0
  62. package/src/structures/IController.ts +4 -0
  63. package/src/structures/IRoute.ts +4 -0
  64. package/src/utils/NestiaConfigUtil.ts +21 -0
  65. package/src/utils/SourceFinder.ts +60 -0
  66. package/lib/analyses/SourceFinder.d.ts +0 -4
  67. package/lib/analyses/SourceFinder.js +0 -71
  68. package/lib/analyses/SourceFinder.js.map +0 -1
  69. package/lib/generates/FileGenerator.d.ts +0 -5
  70. package/lib/generates/FileGenerator.js +0 -138
  71. package/lib/generates/FileGenerator.js.map +0 -1
  72. package/lib/generates/FunctionGenerator.d.ts +0 -5
  73. package/lib/generates/FunctionGenerator.js.map +0 -1
  74. package/src/analyses/SourceFinder.ts +0 -59
  75. package/src/generates/FileGenerator.ts +0 -156
  76. package/src/generates/FunctionGenerator.ts +0 -348
  77. /package/assets/bundle/{HttpError.ts → api/HttpError.ts} +0 -0
  78. /package/assets/bundle/{IConnection.ts → api/IConnection.ts} +0 -0
  79. /package/assets/bundle/{Primitive.ts → api/Primitive.ts} +0 -0
@@ -1,35 +1,36 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FunctionGenerator = void 0;
3
+ exports.SdkFunctionProgrammer = void 0;
4
4
  const Vector_1 = require("tstl/container/Vector");
5
5
  const Pair_1 = require("tstl/utility/Pair");
6
6
  const Escaper_1 = require("typia/lib/utils/Escaper");
7
- var FunctionGenerator;
8
- (function (FunctionGenerator) {
9
- function generate(config, route) {
7
+ var SdkFunctionProgrammer;
8
+ (function (SdkFunctionProgrammer) {
9
+ SdkFunctionProgrammer.generate = (config) => (route) => {
10
10
  const query = route.parameters.find((param) => param.category === "query" && param.field === undefined);
11
11
  const input = route.parameters.find((param) => param.category === "body");
12
12
  return [head, body, tail]
13
- .map((closure) => closure(route, query, input, config))
13
+ .map((closure) => closure(config)(route)({ query, input }))
14
14
  .filter((str) => !!str)
15
15
  .join("\n");
16
- }
17
- FunctionGenerator.generate = generate;
16
+ };
18
17
  /* ---------------------------------------------------------
19
18
  BODY
20
19
  --------------------------------------------------------- */
21
- function body(route, query, input, config) {
20
+ const body = (config) => (route) => (props) => {
22
21
  var _a;
23
22
  // FETCH ARGUMENTS WITH REQUST BODY
24
- const parameters = filter_parameters(route, query);
23
+ const parameters = filter_parameters(route)(props.query);
25
24
  const fetchArguments = [
26
25
  "connection",
27
26
  `${route.name}.ENCRYPTED`,
28
27
  `${route.name}.METHOD`,
29
- `${route.name}.path(${parameters.map((p) => p.name).join(", ")})`,
28
+ `${route.name}.path(${parameters
29
+ .map((p) => p.name)
30
+ .join(", ")})`,
30
31
  ];
31
- if (input !== undefined) {
32
- fetchArguments.push(input.name);
32
+ if (props.input !== undefined) {
33
+ fetchArguments.push(props.input.name);
33
34
  if (config.json === true)
34
35
  fetchArguments.push(`${route.name}.stringify`);
35
36
  }
@@ -57,27 +58,25 @@ var FunctionGenerator;
57
58
  ];
58
59
  for (const header of route.setHeaders) {
59
60
  if (header.type === "assigner")
60
- content.push(" ", `Object.assign(connection.headers, ${access("output", header.source)});\n`);
61
+ content.push(" ", `Object.assign(connection.headers, ${access("output")(header.source)});\n`);
61
62
  else
62
- content.push(" ", `${access("connection.headers", (_a = header.target) !== null && _a !== void 0 ? _a : header.source)} = ${access("output", header.source)};\n`);
63
+ content.push(" ", `${access("connection.headers")((_a = header.target) !== null && _a !== void 0 ? _a : header.source)} = ${access("output")(header.source)};\n`);
63
64
  }
64
65
  content.push("\n", " return output;\n", "}");
65
66
  return content.join("");
66
- }
67
- function filter_parameters(route, query) {
67
+ };
68
+ const filter_parameters = (route) => (query) => {
68
69
  const parameters = route.parameters.filter((param) => param.category === "param" ||
69
70
  (param.category === "query" && param.field !== undefined));
70
71
  if (query)
71
72
  parameters.push(query);
72
73
  return parameters;
73
- }
74
- function access(x, y) {
75
- return y[0] === "[" ? `${x}${y}` : `${x}.${y}`;
76
- }
74
+ };
75
+ const access = (x) => (y) => y[0] === "[" ? `${x}${y}` : `${x}.${y}`;
77
76
  /* ---------------------------------------------------------
78
77
  HEAD & TAIL
79
78
  --------------------------------------------------------- */
80
- function head(route, query, input, config) {
79
+ const head = (config) => (route) => (props) => {
81
80
  //----
82
81
  // CONSTRUCT COMMENT
83
82
  //----
@@ -130,8 +129,8 @@ var FunctionGenerator;
130
129
  "connection: IConnection",
131
130
  ...route.parameters.map((param) => {
132
131
  const type = config.primitive !== false &&
133
- (param === query || param === input)
134
- ? `Primitive<${route.name}.${param === query ? "Query" : "Input"}>`
132
+ (param === props.query || param === props.input)
133
+ ? `Primitive<${route.name}.${param === props.query ? "Query" : "Input"}>`
135
134
  : param.type.name;
136
135
  return `${param.name}${param.optional ? "?" : ""}: ${type}`;
137
136
  }),
@@ -148,19 +147,23 @@ var FunctionGenerator;
148
147
  ` (\n` +
149
148
  `${parameters.map((str) => ` ${str}`).join(",\n")}\n` +
150
149
  ` ): Promise<${output}>`);
151
- }
152
- function tail(route, query, input, config) {
150
+ };
151
+ const tail = (config) => (route) => (props) => {
153
152
  // LIST UP TYPES
154
153
  const types = [];
155
- if (query !== undefined)
156
- types.push(new Pair_1.Pair("Query", query.type.name));
157
- if (input !== undefined)
158
- types.push(new Pair_1.Pair("Input", input.type.name));
154
+ if (props.query !== undefined)
155
+ types.push(new Pair_1.Pair("Query", props.query.type.name));
156
+ if (props.input !== undefined)
157
+ types.push(new Pair_1.Pair("Input", props.input.type.name));
159
158
  if (route.output.name !== "void")
160
159
  types.push(new Pair_1.Pair("Output", route.output.name));
161
160
  // PATH WITH PARAMETERS
162
- const parameters = filter_parameters(route, query);
163
- const path = compute_path(query, parameters, route.path);
161
+ const parameters = filter_parameters(route)(props.query);
162
+ const path = compute_path({
163
+ path: route.path,
164
+ query: props.query,
165
+ parameters,
166
+ });
164
167
  return (`export namespace ${route.name}\n` +
165
168
  "{\n" +
166
169
  (types.length !== 0
@@ -174,7 +177,7 @@ var FunctionGenerator;
174
177
  ` export const METHOD = "${route.method}" as const;\n` +
175
178
  ` export const PATH: string = "${route.path}";\n` +
176
179
  ` export const ENCRYPTED: Fetcher.IEncrypted = {\n` +
177
- ` request: ${input !== undefined && input.encrypted},\n` +
180
+ ` request: ${props.input !== undefined && props.input.encrypted},\n` +
178
181
  ` response: ${route.encrypted},\n` +
179
182
  (route.status !== undefined
180
183
  ? ` status: ${route.status},\n`
@@ -193,16 +196,16 @@ var FunctionGenerator;
193
196
  ? ` export const stringify = (input: Input) => typia.assertStringify(input);\n`
194
197
  : "") +
195
198
  "}");
196
- }
197
- function compute_path(query, parameters, path) {
198
- for (const param of parameters)
199
+ };
200
+ const compute_path = (props) => {
201
+ for (const param of props.parameters)
199
202
  if (param.category === "param")
200
- path = path.replace(`:${param.field}`, `\${encodeURIComponent(${param.name} ?? "null")}`);
203
+ props.path = props.path.replace(`:${param.field}`, `\${encodeURIComponent(${param.name} ?? "null")}`);
201
204
  // NO QUERY PARAMETER
202
- const queryParams = parameters.filter((param) => param.category === "query" && param.field !== undefined);
203
- if (query === undefined && queryParams.length === 0)
204
- return `${" ".repeat(8)}return \`${path}\``;
205
- const computeName = (str) => parameters.find((p) => p.name === str) !== undefined
205
+ const queryParams = props.parameters.filter((param) => param.category === "query" && param.field !== undefined);
206
+ if (props.query === undefined && queryParams.length === 0)
207
+ return `${" ".repeat(8)}return \`${props.path}\``;
208
+ const computeName = (str) => props.parameters.find((p) => p.name === str) !== undefined
206
209
  ? computeName("_" + str)
207
210
  : str;
208
211
  const variables = computeName("variables");
@@ -218,31 +221,29 @@ var FunctionGenerator;
218
221
  ` else`,
219
222
  ` ${search}.set(key, String(value));`,
220
223
  `const ${encoded}: string = ${search}.toString();`,
221
- `return \`${path}\${${encoded}.length ? \`?\${${encoded}}\` : ""}\`;`,
224
+ `return \`${props.path}\${${encoded}.length ? \`?\${${encoded}}\` : ""}\`;`,
222
225
  ]
223
226
  .map((str) => `${" ".repeat(8)}${str}`)
224
227
  .join("\n");
225
- if (query !== undefined && queryParams.length === 0)
226
- return wrapper(`${query.name} as any`);
227
- else if (query === undefined)
228
+ if (props.query !== undefined && queryParams.length === 0)
229
+ return wrapper(`${props.query.name} as any`);
230
+ else if (props.query === undefined)
228
231
  return wrapper(`
229
232
  {
230
233
  ${rest_query_parameters(queryParams)}
231
234
  } as any`);
232
235
  return wrapper(`
233
236
  {
234
- ...${query.name},
237
+ ...${props.query.name},
235
238
  ${rest_query_parameters(queryParams)},
236
239
  } as any`);
237
- }
238
- function rest_query_parameters(parameters) {
239
- return parameters
240
- .map((param) => param.name === param.field
241
- ? param.name
242
- : `${Escaper_1.Escaper.variable(param.field)
243
- ? param.field
244
- : JSON.stringify(param.field)}: ${param.name}`)
245
- .join(`,\n${" ".repeat(12)}`);
246
- }
247
- })(FunctionGenerator = exports.FunctionGenerator || (exports.FunctionGenerator = {}));
248
- //# sourceMappingURL=FunctionGenerator.js.map
240
+ };
241
+ const rest_query_parameters = (parameters) => parameters
242
+ .map((param) => param.name === param.field
243
+ ? param.name
244
+ : `${Escaper_1.Escaper.variable(param.field)
245
+ ? param.field
246
+ : JSON.stringify(param.field)}: ${param.name}`)
247
+ .join(`,\n${" ".repeat(12)}`);
248
+ })(SdkFunctionProgrammer = exports.SdkFunctionProgrammer || (exports.SdkFunctionProgrammer = {}));
249
+ //# sourceMappingURL=SdkFunctionProgrammer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SdkFunctionProgrammer.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkFunctionProgrammer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { HashMap } from "tstl";
2
+ import { IRoute } from "../../structures/IRoute";
3
+ export declare class SdkRouteDirectory {
4
+ readonly parent: SdkRouteDirectory | null;
5
+ readonly name: string;
6
+ readonly module: string;
7
+ readonly directories: HashMap<string, SdkRouteDirectory>;
8
+ readonly routes: IRoute[];
9
+ constructor(parent: SdkRouteDirectory | null, name: string);
10
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SdkRouteDirectory = void 0;
4
+ const tstl_1 = require("tstl");
5
+ class SdkRouteDirectory {
6
+ constructor(parent, name) {
7
+ this.parent = parent;
8
+ this.name = name;
9
+ this.directories = new tstl_1.HashMap();
10
+ this.routes = [];
11
+ this.module =
12
+ this.parent !== null
13
+ ? `${this.parent.module}.${name}`
14
+ : `api.${name}`;
15
+ }
16
+ }
17
+ exports.SdkRouteDirectory = SdkRouteDirectory;
18
+ //# sourceMappingURL=SdkRouteDirectory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SdkRouteDirectory.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkRouteDirectory.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAI/B,MAAa,iBAAiB;IAK1B,YACa,MAAgC,EAChC,IAAY;QADZ,WAAM,GAAN,MAAM,CAA0B;QAChC,SAAI,GAAJ,IAAI,CAAQ;QAErB,IAAI,CAAC,WAAW,GAAG,IAAI,cAAO,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM;YACP,IAAI,CAAC,MAAM,KAAK,IAAI;gBAChB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE;gBACjC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;IAC5B,CAAC;CACJ;AAhBD,8CAgBC"}
@@ -20,5 +20,9 @@ export declare namespace IController {
20
20
  field: string | undefined;
21
21
  category: ParamCategory;
22
22
  encrypted: boolean;
23
+ meta?: {
24
+ type: string;
25
+ nullable: boolean;
26
+ };
23
27
  }
24
28
  }
@@ -30,5 +30,9 @@ export declare namespace IRoute {
30
30
  encrypted: boolean;
31
31
  type: ITypeTuple;
32
32
  optional: boolean;
33
+ meta?: {
34
+ type: string;
35
+ nullable: boolean;
36
+ };
33
37
  }
34
38
  }
@@ -0,0 +1,4 @@
1
+ import { INestiaConfig } from "../INestiaConfig";
2
+ export declare namespace NestiaConfigUtil {
3
+ const input: (config: INestiaConfig["input"]) => INestiaConfig.IInput;
4
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NestiaConfigUtil = void 0;
4
+ var NestiaConfigUtil;
5
+ (function (NestiaConfigUtil) {
6
+ NestiaConfigUtil.input = (config) => {
7
+ var _a;
8
+ return Array.isArray(config)
9
+ ? {
10
+ include: config,
11
+ exclude: [],
12
+ }
13
+ : typeof config === "object"
14
+ ? {
15
+ include: config.include,
16
+ exclude: (_a = config.exclude) !== null && _a !== void 0 ? _a : [],
17
+ }
18
+ : {
19
+ include: [config],
20
+ exclude: [],
21
+ };
22
+ };
23
+ })(NestiaConfigUtil = exports.NestiaConfigUtil || (exports.NestiaConfigUtil = {}));
24
+ //# sourceMappingURL=NestiaConfigUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NestiaConfigUtil.js","sourceRoot":"","sources":["../../src/utils/NestiaConfigUtil.ts"],"names":[],"mappings":";;;AAEA,IAAiB,gBAAgB,CAkBhC;AAlBD,WAAiB,gBAAgB;IAChB,sBAAK,GAAG,CACjB,MAA8B,EACV,EAAE;;QACtB,OAAA,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACjB,CAAC,CAAC;gBACI,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,EAAE;aACd;YACH,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ;gBAC5B,CAAC,CAAC;oBACI,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,OAAO,EAAE,MAAA,MAAM,CAAC,OAAO,mCAAI,EAAE;iBAChC;gBACH,CAAC,CAAC;oBACI,OAAO,EAAE,CAAC,MAAM,CAAC;oBACjB,OAAO,EAAE,EAAE;iBACd,CAAA;KAAA,CAAC;AAChB,CAAC,EAlBgB,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAkBhC"}
@@ -0,0 +1,9 @@
1
+ export declare namespace SourceFinder {
2
+ const find: (props: IProps) => Promise<string[]>;
3
+ }
4
+ interface IProps {
5
+ exclude?: string[];
6
+ include: string[];
7
+ filter: (location: string) => boolean;
8
+ }
9
+ export {};
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.SourceFinder = void 0;
16
+ const fs_1 = __importDefault(require("fs"));
17
+ const glob_1 = __importDefault(require("glob"));
18
+ const path_1 = __importDefault(require("path"));
19
+ var SourceFinder;
20
+ (function (SourceFinder) {
21
+ SourceFinder.find = (props) => __awaiter(this, void 0, void 0, function* () {
22
+ var _a;
23
+ const dict = new Set();
24
+ yield emplace(props.filter)(props.include)((str) => dict.add(str));
25
+ if ((_a = props.exclude) === null || _a === void 0 ? void 0 : _a.length)
26
+ yield emplace(props.filter)(props.exclude)((str) => dict.delete(str));
27
+ return [...dict];
28
+ });
29
+ const emplace = (filter) => (input) => (closure) => __awaiter(this, void 0, void 0, function* () {
30
+ for (const pattern of input) {
31
+ for (const file of yield _Glob(path_1.default.resolve(pattern))) {
32
+ const stats = yield fs_1.default.promises.stat(file);
33
+ if (stats.isDirectory() === true)
34
+ yield iterate(filter)(closure)(file);
35
+ else if (stats.isFile() && filter(file))
36
+ closure(file);
37
+ }
38
+ }
39
+ });
40
+ const iterate = (filter) => (closure) => (location) => __awaiter(this, void 0, void 0, function* () {
41
+ const directory = yield fs_1.default.promises.readdir(location);
42
+ for (const file of directory) {
43
+ const next = path_1.default.resolve(`${location}/${file}`);
44
+ const stats = yield fs_1.default.promises.stat(next);
45
+ if (stats.isDirectory() === true)
46
+ yield iterate(filter)(closure)(next);
47
+ else if (stats.isFile() && filter(next))
48
+ closure(next);
49
+ }
50
+ });
51
+ const _Glob = (pattern) => new Promise((resolve, reject) => {
52
+ (0, glob_1.default)(pattern, (err, matches) => {
53
+ if (err)
54
+ reject(err);
55
+ else
56
+ resolve(matches.map((str) => path_1.default.resolve(str)));
57
+ });
58
+ });
59
+ })(SourceFinder = exports.SourceFinder || (exports.SourceFinder = {}));
60
+ //# sourceMappingURL=SourceFinder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SourceFinder.js","sourceRoot":"","sources":["../../src/utils/SourceFinder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestia/sdk",
3
- "version": "1.1.1",
3
+ "version": "1.2.0-dev.20230504-2",
4
4
  "description": "Nestia SDK and Swagger generator",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -42,7 +42,7 @@
42
42
  "tsconfck": "^2.0.1",
43
43
  "tsconfig-paths": "^4.1.1",
44
44
  "tstl": "^2.5.13",
45
- "typia": "^3.8.1"
45
+ "typia": "^3.8.4"
46
46
  },
47
47
  "peerDependencies": {
48
48
  "@nestjs/common": ">= 7.0.1",
@@ -52,7 +52,6 @@
52
52
  "typescript": ">= 4.5.2"
53
53
  },
54
54
  "devDependencies": {
55
- "@nestia/core": "^1.1.0",
56
55
  "@nestia/fetcher": "^1.1.2",
57
56
  "@trivago/prettier-plugin-sort-imports": "^4.0.0",
58
57
  "@types/cli": "^0.11.21",
@@ -21,6 +21,13 @@ export interface INestiaConfig {
21
21
  */
22
22
  output?: string;
23
23
 
24
+ /**
25
+ * Otput directory that e2e test codes would be placed in.
26
+ *
27
+ * If not configured, you can't generate e2e test functions.
28
+ */
29
+ e2e?: string;
30
+
24
31
  /**
25
32
  * Compiler options for the TypeScript.
26
33
  *
@@ -1,20 +1,21 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
3
  import * as runner from "ts-node";
4
- import { Singleton } from "tstl/thread/Singleton";
5
- import { Pair } from "tstl/utility/Pair";
4
+ import { Pair, Singleton } from "tstl";
6
5
  import ts from "typescript";
7
6
 
8
7
  import { INestiaConfig } from "./INestiaConfig";
9
8
  import { ControllerAnalyzer } from "./analyses/ControllerAnalyzer";
10
9
  import { ReflectAnalyzer } from "./analyses/ReflectAnalyzer";
11
- import { SourceFinder } from "./analyses/SourceFinder";
12
10
  import { NestiaConfigCompilerOptions } from "./executable/internal/NestiaConfigCompilerOptions";
11
+ import { E2eGenerator } from "./generates/E2eGenerator";
13
12
  import { SdkGenerator } from "./generates/SdkGenerator";
14
13
  import { SwaggerGenerator } from "./generates/SwaggerGenerator";
15
14
  import { IController } from "./structures/IController";
16
15
  import { IRoute } from "./structures/IRoute";
17
16
  import { ArrayUtil } from "./utils/ArrayUtil";
17
+ import { NestiaConfigUtil } from "./utils/NestiaConfigUtil";
18
+ import { SourceFinder } from "./utils/SourceFinder";
18
19
 
19
20
  export class NestiaSdkApplication {
20
21
  private readonly config_: INestiaConfig;
@@ -57,6 +58,39 @@ export class NestiaSdkApplication {
57
58
  });
58
59
  }
59
60
 
61
+ public async e2e(): Promise<void> {
62
+ if (!this.config_.output)
63
+ throw new Error(
64
+ "Error on NestiaApplication.e2e(): output path of SDK is not specified.",
65
+ );
66
+ else if (!this.config_.e2e)
67
+ throw new Error(
68
+ "Error on NestiaApplication.e2e(): output path of e2e test files is not specified.",
69
+ );
70
+
71
+ const validate =
72
+ (title: string) =>
73
+ async (location: string): Promise<void> => {
74
+ const parent: string = path.resolve(location + "/..");
75
+ const stats: fs.Stats = await fs.promises.lstat(parent);
76
+ if (stats.isDirectory() === false)
77
+ throw new Error(
78
+ `Error on NestiaApplication.e2e(): output directory of ${title} does not exists.`,
79
+ );
80
+ };
81
+ await validate("sdk")(this.config_.output);
82
+ await validate("e2e")(this.config_.e2e);
83
+
84
+ await this.generate(
85
+ (config) => config,
86
+ () => SdkGenerator.generate,
87
+ );
88
+ await this.generate(
89
+ (config) => config,
90
+ () => E2eGenerator.generate,
91
+ );
92
+ }
93
+
60
94
  public async sdk(): Promise<void> {
61
95
  if (!this.config_.output)
62
96
  throw new Error(
@@ -69,12 +103,14 @@ export class NestiaSdkApplication {
69
103
  throw new Error(
70
104
  "Error on NestiaApplication.sdk(): output directory does not exists.",
71
105
  );
72
-
73
- await this.generate((config) => config, SdkGenerator.generate);
106
+ await this.generate(
107
+ (config) => config,
108
+ () => SdkGenerator.generate,
109
+ );
74
110
  }
75
111
 
76
112
  public async swagger(): Promise<void> {
77
- if (!this.config_.swagger || !this.config_.swagger.output)
113
+ if (!this.config_.swagger?.output)
78
114
  throw new Error(
79
115
  `Error on NestiaApplication.swagger(): output path of the "swagger.json" is not specified.`,
80
116
  );
@@ -99,22 +135,23 @@ export class NestiaSdkApplication {
99
135
  config: (entire: INestiaConfig) => Config,
100
136
  archiver: (
101
137
  checker: ts.TypeChecker,
102
- config: Config,
103
- routes: IRoute[],
104
- ) => Promise<void>,
138
+ ) => (config: Config) => (routes: IRoute[]) => Promise<void>,
105
139
  ): Promise<void> {
106
140
  // MOUNT TS-NODE
107
141
  this.prepare();
108
142
 
109
143
  // LOAD CONTROLLER FILES
110
- const input: INestiaConfig.IInput =
111
- this.config_.input instanceof Array
112
- ? { include: this.config_.input }
113
- : typeof this.config_.input === "string"
114
- ? { include: [this.config_.input] }
115
- : this.config_.input;
144
+ const input: INestiaConfig.IInput = NestiaConfigUtil.input(
145
+ this.config_.input,
146
+ );
116
147
  const fileList: string[] = await ArrayUtil.asyncFilter(
117
- await SourceFinder.find(input),
148
+ await SourceFinder.find({
149
+ include: input.include,
150
+ exclude: input.exclude,
151
+ filter: (file) =>
152
+ file.substring(file.length - 3) === ".ts" &&
153
+ file.substring(file.length - 5) !== ".d.ts",
154
+ }),
118
155
  (file) => this.is_not_excluded(file),
119
156
  );
120
157
 
@@ -147,7 +184,7 @@ export class NestiaSdkApplication {
147
184
  }
148
185
 
149
186
  // DO GENERATE
150
- await archiver(checker, config(this.config_), routeList);
187
+ await archiver(checker)(config(this.config_))(routeList);
151
188
  }
152
189
 
153
190
  private prepare(): void {
@@ -253,6 +253,7 @@ export namespace ControllerAnalyzer {
253
253
  encrypted: param.encrypted,
254
254
  type: tuple,
255
255
  optional,
256
+ meta: param.meta,
256
257
  };
257
258
  }
258
259
  }
@@ -250,15 +250,25 @@ export namespace ReflectAnalyzer {
250
250
  field: param.data,
251
251
  encrypted: param.factory.name === "EncryptedBody",
252
252
  };
253
- } else if (param.factory.name === "TypedParam")
253
+ } else if (param.factory.name === "TypedParam") {
254
254
  return {
255
255
  name: param.name,
256
256
  category: "param",
257
257
  index: param.index,
258
258
  field: param.data,
259
259
  encrypted: false,
260
+ meta: (() => {
261
+ const type = (param.factory as any).type;
262
+ const nullable = (param.factory as any).nullable;
263
+ if (type !== undefined && nullable !== undefined)
264
+ return {
265
+ type,
266
+ nullable,
267
+ };
268
+ return undefined;
269
+ })(),
260
270
  };
261
- else if (param.factory.name === "TypedQuery")
271
+ } else if (param.factory.name === "TypedQuery")
262
272
  return {
263
273
  name: param.name,
264
274
  category: "query",