pwi-plata-type 0.4.201 → 0.4.202
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 +2 -2
- package/package.json +58 -58
- package/src/@types/build.d.ts +26 -26
- package/src/@types/cluster.actions.d.ts +27 -27
- package/src/@types/cluster.d.ts +55 -55
- package/src/@types/create-cli.d.ts +8 -8
- package/src/@types/exported.d.ts +34 -31
- package/src/@types/fs.d.ts +6 -6
- package/src/@types/global.d.ts +131 -131
- package/src/@types/knex.d.ts +13 -13
- package/src/@types/model.d.ts +143 -143
- package/src/@types/router.d.ts +107 -107
- package/src/@types/sql.d.ts +120 -120
- package/src/@types/swagger.d.ts +22 -22
- package/src/bin/extras/create-api-cli.ts +218 -218
- package/src/bin/extras/create-cluster-cli.ts +160 -160
- package/src/bin/extras/create-lib-cli.ts +84 -84
- package/src/bin/extras/plata-create-tools.ts +97 -97
- package/src/bin/plata-api.ts +189 -189
- package/src/bin/plata-build.ts +19 -19
- package/src/bin/plata-cluster.ts +42 -42
- package/src/bin/plata-cmd.ts +19 -19
- package/src/bin/plata-create.ts +50 -50
- package/src/bin/plata-runtime.ts +110 -110
- package/src/bin/plata-swagger.ts +104 -104
- package/src/index.ts +20 -20
- package/src/libs/axios.ts +32 -32
- package/src/libs/build.ts +234 -234
- package/src/libs/build_wasm.ts +169 -169
- package/src/libs/cluster/cluster-controller.ts +93 -93
- package/src/libs/cluster.ts +319 -319
- package/src/libs/custom.ts +21 -21
- package/src/libs/env.ts +10 -10
- package/src/libs/fs.ts +399 -399
- package/src/libs/hot-reload.ts +63 -63
- package/src/libs/job.ts +32 -32
- package/src/libs/models/index.ts +4 -4
- package/src/libs/models/model-template-combine.ts +93 -93
- package/src/libs/models/model-template-env.ts +58 -58
- package/src/libs/models/model-template-union.ts +87 -87
- package/src/libs/models/model-template.ts +111 -111
- package/src/libs/models/model-validations.ts +453 -453
- package/src/libs/models/tools.ts +196 -196
- package/src/libs/router.ts +184 -184
- package/src/libs/runtime.ts +328 -328
- package/src/libs/sql.ts +931 -931
- package/src/libs/swagger.ts +81 -81
- package/src/libs/tools.ts +236 -236
- package/src/misc/golang/wasm_exec.js +574 -574
- package/src/scripts/post-install/api.ts +32 -32
- package/src/scripts/post-install/cluster.ts +28 -28
- package/src/scripts/post-install/lib.ts +25 -25
- package/src/scripts/post-install.ts +64 -64
- package/src/scripts/pre-test.ts +33 -33
- package/src/tests/1-config.test.ts +12 -12
- package/src/tests/2-effect.test.ts +107 -107
- package/src/tests/3-model.env.test.ts +66 -66
- package/src/tests/4-model.test.ts +150 -150
- package/src/tests/5-model.union.test.ts +160 -160
- package/src/tests/6-router.test.ts +44 -44
- package/src/tests/7-switch.test.ts +75 -75
- package/src/tests/8-brands.test.ts +52 -52
- package/src/tests/9-sql.test.ts +639 -639
- package/src/tests/assets/sql/example.sql +94 -94
- package/templates/create-cli/class.ts +13 -13
- package/templates/create-cli/cluster.ts +14 -14
- package/templates/create-cli/cmd.ts +3 -3
- package/templates/create-cli/config.ts +2 -2
- package/templates/create-cli/lib.ts +3 -3
- package/templates/create-cli/model.ts +14 -14
- package/templates/create-cli/route.ts +8 -8
- package/templates/create-cli/task.ts +13 -13
- package/templates/postinstall/api/.vscode/launch.json +20 -20
- package/templates/postinstall/api/Dockerfile +22 -22
- package/templates/postinstall/api/configs/env.ts +2 -2
- package/templates/postinstall/api/envs/debug.env +15 -15
- package/templates/postinstall/api/envs/homolog.env +15 -15
- package/templates/postinstall/api/envs/prod.env +15 -15
- package/templates/postinstall/api/tsconfig.json +24 -24
- package/templates/postinstall/cluster/.vscode/launch.json +20 -20
- package/templates/postinstall/cluster/Dockerfile +24 -24
- package/templates/postinstall/cluster/configs/env.ts +2 -2
- package/templates/postinstall/cluster/envs/debug.env +10 -10
- package/templates/postinstall/cluster/envs/homolog.env +10 -10
- package/templates/postinstall/cluster/envs/prod.env +10 -10
- package/templates/postinstall/cluster/tsconfig.json +24 -24
- package/templates/postinstall/lib/postinstall-tools.mjs +111 -111
- package/templates/postinstall/lib/postinstall.js +33 -33
- package/templates/postinstall/lib/tsconfig.json +22 -22
- package/templates/swagger-cli/header.json +21 -21
- package/templates/swagger-cli/route/body.json +14 -14
- package/templates/swagger-cli/route/header.json +18 -18
- package/templates/swagger-cli/route/response.json +53 -53
- package/tsconfig.json +28 -28
package/src/@types/global.d.ts
CHANGED
|
@@ -1,132 +1,132 @@
|
|
|
1
|
-
interface RequiredInterface<T> {
|
|
2
|
-
filePath: string,
|
|
3
|
-
name: string,
|
|
4
|
-
exports: T
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
type RequireAsyncReturn<T> = PlataPromise<RequiredInterface<T>>
|
|
8
|
-
type RequireFolderReturn<T> = PlataPromise<RequiredInterface<T>[]>
|
|
9
|
-
type RequiredFolder<T> = Awaited<RequireFolderReturn<T>>
|
|
10
|
-
|
|
11
|
-
type StringKeyOfObject<T extends Object> = Exclude<{
|
|
12
|
-
[name in keyof T]:
|
|
13
|
-
name extends string ? name
|
|
14
|
-
: name extends number ? `${name}`
|
|
15
|
-
: undefined
|
|
16
|
-
}[keyof T], undefined>;
|
|
17
|
-
|
|
18
|
-
type AnyRecord<T> = {
|
|
19
|
-
[P in string]: T;
|
|
20
|
-
}
|
|
21
|
-
type LooseAutocomplete<T extends string> = T | (string & {})
|
|
22
|
-
|
|
23
|
-
type Replace<T, O, U> = T extends O ? Exclude<T, O> | U : T
|
|
24
|
-
|
|
25
|
-
type PlataEnvDefaults = "prod" | "homolog" | "debug"
|
|
26
|
-
type PlataEnv = LooseAutocomplete<PlataEnvDefaults>
|
|
27
|
-
|
|
28
|
-
type PlataFunctionWrapperReturn<F extends (...a: any) => any, T> = (...a: Parameters<F>) => T
|
|
29
|
-
|
|
30
|
-
type RemovePlataResult<T> = T extends PlataResult<infer U> ? Exclude<U, PlataError> : T
|
|
31
|
-
|
|
32
|
-
type RemovePlataResultOnArray<T> =
|
|
33
|
-
T extends [ infer U ] ? [ RemovePlataResult<Awaited<U>> ]
|
|
34
|
-
: T extends [ infer U, ...infer V ] ? [ RemovePlataResult<Awaited<U>>, ...RemovePlataResultOnArray<V> ]
|
|
35
|
-
: []
|
|
36
|
-
//: T extends Promise<infer U>[] ? RemovePlataResult<U>[]
|
|
37
|
-
//: never
|
|
38
|
-
|
|
39
|
-
;
|
|
40
|
-
|
|
41
|
-
type RemovePlataResultOnPromiseAll<T> =
|
|
42
|
-
RemovePlataResultOnArray<T>
|
|
43
|
-
// extends [ infer U ] ? RemovePlataResultOnArray<T>
|
|
44
|
-
// : T extends Promise<infer U>[] ? 'RemovePlataResult<U>'
|
|
45
|
-
// : 'never'
|
|
46
|
-
;
|
|
47
|
-
|
|
48
|
-
interface PlataProcess {
|
|
49
|
-
_plata_cache?: Record<string, any>
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
type Prettify<T> = {
|
|
53
|
-
[K in keyof T]: T[K];
|
|
54
|
-
} & {};
|
|
55
|
-
|
|
56
|
-
interface PlataEnvAutoComplete extends NodeJS.ProcessEnv {
|
|
57
|
-
ENV?: PlataEnv
|
|
58
|
-
PORT?: string
|
|
59
|
-
_PLATA_API_ROOT?: string
|
|
60
|
-
_PLATA_API_SSL_KEY?: string
|
|
61
|
-
_PLATA_API_SSL_CERT?: string
|
|
62
|
-
_PLATA_API_SSL_PASS?: string
|
|
63
|
-
_PLATA_API_JSON_SIZE?: string
|
|
64
|
-
_PLATA_WORKER_NAME?: string
|
|
65
|
-
_PLATA_WORKER_TYPE?: 'WORKER' | 'CONTROLLER'
|
|
66
|
-
_PLATA_SQL_CACHETABLE?: string
|
|
67
|
-
_PLATA_SQL_CACHETABLETIME?: string
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
interface PlataRuntime {
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
interface Plata extends PlataRuntime {
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
declare const Plata: Plata
|
|
78
|
-
|
|
79
|
-
declare const process: NodeJS.Process & PlataProcess
|
|
80
|
-
|
|
81
|
-
interface EnvConfig {
|
|
82
|
-
env: PlataEnv
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
interface PlataError {
|
|
86
|
-
errorID: string
|
|
87
|
-
msg: string,
|
|
88
|
-
error?: any
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
type MaybePlataError = null | PlataError
|
|
92
|
-
|
|
93
|
-
type PlataResult<T> = (T & { errorID?: undefined }) | PlataError
|
|
94
|
-
|
|
95
|
-
type PlataPromise<T> = Promise<PlataResult<T>>
|
|
96
|
-
|
|
97
|
-
type Dictionary<T> = {
|
|
98
|
-
[key: string]: T
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
type DictionaryRecord<K extends string | number, T> = {
|
|
102
|
-
[key in K]: T
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
interface PlataEnvConfig {
|
|
106
|
-
env: PlataEnv
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
type DeepWritable<T extends {}> = Prettify<{
|
|
110
|
-
-readonly [K in keyof T]: T[K] extends Dictionary<any> ?
|
|
111
|
-
T[K] extends Date ? Date : DeepWritable<T[K]>
|
|
112
|
-
: T[K]
|
|
113
|
-
}>
|
|
114
|
-
|
|
115
|
-
type ArrayCombine<T extends readonly any[]> =
|
|
116
|
-
T extends readonly [ infer U extends T[number] ] ? U
|
|
117
|
-
: T extends readonly [ infer U extends T[number], ...infer R] ? U & ArrayCombine<R>
|
|
118
|
-
: never
|
|
119
|
-
;
|
|
120
|
-
|
|
121
|
-
interface Brands {
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
type Brand<K extends keyof Brands> = Brands[K] & { z__brand: K }
|
|
126
|
-
|
|
127
|
-
interface PType {
|
|
128
|
-
checkType<T>(a: T): unknown
|
|
129
|
-
testType<R, T>(a: T, result: T extends R ? true : false)
|
|
130
|
-
}
|
|
131
|
-
|
|
1
|
+
interface RequiredInterface<T> {
|
|
2
|
+
filePath: string,
|
|
3
|
+
name: string,
|
|
4
|
+
exports: T
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
type RequireAsyncReturn<T> = PlataPromise<RequiredInterface<T>>
|
|
8
|
+
type RequireFolderReturn<T> = PlataPromise<RequiredInterface<T>[]>
|
|
9
|
+
type RequiredFolder<T> = Awaited<RequireFolderReturn<T>>
|
|
10
|
+
|
|
11
|
+
type StringKeyOfObject<T extends Object> = Exclude<{
|
|
12
|
+
[name in keyof T]:
|
|
13
|
+
name extends string ? name
|
|
14
|
+
: name extends number ? `${name}`
|
|
15
|
+
: undefined
|
|
16
|
+
}[keyof T], undefined>;
|
|
17
|
+
|
|
18
|
+
type AnyRecord<T> = {
|
|
19
|
+
[P in string]: T;
|
|
20
|
+
}
|
|
21
|
+
type LooseAutocomplete<T extends string> = T | (string & {})
|
|
22
|
+
|
|
23
|
+
type Replace<T, O, U> = T extends O ? Exclude<T, O> | U : T
|
|
24
|
+
|
|
25
|
+
type PlataEnvDefaults = "prod" | "homolog" | "debug"
|
|
26
|
+
type PlataEnv = LooseAutocomplete<PlataEnvDefaults>
|
|
27
|
+
|
|
28
|
+
type PlataFunctionWrapperReturn<F extends (...a: any) => any, T> = (...a: Parameters<F>) => T
|
|
29
|
+
|
|
30
|
+
type RemovePlataResult<T> = T extends PlataResult<infer U> ? Exclude<U, PlataError> : T
|
|
31
|
+
|
|
32
|
+
type RemovePlataResultOnArray<T> =
|
|
33
|
+
T extends [ infer U ] ? [ RemovePlataResult<Awaited<U>> ]
|
|
34
|
+
: T extends [ infer U, ...infer V ] ? [ RemovePlataResult<Awaited<U>>, ...RemovePlataResultOnArray<V> ]
|
|
35
|
+
: []
|
|
36
|
+
//: T extends Promise<infer U>[] ? RemovePlataResult<U>[]
|
|
37
|
+
//: never
|
|
38
|
+
|
|
39
|
+
;
|
|
40
|
+
|
|
41
|
+
type RemovePlataResultOnPromiseAll<T> =
|
|
42
|
+
RemovePlataResultOnArray<T>
|
|
43
|
+
// extends [ infer U ] ? RemovePlataResultOnArray<T>
|
|
44
|
+
// : T extends Promise<infer U>[] ? 'RemovePlataResult<U>'
|
|
45
|
+
// : 'never'
|
|
46
|
+
;
|
|
47
|
+
|
|
48
|
+
interface PlataProcess {
|
|
49
|
+
_plata_cache?: Record<string, any>
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
type Prettify<T> = {
|
|
53
|
+
[K in keyof T]: T[K];
|
|
54
|
+
} & {};
|
|
55
|
+
|
|
56
|
+
interface PlataEnvAutoComplete extends NodeJS.ProcessEnv {
|
|
57
|
+
ENV?: PlataEnv
|
|
58
|
+
PORT?: string
|
|
59
|
+
_PLATA_API_ROOT?: string
|
|
60
|
+
_PLATA_API_SSL_KEY?: string
|
|
61
|
+
_PLATA_API_SSL_CERT?: string
|
|
62
|
+
_PLATA_API_SSL_PASS?: string
|
|
63
|
+
_PLATA_API_JSON_SIZE?: string
|
|
64
|
+
_PLATA_WORKER_NAME?: string
|
|
65
|
+
_PLATA_WORKER_TYPE?: 'WORKER' | 'CONTROLLER'
|
|
66
|
+
_PLATA_SQL_CACHETABLE?: string
|
|
67
|
+
_PLATA_SQL_CACHETABLETIME?: string
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
interface PlataRuntime {
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
interface Plata extends PlataRuntime {
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
declare const Plata: Plata
|
|
78
|
+
|
|
79
|
+
declare const process: NodeJS.Process & PlataProcess
|
|
80
|
+
|
|
81
|
+
interface EnvConfig {
|
|
82
|
+
env: PlataEnv
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
interface PlataError {
|
|
86
|
+
errorID: string
|
|
87
|
+
msg: string,
|
|
88
|
+
error?: any
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
type MaybePlataError = null | PlataError
|
|
92
|
+
|
|
93
|
+
type PlataResult<T> = (T & { errorID?: undefined }) | PlataError
|
|
94
|
+
|
|
95
|
+
type PlataPromise<T> = Promise<PlataResult<T>>
|
|
96
|
+
|
|
97
|
+
type Dictionary<T> = {
|
|
98
|
+
[key: string]: T
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
type DictionaryRecord<K extends string | number, T> = {
|
|
102
|
+
[key in K]: T
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
interface PlataEnvConfig {
|
|
106
|
+
env: PlataEnv
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
type DeepWritable<T extends {}> = Prettify<{
|
|
110
|
+
-readonly [K in keyof T]: T[K] extends Dictionary<any> ?
|
|
111
|
+
T[K] extends Date ? Date : DeepWritable<T[K]>
|
|
112
|
+
: T[K]
|
|
113
|
+
}>
|
|
114
|
+
|
|
115
|
+
type ArrayCombine<T extends readonly any[]> =
|
|
116
|
+
T extends readonly [ infer U extends T[number] ] ? U
|
|
117
|
+
: T extends readonly [ infer U extends T[number], ...infer R] ? U & ArrayCombine<R>
|
|
118
|
+
: never
|
|
119
|
+
;
|
|
120
|
+
|
|
121
|
+
interface Brands {
|
|
122
|
+
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
type Brand<K extends keyof Brands> = Brands[K] & { z__brand: K }
|
|
126
|
+
|
|
127
|
+
interface PType {
|
|
128
|
+
checkType<T>(a: T): unknown
|
|
129
|
+
testType<R, T>(a: T, result: T extends R ? true : false)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
132
|
declare const PType: PType
|
package/src/@types/knex.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { Knex as KnexOriginal } from 'knex';
|
|
2
|
-
import { ModelTemplate } from '++/libs/models'
|
|
3
|
-
|
|
4
|
-
declare module 'knex' {
|
|
5
|
-
namespace Knex {
|
|
6
|
-
interface QueryBuilder {
|
|
7
|
-
includeOne<TRecord extends {}, TResult>(table: keyof TRecord, type: Sql.Joins,s: KnexOriginal.JoinCallback): KnexOriginal.QueryBuilder<TRecord, TResult>;
|
|
8
|
-
context<TRecord extends {}, TResult>(context: any): KnexOriginal.QueryBuilder<TRecord, TResult>;
|
|
9
|
-
context<T>(): T;
|
|
10
|
-
getConnTable<TRecord extends {}, TResult>(table: string, comments?: Record<string, string>): KnexOriginal.QueryBuilder<TRecord, TResult>
|
|
11
|
-
comment?: <TRecord extends {}, TResult>(comment: string) => KnexOriginal.QueryBuilder<TRecord, TResult>
|
|
12
|
-
}
|
|
13
|
-
}
|
|
1
|
+
import { Knex as KnexOriginal } from 'knex';
|
|
2
|
+
import { ModelTemplate } from '++/libs/models'
|
|
3
|
+
|
|
4
|
+
declare module 'knex' {
|
|
5
|
+
namespace Knex {
|
|
6
|
+
interface QueryBuilder {
|
|
7
|
+
includeOne<TRecord extends {}, TResult>(table: keyof TRecord, type: Sql.Joins,s: KnexOriginal.JoinCallback): KnexOriginal.QueryBuilder<TRecord, TResult>;
|
|
8
|
+
context<TRecord extends {}, TResult>(context: any): KnexOriginal.QueryBuilder<TRecord, TResult>;
|
|
9
|
+
context<T>(): T;
|
|
10
|
+
getConnTable<TRecord extends {}, TResult>(table: string, comments?: Record<string, string>): KnexOriginal.QueryBuilder<TRecord, TResult>
|
|
11
|
+
comment?: <TRecord extends {}, TResult>(comment: string) => KnexOriginal.QueryBuilder<TRecord, TResult>
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
14
|
}
|
package/src/@types/model.d.ts
CHANGED
|
@@ -1,144 +1,144 @@
|
|
|
1
|
-
declare namespace Model {
|
|
2
|
-
|
|
3
|
-
type ValidateReturn = PlataError | null
|
|
4
|
-
|
|
5
|
-
interface PrimitiveValidationTypeReturn {
|
|
6
|
-
error?: PlataError
|
|
7
|
-
continua: boolean
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
type PrimitiveValidationTypeFunction<T = any, D = undefined> =
|
|
11
|
-
(nome: string, valor: T | D) => Promise<PrimitiveValidationTypeReturn>
|
|
12
|
-
;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
interface PrimitiveValidationType<T = any, D = undefined> extends PrimitiveValidationTypeFunction<T, D>{
|
|
16
|
-
filter?: (value: any) => any
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
interface Template {
|
|
20
|
-
readonly [name: string]:
|
|
21
|
-
readonly PrimitiveValidationType<unknown, unknown>[] |
|
|
22
|
-
readonly Template[] |
|
|
23
|
-
Template |
|
|
24
|
-
readonly (readonly PrimitiveValidationType<unknown, unknown>[])[]
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
interface TemplateEnv {
|
|
28
|
-
readonly [name: string]: readonly PrimitiveValidationType<unknown, unknown>[]
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
type GetTemplateParamType<T> =
|
|
32
|
-
T extends readonly [ PrimitiveValidationType<infer G, infer H> ] ? G | H :
|
|
33
|
-
T extends readonly [ PrimitiveValidationType<any, infer H>, PrimitiveValidationType<infer G, any> ] ? G | H :
|
|
34
|
-
T extends readonly [ PrimitiveValidationType<any, infer H>, ...any[], PrimitiveValidationType<infer G, any> ] ? G | H :
|
|
35
|
-
never
|
|
36
|
-
;
|
|
37
|
-
|
|
38
|
-
type GetTemplateEnvParamType<const T extends PrimitiveValidationType<unknown, unknown>[]> =
|
|
39
|
-
T extends readonly [ PrimitiveValidationType<infer G, infer H> ] ? `${G}` | H :
|
|
40
|
-
T extends readonly [ PrimitiveValidationType<any, infer H>, PrimitiveValidationType<infer G, any> ] ? `${G}` | H :
|
|
41
|
-
T extends readonly [ PrimitiveValidationType<any, infer H>, ...any[], PrimitiveValidationType<infer G, any> ] ? `${G}` | H :
|
|
42
|
-
never
|
|
43
|
-
;
|
|
44
|
-
|
|
45
|
-
type ExtractTemplateParamType<T> = Exclude<GetTemplateParamType<T>, undefined>
|
|
46
|
-
|
|
47
|
-
type ExtractTemplateEnvParamType<const T> = Replace<Exclude<GetTemplateEnvParamType<T>, undefined>, null, undefined>
|
|
48
|
-
|
|
49
|
-
type ExtractTemplateType<T extends Template> = {
|
|
50
|
-
[P in keyof T]: T[P] extends Template ? ExtractTemplateType<T[P]> :
|
|
51
|
-
T[P] extends readonly Template[] ? ExtractTemplateType<T[P][0]>[] :
|
|
52
|
-
T[P] extends readonly (readonly PrimitiveValidationType<unknown, unknown>[])[] ? ExtractTemplateParamType<T[P][0]>[] :
|
|
53
|
-
T[P] extends readonly PrimitiveValidationType<unknown, unknown>[] ? ExtractTemplateParamType<T[P]> :
|
|
54
|
-
number | boolean | string | null
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
type ExtractTemplateEnvType<const T extends TemplateEnv> = {
|
|
59
|
-
[P in keyof T]: ExtractTemplateEnvParamType<T[P]>
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
type ExtractTemplateTypeNotValid<T extends Template> = {
|
|
63
|
-
[P in keyof T]: T[P] extends Template ? ExtractTemplateTypeNotValid<T[P]> :
|
|
64
|
-
T[P] extends readonly Template[] ? ExtractTemplateTypeNotValid<T[P][0]>[] :
|
|
65
|
-
T[P] extends readonly (readonly PrimitiveValidationType[])[] ? (number | boolean | string | null)[] :
|
|
66
|
-
number | boolean | string | null
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
type ParcialTemplateType<T extends Template> = Partial<ExtractTemplateType<T>>
|
|
70
|
-
|
|
71
|
-
type ModelTemplateValidation<T extends Template> = (value: ExtractTemplateType<T>) => Promise<PlataError | null>
|
|
72
|
-
|
|
73
|
-
type ModelTemplateFilter<T extends Template> = (value: DeepWritable<ExtractTemplateTypeNotValid<T>>) => DeepWritable<ExtractTemplateTypeNotValid<T>>
|
|
74
|
-
|
|
75
|
-
type ModelTemplateEnvValidation<const T extends TemplateEnv> = (value: ExtractTemplateEnvType<T>) => Promise<PlataError | null>
|
|
76
|
-
|
|
77
|
-
type ModelValidateReturn<T extends Template> =
|
|
78
|
-
ModelValidateReturnHelper<ExtractTemplateType<T>, ExtractTemplateTypeNotValid<T>>
|
|
79
|
-
;
|
|
80
|
-
|
|
81
|
-
type ModelValidateEnvReturn<const T extends TemplateEnv> =
|
|
82
|
-
ModelValidateReturnHelper<ExtractTemplateEnvType<T>, undefined>
|
|
83
|
-
;
|
|
84
|
-
|
|
85
|
-
type ModelValidateReturnHelper<const OKAY, const ERROR> =
|
|
86
|
-
| {
|
|
87
|
-
errors: undefined,
|
|
88
|
-
value: OKAY
|
|
89
|
-
}
|
|
90
|
-
| {
|
|
91
|
-
errors: PlataError[]
|
|
92
|
-
value: ERROR
|
|
93
|
-
}
|
|
94
|
-
;
|
|
95
|
-
|
|
96
|
-
type ConvertFunction<T extends Template, O> = (x: ExtractTemplateType<T>) => O
|
|
97
|
-
|
|
98
|
-
type Converters<T extends Template> = (AnyRecord<Model.ConvertFunction<T, any>>)
|
|
99
|
-
|
|
100
|
-
type GetConverterType<T extends Template, F> = F extends ConvertFunction<T, infer G> ? G : never
|
|
101
|
-
|
|
102
|
-
type ModelConvertFuntion<T extends Template, C extends Converters<T>> =
|
|
103
|
-
<K extends keyof C>(value: ExtractTemplateType<T>, to: K) => PlataResult<GetConverterType<T, C[K]>>
|
|
104
|
-
;
|
|
105
|
-
|
|
106
|
-
interface TemplateUnionConfig {
|
|
107
|
-
key: string
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
interface ModelClass {
|
|
111
|
-
readonly type: Record<string | number, any>
|
|
112
|
-
filter?: (value: any) => any
|
|
113
|
-
validate(value: any, skipFilter?: true): Promise<Model.ModelValidateReturnHelper<any, any>>
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
type TemplateRecord =
|
|
118
|
-
Record<string | `${number}` | `${boolean}` | 'null', ModelClass>
|
|
119
|
-
;
|
|
120
|
-
|
|
121
|
-
type ExtractModelUnionType<const C extends TemplateUnionConfig, const R extends TemplateRecord> = {
|
|
122
|
-
[K in keyof R]: Record<C['key'], K> & R[K]['type']
|
|
123
|
-
}[keyof R]
|
|
124
|
-
|
|
125
|
-
type RemoveTypesForFilter<T extends Record<string, any>> = {
|
|
126
|
-
-readonly [K in keyof T]:
|
|
127
|
-
T[K] extends Record<string, any> ? RemoveTypesForFilter<T[K]>
|
|
128
|
-
: number | boolean | string | null
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
type ExtractModelUnionTypeFilter<const C extends TemplateUnionConfig, const R extends TemplateRecord> = {
|
|
133
|
-
[K in keyof R]: Record<C['key'], K> & RemoveTypesForFilter<R[K]['type']>
|
|
134
|
-
}[keyof R]
|
|
135
|
-
|
|
136
|
-
type ExtractModelUnionReturn<const C extends TemplateUnionConfig, const R extends TemplateRecord> =
|
|
137
|
-
{
|
|
138
|
-
[K in keyof R]: {
|
|
139
|
-
model: R[K],
|
|
140
|
-
value: R[K]['type'] & Record<C['key'], K>
|
|
141
|
-
}
|
|
142
|
-
}[keyof R]
|
|
143
|
-
;
|
|
1
|
+
declare namespace Model {
|
|
2
|
+
|
|
3
|
+
type ValidateReturn = PlataError | null
|
|
4
|
+
|
|
5
|
+
interface PrimitiveValidationTypeReturn {
|
|
6
|
+
error?: PlataError
|
|
7
|
+
continua: boolean
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
type PrimitiveValidationTypeFunction<T = any, D = undefined> =
|
|
11
|
+
(nome: string, valor: T | D) => Promise<PrimitiveValidationTypeReturn>
|
|
12
|
+
;
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
interface PrimitiveValidationType<T = any, D = undefined> extends PrimitiveValidationTypeFunction<T, D>{
|
|
16
|
+
filter?: (value: any) => any
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
interface Template {
|
|
20
|
+
readonly [name: string]:
|
|
21
|
+
readonly PrimitiveValidationType<unknown, unknown>[] |
|
|
22
|
+
readonly Template[] |
|
|
23
|
+
Template |
|
|
24
|
+
readonly (readonly PrimitiveValidationType<unknown, unknown>[])[]
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
interface TemplateEnv {
|
|
28
|
+
readonly [name: string]: readonly PrimitiveValidationType<unknown, unknown>[]
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
type GetTemplateParamType<T> =
|
|
32
|
+
T extends readonly [ PrimitiveValidationType<infer G, infer H> ] ? G | H :
|
|
33
|
+
T extends readonly [ PrimitiveValidationType<any, infer H>, PrimitiveValidationType<infer G, any> ] ? G | H :
|
|
34
|
+
T extends readonly [ PrimitiveValidationType<any, infer H>, ...any[], PrimitiveValidationType<infer G, any> ] ? G | H :
|
|
35
|
+
never
|
|
36
|
+
;
|
|
37
|
+
|
|
38
|
+
type GetTemplateEnvParamType<const T extends PrimitiveValidationType<unknown, unknown>[]> =
|
|
39
|
+
T extends readonly [ PrimitiveValidationType<infer G, infer H> ] ? `${G}` | H :
|
|
40
|
+
T extends readonly [ PrimitiveValidationType<any, infer H>, PrimitiveValidationType<infer G, any> ] ? `${G}` | H :
|
|
41
|
+
T extends readonly [ PrimitiveValidationType<any, infer H>, ...any[], PrimitiveValidationType<infer G, any> ] ? `${G}` | H :
|
|
42
|
+
never
|
|
43
|
+
;
|
|
44
|
+
|
|
45
|
+
type ExtractTemplateParamType<T> = Exclude<GetTemplateParamType<T>, undefined>
|
|
46
|
+
|
|
47
|
+
type ExtractTemplateEnvParamType<const T> = Replace<Exclude<GetTemplateEnvParamType<T>, undefined>, null, undefined>
|
|
48
|
+
|
|
49
|
+
type ExtractTemplateType<T extends Template> = {
|
|
50
|
+
[P in keyof T]: T[P] extends Template ? ExtractTemplateType<T[P]> :
|
|
51
|
+
T[P] extends readonly Template[] ? ExtractTemplateType<T[P][0]>[] :
|
|
52
|
+
T[P] extends readonly (readonly PrimitiveValidationType<unknown, unknown>[])[] ? ExtractTemplateParamType<T[P][0]>[] :
|
|
53
|
+
T[P] extends readonly PrimitiveValidationType<unknown, unknown>[] ? ExtractTemplateParamType<T[P]> :
|
|
54
|
+
number | boolean | string | null
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
type ExtractTemplateEnvType<const T extends TemplateEnv> = {
|
|
59
|
+
[P in keyof T]: ExtractTemplateEnvParamType<T[P]>
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
type ExtractTemplateTypeNotValid<T extends Template> = {
|
|
63
|
+
[P in keyof T]: T[P] extends Template ? ExtractTemplateTypeNotValid<T[P]> :
|
|
64
|
+
T[P] extends readonly Template[] ? ExtractTemplateTypeNotValid<T[P][0]>[] :
|
|
65
|
+
T[P] extends readonly (readonly PrimitiveValidationType[])[] ? (number | boolean | string | null)[] :
|
|
66
|
+
number | boolean | string | null
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
type ParcialTemplateType<T extends Template> = Partial<ExtractTemplateType<T>>
|
|
70
|
+
|
|
71
|
+
type ModelTemplateValidation<T extends Template> = (value: ExtractTemplateType<T>) => Promise<PlataError | null>
|
|
72
|
+
|
|
73
|
+
type ModelTemplateFilter<T extends Template> = (value: DeepWritable<ExtractTemplateTypeNotValid<T>>) => DeepWritable<ExtractTemplateTypeNotValid<T>>
|
|
74
|
+
|
|
75
|
+
type ModelTemplateEnvValidation<const T extends TemplateEnv> = (value: ExtractTemplateEnvType<T>) => Promise<PlataError | null>
|
|
76
|
+
|
|
77
|
+
type ModelValidateReturn<T extends Template> =
|
|
78
|
+
ModelValidateReturnHelper<ExtractTemplateType<T>, ExtractTemplateTypeNotValid<T>>
|
|
79
|
+
;
|
|
80
|
+
|
|
81
|
+
type ModelValidateEnvReturn<const T extends TemplateEnv> =
|
|
82
|
+
ModelValidateReturnHelper<ExtractTemplateEnvType<T>, undefined>
|
|
83
|
+
;
|
|
84
|
+
|
|
85
|
+
type ModelValidateReturnHelper<const OKAY, const ERROR> =
|
|
86
|
+
| {
|
|
87
|
+
errors: undefined,
|
|
88
|
+
value: OKAY
|
|
89
|
+
}
|
|
90
|
+
| {
|
|
91
|
+
errors: PlataError[]
|
|
92
|
+
value: ERROR
|
|
93
|
+
}
|
|
94
|
+
;
|
|
95
|
+
|
|
96
|
+
type ConvertFunction<T extends Template, O> = (x: ExtractTemplateType<T>) => O
|
|
97
|
+
|
|
98
|
+
type Converters<T extends Template> = (AnyRecord<Model.ConvertFunction<T, any>>)
|
|
99
|
+
|
|
100
|
+
type GetConverterType<T extends Template, F> = F extends ConvertFunction<T, infer G> ? G : never
|
|
101
|
+
|
|
102
|
+
type ModelConvertFuntion<T extends Template, C extends Converters<T>> =
|
|
103
|
+
<K extends keyof C>(value: ExtractTemplateType<T>, to: K) => PlataResult<GetConverterType<T, C[K]>>
|
|
104
|
+
;
|
|
105
|
+
|
|
106
|
+
interface TemplateUnionConfig {
|
|
107
|
+
key: string
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
interface ModelClass {
|
|
111
|
+
readonly type: Record<string | number, any>
|
|
112
|
+
filter?: (value: any) => any
|
|
113
|
+
validate(value: any, skipFilter?: true): Promise<Model.ModelValidateReturnHelper<any, any>>
|
|
114
|
+
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
type TemplateRecord =
|
|
118
|
+
Record<string | `${number}` | `${boolean}` | 'null', ModelClass>
|
|
119
|
+
;
|
|
120
|
+
|
|
121
|
+
type ExtractModelUnionType<const C extends TemplateUnionConfig, const R extends TemplateRecord> = {
|
|
122
|
+
[K in keyof R]: Record<C['key'], K> & R[K]['type']
|
|
123
|
+
}[keyof R]
|
|
124
|
+
|
|
125
|
+
type RemoveTypesForFilter<T extends Record<string, any>> = {
|
|
126
|
+
-readonly [K in keyof T]:
|
|
127
|
+
T[K] extends Record<string, any> ? RemoveTypesForFilter<T[K]>
|
|
128
|
+
: number | boolean | string | null
|
|
129
|
+
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
type ExtractModelUnionTypeFilter<const C extends TemplateUnionConfig, const R extends TemplateRecord> = {
|
|
133
|
+
[K in keyof R]: Record<C['key'], K> & RemoveTypesForFilter<R[K]['type']>
|
|
134
|
+
}[keyof R]
|
|
135
|
+
|
|
136
|
+
type ExtractModelUnionReturn<const C extends TemplateUnionConfig, const R extends TemplateRecord> =
|
|
137
|
+
{
|
|
138
|
+
[K in keyof R]: {
|
|
139
|
+
model: R[K],
|
|
140
|
+
value: R[K]['type'] & Record<C['key'], K>
|
|
141
|
+
}
|
|
142
|
+
}[keyof R]
|
|
143
|
+
;
|
|
144
144
|
}
|