typia 4.0.9 → 4.0.10-dev.20230615

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.
@@ -77,7 +77,7 @@ var MetadataTagFactory;
77
77
  };
78
78
  },
79
79
  type: function (_identifier, metadata, text, _output) {
80
- return has_atomic(metadata)("number") &&
80
+ return has_atomic("number")(new Set())(metadata) &&
81
81
  (text === "int" || text === "uint")
82
82
  ? { kind: "type", value: text }
83
83
  : text === "{int}" || text === "{uint}"
@@ -140,10 +140,8 @@ var MetadataTagFactory;
140
140
  };
141
141
  },
142
142
  format: function (identifier, metadata, str, output) {
143
- validate(identifier, metadata, output, "format", "string", [
144
- "pattern",
145
- ]);
146
143
  var value = FORMATS.get(str);
144
+ validate(identifier, metadata, output, "format", value === "date" || value === "datetime" ? "Date" : "string", ["pattern"]);
147
145
  if (value === undefined)
148
146
  return null;
149
147
  return {
@@ -212,10 +210,15 @@ var WRONG_TYPE = function (tag, type, identifier) { return "".concat(LABEL, ": "
212
210
  var validate = function (identifier, metadata, output, kind, type, neighbors) {
213
211
  var e_2, _a;
214
212
  if (type === "array") {
215
- if (has_array(metadata) === false)
213
+ if (has_array(new Set())(metadata) === false)
216
214
  throw new Error(WRONG_TYPE(kind, "array", identifier));
217
215
  }
218
- else if (has_atomic(metadata)(type) === false)
216
+ else if (type === "Date") {
217
+ if (has_native("Date")(new Set())(metadata) === false &&
218
+ has_atomic("string")(new Set())(metadata) === false)
219
+ throw new Error(WRONG_TYPE(kind, "string", identifier));
220
+ }
221
+ else if (has_atomic(type)(new Set())(metadata) === false)
219
222
  throw new Error(WRONG_TYPE(kind, type, identifier));
220
223
  if (output.some(function (tag) { return tag.kind === kind; }))
221
224
  throw new Error("".concat(LABEL, ": duplicated ").concat(kind, " tags on \"").concat(identifier(), "\"."));
@@ -237,21 +240,62 @@ var validate = function (identifier, metadata, output, kind, type, neighbors) {
237
240
  finally { if (e_2) throw e_2.error; }
238
241
  }
239
242
  };
240
- var has_atomic = function (metadata) {
241
- return function (type) {
242
- return metadata.atomics.find(type === "number"
243
- ? function (atom) { return atom === type || atom === "bigint"; }
244
- : function (atom) { return atom === type; }) !== undefined ||
245
- metadata.arrays.some(function (child) { return has_atomic(child.value)(type); }) ||
246
- metadata.tuples.some(function (tuple) {
247
- return tuple.elements.some(function (child) { return has_atomic(child)(type); });
248
- });
243
+ var has_atomic = function (type) {
244
+ return function (visited) {
245
+ return function (metadata) {
246
+ if (visited.has(metadata))
247
+ return false;
248
+ visited.add(metadata);
249
+ return (metadata.atomics.find(type === "number"
250
+ ? function (atom) { return atom === type || atom === "bigint"; }
251
+ : function (atom) { return atom === type; }) !== undefined ||
252
+ metadata.arrays.some(function (array) {
253
+ return has_atomic(type)(visited)(array.value);
254
+ }) ||
255
+ metadata.tuples.some(function (tuple) {
256
+ return tuple.elements.some(has_atomic(type)(visited));
257
+ }) ||
258
+ metadata.aliases.some(function (alias) {
259
+ return has_atomic(type)(visited)(alias.value);
260
+ }) ||
261
+ (metadata.resolved !== null &&
262
+ has_atomic(type)(visited)(metadata.resolved)));
263
+ };
249
264
  };
250
265
  };
251
- var has_array = function (metadata) {
252
- return metadata.arrays.length !== 0 ||
253
- metadata.tuples.some(function (tuple) {
254
- return tuple.elements.some(function (child) { return has_array(child); });
255
- });
266
+ var has_native = function (type) {
267
+ return function (visited) {
268
+ return function (metadata) {
269
+ if (visited.has(metadata))
270
+ return false;
271
+ visited.add(metadata);
272
+ return (metadata.natives.find(function (native) { return native === type; }) !== undefined ||
273
+ metadata.arrays.some(function (child) {
274
+ return has_native(type)(visited)(child.value);
275
+ }) ||
276
+ metadata.tuples.some(function (tuple) {
277
+ return tuple.elements.some(has_native(type)(visited));
278
+ }) ||
279
+ metadata.aliases.some(function (alias) {
280
+ return has_native(type)(visited)(alias.value);
281
+ }) ||
282
+ (metadata.resolved !== null &&
283
+ has_native(type)(visited)(metadata.resolved)));
284
+ };
285
+ };
286
+ };
287
+ var has_array = function (visited) {
288
+ return function (metadata) {
289
+ if (visited.has(metadata))
290
+ return false;
291
+ visited.add(metadata);
292
+ return (metadata.arrays.length !== 0 ||
293
+ metadata.tuples.some(function (tuple) {
294
+ return tuple.elements.some(has_array(visited));
295
+ }) ||
296
+ metadata.aliases.some(function (alias) { return has_array(visited)(alias.value); }) ||
297
+ (metadata.resolved !== null &&
298
+ has_array(visited)(metadata.resolved)));
299
+ };
256
300
  };
257
301
  //# sourceMappingURL=MetadataTagFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataTagFactory.js","sourceRoot":"","sources":["../../src/factories/MetadataTagFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MetadataTagFactory.js","sourceRoot":"","sources":["../../src/factories/MetadataTagFactory.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "typia",
3
- "version": "4.0.9",
3
+ "version": "4.0.10-dev.20230615",
4
4
  "description": "Superfast runtime validators with only one line",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -84,7 +84,7 @@ export namespace MetadataTagFactory {
84
84
  NUMBER
85
85
  ----------------------------------------------------------- */
86
86
  type: (_identifier, metadata, text, _output) => {
87
- return has_atomic(metadata)("number") &&
87
+ return has_atomic("number")(new Set())(metadata) &&
88
88
  (text === "int" || text === "uint")
89
89
  ? { kind: "type", value: text }
90
90
  : text === "{int}" || text === "{uint}"
@@ -169,15 +169,19 @@ export namespace MetadataTagFactory {
169
169
  /* -----------------------------------------------------------
170
170
  STRING
171
171
  ----------------------------------------------------------- */
172
+ // Ignore arbitrary @format values in the internal metadata,
173
+ // these are currently only supported on the typia.application() API.
172
174
  format: (identifier, metadata, str, output) => {
173
- validate(identifier, metadata, output, "format", "string", [
174
- "pattern",
175
- ]);
176
-
177
- // Ignore arbitrary @format values in the internal metadata,
178
- // these are currently only supported on the typia.application() API.
179
175
  const value: IMetadataTag.IFormat["value"] | undefined =
180
176
  FORMATS.get(str);
177
+ validate(
178
+ identifier,
179
+ metadata,
180
+ output,
181
+ "format",
182
+ value === "date" || value === "datetime" ? "Date" : "string",
183
+ ["pattern"],
184
+ );
181
185
  if (value === undefined) return null;
182
186
  return {
183
187
  kind: "format",
@@ -255,14 +259,20 @@ const validate = (
255
259
  metadata: Metadata,
256
260
  output: IMetadataTag[],
257
261
  kind: IMetadataTag["kind"],
258
- type: "array" | "string" | "number",
262
+ type: "array" | "string" | "number" | "Date",
259
263
  neighbors: IMetadataTag["kind"][],
260
264
  ): void => {
261
265
  // TYPE CHECKING
262
266
  if (type === "array") {
263
- if (has_array(metadata) === false)
267
+ if (has_array(new Set())(metadata) === false)
264
268
  throw new Error(WRONG_TYPE(kind, "array", identifier));
265
- } else if (has_atomic(metadata)(type) === false)
269
+ } else if (type === "Date") {
270
+ if (
271
+ has_native("Date")(new Set())(metadata) === false &&
272
+ has_atomic("string")(new Set())(metadata) === false
273
+ )
274
+ throw new Error(WRONG_TYPE(kind, "string", identifier));
275
+ } else if (has_atomic(type)(new Set())(metadata) === false)
266
276
  throw new Error(WRONG_TYPE(kind, type, identifier));
267
277
 
268
278
  // DUPLICATED TAG
@@ -281,20 +291,65 @@ const validate = (
281
291
 
282
292
  // @todo: must block repeated array and tuple type
283
293
  const has_atomic =
284
- (metadata: Metadata) =>
285
- (type: "string" | "number"): boolean =>
286
- metadata.atomics.find(
287
- type === "number"
288
- ? (atom: string) => atom === type || atom === "bigint"
289
- : (atom: string) => atom === type,
290
- ) !== undefined ||
291
- metadata.arrays.some((child) => has_atomic(child.value)(type)) ||
292
- metadata.tuples.some((tuple) =>
293
- tuple.elements.some((child) => has_atomic(child)(type)),
294
+ (type: "string" | "number") =>
295
+ (visited: Set<Metadata>) =>
296
+ (metadata: Metadata): boolean => {
297
+ if (visited.has(metadata)) return false;
298
+ visited.add(metadata);
299
+ return (
300
+ metadata.atomics.find(
301
+ type === "number"
302
+ ? (atom: string) => atom === type || atom === "bigint"
303
+ : (atom: string) => atom === type,
304
+ ) !== undefined ||
305
+ metadata.arrays.some((array) =>
306
+ has_atomic(type)(visited)(array.value),
307
+ ) ||
308
+ metadata.tuples.some((tuple) =>
309
+ tuple.elements.some(has_atomic(type)(visited)),
310
+ ) ||
311
+ metadata.aliases.some((alias) =>
312
+ has_atomic(type)(visited)(alias.value),
313
+ ) ||
314
+ (metadata.resolved !== null &&
315
+ has_atomic(type)(visited)(metadata.resolved))
294
316
  );
317
+ };
295
318
 
296
- const has_array = (metadata: Metadata): boolean =>
297
- metadata.arrays.length !== 0 ||
298
- metadata.tuples.some((tuple) =>
299
- tuple.elements.some((child) => has_array(child)),
300
- );
319
+ const has_native =
320
+ (type: string) =>
321
+ (visited: Set<Metadata>) =>
322
+ (metadata: Metadata): boolean => {
323
+ if (visited.has(metadata)) return false;
324
+ visited.add(metadata);
325
+ return (
326
+ metadata.natives.find((native) => native === type) !== undefined ||
327
+ metadata.arrays.some((child) =>
328
+ has_native(type)(visited)(child.value),
329
+ ) ||
330
+ metadata.tuples.some((tuple) =>
331
+ tuple.elements.some(has_native(type)(visited)),
332
+ ) ||
333
+ metadata.aliases.some((alias) =>
334
+ has_native(type)(visited)(alias.value),
335
+ ) ||
336
+ (metadata.resolved !== null &&
337
+ has_native(type)(visited)(metadata.resolved))
338
+ );
339
+ };
340
+
341
+ const has_array =
342
+ (visited: Set<Metadata>) =>
343
+ (metadata: Metadata): boolean => {
344
+ if (visited.has(metadata)) return false;
345
+ visited.add(metadata);
346
+ return (
347
+ metadata.arrays.length !== 0 ||
348
+ metadata.tuples.some((tuple) =>
349
+ tuple.elements.some(has_array(visited)),
350
+ ) ||
351
+ metadata.aliases.some((alias) => has_array(visited)(alias.value)) ||
352
+ (metadata.resolved !== null &&
353
+ has_array(visited)(metadata.resolved))
354
+ );
355
+ };
@@ -1,30 +1,30 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../../metadata/Metadata";
4
- import { MetadataAlias } from "../../../metadata/MetadataAlias";
5
-
6
- import { ArrayUtil } from "../../../utils/ArrayUtil";
7
-
8
- import { MetadataCollection } from "../../MetadataCollection";
9
- import { MetadataFactory } from "../../MetadataFactory";
10
- import { emplace_metadata_definition } from "./emplace_metadata_definition";
11
-
12
- export const iterate_metadata_alias =
13
- (checker: ts.TypeChecker) =>
14
- (options: MetadataFactory.IOptions) =>
15
- (collection: MetadataCollection) =>
16
- (meta: Metadata, type: ts.Type): boolean => {
17
- if (options.absorb !== false || type.aliasSymbol === undefined)
18
- return false;
19
-
20
- const node: ts.Declaration | undefined =
21
- type.aliasSymbol.declarations?.[0];
22
- if (node === undefined) return false;
23
-
24
- // CONSTRUCT DEFINITION
25
- const alias: MetadataAlias = emplace_metadata_definition(checker)(
26
- options,
27
- )(collection)(type, meta.nullable);
28
- ArrayUtil.add(meta.aliases, alias, (elem) => elem.name === alias.name);
29
- return true;
30
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../metadata/Metadata";
4
+ import { MetadataAlias } from "../../../metadata/MetadataAlias";
5
+
6
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
7
+
8
+ import { MetadataCollection } from "../../MetadataCollection";
9
+ import { MetadataFactory } from "../../MetadataFactory";
10
+ import { emplace_metadata_definition } from "./emplace_metadata_definition";
11
+
12
+ export const iterate_metadata_alias =
13
+ (checker: ts.TypeChecker) =>
14
+ (options: MetadataFactory.IOptions) =>
15
+ (collection: MetadataCollection) =>
16
+ (meta: Metadata, type: ts.Type): boolean => {
17
+ if (options.absorb !== false || type.aliasSymbol === undefined)
18
+ return false;
19
+
20
+ const node: ts.Declaration | undefined =
21
+ type.aliasSymbol.declarations?.[0];
22
+ if (node === undefined) return false;
23
+
24
+ // CONSTRUCT DEFINITION
25
+ const alias: MetadataAlias = emplace_metadata_definition(checker)(
26
+ options,
27
+ )(collection)(type, meta.nullable);
28
+ ArrayUtil.add(meta.aliases, alias, (elem) => elem.name === alias.name);
29
+ return true;
30
+ };
@@ -1,87 +1,87 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../../metadata/Metadata";
4
-
5
- import { MetadataCollection } from "../../MetadataCollection";
6
- import { MetadataFactory } from "../../MetadataFactory";
7
- import { explore_metadata } from "./explore_metadata";
8
- import { iterate_metadata } from "./iterate_metadata";
9
- import { iterate_metadata_object } from "./iterate_metadata_object";
10
-
11
- export const iterate_metadata_intersection =
12
- (checker: ts.TypeChecker) =>
13
- (options: MetadataFactory.IOptions) =>
14
- (collection: MetadataCollection) =>
15
- (
16
- meta: Metadata,
17
- type: ts.Type,
18
- resolved: boolean,
19
- aliased: boolean,
20
- ): boolean => {
21
- if (!type.isIntersection()) return false;
22
-
23
- // COSTRUCT FAKE METADATA LIST
24
- const fakeCollection: MetadataCollection = new MetadataCollection();
25
- const children: Metadata[] = [
26
- ...new Map(
27
- type.types.map((t) => {
28
- const m: Metadata = explore_metadata(checker)({
29
- ...options,
30
- absorb: true,
31
- })(fakeCollection)(t, resolved);
32
- return [m.getName(), m] as const;
33
- }),
34
- ).values(),
35
- ];
36
-
37
- // ONLY ONE CHILD AFTER REMOVING DUPLICATES
38
- if (children.length === 1) {
39
- iterate_metadata(checker)(options)(collection)(
40
- meta,
41
- type.types[0]!,
42
- resolved,
43
- aliased,
44
- );
45
- return true;
46
- }
47
-
48
- // ONLY OBJECT TYPES -> MERGE
49
- const object: boolean = children.every(
50
- (c) => c.objects.length && c.objects.length === c.size(),
51
- );
52
- if (object)
53
- return iterate_metadata_object(checker)(options)(collection)(
54
- meta,
55
- type,
56
- resolved,
57
- true,
58
- );
59
-
60
- // ABSORB TO ATOMIC (OR CONSTANT) TYPE
61
- const atomics: Metadata[] = children.filter(
62
- (c) =>
63
- (c.atomics.length ? 1 : 0 + c.constants.length ? 1 : 0) ===
64
- c.bucket(),
65
- );
66
- const objects: Metadata[] = children.filter(
67
- (c) => c.objects.length && c.objects.length === c.size(),
68
- );
69
- if (
70
- atomics.length === 0 ||
71
- atomics.length + objects.length !== children.length
72
- )
73
- throw new Error(message(children));
74
-
75
- const least: Metadata = atomics.reduce((x, y) => {
76
- if (Metadata.covers(x, y)) return y;
77
- else if (Metadata.covers(y, x)) return x;
78
- throw new Error(message(children));
79
- });
80
- Object.assign(meta, Metadata.merge(meta, least));
81
- return true;
82
- };
83
-
84
- const message = (children: Metadata[]) =>
85
- `Error on typia.MetadataFactory.analyze(): nonsensible intersection type detected - ${children
86
- .map((c) => c.getName())
87
- .join(" & ")}.`;
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../metadata/Metadata";
4
+
5
+ import { MetadataCollection } from "../../MetadataCollection";
6
+ import { MetadataFactory } from "../../MetadataFactory";
7
+ import { explore_metadata } from "./explore_metadata";
8
+ import { iterate_metadata } from "./iterate_metadata";
9
+ import { iterate_metadata_object } from "./iterate_metadata_object";
10
+
11
+ export const iterate_metadata_intersection =
12
+ (checker: ts.TypeChecker) =>
13
+ (options: MetadataFactory.IOptions) =>
14
+ (collection: MetadataCollection) =>
15
+ (
16
+ meta: Metadata,
17
+ type: ts.Type,
18
+ resolved: boolean,
19
+ aliased: boolean,
20
+ ): boolean => {
21
+ if (!type.isIntersection()) return false;
22
+
23
+ // COSTRUCT FAKE METADATA LIST
24
+ const fakeCollection: MetadataCollection = new MetadataCollection();
25
+ const children: Metadata[] = [
26
+ ...new Map(
27
+ type.types.map((t) => {
28
+ const m: Metadata = explore_metadata(checker)({
29
+ ...options,
30
+ absorb: true,
31
+ })(fakeCollection)(t, resolved);
32
+ return [m.getName(), m] as const;
33
+ }),
34
+ ).values(),
35
+ ];
36
+
37
+ // ONLY ONE CHILD AFTER REMOVING DUPLICATES
38
+ if (children.length === 1) {
39
+ iterate_metadata(checker)(options)(collection)(
40
+ meta,
41
+ type.types[0]!,
42
+ resolved,
43
+ aliased,
44
+ );
45
+ return true;
46
+ }
47
+
48
+ // ONLY OBJECT TYPES -> MERGE
49
+ const object: boolean = children.every(
50
+ (c) => c.objects.length && c.objects.length === c.size(),
51
+ );
52
+ if (object)
53
+ return iterate_metadata_object(checker)(options)(collection)(
54
+ meta,
55
+ type,
56
+ resolved,
57
+ true,
58
+ );
59
+
60
+ // ABSORB TO ATOMIC (OR CONSTANT) TYPE
61
+ const atomics: Metadata[] = children.filter(
62
+ (c) =>
63
+ (c.atomics.length ? 1 : 0 + c.constants.length ? 1 : 0) ===
64
+ c.bucket(),
65
+ );
66
+ const objects: Metadata[] = children.filter(
67
+ (c) => c.objects.length && c.objects.length === c.size(),
68
+ );
69
+ if (
70
+ atomics.length === 0 ||
71
+ atomics.length + objects.length !== children.length
72
+ )
73
+ throw new Error(message(children));
74
+
75
+ const least: Metadata = atomics.reduce((x, y) => {
76
+ if (Metadata.covers(x, y)) return y;
77
+ else if (Metadata.covers(y, x)) return x;
78
+ throw new Error(message(children));
79
+ });
80
+ Object.assign(meta, Metadata.merge(meta, least));
81
+ return true;
82
+ };
83
+
84
+ const message = (children: Metadata[]) =>
85
+ `Error on typia.MetadataFactory.analyze(): nonsensible intersection type detected - ${children
86
+ .map((c) => c.getName())
87
+ .join(" & ")}.`;
@@ -1,143 +1,143 @@
1
- import ts from "typescript";
2
-
3
- import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
-
5
- import { MetadataObject } from "../../metadata/MetadataObject";
6
-
7
- import { ArrayUtil } from "../../utils/ArrayUtil";
8
-
9
- import { metadata_to_pattern } from "../internal/metadata_to_pattern";
10
- import { prune_object_properties } from "../internal/prune_object_properties";
11
- import { IExpressionEntry } from "./IExpressionEntry";
12
-
13
- export namespace PruneJoiner {
14
- export const object = (
15
- input: ts.Expression,
16
- entries: IExpressionEntry[],
17
- obj: MetadataObject,
18
- ): ts.ConciseBody => {
19
- // PREPARE ASSETS
20
- const regular = entries.filter((entry) => entry.key.isSoleLiteral());
21
- const dynamic = entries.filter((entry) => !entry.key.isSoleLiteral());
22
-
23
- const statements: ts.Statement[] = ArrayUtil.flat(
24
- regular.map((entry) =>
25
- ts.isBlock(entry.expression)
26
- ? [...entry.expression.statements]
27
- : [ts.factory.createExpressionStatement(entry.expression)],
28
- ),
29
- );
30
- if (dynamic.length)
31
- statements.push(
32
- ts.factory.createExpressionStatement(
33
- iterate_dynamic_properties({ regular, dynamic })(input),
34
- ),
35
- );
36
-
37
- statements.push(prune_object_properties(obj));
38
- return ts.factory.createBlock(statements, true);
39
- };
40
-
41
- export const array = (input: ts.Expression, arrow: ts.ArrowFunction) =>
42
- ts.factory.createCallExpression(
43
- IdentifierFactory.access(input)("forEach"),
44
- undefined,
45
- [arrow],
46
- );
47
-
48
- export const tuple = (
49
- children: ts.ConciseBody[],
50
- rest: ts.ConciseBody | null,
51
- ): ts.Block => {
52
- const entire: ts.ConciseBody[] = [...children];
53
- if (rest !== null) entire.push(rest);
54
-
55
- const statements: ts.Statement[] = ArrayUtil.flat(
56
- entire.map((elem) =>
57
- ts.isBlock(elem)
58
- ? [...elem.statements]
59
- : [ts.factory.createExpressionStatement(elem)],
60
- ),
61
- );
62
- return ts.factory.createBlock(statements, true);
63
- };
64
- }
65
-
66
- const iterate_dynamic_properties =
67
- (props: { regular: IExpressionEntry[]; dynamic: IExpressionEntry[] }) =>
68
- (input: ts.Expression) =>
69
- ts.factory.createCallExpression(
70
- IdentifierFactory.access(
71
- ts.factory.createCallExpression(
72
- ts.factory.createIdentifier("Object.entries"),
73
- undefined,
74
- [input],
75
- ),
76
- )("forEach"),
77
- undefined,
78
- [
79
- ts.factory.createArrowFunction(
80
- undefined,
81
- undefined,
82
- [
83
- IdentifierFactory.parameter(
84
- ts.factory.createArrayBindingPattern(
85
- ["key", "value"].map((l) =>
86
- ts.factory.createBindingElement(
87
- undefined,
88
- undefined,
89
- ts.factory.createIdentifier(l),
90
- undefined,
91
- ),
92
- ),
93
- ),
94
- ),
95
- ],
96
- undefined,
97
- undefined,
98
- ts.factory.createBlock(
99
- [
100
- ts.factory.createIfStatement(
101
- ts.factory.createStrictEquality(
102
- ts.factory.createIdentifier("undefined"),
103
- ts.factory.createIdentifier("value"),
104
- ),
105
- ts.factory.createReturnStatement(),
106
- ),
107
- ...props.regular.map(({ key }) =>
108
- ts.factory.createIfStatement(
109
- ts.factory.createStrictEquality(
110
- ts.factory.createStringLiteral(
111
- key.getSoleLiteral()!,
112
- ),
113
- ts.factory.createIdentifier("key"),
114
- ),
115
- ts.factory.createReturnStatement(),
116
- ),
117
- ),
118
- ...props.dynamic.map((dynamic) =>
119
- ts.factory.createIfStatement(
120
- ts.factory.createCallExpression(
121
- ts.factory.createIdentifier(
122
- `RegExp(/${metadata_to_pattern(
123
- true,
124
- )(dynamic.key)}/).test`,
125
- ),
126
- undefined,
127
- [ts.factory.createIdentifier("key")],
128
- ),
129
- ts.isBlock(dynamic.expression)
130
- ? dynamic.expression
131
- : ts.factory.createBlock([
132
- ts.factory.createExpressionStatement(
133
- dynamic.expression,
134
- ),
135
- ]),
136
- ),
137
- ),
138
- ],
139
- true,
140
- ),
141
- ),
142
- ],
143
- );
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+
5
+ import { MetadataObject } from "../../metadata/MetadataObject";
6
+
7
+ import { ArrayUtil } from "../../utils/ArrayUtil";
8
+
9
+ import { metadata_to_pattern } from "../internal/metadata_to_pattern";
10
+ import { prune_object_properties } from "../internal/prune_object_properties";
11
+ import { IExpressionEntry } from "./IExpressionEntry";
12
+
13
+ export namespace PruneJoiner {
14
+ export const object = (
15
+ input: ts.Expression,
16
+ entries: IExpressionEntry[],
17
+ obj: MetadataObject,
18
+ ): ts.ConciseBody => {
19
+ // PREPARE ASSETS
20
+ const regular = entries.filter((entry) => entry.key.isSoleLiteral());
21
+ const dynamic = entries.filter((entry) => !entry.key.isSoleLiteral());
22
+
23
+ const statements: ts.Statement[] = ArrayUtil.flat(
24
+ regular.map((entry) =>
25
+ ts.isBlock(entry.expression)
26
+ ? [...entry.expression.statements]
27
+ : [ts.factory.createExpressionStatement(entry.expression)],
28
+ ),
29
+ );
30
+ if (dynamic.length)
31
+ statements.push(
32
+ ts.factory.createExpressionStatement(
33
+ iterate_dynamic_properties({ regular, dynamic })(input),
34
+ ),
35
+ );
36
+
37
+ statements.push(prune_object_properties(obj));
38
+ return ts.factory.createBlock(statements, true);
39
+ };
40
+
41
+ export const array = (input: ts.Expression, arrow: ts.ArrowFunction) =>
42
+ ts.factory.createCallExpression(
43
+ IdentifierFactory.access(input)("forEach"),
44
+ undefined,
45
+ [arrow],
46
+ );
47
+
48
+ export const tuple = (
49
+ children: ts.ConciseBody[],
50
+ rest: ts.ConciseBody | null,
51
+ ): ts.Block => {
52
+ const entire: ts.ConciseBody[] = [...children];
53
+ if (rest !== null) entire.push(rest);
54
+
55
+ const statements: ts.Statement[] = ArrayUtil.flat(
56
+ entire.map((elem) =>
57
+ ts.isBlock(elem)
58
+ ? [...elem.statements]
59
+ : [ts.factory.createExpressionStatement(elem)],
60
+ ),
61
+ );
62
+ return ts.factory.createBlock(statements, true);
63
+ };
64
+ }
65
+
66
+ const iterate_dynamic_properties =
67
+ (props: { regular: IExpressionEntry[]; dynamic: IExpressionEntry[] }) =>
68
+ (input: ts.Expression) =>
69
+ ts.factory.createCallExpression(
70
+ IdentifierFactory.access(
71
+ ts.factory.createCallExpression(
72
+ ts.factory.createIdentifier("Object.entries"),
73
+ undefined,
74
+ [input],
75
+ ),
76
+ )("forEach"),
77
+ undefined,
78
+ [
79
+ ts.factory.createArrowFunction(
80
+ undefined,
81
+ undefined,
82
+ [
83
+ IdentifierFactory.parameter(
84
+ ts.factory.createArrayBindingPattern(
85
+ ["key", "value"].map((l) =>
86
+ ts.factory.createBindingElement(
87
+ undefined,
88
+ undefined,
89
+ ts.factory.createIdentifier(l),
90
+ undefined,
91
+ ),
92
+ ),
93
+ ),
94
+ ),
95
+ ],
96
+ undefined,
97
+ undefined,
98
+ ts.factory.createBlock(
99
+ [
100
+ ts.factory.createIfStatement(
101
+ ts.factory.createStrictEquality(
102
+ ts.factory.createIdentifier("undefined"),
103
+ ts.factory.createIdentifier("value"),
104
+ ),
105
+ ts.factory.createReturnStatement(),
106
+ ),
107
+ ...props.regular.map(({ key }) =>
108
+ ts.factory.createIfStatement(
109
+ ts.factory.createStrictEquality(
110
+ ts.factory.createStringLiteral(
111
+ key.getSoleLiteral()!,
112
+ ),
113
+ ts.factory.createIdentifier("key"),
114
+ ),
115
+ ts.factory.createReturnStatement(),
116
+ ),
117
+ ),
118
+ ...props.dynamic.map((dynamic) =>
119
+ ts.factory.createIfStatement(
120
+ ts.factory.createCallExpression(
121
+ ts.factory.createIdentifier(
122
+ `RegExp(/${metadata_to_pattern(
123
+ true,
124
+ )(dynamic.key)}/).test`,
125
+ ),
126
+ undefined,
127
+ [ts.factory.createIdentifier("key")],
128
+ ),
129
+ ts.isBlock(dynamic.expression)
130
+ ? dynamic.expression
131
+ : ts.factory.createBlock([
132
+ ts.factory.createExpressionStatement(
133
+ dynamic.expression,
134
+ ),
135
+ ]),
136
+ ),
137
+ ),
138
+ ],
139
+ true,
140
+ ),
141
+ ),
142
+ ],
143
+ );