typia 3.4.21 → 3.4.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -23
- package/lib/programmers/AssertProgrammer.js +79 -70
- package/lib/programmers/AssertProgrammer.js.map +1 -1
- package/lib/programmers/IsProgrammer.d.ts +1 -0
- package/lib/programmers/IsProgrammer.js +4 -0
- package/lib/programmers/IsProgrammer.js.map +1 -1
- package/lib/programmers/ValidateProgrammer.js +68 -59
- package/lib/programmers/ValidateProgrammer.js.map +1 -1
- package/lib/programmers/helpers/OptionPredicator.d.ts +1 -0
- package/lib/programmers/helpers/OptionPredicator.js +4 -0
- package/lib/programmers/helpers/OptionPredicator.js.map +1 -1
- package/lib/programmers/internal/application_schema.js +23 -21
- package/lib/programmers/internal/application_schema.js.map +1 -1
- package/lib/programmers/internal/check_dynamic_properties.js +5 -0
- package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
- package/lib/programmers/internal/check_object.d.ts +1 -0
- package/lib/programmers/internal/check_object.js.map +1 -1
- package/lib/transformers/ITransformOptions.d.ts +10 -0
- package/package.json +2 -2
- package/src/IValidation.ts +21 -21
- package/src/Primitive.ts +82 -82
- package/src/TypeGuardError.ts +36 -36
- package/src/executable/internal/CommandParser.ts +15 -15
- package/src/factories/CommentFactory.ts +10 -10
- package/src/factories/ExpressionFactory.ts +66 -66
- package/src/factories/IdentifierFactory.ts +72 -72
- package/src/factories/LiteralFactory.ts +44 -44
- package/src/factories/StatementFactory.ts +60 -60
- package/src/factories/TemplateFactory.ts +56 -56
- package/src/factories/TypeFactory.ts +101 -101
- package/src/factories/ValueFactory.ts +12 -12
- package/src/functional/$every.ts +11 -11
- package/src/functional/$is_email.ts +5 -5
- package/src/functional/$is_ipv4.ts +5 -5
- package/src/functional/$is_ipv6.ts +5 -5
- package/src/functional/$is_url.ts +5 -5
- package/src/functional/$is_uuid.ts +5 -5
- package/src/functional/$join.ts +50 -50
- package/src/functional/$report.ts +15 -15
- package/src/functional/$rest.ts +3 -3
- package/src/functional/$string.ts +37 -37
- package/src/functional/$tail.ts +6 -6
- package/src/index.ts +4 -4
- package/src/metadata/IJsDocTagInfo.ts +10 -10
- package/src/metadata/IMetadata.ts +25 -25
- package/src/metadata/IMetadataApplication.ts +7 -7
- package/src/metadata/IMetadataConstant.ts +16 -16
- package/src/metadata/IMetadataEntry.ts +6 -6
- package/src/metadata/IMetadataObject.ts +29 -29
- package/src/metadata/IMetadataProperty.ts +11 -11
- package/src/metadata/MetadataConstant.ts +3 -3
- package/src/metadata/MetadataObject.ts +131 -131
- package/src/metadata/MetadataProperty.ts +64 -64
- package/src/programmers/ApplicationProgrammer.ts +55 -55
- package/src/programmers/AssertProgrammer.ts +36 -29
- package/src/programmers/IsProgrammer.ts +5 -0
- package/src/programmers/ValidateProgrammer.ts +36 -29
- package/src/programmers/helpers/AtomicPredicator.ts +15 -15
- package/src/programmers/helpers/FunctionImporeter.ts +31 -31
- package/src/programmers/helpers/IExpressionEntry.ts +10 -10
- package/src/programmers/helpers/OptionPredicator.ts +4 -0
- package/src/programmers/helpers/StringifyJoinder.ts +111 -111
- package/src/programmers/helpers/StringifyPredicator.ts +18 -18
- package/src/programmers/helpers/UnionPredicator.ts +81 -81
- package/src/programmers/internal/application_array.ts +47 -47
- package/src/programmers/internal/application_boolean.ts +17 -17
- package/src/programmers/internal/application_constant.ts +29 -29
- package/src/programmers/internal/application_default_string.ts +32 -32
- package/src/programmers/internal/application_native.ts +29 -29
- package/src/programmers/internal/application_number.ts +76 -76
- package/src/programmers/internal/application_schema.ts +9 -6
- package/src/programmers/internal/application_string.ts +49 -49
- package/src/programmers/internal/application_templates.ts +27 -27
- package/src/programmers/internal/application_tuple.ts +29 -29
- package/src/programmers/internal/check_dynamic_properties.ts +164 -146
- package/src/programmers/internal/check_everything.ts +25 -25
- package/src/programmers/internal/check_length.ts +46 -46
- package/src/programmers/internal/check_native.ts +9 -9
- package/src/programmers/internal/check_object.ts +43 -42
- package/src/programmers/internal/check_string.ts +24 -24
- package/src/programmers/internal/check_string_tags.ts +63 -63
- package/src/programmers/internal/check_template.ts +50 -50
- package/src/programmers/internal/decode_union_object.ts +73 -73
- package/src/programmers/internal/feature_object_entries.ts +49 -49
- package/src/programmers/internal/metadata_to_pattern.ts +31 -31
- package/src/programmers/internal/stringify_dynamic_properties.ts +164 -164
- package/src/programmers/internal/stringify_native.ts +8 -8
- package/src/programmers/internal/stringify_regular_properties.ts +81 -81
- package/src/programmers/internal/template_to_pattern.ts +15 -15
- package/src/schemas/IJsonApplication.ts +9 -9
- package/src/schemas/IJsonComponents.ts +26 -26
- package/src/transform.ts +20 -20
- package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
- package/src/transformers/FileTransformer.ts +49 -49
- package/src/transformers/IProject.ts +11 -11
- package/src/transformers/ITransformOptions.ts +11 -0
- package/src/transformers/NodeTransformer.ts +19 -19
- package/src/transformers/features/miscellaneous/MetadataTransformer.ts +55 -55
- package/src/transformers/features/parsers/AssertParseTransformer.ts +36 -36
- package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +32 -32
- package/src/transformers/features/parsers/CreateIsParseTransformer.ts +32 -32
- package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +32 -32
- package/src/transformers/features/parsers/IsParseTransformer.ts +36 -36
- package/src/transformers/features/parsers/ValidateParseTransformer.ts +36 -36
- package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +38 -38
- package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +32 -32
- package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +32 -32
- package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +31 -31
- package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +32 -32
- package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +38 -38
- package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +38 -38
- package/src/transformers/features/validators/AssertTransformer.ts +43 -43
- package/src/transformers/features/validators/CreateAssertTransformer.ts +35 -35
- package/src/transformers/features/validators/CreateIsTransformer.ts +35 -35
- package/src/transformers/features/validators/CreateValidateTransformer.ts +35 -35
- package/src/transformers/features/validators/IsTransformer.ts +43 -43
- package/src/transformers/features/validators/ValidateTransformer.ts +43 -43
- package/src/typings/Atomic.ts +17 -17
- package/src/typings/ClassProperties.ts +5 -5
- package/src/typings/OmitNever.ts +3 -3
- package/src/typings/SpecialFields.ts +3 -3
- package/src/typings/Writable.ts +11 -11
- package/src/utils/ArrayUtil.ts +49 -49
- package/src/utils/Escaper.ts +50 -50
- package/src/utils/MapUtil.ts +14 -14
- package/src/utils/PatternUtil.ts +30 -30
- package/src/utils/Singleton.ts +17 -17
|
@@ -39,6 +39,7 @@ var application_schema = function (options) {
|
|
|
39
39
|
return function (blockNever) {
|
|
40
40
|
return function (meta, attribute) {
|
|
41
41
|
var e_1, _a, e_2, _b, e_3, _c, e_4, _d, e_5, _e, e_6, _f;
|
|
42
|
+
var _g;
|
|
42
43
|
if (meta.any === true)
|
|
43
44
|
return {};
|
|
44
45
|
else if (meta.nullable && meta.empty())
|
|
@@ -52,8 +53,8 @@ var application_schema = function (options) {
|
|
|
52
53
|
if (meta.templates.length && AtomicPredicator_1.AtomicPredicator.template(meta))
|
|
53
54
|
union.push((0, application_templates_1.application_templates)(meta, attribute));
|
|
54
55
|
try {
|
|
55
|
-
for (var
|
|
56
|
-
var constant =
|
|
56
|
+
for (var _h = __values(meta.constants), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
57
|
+
var constant = _j.value;
|
|
57
58
|
if (constant.type === "bigint")
|
|
58
59
|
throw new Error(NO_BIGINT);
|
|
59
60
|
else if ((constant.type === "string" && meta.templates.length) ||
|
|
@@ -65,13 +66,13 @@ var application_schema = function (options) {
|
|
|
65
66
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
66
67
|
finally {
|
|
67
68
|
try {
|
|
68
|
-
if (
|
|
69
|
+
if (_j && !_j.done && (_a = _h.return)) _a.call(_h);
|
|
69
70
|
}
|
|
70
71
|
finally { if (e_1) throw e_1.error; }
|
|
71
72
|
}
|
|
72
73
|
try {
|
|
73
|
-
for (var
|
|
74
|
-
var type =
|
|
74
|
+
for (var _k = __values(meta.atomics), _l = _k.next(); !_l.done; _l = _k.next()) {
|
|
75
|
+
var type = _l.value;
|
|
75
76
|
if (type === "bigint")
|
|
76
77
|
throw new Error(NO_BIGINT);
|
|
77
78
|
union.push(type === "string"
|
|
@@ -84,32 +85,33 @@ var application_schema = function (options) {
|
|
|
84
85
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
85
86
|
finally {
|
|
86
87
|
try {
|
|
87
|
-
if (
|
|
88
|
+
if (_l && !_l.done && (_b = _k.return)) _b.call(_k);
|
|
88
89
|
}
|
|
89
90
|
finally { if (e_2) throw e_2.error; }
|
|
90
91
|
}
|
|
91
92
|
try {
|
|
92
|
-
for (var
|
|
93
|
-
var schema =
|
|
93
|
+
for (var _m = __values(meta.arrays.values()), _o = _m.next(); !_o.done; _o = _m.next()) {
|
|
94
|
+
var schema = _o.value;
|
|
94
95
|
union.push((0, application_array_1.application_array)(options)(components)()(schema, meta.nullable, attribute));
|
|
95
96
|
}
|
|
96
97
|
}
|
|
97
98
|
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
98
99
|
finally {
|
|
99
100
|
try {
|
|
100
|
-
if (
|
|
101
|
+
if (_o && !_o.done && (_c = _m.return)) _c.call(_m);
|
|
101
102
|
}
|
|
102
103
|
finally { if (e_3) throw e_3.error; }
|
|
103
104
|
}
|
|
104
105
|
try {
|
|
105
|
-
for (var
|
|
106
|
-
var items =
|
|
106
|
+
for (var _p = __values(meta.tuples), _q = _p.next(); !_q.done; _q = _p.next()) {
|
|
107
|
+
var items = _q.value;
|
|
107
108
|
var tuple = (0, application_tuple_1.application_tuple)(options)(components)(items, meta.nullable, attribute);
|
|
108
|
-
if (options.purpose === "
|
|
109
|
+
if (options.purpose === "swagger" && items.length === 0)
|
|
110
|
+
throw new Error("Error on typia.application(): swagger does not support zero length tuple type.");
|
|
111
|
+
else if (options.purpose === "ajv" &&
|
|
112
|
+
!((_g = items[items.length - 1]) === null || _g === void 0 ? void 0 : _g.rest))
|
|
109
113
|
union.push(tuple);
|
|
110
114
|
else {
|
|
111
|
-
if (items.length === 0)
|
|
112
|
-
throw new Error("Error on typia.application(): swagger does not support zero length tuple type.");
|
|
113
115
|
var merged = items.reduce(function (x, y) {
|
|
114
116
|
return Metadata_1.Metadata.merge(x, y);
|
|
115
117
|
});
|
|
@@ -120,20 +122,20 @@ var application_schema = function (options) {
|
|
|
120
122
|
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
121
123
|
finally {
|
|
122
124
|
try {
|
|
123
|
-
if (
|
|
125
|
+
if (_q && !_q.done && (_d = _p.return)) _d.call(_p);
|
|
124
126
|
}
|
|
125
127
|
finally { if (e_4) throw e_4.error; }
|
|
126
128
|
}
|
|
127
129
|
try {
|
|
128
|
-
for (var
|
|
129
|
-
var native =
|
|
130
|
+
for (var _r = __values(meta.natives), _s = _r.next(); !_s.done; _s = _r.next()) {
|
|
131
|
+
var native = _s.value;
|
|
130
132
|
union.push((0, application_native_1.application_native)(options)(components)(native)(meta.nullable, attribute));
|
|
131
133
|
}
|
|
132
134
|
}
|
|
133
135
|
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
134
136
|
finally {
|
|
135
137
|
try {
|
|
136
|
-
if (
|
|
138
|
+
if (_s && !_s.done && (_e = _r.return)) _e.call(_r);
|
|
137
139
|
}
|
|
138
140
|
finally { if (e_5) throw e_5.error; }
|
|
139
141
|
}
|
|
@@ -142,8 +144,8 @@ var application_schema = function (options) {
|
|
|
142
144
|
if (meta.maps.length)
|
|
143
145
|
union.push((0, application_native_1.application_native)(options)(components)("Map")(meta.nullable, attribute));
|
|
144
146
|
try {
|
|
145
|
-
for (var
|
|
146
|
-
var obj =
|
|
147
|
+
for (var _t = __values(meta.objects), _u = _t.next(); !_u.done; _u = _t.next()) {
|
|
148
|
+
var obj = _u.value;
|
|
147
149
|
var key = obj.name + (meta.nullable ? ".Nullable" : "");
|
|
148
150
|
(0, application_object_1.application_object)(options)(components)(key, obj, meta.nullable);
|
|
149
151
|
union.push((options.purpose === "ajv" && obj.recursive
|
|
@@ -154,7 +156,7 @@ var application_schema = function (options) {
|
|
|
154
156
|
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
155
157
|
finally {
|
|
156
158
|
try {
|
|
157
|
-
if (
|
|
159
|
+
if (_u && !_u.done && (_f = _t.return)) _f.call(_t);
|
|
158
160
|
}
|
|
159
161
|
finally { if (e_6) throw e_6.error; }
|
|
160
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application_schema.js","sourceRoot":"","sources":["../../../src/programmers/internal/application_schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAmD;AAKnD,gEAA+D;AAC/D,yDAAwD;AACxD,6DAA4D;AAC5D,+DAA8D;AAC9D,2DAA0D;AAC1D,2DAA0D;AAC1D,2DAA0D;AAC1D,2DAA0D;AAC1D,iEAAgE;AAChE,yDAAwD;AAKjD,IAAM,kBAAkB,GAC3B,UAAC,OAAuC;IACxC,OAAA,UAAC,UAA2B;QAC5B,OAAA,UAA6B,UAAsB;YACnD,OAAA,UACI,IAAc,EACd,SAAiC
|
|
1
|
+
{"version":3,"file":"application_schema.js","sourceRoot":"","sources":["../../../src/programmers/internal/application_schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,11 @@ var check_everything_1 = require("./check_everything");
|
|
|
47
47
|
var metadata_to_pattern_1 = require("./metadata_to_pattern");
|
|
48
48
|
var check_dynamic_properties = function (props) {
|
|
49
49
|
return function (regular, dynamic) {
|
|
50
|
+
if (props.equals === true &&
|
|
51
|
+
props.undefined === false &&
|
|
52
|
+
regular.every(function (r) { return r.meta.required; }) &&
|
|
53
|
+
dynamic.length === 0)
|
|
54
|
+
return typescript_1.default.factory.createStrictEquality(typescript_1.default.factory.createNumericLiteral(regular.length), IdentifierFactory_1.IdentifierFactory.join(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("Object.keys"), undefined, [typescript_1.default.factory.createIdentifier("input")]), "length"));
|
|
50
55
|
var criteria = props.entries
|
|
51
56
|
? typescript_1.default.factory.createCallExpression(props.entries, undefined, [
|
|
52
57
|
typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("Object.keys"), undefined, [typescript_1.default.factory.createIdentifier("input")]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check_dynamic_properties.js","sourceRoot":"","sources":["../../../src/programmers/internal/check_dynamic_properties.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA4B;AAE5B,uEAAsE;AACtE,qEAAoE;AAGpE,uDAAsD;AAEtD,6DAA4D;AAKrD,IAAM,wBAAwB,GACjC,UAAC,KAA0B;IAC3B,OAAA,UACI,OAA2B,EAC3B,OAA2B;QAE3B,IAAM,QAAQ,GAAG,KAAK,CAAC,OAAO;YAC1B,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE;gBACtD,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC3B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAC1C,SAAS,EACT,CAAC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CACzC;gBACD,sBAAsB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC;aAClD,CAAC;YACJ,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC3B,qCAAiB,CAAC,IAAI,CAClB,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC3B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAC1C,SAAS,EACT,CAAC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CACzC,EACD,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CACjC,EACD,SAAS,EACT,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CACpD,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,EAAJ,CAAI,CAAC,CAAC,CACnC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAA,mCAAgB,EAAC,QAAQ,CAAC,CACvD,CAAC;IACN,CAAC;
|
|
1
|
+
{"version":3,"file":"check_dynamic_properties.js","sourceRoot":"","sources":["../../../src/programmers/internal/check_dynamic_properties.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check_object.js","sourceRoot":"","sources":["../../../src/programmers/internal/check_object.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAG5B,uEAAsE;AACtE,uDAAsD;AAK/C,IAAM,YAAY,GACrB,UAAC,KAA0B,IAAK,OAAA,UAAC,OAA2B;IAExD,IAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,EAAzB,CAAyB,CAAC,CAAC;IACrE,IAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,EAA1B,CAA0B,CAAC,CAAC;IACtE,IAAM,KAAK,GAAoB,OAAO,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,UAAU,EAAhB,CAAgB,CAAC,CAAC;IAGxE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAC9C,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IAGxE,KAAK,CAAC,IAAI,CAAC,IAAA,mDAAwB,EAAC,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC,EAb+B,CAa/B,CAAC;AAdO,QAAA,YAAY,gBAcnB;
|
|
1
|
+
{"version":3,"file":"check_object.js","sourceRoot":"","sources":["../../../src/programmers/internal/check_object.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAG5B,uEAAsE;AACtE,uDAAsD;AAK/C,IAAM,YAAY,GACrB,UAAC,KAA0B,IAAK,OAAA,UAAC,OAA2B;IAExD,IAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,EAAzB,CAAyB,CAAC,CAAC;IACrE,IAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,EAA1B,CAA0B,CAAC,CAAC;IACtE,IAAM,KAAK,GAAoB,OAAO,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,UAAU,EAAhB,CAAgB,CAAC,CAAC;IAGxE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAC9C,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IAGxE,KAAK,CAAC,IAAI,CAAC,IAAA,mDAAwB,EAAC,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC,EAb+B,CAa/B,CAAC;AAdO,QAAA,YAAY,gBAcnB;AAcN,IAAM,MAAM,GAAG,UAAC,KAA0B,IAAK,OAAA,UAAC,WAA4B;IACxE,OAAA,KAAK,CAAC,MAAM;QACR,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAClC,CAAC,CAAC,IAAA,mCAAgB,EACZ,oBAAE,CAAC,OAAO,CAAC,4BAA4B,CAAC,WAAW,CAAC,CACvD;AAJP,CAIO,EALoC,CAKpC,CAAC"}
|
|
@@ -42,4 +42,14 @@ export interface ITransformOptions {
|
|
|
42
42
|
* @default false
|
|
43
43
|
*/
|
|
44
44
|
functional?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Whether to check undefined value or not.
|
|
47
|
+
*
|
|
48
|
+
* JavaScript can assign `undefined` value to a specific property and it is an
|
|
49
|
+
* issue when validating without allowing superfluous properties. Should undefined
|
|
50
|
+
* value assigned superfluous property be allowed or not?
|
|
51
|
+
*
|
|
52
|
+
* @default true
|
|
53
|
+
*/
|
|
54
|
+
undefined?: boolean;
|
|
45
55
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typia",
|
|
3
|
-
"version": "3.4.
|
|
3
|
+
"version": "3.4.23",
|
|
4
4
|
"description": "Runtime type checkers and 5x faster JSON.stringify() function",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"typings": "lib/index.d.ts",
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
"suppress-warnings": "^1.0.2",
|
|
104
104
|
"ts-node": "^10.9.1",
|
|
105
105
|
"ttypescript": "^1.5.15",
|
|
106
|
-
"typescript": "^4.9.
|
|
106
|
+
"typescript": "^4.9.5",
|
|
107
107
|
"uuid": "^8.3.2",
|
|
108
108
|
"zod": "^3.19.1"
|
|
109
109
|
},
|
package/src/IValidation.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
export type IValidation<T = unknown> =
|
|
2
|
-
| IValidation.ISuccess<T>
|
|
3
|
-
| IValidation.IFailure;
|
|
4
|
-
export namespace IValidation {
|
|
5
|
-
export interface ISuccess<T = unknown> {
|
|
6
|
-
success: true;
|
|
7
|
-
data: T;
|
|
8
|
-
errors: [];
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface IFailure {
|
|
12
|
-
success: false;
|
|
13
|
-
errors: IError[];
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface IError {
|
|
17
|
-
path: string;
|
|
18
|
-
expected: string;
|
|
19
|
-
value: any;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
1
|
+
export type IValidation<T = unknown> =
|
|
2
|
+
| IValidation.ISuccess<T>
|
|
3
|
+
| IValidation.IFailure;
|
|
4
|
+
export namespace IValidation {
|
|
5
|
+
export interface ISuccess<T = unknown> {
|
|
6
|
+
success: true;
|
|
7
|
+
data: T;
|
|
8
|
+
errors: [];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface IFailure {
|
|
12
|
+
success: false;
|
|
13
|
+
errors: IError[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface IError {
|
|
17
|
+
path: string;
|
|
18
|
+
expected: string;
|
|
19
|
+
value: any;
|
|
20
|
+
}
|
|
21
|
+
}
|
package/src/Primitive.ts
CHANGED
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Primitive type.
|
|
3
|
-
*
|
|
4
|
-
* `Primitive` is a type of TMP (Type Meta Programming) type who converts its argument as a
|
|
5
|
-
* primitive type.
|
|
6
|
-
*
|
|
7
|
-
* If the target argument is a built-in class who returns its origin primitive type through
|
|
8
|
-
* the `valueOf()` method like the `String` or `Number`, its return type would be the
|
|
9
|
-
* `string` or `number`.
|
|
10
|
-
*
|
|
11
|
-
* Otherwise, the target argument is a type of custom class, all of its custom method would
|
|
12
|
-
* be erased and its prototype would be changed to the primitive `object`. Therefore, return
|
|
13
|
-
* type of the TMP type finally be the primitive object.
|
|
14
|
-
*
|
|
15
|
-
* In addition, if the target argument is a type of custom class and it has a special
|
|
16
|
-
* method `toJSON()`, return type of this `Primitive` would be not `Primitive<Instance>`
|
|
17
|
-
* but `Primitive<ReturnType<Instance.toJSON>>`.
|
|
18
|
-
*
|
|
19
|
-
* Before | After
|
|
20
|
-
* ------------------------|----------------------------------------
|
|
21
|
-
* `Boolean` | `boolean`
|
|
22
|
-
* `Number` | `number`
|
|
23
|
-
* `String` | `string`
|
|
24
|
-
* `Class` | `object`
|
|
25
|
-
* `Class` with `toJSON()` | `Primitive<ReturnType<Class.toJSON>>`
|
|
26
|
-
* Others | No change
|
|
27
|
-
*
|
|
28
|
-
* @template Instance Target argument type.
|
|
29
|
-
* @author Jenogho Nam - https://github.com/samchon
|
|
30
|
-
*/
|
|
31
|
-
export type Primitive<T> = _Equal<T, _Primitive<T>> extends true
|
|
32
|
-
? T
|
|
33
|
-
: _Primitive<T>;
|
|
34
|
-
|
|
35
|
-
type _Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
|
|
36
|
-
|
|
37
|
-
type _Primitive<Instance> = _ValueOf<Instance> extends object
|
|
38
|
-
? Instance extends object
|
|
39
|
-
? Instance extends IJsonable<infer Raw>
|
|
40
|
-
? _ValueOf<Raw> extends object
|
|
41
|
-
? Raw extends object
|
|
42
|
-
? _PrimitiveObject<Raw> // object would be primitified
|
|
43
|
-
: never // cannot be
|
|
44
|
-
: _ValueOf<Raw> // atomic value
|
|
45
|
-
: _PrimitiveObject<Instance> // object would be primitified
|
|
46
|
-
: never // cannot be
|
|
47
|
-
: _ValueOf<Instance>;
|
|
48
|
-
|
|
49
|
-
type _PrimitiveObject<Instance extends object> = Instance extends Array<infer T>
|
|
50
|
-
? _Primitive<T>[]
|
|
51
|
-
: {
|
|
52
|
-
[P in keyof Instance]: Instance[P] extends Function
|
|
53
|
-
? never
|
|
54
|
-
: _Primitive<Instance[P]>;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
type _ValueOf<Instance> = _IsValueOf<Instance, Boolean> extends true
|
|
58
|
-
? boolean
|
|
59
|
-
: _IsValueOf<Instance, Number> extends true
|
|
60
|
-
? number
|
|
61
|
-
: _IsValueOf<Instance, String> extends true
|
|
62
|
-
? string
|
|
63
|
-
: Instance;
|
|
64
|
-
|
|
65
|
-
type _IsValueOf<
|
|
66
|
-
Instance,
|
|
67
|
-
Object extends IValueOf<any>,
|
|
68
|
-
> = Instance extends Object
|
|
69
|
-
? Object extends IValueOf<infer Primitive>
|
|
70
|
-
? Instance extends Primitive
|
|
71
|
-
? false
|
|
72
|
-
: true // not Primitive, but Object
|
|
73
|
-
: false // cannot be
|
|
74
|
-
: false;
|
|
75
|
-
|
|
76
|
-
interface IValueOf<T> {
|
|
77
|
-
valueOf(): T;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
interface IJsonable<T> {
|
|
81
|
-
toJSON(): T;
|
|
82
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Primitive type.
|
|
3
|
+
*
|
|
4
|
+
* `Primitive` is a type of TMP (Type Meta Programming) type who converts its argument as a
|
|
5
|
+
* primitive type.
|
|
6
|
+
*
|
|
7
|
+
* If the target argument is a built-in class who returns its origin primitive type through
|
|
8
|
+
* the `valueOf()` method like the `String` or `Number`, its return type would be the
|
|
9
|
+
* `string` or `number`.
|
|
10
|
+
*
|
|
11
|
+
* Otherwise, the target argument is a type of custom class, all of its custom method would
|
|
12
|
+
* be erased and its prototype would be changed to the primitive `object`. Therefore, return
|
|
13
|
+
* type of the TMP type finally be the primitive object.
|
|
14
|
+
*
|
|
15
|
+
* In addition, if the target argument is a type of custom class and it has a special
|
|
16
|
+
* method `toJSON()`, return type of this `Primitive` would be not `Primitive<Instance>`
|
|
17
|
+
* but `Primitive<ReturnType<Instance.toJSON>>`.
|
|
18
|
+
*
|
|
19
|
+
* Before | After
|
|
20
|
+
* ------------------------|----------------------------------------
|
|
21
|
+
* `Boolean` | `boolean`
|
|
22
|
+
* `Number` | `number`
|
|
23
|
+
* `String` | `string`
|
|
24
|
+
* `Class` | `object`
|
|
25
|
+
* `Class` with `toJSON()` | `Primitive<ReturnType<Class.toJSON>>`
|
|
26
|
+
* Others | No change
|
|
27
|
+
*
|
|
28
|
+
* @template Instance Target argument type.
|
|
29
|
+
* @author Jenogho Nam - https://github.com/samchon
|
|
30
|
+
*/
|
|
31
|
+
export type Primitive<T> = _Equal<T, _Primitive<T>> extends true
|
|
32
|
+
? T
|
|
33
|
+
: _Primitive<T>;
|
|
34
|
+
|
|
35
|
+
type _Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
|
|
36
|
+
|
|
37
|
+
type _Primitive<Instance> = _ValueOf<Instance> extends object
|
|
38
|
+
? Instance extends object
|
|
39
|
+
? Instance extends IJsonable<infer Raw>
|
|
40
|
+
? _ValueOf<Raw> extends object
|
|
41
|
+
? Raw extends object
|
|
42
|
+
? _PrimitiveObject<Raw> // object would be primitified
|
|
43
|
+
: never // cannot be
|
|
44
|
+
: _ValueOf<Raw> // atomic value
|
|
45
|
+
: _PrimitiveObject<Instance> // object would be primitified
|
|
46
|
+
: never // cannot be
|
|
47
|
+
: _ValueOf<Instance>;
|
|
48
|
+
|
|
49
|
+
type _PrimitiveObject<Instance extends object> = Instance extends Array<infer T>
|
|
50
|
+
? _Primitive<T>[]
|
|
51
|
+
: {
|
|
52
|
+
[P in keyof Instance]: Instance[P] extends Function
|
|
53
|
+
? never
|
|
54
|
+
: _Primitive<Instance[P]>;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
type _ValueOf<Instance> = _IsValueOf<Instance, Boolean> extends true
|
|
58
|
+
? boolean
|
|
59
|
+
: _IsValueOf<Instance, Number> extends true
|
|
60
|
+
? number
|
|
61
|
+
: _IsValueOf<Instance, String> extends true
|
|
62
|
+
? string
|
|
63
|
+
: Instance;
|
|
64
|
+
|
|
65
|
+
type _IsValueOf<
|
|
66
|
+
Instance,
|
|
67
|
+
Object extends IValueOf<any>,
|
|
68
|
+
> = Instance extends Object
|
|
69
|
+
? Object extends IValueOf<infer Primitive>
|
|
70
|
+
? Instance extends Primitive
|
|
71
|
+
? false
|
|
72
|
+
: true // not Primitive, but Object
|
|
73
|
+
: false // cannot be
|
|
74
|
+
: false;
|
|
75
|
+
|
|
76
|
+
interface IValueOf<T> {
|
|
77
|
+
valueOf(): T;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
interface IJsonable<T> {
|
|
81
|
+
toJSON(): T;
|
|
82
|
+
}
|
package/src/TypeGuardError.ts
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
export class TypeGuardError extends Error {
|
|
2
|
-
public readonly method: string;
|
|
3
|
-
public readonly path: string | undefined;
|
|
4
|
-
public readonly expected: string;
|
|
5
|
-
public readonly value: any;
|
|
6
|
-
|
|
7
|
-
public constructor(props: TypeGuardError.IProps) {
|
|
8
|
-
// MESSAGE CONSTRUCTION
|
|
9
|
-
super(
|
|
10
|
-
props.message ||
|
|
11
|
-
`Error on ${props.method}(): invalid type${
|
|
12
|
-
props.path ? ` on ${props.path}` : ""
|
|
13
|
-
}, expect to be ${props.expected}`,
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
// INHERITANCE POLYFILL
|
|
17
|
-
const proto = new.target.prototype;
|
|
18
|
-
if (Object.setPrototypeOf) Object.setPrototypeOf(this, proto);
|
|
19
|
-
else (this as any).__proto__ = proto;
|
|
20
|
-
|
|
21
|
-
// ASSIGN MEMBERS
|
|
22
|
-
this.method = props.method;
|
|
23
|
-
this.path = props.path;
|
|
24
|
-
this.expected = props.expected;
|
|
25
|
-
this.value = props.value;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
export namespace TypeGuardError {
|
|
29
|
-
export interface IProps {
|
|
30
|
-
method: string;
|
|
31
|
-
path?: string;
|
|
32
|
-
expected: string;
|
|
33
|
-
value: any;
|
|
34
|
-
message?: string;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
1
|
+
export class TypeGuardError extends Error {
|
|
2
|
+
public readonly method: string;
|
|
3
|
+
public readonly path: string | undefined;
|
|
4
|
+
public readonly expected: string;
|
|
5
|
+
public readonly value: any;
|
|
6
|
+
|
|
7
|
+
public constructor(props: TypeGuardError.IProps) {
|
|
8
|
+
// MESSAGE CONSTRUCTION
|
|
9
|
+
super(
|
|
10
|
+
props.message ||
|
|
11
|
+
`Error on ${props.method}(): invalid type${
|
|
12
|
+
props.path ? ` on ${props.path}` : ""
|
|
13
|
+
}, expect to be ${props.expected}`,
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
// INHERITANCE POLYFILL
|
|
17
|
+
const proto = new.target.prototype;
|
|
18
|
+
if (Object.setPrototypeOf) Object.setPrototypeOf(this, proto);
|
|
19
|
+
else (this as any).__proto__ = proto;
|
|
20
|
+
|
|
21
|
+
// ASSIGN MEMBERS
|
|
22
|
+
this.method = props.method;
|
|
23
|
+
this.path = props.path;
|
|
24
|
+
this.expected = props.expected;
|
|
25
|
+
this.value = props.value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export namespace TypeGuardError {
|
|
29
|
+
export interface IProps {
|
|
30
|
+
method: string;
|
|
31
|
+
path?: string;
|
|
32
|
+
expected: string;
|
|
33
|
+
value: any;
|
|
34
|
+
message?: string;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export namespace CommandParser {
|
|
2
|
-
export function parse(argList: string[]): Record<string, string> {
|
|
3
|
-
const output: Record<string, string> = {};
|
|
4
|
-
argList.forEach((arg, i) => {
|
|
5
|
-
if (arg.startsWith("--") === false) return;
|
|
6
|
-
|
|
7
|
-
const key = arg.slice(2);
|
|
8
|
-
const value: string | undefined = argList[i + 1];
|
|
9
|
-
if (value === undefined || value.startsWith("--")) return;
|
|
10
|
-
|
|
11
|
-
output[key] = value;
|
|
12
|
-
});
|
|
13
|
-
return output;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
1
|
+
export namespace CommandParser {
|
|
2
|
+
export function parse(argList: string[]): Record<string, string> {
|
|
3
|
+
const output: Record<string, string> = {};
|
|
4
|
+
argList.forEach((arg, i) => {
|
|
5
|
+
if (arg.startsWith("--") === false) return;
|
|
6
|
+
|
|
7
|
+
const key = arg.slice(2);
|
|
8
|
+
const value: string | undefined = argList[i + 1];
|
|
9
|
+
if (value === undefined || value.startsWith("--")) return;
|
|
10
|
+
|
|
11
|
+
output[key] = value;
|
|
12
|
+
});
|
|
13
|
+
return output;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
|
|
3
|
-
export namespace CommentFactory {
|
|
4
|
-
export function generate(comments: ts.SymbolDisplayPart[]): string {
|
|
5
|
-
return comments
|
|
6
|
-
.map((part) => part.text)
|
|
7
|
-
.map((str) => str.split("\r\n").join("\n"))
|
|
8
|
-
.join("");
|
|
9
|
-
}
|
|
10
|
-
}
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
|
|
3
|
+
export namespace CommentFactory {
|
|
4
|
+
export function generate(comments: ts.SymbolDisplayPart[]): string {
|
|
5
|
+
return comments
|
|
6
|
+
.map((part) => part.text)
|
|
7
|
+
.map((str) => str.split("\r\n").join("\n"))
|
|
8
|
+
.join("");
|
|
9
|
+
}
|
|
10
|
+
}
|