typia 5.2.1 → 5.2.2-dev.20231012-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 (91) hide show
  1. package/README.md +1 -1
  2. package/lib/Primitive.d.ts +1 -1
  3. package/lib/executable/TypiaSetupWizard.js +8 -8
  4. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  5. package/lib/factories/JsonMetadataFactory.js +31 -0
  6. package/lib/factories/JsonMetadataFactory.js.map +1 -1
  7. package/lib/factories/MetadataCollection.js +4 -3
  8. package/lib/factories/MetadataCollection.js.map +1 -1
  9. package/lib/programmers/helpers/AtomicPredicator.js +1 -1
  10. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
  11. package/package.json +2 -2
  12. package/src/CamelCase.ts +116 -116
  13. package/src/PascalCase.ts +116 -116
  14. package/src/Primitive.ts +135 -135
  15. package/src/Resolved.ts +116 -116
  16. package/src/SnakeCase.ts +156 -156
  17. package/src/executable/TypiaSetupWizard.ts +9 -11
  18. package/src/factories/JsonMetadataFactory.ts +7 -0
  19. package/src/factories/MetadataCollection.ts +6 -1
  20. package/src/factories/internal/metadata/emplace_metadata_object.ts +150 -150
  21. package/src/functional/$clone.ts +4 -4
  22. package/src/functional/$convention.ts +40 -40
  23. package/src/functional/Namespace.ts +164 -164
  24. package/src/http.ts +1149 -1149
  25. package/src/json.ts +648 -648
  26. package/src/misc.ts +651 -651
  27. package/src/module.ts +662 -662
  28. package/src/notations.ts +855 -855
  29. package/src/programmers/IsProgrammer.ts +252 -252
  30. package/src/programmers/TypiaProgrammer.ts +169 -169
  31. package/src/programmers/helpers/AtomicPredicator.ts +1 -1
  32. package/src/programmers/helpers/NotationJoiner.ts +146 -146
  33. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  34. package/src/programmers/json/JsonStringifyProgrammer.ts +964 -964
  35. package/src/programmers/misc/MiscCloneProgrammer.ts +790 -790
  36. package/src/programmers/misc/MiscPruneProgrammer.ts +552 -552
  37. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +72 -72
  38. package/src/programmers/notations/NotationGeneralProgrammer.ts +720 -720
  39. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +79 -79
  40. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +88 -88
  41. package/src/protobuf.ts +887 -887
  42. package/src/transformers/CallExpressionTransformer.ts +380 -380
  43. package/src/transformers/ITransformOptions.ts +62 -62
  44. package/src/transformers/features/json/JsonAssertParseTransformer.ts +10 -10
  45. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  46. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +12 -12
  47. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  48. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  49. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +12 -12
  50. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  51. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +12 -12
  52. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  53. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  54. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +10 -10
  55. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  56. package/src/transformers/features/json/JsonValidateParseTransformer.ts +10 -10
  57. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  58. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +10 -10
  59. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +10 -10
  60. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  61. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +12 -12
  62. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +12 -12
  63. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  64. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  65. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  66. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  67. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +12 -12
  68. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +12 -12
  69. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  70. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  71. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  72. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +10 -10
  73. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +10 -10
  74. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +15 -15
  75. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +15 -15
  76. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +15 -15
  77. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +15 -15
  78. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +17 -17
  79. package/src/transformers/features/notations/NotationGeneralTransformer.ts +11 -11
  80. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +15 -15
  81. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +17 -17
  82. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +12 -12
  83. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +12 -12
  84. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +9 -9
  85. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +9 -9
  86. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +12 -12
  87. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +12 -12
  88. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +12 -12
  89. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +12 -12
  90. package/src/utils/NamingConvention.ts +91 -91
  91. package/src/utils/StringUtil.ts +4 -4
@@ -1,150 +1,150 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../../schemas/metadata/Metadata";
4
- import { MetadataObject } from "../../../schemas/metadata/MetadataObject";
5
- import { MetadataProperty } from "../../../schemas/metadata/MetadataProperty";
6
-
7
- import { Writable } from "../../../typings/Writable";
8
-
9
- import { ArrayUtil } from "../../../utils/ArrayUtil";
10
-
11
- import { CommentFactory } from "../../CommentFactory";
12
- import { MetadataCollection } from "../../MetadataCollection";
13
- import { MetadataFactory } from "../../MetadataFactory";
14
- import { MetadataHelper } from "./MetadataHelper";
15
- import { explore_metadata } from "./explore_metadata";
16
- import { iterate_metadata_coalesce } from "./iterate_metadata_coalesce";
17
-
18
- export const emplace_metadata_object =
19
- (checker: ts.TypeChecker) =>
20
- (options: MetadataFactory.IOptions) =>
21
- (collection: MetadataCollection) =>
22
- (errors: MetadataFactory.IError[]) =>
23
- (parent: ts.Type, nullable: boolean): MetadataObject => {
24
- // EMPLACE OBJECT
25
- const [obj, newbie] = collection.emplace(checker, parent);
26
- ArrayUtil.add(obj.nullables, nullable, (elem) => elem === nullable);
27
-
28
- if (newbie === false) return obj;
29
-
30
- // PREPARE ASSETS
31
- const isClass: boolean = parent.isClass();
32
- const pred: (node: ts.Declaration) => boolean = isClass
33
- ? (node) => {
34
- const kind: ts.SyntaxKind | undefined = node
35
- .getChildren()[0]
36
- ?.getChildren()[0]?.kind;
37
- return (
38
- kind !== ts.SyntaxKind.PrivateKeyword &&
39
- kind !== ts.SyntaxKind.ProtectedKeyword &&
40
- (ts.isParameter(node) || isProperty(node))
41
- );
42
- }
43
- : (node) => isProperty(node);
44
-
45
- const insert =
46
- (key: Metadata) =>
47
- (value: Metadata) =>
48
- (
49
- symbol: ts.Symbol | undefined,
50
- filter?: (doc: ts.JSDocTagInfo) => boolean,
51
- ): MetadataProperty => {
52
- // COMMENTS AND TAGS
53
- const description: string | null = symbol
54
- ? CommentFactory.description(symbol) ?? null
55
- : null;
56
- const jsDocTags: ts.JSDocTagInfo[] = (
57
- symbol?.getJsDocTags() ?? []
58
- ).filter(filter ?? (() => true));
59
-
60
- // THE PROPERTY
61
- const property = MetadataProperty.create({
62
- key,
63
- value,
64
- description,
65
- jsDocTags,
66
- });
67
- obj.properties.push(property);
68
- return property;
69
- };
70
-
71
- //----
72
- // REGULAR PROPERTIES
73
- //----
74
- for (const prop of parent.getApparentProperties()) {
75
- // CHECK INTERNAL TAG
76
- if (
77
- (prop.getJsDocTags(checker) ?? []).find(
78
- (tag) => tag.name === "internal",
79
- ) !== undefined
80
- )
81
- continue;
82
-
83
- // CHECK NODE IS A FORMAL PROPERTY
84
- const [node, type] = (() => {
85
- const node = prop.getDeclarations()?.[0] as
86
- | ts.PropertyDeclaration
87
- | undefined;
88
- const type: ts.Type | undefined = node
89
- ? checker.getTypeOfSymbolAtLocation(prop, node)
90
- : checker.getTypeOfPropertyOfType(parent, prop.name);
91
- return [node, type];
92
- })();
93
- if ((node && pred(node) === false) || type === undefined) continue;
94
-
95
- // GET EXACT TYPE
96
- const key: Metadata = MetadataHelper.literal_to_metadata(prop.name);
97
- const value: Metadata = explore_metadata(checker)(options)(
98
- collection,
99
- )(errors)(type, {
100
- top: false,
101
- object: obj,
102
- property: prop.name,
103
- nested: null,
104
- escaped: false,
105
- aliased: false,
106
- });
107
- Writable(value).optional =
108
- (prop.flags & ts.SymbolFlags.Optional) !== 0;
109
- insert(key)(value)(prop);
110
- }
111
-
112
- //----
113
- // DYNAMIC PROPERTIES
114
- //----
115
- for (const index of checker.getIndexInfosOfType(parent)) {
116
- // GET EXACT TYPE
117
- const analyzer = (type: ts.Type) => (property: {} | null) =>
118
- explore_metadata(checker)(options)(collection)(errors)(type, {
119
- top: false,
120
- object: obj,
121
- property,
122
- nested: null,
123
- escaped: false,
124
- aliased: false,
125
- });
126
- const key: Metadata = analyzer(index.keyType)(null);
127
- const value: Metadata = analyzer(index.type)({});
128
-
129
- // INSERT WITH REQUIRED CONFIGURATION
130
- insert(key)(value)(
131
- index.declaration?.parent
132
- ? checker.getSymbolAtLocation(index.declaration.parent)
133
- : undefined,
134
- (doc) => doc.name !== "default",
135
- );
136
- }
137
- return obj;
138
- };
139
-
140
- const isProperty = (node: ts.Declaration) =>
141
- ts.isPropertyDeclaration(node) ||
142
- ts.isPropertyAssignment(node) ||
143
- ts.isPropertySignature(node) ||
144
- ts.isTypeLiteralNode(node);
145
-
146
- const iterate_optional_coalesce = (meta: Metadata, type: ts.Type): void => {
147
- if (type.isUnionOrIntersection())
148
- type.types.forEach((child) => iterate_optional_coalesce(meta, child));
149
- else iterate_metadata_coalesce(meta, type);
150
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../schemas/metadata/Metadata";
4
+ import { MetadataObject } from "../../../schemas/metadata/MetadataObject";
5
+ import { MetadataProperty } from "../../../schemas/metadata/MetadataProperty";
6
+
7
+ import { Writable } from "../../../typings/Writable";
8
+
9
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
10
+
11
+ import { CommentFactory } from "../../CommentFactory";
12
+ import { MetadataCollection } from "../../MetadataCollection";
13
+ import { MetadataFactory } from "../../MetadataFactory";
14
+ import { MetadataHelper } from "./MetadataHelper";
15
+ import { explore_metadata } from "./explore_metadata";
16
+ import { iterate_metadata_coalesce } from "./iterate_metadata_coalesce";
17
+
18
+ export const emplace_metadata_object =
19
+ (checker: ts.TypeChecker) =>
20
+ (options: MetadataFactory.IOptions) =>
21
+ (collection: MetadataCollection) =>
22
+ (errors: MetadataFactory.IError[]) =>
23
+ (parent: ts.Type, nullable: boolean): MetadataObject => {
24
+ // EMPLACE OBJECT
25
+ const [obj, newbie] = collection.emplace(checker, parent);
26
+ ArrayUtil.add(obj.nullables, nullable, (elem) => elem === nullable);
27
+
28
+ if (newbie === false) return obj;
29
+
30
+ // PREPARE ASSETS
31
+ const isClass: boolean = parent.isClass();
32
+ const pred: (node: ts.Declaration) => boolean = isClass
33
+ ? (node) => {
34
+ const kind: ts.SyntaxKind | undefined = node
35
+ .getChildren()[0]
36
+ ?.getChildren()[0]?.kind;
37
+ return (
38
+ kind !== ts.SyntaxKind.PrivateKeyword &&
39
+ kind !== ts.SyntaxKind.ProtectedKeyword &&
40
+ (ts.isParameter(node) || isProperty(node))
41
+ );
42
+ }
43
+ : (node) => isProperty(node);
44
+
45
+ const insert =
46
+ (key: Metadata) =>
47
+ (value: Metadata) =>
48
+ (
49
+ symbol: ts.Symbol | undefined,
50
+ filter?: (doc: ts.JSDocTagInfo) => boolean,
51
+ ): MetadataProperty => {
52
+ // COMMENTS AND TAGS
53
+ const description: string | null = symbol
54
+ ? CommentFactory.description(symbol) ?? null
55
+ : null;
56
+ const jsDocTags: ts.JSDocTagInfo[] = (
57
+ symbol?.getJsDocTags() ?? []
58
+ ).filter(filter ?? (() => true));
59
+
60
+ // THE PROPERTY
61
+ const property = MetadataProperty.create({
62
+ key,
63
+ value,
64
+ description,
65
+ jsDocTags,
66
+ });
67
+ obj.properties.push(property);
68
+ return property;
69
+ };
70
+
71
+ //----
72
+ // REGULAR PROPERTIES
73
+ //----
74
+ for (const prop of parent.getApparentProperties()) {
75
+ // CHECK INTERNAL TAG
76
+ if (
77
+ (prop.getJsDocTags(checker) ?? []).find(
78
+ (tag) => tag.name === "internal",
79
+ ) !== undefined
80
+ )
81
+ continue;
82
+
83
+ // CHECK NODE IS A FORMAL PROPERTY
84
+ const [node, type] = (() => {
85
+ const node = prop.getDeclarations()?.[0] as
86
+ | ts.PropertyDeclaration
87
+ | undefined;
88
+ const type: ts.Type | undefined = node
89
+ ? checker.getTypeOfSymbolAtLocation(prop, node)
90
+ : checker.getTypeOfPropertyOfType(parent, prop.name);
91
+ return [node, type];
92
+ })();
93
+ if ((node && pred(node) === false) || type === undefined) continue;
94
+
95
+ // GET EXACT TYPE
96
+ const key: Metadata = MetadataHelper.literal_to_metadata(prop.name);
97
+ const value: Metadata = explore_metadata(checker)(options)(
98
+ collection,
99
+ )(errors)(type, {
100
+ top: false,
101
+ object: obj,
102
+ property: prop.name,
103
+ nested: null,
104
+ escaped: false,
105
+ aliased: false,
106
+ });
107
+ Writable(value).optional =
108
+ (prop.flags & ts.SymbolFlags.Optional) !== 0;
109
+ insert(key)(value)(prop);
110
+ }
111
+
112
+ //----
113
+ // DYNAMIC PROPERTIES
114
+ //----
115
+ for (const index of checker.getIndexInfosOfType(parent)) {
116
+ // GET EXACT TYPE
117
+ const analyzer = (type: ts.Type) => (property: {} | null) =>
118
+ explore_metadata(checker)(options)(collection)(errors)(type, {
119
+ top: false,
120
+ object: obj,
121
+ property,
122
+ nested: null,
123
+ escaped: false,
124
+ aliased: false,
125
+ });
126
+ const key: Metadata = analyzer(index.keyType)(null);
127
+ const value: Metadata = analyzer(index.type)({});
128
+
129
+ // INSERT WITH REQUIRED CONFIGURATION
130
+ insert(key)(value)(
131
+ index.declaration?.parent
132
+ ? checker.getSymbolAtLocation(index.declaration.parent)
133
+ : undefined,
134
+ (doc) => doc.name !== "default",
135
+ );
136
+ }
137
+ return obj;
138
+ };
139
+
140
+ const isProperty = (node: ts.Declaration) =>
141
+ ts.isPropertyDeclaration(node) ||
142
+ ts.isPropertyAssignment(node) ||
143
+ ts.isPropertySignature(node) ||
144
+ ts.isTypeLiteralNode(node);
145
+
146
+ const iterate_optional_coalesce = (meta: Metadata, type: ts.Type): void => {
147
+ if (type.isUnionOrIntersection())
148
+ type.types.forEach((child) => iterate_optional_coalesce(meta, child));
149
+ else iterate_metadata_coalesce(meta, type);
150
+ };
@@ -1,4 +1,4 @@
1
- import { Primitive } from "../Primitive";
2
-
3
- export const $clone = <T>(value: T): Primitive<T> =>
4
- JSON.parse(JSON.stringify(value));
1
+ import { Primitive } from "../Primitive";
2
+
3
+ export const $clone = <T>(value: T): Primitive<T> =>
4
+ JSON.parse(JSON.stringify(value));
@@ -1,40 +1,40 @@
1
- export const $convention = (rename: (str: string) => string) => {
2
- const main = (input: any): any => {
3
- if (typeof input === "object")
4
- if (input === null) return null;
5
- else if (Array.isArray(input)) return input.map(main);
6
- else if (
7
- input instanceof Boolean ||
8
- input instanceof BigInt ||
9
- input instanceof Number ||
10
- input instanceof String
11
- )
12
- return input.valueOf();
13
- else if (input instanceof Date) return new Date(input);
14
- else if (
15
- input instanceof Uint8Array ||
16
- input instanceof Uint8ClampedArray ||
17
- input instanceof Uint16Array ||
18
- input instanceof Uint32Array ||
19
- input instanceof BigUint64Array ||
20
- input instanceof Int8Array ||
21
- input instanceof Int16Array ||
22
- input instanceof Int32Array ||
23
- input instanceof BigInt64Array ||
24
- input instanceof Float32Array ||
25
- input instanceof Float64Array ||
26
- input instanceof DataView
27
- )
28
- return input;
29
- else return object(input);
30
- return input;
31
- };
32
- const object = (input: Record<string, any>) =>
33
- Object.fromEntries(
34
- Object.entries(input).map(([key, value]) => [
35
- rename(key),
36
- main(value),
37
- ]),
38
- );
39
- return main;
40
- };
1
+ export const $convention = (rename: (str: string) => string) => {
2
+ const main = (input: any): any => {
3
+ if (typeof input === "object")
4
+ if (input === null) return null;
5
+ else if (Array.isArray(input)) return input.map(main);
6
+ else if (
7
+ input instanceof Boolean ||
8
+ input instanceof BigInt ||
9
+ input instanceof Number ||
10
+ input instanceof String
11
+ )
12
+ return input.valueOf();
13
+ else if (input instanceof Date) return new Date(input);
14
+ else if (
15
+ input instanceof Uint8Array ||
16
+ input instanceof Uint8ClampedArray ||
17
+ input instanceof Uint16Array ||
18
+ input instanceof Uint32Array ||
19
+ input instanceof BigUint64Array ||
20
+ input instanceof Int8Array ||
21
+ input instanceof Int16Array ||
22
+ input instanceof Int32Array ||
23
+ input instanceof BigInt64Array ||
24
+ input instanceof Float32Array ||
25
+ input instanceof Float64Array ||
26
+ input instanceof DataView
27
+ )
28
+ return input;
29
+ else return object(input);
30
+ return input;
31
+ };
32
+ const object = (input: Record<string, any>) =>
33
+ Object.fromEntries(
34
+ Object.entries(input).map(([key, value]) => [
35
+ rename(key),
36
+ main(value),
37
+ ]),
38
+ );
39
+ return main;
40
+ };