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.
- package/lib/metadata/Metadata.js +32 -29
- package/lib/metadata/Metadata.js.map +1 -1
- package/lib/programmers/AssertProgrammer.js +1 -1
- package/lib/programmers/AssertProgrammer.js.map +1 -1
- package/lib/programmers/CheckerProgrammer.d.ts +1 -0
- package/lib/programmers/CheckerProgrammer.js +147 -138
- package/lib/programmers/CheckerProgrammer.js.map +1 -1
- package/lib/programmers/ValidateProgrammer.js +1 -1
- package/lib/programmers/ValidateProgrammer.js.map +1 -1
- package/lib/programmers/helpers/UnionExplorer.d.ts +23 -29
- package/lib/programmers/helpers/UnionExplorer.js +29 -41
- package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
- package/lib/programmers/internal/check_array.js +4 -32
- package/lib/programmers/internal/check_array.js.map +1 -1
- package/lib/programmers/internal/check_array_length.d.ts +1 -0
- package/lib/programmers/internal/check_array_length.js +47 -0
- package/lib/programmers/internal/check_array_length.js.map +1 -0
- package/lib/programmers/internal/check_union_array_like.d.ts +21 -0
- package/lib/programmers/internal/check_union_array_like.js +83 -0
- package/lib/programmers/internal/check_union_array_like.js.map +1 -0
- package/lib/programmers/internal/check_union_tuple.d.ts +1 -0
- package/lib/programmers/internal/check_union_tuple.js +11 -0
- package/lib/programmers/internal/check_union_tuple.js.map +1 -0
- package/package.json +1 -1
- package/src/executable/typia.ts +48 -48
- package/src/functional/$guard.ts +35 -35
- package/src/metadata/Metadata.ts +10 -7
- package/src/programmers/AssertProgrammer.ts +1 -1
- package/src/programmers/CheckerProgrammer.ts +252 -200
- package/src/programmers/FeatureProgrammer.ts +327 -327
- package/src/programmers/ValidateProgrammer.ts +1 -1
- package/src/programmers/helpers/UnionExplorer.ts +75 -238
- package/src/programmers/internal/check_array.ts +3 -25
- package/src/programmers/internal/check_array_length.ts +45 -0
- package/src/programmers/internal/check_union_array_like.ts +242 -0
- package/src/programmers/internal/check_union_tuple.ts +33 -0
package/package.json
CHANGED
package/src/executable/typia.ts
CHANGED
|
@@ -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
|
+
});
|
package/src/functional/$guard.ts
CHANGED
|
@@ -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
|
+
};
|
package/src/metadata/Metadata.ts
CHANGED
|
@@ -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
|
|
283
|
+
if (explore.tracable === false)
|
|
284
284
|
return IsProgrammer.CONFIG({
|
|
285
285
|
object: assert_object(equals)(importer),
|
|
286
286
|
numeric: true,
|