@nestia/core 4.4.1 → 4.4.2-dev.20241217

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 (88) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +87 -87
  3. package/lib/programmers/TypedBodyProgrammer.js +1 -2
  4. package/lib/programmers/TypedBodyProgrammer.js.map +1 -1
  5. package/lib/programmers/TypedQueryBodyProgrammer.js +6 -6
  6. package/lib/programmers/TypedQueryBodyProgrammer.js.map +1 -1
  7. package/lib/programmers/TypedQueryProgrammer.js +5 -5
  8. package/lib/programmers/TypedQueryProgrammer.js.map +1 -1
  9. package/lib/programmers/TypedQueryRouteProgrammer.js +5 -5
  10. package/lib/programmers/TypedQueryRouteProgrammer.js.map +1 -1
  11. package/lib/programmers/TypedRouteProgrammer.js +1 -2
  12. package/lib/programmers/TypedRouteProgrammer.js.map +1 -1
  13. package/package.json +3 -3
  14. package/src/adaptors/WebSocketAdaptor.ts +426 -426
  15. package/src/decorators/DynamicModule.ts +43 -43
  16. package/src/decorators/EncryptedBody.ts +101 -101
  17. package/src/decorators/EncryptedController.ts +38 -38
  18. package/src/decorators/EncryptedModule.ts +100 -100
  19. package/src/decorators/EncryptedRoute.ts +219 -219
  20. package/src/decorators/NoTransformConfigurationError.ts +32 -32
  21. package/src/decorators/PlainBody.ts +79 -79
  22. package/src/decorators/SwaggerCustomizer.ts +115 -115
  23. package/src/decorators/SwaggerExample.ts +100 -100
  24. package/src/decorators/TypedBody.ts +59 -59
  25. package/src/decorators/TypedException.ts +128 -128
  26. package/src/decorators/TypedFormData.ts +195 -195
  27. package/src/decorators/TypedHeaders.ts +64 -64
  28. package/src/decorators/TypedParam.ts +77 -77
  29. package/src/decorators/TypedQuery.ts +245 -245
  30. package/src/decorators/TypedRoute.ts +214 -214
  31. package/src/decorators/WebSocketRoute.ts +242 -242
  32. package/src/decorators/internal/EncryptedConstant.ts +4 -4
  33. package/src/decorators/internal/IWebSocketRouteReflect.ts +23 -23
  34. package/src/decorators/internal/NoTransformConfigureError.ts +2 -2
  35. package/src/decorators/internal/get_path_and_querify.ts +108 -108
  36. package/src/decorators/internal/get_path_and_stringify.ts +122 -122
  37. package/src/decorators/internal/get_text_body.ts +20 -20
  38. package/src/decorators/internal/headers_to_object.ts +13 -13
  39. package/src/decorators/internal/is_request_body_undefined.ts +14 -14
  40. package/src/decorators/internal/load_controller.ts +49 -49
  41. package/src/decorators/internal/route_error.ts +45 -45
  42. package/src/decorators/internal/validate_request_body.ts +74 -74
  43. package/src/decorators/internal/validate_request_form_data.ts +77 -77
  44. package/src/decorators/internal/validate_request_headers.ts +86 -86
  45. package/src/decorators/internal/validate_request_query.ts +74 -74
  46. package/src/index.ts +5 -5
  47. package/src/module.ts +21 -21
  48. package/src/options/INestiaTransformOptions.ts +38 -38
  49. package/src/options/INestiaTransformProject.ts +8 -8
  50. package/src/options/IRequestBodyValidator.ts +20 -20
  51. package/src/options/IRequestFormDataProps.ts +27 -27
  52. package/src/options/IRequestHeadersValidator.ts +22 -22
  53. package/src/options/IRequestQueryValidator.ts +20 -20
  54. package/src/options/IResponseBodyQuerifier.ts +25 -25
  55. package/src/options/IResponseBodyStringifier.ts +30 -30
  56. package/src/programmers/PlainBodyProgrammer.ts +70 -70
  57. package/src/programmers/TypedBodyProgrammer.ts +142 -143
  58. package/src/programmers/TypedFormDataBodyProgrammer.ts +118 -118
  59. package/src/programmers/TypedHeadersProgrammer.ts +63 -63
  60. package/src/programmers/TypedParamProgrammer.ts +33 -33
  61. package/src/programmers/TypedQueryBodyProgrammer.ts +112 -106
  62. package/src/programmers/TypedQueryProgrammer.ts +114 -108
  63. package/src/programmers/TypedQueryRouteProgrammer.ts +105 -99
  64. package/src/programmers/TypedRouteProgrammer.ts +94 -95
  65. package/src/programmers/http/HttpAssertQuerifyProgrammer.ts +72 -72
  66. package/src/programmers/http/HttpIsQuerifyProgrammer.ts +75 -75
  67. package/src/programmers/http/HttpQuerifyProgrammer.ts +108 -108
  68. package/src/programmers/http/HttpValidateQuerifyProgrammer.ts +76 -76
  69. package/src/programmers/internal/CoreMetadataUtil.ts +21 -21
  70. package/src/transform.ts +35 -35
  71. package/src/transformers/FileTransformer.ts +110 -110
  72. package/src/transformers/MethodTransformer.ts +103 -103
  73. package/src/transformers/NodeTransformer.ts +23 -23
  74. package/src/transformers/ParameterDecoratorTransformer.ts +143 -143
  75. package/src/transformers/ParameterTransformer.ts +57 -57
  76. package/src/transformers/TypedRouteTransformer.ts +85 -85
  77. package/src/transformers/WebSocketRouteTransformer.ts +120 -120
  78. package/src/typings/Creator.ts +3 -3
  79. package/src/typings/get-function-location.d.ts +7 -7
  80. package/src/utils/ArrayUtil.ts +7 -7
  81. package/src/utils/ExceptionManager.ts +112 -112
  82. package/src/utils/Singleton.ts +20 -20
  83. package/src/utils/SourceFinder.ts +57 -57
  84. package/src/utils/VersioningStrategy.ts +27 -27
  85. package/lib/programmers/internal/LlmValidatePredicator.d.ts +0 -5
  86. package/lib/programmers/internal/LlmValidatePredicator.js +0 -18
  87. package/lib/programmers/internal/LlmValidatePredicator.js.map +0 -1
  88. package/src/programmers/internal/LlmValidatePredicator.ts +0 -16
@@ -1,108 +1,114 @@
1
- import ts from "typescript";
2
- import { MetadataCollection } from "typia/lib/factories/MetadataCollection";
3
- import { MetadataFactory } from "typia/lib/factories/MetadataFactory";
4
- import { HttpAssertQueryProgrammer } from "typia/lib/programmers/http/HttpAssertQueryProgrammer";
5
- import { HttpIsQueryProgrammer } from "typia/lib/programmers/http/HttpIsQueryProgrammer";
6
- import { HttpQueryProgrammer } from "typia/lib/programmers/http/HttpQueryProgrammer";
7
- import { HttpValidateQueryProgrammer } from "typia/lib/programmers/http/HttpValidateQueryProgrammer";
8
- import { LlmSchemaProgrammer } from "typia/lib/programmers/llm/LlmSchemaProgrammer";
9
- import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
10
- import { TransformerError } from "typia/lib/transformers/TransformerError";
11
-
12
- import { INestiaTransformContext } from "../options/INestiaTransformProject";
13
- import { IRequestQueryValidator } from "../options/IRequestQueryValidator";
14
- import { LlmValidatePredicator } from "./internal/LlmValidatePredicator";
15
-
16
- export namespace TypedQueryProgrammer {
17
- export const generate = (props: {
18
- context: INestiaTransformContext;
19
- modulo: ts.LeftHandSideExpression;
20
- type: ts.Type;
21
- }): ts.Expression => {
22
- // VALIDATE TYPE
23
- if (LlmValidatePredicator.is(props.context.options.llm)) {
24
- const result = MetadataFactory.analyze({
25
- checker: props.context.checker,
26
- transformer: props.context.transformer,
27
- options: {
28
- escape: false,
29
- constant: true,
30
- absorb: true,
31
- validate: (meta, explore) => {
32
- const errors: string[] = HttpQueryProgrammer.validate(
33
- meta,
34
- explore,
35
- true,
36
- );
37
- errors.push(
38
- ...LlmSchemaProgrammer.validate({
39
- model: props.context.options.llm!.model,
40
- config: {
41
- strict: props.context.options.llm!.strict,
42
- recursive: props.context.options.llm!.recursive,
43
- },
44
- })(meta),
45
- );
46
- return errors;
47
- },
48
- },
49
- collection: new MetadataCollection(),
50
- type: props.type,
51
- });
52
- if (result.success === false)
53
- throw TransformerError.from({
54
- code: "@nestia.core.TypedQuery",
55
- errors: result.errors,
56
- });
57
- }
58
-
59
- // GENERATE VALIDATION PLAN
60
- const parameter =
61
- (key: IRequestQueryValidator<any>["type"]) =>
62
- (
63
- programmer: (next: {
64
- context: ITypiaContext;
65
- modulo: ts.LeftHandSideExpression;
66
- type: ts.Type;
67
- name: string | undefined;
68
- allowOptional: boolean;
69
- }) => ts.Expression,
70
- ) =>
71
- ts.factory.createObjectLiteralExpression([
72
- ts.factory.createPropertyAssignment(
73
- ts.factory.createIdentifier("type"),
74
- ts.factory.createStringLiteral(key),
75
- ),
76
- ts.factory.createPropertyAssignment(
77
- ts.factory.createIdentifier(key),
78
- programmer({
79
- context: {
80
- ...props.context,
81
- options: {
82
- numeric: false,
83
- finite: false,
84
- functional: false,
85
- },
86
- },
87
- modulo: props.modulo,
88
- type: props.type,
89
- name: undefined,
90
- allowOptional: true,
91
- }),
92
- ),
93
- ]);
94
-
95
- // RETURNS
96
- const category = props.context.options.validate;
97
- if (category === "is" || category === "equals")
98
- return parameter("is")(HttpIsQueryProgrammer.write);
99
- else if (
100
- category === "validate" ||
101
- category === "validateEquals" ||
102
- category === "validateClone" ||
103
- category === "validatePrune"
104
- )
105
- return parameter("validate")(HttpValidateQueryProgrammer.write);
106
- return parameter("assert")(HttpAssertQueryProgrammer.write);
107
- };
108
- }
1
+ import { ILlmSchema } from "@samchon/openapi";
2
+ import ts from "typescript";
3
+ import { MetadataCollection } from "typia/lib/factories/MetadataCollection";
4
+ import { MetadataFactory } from "typia/lib/factories/MetadataFactory";
5
+ import { HttpAssertQueryProgrammer } from "typia/lib/programmers/http/HttpAssertQueryProgrammer";
6
+ import { HttpIsQueryProgrammer } from "typia/lib/programmers/http/HttpIsQueryProgrammer";
7
+ import { HttpQueryProgrammer } from "typia/lib/programmers/http/HttpQueryProgrammer";
8
+ import { HttpValidateQueryProgrammer } from "typia/lib/programmers/http/HttpValidateQueryProgrammer";
9
+ import { LlmSchemaProgrammer } from "typia/lib/programmers/llm/LlmSchemaProgrammer";
10
+ import { Metadata } from "typia/lib/schemas/metadata/Metadata";
11
+ import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
12
+ import { TransformerError } from "typia/lib/transformers/TransformerError";
13
+ import { ValidationPipe } from "typia/lib/typings/ValidationPipe";
14
+
15
+ import { INestiaTransformOptions } from "../options/INestiaTransformOptions";
16
+ import { INestiaTransformContext } from "../options/INestiaTransformProject";
17
+ import { IRequestQueryValidator } from "../options/IRequestQueryValidator";
18
+
19
+ export namespace TypedQueryProgrammer {
20
+ export const generate = (props: {
21
+ context: INestiaTransformContext;
22
+ modulo: ts.LeftHandSideExpression;
23
+ type: ts.Type;
24
+ }): ts.Expression => {
25
+ // VALIDATE TYPE
26
+ if (props.context.options.llm) {
27
+ const llm: INestiaTransformOptions.ILlm<ILlmSchema.Model> =
28
+ props.context.options.llm;
29
+ const result: ValidationPipe<Metadata, MetadataFactory.IError> =
30
+ MetadataFactory.analyze({
31
+ checker: props.context.checker,
32
+ transformer: props.context.transformer,
33
+ options: {
34
+ escape: false,
35
+ constant: true,
36
+ absorb: true,
37
+ validate: (meta, explore) => {
38
+ const errors: string[] = HttpQueryProgrammer.validate(
39
+ meta,
40
+ explore,
41
+ true,
42
+ );
43
+ errors.push(
44
+ ...LlmSchemaProgrammer.validate({
45
+ model: llm.model,
46
+ config: {
47
+ strict: llm.strict,
48
+ recursive: llm.recursive,
49
+ },
50
+ })(meta),
51
+ );
52
+ return errors;
53
+ },
54
+ },
55
+ collection: new MetadataCollection(),
56
+ type: props.type,
57
+ });
58
+ if (result.success === false)
59
+ throw TransformerError.from({
60
+ code: "@nestia.core.TypedQuery",
61
+ errors: result.errors,
62
+ });
63
+ }
64
+
65
+ // GENERATE VALIDATION PLAN
66
+ const parameter =
67
+ (key: IRequestQueryValidator<any>["type"]) =>
68
+ (
69
+ programmer: (next: {
70
+ context: ITypiaContext;
71
+ modulo: ts.LeftHandSideExpression;
72
+ type: ts.Type;
73
+ name: string | undefined;
74
+ allowOptional: boolean;
75
+ }) => ts.Expression,
76
+ ) =>
77
+ ts.factory.createObjectLiteralExpression([
78
+ ts.factory.createPropertyAssignment(
79
+ ts.factory.createIdentifier("type"),
80
+ ts.factory.createStringLiteral(key),
81
+ ),
82
+ ts.factory.createPropertyAssignment(
83
+ ts.factory.createIdentifier(key),
84
+ programmer({
85
+ context: {
86
+ ...props.context,
87
+ options: {
88
+ numeric: false,
89
+ finite: false,
90
+ functional: false,
91
+ },
92
+ },
93
+ modulo: props.modulo,
94
+ type: props.type,
95
+ name: undefined,
96
+ allowOptional: true,
97
+ }),
98
+ ),
99
+ ]);
100
+
101
+ // RETURNS
102
+ const category = props.context.options.validate;
103
+ if (category === "is" || category === "equals")
104
+ return parameter("is")(HttpIsQueryProgrammer.write);
105
+ else if (
106
+ category === "validate" ||
107
+ category === "validateEquals" ||
108
+ category === "validateClone" ||
109
+ category === "validatePrune"
110
+ )
111
+ return parameter("validate")(HttpValidateQueryProgrammer.write);
112
+ return parameter("assert")(HttpAssertQueryProgrammer.write);
113
+ };
114
+ }
@@ -1,99 +1,105 @@
1
- import ts from "typescript";
2
- import { MetadataCollection } from "typia/lib/factories/MetadataCollection";
3
- import { MetadataFactory } from "typia/lib/factories/MetadataFactory";
4
- import { HttpQueryProgrammer } from "typia/lib/programmers/http/HttpQueryProgrammer";
5
- import { LlmSchemaProgrammer } from "typia/lib/programmers/llm/LlmSchemaProgrammer";
6
- import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
7
- import { TransformerError } from "typia/lib/transformers/TransformerError";
8
-
9
- import { INestiaTransformContext } from "../options/INestiaTransformProject";
10
- import { HttpAssertQuerifyProgrammer } from "./http/HttpAssertQuerifyProgrammer";
11
- import { HttpIsQuerifyProgrammer } from "./http/HttpIsQuerifyProgrammer";
12
- import { HttpQuerifyProgrammer } from "./http/HttpQuerifyProgrammer";
13
- import { HttpValidateQuerifyProgrammer } from "./http/HttpValidateQuerifyProgrammer";
14
- import { LlmValidatePredicator } from "./internal/LlmValidatePredicator";
15
-
16
- export namespace TypedQueryRouteProgrammer {
17
- export const generate = (props: {
18
- context: INestiaTransformContext;
19
- modulo: ts.LeftHandSideExpression;
20
- type: ts.Type;
21
- }): ts.Expression => {
22
- // VALIDATE TYPE
23
- if (LlmValidatePredicator.is(props.context.options.llm)) {
24
- const result = MetadataFactory.analyze({
25
- checker: props.context.checker,
26
- transformer: props.context.transformer,
27
- options: {
28
- escape: false,
29
- constant: true,
30
- absorb: true,
31
- validate: (meta, explore) => {
32
- const errors: string[] = HttpQueryProgrammer.validate(
33
- meta,
34
- explore,
35
- true,
36
- );
37
- errors.push(
38
- ...LlmSchemaProgrammer.validate({
39
- model: props.context.options.llm!.model,
40
- config: {
41
- strict: props.context.options.llm!.strict,
42
- recursive: props.context.options.llm!.recursive,
43
- },
44
- })(meta),
45
- );
46
- return errors;
47
- },
48
- },
49
- collection: new MetadataCollection(),
50
- type: props.type,
51
- });
52
- if (result.success === false)
53
- throw TransformerError.from({
54
- code: props.modulo.getText(),
55
- errors: result.errors,
56
- });
57
- }
58
-
59
- // GENERATE STRINGIFY PLAN
60
- const parameter = (
61
- key: string,
62
- programmer: (next: {
63
- context: ITypiaContext;
64
- modulo: ts.LeftHandSideExpression;
65
- type: ts.Type;
66
- }) => ts.ArrowFunction,
67
- ) =>
68
- ts.factory.createObjectLiteralExpression([
69
- ts.factory.createPropertyAssignment(
70
- ts.factory.createIdentifier("type"),
71
- ts.factory.createStringLiteral(key),
72
- ),
73
- ts.factory.createPropertyAssignment(
74
- ts.factory.createIdentifier(key),
75
- programmer({
76
- context: {
77
- ...props.context,
78
- options: {}, // use default option
79
- },
80
- modulo: props.modulo,
81
- type: props.type,
82
- }),
83
- ),
84
- ]);
85
-
86
- // RETURNS
87
- if (props.context.options.stringify === "is")
88
- return parameter("is", HttpIsQuerifyProgrammer.write);
89
- else if (props.context.options.stringify === "validate")
90
- return parameter("validate", HttpValidateQuerifyProgrammer.write);
91
- else if (props.context.options.stringify === "stringify")
92
- return parameter("stringify", HttpQuerifyProgrammer.write);
93
- else if (props.context.options.stringify === null)
94
- return ts.factory.createNull();
95
-
96
- // ASSERT IS DEFAULT
97
- return parameter("assert", HttpAssertQuerifyProgrammer.write);
98
- };
99
- }
1
+ import { ILlmSchema } from "@samchon/openapi";
2
+ import ts from "typescript";
3
+ import { MetadataCollection } from "typia/lib/factories/MetadataCollection";
4
+ import { MetadataFactory } from "typia/lib/factories/MetadataFactory";
5
+ import { HttpQueryProgrammer } from "typia/lib/programmers/http/HttpQueryProgrammer";
6
+ import { LlmSchemaProgrammer } from "typia/lib/programmers/llm/LlmSchemaProgrammer";
7
+ import { Metadata } from "typia/lib/schemas/metadata/Metadata";
8
+ import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
9
+ import { TransformerError } from "typia/lib/transformers/TransformerError";
10
+ import { ValidationPipe } from "typia/lib/typings/ValidationPipe";
11
+
12
+ import { INestiaTransformOptions } from "../options/INestiaTransformOptions";
13
+ import { INestiaTransformContext } from "../options/INestiaTransformProject";
14
+ import { HttpAssertQuerifyProgrammer } from "./http/HttpAssertQuerifyProgrammer";
15
+ import { HttpIsQuerifyProgrammer } from "./http/HttpIsQuerifyProgrammer";
16
+ import { HttpQuerifyProgrammer } from "./http/HttpQuerifyProgrammer";
17
+ import { HttpValidateQuerifyProgrammer } from "./http/HttpValidateQuerifyProgrammer";
18
+
19
+ export namespace TypedQueryRouteProgrammer {
20
+ export const generate = (props: {
21
+ context: INestiaTransformContext;
22
+ modulo: ts.LeftHandSideExpression;
23
+ type: ts.Type;
24
+ }): ts.Expression => {
25
+ // VALIDATE TYPE
26
+ if (props.context.options.llm) {
27
+ const llm: INestiaTransformOptions.ILlm<ILlmSchema.Model> =
28
+ props.context.options.llm;
29
+ const result: ValidationPipe<Metadata, MetadataFactory.IError> =
30
+ MetadataFactory.analyze({
31
+ checker: props.context.checker,
32
+ transformer: props.context.transformer,
33
+ options: {
34
+ escape: false,
35
+ constant: true,
36
+ absorb: true,
37
+ validate: (meta, explore) => {
38
+ const errors: string[] = HttpQueryProgrammer.validate(
39
+ meta,
40
+ explore,
41
+ true,
42
+ );
43
+ errors.push(
44
+ ...LlmSchemaProgrammer.validate({
45
+ model: llm.model,
46
+ config: {
47
+ strict: llm.strict,
48
+ recursive: llm.recursive,
49
+ },
50
+ })(meta),
51
+ );
52
+ return errors;
53
+ },
54
+ },
55
+ collection: new MetadataCollection(),
56
+ type: props.type,
57
+ });
58
+ if (result.success === false)
59
+ throw TransformerError.from({
60
+ code: props.modulo.getText(),
61
+ errors: result.errors,
62
+ });
63
+ }
64
+
65
+ // GENERATE STRINGIFY PLAN
66
+ const parameter = (
67
+ key: string,
68
+ programmer: (next: {
69
+ context: ITypiaContext;
70
+ modulo: ts.LeftHandSideExpression;
71
+ type: ts.Type;
72
+ }) => ts.ArrowFunction,
73
+ ) =>
74
+ ts.factory.createObjectLiteralExpression([
75
+ ts.factory.createPropertyAssignment(
76
+ ts.factory.createIdentifier("type"),
77
+ ts.factory.createStringLiteral(key),
78
+ ),
79
+ ts.factory.createPropertyAssignment(
80
+ ts.factory.createIdentifier(key),
81
+ programmer({
82
+ context: {
83
+ ...props.context,
84
+ options: {}, // use default option
85
+ },
86
+ modulo: props.modulo,
87
+ type: props.type,
88
+ }),
89
+ ),
90
+ ]);
91
+
92
+ // RETURNS
93
+ if (props.context.options.stringify === "is")
94
+ return parameter("is", HttpIsQuerifyProgrammer.write);
95
+ else if (props.context.options.stringify === "validate")
96
+ return parameter("validate", HttpValidateQuerifyProgrammer.write);
97
+ else if (props.context.options.stringify === "stringify")
98
+ return parameter("stringify", HttpQuerifyProgrammer.write);
99
+ else if (props.context.options.stringify === null)
100
+ return ts.factory.createNull();
101
+
102
+ // ASSERT IS DEFAULT
103
+ return parameter("assert", HttpAssertQuerifyProgrammer.write);
104
+ };
105
+ }
@@ -1,95 +1,94 @@
1
- import ts from "typescript";
2
- import { JsonMetadataFactory } from "typia/lib/factories/JsonMetadataFactory";
3
- import { JsonAssertStringifyProgrammer } from "typia/lib/programmers/json/JsonAssertStringifyProgrammer";
4
- import { JsonIsStringifyProgrammer } from "typia/lib/programmers/json/JsonIsStringifyProgrammer";
5
- import { JsonStringifyProgrammer } from "typia/lib/programmers/json/JsonStringifyProgrammer";
6
- import { JsonValidateStringifyProgrammer } from "typia/lib/programmers/json/JsonValidateStringifyProgrammer";
7
- import { LlmSchemaProgrammer } from "typia/lib/programmers/llm/LlmSchemaProgrammer";
8
- import { IProgrammerProps } from "typia/lib/transformers/IProgrammerProps";
9
-
10
- import { INestiaTransformContext } from "../options/INestiaTransformProject";
11
- import { LlmValidatePredicator } from "./internal/LlmValidatePredicator";
12
-
13
- export namespace TypedRouteProgrammer {
14
- export const generate = (props: {
15
- context: INestiaTransformContext;
16
- modulo: ts.LeftHandSideExpression;
17
- type: ts.Type;
18
- }): ts.Expression => {
19
- // VALIDATE TYPE
20
- if (LlmValidatePredicator.is(props.context.options.llm))
21
- JsonMetadataFactory.analyze({
22
- method: "@nestia.core.TypedBody",
23
- checker: props.context.checker,
24
- transformer: props.context.transformer,
25
- type: props.type,
26
- validate: LlmSchemaProgrammer.validate({
27
- model: props.context.options.llm.model,
28
- config: {
29
- strict: props.context.options.llm.strict,
30
- recursive: props.context.options.llm.recursive,
31
- },
32
- }),
33
- });
34
-
35
- // GENERATE STRINGIFY PLAN
36
- const parameter = (next: {
37
- type: string;
38
- key: string;
39
- programmer: (next: IProgrammerProps) => ts.Expression;
40
- }) =>
41
- ts.factory.createObjectLiteralExpression([
42
- ts.factory.createPropertyAssignment(
43
- ts.factory.createIdentifier("type"),
44
- ts.factory.createStringLiteral(next.type),
45
- ),
46
- ts.factory.createPropertyAssignment(
47
- ts.factory.createIdentifier(next.key),
48
- next.programmer({
49
- context: {
50
- ...props.context,
51
- options: {}, // use default option
52
- },
53
- modulo: props.modulo,
54
- type: props.type,
55
- name: undefined,
56
- }),
57
- ),
58
- ]);
59
-
60
- // RETURNS
61
- if (props.context.options.stringify === "is")
62
- return parameter({
63
- type: "is",
64
- key: "is",
65
- programmer: JsonIsStringifyProgrammer.write,
66
- });
67
- else if (props.context.options.stringify === "validate")
68
- return parameter({
69
- type: "validate",
70
- key: "validate",
71
- programmer: JsonValidateStringifyProgrammer.write,
72
- });
73
- else if (props.context.options.stringify === "stringify")
74
- return parameter({
75
- type: "stringify",
76
- key: "stringify",
77
- programmer: JsonStringifyProgrammer.write,
78
- });
79
- else if (props.context.options.stringify === "validate.log")
80
- return parameter({
81
- type: "validate.log",
82
- key: "validate",
83
- programmer: JsonValidateStringifyProgrammer.write,
84
- });
85
- else if (props.context.options.stringify === null)
86
- return ts.factory.createNull();
87
-
88
- // ASSERT IS DEFAULT
89
- return parameter({
90
- type: "assert",
91
- key: "assert",
92
- programmer: JsonAssertStringifyProgrammer.write,
93
- });
94
- };
95
- }
1
+ import ts from "typescript";
2
+ import { JsonMetadataFactory } from "typia/lib/factories/JsonMetadataFactory";
3
+ import { JsonAssertStringifyProgrammer } from "typia/lib/programmers/json/JsonAssertStringifyProgrammer";
4
+ import { JsonIsStringifyProgrammer } from "typia/lib/programmers/json/JsonIsStringifyProgrammer";
5
+ import { JsonStringifyProgrammer } from "typia/lib/programmers/json/JsonStringifyProgrammer";
6
+ import { JsonValidateStringifyProgrammer } from "typia/lib/programmers/json/JsonValidateStringifyProgrammer";
7
+ import { LlmSchemaProgrammer } from "typia/lib/programmers/llm/LlmSchemaProgrammer";
8
+ import { IProgrammerProps } from "typia/lib/transformers/IProgrammerProps";
9
+
10
+ import { INestiaTransformContext } from "../options/INestiaTransformProject";
11
+
12
+ export namespace TypedRouteProgrammer {
13
+ export const generate = (props: {
14
+ context: INestiaTransformContext;
15
+ modulo: ts.LeftHandSideExpression;
16
+ type: ts.Type;
17
+ }): ts.Expression => {
18
+ // VALIDATE TYPE
19
+ if (props.context.options.llm)
20
+ JsonMetadataFactory.analyze({
21
+ method: "@nestia.core.TypedBody",
22
+ checker: props.context.checker,
23
+ transformer: props.context.transformer,
24
+ type: props.type,
25
+ validate: LlmSchemaProgrammer.validate({
26
+ model: props.context.options.llm.model,
27
+ config: {
28
+ strict: props.context.options.llm.strict,
29
+ recursive: props.context.options.llm.recursive,
30
+ },
31
+ }),
32
+ });
33
+
34
+ // GENERATE STRINGIFY PLAN
35
+ const parameter = (next: {
36
+ type: string;
37
+ key: string;
38
+ programmer: (next: IProgrammerProps) => ts.Expression;
39
+ }) =>
40
+ ts.factory.createObjectLiteralExpression([
41
+ ts.factory.createPropertyAssignment(
42
+ ts.factory.createIdentifier("type"),
43
+ ts.factory.createStringLiteral(next.type),
44
+ ),
45
+ ts.factory.createPropertyAssignment(
46
+ ts.factory.createIdentifier(next.key),
47
+ next.programmer({
48
+ context: {
49
+ ...props.context,
50
+ options: {}, // use default option
51
+ },
52
+ modulo: props.modulo,
53
+ type: props.type,
54
+ name: undefined,
55
+ }),
56
+ ),
57
+ ]);
58
+
59
+ // RETURNS
60
+ if (props.context.options.stringify === "is")
61
+ return parameter({
62
+ type: "is",
63
+ key: "is",
64
+ programmer: JsonIsStringifyProgrammer.write,
65
+ });
66
+ else if (props.context.options.stringify === "validate")
67
+ return parameter({
68
+ type: "validate",
69
+ key: "validate",
70
+ programmer: JsonValidateStringifyProgrammer.write,
71
+ });
72
+ else if (props.context.options.stringify === "stringify")
73
+ return parameter({
74
+ type: "stringify",
75
+ key: "stringify",
76
+ programmer: JsonStringifyProgrammer.write,
77
+ });
78
+ else if (props.context.options.stringify === "validate.log")
79
+ return parameter({
80
+ type: "validate.log",
81
+ key: "validate",
82
+ programmer: JsonValidateStringifyProgrammer.write,
83
+ });
84
+ else if (props.context.options.stringify === null)
85
+ return ts.factory.createNull();
86
+
87
+ // ASSERT IS DEFAULT
88
+ return parameter({
89
+ type: "assert",
90
+ key: "assert",
91
+ programmer: JsonAssertStringifyProgrammer.write,
92
+ });
93
+ };
94
+ }