@nestia/core 4.4.0 → 4.4.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.
@@ -1,9 +1,16 @@
1
+ import { ILlmSchema } from "@samchon/openapi";
1
2
  export interface INestiaTransformOptions {
2
3
  validate?: INestiaTransformOptions.Validate;
3
4
  stringify?: INestiaTransformOptions.Stringify | null;
5
+ llm?: INestiaTransformOptions.ILlm<"chatgpt" | "gemini" | "3.0">;
4
6
  throws?: boolean;
5
7
  }
6
8
  export declare namespace INestiaTransformOptions {
7
9
  type Validate = "assert" | "is" | "validate" | "assertEquals" | "equals" | "validateEquals" | "assertClone" | "validateClone" | "assertPrune" | "validatePrune";
8
10
  type Stringify = "stringify" | "assert" | "is" | "validate" | "validate.log";
11
+ interface ILlm<Model extends ILlmSchema.Model> {
12
+ model: Model;
13
+ strict?: Model extends "chatgpt" ? boolean : never;
14
+ recursive?: Model extends "gemini" | "3.0" ? false | number : never;
15
+ }
9
16
  }
@@ -9,10 +9,12 @@ const JsonMetadataFactory_1 = require("typia/lib/factories/JsonMetadataFactory")
9
9
  const AssertProgrammer_1 = require("typia/lib/programmers/AssertProgrammer");
10
10
  const IsProgrammer_1 = require("typia/lib/programmers/IsProgrammer");
11
11
  const ValidateProgrammer_1 = require("typia/lib/programmers/ValidateProgrammer");
12
+ const LlmSchemaProgrammer_1 = require("typia/lib/programmers/llm/LlmSchemaProgrammer");
12
13
  const MiscAssertCloneProgrammer_1 = require("typia/lib/programmers/misc/MiscAssertCloneProgrammer");
13
14
  const MiscAssertPruneProgrammer_1 = require("typia/lib/programmers/misc/MiscAssertPruneProgrammer");
14
15
  const MiscValidateCloneProgrammer_1 = require("typia/lib/programmers/misc/MiscValidateCloneProgrammer");
15
16
  const MiscValidatePruneProgrammer_1 = require("typia/lib/programmers/misc/MiscValidatePruneProgrammer");
17
+ const LlmValidatePredicator_1 = require("./internal/LlmValidatePredicator");
16
18
  var TypedBodyProgrammer;
17
19
  (function (TypedBodyProgrammer) {
18
20
  TypedBodyProgrammer.generate = (props) => {
@@ -22,6 +24,15 @@ var TypedBodyProgrammer;
22
24
  checker: props.context.checker,
23
25
  transformer: props.context.transformer,
24
26
  type: props.type,
27
+ validate: LlmValidatePredicator_1.LlmValidatePredicator.is(props.context.options.llm)
28
+ ? LlmSchemaProgrammer_1.LlmSchemaProgrammer.validate({
29
+ model: props.context.options.llm.model,
30
+ config: {
31
+ strict: props.context.options.llm.strict,
32
+ recursive: props.context.options.llm.recursive,
33
+ },
34
+ })
35
+ : undefined,
25
36
  });
26
37
  // GENERATE VALIDATION PLAN
27
38
  const check = (key) => (equals) => (programmer) => typescript_1.default.factory.createObjectLiteralExpression([
@@ -1 +1 @@
1
- {"version":3,"file":"TypedBodyProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedBodyProgrammer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TypedBodyProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedBodyProgrammer.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,48 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TypedQueryBodyProgrammer = void 0;
7
7
  const typescript_1 = __importDefault(require("typescript"));
8
+ const MetadataCollection_1 = require("typia/lib/factories/MetadataCollection");
9
+ const MetadataFactory_1 = require("typia/lib/factories/MetadataFactory");
8
10
  const HttpAssertQueryProgrammer_1 = require("typia/lib/programmers/http/HttpAssertQueryProgrammer");
9
11
  const HttpIsQueryProgrammer_1 = require("typia/lib/programmers/http/HttpIsQueryProgrammer");
12
+ const HttpQueryProgrammer_1 = require("typia/lib/programmers/http/HttpQueryProgrammer");
10
13
  const HttpValidateQueryProgrammer_1 = require("typia/lib/programmers/http/HttpValidateQueryProgrammer");
14
+ const LlmSchemaProgrammer_1 = require("typia/lib/programmers/llm/LlmSchemaProgrammer");
15
+ const TransformerError_1 = require("typia/lib/transformers/TransformerError");
16
+ const LlmValidatePredicator_1 = require("./internal/LlmValidatePredicator");
11
17
  var TypedQueryBodyProgrammer;
12
18
  (function (TypedQueryBodyProgrammer) {
13
19
  TypedQueryBodyProgrammer.generate = (props) => {
20
+ // VALIDATE TYPE
21
+ if (LlmValidatePredicator_1.LlmValidatePredicator.is(props.context.options.llm)) {
22
+ const result = MetadataFactory_1.MetadataFactory.analyze({
23
+ checker: props.context.checker,
24
+ transformer: props.context.transformer,
25
+ options: {
26
+ escape: false,
27
+ constant: true,
28
+ absorb: true,
29
+ validate: (meta, explore) => {
30
+ const errors = HttpQueryProgrammer_1.HttpQueryProgrammer.validate(meta, explore, true);
31
+ errors.push(...LlmSchemaProgrammer_1.LlmSchemaProgrammer.validate({
32
+ model: props.context.options.llm.model,
33
+ config: {
34
+ strict: props.context.options.llm.strict,
35
+ recursive: props.context.options.llm.recursive,
36
+ },
37
+ })(meta));
38
+ return errors;
39
+ },
40
+ },
41
+ collection: new MetadataCollection_1.MetadataCollection(),
42
+ type: props.type,
43
+ });
44
+ if (result.success === false)
45
+ throw TransformerError_1.TransformerError.from({
46
+ code: "@nestia.core.TypedQuery.Body",
47
+ errors: result.errors,
48
+ });
49
+ }
14
50
  // GENERATE VALIDATION PLAN
15
51
  const parameter = (key) => (programmer) => typescript_1.default.factory.createObjectLiteralExpression([
16
52
  typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("type"), typescript_1.default.factory.createStringLiteral(key)),
@@ -1 +1 @@
1
- {"version":3,"file":"TypedQueryBodyProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedQueryBodyProgrammer.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAC5B,oGAAiG;AACjG,4FAAyF;AACzF,wGAAqG;AAMrG,IAAiB,wBAAwB,CAqDxC;AArDD,WAAiB,wBAAwB;IAC1B,iCAAQ,GAAG,CAAC,KAIxB,EAA8B,EAAE;QAC/B,2BAA2B;QAC3B,MAAM,SAAS,GACb,CAAC,GAAwC,EAAE,EAAE,CAC7C,CACE,UAKmB,EACnB,EAAE,CACF,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC;YACvC,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CACpC;YACD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAChC,UAAU,CAAC;gBACT,OAAO,kCACF,KAAK,CAAC,OAAO,KAChB,OAAO,EAAE;wBACP,OAAO,EAAE,KAAK;wBACd,MAAM,EAAE,KAAK;wBACb,UAAU,EAAE,KAAK;qBAClB,GACF;gBACD,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,SAAS;aAChB,CAAC,CACH;SACF,CAAC,CAAC;QAEP,UAAU;QACV,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QAChD,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,QAAQ;YAC5C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,6CAAqB,CAAC,KAAK,CAAC,CAAC;aACjD,IACH,QAAQ,KAAK,UAAU;YACvB,QAAQ,KAAK,gBAAgB;YAC7B,QAAQ,KAAK,eAAe;YAC5B,QAAQ,KAAK,eAAe;YAE5B,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC,yDAA2B,CAAC,KAAK,CAAC,CAAC;QAClE,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,qDAAyB,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC,CAAC;AACJ,CAAC,EArDgB,wBAAwB,wCAAxB,wBAAwB,QAqDxC"}
1
+ {"version":3,"file":"TypedQueryBodyProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedQueryBodyProgrammer.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,48 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TypedQueryProgrammer = void 0;
7
7
  const typescript_1 = __importDefault(require("typescript"));
8
+ const MetadataCollection_1 = require("typia/lib/factories/MetadataCollection");
9
+ const MetadataFactory_1 = require("typia/lib/factories/MetadataFactory");
8
10
  const HttpAssertQueryProgrammer_1 = require("typia/lib/programmers/http/HttpAssertQueryProgrammer");
9
11
  const HttpIsQueryProgrammer_1 = require("typia/lib/programmers/http/HttpIsQueryProgrammer");
12
+ const HttpQueryProgrammer_1 = require("typia/lib/programmers/http/HttpQueryProgrammer");
10
13
  const HttpValidateQueryProgrammer_1 = require("typia/lib/programmers/http/HttpValidateQueryProgrammer");
14
+ const LlmSchemaProgrammer_1 = require("typia/lib/programmers/llm/LlmSchemaProgrammer");
15
+ const TransformerError_1 = require("typia/lib/transformers/TransformerError");
16
+ const LlmValidatePredicator_1 = require("./internal/LlmValidatePredicator");
11
17
  var TypedQueryProgrammer;
12
18
  (function (TypedQueryProgrammer) {
13
19
  TypedQueryProgrammer.generate = (props) => {
20
+ // VALIDATE TYPE
21
+ if (LlmValidatePredicator_1.LlmValidatePredicator.is(props.context.options.llm)) {
22
+ const result = MetadataFactory_1.MetadataFactory.analyze({
23
+ checker: props.context.checker,
24
+ transformer: props.context.transformer,
25
+ options: {
26
+ escape: false,
27
+ constant: true,
28
+ absorb: true,
29
+ validate: (meta, explore) => {
30
+ const errors = HttpQueryProgrammer_1.HttpQueryProgrammer.validate(meta, explore, true);
31
+ errors.push(...LlmSchemaProgrammer_1.LlmSchemaProgrammer.validate({
32
+ model: props.context.options.llm.model,
33
+ config: {
34
+ strict: props.context.options.llm.strict,
35
+ recursive: props.context.options.llm.recursive,
36
+ },
37
+ })(meta));
38
+ return errors;
39
+ },
40
+ },
41
+ collection: new MetadataCollection_1.MetadataCollection(),
42
+ type: props.type,
43
+ });
44
+ if (result.success === false)
45
+ throw TransformerError_1.TransformerError.from({
46
+ code: "@nestia.core.TypedQuery",
47
+ errors: result.errors,
48
+ });
49
+ }
14
50
  // GENERATE VALIDATION PLAN
15
51
  const parameter = (key) => (programmer) => typescript_1.default.factory.createObjectLiteralExpression([
16
52
  typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("type"), typescript_1.default.factory.createStringLiteral(key)),
@@ -1 +1 @@
1
- {"version":3,"file":"TypedQueryProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedQueryProgrammer.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAC5B,oGAAiG;AACjG,4FAAyF;AACzF,wGAAqG;AAMrG,IAAiB,oBAAoB,CAuDpC;AAvDD,WAAiB,oBAAoB;IACtB,6BAAQ,GAAG,CAAC,KAIxB,EAAiB,EAAE;QAClB,2BAA2B;QAC3B,MAAM,SAAS,GACb,CAAC,GAAwC,EAAE,EAAE,CAC7C,CACE,UAMmB,EACnB,EAAE,CACF,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC;YACvC,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CACpC;YACD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAChC,UAAU,CAAC;gBACT,OAAO,kCACF,KAAK,CAAC,OAAO,KAChB,OAAO,EAAE;wBACP,OAAO,EAAE,KAAK;wBACd,MAAM,EAAE,KAAK;wBACb,UAAU,EAAE,KAAK;qBAClB,GACF;gBACD,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,SAAS;gBACf,aAAa,EAAE,IAAI;aACpB,CAAC,CACH;SACF,CAAC,CAAC;QAEP,UAAU;QACV,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QAChD,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,QAAQ;YAC5C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,6CAAqB,CAAC,KAAK,CAAC,CAAC;aACjD,IACH,QAAQ,KAAK,UAAU;YACvB,QAAQ,KAAK,gBAAgB;YAC7B,QAAQ,KAAK,eAAe;YAC5B,QAAQ,KAAK,eAAe;YAE5B,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC,yDAA2B,CAAC,KAAK,CAAC,CAAC;QAClE,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,qDAAyB,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC,CAAC;AACJ,CAAC,EAvDgB,oBAAoB,oCAApB,oBAAoB,QAuDpC"}
1
+ {"version":3,"file":"TypedQueryProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedQueryProgrammer.ts"],"names":[],"mappings":"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"}
@@ -5,13 +5,49 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TypedQueryRouteProgrammer = void 0;
7
7
  const typescript_1 = __importDefault(require("typescript"));
8
+ const MetadataCollection_1 = require("typia/lib/factories/MetadataCollection");
9
+ const MetadataFactory_1 = require("typia/lib/factories/MetadataFactory");
10
+ const HttpQueryProgrammer_1 = require("typia/lib/programmers/http/HttpQueryProgrammer");
11
+ const LlmSchemaProgrammer_1 = require("typia/lib/programmers/llm/LlmSchemaProgrammer");
12
+ const TransformerError_1 = require("typia/lib/transformers/TransformerError");
8
13
  const HttpAssertQuerifyProgrammer_1 = require("./http/HttpAssertQuerifyProgrammer");
9
14
  const HttpIsQuerifyProgrammer_1 = require("./http/HttpIsQuerifyProgrammer");
10
15
  const HttpQuerifyProgrammer_1 = require("./http/HttpQuerifyProgrammer");
11
16
  const HttpValidateQuerifyProgrammer_1 = require("./http/HttpValidateQuerifyProgrammer");
17
+ const LlmValidatePredicator_1 = require("./internal/LlmValidatePredicator");
12
18
  var TypedQueryRouteProgrammer;
13
19
  (function (TypedQueryRouteProgrammer) {
14
20
  TypedQueryRouteProgrammer.generate = (props) => {
21
+ // VALIDATE TYPE
22
+ if (LlmValidatePredicator_1.LlmValidatePredicator.is(props.context.options.llm)) {
23
+ const result = MetadataFactory_1.MetadataFactory.analyze({
24
+ checker: props.context.checker,
25
+ transformer: props.context.transformer,
26
+ options: {
27
+ escape: false,
28
+ constant: true,
29
+ absorb: true,
30
+ validate: (meta, explore) => {
31
+ const errors = HttpQueryProgrammer_1.HttpQueryProgrammer.validate(meta, explore, true);
32
+ errors.push(...LlmSchemaProgrammer_1.LlmSchemaProgrammer.validate({
33
+ model: props.context.options.llm.model,
34
+ config: {
35
+ strict: props.context.options.llm.strict,
36
+ recursive: props.context.options.llm.recursive,
37
+ },
38
+ })(meta));
39
+ return errors;
40
+ },
41
+ },
42
+ collection: new MetadataCollection_1.MetadataCollection(),
43
+ type: props.type,
44
+ });
45
+ if (result.success === false)
46
+ throw TransformerError_1.TransformerError.from({
47
+ code: props.modulo.getText(),
48
+ errors: result.errors,
49
+ });
50
+ }
15
51
  // GENERATE STRINGIFY PLAN
16
52
  const parameter = (key, programmer) => typescript_1.default.factory.createObjectLiteralExpression([
17
53
  typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("type"), typescript_1.default.factory.createStringLiteral(key)),
@@ -1 +1 @@
1
- {"version":3,"file":"TypedQueryRouteProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedQueryRouteProgrammer.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAI5B,oFAAiF;AACjF,4EAAyE;AACzE,wEAAqE;AACrE,wFAAqF;AAErF,IAAiB,yBAAyB,CA8CzC;AA9CD,WAAiB,yBAAyB;IAC3B,kCAAQ,GAAG,CAAC,KAIxB,EAAiB,EAAE;QAClB,0BAA0B;QAC1B,MAAM,SAAS,GAAG,CAChB,GAAW,EACX,UAIsB,EACtB,EAAE,CACF,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC;YACvC,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CACpC;YACD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAChC,UAAU,CAAC;gBACT,OAAO,kCACF,KAAK,CAAC,OAAO,KAChB,OAAO,EAAE,EAAE,GACZ;gBACD,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC,CACH;SACF,CAAC,CAAC;QAEL,UAAU;QACV,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI;YAC1C,OAAO,SAAS,CAAC,IAAI,EAAE,iDAAuB,CAAC,KAAK,CAAC,CAAC;aACnD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,UAAU;YACrD,OAAO,SAAS,CAAC,UAAU,EAAE,6DAA6B,CAAC,KAAK,CAAC,CAAC;aAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,WAAW;YACtD,OAAO,SAAS,CAAC,WAAW,EAAE,6CAAqB,CAAC,KAAK,CAAC,CAAC;aACxD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI;YAC/C,OAAO,oBAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAEjC,oBAAoB;QACpB,OAAO,SAAS,CAAC,QAAQ,EAAE,yDAA2B,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC;AACJ,CAAC,EA9CgB,yBAAyB,yCAAzB,yBAAyB,QA8CzC"}
1
+ {"version":3,"file":"TypedQueryRouteProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedQueryRouteProgrammer.ts"],"names":[],"mappings":"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"}
@@ -5,13 +5,31 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TypedRouteProgrammer = void 0;
7
7
  const typescript_1 = __importDefault(require("typescript"));
8
+ const JsonMetadataFactory_1 = require("typia/lib/factories/JsonMetadataFactory");
8
9
  const JsonAssertStringifyProgrammer_1 = require("typia/lib/programmers/json/JsonAssertStringifyProgrammer");
9
10
  const JsonIsStringifyProgrammer_1 = require("typia/lib/programmers/json/JsonIsStringifyProgrammer");
10
11
  const JsonStringifyProgrammer_1 = require("typia/lib/programmers/json/JsonStringifyProgrammer");
11
12
  const JsonValidateStringifyProgrammer_1 = require("typia/lib/programmers/json/JsonValidateStringifyProgrammer");
13
+ const LlmSchemaProgrammer_1 = require("typia/lib/programmers/llm/LlmSchemaProgrammer");
14
+ const LlmValidatePredicator_1 = require("./internal/LlmValidatePredicator");
12
15
  var TypedRouteProgrammer;
13
16
  (function (TypedRouteProgrammer) {
14
17
  TypedRouteProgrammer.generate = (props) => {
18
+ // VALIDATE TYPE
19
+ if (LlmValidatePredicator_1.LlmValidatePredicator.is(props.context.options.llm))
20
+ JsonMetadataFactory_1.JsonMetadataFactory.analyze({
21
+ method: "@nestia.core.TypedBody",
22
+ checker: props.context.checker,
23
+ transformer: props.context.transformer,
24
+ type: props.type,
25
+ validate: LlmSchemaProgrammer_1.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
+ });
15
33
  // GENERATE STRINGIFY PLAN
16
34
  const parameter = (next) => typescript_1.default.factory.createObjectLiteralExpression([
17
35
  typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("type"), typescript_1.default.factory.createStringLiteral(next.type)),
@@ -1 +1 @@
1
- {"version":3,"file":"TypedRouteProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedRouteProgrammer.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAC5B,4GAAyG;AACzG,oGAAiG;AACjG,gGAA6F;AAC7F,gHAA6G;AAK7G,IAAiB,oBAAoB,CAkEpC;AAlED,WAAiB,oBAAoB;IACtB,6BAAQ,GAAG,CAAC,KAIxB,EAAiB,EAAE;QAClB,0BAA0B;QAC1B,MAAM,SAAS,GAAG,CAAC,IAIlB,EAAE,EAAE,CACH,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC;YACvC,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAC1C;YACD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EACrC,IAAI,CAAC,UAAU,CAAC;gBACd,OAAO,kCACF,KAAK,CAAC,OAAO,KAChB,OAAO,EAAE,EAAE,GACZ;gBACD,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,SAAS;aAChB,CAAC,CACH;SACF,CAAC,CAAC;QAEL,UAAU;QACV,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI;YAC1C,OAAO,SAAS,CAAC;gBACf,IAAI,EAAE,IAAI;gBACV,GAAG,EAAE,IAAI;gBACT,UAAU,EAAE,qDAAyB,CAAC,KAAK;aAC5C,CAAC,CAAC;aACA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,UAAU;YACrD,OAAO,SAAS,CAAC;gBACf,IAAI,EAAE,UAAU;gBAChB,GAAG,EAAE,UAAU;gBACf,UAAU,EAAE,iEAA+B,CAAC,KAAK;aAClD,CAAC,CAAC;aACA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,WAAW;YACtD,OAAO,SAAS,CAAC;gBACf,IAAI,EAAE,WAAW;gBACjB,GAAG,EAAE,WAAW;gBAChB,UAAU,EAAE,iDAAuB,CAAC,KAAK;aAC1C,CAAC,CAAC;aACA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,cAAc;YACzD,OAAO,SAAS,CAAC;gBACf,IAAI,EAAE,cAAc;gBACpB,GAAG,EAAE,UAAU;gBACf,UAAU,EAAE,iEAA+B,CAAC,KAAK;aAClD,CAAC,CAAC;aACA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI;YAC/C,OAAO,oBAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAEjC,oBAAoB;QACpB,OAAO,SAAS,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,QAAQ;YACb,UAAU,EAAE,6DAA6B,CAAC,KAAK;SAChD,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,EAlEgB,oBAAoB,oCAApB,oBAAoB,QAkEpC"}
1
+ {"version":3,"file":"TypedRouteProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedRouteProgrammer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ILlmSchema } from "@samchon/openapi";
2
+ import { INestiaTransformOptions } from "../../options/INestiaTransformOptions";
3
+ export declare namespace LlmValidatePredicator {
4
+ const is: <Model extends ILlmSchema.Model>(llm: INestiaTransformOptions.ILlm<Model> | undefined) => llm is INestiaTransformOptions.ILlm<Model>;
5
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LlmValidatePredicator = void 0;
4
+ var LlmValidatePredicator;
5
+ (function (LlmValidatePredicator) {
6
+ LlmValidatePredicator.is = (llm) => {
7
+ if ((llm === null || llm === void 0 ? void 0 : llm.model) === undefined)
8
+ return false;
9
+ else if (llm.model === "chatgpt")
10
+ return llm.strict === true;
11
+ else if (llm.model === "gemini")
12
+ return true;
13
+ else if (llm.model === "3.0")
14
+ return llm.recursive === false || llm.recursive === 0;
15
+ return false;
16
+ };
17
+ })(LlmValidatePredicator || (exports.LlmValidatePredicator = LlmValidatePredicator = {}));
18
+ //# sourceMappingURL=LlmValidatePredicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LlmValidatePredicator.js","sourceRoot":"","sources":["../../../src/programmers/internal/LlmValidatePredicator.ts"],"names":[],"mappings":";;;AAIA,IAAiB,qBAAqB,CAWrC;AAXD,WAAiB,qBAAqB;IACvB,wBAAE,GAAG,CAChB,GAAoD,EACR,EAAE;QAC9C,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,MAAK,SAAS;YAAE,OAAO,KAAK,CAAC;aACtC,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC;aACxD,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;aACxC,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK;YAC1B,OAAO,GAAG,CAAC,SAAS,KAAK,KAAK,IAAI,GAAG,CAAC,SAAS,KAAK,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC,EAXgB,qBAAqB,qCAArB,qBAAqB,QAWrC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestia/core",
3
- "version": "4.4.0",
3
+ "version": "4.4.1",
4
4
  "description": "Super-fast validation decorators of NestJS",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -36,10 +36,10 @@
36
36
  },
37
37
  "homepage": "https://nestia.io",
38
38
  "dependencies": {
39
- "@nestia/fetcher": "^4.4.0",
39
+ "@nestia/fetcher": "^4.4.1",
40
40
  "@nestjs/common": ">=7.0.1",
41
41
  "@nestjs/core": ">=7.0.1",
42
- "@samchon/openapi": "^2.2.0",
42
+ "@samchon/openapi": "^2.2.1",
43
43
  "detect-ts-node": "^1.0.5",
44
44
  "get-function-location": "^2.0.0",
45
45
  "glob": "^7.2.0",
@@ -48,16 +48,16 @@
48
48
  "reflect-metadata": ">=0.1.12",
49
49
  "rxjs": ">=6.0.3",
50
50
  "tgrid": "^1.1.0",
51
- "typia": "^7.4.0",
51
+ "typia": "^7.4.1",
52
52
  "ws": "^7.5.3"
53
53
  },
54
54
  "peerDependencies": {
55
- "@nestia/fetcher": ">=4.4.0",
55
+ "@nestia/fetcher": ">=4.4.1",
56
56
  "@nestjs/common": ">=7.0.1",
57
57
  "@nestjs/core": ">=7.0.1",
58
58
  "reflect-metadata": ">=0.1.12",
59
59
  "rxjs": ">=6.0.3",
60
- "typia": ">=7.4.0 <8.0.0"
60
+ "typia": ">=7.4.1 <8.0.0"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@nestjs/common": "^10.4.13",
@@ -1,6 +1,9 @@
1
+ import { ILlmSchema } from "@samchon/openapi";
2
+
1
3
  export interface INestiaTransformOptions {
2
4
  validate?: INestiaTransformOptions.Validate;
3
5
  stringify?: INestiaTransformOptions.Stringify | null;
6
+ llm?: INestiaTransformOptions.ILlm<"chatgpt" | "gemini" | "3.0">;
4
7
  throws?: boolean;
5
8
  }
6
9
  export namespace INestiaTransformOptions {
@@ -26,4 +29,10 @@ export namespace INestiaTransformOptions {
26
29
  | "is"
27
30
  | "validate"
28
31
  | "validate.log";
32
+
33
+ export interface ILlm<Model extends ILlmSchema.Model> {
34
+ model: Model;
35
+ strict?: Model extends "chatgpt" ? boolean : never;
36
+ recursive?: Model extends "gemini" | "3.0" ? false | number : never;
37
+ }
29
38
  }
@@ -3,6 +3,7 @@ import { JsonMetadataFactory } from "typia/lib/factories/JsonMetadataFactory";
3
3
  import { AssertProgrammer } from "typia/lib/programmers/AssertProgrammer";
4
4
  import { IsProgrammer } from "typia/lib/programmers/IsProgrammer";
5
5
  import { ValidateProgrammer } from "typia/lib/programmers/ValidateProgrammer";
6
+ import { LlmSchemaProgrammer } from "typia/lib/programmers/llm/LlmSchemaProgrammer";
6
7
  import { MiscAssertCloneProgrammer } from "typia/lib/programmers/misc/MiscAssertCloneProgrammer";
7
8
  import { MiscAssertPruneProgrammer } from "typia/lib/programmers/misc/MiscAssertPruneProgrammer";
8
9
  import { MiscValidateCloneProgrammer } from "typia/lib/programmers/misc/MiscValidateCloneProgrammer";
@@ -11,6 +12,7 @@ import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
11
12
 
12
13
  import { INestiaTransformContext } from "../options/INestiaTransformProject";
13
14
  import { IRequestBodyValidator } from "../options/IRequestBodyValidator";
15
+ import { LlmValidatePredicator } from "./internal/LlmValidatePredicator";
14
16
 
15
17
  export namespace TypedBodyProgrammer {
16
18
  export const generate = (props: {
@@ -24,6 +26,15 @@ export namespace TypedBodyProgrammer {
24
26
  checker: props.context.checker,
25
27
  transformer: props.context.transformer,
26
28
  type: props.type,
29
+ validate: LlmValidatePredicator.is(props.context.options.llm)
30
+ ? LlmSchemaProgrammer.validate({
31
+ model: props.context.options.llm.model,
32
+ config: {
33
+ strict: props.context.options.llm.strict,
34
+ recursive: props.context.options.llm.recursive,
35
+ },
36
+ })
37
+ : undefined,
27
38
  });
28
39
 
29
40
  // GENERATE VALIDATION PLAN
@@ -1,11 +1,17 @@
1
1
  import ts from "typescript";
2
+ import { MetadataCollection } from "typia/lib/factories/MetadataCollection";
3
+ import { MetadataFactory } from "typia/lib/factories/MetadataFactory";
2
4
  import { HttpAssertQueryProgrammer } from "typia/lib/programmers/http/HttpAssertQueryProgrammer";
3
5
  import { HttpIsQueryProgrammer } from "typia/lib/programmers/http/HttpIsQueryProgrammer";
6
+ import { HttpQueryProgrammer } from "typia/lib/programmers/http/HttpQueryProgrammer";
4
7
  import { HttpValidateQueryProgrammer } from "typia/lib/programmers/http/HttpValidateQueryProgrammer";
8
+ import { LlmSchemaProgrammer } from "typia/lib/programmers/llm/LlmSchemaProgrammer";
5
9
  import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
10
+ import { TransformerError } from "typia/lib/transformers/TransformerError";
6
11
 
7
12
  import { INestiaTransformContext } from "../options/INestiaTransformProject";
8
13
  import { IRequestQueryValidator } from "../options/IRequestQueryValidator";
14
+ import { LlmValidatePredicator } from "./internal/LlmValidatePredicator";
9
15
 
10
16
  export namespace TypedQueryBodyProgrammer {
11
17
  export const generate = (props: {
@@ -13,6 +19,43 @@ export namespace TypedQueryBodyProgrammer {
13
19
  modulo: ts.LeftHandSideExpression;
14
20
  type: ts.Type;
15
21
  }): ts.ObjectLiteralExpression => {
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.Body",
55
+ errors: result.errors,
56
+ });
57
+ }
58
+
16
59
  // GENERATE VALIDATION PLAN
17
60
  const parameter =
18
61
  (key: IRequestQueryValidator<any>["type"]) =>
@@ -1,11 +1,17 @@
1
1
  import ts from "typescript";
2
+ import { MetadataCollection } from "typia/lib/factories/MetadataCollection";
3
+ import { MetadataFactory } from "typia/lib/factories/MetadataFactory";
2
4
  import { HttpAssertQueryProgrammer } from "typia/lib/programmers/http/HttpAssertQueryProgrammer";
3
5
  import { HttpIsQueryProgrammer } from "typia/lib/programmers/http/HttpIsQueryProgrammer";
6
+ import { HttpQueryProgrammer } from "typia/lib/programmers/http/HttpQueryProgrammer";
4
7
  import { HttpValidateQueryProgrammer } from "typia/lib/programmers/http/HttpValidateQueryProgrammer";
8
+ import { LlmSchemaProgrammer } from "typia/lib/programmers/llm/LlmSchemaProgrammer";
5
9
  import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
10
+ import { TransformerError } from "typia/lib/transformers/TransformerError";
6
11
 
7
12
  import { INestiaTransformContext } from "../options/INestiaTransformProject";
8
13
  import { IRequestQueryValidator } from "../options/IRequestQueryValidator";
14
+ import { LlmValidatePredicator } from "./internal/LlmValidatePredicator";
9
15
 
10
16
  export namespace TypedQueryProgrammer {
11
17
  export const generate = (props: {
@@ -13,6 +19,43 @@ export namespace TypedQueryProgrammer {
13
19
  modulo: ts.LeftHandSideExpression;
14
20
  type: ts.Type;
15
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
+
16
59
  // GENERATE VALIDATION PLAN
17
60
  const parameter =
18
61
  (key: IRequestQueryValidator<any>["type"]) =>
@@ -1,11 +1,17 @@
1
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";
2
6
  import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
7
+ import { TransformerError } from "typia/lib/transformers/TransformerError";
3
8
 
4
9
  import { INestiaTransformContext } from "../options/INestiaTransformProject";
5
10
  import { HttpAssertQuerifyProgrammer } from "./http/HttpAssertQuerifyProgrammer";
6
11
  import { HttpIsQuerifyProgrammer } from "./http/HttpIsQuerifyProgrammer";
7
12
  import { HttpQuerifyProgrammer } from "./http/HttpQuerifyProgrammer";
8
13
  import { HttpValidateQuerifyProgrammer } from "./http/HttpValidateQuerifyProgrammer";
14
+ import { LlmValidatePredicator } from "./internal/LlmValidatePredicator";
9
15
 
10
16
  export namespace TypedQueryRouteProgrammer {
11
17
  export const generate = (props: {
@@ -13,6 +19,43 @@ export namespace TypedQueryRouteProgrammer {
13
19
  modulo: ts.LeftHandSideExpression;
14
20
  type: ts.Type;
15
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
+
16
59
  // GENERATE STRINGIFY PLAN
17
60
  const parameter = (
18
61
  key: string,
@@ -1,11 +1,14 @@
1
1
  import ts from "typescript";
2
+ import { JsonMetadataFactory } from "typia/lib/factories/JsonMetadataFactory";
2
3
  import { JsonAssertStringifyProgrammer } from "typia/lib/programmers/json/JsonAssertStringifyProgrammer";
3
4
  import { JsonIsStringifyProgrammer } from "typia/lib/programmers/json/JsonIsStringifyProgrammer";
4
5
  import { JsonStringifyProgrammer } from "typia/lib/programmers/json/JsonStringifyProgrammer";
5
6
  import { JsonValidateStringifyProgrammer } from "typia/lib/programmers/json/JsonValidateStringifyProgrammer";
7
+ import { LlmSchemaProgrammer } from "typia/lib/programmers/llm/LlmSchemaProgrammer";
6
8
  import { IProgrammerProps } from "typia/lib/transformers/IProgrammerProps";
7
9
 
8
10
  import { INestiaTransformContext } from "../options/INestiaTransformProject";
11
+ import { LlmValidatePredicator } from "./internal/LlmValidatePredicator";
9
12
 
10
13
  export namespace TypedRouteProgrammer {
11
14
  export const generate = (props: {
@@ -13,6 +16,22 @@ export namespace TypedRouteProgrammer {
13
16
  modulo: ts.LeftHandSideExpression;
14
17
  type: ts.Type;
15
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
+
16
35
  // GENERATE STRINGIFY PLAN
17
36
  const parameter = (next: {
18
37
  type: string;
@@ -0,0 +1,16 @@
1
+ import { ILlmSchema } from "@samchon/openapi";
2
+
3
+ import { INestiaTransformOptions } from "../../options/INestiaTransformOptions";
4
+
5
+ export namespace LlmValidatePredicator {
6
+ export const is = <Model extends ILlmSchema.Model>(
7
+ llm: INestiaTransformOptions.ILlm<Model> | undefined,
8
+ ): llm is INestiaTransformOptions.ILlm<Model> => {
9
+ if (llm?.model === undefined) return false;
10
+ else if (llm.model === "chatgpt") return llm.strict === true;
11
+ else if (llm.model === "gemini") return true;
12
+ else if (llm.model === "3.0")
13
+ return llm.recursive === false || llm.recursive === 0;
14
+ return false;
15
+ };
16
+ }