typia 7.0.0-dev.20240923 → 7.0.0-dev.20240928

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 (57) hide show
  1. package/lib/index.mjs +1 -0
  2. package/lib/index.mjs.map +1 -1
  3. package/lib/programmers/AssertProgrammer.d.ts +1 -1
  4. package/lib/programmers/AssertProgrammer.js +169 -127
  5. package/lib/programmers/AssertProgrammer.js.map +1 -1
  6. package/lib/programmers/CheckerProgrammer.d.ts +70 -15
  7. package/lib/programmers/CheckerProgrammer.js +998 -638
  8. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  9. package/lib/programmers/FeatureProgrammer.d.ts +7 -3
  10. package/lib/programmers/FeatureProgrammer.js +17 -17
  11. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  12. package/lib/programmers/IsProgrammer.d.ts +25 -4
  13. package/lib/programmers/IsProgrammer.js +54 -39
  14. package/lib/programmers/IsProgrammer.js.map +1 -1
  15. package/lib/programmers/ValidateProgrammer.js +110 -97
  16. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  17. package/lib/programmers/helpers/UnionExplorer.d.ts +1 -1
  18. package/lib/programmers/json/JsonStringifyProgrammer.js +71 -38
  19. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  20. package/lib/programmers/llm/LlmApplicationProgrammer.js +16 -2
  21. package/lib/programmers/llm/LlmApplicationProgrammer.js.map +1 -1
  22. package/lib/programmers/misc/MiscCloneProgrammer.js +504 -406
  23. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  24. package/lib/programmers/misc/MiscLiteralsProgrammer.js +3 -3
  25. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  26. package/lib/programmers/misc/MiscPruneProgrammer.js +365 -301
  27. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  28. package/lib/programmers/notations/NotationGeneralProgrammer.js +62 -15
  29. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  30. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +17 -3
  31. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  32. package/lib/tags/Example.d.ts +14 -0
  33. package/lib/tags/Example.js +3 -0
  34. package/lib/tags/Example.js.map +1 -0
  35. package/lib/tags/Examples.d.ts +10 -0
  36. package/lib/tags/Examples.js +3 -0
  37. package/lib/tags/Examples.js.map +1 -0
  38. package/lib/tags/index.d.ts +2 -0
  39. package/lib/tags/index.js +2 -0
  40. package/lib/tags/index.js.map +1 -1
  41. package/package.json +2 -2
  42. package/src/programmers/AssertProgrammer.ts +185 -143
  43. package/src/programmers/CheckerProgrammer.ts +1380 -998
  44. package/src/programmers/FeatureProgrammer.ts +40 -34
  45. package/src/programmers/IsProgrammer.ts +94 -66
  46. package/src/programmers/ValidateProgrammer.ts +149 -137
  47. package/src/programmers/helpers/UnionExplorer.ts +1 -1
  48. package/src/programmers/json/JsonStringifyProgrammer.ts +60 -38
  49. package/src/programmers/llm/LlmApplicationProgrammer.ts +51 -32
  50. package/src/programmers/misc/MiscCloneProgrammer.ts +775 -600
  51. package/src/programmers/misc/MiscLiteralsProgrammer.ts +4 -4
  52. package/src/programmers/misc/MiscPruneProgrammer.ts +532 -415
  53. package/src/programmers/notations/NotationGeneralProgrammer.ts +64 -26
  54. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +16 -9
  55. package/src/tags/Example.ts +17 -0
  56. package/src/tags/Examples.ts +16 -0
  57. package/src/tags/index.ts +20 -18
@@ -47,9 +47,11 @@ export namespace JsonStringifyProgrammer {
47
47
  const config: FeatureProgrammer.IConfig = configure(props);
48
48
  if (props.validated === false)
49
49
  config.addition = (collection) =>
50
- IsProgrammer.write_function_statements(props.context)(props.importer)(
50
+ IsProgrammer.write_function_statements({
51
+ context: props.context,
52
+ importer: props.importer,
51
53
  collection,
52
- );
54
+ });
53
55
  const composed: FeatureProgrammer.IComposed = FeatureProgrammer.compose({
54
56
  ...props,
55
57
  config,
@@ -231,7 +233,11 @@ export namespace JsonStringifyProgrammer {
231
233
  props.metadata.escaped.original.size() === 1 &&
232
234
  props.metadata.escaped.original.natives[0] === "Date"
233
235
  ? () => check_native("Date")(props.input)
234
- : () => IsProgrammer.decode_to_json(false)(props.input),
236
+ : () =>
237
+ IsProgrammer.decode_to_json({
238
+ checkNull: false,
239
+ input: props.input,
240
+ }),
235
241
  value: () =>
236
242
  decode_to_json({
237
243
  ...props,
@@ -255,11 +261,10 @@ export namespace JsonStringifyProgrammer {
255
261
  unions.push({
256
262
  type: "template literal",
257
263
  is: () =>
258
- IsProgrammer.decode(props.context)(props.importer)(
259
- props.input,
260
- partial,
261
- props.explore,
262
- ),
264
+ IsProgrammer.decode({
265
+ ...props,
266
+ metadata: partial,
267
+ }),
263
268
  value: () =>
264
269
  decode_atomic({
265
270
  ...props,
@@ -281,9 +286,9 @@ export namespace JsonStringifyProgrammer {
281
286
  unions.push({
282
287
  type: "atomic",
283
288
  is: () =>
284
- IsProgrammer.decode(props.context)(props.importer)(
285
- props.input,
286
- (() => {
289
+ IsProgrammer.decode({
290
+ ...props,
291
+ metadata: (() => {
287
292
  const partial = Metadata.initialize();
288
293
  partial.atomics.push(
289
294
  MetadataAtomic.create({
@@ -293,8 +298,7 @@ export namespace JsonStringifyProgrammer {
293
298
  );
294
299
  return partial;
295
300
  })(),
296
- props.explore,
297
- ),
301
+ }),
298
302
  value: () =>
299
303
  decode_atomic({
300
304
  ...props,
@@ -305,9 +309,9 @@ export namespace JsonStringifyProgrammer {
305
309
  unions.push({
306
310
  type: "const string",
307
311
  is: () =>
308
- IsProgrammer.decode(props.context)(props.importer)(
309
- props.input,
310
- (() => {
312
+ IsProgrammer.decode({
313
+ ...props,
314
+ metadata: (() => {
311
315
  const partial = Metadata.initialize();
312
316
  partial.atomics.push(
313
317
  MetadataAtomic.create({
@@ -317,8 +321,7 @@ export namespace JsonStringifyProgrammer {
317
321
  );
318
322
  return partial;
319
323
  })(),
320
- props.explore,
321
- ),
324
+ }),
322
325
  value: () =>
323
326
  decode_constant_string({
324
327
  ...props,
@@ -337,15 +340,14 @@ export namespace JsonStringifyProgrammer {
337
340
  unions.push({
338
341
  type: "atomic",
339
342
  is: () =>
340
- IsProgrammer.decode(props.context)(props.importer)(
341
- props.input,
342
- (() => {
343
+ IsProgrammer.decode({
344
+ ...props,
345
+ metadata: (() => {
343
346
  const partial = Metadata.initialize();
344
347
  partial.atomics.push(a);
345
348
  return partial;
346
349
  })(),
347
- props.explore,
348
- ),
350
+ }),
349
351
  value: () =>
350
352
  decode_atomic({
351
353
  ...props,
@@ -358,15 +360,14 @@ export namespace JsonStringifyProgrammer {
358
360
  unions.push({
359
361
  type: "tuple",
360
362
  is: () =>
361
- IsProgrammer.decode(props.context)(props.importer)(
362
- props.input,
363
- (() => {
363
+ IsProgrammer.decode({
364
+ ...props,
365
+ metadata: (() => {
364
366
  const partial = Metadata.initialize();
365
367
  partial.tuples.push(tuple);
366
368
  return partial;
367
369
  })(),
368
- props.explore,
369
- ),
370
+ }),
370
371
  value: () =>
371
372
  decode_tuple({
372
373
  ...props,
@@ -397,7 +398,7 @@ export namespace JsonStringifyProgrammer {
397
398
  : () =>
398
399
  explore_arrays({
399
400
  ...props,
400
- elements: props.metadata.arrays,
401
+ arrays: props.metadata.arrays,
401
402
  explore: {
402
403
  ...props.explore,
403
404
  from: "array",
@@ -747,14 +748,22 @@ export namespace JsonStringifyProgrammer {
747
748
  config: FeatureProgrammer.IConfig;
748
749
  importer: FunctionImporter;
749
750
  input: ts.Expression;
750
- elements: MetadataArray[];
751
+ arrays: MetadataArray[];
751
752
  explore: FeatureProgrammer.IExplore;
752
753
  }): ts.Expression =>
753
754
  explore_array_like_union_types({
754
755
  ...props,
756
+ elements: props.arrays,
755
757
  factory: (next) =>
756
758
  UnionExplorer.array({
757
- checker: IsProgrammer.decode(props.context)(props.importer),
759
+ checker: (input, metadata, explore) =>
760
+ IsProgrammer.decode({
761
+ context: props.context,
762
+ importer: props.importer,
763
+ metadata,
764
+ input,
765
+ explore,
766
+ }),
758
767
  decoder: (input, array, explore) =>
759
768
  decode_array({
760
769
  config: props.config,
@@ -811,7 +820,7 @@ export namespace JsonStringifyProgrammer {
811
820
  [],
812
821
  );
813
822
 
814
- const explore: FeatureProgrammer.IExplore = {
823
+ const arrayExplore: FeatureProgrammer.IExplore = {
815
824
  ...props.explore,
816
825
  source: "function",
817
826
  from: "array",
@@ -827,7 +836,7 @@ export namespace JsonStringifyProgrammer {
827
836
  TypeFactory.keyword("any"),
828
837
  )(ts.factory.createIdentifier("input")),
829
838
  explore: {
830
- ...explore,
839
+ ...arrayExplore,
831
840
  postfix: "",
832
841
  },
833
842
  input: ts.factory.createIdentifier("input"),
@@ -835,7 +844,7 @@ export namespace JsonStringifyProgrammer {
835
844
  ),
836
845
  ),
837
846
  undefined,
838
- FeatureProgrammer.argumentsArray(props.config)(explore)(props.input),
847
+ FeatureProgrammer.argumentsArray(props.config)(arrayExplore)(props.input),
839
848
  );
840
849
  };
841
850
 
@@ -940,15 +949,22 @@ export namespace JsonStringifyProgrammer {
940
949
  initializer,
941
950
  decoder: () => (input, metadata, explore) =>
942
951
  decode({
943
- config,
944
952
  context: props.context,
945
953
  importer: props.importer,
954
+ config,
946
955
  input,
947
956
  metadata,
948
957
  explore,
949
958
  }),
950
959
  objector: {
951
- checker: () => IsProgrammer.decode(props.context)(props.importer),
960
+ checker: () => (input, metadata, explore) =>
961
+ IsProgrammer.decode({
962
+ context: props.context,
963
+ importer: props.importer,
964
+ metadata,
965
+ input,
966
+ explore,
967
+ }),
952
968
  decoder: () => (input, object, explore) =>
953
969
  decode_object({
954
970
  importer: props.importer,
@@ -961,8 +977,14 @@ export namespace JsonStringifyProgrammer {
961
977
  ...next,
962
978
  importer: props.importer,
963
979
  }),
964
- unionizer: decode_union_object(
965
- IsProgrammer.decode_object(props.context)(props.importer),
980
+ unionizer: decode_union_object((input, object, explore) =>
981
+ IsProgrammer.decode_object({
982
+ context: props.context,
983
+ importer: props.importer,
984
+ input,
985
+ object,
986
+ explore,
987
+ }),
966
988
  )((input, object, explore) =>
967
989
  decode_object({
968
990
  importer: props.importer,
@@ -104,38 +104,57 @@ export namespace LlmApplicationProgrammer {
104
104
  function: MetadataFunction;
105
105
  description: string | null;
106
106
  jsDocTags: IJsDocTagInfo[];
107
- }): ILlmFunction => ({
108
- name: props.name,
109
- parameters: props.function.parameters.map((p) => {
110
- const jsDocTagDescription = writeDescriptionFromJsDocTag({
111
- jsDocTags: p.jsDocTags,
112
- tag: "param",
113
- parameter: p.name,
114
- });
115
- return writeSchema({
116
- metadata: p.type,
117
- description: jsDocTagDescription ?? p.description,
118
- jsDocTags: jsDocTagDescription ? [] : p.jsDocTags,
119
- });
120
- }),
121
- output:
122
- props.function.output.size() || props.function.output.nullable
123
- ? writeSchema({
124
- metadata: props.function.output,
125
- description:
126
- writeDescriptionFromJsDocTag({
127
- jsDocTags: props.jsDocTags,
128
- tag: "return",
129
- }) ??
130
- writeDescriptionFromJsDocTag({
131
- jsDocTags: props.jsDocTags,
132
- tag: "returns",
133
- }),
134
- jsDocTags: [],
135
- })
136
- : undefined,
137
- description: props.description ?? undefined,
138
- });
107
+ }): ILlmFunction => {
108
+ const deprecated: boolean = props.jsDocTags.some(
109
+ (tag) => tag.name === "deprecated",
110
+ );
111
+ const tags: string[] = props.jsDocTags
112
+ .map((tag) =>
113
+ tag.name === "tag"
114
+ ? (tag.text?.filter((elem) => elem.kind === "text") ?? [])
115
+ : [],
116
+ )
117
+ .flat()
118
+ .map((elem) => elem.text)
119
+ .map((str) => str.trim().split(" ")[0] ?? "")
120
+ .filter((str) => !!str.length);
121
+ return {
122
+ name: props.name,
123
+ parameters: props.function.parameters.map((p) => {
124
+ const jsDocTagDescription: string | null = writeDescriptionFromJsDocTag(
125
+ {
126
+ jsDocTags: p.jsDocTags,
127
+ tag: "param",
128
+ parameter: p.name,
129
+ },
130
+ );
131
+ return writeSchema({
132
+ metadata: p.type,
133
+ description: jsDocTagDescription ?? p.description,
134
+ jsDocTags: jsDocTagDescription ? [] : p.jsDocTags,
135
+ });
136
+ }),
137
+ output:
138
+ props.function.output.size() || props.function.output.nullable
139
+ ? writeSchema({
140
+ metadata: props.function.output,
141
+ description:
142
+ writeDescriptionFromJsDocTag({
143
+ jsDocTags: props.jsDocTags,
144
+ tag: "return",
145
+ }) ??
146
+ writeDescriptionFromJsDocTag({
147
+ jsDocTags: props.jsDocTags,
148
+ tag: "returns",
149
+ }),
150
+ jsDocTags: [],
151
+ })
152
+ : undefined,
153
+ description: props.description ?? undefined,
154
+ deprecated: deprecated || undefined,
155
+ tags: tags.length ? tags : undefined,
156
+ };
157
+ };
139
158
 
140
159
  const writeSchema = (props: {
141
160
  metadata: Metadata;