typia 3.7.3-dev.20230408 → 3.7.4-dev.20230410
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 +5 -56
- package/package.json +8 -8
- package/src/CustomValidatorMap.ts +126 -126
- package/src/IRandomGenerator.ts +33 -33
- package/src/IValidation.ts +21 -21
- package/src/Primitive.ts +104 -104
- package/src/TypeGuardError.ts +36 -36
- package/src/executable/TypiaGenerateWizard.ts +87 -87
- package/src/executable/TypiaSetupWizard.ts +152 -152
- package/src/executable/setup/ArgumentParser.ts +91 -91
- package/src/executable/setup/CommandExecutor.ts +8 -8
- package/src/executable/setup/FileRetriever.ts +33 -33
- package/src/executable/setup/PackageManager.ts +92 -92
- package/src/executable/setup/PluginConfigurator.ts +99 -99
- package/src/executable/typia.ts +38 -38
- package/src/factories/CommentFactory.ts +10 -10
- package/src/factories/ExpressionFactory.ts +77 -77
- package/src/factories/IdentifierFactory.ts +81 -81
- package/src/factories/LiteralFactory.ts +44 -44
- package/src/factories/MetadataCollection.ts +122 -122
- package/src/factories/MetadataFactory.ts +51 -51
- package/src/factories/MetadataTagFactory.ts +302 -302
- package/src/factories/StatementFactory.ts +60 -60
- package/src/factories/TemplateFactory.ts +56 -56
- package/src/factories/TypeFactory.ts +129 -129
- package/src/factories/TypiaFileFactory.ts +120 -120
- package/src/factories/ValueFactory.ts +12 -12
- package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
- package/src/factories/internal/metadata/emplace_metadata_object.ts +142 -142
- package/src/factories/internal/metadata/explore_metadata.ts +92 -92
- package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
- package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
- package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
- package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
- package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
- package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
- package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
- package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
- package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
- package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
- package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
- package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
- package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
- package/src/functional/$any.ts +3 -3
- package/src/functional/$dictionary.ts +20 -20
- package/src/functional/$every.ts +11 -11
- package/src/functional/$guard.ts +35 -35
- package/src/functional/$is_between.ts +7 -7
- package/src/functional/$is_custom.ts +14 -14
- package/src/functional/$is_date.ts +4 -4
- package/src/functional/$is_datetime.ts +3 -3
- 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/$number.ts +12 -12
- 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/functional/Namespace.ts +127 -127
- package/src/index.ts +4 -4
- package/src/metadata/ICommentTag.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/IMetadataTag.ts +105 -105
- package/src/metadata/Metadata.ts +534 -534
- package/src/metadata/MetadataConstant.ts +3 -3
- package/src/metadata/MetadataObject.ts +131 -131
- package/src/metadata/MetadataProperty.ts +64 -64
- package/src/module.ts +2043 -2043
- package/src/programmers/ApplicationProgrammer.ts +55 -55
- package/src/programmers/AssertCloneProgrammer.ts +70 -70
- package/src/programmers/AssertParseProgrammer.ts +65 -65
- package/src/programmers/AssertProgrammer.ts +284 -284
- package/src/programmers/AssertPruneProgrammer.ts +67 -67
- package/src/programmers/AssertStringifyProgrammer.ts +71 -71
- package/src/programmers/CheckerProgrammer.ts +922 -922
- package/src/programmers/CloneProgrammer.ts +388 -388
- package/src/programmers/FeatureProgrammer.ts +512 -512
- package/src/programmers/IsCloneProgrammer.ts +80 -80
- package/src/programmers/IsParseProgrammer.ts +74 -74
- package/src/programmers/IsProgrammer.ts +206 -206
- package/src/programmers/IsPruneProgrammer.ts +75 -75
- package/src/programmers/IsStringifyProgrammer.ts +81 -81
- package/src/programmers/LiteralsProgrammer.ts +65 -65
- package/src/programmers/PruneProgrammer.ts +343 -343
- package/src/programmers/RandomProgrammer.ts +413 -413
- package/src/programmers/StringifyProgrammer.ts +801 -801
- package/src/programmers/ValidateCloneProgrammer.ts +90 -90
- package/src/programmers/ValidateParseProgrammer.ts +69 -69
- package/src/programmers/ValidateProgrammer.ts +317 -317
- package/src/programmers/ValidatePruneProgrammer.ts +83 -83
- package/src/programmers/ValidateStringifyProgrammer.ts +89 -89
- package/src/programmers/helpers/AtomicPredicator.ts +31 -31
- package/src/programmers/helpers/CloneJoiner.ts +134 -134
- package/src/programmers/helpers/FunctionImporeter.ts +55 -55
- package/src/programmers/helpers/ICheckEntry.ts +12 -12
- package/src/programmers/helpers/IExpressionEntry.ts +12 -12
- package/src/programmers/helpers/OptionPredicator.ts +19 -19
- package/src/programmers/helpers/PruneJoiner.ts +52 -52
- package/src/programmers/helpers/RandomJoiner.ts +161 -161
- package/src/programmers/helpers/RandomRanger.ts +216 -216
- package/src/programmers/helpers/StringifyJoinder.ts +114 -114
- package/src/programmers/helpers/StringifyPredicator.ts +18 -18
- package/src/programmers/helpers/UnionExplorer.ts +281 -281
- package/src/programmers/helpers/UnionPredicator.ts +81 -81
- package/src/programmers/internal/application_array.ts +37 -37
- package/src/programmers/internal/application_boolean.ts +17 -17
- package/src/programmers/internal/application_constant.ts +29 -29
- package/src/programmers/internal/application_default.ts +17 -17
- package/src/programmers/internal/application_default_string.ts +32 -32
- package/src/programmers/internal/application_native.ts +32 -32
- package/src/programmers/internal/application_number.ts +73 -73
- package/src/programmers/internal/application_object.ts +153 -153
- package/src/programmers/internal/application_schema.ts +184 -184
- package/src/programmers/internal/application_string.ts +45 -45
- package/src/programmers/internal/application_templates.ts +27 -27
- package/src/programmers/internal/application_tuple.ts +29 -29
- package/src/programmers/internal/check_array.ts +30 -30
- package/src/programmers/internal/check_array_length.ts +35 -35
- package/src/programmers/internal/check_bigint.ts +82 -82
- package/src/programmers/internal/check_custom.ts +33 -33
- package/src/programmers/internal/check_dynamic_properties.ts +197 -197
- package/src/programmers/internal/check_everything.ts +28 -28
- package/src/programmers/internal/check_native.ts +21 -21
- package/src/programmers/internal/check_number.ts +177 -177
- package/src/programmers/internal/check_object.ts +55 -55
- package/src/programmers/internal/check_string.ts +25 -25
- package/src/programmers/internal/check_string_tags.ts +73 -73
- package/src/programmers/internal/check_template.ts +59 -59
- package/src/programmers/internal/check_union_array_like.ts +272 -272
- package/src/programmers/internal/check_union_tuple.ts +35 -35
- package/src/programmers/internal/decode_union_object.ts +73 -73
- package/src/programmers/internal/feature_object_entries.ts +63 -63
- package/src/programmers/internal/get_comment_tags.ts +23 -23
- package/src/programmers/internal/metadata_to_pattern.ts +34 -34
- package/src/programmers/internal/prune_object_properties.ts +60 -60
- package/src/programmers/internal/random_custom.ts +30 -30
- package/src/programmers/internal/stringify_dynamic_properties.ts +168 -168
- package/src/programmers/internal/stringify_native.ts +8 -8
- package/src/programmers/internal/stringify_regular_properties.ts +84 -84
- 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/schemas/IJsonSchema.ts +121 -121
- package/src/transform.ts +21 -21
- package/src/transformers/CallExpressionTransformer.ts +174 -174
- 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 +62 -62
- package/src/transformers/ImportTransformer.ts +66 -66
- package/src/transformers/NodeTransformer.ts +19 -19
- package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +119 -119
- package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +41 -41
- package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +30 -30
- package/src/transformers/features/miscellaneous/MetadataTransformer.ts +54 -54
- package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/RandomTransformer.ts +46 -46
- package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
- package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
- package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
- package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
- package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
- package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
- package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
- package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
- package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +9 -9
- package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
- package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
- package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +11 -11
- package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
- package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
- package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
- package/src/transformers/features/validators/AssertTransformer.ts +11 -11
- package/src/transformers/features/validators/CreateAssertTransformer.ts +12 -12
- package/src/transformers/features/validators/CreateIsTransformer.ts +10 -10
- package/src/transformers/features/validators/CreateValidateTransformer.ts +12 -12
- package/src/transformers/features/validators/IsTransformer.ts +10 -10
- package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
- package/src/transformers/internal/GenericTransformer.ts +99 -99
- package/src/typings/Atomic.ts +17 -17
- package/src/typings/ClassProperties.ts +5 -5
- package/src/typings/Customizable.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/RandomGenerator.ts +96 -96
- package/src/utils/Singleton.ts +17 -17
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ export function prune<T extends object>(input: T): void; // erase extra props
|
|
|
37
37
|
|
|
38
38
|
All functions in `typia` require **only one line**. You don't need any extra dedication like JSON schema definitions or decorator function calls. Just call `typia` function with only one line like `typia.assert<T>(input)`.
|
|
39
39
|
|
|
40
|
-
Also, as `typia` performs AOT (Ahead of Time) compilation skill, its performance is much faster than other competitive libaries. For an example, when comparing validate function `is()` with other competitive libraries, `typia` is maximum **
|
|
40
|
+
Also, as `typia` performs AOT (Ahead of Time) compilation skill, its performance is much faster than other competitive libaries. For an example, when comparing validate function `is()` with other competitive libraries, `typia` is maximum **20,000x faster** than `class-validator`.
|
|
41
41
|
|
|
42
42
|
%20Core(TM)%20i5-1135G7%20%40%202.40GHz/images/is.svg)
|
|
43
43
|
|
|
@@ -59,6 +59,7 @@ Your donation would encourage `typia` development.
|
|
|
59
59
|
## Setup
|
|
60
60
|
### Transformation
|
|
61
61
|
```bash
|
|
62
|
+
npm install --save typia
|
|
62
63
|
npx typia setup
|
|
63
64
|
```
|
|
64
65
|
|
|
@@ -250,7 +251,7 @@ export function createAssertStringify<T>(): (input: T) => string;
|
|
|
250
251
|
- `application()`: generate JSON schema with only one line
|
|
251
252
|
- you can complement JSON schema contents through [comment tags](https://github.com/samchon/typia/wiki/Enhanced-JSON#comment-tags)
|
|
252
253
|
- `assertParse()`: parse JSON string safely with type validation
|
|
253
|
-
- `isStringify()`: maximum
|
|
254
|
+
- `isStringify()`: maximum 160x faster JSON stringify fuction even type safe
|
|
254
255
|
|
|
255
256
|

|
|
256
257
|
|
|
@@ -286,8 +287,8 @@ If you need specific random data generation, utilize comment tags or do customiz
|
|
|
286
287
|
[Nestia](https://github.com/samchon/nestia) is a set of helper libraries for `NestJS`, supporting below features:
|
|
287
288
|
|
|
288
289
|
- `@nestia/core`: superfast decorators using `typia`
|
|
289
|
-
- **
|
|
290
|
-
- **
|
|
290
|
+
- **20,000x faster** validation
|
|
291
|
+
- **200x faster** JSON serialization
|
|
291
292
|
- `@nestia/sdk`: evolved **SDK** and **Swagger** generators
|
|
292
293
|
- SDK (Software Development Kit)
|
|
293
294
|
- interaction library for client developers
|
|
@@ -295,55 +296,3 @@ If you need specific random data generation, utilize comment tags or do customiz
|
|
|
295
296
|
- `nestia`: just CLI (command line interface) tool
|
|
296
297
|
|
|
297
298
|

|
|
298
|
-
|
|
299
|
-
### Reactia
|
|
300
|
-
> Not published yet, but soon
|
|
301
|
-
|
|
302
|
-
[](https://github.com/samchon/reactia/blob/master/LICENSE)
|
|
303
|
-
[](https://github.com/samchon/reactia/actions?query=workflow%3Abuild)
|
|
304
|
-
[](https://github.com/samchon/reactia/wiki)
|
|
305
|
-
|
|
306
|
-
[Reactia](https://github.com/samchon/reactia) is an automatic React components generator, just by analyzing TypeScript type.
|
|
307
|
-
|
|
308
|
-
- `@reactia/core`: Core Library analyzing TypeScript type
|
|
309
|
-
- `@reactia/mui`: Material UI Theme for `core` and `nest`
|
|
310
|
-
- `@reactia/nest`: Automatic Frontend Application Builder for `NestJS`
|
|
311
|
-
|
|
312
|
-

|
|
313
|
-
|
|
314
|
-
When you want to automate an individual component, just use `@reactia/core`.
|
|
315
|
-
|
|
316
|
-
```tsx
|
|
317
|
-
import ReactDOM from "react-dom";
|
|
318
|
-
|
|
319
|
-
import typia from "typia";
|
|
320
|
-
import { ReactiaComponent } from "@reactia/core";
|
|
321
|
-
import { MuiInputTheme } from "@reactia/mui";
|
|
322
|
-
|
|
323
|
-
const RequestInput = ReactiaComponent<IRequestDto>(MuiInputTheme());
|
|
324
|
-
const input: IRequestDto = { ... };
|
|
325
|
-
|
|
326
|
-
ReactDOM.render(
|
|
327
|
-
<RequestInput input={input} />,
|
|
328
|
-
document.body
|
|
329
|
-
);
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
Otherwise, you can fully automate frontend application development through `@reactia/nest`.
|
|
333
|
-
|
|
334
|
-
```tsx
|
|
335
|
-
import React from "react";
|
|
336
|
-
import ReactDOM from "react-dom";
|
|
337
|
-
|
|
338
|
-
import { ISwagger } "@nestia/swagger";
|
|
339
|
-
import { MuiApplicationTheme } from "@reactia/mui";
|
|
340
|
-
import { ReactiaApplication } from "@reactia/nest";
|
|
341
|
-
|
|
342
|
-
const swagger: ISwagger = await import("./swagger.json");
|
|
343
|
-
const App: React.FC = ReactiaApplication(MuiApplicationTheme())(swagger);
|
|
344
|
-
|
|
345
|
-
ReactDOM.render(
|
|
346
|
-
<App />,
|
|
347
|
-
document.body
|
|
348
|
-
);
|
|
349
|
-
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typia",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.4-dev.20230410",
|
|
4
4
|
"description": "Superfast runtime validators with only one line",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"typings": "lib/index.d.ts",
|
|
@@ -67,6 +67,12 @@
|
|
|
67
67
|
"url": "https://github.com/samchon/typia/issues"
|
|
68
68
|
},
|
|
69
69
|
"homepage": "https://github.com/samchon/typia#readme",
|
|
70
|
+
"dependencies": {
|
|
71
|
+
"commander": "^10.0.0",
|
|
72
|
+
"comment-json": "^4.2.3",
|
|
73
|
+
"inquirer": "^8.2.5",
|
|
74
|
+
"randexp": "^0.5.3"
|
|
75
|
+
},
|
|
70
76
|
"peerDependencies": {
|
|
71
77
|
"typescript": ">= 4.5.2 && < 5.0.0"
|
|
72
78
|
},
|
|
@@ -94,14 +100,11 @@
|
|
|
94
100
|
"class-transformer": "^0.5.1",
|
|
95
101
|
"class-validator": "^0.13.2",
|
|
96
102
|
"cli": "^1.0.1",
|
|
97
|
-
"commander": "^10.0.0",
|
|
98
|
-
"comment-json": "^4.2.3",
|
|
99
103
|
"d3": "^5.16.0",
|
|
100
104
|
"eslint-plugin-deprecation": "^1.3.2",
|
|
101
105
|
"express": "^4.18.2",
|
|
102
106
|
"fast-json-stringify": "^5.4.0",
|
|
103
107
|
"fastify": "^4.9.2",
|
|
104
|
-
"inquirer": "^8.2.5",
|
|
105
108
|
"io-ts": "^2.2.19",
|
|
106
109
|
"jsdom": "^20.0.2",
|
|
107
110
|
"physical-cpu-count": "^2.0.0",
|
|
@@ -125,8 +128,5 @@
|
|
|
125
128
|
"package.json",
|
|
126
129
|
"lib",
|
|
127
130
|
"src"
|
|
128
|
-
]
|
|
129
|
-
"dependencies": {
|
|
130
|
-
"randexp": "^0.5.3"
|
|
131
|
-
}
|
|
131
|
+
]
|
|
132
132
|
}
|
|
@@ -1,126 +1,126 @@
|
|
|
1
|
-
import { Customizable } from "./typings/Customizable";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Map of custom validators.
|
|
5
|
-
*
|
|
6
|
-
* Map of custom validator functions, storing tag name and type of target value
|
|
7
|
-
* as key, and custom validator function as value.
|
|
8
|
-
*
|
|
9
|
-
* When you want to add a custom validation logic utilizing comment tags, you
|
|
10
|
-
* can insert a custom validator function with specific tag name and type of
|
|
11
|
-
* the target value like below.
|
|
12
|
-
*
|
|
13
|
-
* ```ts
|
|
14
|
-
* typia.customValidators.insert("powerOf")("number")(
|
|
15
|
-
* (text: string) => {
|
|
16
|
-
* const denominator: number = Math.log(Number(text));
|
|
17
|
-
* return (value: number) => {
|
|
18
|
-
* value = Math.log(value) / denominator;
|
|
19
|
-
* return value === Math.floor(value);
|
|
20
|
-
* };
|
|
21
|
-
* }
|
|
22
|
-
* );
|
|
23
|
-
* typia.customValidators.insert("dollar")("string")(
|
|
24
|
-
* () => (value: string) => value.startsWith("$"),
|
|
25
|
-
* );
|
|
26
|
-
*
|
|
27
|
-
* interface TagCustom {
|
|
28
|
-
* /**
|
|
29
|
-
* * @powerOf 10
|
|
30
|
-
* *\/
|
|
31
|
-
* powerOf: number;
|
|
32
|
-
*
|
|
33
|
-
* /**
|
|
34
|
-
* * @dollar
|
|
35
|
-
* *\/
|
|
36
|
-
* dollar: string;
|
|
37
|
-
* }
|
|
38
|
-
* ```
|
|
39
|
-
*
|
|
40
|
-
* @author Jeongho Nam - https://github.com/samchon
|
|
41
|
-
*/
|
|
42
|
-
export interface CustomValidatorMap {
|
|
43
|
-
/**
|
|
44
|
-
* Get number of stored tags.
|
|
45
|
-
*
|
|
46
|
-
* @return Number of stored tags
|
|
47
|
-
*/
|
|
48
|
-
size(): number;
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Get number of stored types of the specified tag name.
|
|
52
|
-
*
|
|
53
|
-
* In other words, number of stored custom validator functions of
|
|
54
|
-
* the specified tag name.
|
|
55
|
-
*
|
|
56
|
-
* @param name Tag name
|
|
57
|
-
* @return Number of stored types function
|
|
58
|
-
*/
|
|
59
|
-
size(name: string): number;
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Test whether custom validator function exists or not.
|
|
63
|
-
*
|
|
64
|
-
* @param name Tag name
|
|
65
|
-
* @param type Type of the target value
|
|
66
|
-
* @returns Whether exists or not
|
|
67
|
-
*/
|
|
68
|
-
has: (name: string) => (type: keyof Customizable) => boolean;
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Get custom validator function.
|
|
72
|
-
*
|
|
73
|
-
* @param name Tag name
|
|
74
|
-
* @param type Type of the target value
|
|
75
|
-
* @returns Custom validator function or undefined value
|
|
76
|
-
*/
|
|
77
|
-
get(
|
|
78
|
-
name: string,
|
|
79
|
-
): <Type extends keyof Customizable>(
|
|
80
|
-
type: Type,
|
|
81
|
-
) => CustomValidatorMap.Closure<Type> | undefined;
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Insert a new custom validator function.
|
|
85
|
-
*
|
|
86
|
-
* You can add a custom validation logic utilizing comment tags,
|
|
87
|
-
* by inserting a function which returns a boolean value, with specific
|
|
88
|
-
* tag name and type of the target value.
|
|
89
|
-
*
|
|
90
|
-
* However, if you try to insert a duplicated tag name and type, the
|
|
91
|
-
* closure function would not be enrolled and `false` value would be
|
|
92
|
-
* returned.
|
|
93
|
-
*
|
|
94
|
-
* @param name Tag name
|
|
95
|
-
* @param type Type of the target value
|
|
96
|
-
* @param closure Custom validator function
|
|
97
|
-
* @returns Whether succeeded to insert or not
|
|
98
|
-
*/
|
|
99
|
-
insert(
|
|
100
|
-
name: string,
|
|
101
|
-
): <Type extends keyof Customizable>(
|
|
102
|
-
type: Type,
|
|
103
|
-
) => (closure: CustomValidatorMap.Closure<Type>) => boolean;
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Erase custom validator function.
|
|
107
|
-
*
|
|
108
|
-
* @param name Tag name
|
|
109
|
-
* @param type Type of the target value
|
|
110
|
-
* @returns Whether succeeded to erase or not
|
|
111
|
-
*/
|
|
112
|
-
erase(name: string): (type: keyof Customizable) => boolean;
|
|
113
|
-
}
|
|
114
|
-
export namespace CustomValidatorMap {
|
|
115
|
-
/**
|
|
116
|
-
* Type of closure function of custom validation.
|
|
117
|
-
*
|
|
118
|
-
* @template Type Type of the target value
|
|
119
|
-
* @param text Text of the tag. For example, if the tag is `@powerOf 10`, `text` is 10.
|
|
120
|
-
* @param value Value to validate
|
|
121
|
-
* @returns Whether the value is valid or not
|
|
122
|
-
*/
|
|
123
|
-
export type Closure<Type extends keyof Customizable> = (
|
|
124
|
-
text: string,
|
|
125
|
-
) => (value: Customizable[Type]) => boolean;
|
|
126
|
-
}
|
|
1
|
+
import { Customizable } from "./typings/Customizable";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Map of custom validators.
|
|
5
|
+
*
|
|
6
|
+
* Map of custom validator functions, storing tag name and type of target value
|
|
7
|
+
* as key, and custom validator function as value.
|
|
8
|
+
*
|
|
9
|
+
* When you want to add a custom validation logic utilizing comment tags, you
|
|
10
|
+
* can insert a custom validator function with specific tag name and type of
|
|
11
|
+
* the target value like below.
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* typia.customValidators.insert("powerOf")("number")(
|
|
15
|
+
* (text: string) => {
|
|
16
|
+
* const denominator: number = Math.log(Number(text));
|
|
17
|
+
* return (value: number) => {
|
|
18
|
+
* value = Math.log(value) / denominator;
|
|
19
|
+
* return value === Math.floor(value);
|
|
20
|
+
* };
|
|
21
|
+
* }
|
|
22
|
+
* );
|
|
23
|
+
* typia.customValidators.insert("dollar")("string")(
|
|
24
|
+
* () => (value: string) => value.startsWith("$"),
|
|
25
|
+
* );
|
|
26
|
+
*
|
|
27
|
+
* interface TagCustom {
|
|
28
|
+
* /**
|
|
29
|
+
* * @powerOf 10
|
|
30
|
+
* *\/
|
|
31
|
+
* powerOf: number;
|
|
32
|
+
*
|
|
33
|
+
* /**
|
|
34
|
+
* * @dollar
|
|
35
|
+
* *\/
|
|
36
|
+
* dollar: string;
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @author Jeongho Nam - https://github.com/samchon
|
|
41
|
+
*/
|
|
42
|
+
export interface CustomValidatorMap {
|
|
43
|
+
/**
|
|
44
|
+
* Get number of stored tags.
|
|
45
|
+
*
|
|
46
|
+
* @return Number of stored tags
|
|
47
|
+
*/
|
|
48
|
+
size(): number;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Get number of stored types of the specified tag name.
|
|
52
|
+
*
|
|
53
|
+
* In other words, number of stored custom validator functions of
|
|
54
|
+
* the specified tag name.
|
|
55
|
+
*
|
|
56
|
+
* @param name Tag name
|
|
57
|
+
* @return Number of stored types function
|
|
58
|
+
*/
|
|
59
|
+
size(name: string): number;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Test whether custom validator function exists or not.
|
|
63
|
+
*
|
|
64
|
+
* @param name Tag name
|
|
65
|
+
* @param type Type of the target value
|
|
66
|
+
* @returns Whether exists or not
|
|
67
|
+
*/
|
|
68
|
+
has: (name: string) => (type: keyof Customizable) => boolean;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Get custom validator function.
|
|
72
|
+
*
|
|
73
|
+
* @param name Tag name
|
|
74
|
+
* @param type Type of the target value
|
|
75
|
+
* @returns Custom validator function or undefined value
|
|
76
|
+
*/
|
|
77
|
+
get(
|
|
78
|
+
name: string,
|
|
79
|
+
): <Type extends keyof Customizable>(
|
|
80
|
+
type: Type,
|
|
81
|
+
) => CustomValidatorMap.Closure<Type> | undefined;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Insert a new custom validator function.
|
|
85
|
+
*
|
|
86
|
+
* You can add a custom validation logic utilizing comment tags,
|
|
87
|
+
* by inserting a function which returns a boolean value, with specific
|
|
88
|
+
* tag name and type of the target value.
|
|
89
|
+
*
|
|
90
|
+
* However, if you try to insert a duplicated tag name and type, the
|
|
91
|
+
* closure function would not be enrolled and `false` value would be
|
|
92
|
+
* returned.
|
|
93
|
+
*
|
|
94
|
+
* @param name Tag name
|
|
95
|
+
* @param type Type of the target value
|
|
96
|
+
* @param closure Custom validator function
|
|
97
|
+
* @returns Whether succeeded to insert or not
|
|
98
|
+
*/
|
|
99
|
+
insert(
|
|
100
|
+
name: string,
|
|
101
|
+
): <Type extends keyof Customizable>(
|
|
102
|
+
type: Type,
|
|
103
|
+
) => (closure: CustomValidatorMap.Closure<Type>) => boolean;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Erase custom validator function.
|
|
107
|
+
*
|
|
108
|
+
* @param name Tag name
|
|
109
|
+
* @param type Type of the target value
|
|
110
|
+
* @returns Whether succeeded to erase or not
|
|
111
|
+
*/
|
|
112
|
+
erase(name: string): (type: keyof Customizable) => boolean;
|
|
113
|
+
}
|
|
114
|
+
export namespace CustomValidatorMap {
|
|
115
|
+
/**
|
|
116
|
+
* Type of closure function of custom validation.
|
|
117
|
+
*
|
|
118
|
+
* @template Type Type of the target value
|
|
119
|
+
* @param text Text of the tag. For example, if the tag is `@powerOf 10`, `text` is 10.
|
|
120
|
+
* @param value Value to validate
|
|
121
|
+
* @returns Whether the value is valid or not
|
|
122
|
+
*/
|
|
123
|
+
export type Closure<Type extends keyof Customizable> = (
|
|
124
|
+
text: string,
|
|
125
|
+
) => (value: Customizable[Type]) => boolean;
|
|
126
|
+
}
|
package/src/IRandomGenerator.ts
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import { Customizable } from "./typings/Customizable";
|
|
2
|
-
|
|
3
|
-
export interface IRandomGenerator {
|
|
4
|
-
boolean(): boolean;
|
|
5
|
-
integer(minimum?: number, maximum?: number): number;
|
|
6
|
-
number(minimum?: number, maximum?: number): number;
|
|
7
|
-
bigint(minimum?: bigint, maximum?: bigint): bigint;
|
|
8
|
-
string(length?: number): string;
|
|
9
|
-
array<T>(closure: (index: number) => T, count?: number): T[];
|
|
10
|
-
|
|
11
|
-
uuid(): string;
|
|
12
|
-
email(): string;
|
|
13
|
-
url(): string;
|
|
14
|
-
ipv4(): string;
|
|
15
|
-
ipv6(): string;
|
|
16
|
-
pattern(regex: RegExp): string;
|
|
17
|
-
date(minimum?: number, maximum?: number): string;
|
|
18
|
-
datetime(minimum?: number, maximum?: number): string;
|
|
19
|
-
|
|
20
|
-
customs?: IRandomGenerator.CustomMap;
|
|
21
|
-
}
|
|
22
|
-
export namespace IRandomGenerator {
|
|
23
|
-
export type CustomMap = {
|
|
24
|
-
[Type in keyof Customizable]?: (
|
|
25
|
-
tags: ICommentTag[],
|
|
26
|
-
) => Customizable[Type] | undefined;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export interface ICommentTag {
|
|
30
|
-
name: string;
|
|
31
|
-
value?: string;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
1
|
+
import { Customizable } from "./typings/Customizable";
|
|
2
|
+
|
|
3
|
+
export interface IRandomGenerator {
|
|
4
|
+
boolean(): boolean;
|
|
5
|
+
integer(minimum?: number, maximum?: number): number;
|
|
6
|
+
number(minimum?: number, maximum?: number): number;
|
|
7
|
+
bigint(minimum?: bigint, maximum?: bigint): bigint;
|
|
8
|
+
string(length?: number): string;
|
|
9
|
+
array<T>(closure: (index: number) => T, count?: number): T[];
|
|
10
|
+
|
|
11
|
+
uuid(): string;
|
|
12
|
+
email(): string;
|
|
13
|
+
url(): string;
|
|
14
|
+
ipv4(): string;
|
|
15
|
+
ipv6(): string;
|
|
16
|
+
pattern(regex: RegExp): string;
|
|
17
|
+
date(minimum?: number, maximum?: number): string;
|
|
18
|
+
datetime(minimum?: number, maximum?: number): string;
|
|
19
|
+
|
|
20
|
+
customs?: IRandomGenerator.CustomMap;
|
|
21
|
+
}
|
|
22
|
+
export namespace IRandomGenerator {
|
|
23
|
+
export type CustomMap = {
|
|
24
|
+
[Type in keyof Customizable]?: (
|
|
25
|
+
tags: ICommentTag[],
|
|
26
|
+
) => Customizable[Type] | undefined;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export interface ICommentTag {
|
|
30
|
+
name: string;
|
|
31
|
+
value?: string;
|
|
32
|
+
}
|
|
33
|
+
}
|
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
|
+
}
|