@nestia/sdk 1.0.7 → 1.0.9
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/LICENSE +21 -0
- package/assets/config/nestia.config.ts +70 -70
- package/lib/analyses/ControllerAnalyzer.js +15 -3
- package/lib/analyses/ControllerAnalyzer.js.map +1 -1
- package/lib/executable/internal/NestiaSdkConfig.js +298 -298
- package/lib/executable/sdk.js +16 -16
- package/lib/generates/FunctionGenerator.js +1 -1
- package/lib/generates/FunctionGenerator.js.map +1 -1
- package/lib/generates/SwaggerGenerator.js +11 -1
- package/lib/generates/SwaggerGenerator.js.map +1 -1
- package/lib/structures/IRoute.d.ts +1 -0
- package/lib/structures/ISwaggerDocument.d.ts +1 -1
- package/package.json +3 -3
- package/src/INestiaConfig.ts +147 -147
- package/src/NestiaSdkApplication.ts +183 -183
- package/src/analyses/ControllerAnalyzer.ts +245 -223
- package/src/analyses/GenericAnalyzer.ts +53 -53
- package/src/analyses/ImportAnalyzer.ts +143 -143
- package/src/analyses/PathAnalyzer.ts +58 -58
- package/src/analyses/ReflectAnalyzer.ts +287 -287
- package/src/analyses/SourceFinder.ts +59 -59
- package/src/executable/internal/CommandParser.ts +15 -15
- package/src/executable/internal/NestiaConfigCompilerOptions.ts +18 -18
- package/src/executable/internal/NestiaSdkCommand.ts +174 -174
- package/src/executable/internal/nestia.config.getter.ts +12 -12
- package/src/executable/sdk.ts +74 -74
- package/src/generates/FileGenerator.ts +156 -156
- package/src/generates/FunctionGenerator.ts +1 -1
- package/src/generates/SdkGenerator.ts +50 -50
- package/src/generates/SwaggerGenerator.ts +12 -1
- package/src/module.ts +2 -2
- package/src/structures/IController.ts +27 -27
- package/src/structures/IRoute.ts +34 -33
- package/src/structures/ISwaggerDocument.ts +119 -119
- package/src/structures/ITypeTuple.ts +6 -6
- package/src/structures/MethodType.ts +11 -11
- package/src/structures/ParamCategory.ts +1 -1
- package/src/structures/TypeEntry.ts +22 -22
- package/src/utils/ArrayUtil.ts +26 -26
- package/src/utils/ImportDictionary.ts +56 -56
- package/src/utils/MapUtil.ts +14 -14
- package/src/utils/StripEnums.ts +10 -10
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 Jeongho Nam
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
import { INestiaSdkConfiguration } from "@nestia/sdk";
|
|
2
|
-
|
|
3
|
-
export const NESTIA_CONFIG: INestiaSdkConfiguration = {
|
|
4
|
-
/**
|
|
5
|
-
* List of files or directories containing the NestJS controller classes.
|
|
6
|
-
*/
|
|
7
|
-
input: "src/controllers",
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Output directory that SDK would be placed in.
|
|
11
|
-
*
|
|
12
|
-
* If not configured, you can't build the SDK library.
|
|
13
|
-
*/
|
|
14
|
-
output: "src/api",
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Whether to assert parameter types or not.
|
|
18
|
-
*
|
|
19
|
-
* If you configure this property to be `true`, all of the function parameters would be
|
|
20
|
-
* checked through the [typia](https://github.com/samchon/typia#runtime-type-checkers).
|
|
21
|
-
* This option would make your SDK library slower, but would enahcne the type safety even
|
|
22
|
-
* in the runtime level.
|
|
23
|
-
*
|
|
24
|
-
* @default false
|
|
25
|
-
*/
|
|
26
|
-
// assert: true,
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Whether to optimize JSON string conversion 2x faster or not.
|
|
30
|
-
*
|
|
31
|
-
* If you configure this property to be `true`, the SDK library would utilize the
|
|
32
|
-
* [typia](https://github.com/samchon/typia#fastest-json-string-converter)
|
|
33
|
-
* and the JSON string conversion speed really be 2x faster.
|
|
34
|
-
*
|
|
35
|
-
* @default false
|
|
36
|
-
*/
|
|
37
|
-
// json: true,
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Whether to wrap DTO by primitive type.
|
|
41
|
-
*
|
|
42
|
-
* If you don't configure this property as `false`, all of DTOs in the
|
|
43
|
-
* SDK library would be automatically wrapped by {@link Primitive} type.
|
|
44
|
-
*
|
|
45
|
-
* For refenrece, if a DTO type be capsuled by the {@link Primitive} type,
|
|
46
|
-
* all of methods in the DTO type would be automatically erased. Also, if
|
|
47
|
-
* the DTO has a `toJSON()` method, the DTO type would be automatically
|
|
48
|
-
* converted to return type of the `toJSON()` method.
|
|
49
|
-
*
|
|
50
|
-
* @default true
|
|
51
|
-
*/
|
|
52
|
-
// primitive: false,
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Building `swagger.json` is also possible.
|
|
56
|
-
*
|
|
57
|
-
* If not specified, you can't build the `swagger.json`.
|
|
58
|
-
*/
|
|
59
|
-
swagger: {
|
|
60
|
-
/**
|
|
61
|
-
* Output path of the `swagger.json`.
|
|
62
|
-
*
|
|
63
|
-
* If you've configured only directory, the file name would be the `swagger.json`.
|
|
64
|
-
* Otherwise you've configured the full path with file name and extension, the
|
|
65
|
-
* `swagger.json` file would be renamed to it.
|
|
66
|
-
*/
|
|
67
|
-
output: "dist/swagger.json",
|
|
68
|
-
},
|
|
69
|
-
};
|
|
70
|
-
export default NESTIA_CONFIG;
|
|
1
|
+
import { INestiaSdkConfiguration } from "@nestia/sdk";
|
|
2
|
+
|
|
3
|
+
export const NESTIA_CONFIG: INestiaSdkConfiguration = {
|
|
4
|
+
/**
|
|
5
|
+
* List of files or directories containing the NestJS controller classes.
|
|
6
|
+
*/
|
|
7
|
+
input: "src/controllers",
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Output directory that SDK would be placed in.
|
|
11
|
+
*
|
|
12
|
+
* If not configured, you can't build the SDK library.
|
|
13
|
+
*/
|
|
14
|
+
output: "src/api",
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Whether to assert parameter types or not.
|
|
18
|
+
*
|
|
19
|
+
* If you configure this property to be `true`, all of the function parameters would be
|
|
20
|
+
* checked through the [typia](https://github.com/samchon/typia#runtime-type-checkers).
|
|
21
|
+
* This option would make your SDK library slower, but would enahcne the type safety even
|
|
22
|
+
* in the runtime level.
|
|
23
|
+
*
|
|
24
|
+
* @default false
|
|
25
|
+
*/
|
|
26
|
+
// assert: true,
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Whether to optimize JSON string conversion 2x faster or not.
|
|
30
|
+
*
|
|
31
|
+
* If you configure this property to be `true`, the SDK library would utilize the
|
|
32
|
+
* [typia](https://github.com/samchon/typia#fastest-json-string-converter)
|
|
33
|
+
* and the JSON string conversion speed really be 2x faster.
|
|
34
|
+
*
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
// json: true,
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Whether to wrap DTO by primitive type.
|
|
41
|
+
*
|
|
42
|
+
* If you don't configure this property as `false`, all of DTOs in the
|
|
43
|
+
* SDK library would be automatically wrapped by {@link Primitive} type.
|
|
44
|
+
*
|
|
45
|
+
* For refenrece, if a DTO type be capsuled by the {@link Primitive} type,
|
|
46
|
+
* all of methods in the DTO type would be automatically erased. Also, if
|
|
47
|
+
* the DTO has a `toJSON()` method, the DTO type would be automatically
|
|
48
|
+
* converted to return type of the `toJSON()` method.
|
|
49
|
+
*
|
|
50
|
+
* @default true
|
|
51
|
+
*/
|
|
52
|
+
// primitive: false,
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Building `swagger.json` is also possible.
|
|
56
|
+
*
|
|
57
|
+
* If not specified, you can't build the `swagger.json`.
|
|
58
|
+
*/
|
|
59
|
+
swagger: {
|
|
60
|
+
/**
|
|
61
|
+
* Output path of the `swagger.json`.
|
|
62
|
+
*
|
|
63
|
+
* If you've configured only directory, the file name would be the `swagger.json`.
|
|
64
|
+
* Otherwise you've configured the full path with file name and extension, the
|
|
65
|
+
* `swagger.json` file would be renamed to it.
|
|
66
|
+
*/
|
|
67
|
+
output: "dist/swagger.json",
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
export default NESTIA_CONFIG;
|
|
@@ -105,21 +105,33 @@ var ControllerAnalyzer;
|
|
|
105
105
|
PARAMETER
|
|
106
106
|
--------------------------------------------------------- */
|
|
107
107
|
function _Analyze_parameter(checker, genericDict, importDict, controller, funcName, param, symbol) {
|
|
108
|
+
var _a;
|
|
108
109
|
const type = checker.getTypeOfSymbolAtLocation(symbol, symbol.valueDeclaration);
|
|
109
110
|
const name = symbol.getEscapedName().toString();
|
|
111
|
+
const method = `${controller.name}.${funcName}()`;
|
|
112
|
+
const optional = !!((_a = checker.symbolToParameterDeclaration(symbol, undefined, undefined)) === null || _a === void 0 ? void 0 : _a.questionToken);
|
|
110
113
|
// DO NOT SUPPORT BODY PARAMETER
|
|
111
|
-
if (param.category === "body" && param.field !== undefined)
|
|
112
|
-
const method = `${controller.name}.${funcName}()`;
|
|
114
|
+
if (param.category === "body" && param.field !== undefined)
|
|
113
115
|
throw new Error(`Error on ${method}: nestia does not support body field specification. ` +
|
|
114
116
|
`Therefore, erase the ${method}#${name} parameter and ` +
|
|
115
117
|
`re-define a new body decorator accepting full structured message.`);
|
|
116
|
-
|
|
118
|
+
else if (optional === true && param.category !== "query")
|
|
119
|
+
throw new Error(`Error on ${method}: nestia does not support optional parameter except query parameter. ` +
|
|
120
|
+
`Therefore, erase question mark on ${method}#${name} parameter, ` +
|
|
121
|
+
`or re-define a new method without the "name" parameter.`);
|
|
122
|
+
else if (optional === true &&
|
|
123
|
+
param.category === "query" &&
|
|
124
|
+
param.field === undefined)
|
|
125
|
+
throw new Error(`Error on ${method}: nestia does not support optional query parameter without field specification. ` +
|
|
126
|
+
`Therefore, erase question mark on ${method}#${name} parameter, ` +
|
|
127
|
+
`or re-define re-define parameters for each query parameters.`);
|
|
117
128
|
return {
|
|
118
129
|
name,
|
|
119
130
|
category: param.category,
|
|
120
131
|
field: param.field,
|
|
121
132
|
encrypted: param.encrypted,
|
|
122
133
|
type: ImportAnalyzer_1.ImportAnalyzer.analyze(checker, genericDict, importDict, type),
|
|
134
|
+
optional,
|
|
123
135
|
};
|
|
124
136
|
}
|
|
125
137
|
})(ControllerAnalyzer = exports.ControllerAnalyzer || (exports.ControllerAnalyzer = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ControllerAnalyzer.js","sourceRoot":"","sources":["../../src/analyses/ControllerAnalyzer.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAiD;AACjD,4DAA4B;AAK5B,uDAAoD;AACpD,qDAAkD;AAClD,iDAA8C;AAE9C,IAAiB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"ControllerAnalyzer.js","sourceRoot":"","sources":["../../src/analyses/ControllerAnalyzer.ts"],"names":[],"mappings":"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"}
|