typia 3.4.18 → 3.4.19

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 (36) hide show
  1. package/lib/metadata/Metadata.js +32 -29
  2. package/lib/metadata/Metadata.js.map +1 -1
  3. package/lib/programmers/AssertProgrammer.js +1 -1
  4. package/lib/programmers/AssertProgrammer.js.map +1 -1
  5. package/lib/programmers/CheckerProgrammer.d.ts +1 -0
  6. package/lib/programmers/CheckerProgrammer.js +147 -138
  7. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  8. package/lib/programmers/ValidateProgrammer.js +1 -1
  9. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  10. package/lib/programmers/helpers/UnionExplorer.d.ts +23 -29
  11. package/lib/programmers/helpers/UnionExplorer.js +29 -41
  12. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  13. package/lib/programmers/internal/check_array.js +4 -32
  14. package/lib/programmers/internal/check_array.js.map +1 -1
  15. package/lib/programmers/internal/check_array_length.d.ts +1 -0
  16. package/lib/programmers/internal/check_array_length.js +47 -0
  17. package/lib/programmers/internal/check_array_length.js.map +1 -0
  18. package/lib/programmers/internal/check_union_array_like.d.ts +21 -0
  19. package/lib/programmers/internal/check_union_array_like.js +83 -0
  20. package/lib/programmers/internal/check_union_array_like.js.map +1 -0
  21. package/lib/programmers/internal/check_union_tuple.d.ts +1 -0
  22. package/lib/programmers/internal/check_union_tuple.js +11 -0
  23. package/lib/programmers/internal/check_union_tuple.js.map +1 -0
  24. package/package.json +1 -1
  25. package/src/executable/typia.ts +48 -48
  26. package/src/functional/$guard.ts +35 -35
  27. package/src/metadata/Metadata.ts +10 -7
  28. package/src/programmers/AssertProgrammer.ts +1 -1
  29. package/src/programmers/CheckerProgrammer.ts +252 -200
  30. package/src/programmers/FeatureProgrammer.ts +327 -327
  31. package/src/programmers/ValidateProgrammer.ts +1 -1
  32. package/src/programmers/helpers/UnionExplorer.ts +75 -238
  33. package/src/programmers/internal/check_array.ts +3 -25
  34. package/src/programmers/internal/check_array_length.ts +45 -0
  35. package/src/programmers/internal/check_union_array_like.ts +242 -0
  36. package/src/programmers/internal/check_union_tuple.ts +33 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "typia",
3
- "version": "3.4.18",
3
+ "version": "3.4.19",
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",
@@ -1,48 +1,48 @@
1
- #!/usr/bin/env node
2
- import { CommandParser } from "./internal/CommandParser";
3
- import { TypiaSetupWizard } from "./internal/TypiaSetupWizard";
4
-
5
- const USAGE = `Wrong command has been detected. Use like below:
6
-
7
- npx typia setup \\
8
- --compiler (ttypescript|ts-patch) \\
9
- --manager (npm|pnpm|yarn) \\
10
- --project {tsconfig.json file path}
11
-
12
- - npx typia setup
13
- - npx typia setup --compiler ts-patch
14
- - npx typia setup --manager pnpm
15
- - npx typia setup --project tsconfig.test.json`;
16
-
17
- function halt(desc: string): never {
18
- console.error(desc);
19
- process.exit(-1);
20
- }
21
-
22
- async function setup(): Promise<void> {
23
- const options: Record<string, string> = CommandParser.parse(
24
- process.argv.slice(3),
25
- );
26
- const manager: string = options.manager ?? "npm";
27
- const compiler: string = options.compiler ?? "ttypescript";
28
- const project: string = options.project ?? "tsconfig.json";
29
-
30
- if (
31
- (compiler !== "ttypescript" && compiler !== "ts-patch") ||
32
- (manager !== "npm" && manager !== "pnpm" && manager !== "yarn")
33
- )
34
- halt(USAGE);
35
- else if (compiler === "ttypescript")
36
- await TypiaSetupWizard.ttypescript({ manager, project });
37
- else await TypiaSetupWizard.tsPatch({ manager, project });
38
- }
39
-
40
- async function main(): Promise<void> {
41
- const type: string | undefined = process.argv[2];
42
- if (type === "setup") await setup();
43
- else halt(USAGE);
44
- }
45
- main().catch((exp) => {
46
- console.error(exp);
47
- process.exit(-1);
48
- });
1
+ #!/usr/bin/env node
2
+ import { CommandParser } from "./internal/CommandParser";
3
+ import { TypiaSetupWizard } from "./internal/TypiaSetupWizard";
4
+
5
+ const USAGE = `Wrong command has been detected. Use like below:
6
+
7
+ npx typia setup \\
8
+ --compiler (ttypescript|ts-patch) \\
9
+ --manager (npm|pnpm|yarn) \\
10
+ --project {tsconfig.json file path}
11
+
12
+ - npx typia setup
13
+ - npx typia setup --compiler ts-patch
14
+ - npx typia setup --manager pnpm
15
+ - npx typia setup --project tsconfig.test.json`;
16
+
17
+ function halt(desc: string): never {
18
+ console.error(desc);
19
+ process.exit(-1);
20
+ }
21
+
22
+ async function setup(): Promise<void> {
23
+ const options: Record<string, string> = CommandParser.parse(
24
+ process.argv.slice(3),
25
+ );
26
+ const manager: string = options.manager ?? "npm";
27
+ const compiler: string = options.compiler ?? "ttypescript";
28
+ const project: string = options.project ?? "tsconfig.json";
29
+
30
+ if (
31
+ (compiler !== "ttypescript" && compiler !== "ts-patch") ||
32
+ (manager !== "npm" && manager !== "pnpm" && manager !== "yarn")
33
+ )
34
+ halt(USAGE);
35
+ else if (compiler === "ttypescript")
36
+ await TypiaSetupWizard.ttypescript({ manager, project });
37
+ else await TypiaSetupWizard.tsPatch({ manager, project });
38
+ }
39
+
40
+ async function main(): Promise<void> {
41
+ const type: string | undefined = process.argv[2];
42
+ if (type === "setup") await setup();
43
+ else halt(USAGE);
44
+ }
45
+ main().catch((exp) => {
46
+ console.error(exp);
47
+ process.exit(-1);
48
+ });
@@ -1,35 +1,35 @@
1
- import { TypeGuardError } from "../TypeGuardError";
2
-
3
- /* -----------------------------------------------------------
4
- ASSERT V2 -> USE (NULL OR ERROR) CONDITION
5
- ----------------------------------------------------------- */
6
- // /**
7
- // * @internal
8
- // */
9
- // export const $guardV2 =
10
- // (method: string) => (props: Omit<TypeGuardError.IProps, "method">) =>
11
- // new TypeGuardError({
12
- // method,
13
- // path: props.path,
14
- // expected: props.expected,
15
- // value: props.value,
16
- // });
17
-
18
- /* -----------------------------------------------------------
19
- ASSERT V3 -> (CONDITION OR THROW(exceptable): FALSE)
20
- ----------------------------------------------------------- */
21
- /**
22
- * @internal
23
- */
24
- export const $guard =
25
- (method: string) =>
26
- (exceptionable: boolean, props: Omit<TypeGuardError.IProps, "method">) => {
27
- if (exceptionable === true)
28
- throw new TypeGuardError({
29
- method,
30
- path: props.path,
31
- expected: props.expected,
32
- value: props.value,
33
- });
34
- return false;
35
- };
1
+ import { TypeGuardError } from "../TypeGuardError";
2
+
3
+ /* -----------------------------------------------------------
4
+ ASSERT V2 -> USE (NULL OR ERROR) CONDITION
5
+ ----------------------------------------------------------- */
6
+ // /**
7
+ // * @internal
8
+ // */
9
+ // export const $guardV2 =
10
+ // (method: string) => (props: Omit<TypeGuardError.IProps, "method">) =>
11
+ // new TypeGuardError({
12
+ // method,
13
+ // path: props.path,
14
+ // expected: props.expected,
15
+ // value: props.value,
16
+ // });
17
+
18
+ /* -----------------------------------------------------------
19
+ ASSERT V3 -> (CONDITION OR THROW(exceptable): FALSE)
20
+ ----------------------------------------------------------- */
21
+ /**
22
+ * @internal
23
+ */
24
+ export const $guard =
25
+ (method: string) =>
26
+ (exceptionable: boolean, props: Omit<TypeGuardError.IProps, "method">) => {
27
+ if (exceptionable === true)
28
+ throw new TypeGuardError({
29
+ method,
30
+ path: props.path,
31
+ expected: props.expected,
32
+ value: props.value,
33
+ });
34
+ return false;
35
+ };
@@ -312,7 +312,9 @@ export namespace Metadata {
312
312
  // TUPLES
313
313
  for (const xt of x.tuples)
314
314
  for (const yt of y.tuples)
315
- if (
315
+ if (xt.length === 0 || yt.length === 0)
316
+ return xt.length === 0 && yt.length === 0;
317
+ else if (
316
318
  xt
317
319
  .slice(0, Math.min(xt.length, yt.length))
318
320
  .some((xv, i) => intersects(xv, yt[i]!, deep))
@@ -368,6 +370,7 @@ export namespace Metadata {
368
370
  // TUPLES
369
371
  for (const yt of y.tuples)
370
372
  if (
373
+ yt.length !== 0 &&
371
374
  x.tuples.some(
372
375
  (xt) =>
373
376
  xt.length >= yt.length &&
@@ -444,6 +447,12 @@ function getName(metadata: Metadata): string {
444
447
  "`",
445
448
  );
446
449
 
450
+ // NATIVES
451
+ for (const native of metadata.natives) elements.push(native);
452
+ for (const set of metadata.sets) elements.push(`Set<${set.getName()}>`);
453
+ for (const map of metadata.maps)
454
+ elements.push(`Map<${map.key.getName()}, ${map.value.getName()}>`);
455
+
447
456
  // ARRAY
448
457
  if (metadata.rest !== null) elements.push(`...${metadata.rest.getName()}`);
449
458
  for (const tuple of metadata.tuples)
@@ -456,12 +465,6 @@ function getName(metadata: Metadata): string {
456
465
  elements.push(`Resolve<${object.name}>`);
457
466
  if (metadata.resolved !== null) elements.push(metadata.resolved.getName());
458
467
 
459
- // NATIVES
460
- for (const native of metadata.natives) elements.push(native);
461
- for (const set of metadata.sets) elements.push(`Set<${set.getName()}>`);
462
- for (const map of metadata.maps)
463
- elements.push(`Map<${map.key.getName()}, ${map.value.getName()}>`);
464
-
465
468
  // RETURNS
466
469
  if (elements.length === 0) return "unknown";
467
470
  else if (elements.length === 1) return elements[0]!;
@@ -280,7 +280,7 @@ export namespace AssertProgrammer {
280
280
  (equals: boolean) =>
281
281
  (importer: FunctionImporter): CheckerProgrammer.IConfig.Combiner =>
282
282
  (explore: CheckerProgrammer.IExplore) => {
283
- if (explore.tracable === false && explore.from !== "top")
283
+ if (explore.tracable === false)
284
284
  return IsProgrammer.CONFIG({
285
285
  object: assert_object(equals)(importer),
286
286
  numeric: true,