pwi-plata-type 0.4.136 → 0.4.138
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/__BUILD__/index.js +1 -1
- package/__BUILD__/index.js.map +1 -1
- package/__BUILD__/libs/models/index.js +21 -0
- package/__BUILD__/libs/models/index.js.map +1 -0
- package/__BUILD__/libs/models/model-template-env.js +48 -0
- package/__BUILD__/libs/models/model-template-env.js.map +1 -0
- package/__BUILD__/libs/models/model-template-union.js +50 -0
- package/__BUILD__/libs/models/model-template-union.js.map +1 -0
- package/__BUILD__/libs/models/model-template.js +88 -0
- package/__BUILD__/libs/models/model-template.js.map +1 -0
- package/__BUILD__/libs/models/model-union.js +1 -0
- package/__BUILD__/libs/models/model-union.js.map +1 -0
- package/__BUILD__/libs/models/model-validations.js.map +1 -0
- package/__BUILD__/libs/models/tools.js +114 -0
- package/__BUILD__/libs/models/tools.js.map +1 -0
- package/package.json +1 -1
- package/src/@types/exported.d.ts +1 -1
- package/src/@types/knex.d.ts +1 -1
- package/src/@types/model.d.ts +65 -7
- package/src/@types/sql.d.ts +3 -0
- package/src/bin/runtime/switch.ts +1 -1
- package/src/index.ts +1 -1
- package/src/libs/models/index.ts +4 -0
- package/src/libs/models/model-template-env.ts +58 -0
- package/src/libs/models/model-template-union.ts +55 -0
- package/src/libs/models/model-template.ts +104 -0
- package/src/libs/models/model-union.ts +0 -0
- package/src/libs/{model.ts → models/tools.ts} +31 -114
- package/src/libs/sql.ts +1 -1
- package/src/tests/model.env.test.ts +67 -0
- package/src/tests/model.test.ts +5 -3
- package/src/tests/model.union.test.ts +149 -0
- package/src/tests/sql.test.ts +1 -1
- package/__BUILD__/libs/model-validations.js.map +0 -1
- package/__BUILD__/libs/model.js +0 -200
- package/__BUILD__/libs/model.js.map +0 -1
- /package/__BUILD__/libs/{model-validations.js → models/model-validations.js} +0 -0
- /package/src/libs/{model-validations.ts → models/model-validations.ts} +0 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export class ModelTemplateUnion<const C extends Model.TemplateUnionConfig, const R extends Model.TemplateRecord> {
|
|
2
|
+
public readonly config: C
|
|
3
|
+
public readonly templates: R
|
|
4
|
+
public readonly type: Model.ExtractModelUnionType<C, R>
|
|
5
|
+
|
|
6
|
+
constructor(config: C, templates: R) {
|
|
7
|
+
this.config = config
|
|
8
|
+
this.templates = templates
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
public getExtractFromUnion(value: any): PlataResult<Model.ExtractModelUnionReturn<C, R>> {
|
|
12
|
+
let type = `${value[this.config.key] ?? null}`
|
|
13
|
+
value[this.config.key] = value[this.config.key] ?? null
|
|
14
|
+
|
|
15
|
+
const template = this.templates[type]
|
|
16
|
+
|
|
17
|
+
if (template === undefined) {
|
|
18
|
+
return {
|
|
19
|
+
errorID: 'PLMODUNEXTFRUN001',
|
|
20
|
+
msg: `O Valor de ${this.config.key} tem que ser ${Object.keys(this.templates).join(',')}`,
|
|
21
|
+
error: type
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
model: template,
|
|
27
|
+
value: value,
|
|
28
|
+
} as any
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public async validate(value: any): Promise<Model.ModelValidateReturnHelper<typeof this.type, undefined>> {
|
|
32
|
+
const extraced = this.getExtractFromUnion(value)
|
|
33
|
+
|
|
34
|
+
if (extraced.errorID !== undefined) {
|
|
35
|
+
return {
|
|
36
|
+
errors: [extraced],
|
|
37
|
+
value: undefined
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const result = await extraced.model.validate(extraced.value)
|
|
42
|
+
|
|
43
|
+
if (result.errors !== undefined) {
|
|
44
|
+
return {
|
|
45
|
+
errors: result.errors,
|
|
46
|
+
value: undefined
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
errors: undefined,
|
|
52
|
+
value: result.value
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { ModelsInternals } from "./tools"
|
|
2
|
+
|
|
3
|
+
export class ModelTemplate<T extends Model.Template, C extends Model.Converters<T>> {
|
|
4
|
+
public readonly template: T
|
|
5
|
+
public readonly converters: C | {}
|
|
6
|
+
public readonly validations: Map<string, Model.ModelTemplateValidation<T>>
|
|
7
|
+
public readonly filters: Map<string, Model.ModelTemplateFilter<T>>
|
|
8
|
+
public readonly type: Model.ExtractTemplateType<T>
|
|
9
|
+
|
|
10
|
+
constructor(template: T, converters: C | {}) {
|
|
11
|
+
this.template = template
|
|
12
|
+
this.converters = converters
|
|
13
|
+
this.validations = new Map()
|
|
14
|
+
this.filters = new Map()
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public addValidation(nome: string, callback: Model.ModelTemplateValidation<T>) {
|
|
18
|
+
this.validations.set(nome, callback)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public addFilter(nome: string, callback: Model.ModelTemplateFilter<T>) {
|
|
22
|
+
this.filters.set(nome, callback)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public convert: Model.ModelConvertFuntion<T, C> = (value, to) => {
|
|
26
|
+
const c: Model.ConvertFunction<T, any> | undefined = this.converters[to as string]
|
|
27
|
+
|
|
28
|
+
if (c === undefined)
|
|
29
|
+
return {
|
|
30
|
+
errorID: 'BPLM0002',
|
|
31
|
+
msg: 'Invalid Converter',
|
|
32
|
+
error: to
|
|
33
|
+
}
|
|
34
|
+
;
|
|
35
|
+
|
|
36
|
+
try {
|
|
37
|
+
return c(value)
|
|
38
|
+
} catch (e) {
|
|
39
|
+
return {
|
|
40
|
+
errorID: 'BPLM0003',
|
|
41
|
+
msg: 'Unexpected converter error',
|
|
42
|
+
error: e
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public filter(value: any) {
|
|
48
|
+
let v = ModelsInternals.filterTemplate(value, this.template)
|
|
49
|
+
|
|
50
|
+
this.filters.forEach(f => {
|
|
51
|
+
v = f(v)
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
return v
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public async validate(value: any): Promise<Model.ModelValidateReturn<T>> {
|
|
58
|
+
const v = this.filter(value)
|
|
59
|
+
const errors = await ModelsInternals.validateTemplate(v, this.template)
|
|
60
|
+
|
|
61
|
+
if (errors.errorID !== undefined) {
|
|
62
|
+
return {
|
|
63
|
+
value: v as any,
|
|
64
|
+
errors: [errors]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (errors.length !== 0) {
|
|
69
|
+
return {
|
|
70
|
+
value: v as any,
|
|
71
|
+
errors
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const promises: Promise<Model.ValidateReturn>[] = []
|
|
76
|
+
|
|
77
|
+
this.validations.forEach(validation => {
|
|
78
|
+
promises.push(validation(v as any))
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
const result: PlataResult<PlataError[]> = await Plata.FastPromise(() => Promise.all(promises)).then(
|
|
82
|
+
r => ([] as Model.ValidateReturn[]).concat(...r).filter(v => v !== null),
|
|
83
|
+
err => {
|
|
84
|
+
return {
|
|
85
|
+
errorID: 'BPLM0002',
|
|
86
|
+
msg: `unexpected error while validating model`,
|
|
87
|
+
error: err
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
) as any
|
|
91
|
+
|
|
92
|
+
if (result.errorID !== undefined) {
|
|
93
|
+
return {
|
|
94
|
+
value: v as any,
|
|
95
|
+
errors: [result]
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return {
|
|
100
|
+
value: v as any,
|
|
101
|
+
errors: result.length !== 0 ? result : undefined
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
File without changes
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
|
+
export namespace ModelsInternals {
|
|
2
3
|
export function hasValue<T>(value: T | undefined | null): value is T {
|
|
3
4
|
if (value === null)
|
|
4
5
|
return false
|
|
@@ -17,7 +18,7 @@ export namespace Internals {
|
|
|
17
18
|
|
|
18
19
|
// Objeto => param: { ... }
|
|
19
20
|
if (t.length === undefined) {
|
|
20
|
-
if (!
|
|
21
|
+
if (!ModelsInternals.hasValue(value[param])) {
|
|
21
22
|
value[param] = Object.create(null)
|
|
22
23
|
}
|
|
23
24
|
|
|
@@ -27,7 +28,7 @@ export namespace Internals {
|
|
|
27
28
|
|
|
28
29
|
// Parametro => param: [ PlataModels.Required() ]
|
|
29
30
|
if (typeof t[0] === 'function') {
|
|
30
|
-
if (!
|
|
31
|
+
if (!ModelsInternals.hasValue(value[param])) {
|
|
31
32
|
value[param] = null
|
|
32
33
|
}
|
|
33
34
|
|
|
@@ -36,7 +37,7 @@ export namespace Internals {
|
|
|
36
37
|
|
|
37
38
|
// Array de valores => param: [[ PlataModels.Required() ]]
|
|
38
39
|
if (t[0].length !== undefined) {
|
|
39
|
-
if (!
|
|
40
|
+
if (!ModelsInternals.hasValue(value[param])) {
|
|
40
41
|
value[param] = []
|
|
41
42
|
}
|
|
42
43
|
|
|
@@ -48,7 +49,7 @@ export namespace Internals {
|
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
// Array de Objetos => param: [{ ... }]
|
|
51
|
-
if (!
|
|
52
|
+
if (!ModelsInternals.hasValue(value[param])) {
|
|
52
53
|
value[param] = []
|
|
53
54
|
|
|
54
55
|
continue
|
|
@@ -71,8 +72,29 @@ export namespace Internals {
|
|
|
71
72
|
|
|
72
73
|
return value as DeepWritable<Model.ExtractTemplateTypeNotValid<typeof template>>
|
|
73
74
|
}
|
|
74
|
-
|
|
75
|
-
export async function
|
|
75
|
+
|
|
76
|
+
export async function validateTemplateEnv(value: Record<string, string | undefined>, template: Model.TemplateEnv): PlataPromise<PlataError[]> {
|
|
77
|
+
const promises: Promise<Model.ValidateReturn>[] = []
|
|
78
|
+
|
|
79
|
+
for (const env in template) {
|
|
80
|
+
promises.push(Plata.FastPromise(() => validateParameter(
|
|
81
|
+
value[env] ?? null,
|
|
82
|
+
template[env],
|
|
83
|
+
env
|
|
84
|
+
)))
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return Promise.all(promises).then(
|
|
88
|
+
result => result.filter(Boolean),
|
|
89
|
+
err => ({
|
|
90
|
+
errorID: 'BPLMINVLTMEN001',
|
|
91
|
+
msg: `unexpected error while validating template for env`,
|
|
92
|
+
error: err
|
|
93
|
+
})
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export async function validateParameter(value: any, pipeline: readonly Model.PrimitiveValidationType[], name: string): Promise<Model.ValidateReturn> {
|
|
76
98
|
for (const validation of pipeline) {
|
|
77
99
|
const result = await validation(name, value)
|
|
78
100
|
|
|
@@ -87,7 +109,7 @@ export namespace Internals {
|
|
|
87
109
|
|
|
88
110
|
return null
|
|
89
111
|
}
|
|
90
|
-
|
|
112
|
+
|
|
91
113
|
export async function validateTemplate<Y extends Model.Template>(value: any, template: Y, name?: string): PlataPromise<PlataError[]> {
|
|
92
114
|
const promises: any[] = []
|
|
93
115
|
for (const param in template) {
|
|
@@ -151,109 +173,4 @@ export namespace Internals {
|
|
|
151
173
|
}
|
|
152
174
|
)
|
|
153
175
|
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
export class ModelTemplate<T extends Model.Template, C extends Model.Converters<T>> {
|
|
157
|
-
public readonly template: T
|
|
158
|
-
public readonly converters: C | {}
|
|
159
|
-
public readonly validations: Map<string, Model.ModelTemplateValidation<T>>
|
|
160
|
-
public readonly filters: Map<string, Model.ModelTemplateFilter<T>>
|
|
161
|
-
public readonly type: Model.ExtractTemplateType<T>
|
|
162
|
-
|
|
163
|
-
constructor(template: T, converters: C | {}) {
|
|
164
|
-
this.template = template
|
|
165
|
-
this.converters = converters
|
|
166
|
-
this.validations = new Map()
|
|
167
|
-
this.filters = new Map()
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
public addValidation(nome: string, callback: Model.ModelTemplateValidation<T>) {
|
|
171
|
-
this.validations.set(nome, callback)
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
public addFilter(nome: string, callback: Model.ModelTemplateFilter<T>) {
|
|
175
|
-
this.filters.set(nome, callback)
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
public convert: Model.ModelConvertFuntion<T, C> = (value, to) => {
|
|
179
|
-
const c: Model.ConvertFunction<T, any> | undefined = this.converters[to as string]
|
|
180
|
-
|
|
181
|
-
if (c === undefined)
|
|
182
|
-
return {
|
|
183
|
-
errorID: 'BPLM0002',
|
|
184
|
-
msg: 'Invalid Converter',
|
|
185
|
-
error: to
|
|
186
|
-
}
|
|
187
|
-
;
|
|
188
|
-
|
|
189
|
-
try {
|
|
190
|
-
return c(value)
|
|
191
|
-
} catch (e) {
|
|
192
|
-
return {
|
|
193
|
-
errorID: 'BPLM0003',
|
|
194
|
-
msg: 'Unexpected converter error',
|
|
195
|
-
error: e
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
public filter(value: any) {
|
|
201
|
-
let v = Internals.filterTemplate(value, this.template)
|
|
202
|
-
|
|
203
|
-
this.filters.forEach(f => {
|
|
204
|
-
v = f(v)
|
|
205
|
-
})
|
|
206
|
-
|
|
207
|
-
return v
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
public async validate(value: any): Promise<Model.ModelValidateReturn<T>> {
|
|
211
|
-
const v = this.filter(value)
|
|
212
|
-
const errors = await Internals.validateTemplate(v, this.template)
|
|
213
|
-
|
|
214
|
-
if (errors.errorID !== undefined) {
|
|
215
|
-
return {
|
|
216
|
-
value: v as any,
|
|
217
|
-
errors: [errors]
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
if (errors.length !== 0) {
|
|
222
|
-
return {
|
|
223
|
-
value: v as any,
|
|
224
|
-
errors
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
const promises: Promise<Model.ValidateReturn>[] = []
|
|
229
|
-
|
|
230
|
-
this.validations.forEach(validation => {
|
|
231
|
-
promises.push(validation(v as any))
|
|
232
|
-
})
|
|
233
|
-
|
|
234
|
-
const result: PlataResult<PlataError[]> = await Plata.FastPromise(() => Promise.all(promises)).then(
|
|
235
|
-
r => ([] as Model.ValidateReturn[]).concat(...r).filter(v => v !== null),
|
|
236
|
-
err => {
|
|
237
|
-
return {
|
|
238
|
-
errorID: 'BPLM0002',
|
|
239
|
-
msg: `unexpected error while validating model`,
|
|
240
|
-
error: err
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
) as any
|
|
244
|
-
|
|
245
|
-
if (result.errorID !== undefined) {
|
|
246
|
-
return {
|
|
247
|
-
value: v as any,
|
|
248
|
-
errors: [result]
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
return {
|
|
253
|
-
value: v as any,
|
|
254
|
-
errors: result.length !== 0 ? result : undefined
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
export * from './model-validations'
|
|
176
|
+
}
|
package/src/libs/sql.ts
CHANGED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { describe, it, before } from "node:test"
|
|
2
|
+
import assert from "node:assert"
|
|
3
|
+
import { loadRuntimeLibs } from "../bin/runtime/_setupRuntime"
|
|
4
|
+
import { PlataModels } from ".."
|
|
5
|
+
|
|
6
|
+
describe('PlataModels.env', () => {
|
|
7
|
+
const plataPromise = (async () => {
|
|
8
|
+
const g = global as any
|
|
9
|
+
|
|
10
|
+
g.Plata = await loadRuntimeLibs()
|
|
11
|
+
})()
|
|
12
|
+
|
|
13
|
+
before(async () => {
|
|
14
|
+
await plataPromise
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
const model = new PlataModels.ModelTemplateEnv({
|
|
18
|
+
ENV_enum: [ PlataModels.Enum([ 0, 1 ]) ],
|
|
19
|
+
ENV_decimal: [ PlataModels.Decimal(2,2) ],
|
|
20
|
+
ENV_intMin: [ PlataModels.Int(5) ],
|
|
21
|
+
ENV_intMax: [ PlataModels.Int(undefined, 5) ],
|
|
22
|
+
ENV_intRequired: [ PlataModels.Required(), PlataModels.Int() ],
|
|
23
|
+
ENV_smallDateTime: [ PlataModels.SmallDateTime() ],
|
|
24
|
+
ENV_varChar: [ PlataModels.VarChar(1) ],
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
const getOkayObj = () => ({
|
|
28
|
+
ENV_enum: `${0}`,
|
|
29
|
+
ENV_decimal: `${22.22}`,
|
|
30
|
+
ENV_intMin: `${5}`,
|
|
31
|
+
ENV_intMax: `${5}`,
|
|
32
|
+
ENV_intRequired: `${6}`,
|
|
33
|
+
ENV_smallDateTime: '2022-12-04',
|
|
34
|
+
ENV_varChar: '1',
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
const getNotOkayObj = () => ({
|
|
38
|
+
ENV_enum: `${2}`,
|
|
39
|
+
ENV_decimal: `${222.222}`,
|
|
40
|
+
ENV_intMin: `${4}`,
|
|
41
|
+
ENV_intMax: `${6}`,
|
|
42
|
+
ENV_smallDateTime: '2022-12--04',
|
|
43
|
+
ENV_varChar: '12',
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
it('Validations (Okay)', async () => {
|
|
47
|
+
const okayObj = getOkayObj()
|
|
48
|
+
|
|
49
|
+
const value = await model.validate(okayObj)
|
|
50
|
+
|
|
51
|
+
assert.strictEqual(value.errors, undefined)
|
|
52
|
+
assert.deepEqual(value.value, okayObj)
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
it('Validations (Not Okay)', async () => {
|
|
56
|
+
const notOkayObj = getNotOkayObj()
|
|
57
|
+
|
|
58
|
+
const value = await model.validate(notOkayObj)
|
|
59
|
+
|
|
60
|
+
assert.notStrictEqual(value.errors, undefined)
|
|
61
|
+
assert.strictEqual(
|
|
62
|
+
value.errors?.length,
|
|
63
|
+
Object.keys(model.template).length,
|
|
64
|
+
value.errors?.map(e => `${e.errorID} - ${e.msg}`).join('\n')
|
|
65
|
+
)
|
|
66
|
+
})
|
|
67
|
+
})
|
package/src/tests/model.test.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { describe, it } from "node:test"
|
|
1
|
+
import { describe, it, before } from "node:test"
|
|
2
2
|
import assert from "node:assert"
|
|
3
3
|
import { PlataModels } from ".."
|
|
4
4
|
import { loadRuntimeLibs } from "../bin/runtime/_setupRuntime"
|
|
@@ -9,6 +9,10 @@ describe('PlataModels', () => {
|
|
|
9
9
|
|
|
10
10
|
g.Plata = await loadRuntimeLibs()
|
|
11
11
|
})()
|
|
12
|
+
|
|
13
|
+
before(async () => {
|
|
14
|
+
await plataPromise
|
|
15
|
+
})
|
|
12
16
|
|
|
13
17
|
const modelStruct = new PlataModels.ModelTemplate({
|
|
14
18
|
param: [ PlataModels.Required(), PlataModels.Int() ],
|
|
@@ -85,7 +89,6 @@ describe('PlataModels', () => {
|
|
|
85
89
|
})
|
|
86
90
|
|
|
87
91
|
it('Validations (Okay)', async () => {
|
|
88
|
-
await plataPromise
|
|
89
92
|
const okayObj = modelStruct.convert({} as any, 'toValidationsOkay')
|
|
90
93
|
|
|
91
94
|
const { errors, value } = await modelValidations.validate(okayObj)
|
|
@@ -95,7 +98,6 @@ describe('PlataModels', () => {
|
|
|
95
98
|
})
|
|
96
99
|
|
|
97
100
|
it('Validations (Not Okay)', async () => {
|
|
98
|
-
await plataPromise
|
|
99
101
|
const notOkayObj = modelStruct.convert({} as any, 'toValidationsError')
|
|
100
102
|
|
|
101
103
|
const { errors, value } = await modelValidations.validate(notOkayObj)
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { describe, it, before } from "node:test"
|
|
2
|
+
import assert from "node:assert"
|
|
3
|
+
import { loadRuntimeLibs } from "../bin/runtime/_setupRuntime"
|
|
4
|
+
import { PlataModels } from ".."
|
|
5
|
+
|
|
6
|
+
describe('PlataModels.union', () => {
|
|
7
|
+
const plataPromise = (async () => {
|
|
8
|
+
const g = global as any
|
|
9
|
+
|
|
10
|
+
g.Plata = await loadRuntimeLibs()
|
|
11
|
+
})()
|
|
12
|
+
|
|
13
|
+
before(async () => {
|
|
14
|
+
await plataPromise
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
const modelTemplateEnv = new PlataModels.ModelTemplateEnv({
|
|
18
|
+
ENV_enum: [ PlataModels.Enum([ 0, 1 ]) ],
|
|
19
|
+
ENV_decimal: [ PlataModels.Decimal(2,2) ],
|
|
20
|
+
ENV_intMin: [ PlataModels.Int(5) ],
|
|
21
|
+
ENV_intMax: [ PlataModels.Int(undefined, 5) ],
|
|
22
|
+
ENV_intRequired: [ PlataModels.Required(), PlataModels.Int() ],
|
|
23
|
+
ENV_smallDateTime: [ PlataModels.SmallDateTime() ],
|
|
24
|
+
ENV_varChar: [ PlataModels.VarChar(1) ],
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
const modelTemplate = new PlataModels.ModelTemplate({
|
|
28
|
+
enum: [ PlataModels.Enum([ 0,1 ]) ],
|
|
29
|
+
stringDateTime: [ PlataModels.StringDateTime() ],
|
|
30
|
+
dateTime: [ PlataModels.DateTime() ],
|
|
31
|
+
decimal: [ PlataModels.Decimal(2,2) ],
|
|
32
|
+
intMin: [ PlataModels.Int(5) ],
|
|
33
|
+
intMax: [ PlataModels.Int(undefined, 5) ],
|
|
34
|
+
intRequired: [ PlataModels.Required(), PlataModels.Int() ],
|
|
35
|
+
smallDateTime: [ PlataModels.SmallDateTime() ],
|
|
36
|
+
telefone: [ PlataModels.Telefone() ],
|
|
37
|
+
telefoneDDI: [ PlataModels.TelefoneDDI() ],
|
|
38
|
+
varCharMin: [ PlataModels.VarChar(1, 1) ],
|
|
39
|
+
varChar: [ PlataModels.VarChar(1) ],
|
|
40
|
+
} as const, {})
|
|
41
|
+
|
|
42
|
+
const modelUnion = new PlataModels.ModelTemplateUnion({ key: 'key' }, {
|
|
43
|
+
modelTemplate,
|
|
44
|
+
modelTemplateEnv,
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
const getTemplateOkay = () => ({
|
|
48
|
+
key: 'modelTemplate',
|
|
49
|
+
enum: 0,
|
|
50
|
+
stringDateTime: '2022-12-04T02:06:22',
|
|
51
|
+
dateTime: new Date(),
|
|
52
|
+
decimal: 99.99,
|
|
53
|
+
intMin: 5,
|
|
54
|
+
intMax: 5,
|
|
55
|
+
intRequired: 1,
|
|
56
|
+
smallDateTime: '2022-12-04',
|
|
57
|
+
telefone: '99-999999999',
|
|
58
|
+
telefoneDDI: '+055 99-999999999',
|
|
59
|
+
varCharMin: '1',
|
|
60
|
+
varChar: '1',
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
const getTemplateNotOkay = () => ({
|
|
64
|
+
key: 'modelTemplate',
|
|
65
|
+
enum: 2,
|
|
66
|
+
stringDateTime: '',
|
|
67
|
+
dateTime: '',
|
|
68
|
+
decimal: 5.666666666666,
|
|
69
|
+
intMin: 1,
|
|
70
|
+
intMax: 6,
|
|
71
|
+
intRequired: null,
|
|
72
|
+
smallDateTime: '',
|
|
73
|
+
telefone: '',
|
|
74
|
+
telefoneDDI: '',
|
|
75
|
+
varCharMin: '',
|
|
76
|
+
varChar: '11',
|
|
77
|
+
}) as any // Forced just for test
|
|
78
|
+
|
|
79
|
+
const getEnvOkay = () => ({
|
|
80
|
+
key: 'modelTemplateEnv',
|
|
81
|
+
ENV_enum: `${0}`,
|
|
82
|
+
ENV_decimal: `${22.22}`,
|
|
83
|
+
ENV_intMin: `${5}`,
|
|
84
|
+
ENV_intMax: `${5}`,
|
|
85
|
+
ENV_intRequired: `${6}`,
|
|
86
|
+
ENV_smallDateTime: '2022-12-04',
|
|
87
|
+
ENV_varChar: '1',
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
const getEnvNotOkay = () => ({
|
|
91
|
+
key: 'modelTemplateEnv',
|
|
92
|
+
ENV_enum: `${2}`,
|
|
93
|
+
ENV_decimal: `${222.222}`,
|
|
94
|
+
ENV_intMin: `${4}`,
|
|
95
|
+
ENV_intMax: `${6}`,
|
|
96
|
+
ENV_smallDateTime: '2022-12--04',
|
|
97
|
+
ENV_varChar: '12',
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
it('Validations Env (Okay)', async () => {
|
|
101
|
+
const okayObj = getEnvOkay()
|
|
102
|
+
|
|
103
|
+
const value = await modelUnion.validate(okayObj)
|
|
104
|
+
|
|
105
|
+
assert.strictEqual(value.errors, undefined)
|
|
106
|
+
|
|
107
|
+
const type: { key: 'modelTemplateEnv' | 'modelTemplate'} = value.value
|
|
108
|
+
|
|
109
|
+
assert.deepEqual(value.value, okayObj)
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
it('Validations Template (Okay)', async () => {
|
|
113
|
+
const okayObj = getTemplateOkay()
|
|
114
|
+
|
|
115
|
+
const value = await modelUnion.validate(okayObj)
|
|
116
|
+
|
|
117
|
+
assert.strictEqual(value.errors, undefined)
|
|
118
|
+
|
|
119
|
+
const type: { key: 'modelTemplateEnv' | 'modelTemplate'} = value.value
|
|
120
|
+
|
|
121
|
+
assert.deepEqual(value.value, okayObj)
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
it('Validations Env (Not Okay)', async () => {
|
|
125
|
+
const notOkayObj = getEnvNotOkay()
|
|
126
|
+
|
|
127
|
+
const value = await modelUnion.validate(notOkayObj)
|
|
128
|
+
|
|
129
|
+
assert.notStrictEqual(value.errors, undefined)
|
|
130
|
+
assert.strictEqual(
|
|
131
|
+
value.errors?.length,
|
|
132
|
+
Object.keys(modelTemplateEnv.template).length,
|
|
133
|
+
value.errors?.map(e => `${e.errorID} - ${e.msg}`).join('\n')
|
|
134
|
+
)
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
it('Validations Template (Not Okay)', async () => {
|
|
138
|
+
const notOkayObj = getTemplateNotOkay()
|
|
139
|
+
|
|
140
|
+
const value = await modelUnion.validate(notOkayObj)
|
|
141
|
+
|
|
142
|
+
assert.notStrictEqual(value.errors, undefined)
|
|
143
|
+
assert.strictEqual(
|
|
144
|
+
value.errors?.length,
|
|
145
|
+
Object.keys(modelTemplate.template).length,
|
|
146
|
+
value.errors?.map(e => `${e.errorID} - ${e.msg}`).join('\n')
|
|
147
|
+
)
|
|
148
|
+
})
|
|
149
|
+
})
|
package/src/tests/sql.test.ts
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-validations.js","sourceRoot":"","sources":["../../src/libs/model-validations.ts"],"names":[],"mappings":"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"}
|