typia 9.7.2 → 10.0.0-dev.20251107
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/LICENSE +21 -21
- package/README.md +153 -153
- package/lib/factories/ProtobufFactory.js +1 -1
- package/lib/factories/ProtobufFactory.mjs +1 -1
- package/lib/programmers/internal/json_schema_station.d.mts +2 -2
- package/lib/programmers/internal/json_schema_station.d.ts +2 -2
- package/lib/programmers/llm/LlmApplicationProgrammer.js +5 -1
- package/lib/programmers/llm/LlmApplicationProgrammer.js.map +1 -1
- package/lib/programmers/llm/LlmApplicationProgrammer.mjs +5 -1
- package/lib/programmers/llm/LlmSchemaProgrammer.js +1 -4
- package/lib/programmers/llm/LlmSchemaProgrammer.js.map +1 -1
- package/lib/programmers/llm/LlmSchemaProgrammer.mjs +1 -35
- package/package.json +121 -121
- package/src/AssertionGuard.ts +41 -41
- package/src/CamelCase.ts +75 -75
- package/src/IRandomGenerator.ts +337 -337
- package/src/IReadableURLSearchParams.ts +9 -9
- package/src/PascalCase.ts +71 -71
- package/src/Primitive.ts +90 -90
- package/src/Resolved.ts +72 -72
- package/src/SnakeCase.ts +127 -127
- package/src/TypeGuardError.ts +216 -216
- package/src/factories/MetadataCollection.ts +270 -270
- package/src/factories/MetadataCommentTagFactory.ts +632 -632
- package/src/factories/MetadataFactory.ts +402 -402
- package/src/factories/ProtobufFactory.ts +873 -873
- package/src/functional.ts +705 -705
- package/src/http.ts +972 -972
- package/src/internal/_ProtobufReader.ts +188 -188
- package/src/internal/_ProtobufSizer.ts +137 -137
- package/src/internal/_ProtobufWriter.ts +135 -135
- package/src/internal/_jsonStringifyString.ts +42 -42
- package/src/json.ts +643 -643
- package/src/llm.ts +615 -615
- package/src/misc.ts +594 -594
- package/src/module.ts +889 -889
- package/src/notations.ts +751 -751
- package/src/programmers/FeatureProgrammer.ts +605 -605
- package/src/programmers/ImportProgrammer.ts +179 -179
- package/src/programmers/RandomProgrammer.ts +1195 -1195
- package/src/programmers/helpers/ProtobufWire.ts +34 -34
- package/src/programmers/internal/check_array_length.ts +43 -43
- package/src/programmers/internal/check_bigint.ts +46 -46
- package/src/programmers/internal/check_dynamic_key.ts +197 -197
- package/src/programmers/internal/check_dynamic_properties.ts +231 -231
- package/src/programmers/internal/check_everything.ts +21 -21
- package/src/programmers/internal/check_native.ts +23 -23
- package/src/programmers/internal/check_number.ts +108 -108
- package/src/programmers/internal/check_object.ts +72 -72
- package/src/programmers/internal/check_string.ts +46 -46
- package/src/programmers/internal/check_template.ts +46 -46
- package/src/programmers/internal/check_union_array_like.ts +331 -331
- package/src/programmers/internal/decode_union_object.ts +110 -110
- package/src/programmers/internal/feature_object_entries.ts +59 -59
- package/src/programmers/internal/json_schema_escaped.ts +78 -78
- package/src/programmers/internal/json_schema_object.ts +150 -150
- package/src/programmers/internal/json_schema_station.ts +2 -2
- package/src/programmers/internal/metadata_to_pattern.ts +40 -40
- package/src/programmers/internal/postfix_of_tuple.ts +3 -3
- package/src/programmers/internal/prune_object_properties.ts +69 -69
- package/src/programmers/internal/stringify_dynamic_properties.ts +158 -158
- package/src/programmers/internal/stringify_native.ts +5 -5
- package/src/programmers/internal/stringify_regular_properties.ts +77 -77
- package/src/programmers/internal/template_to_pattern.ts +21 -21
- package/src/programmers/internal/wrap_metadata_rest_tuple.ts +21 -21
- package/src/programmers/json/JsonStringifyProgrammer.ts +1124 -1124
- package/src/programmers/llm/LlmApplicationProgrammer.ts +10 -1
- package/src/programmers/llm/LlmSchemaProgrammer.ts +2 -7
- package/src/protobuf.ts +820 -820
- package/src/reflect.ts +46 -46
- package/src/schemas/json/IJsonApplication.ts +77 -77
- package/src/schemas/json/IJsonSchemaCollection.ts +212 -212
- package/src/schemas/json/IJsonSchemaUnit.ts +263 -263
- package/src/schemas/metadata/IMetadataTypeTag.ts +14 -14
- package/src/schemas/metadata/Metadata.ts +669 -669
- package/src/schemas/metadata/MetadataAliasType.ts +57 -57
- package/src/schemas/metadata/MetadataApplication.ts +40 -40
- package/src/schemas/metadata/MetadataArray.ts +47 -47
- package/src/schemas/metadata/MetadataArrayType.ts +51 -51
- package/src/schemas/metadata/MetadataAtomic.ts +85 -85
- package/src/schemas/metadata/MetadataEscaped.ts +45 -45
- package/src/schemas/metadata/MetadataFunction.ts +45 -45
- package/src/schemas/metadata/MetadataObject.ts +46 -46
- package/src/schemas/metadata/MetadataObjectType.ts +137 -137
- package/src/schemas/metadata/MetadataParameter.ts +52 -52
- package/src/schemas/metadata/MetadataProperty.ts +53 -53
- package/src/schemas/metadata/MetadataTemplate.ts +78 -78
- package/src/schemas/metadata/MetadataTuple.ts +28 -28
- package/src/schemas/metadata/MetadataTupleType.ts +61 -61
- package/src/tags/Constant.ts +47 -47
- package/src/tags/ContentMediaType.ts +27 -27
- package/src/tags/Default.ts +52 -52
- package/src/tags/Example.ts +56 -56
- package/src/tags/Examples.ts +56 -56
- package/src/tags/ExclusiveMaximum.ts +44 -44
- package/src/tags/ExclusiveMinimum.ts +44 -44
- package/src/tags/Format.ts +78 -78
- package/src/tags/JsonSchemaPlugin.ts +36 -36
- package/src/tags/MaxItems.ts +31 -31
- package/src/tags/MaxLength.ts +25 -25
- package/src/tags/Maximum.ts +39 -39
- package/src/tags/MinItems.ts +31 -31
- package/src/tags/MinLength.ts +25 -25
- package/src/tags/Minimum.ts +39 -39
- package/src/tags/MultipleOf.ts +42 -42
- package/src/tags/Pattern.ts +49 -49
- package/src/tags/Sequence.ts +37 -37
- package/src/tags/TagBase.ts +102 -102
- package/src/tags/Type.ts +64 -64
- package/src/tags/UniqueItems.ts +34 -34
- package/src/tags/internal/FormatCheatSheet.ts +71 -71
- package/src/transformers/ITransformOptions.ts +70 -70
- package/src/transformers/ImportTransformer.ts +253 -253
- package/src/transformers/NoTransformConfigurationError.ts +16 -16
- package/src/transformers/features/llm/LlmApplicationTransformer.ts +224 -224
- package/src/typings/Equal.ts +18 -18
package/package.json
CHANGED
|
@@ -1,122 +1,122 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "typia",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Superfast runtime validators with only one line",
|
|
5
|
-
"main": "lib/index.js",
|
|
6
|
-
"typings": "lib/index.d.ts",
|
|
7
|
-
"module": "lib/index.mjs",
|
|
8
|
-
"bin": {
|
|
9
|
-
"typia": "./lib/executable/typia.js"
|
|
10
|
-
},
|
|
11
|
-
"tsp": {
|
|
12
|
-
"tscOptions": {
|
|
13
|
-
"parseAllJsDoc": true
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
"scripts": {
|
|
17
|
-
"test": "ts-node deploy --tag test",
|
|
18
|
-
"test:template": "npm run --tag test --template",
|
|
19
|
-
"-------------------------------------------------": "",
|
|
20
|
-
"build": "rimraf lib && tsc && rollup -c",
|
|
21
|
-
"dev": "rimraf lib && tsc --watch",
|
|
22
|
-
"dev:errors": "tsc --project tsconfig.errors.json --watch",
|
|
23
|
-
"eslint": "eslint",
|
|
24
|
-
"eslint:fix": "eslint --fix",
|
|
25
|
-
"prettier": "prettier src --check",
|
|
26
|
-
"prettier:fix": "prettier src --write",
|
|
27
|
-
"------------------------------------------------": "",
|
|
28
|
-
"package:latest": "ts-node deploy --tag latest",
|
|
29
|
-
"package:next": "ts-node deploy --tag next",
|
|
30
|
-
"package:patch": "ts-node deploy --tag patch",
|
|
31
|
-
"package:tgz": "ts-node deploy/tgz.ts"
|
|
32
|
-
},
|
|
33
|
-
"repository": {
|
|
34
|
-
"type": "git",
|
|
35
|
-
"url": "https://github.com/samchon/typia"
|
|
36
|
-
},
|
|
37
|
-
"author": "Jeongho Nam",
|
|
38
|
-
"license": "MIT",
|
|
39
|
-
"bugs": {
|
|
40
|
-
"url": "https://github.com/samchon/typia/issues"
|
|
41
|
-
},
|
|
42
|
-
"homepage": "https://typia.io",
|
|
43
|
-
"dependencies": {
|
|
44
|
-
"@samchon/openapi": "^
|
|
45
|
-
"@standard-schema/spec": "^1.0.0",
|
|
46
|
-
"commander": "^10.0.0",
|
|
47
|
-
"comment-json": "^4.2.3",
|
|
48
|
-
"inquirer": "^8.2.5",
|
|
49
|
-
"package-manager-detector": "^0.2.0",
|
|
50
|
-
"randexp": "^0.5.3"
|
|
51
|
-
},
|
|
52
|
-
"peerDependencies": {
|
|
53
|
-
"typescript": ">=4.8.0 <5.10.0"
|
|
54
|
-
},
|
|
55
|
-
"devDependencies": {
|
|
56
|
-
"@rollup/plugin-commonjs": "^26.0.1",
|
|
57
|
-
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
58
|
-
"@rollup/plugin-typescript": "^11.1.6",
|
|
59
|
-
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
|
60
|
-
"@types/inquirer": "^8.2.5",
|
|
61
|
-
"@types/node": "^18.15.12",
|
|
62
|
-
"@types/ts-expose-internals": "npm:ts-expose-internals@5.6.3",
|
|
63
|
-
"@typescript-eslint/eslint-plugin": "^8.1.0",
|
|
64
|
-
"@typescript-eslint/parser": "^8.1.0",
|
|
65
|
-
"chalk": "^4.0.0",
|
|
66
|
-
"eslint-plugin-deprecation": "^3.0.0",
|
|
67
|
-
"prettier": "^3.2.5",
|
|
68
|
-
"prettier-plugin-jsdoc": "^1.3.3",
|
|
69
|
-
"rimraf": "^5.0.5",
|
|
70
|
-
"rollup": "^4.18.0",
|
|
71
|
-
"rollup-plugin-auto-external": "^2.0.0",
|
|
72
|
-
"rollup-plugin-node-externals": "^8.0.0",
|
|
73
|
-
"suppress-warnings": "^1.0.2",
|
|
74
|
-
"tinyglobby": "^0.2.12",
|
|
75
|
-
"ts-node": "^10.9.2",
|
|
76
|
-
"typescript": "~5.9.2"
|
|
77
|
-
},
|
|
78
|
-
"sideEffects": false,
|
|
79
|
-
"files": [
|
|
80
|
-
"LICENSE",
|
|
81
|
-
"README.md",
|
|
82
|
-
"package.json",
|
|
83
|
-
"lib",
|
|
84
|
-
"src"
|
|
85
|
-
],
|
|
86
|
-
"keywords": [
|
|
87
|
-
"fast",
|
|
88
|
-
"json",
|
|
89
|
-
"stringify",
|
|
90
|
-
"typescript",
|
|
91
|
-
"transform",
|
|
92
|
-
"ajv",
|
|
93
|
-
"io-ts",
|
|
94
|
-
"zod",
|
|
95
|
-
"schema",
|
|
96
|
-
"json-schema",
|
|
97
|
-
"generator",
|
|
98
|
-
"assert",
|
|
99
|
-
"clone",
|
|
100
|
-
"is",
|
|
101
|
-
"validate",
|
|
102
|
-
"equal",
|
|
103
|
-
"runtime",
|
|
104
|
-
"type",
|
|
105
|
-
"typebox",
|
|
106
|
-
"checker",
|
|
107
|
-
"validator",
|
|
108
|
-
"safe",
|
|
109
|
-
"parse",
|
|
110
|
-
"prune",
|
|
111
|
-
"random",
|
|
112
|
-
"protobuf",
|
|
113
|
-
"llm",
|
|
114
|
-
"llm-function-calling",
|
|
115
|
-
"structured-output",
|
|
116
|
-
"openai",
|
|
117
|
-
"chatgpt",
|
|
118
|
-
"claude",
|
|
119
|
-
"gemini",
|
|
120
|
-
"llama"
|
|
121
|
-
]
|
|
1
|
+
{
|
|
2
|
+
"name": "typia",
|
|
3
|
+
"version": "10.0.0-dev.20251107",
|
|
4
|
+
"description": "Superfast runtime validators with only one line",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"typings": "lib/index.d.ts",
|
|
7
|
+
"module": "lib/index.mjs",
|
|
8
|
+
"bin": {
|
|
9
|
+
"typia": "./lib/executable/typia.js"
|
|
10
|
+
},
|
|
11
|
+
"tsp": {
|
|
12
|
+
"tscOptions": {
|
|
13
|
+
"parseAllJsDoc": true
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"test": "ts-node deploy --tag test",
|
|
18
|
+
"test:template": "npm run --tag test --template",
|
|
19
|
+
"-------------------------------------------------": "",
|
|
20
|
+
"build": "rimraf lib && tsc && rollup -c",
|
|
21
|
+
"dev": "rimraf lib && tsc --watch",
|
|
22
|
+
"dev:errors": "tsc --project tsconfig.errors.json --watch",
|
|
23
|
+
"eslint": "eslint",
|
|
24
|
+
"eslint:fix": "eslint --fix",
|
|
25
|
+
"prettier": "prettier src --check",
|
|
26
|
+
"prettier:fix": "prettier src --write",
|
|
27
|
+
"------------------------------------------------": "",
|
|
28
|
+
"package:latest": "ts-node deploy --tag latest",
|
|
29
|
+
"package:next": "ts-node deploy --tag next",
|
|
30
|
+
"package:patch": "ts-node deploy --tag patch",
|
|
31
|
+
"package:tgz": "ts-node deploy/tgz.ts"
|
|
32
|
+
},
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "https://github.com/samchon/typia"
|
|
36
|
+
},
|
|
37
|
+
"author": "Jeongho Nam",
|
|
38
|
+
"license": "MIT",
|
|
39
|
+
"bugs": {
|
|
40
|
+
"url": "https://github.com/samchon/typia/issues"
|
|
41
|
+
},
|
|
42
|
+
"homepage": "https://typia.io",
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@samchon/openapi": "^5.0.0-dev.20251107",
|
|
45
|
+
"@standard-schema/spec": "^1.0.0",
|
|
46
|
+
"commander": "^10.0.0",
|
|
47
|
+
"comment-json": "^4.2.3",
|
|
48
|
+
"inquirer": "^8.2.5",
|
|
49
|
+
"package-manager-detector": "^0.2.0",
|
|
50
|
+
"randexp": "^0.5.3"
|
|
51
|
+
},
|
|
52
|
+
"peerDependencies": {
|
|
53
|
+
"typescript": ">=4.8.0 <5.10.0"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@rollup/plugin-commonjs": "^26.0.1",
|
|
57
|
+
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
58
|
+
"@rollup/plugin-typescript": "^11.1.6",
|
|
59
|
+
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
|
60
|
+
"@types/inquirer": "^8.2.5",
|
|
61
|
+
"@types/node": "^18.15.12",
|
|
62
|
+
"@types/ts-expose-internals": "npm:ts-expose-internals@5.6.3",
|
|
63
|
+
"@typescript-eslint/eslint-plugin": "^8.1.0",
|
|
64
|
+
"@typescript-eslint/parser": "^8.1.0",
|
|
65
|
+
"chalk": "^4.0.0",
|
|
66
|
+
"eslint-plugin-deprecation": "^3.0.0",
|
|
67
|
+
"prettier": "^3.2.5",
|
|
68
|
+
"prettier-plugin-jsdoc": "^1.3.3",
|
|
69
|
+
"rimraf": "^5.0.5",
|
|
70
|
+
"rollup": "^4.18.0",
|
|
71
|
+
"rollup-plugin-auto-external": "^2.0.0",
|
|
72
|
+
"rollup-plugin-node-externals": "^8.0.0",
|
|
73
|
+
"suppress-warnings": "^1.0.2",
|
|
74
|
+
"tinyglobby": "^0.2.12",
|
|
75
|
+
"ts-node": "^10.9.2",
|
|
76
|
+
"typescript": "~5.9.2"
|
|
77
|
+
},
|
|
78
|
+
"sideEffects": false,
|
|
79
|
+
"files": [
|
|
80
|
+
"LICENSE",
|
|
81
|
+
"README.md",
|
|
82
|
+
"package.json",
|
|
83
|
+
"lib",
|
|
84
|
+
"src"
|
|
85
|
+
],
|
|
86
|
+
"keywords": [
|
|
87
|
+
"fast",
|
|
88
|
+
"json",
|
|
89
|
+
"stringify",
|
|
90
|
+
"typescript",
|
|
91
|
+
"transform",
|
|
92
|
+
"ajv",
|
|
93
|
+
"io-ts",
|
|
94
|
+
"zod",
|
|
95
|
+
"schema",
|
|
96
|
+
"json-schema",
|
|
97
|
+
"generator",
|
|
98
|
+
"assert",
|
|
99
|
+
"clone",
|
|
100
|
+
"is",
|
|
101
|
+
"validate",
|
|
102
|
+
"equal",
|
|
103
|
+
"runtime",
|
|
104
|
+
"type",
|
|
105
|
+
"typebox",
|
|
106
|
+
"checker",
|
|
107
|
+
"validator",
|
|
108
|
+
"safe",
|
|
109
|
+
"parse",
|
|
110
|
+
"prune",
|
|
111
|
+
"random",
|
|
112
|
+
"protobuf",
|
|
113
|
+
"llm",
|
|
114
|
+
"llm-function-calling",
|
|
115
|
+
"structured-output",
|
|
116
|
+
"openai",
|
|
117
|
+
"chatgpt",
|
|
118
|
+
"claude",
|
|
119
|
+
"gemini",
|
|
120
|
+
"llama"
|
|
121
|
+
]
|
|
122
122
|
}
|
package/src/AssertionGuard.ts
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Type definition for assertion guard functions in `typia`.
|
|
3
|
-
*
|
|
4
|
-
* An assertion guard is a function that asserts an input value's type at
|
|
5
|
-
* runtime and performs a TypeScript type assertion if validation passes. Unlike
|
|
6
|
-
* regular assertion functions that return the validated value, assertion guards
|
|
7
|
-
* return nothing but automatically cast the input parameter to the expected
|
|
8
|
-
* type `T`.
|
|
9
|
-
*
|
|
10
|
-
* This type is used by `typia.createAssertGuard<T>()` and
|
|
11
|
-
* `typia.createAssertGuardEquals<T>()` to generate reusable assertion guard
|
|
12
|
-
* functions.
|
|
13
|
-
*
|
|
14
|
-
* @author Jeongho Nam - https://github.com/samchon
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* interface IMember {
|
|
18
|
-
* name: string;
|
|
19
|
-
* age: number;
|
|
20
|
-
* }
|
|
21
|
-
*
|
|
22
|
-
* // Create reusable assertion guard
|
|
23
|
-
* const assertMember: AssertionGuard<IMember> = typia.createAssertGuard<IMember>();
|
|
24
|
-
*
|
|
25
|
-
* // Usage - input will be automatically cast to IMember if validation passes
|
|
26
|
-
* const unknownData: unknown = { name: "John", age: 25 };
|
|
27
|
-
*
|
|
28
|
-
* assertMember(unknownData);
|
|
29
|
-
* // After this line, unknownData is automatically treated as IMember type
|
|
30
|
-
* console.log(unknownData.name); // TypeScript knows this is safe
|
|
31
|
-
* ```;
|
|
32
|
-
*
|
|
33
|
-
* @template T - The expected type to validate and assert against
|
|
34
|
-
* @param input - The value to validate (type unknown)
|
|
35
|
-
* @returns Void - Returns nothing, but asserts that input is type T
|
|
36
|
-
* @throws {TypeGuardError} When the input value doesn't match the expected type
|
|
37
|
-
* T
|
|
38
|
-
* @see {@link https://github.com/samchon/typia#assertguard-functions} Typia assertion guards documentation
|
|
39
|
-
* @see {@link TypeGuardError} Error thrown when assertion fails
|
|
40
|
-
*/
|
|
41
|
-
export type AssertionGuard<T> = (input: unknown) => asserts input is T;
|
|
1
|
+
/**
|
|
2
|
+
* Type definition for assertion guard functions in `typia`.
|
|
3
|
+
*
|
|
4
|
+
* An assertion guard is a function that asserts an input value's type at
|
|
5
|
+
* runtime and performs a TypeScript type assertion if validation passes. Unlike
|
|
6
|
+
* regular assertion functions that return the validated value, assertion guards
|
|
7
|
+
* return nothing but automatically cast the input parameter to the expected
|
|
8
|
+
* type `T`.
|
|
9
|
+
*
|
|
10
|
+
* This type is used by `typia.createAssertGuard<T>()` and
|
|
11
|
+
* `typia.createAssertGuardEquals<T>()` to generate reusable assertion guard
|
|
12
|
+
* functions.
|
|
13
|
+
*
|
|
14
|
+
* @author Jeongho Nam - https://github.com/samchon
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* interface IMember {
|
|
18
|
+
* name: string;
|
|
19
|
+
* age: number;
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* // Create reusable assertion guard
|
|
23
|
+
* const assertMember: AssertionGuard<IMember> = typia.createAssertGuard<IMember>();
|
|
24
|
+
*
|
|
25
|
+
* // Usage - input will be automatically cast to IMember if validation passes
|
|
26
|
+
* const unknownData: unknown = { name: "John", age: 25 };
|
|
27
|
+
*
|
|
28
|
+
* assertMember(unknownData);
|
|
29
|
+
* // After this line, unknownData is automatically treated as IMember type
|
|
30
|
+
* console.log(unknownData.name); // TypeScript knows this is safe
|
|
31
|
+
* ```;
|
|
32
|
+
*
|
|
33
|
+
* @template T - The expected type to validate and assert against
|
|
34
|
+
* @param input - The value to validate (type unknown)
|
|
35
|
+
* @returns Void - Returns nothing, but asserts that input is type T
|
|
36
|
+
* @throws {TypeGuardError} When the input value doesn't match the expected type
|
|
37
|
+
* T
|
|
38
|
+
* @see {@link https://github.com/samchon/typia#assertguard-functions} Typia assertion guards documentation
|
|
39
|
+
* @see {@link TypeGuardError} Error thrown when assertion fails
|
|
40
|
+
*/
|
|
41
|
+
export type AssertionGuard<T> = (input: unknown) => asserts input is T;
|
package/src/CamelCase.ts
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
import { Equal } from "./typings/Equal";
|
|
2
|
-
import { IsTuple } from "./typings/IsTuple";
|
|
3
|
-
import { NativeClass } from "./typings/NativeClass";
|
|
4
|
-
import { ValueOf } from "./typings/ValueOf";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Camel case type.
|
|
8
|
-
*
|
|
9
|
-
* `CamelCase` type is a type that all keys of an object are camelized.
|
|
10
|
-
*
|
|
11
|
-
* It also erases every method property like {@link Resolved} type.
|
|
12
|
-
*
|
|
13
|
-
* @author Jeongho Nam - https://github.com/samchon
|
|
14
|
-
* @template T Target type to be camelized
|
|
15
|
-
*/
|
|
16
|
-
export type CamelCase<T> =
|
|
17
|
-
Equal<T, CamelizeMain<T>> extends true ? T : CamelizeMain<T>;
|
|
18
|
-
|
|
19
|
-
type CamelizeMain<T> = T extends [never]
|
|
20
|
-
? never // special trick for (jsonable | null) type
|
|
21
|
-
: T extends { valueOf(): boolean | bigint | number | string }
|
|
22
|
-
? ValueOf<T>
|
|
23
|
-
: T extends Function
|
|
24
|
-
? never
|
|
25
|
-
: T extends object
|
|
26
|
-
? CamelizeObject<T>
|
|
27
|
-
: T;
|
|
28
|
-
|
|
29
|
-
type CamelizeObject<T extends object> =
|
|
30
|
-
T extends Array<infer U>
|
|
31
|
-
? IsTuple<T> extends true
|
|
32
|
-
? CamelizeTuple<T>
|
|
33
|
-
: CamelizeMain<U>[]
|
|
34
|
-
: T extends Set<infer U>
|
|
35
|
-
? Set<CamelizeMain<U>>
|
|
36
|
-
: T extends Map<infer K, infer V>
|
|
37
|
-
? Map<CamelizeMain<K>, CamelizeMain<V>>
|
|
38
|
-
: T extends WeakSet<any> | WeakMap<any, any>
|
|
39
|
-
? never
|
|
40
|
-
: T extends NativeClass
|
|
41
|
-
? T
|
|
42
|
-
: {
|
|
43
|
-
[Key in keyof T as CamelizeString<Key & string>]: CamelizeMain<
|
|
44
|
-
T[Key]
|
|
45
|
-
>;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
type CamelizeTuple<T extends readonly any[]> = T extends []
|
|
49
|
-
? []
|
|
50
|
-
: T extends [infer F]
|
|
51
|
-
? [CamelizeMain<F>]
|
|
52
|
-
: T extends [infer F, ...infer Rest extends readonly any[]]
|
|
53
|
-
? [CamelizeMain<F>, ...CamelizeTuple<Rest>]
|
|
54
|
-
: T extends [(infer F)?]
|
|
55
|
-
? [CamelizeMain<F>?]
|
|
56
|
-
: T extends [(infer F)?, ...infer Rest extends readonly any[]]
|
|
57
|
-
? [CamelizeMain<F>?, ...CamelizeTuple<Rest>]
|
|
58
|
-
: [];
|
|
59
|
-
|
|
60
|
-
type CamelizeString<Key extends string> = Key extends `_${infer R}`
|
|
61
|
-
? `_${CamelizeString<R>}`
|
|
62
|
-
: Key extends `${infer _F}_${infer _R}`
|
|
63
|
-
? CamelizeSnakeString<Key>
|
|
64
|
-
: Key extends Uppercase<Key>
|
|
65
|
-
? Lowercase<Key>
|
|
66
|
-
: CamelizePascalString<Key>;
|
|
67
|
-
type CamelizePascalString<Key extends string> =
|
|
68
|
-
Key extends `${infer F}${infer R}` ? `${Lowercase<F>}${R}` : Key;
|
|
69
|
-
type CamelizeSnakeString<Key extends string> = Key extends `_${infer R}`
|
|
70
|
-
? CamelizeSnakeString<R>
|
|
71
|
-
: Key extends `${infer F}_${infer M}${infer R}`
|
|
72
|
-
? M extends "_"
|
|
73
|
-
? CamelizeSnakeString<`${F}_${R}`>
|
|
74
|
-
: `${Lowercase<F>}${Uppercase<M>}${CamelizeSnakeString<R>}`
|
|
75
|
-
: Lowercase<Key>;
|
|
1
|
+
import { Equal } from "./typings/Equal";
|
|
2
|
+
import { IsTuple } from "./typings/IsTuple";
|
|
3
|
+
import { NativeClass } from "./typings/NativeClass";
|
|
4
|
+
import { ValueOf } from "./typings/ValueOf";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Camel case type.
|
|
8
|
+
*
|
|
9
|
+
* `CamelCase` type is a type that all keys of an object are camelized.
|
|
10
|
+
*
|
|
11
|
+
* It also erases every method property like {@link Resolved} type.
|
|
12
|
+
*
|
|
13
|
+
* @author Jeongho Nam - https://github.com/samchon
|
|
14
|
+
* @template T Target type to be camelized
|
|
15
|
+
*/
|
|
16
|
+
export type CamelCase<T> =
|
|
17
|
+
Equal<T, CamelizeMain<T>> extends true ? T : CamelizeMain<T>;
|
|
18
|
+
|
|
19
|
+
type CamelizeMain<T> = T extends [never]
|
|
20
|
+
? never // special trick for (jsonable | null) type
|
|
21
|
+
: T extends { valueOf(): boolean | bigint | number | string }
|
|
22
|
+
? ValueOf<T>
|
|
23
|
+
: T extends Function
|
|
24
|
+
? never
|
|
25
|
+
: T extends object
|
|
26
|
+
? CamelizeObject<T>
|
|
27
|
+
: T;
|
|
28
|
+
|
|
29
|
+
type CamelizeObject<T extends object> =
|
|
30
|
+
T extends Array<infer U>
|
|
31
|
+
? IsTuple<T> extends true
|
|
32
|
+
? CamelizeTuple<T>
|
|
33
|
+
: CamelizeMain<U>[]
|
|
34
|
+
: T extends Set<infer U>
|
|
35
|
+
? Set<CamelizeMain<U>>
|
|
36
|
+
: T extends Map<infer K, infer V>
|
|
37
|
+
? Map<CamelizeMain<K>, CamelizeMain<V>>
|
|
38
|
+
: T extends WeakSet<any> | WeakMap<any, any>
|
|
39
|
+
? never
|
|
40
|
+
: T extends NativeClass
|
|
41
|
+
? T
|
|
42
|
+
: {
|
|
43
|
+
[Key in keyof T as CamelizeString<Key & string>]: CamelizeMain<
|
|
44
|
+
T[Key]
|
|
45
|
+
>;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
type CamelizeTuple<T extends readonly any[]> = T extends []
|
|
49
|
+
? []
|
|
50
|
+
: T extends [infer F]
|
|
51
|
+
? [CamelizeMain<F>]
|
|
52
|
+
: T extends [infer F, ...infer Rest extends readonly any[]]
|
|
53
|
+
? [CamelizeMain<F>, ...CamelizeTuple<Rest>]
|
|
54
|
+
: T extends [(infer F)?]
|
|
55
|
+
? [CamelizeMain<F>?]
|
|
56
|
+
: T extends [(infer F)?, ...infer Rest extends readonly any[]]
|
|
57
|
+
? [CamelizeMain<F>?, ...CamelizeTuple<Rest>]
|
|
58
|
+
: [];
|
|
59
|
+
|
|
60
|
+
type CamelizeString<Key extends string> = Key extends `_${infer R}`
|
|
61
|
+
? `_${CamelizeString<R>}`
|
|
62
|
+
: Key extends `${infer _F}_${infer _R}`
|
|
63
|
+
? CamelizeSnakeString<Key>
|
|
64
|
+
: Key extends Uppercase<Key>
|
|
65
|
+
? Lowercase<Key>
|
|
66
|
+
: CamelizePascalString<Key>;
|
|
67
|
+
type CamelizePascalString<Key extends string> =
|
|
68
|
+
Key extends `${infer F}${infer R}` ? `${Lowercase<F>}${R}` : Key;
|
|
69
|
+
type CamelizeSnakeString<Key extends string> = Key extends `_${infer R}`
|
|
70
|
+
? CamelizeSnakeString<R>
|
|
71
|
+
: Key extends `${infer F}_${infer M}${infer R}`
|
|
72
|
+
? M extends "_"
|
|
73
|
+
? CamelizeSnakeString<`${F}_${R}`>
|
|
74
|
+
: `${Lowercase<F>}${Uppercase<M>}${CamelizeSnakeString<R>}`
|
|
75
|
+
: Lowercase<Key>;
|