@decaf-ts/as-zod 0.0.3
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.md +21 -0
- package/README.md +84 -0
- package/dist/as-zod.cjs +141 -0
- package/dist/as-zod.esm.cjs +135 -0
- package/lib/esm/index.d.ts +9 -0
- package/lib/esm/index.js +10 -0
- package/lib/esm/model.d.ts +6 -0
- package/lib/esm/model.js +2 -0
- package/lib/esm/overrides.d.ts +3 -0
- package/lib/esm/overrides.js +125 -0
- package/lib/index.cjs +27 -0
- package/lib/index.d.ts +9 -0
- package/lib/model.cjs +3 -0
- package/lib/model.d.ts +6 -0
- package/lib/overrides.cjs +129 -0
- package/lib/overrides.d.ts +3 -0
- package/package.json +118 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Tiago Venceslau
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
[](https://decaf-ts.github.io/ts-workspace/)
|
|
2
|
+
|
|
3
|
+
## Decaf-ts as Zod module
|
|
4
|
+
|
|
5
|
+
Small addon to enable two-way convertion between Models and Zod
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+

|
|
9
|
+

|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
[](https://github.com/decaf-ts/ts-workspace/actions/workflows/nodejs-build-prod.yaml)
|
|
13
|
+
[](https://github.com/decaf-ts/ts-workspace/actions/workflows/codeql-analysis.yml)[](https://github.com/decaf-ts/ts-workspace/actions/workflows/snyk-analysis.yaml)
|
|
14
|
+
[](https://github.com/decaf-ts/ts-workspace/actions/workflows/pages.yaml)
|
|
15
|
+
[](https://github.com/decaf-ts/ts-workspace/actions/workflows/release-on-tag.yaml)
|
|
16
|
+
|
|
17
|
+

|
|
18
|
+

|
|
19
|
+

|
|
20
|
+

|
|
21
|
+
|
|
22
|
+

|
|
23
|
+

|
|
24
|
+

|
|
25
|
+
|
|
26
|
+

|
|
27
|
+

|
|
28
|
+
|
|
29
|
+
Documentation available [here](https://decaf-ts.github.io/as-zod/)
|
|
30
|
+
|
|
31
|
+
### Description
|
|
32
|
+
|
|
33
|
+
Easy two-way conversion from Models to Zod
|
|
34
|
+
|
|
35
|
+
### How to Use
|
|
36
|
+
|
|
37
|
+
- [Initial Setup](./tutorials/For%20Developers.md#_initial-setup_)
|
|
38
|
+
- [Installation](./tutorials/For%20Developers.md#installation)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
### Related
|
|
44
|
+
|
|
45
|
+
[](https://github.com/decaf-ts/decorator-validation)
|
|
46
|
+
|
|
47
|
+
[](https://github.com/decaf-ts/decaf-ts)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
### Social
|
|
51
|
+
|
|
52
|
+
[](https://www.linkedin.com/in/decaf-ts/)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
#### Languages
|
|
58
|
+
|
|
59
|
+

|
|
60
|
+

|
|
61
|
+

|
|
62
|
+

|
|
63
|
+
|
|
64
|
+
## Getting help
|
|
65
|
+
|
|
66
|
+
If you have bug reports, questions or suggestions please [create a new issue](https://github.com/decaf-ts/ts-workspace/issues/new/choose).
|
|
67
|
+
|
|
68
|
+
## Contributing
|
|
69
|
+
|
|
70
|
+
I am grateful for any contributions made to this project. Please read [this](./workdocs/98-Contributing.md) to get started.
|
|
71
|
+
|
|
72
|
+
## Supporting
|
|
73
|
+
|
|
74
|
+
The first and easiest way you can support it is by [Contributing](./workdocs/98-Contributing.md). Even just finding a typo in the documentation is important.
|
|
75
|
+
|
|
76
|
+
Financial support is always welcome and helps keep both me and the project alive and healthy.
|
|
77
|
+
|
|
78
|
+
So if you can, if this project in any way. either by learning something or simply by helping you save precious time, please consider donating.
|
|
79
|
+
|
|
80
|
+
## License
|
|
81
|
+
|
|
82
|
+
This project is released under the [MIT License](./LICENSE.md).
|
|
83
|
+
|
|
84
|
+
By developers, for developers...
|
package/dist/as-zod.cjs
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
(function (global, factory) {
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@decaf-ts/decorator-validation'), require('zod'), require('@decaf-ts/reflection')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports', '@decaf-ts/decorator-validation', 'zod', '@decaf-ts/reflection'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["as-zod"] = {}, global.decoratorValidation, global.zod, global.reflection));
|
|
5
|
+
})(this, (function (exports, decoratorValidation, zod, reflection) { 'use strict';
|
|
6
|
+
|
|
7
|
+
const ReservedKeys = [
|
|
8
|
+
decoratorValidation.ValidationKeys.REQUIRED,
|
|
9
|
+
decoratorValidation.ValidationKeys.TYPE,
|
|
10
|
+
decoratorValidation.ModelKeys.TYPE,
|
|
11
|
+
];
|
|
12
|
+
function isReservedKey(el) {
|
|
13
|
+
return ReservedKeys.includes(el);
|
|
14
|
+
}
|
|
15
|
+
function zodify(type, zz = zod.ZodAny) {
|
|
16
|
+
type = typeof type === "string" ? [type] : type;
|
|
17
|
+
function innerZodify(type) {
|
|
18
|
+
switch (type.toLowerCase()) {
|
|
19
|
+
case decoratorValidation.Primitives.STRING:
|
|
20
|
+
return zod.z.string();
|
|
21
|
+
case decoratorValidation.Primitives.NUMBER:
|
|
22
|
+
return zod.z.number();
|
|
23
|
+
case decoratorValidation.Primitives.BIGINT:
|
|
24
|
+
return zod.z.bigint();
|
|
25
|
+
case decoratorValidation.Primitives.BOOLEAN:
|
|
26
|
+
return zod.z.boolean();
|
|
27
|
+
case decoratorValidation.ValidationKeys.DATE:
|
|
28
|
+
return zod.z.date();
|
|
29
|
+
case Array.name.toLowerCase():
|
|
30
|
+
return zod.z.array(zz);
|
|
31
|
+
case Set.name.toLowerCase():
|
|
32
|
+
return zod.z.set(zz);
|
|
33
|
+
default: {
|
|
34
|
+
const m = decoratorValidation.Model.get(type);
|
|
35
|
+
if (!m) {
|
|
36
|
+
throw new Error(`Unzodifiable type: ${type}`);
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const zz = new m().toZod();
|
|
40
|
+
return zz;
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
throw new Error(`Failed to zodify model ${type}: ${e}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
let zod$1;
|
|
49
|
+
for (const t of type) {
|
|
50
|
+
zod$1 = zod$1 ? zod$1.or(innerZodify(t)) : innerZodify(t);
|
|
51
|
+
}
|
|
52
|
+
return zod$1;
|
|
53
|
+
}
|
|
54
|
+
function zodifyValidation(zod, type, values) {
|
|
55
|
+
switch (type) {
|
|
56
|
+
case decoratorValidation.ValidationKeys.MIN:
|
|
57
|
+
return zod.min(values[decoratorValidation.ValidationKeys.MIN]);
|
|
58
|
+
case decoratorValidation.ValidationKeys.MIN_LENGTH:
|
|
59
|
+
return zod.min(values[decoratorValidation.ValidationKeys.MIN_LENGTH]);
|
|
60
|
+
case decoratorValidation.ValidationKeys.MAX:
|
|
61
|
+
return zod.max(values[decoratorValidation.ValidationKeys.MAX]);
|
|
62
|
+
case decoratorValidation.ValidationKeys.MAX_LENGTH:
|
|
63
|
+
return zod.max(values[decoratorValidation.ValidationKeys.MAX_LENGTH]);
|
|
64
|
+
case decoratorValidation.ValidationKeys.STEP:
|
|
65
|
+
return zod.multipleOf(values[decoratorValidation.ValidationKeys.STEP]);
|
|
66
|
+
case decoratorValidation.ValidationKeys.PATTERN:
|
|
67
|
+
return zod.regex(values[decoratorValidation.ValidationKeys.PATTERN]);
|
|
68
|
+
case decoratorValidation.ValidationKeys.URL:
|
|
69
|
+
return zod.regex(values[decoratorValidation.ValidationKeys.PATTERN]);
|
|
70
|
+
case decoratorValidation.ValidationKeys.EMAIL:
|
|
71
|
+
return zod.regex(values[decoratorValidation.ValidationKeys.PATTERN]);
|
|
72
|
+
case decoratorValidation.ValidationKeys.PASSWORD:
|
|
73
|
+
return zod.regex(values[decoratorValidation.ValidationKeys.PATTERN]);
|
|
74
|
+
case decoratorValidation.ValidationKeys.DATE:
|
|
75
|
+
return zod.date();
|
|
76
|
+
default:
|
|
77
|
+
return zod;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
decoratorValidation.Model.prototype.toZod = function () {
|
|
81
|
+
const result = {};
|
|
82
|
+
const properties = Object.getOwnPropertyNames(this);
|
|
83
|
+
if (Array.isArray(properties) && !properties.length)
|
|
84
|
+
return zod.z.object({});
|
|
85
|
+
for (const prop of Object.getOwnPropertyNames(this)) {
|
|
86
|
+
if (typeof this[prop] === "function" ||
|
|
87
|
+
prop.startsWith("_") ||
|
|
88
|
+
prop === "constructor") {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const allDecs = reflection.Reflection.getPropertyDecorators(decoratorValidation.ValidationKeys.REFLECT, this, prop, false, true);
|
|
92
|
+
const decoratorData = allDecs.decorators.reduce((accum, el) => {
|
|
93
|
+
const { key, props } = el;
|
|
94
|
+
if (key === decoratorValidation.ModelKeys.TYPE && !accum[decoratorValidation.ValidationKeys.TYPE]) {
|
|
95
|
+
accum[decoratorValidation.ValidationKeys.TYPE] = {
|
|
96
|
+
customTypes: [props.name],
|
|
97
|
+
message: decoratorValidation.DEFAULT_ERROR_MESSAGES.TYPE,
|
|
98
|
+
description: "defines the accepted types for the attribute",
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
accum[key] = props;
|
|
103
|
+
}
|
|
104
|
+
return accum;
|
|
105
|
+
}, {});
|
|
106
|
+
if (!Object.keys(decoratorData).length) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
let zod$1 = zod.ZodAny;
|
|
110
|
+
const typeData = decoratorData[decoratorValidation.ValidationKeys.TYPE];
|
|
111
|
+
if (!typeData) {
|
|
112
|
+
throw new Error(`Missing type information`);
|
|
113
|
+
}
|
|
114
|
+
zod$1 = zodify(typeData.customTypes, decoratorData[decoratorValidation.ValidationKeys.LIST]
|
|
115
|
+
? zodify(decoratorData[decoratorValidation.ValidationKeys.LIST].clazz)
|
|
116
|
+
: zod.ZodAny);
|
|
117
|
+
for (const [key, props] of Object.entries(decoratorData).filter(([k]) => !isReservedKey(k))) {
|
|
118
|
+
zod$1 = zodifyValidation(zod$1, key, props);
|
|
119
|
+
}
|
|
120
|
+
if (!decoratorData[decoratorValidation.ValidationKeys.REQUIRED]) {
|
|
121
|
+
zod$1 = zod$1.optional();
|
|
122
|
+
}
|
|
123
|
+
result[prop] = zod$1;
|
|
124
|
+
}
|
|
125
|
+
return zod.z.object(result);
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* @description Current version of the reflection package
|
|
130
|
+
* @summary Stores the semantic version number of the package
|
|
131
|
+
* @const VERSION
|
|
132
|
+
* @memberOf module:as-zod
|
|
133
|
+
*/
|
|
134
|
+
const VERSION = "0.0.2";
|
|
135
|
+
|
|
136
|
+
exports.VERSION = VERSION;
|
|
137
|
+
exports.zodify = zodify;
|
|
138
|
+
exports.zodifyValidation = zodifyValidation;
|
|
139
|
+
|
|
140
|
+
}));
|
|
141
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXMtem9kLmNqcyIsInNvdXJjZXMiOlsiLi4vc3JjL292ZXJyaWRlcy50cyIsIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBNb2RlbCxcbiAgTW9kZWxLZXlzLFxuICBUeXBlTWV0YWRhdGEsXG4gIFByaW1pdGl2ZXMsXG4gIERFRkFVTFRfRVJST1JfTUVTU0FHRVMsXG4gIFZhbGlkYXRvck9wdGlvbnMsXG4gIE1pbkxlbmd0aFZhbGlkYXRvck9wdGlvbnMsXG4gIE1pblZhbGlkYXRvck9wdGlvbnMsXG4gIE1heFZhbGlkYXRvck9wdGlvbnMsXG4gIE1heExlbmd0aFZhbGlkYXRvck9wdGlvbnMsXG4gIFN0ZXBWYWxpZGF0b3JPcHRpb25zLFxuICBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9ucyxcbiAgTGlzdE1ldGFkYXRhLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyB6LCBab2RBbnksIFpvZE9iamVjdCwgWm9kUmF3U2hhcGUgfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBSZWZsZWN0aW9uIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuY29uc3QgUmVzZXJ2ZWRLZXlzID0gW1xuICBWYWxpZGF0aW9uS2V5cy5SRVFVSVJFRCxcbiAgVmFsaWRhdGlvbktleXMuVFlQRSxcbiAgTW9kZWxLZXlzLlRZUEUsXG5dIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBpc1Jlc2VydmVkS2V5KGVsOiBzdHJpbmcpIHtcbiAgcmV0dXJuIFJlc2VydmVkS2V5cy5pbmNsdWRlcyhlbCBhcyBhbnkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gem9kaWZ5KHR5cGU6IHN0cmluZyB8IHN0cmluZ1tdLCB6ejogYW55ID0gWm9kQW55KSB7XG4gIHR5cGUgPSB0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiA/IFt0eXBlXSA6IHR5cGU7XG5cbiAgZnVuY3Rpb24gaW5uZXJab2RpZnkodHlwZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh0eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgUHJpbWl0aXZlcy5TVFJJTkc6XG4gICAgICAgIHJldHVybiB6LnN0cmluZygpO1xuICAgICAgY2FzZSBQcmltaXRpdmVzLk5VTUJFUjpcbiAgICAgICAgcmV0dXJuIHoubnVtYmVyKCk7XG4gICAgICBjYXNlIFByaW1pdGl2ZXMuQklHSU5UOlxuICAgICAgICByZXR1cm4gei5iaWdpbnQoKTtcbiAgICAgIGNhc2UgUHJpbWl0aXZlcy5CT09MRUFOOlxuICAgICAgICByZXR1cm4gei5ib29sZWFuKCk7XG4gICAgICBjYXNlIFZhbGlkYXRpb25LZXlzLkRBVEU6XG4gICAgICAgIHJldHVybiB6LmRhdGUoKTtcbiAgICAgIGNhc2UgQXJyYXkubmFtZS50b0xvd2VyQ2FzZSgpOlxuICAgICAgICByZXR1cm4gei5hcnJheSh6eik7XG4gICAgICBjYXNlIFNldC5uYW1lLnRvTG93ZXJDYXNlKCk6XG4gICAgICAgIHJldHVybiB6LnNldCh6eik7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IG0gPSBNb2RlbC5nZXQodHlwZSk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW56b2RpZmlhYmxlIHR5cGU6ICR7dHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHp6ID0gbmV3IG0oKS50b1pvZCgpO1xuICAgICAgICAgIHJldHVybiB6ejtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHpvZGlmeSBtb2RlbCAke3R5cGV9OiAke2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgem9kOiBhbnk7XG4gIGZvciAoY29uc3QgdCBvZiB0eXBlKSB7XG4gICAgem9kID0gem9kID8gem9kLm9yKGlubmVyWm9kaWZ5KHQpKSA6IGlubmVyWm9kaWZ5KHQpO1xuICB9XG5cbiAgcmV0dXJuIHpvZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHpvZGlmeVZhbGlkYXRpb24oXG4gIHpvZDogYW55LFxuICB0eXBlOiBzdHJpbmcsXG4gIHZhbHVlczogVmFsaWRhdG9yT3B0aW9uc1xuKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgVmFsaWRhdGlvbktleXMuTUlOOlxuICAgICAgcmV0dXJuIHpvZC5taW4oKHZhbHVlcyBhcyBNaW5WYWxpZGF0b3JPcHRpb25zKVtWYWxpZGF0aW9uS2V5cy5NSU5dKTtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLk1JTl9MRU5HVEg6XG4gICAgICByZXR1cm4gem9kLm1pbihcbiAgICAgICAgKHZhbHVlcyBhcyBNaW5MZW5ndGhWYWxpZGF0b3JPcHRpb25zKVtWYWxpZGF0aW9uS2V5cy5NSU5fTEVOR1RIXVxuICAgICAgKTtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLk1BWDpcbiAgICAgIHJldHVybiB6b2QubWF4KCh2YWx1ZXMgYXMgTWF4VmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuTUFYXSk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5NQVhfTEVOR1RIOlxuICAgICAgcmV0dXJuIHpvZC5tYXgoXG4gICAgICAgICh2YWx1ZXMgYXMgTWF4TGVuZ3RoVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuTUFYX0xFTkdUSF1cbiAgICAgICk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5TVEVQOlxuICAgICAgcmV0dXJuIHpvZC5tdWx0aXBsZU9mKFxuICAgICAgICAodmFsdWVzIGFzIFN0ZXBWYWxpZGF0b3JPcHRpb25zKVtWYWxpZGF0aW9uS2V5cy5TVEVQXVxuICAgICAgKTtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLlBBVFRFUk46XG4gICAgICByZXR1cm4gem9kLnJlZ2V4KFxuICAgICAgICAodmFsdWVzIGFzIFBhdHRlcm5WYWxpZGF0b3JPcHRpb25zKVtWYWxpZGF0aW9uS2V5cy5QQVRURVJOXVxuICAgICAgKTtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLlVSTDpcbiAgICAgIHJldHVybiB6b2QucmVnZXgoXG4gICAgICAgICh2YWx1ZXMgYXMgUGF0dGVyblZhbGlkYXRvck9wdGlvbnMpW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dXG4gICAgICApO1xuICAgIGNhc2UgVmFsaWRhdGlvbktleXMuRU1BSUw6XG4gICAgICByZXR1cm4gem9kLnJlZ2V4KFxuICAgICAgICAodmFsdWVzIGFzIFBhdHRlcm5WYWxpZGF0b3JPcHRpb25zKVtWYWxpZGF0aW9uS2V5cy5QQVRURVJOXVxuICAgICAgKTtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLlBBU1NXT1JEOlxuICAgICAgcmV0dXJuIHpvZC5yZWdleChcbiAgICAgICAgKHZhbHVlcyBhcyBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuUEFUVEVSTl1cbiAgICAgICk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5EQVRFOlxuICAgICAgcmV0dXJuIHpvZC5kYXRlKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB6b2Q7XG4gIH1cbn1cblxuTW9kZWwucHJvdG90eXBlLnRvWm9kID0gZnVuY3Rpb24gPE0gZXh0ZW5kcyBNb2RlbD4odGhpczogTSk6IFpvZE9iamVjdDxhbnk+IHtcbiAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IFpvZFJhd1NoYXBlIH0gPSB7fTtcblxuICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnRpZXMpICYmICFwcm9wZXJ0aWVzLmxlbmd0aCkgcmV0dXJuIHoub2JqZWN0KHt9KTtcbiAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mICh0aGlzIGFzIGFueSlbcHJvcF0gPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgcHJvcC5zdGFydHNXaXRoKFwiX1wiKSB8fFxuICAgICAgcHJvcCA9PT0gXCJjb25zdHJ1Y3RvclwiXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxEZWNzID0gUmVmbGVjdGlvbi5nZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNULFxuICAgICAgdGhpcyxcbiAgICAgIHByb3AsXG4gICAgICBmYWxzZSxcbiAgICAgIHRydWVcbiAgICApO1xuXG4gICAgY29uc3QgZGVjb3JhdG9yRGF0YSA9IGFsbERlY3MuZGVjb3JhdG9ycy5yZWR1Y2UoXG4gICAgICAoYWNjdW06IFJlY29yZDxzdHJpbmcsIGFueT4sIGVsKSA9PiB7XG4gICAgICAgIGNvbnN0IHsga2V5LCBwcm9wcyB9ID0gZWw7XG4gICAgICAgIGlmIChrZXkgPT09IE1vZGVsS2V5cy5UWVBFICYmICFhY2N1bVtWYWxpZGF0aW9uS2V5cy5UWVBFXSkge1xuICAgICAgICAgIGFjY3VtW1ZhbGlkYXRpb25LZXlzLlRZUEVdID0ge1xuICAgICAgICAgICAgY3VzdG9tVHlwZXM6IFtwcm9wcy5uYW1lIGFzIHN0cmluZ10sXG4gICAgICAgICAgICBtZXNzYWdlOiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlRZUEUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJkZWZpbmVzIHRoZSBhY2NlcHRlZCB0eXBlcyBmb3IgdGhlIGF0dHJpYnV0ZVwiLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjdW1ba2V5XSA9IHByb3BzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG5cbiAgICBpZiAoIU9iamVjdC5rZXlzKGRlY29yYXRvckRhdGEpLmxlbmd0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IHpvZDogYW55ID0gWm9kQW55O1xuXG4gICAgY29uc3QgdHlwZURhdGE6IFR5cGVNZXRhZGF0YSA9IGRlY29yYXRvckRhdGFbXG4gICAgICBWYWxpZGF0aW9uS2V5cy5UWVBFXG4gICAgXSBhcyBUeXBlTWV0YWRhdGE7XG5cbiAgICBpZiAoIXR5cGVEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgdHlwZSBpbmZvcm1hdGlvbmApO1xuICAgIH1cblxuICAgIHpvZCA9IHpvZGlmeShcbiAgICAgIHR5cGVEYXRhLmN1c3RvbVR5cGVzLFxuICAgICAgZGVjb3JhdG9yRGF0YVtWYWxpZGF0aW9uS2V5cy5MSVNUXVxuICAgICAgICA/IHpvZGlmeSgoZGVjb3JhdG9yRGF0YVtWYWxpZGF0aW9uS2V5cy5MSVNUXSBhcyBMaXN0TWV0YWRhdGEpLmNsYXp6KVxuICAgICAgICA6IFpvZEFueVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHByb3BzXSBvZiBPYmplY3QuZW50cmllcyhkZWNvcmF0b3JEYXRhKS5maWx0ZXIoXG4gICAgICAoW2tdKSA9PiAhaXNSZXNlcnZlZEtleShrKVxuICAgICkpIHtcbiAgICAgIHpvZCA9IHpvZGlmeVZhbGlkYXRpb24oem9kLCBrZXksIHByb3BzKTtcbiAgICB9XG5cbiAgICBpZiAoIWRlY29yYXRvckRhdGFbVmFsaWRhdGlvbktleXMuUkVRVUlSRURdKSB7XG4gICAgICB6b2QgPSB6b2Qub3B0aW9uYWwoKTtcbiAgICB9XG5cbiAgICByZXN1bHRbcHJvcF0gPSB6b2Q7XG4gIH1cblxuICByZXR1cm4gei5vYmplY3QocmVzdWx0KTtcbn07XG4iLCJleHBvcnQgKiBmcm9tIFwiLi9tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3ZlcnJpZGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgcmVmbGVjdGlvbiBwYWNrYWdlXG4gKiBAc3VtbWFyeSBTdG9yZXMgdGhlIHNlbWFudGljIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBwYWNrYWdlXG4gKiBAY29uc3QgVkVSU0lPTlxuICogQG1lbWJlck9mIG1vZHVsZTphcy16b2RcbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIiMjVkVSU0lPTiMjXCI7XG4iXSwibmFtZXMiOlsiVmFsaWRhdGlvbktleXMiLCJNb2RlbEtleXMiLCJab2RBbnkiLCJQcmltaXRpdmVzIiwieiIsIk1vZGVsIiwiem9kIiwiUmVmbGVjdGlvbiIsIkRFRkFVTFRfRVJST1JfTUVTU0FHRVMiXSwibWFwcGluZ3MiOiI7Ozs7OztJQW1CQSxNQUFNLFlBQVksR0FBRztJQUNuQixJQUFBQSxrQ0FBYyxDQUFDLFFBQVE7SUFDdkIsSUFBQUEsa0NBQWMsQ0FBQyxJQUFJO0lBQ25CLElBQUFDLDZCQUFTLENBQUMsSUFBSTtLQUNOO0lBRVYsU0FBUyxhQUFhLENBQUMsRUFBVSxFQUFBO0lBQy9CLElBQUEsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQVMsQ0FBQztJQUN6QzthQUVnQixNQUFNLENBQUMsSUFBdUIsRUFBRSxLQUFVQyxVQUFNLEVBQUE7SUFDOUQsSUFBQSxJQUFJLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSTtRQUUvQyxTQUFTLFdBQVcsQ0FBQyxJQUFZLEVBQUE7SUFDL0IsUUFBQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3hCLEtBQUtDLDhCQUFVLENBQUMsTUFBTTtJQUNwQixnQkFBQSxPQUFPQyxLQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNuQixLQUFLRCw4QkFBVSxDQUFDLE1BQU07SUFDcEIsZ0JBQUEsT0FBT0MsS0FBQyxDQUFDLE1BQU0sRUFBRTtnQkFDbkIsS0FBS0QsOEJBQVUsQ0FBQyxNQUFNO0lBQ3BCLGdCQUFBLE9B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
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { ValidationKeys, ModelKeys, Model, DEFAULT_ERROR_MESSAGES, Primitives } from '@decaf-ts/decorator-validation';
|
|
2
|
+
import { z, ZodAny } from 'zod';
|
|
3
|
+
import { Reflection } from '@decaf-ts/reflection';
|
|
4
|
+
|
|
5
|
+
const ReservedKeys = [
|
|
6
|
+
ValidationKeys.REQUIRED,
|
|
7
|
+
ValidationKeys.TYPE,
|
|
8
|
+
ModelKeys.TYPE,
|
|
9
|
+
];
|
|
10
|
+
function isReservedKey(el) {
|
|
11
|
+
return ReservedKeys.includes(el);
|
|
12
|
+
}
|
|
13
|
+
function zodify(type, zz = ZodAny) {
|
|
14
|
+
type = typeof type === "string" ? [type] : type;
|
|
15
|
+
function innerZodify(type) {
|
|
16
|
+
switch (type.toLowerCase()) {
|
|
17
|
+
case Primitives.STRING:
|
|
18
|
+
return z.string();
|
|
19
|
+
case Primitives.NUMBER:
|
|
20
|
+
return z.number();
|
|
21
|
+
case Primitives.BIGINT:
|
|
22
|
+
return z.bigint();
|
|
23
|
+
case Primitives.BOOLEAN:
|
|
24
|
+
return z.boolean();
|
|
25
|
+
case ValidationKeys.DATE:
|
|
26
|
+
return z.date();
|
|
27
|
+
case Array.name.toLowerCase():
|
|
28
|
+
return z.array(zz);
|
|
29
|
+
case Set.name.toLowerCase():
|
|
30
|
+
return z.set(zz);
|
|
31
|
+
default: {
|
|
32
|
+
const m = Model.get(type);
|
|
33
|
+
if (!m) {
|
|
34
|
+
throw new Error(`Unzodifiable type: ${type}`);
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const zz = new m().toZod();
|
|
38
|
+
return zz;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
throw new Error(`Failed to zodify model ${type}: ${e}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
let zod;
|
|
47
|
+
for (const t of type) {
|
|
48
|
+
zod = zod ? zod.or(innerZodify(t)) : innerZodify(t);
|
|
49
|
+
}
|
|
50
|
+
return zod;
|
|
51
|
+
}
|
|
52
|
+
function zodifyValidation(zod, type, values) {
|
|
53
|
+
switch (type) {
|
|
54
|
+
case ValidationKeys.MIN:
|
|
55
|
+
return zod.min(values[ValidationKeys.MIN]);
|
|
56
|
+
case ValidationKeys.MIN_LENGTH:
|
|
57
|
+
return zod.min(values[ValidationKeys.MIN_LENGTH]);
|
|
58
|
+
case ValidationKeys.MAX:
|
|
59
|
+
return zod.max(values[ValidationKeys.MAX]);
|
|
60
|
+
case ValidationKeys.MAX_LENGTH:
|
|
61
|
+
return zod.max(values[ValidationKeys.MAX_LENGTH]);
|
|
62
|
+
case ValidationKeys.STEP:
|
|
63
|
+
return zod.multipleOf(values[ValidationKeys.STEP]);
|
|
64
|
+
case ValidationKeys.PATTERN:
|
|
65
|
+
return zod.regex(values[ValidationKeys.PATTERN]);
|
|
66
|
+
case ValidationKeys.URL:
|
|
67
|
+
return zod.regex(values[ValidationKeys.PATTERN]);
|
|
68
|
+
case ValidationKeys.EMAIL:
|
|
69
|
+
return zod.regex(values[ValidationKeys.PATTERN]);
|
|
70
|
+
case ValidationKeys.PASSWORD:
|
|
71
|
+
return zod.regex(values[ValidationKeys.PATTERN]);
|
|
72
|
+
case ValidationKeys.DATE:
|
|
73
|
+
return zod.date();
|
|
74
|
+
default:
|
|
75
|
+
return zod;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
Model.prototype.toZod = function () {
|
|
79
|
+
const result = {};
|
|
80
|
+
const properties = Object.getOwnPropertyNames(this);
|
|
81
|
+
if (Array.isArray(properties) && !properties.length)
|
|
82
|
+
return z.object({});
|
|
83
|
+
for (const prop of Object.getOwnPropertyNames(this)) {
|
|
84
|
+
if (typeof this[prop] === "function" ||
|
|
85
|
+
prop.startsWith("_") ||
|
|
86
|
+
prop === "constructor") {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const allDecs = Reflection.getPropertyDecorators(ValidationKeys.REFLECT, this, prop, false, true);
|
|
90
|
+
const decoratorData = allDecs.decorators.reduce((accum, el) => {
|
|
91
|
+
const { key, props } = el;
|
|
92
|
+
if (key === ModelKeys.TYPE && !accum[ValidationKeys.TYPE]) {
|
|
93
|
+
accum[ValidationKeys.TYPE] = {
|
|
94
|
+
customTypes: [props.name],
|
|
95
|
+
message: DEFAULT_ERROR_MESSAGES.TYPE,
|
|
96
|
+
description: "defines the accepted types for the attribute",
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
accum[key] = props;
|
|
101
|
+
}
|
|
102
|
+
return accum;
|
|
103
|
+
}, {});
|
|
104
|
+
if (!Object.keys(decoratorData).length) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
let zod = ZodAny;
|
|
108
|
+
const typeData = decoratorData[ValidationKeys.TYPE];
|
|
109
|
+
if (!typeData) {
|
|
110
|
+
throw new Error(`Missing type information`);
|
|
111
|
+
}
|
|
112
|
+
zod = zodify(typeData.customTypes, decoratorData[ValidationKeys.LIST]
|
|
113
|
+
? zodify(decoratorData[ValidationKeys.LIST].clazz)
|
|
114
|
+
: ZodAny);
|
|
115
|
+
for (const [key, props] of Object.entries(decoratorData).filter(([k]) => !isReservedKey(k))) {
|
|
116
|
+
zod = zodifyValidation(zod, key, props);
|
|
117
|
+
}
|
|
118
|
+
if (!decoratorData[ValidationKeys.REQUIRED]) {
|
|
119
|
+
zod = zod.optional();
|
|
120
|
+
}
|
|
121
|
+
result[prop] = zod;
|
|
122
|
+
}
|
|
123
|
+
return z.object(result);
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @description Current version of the reflection package
|
|
128
|
+
* @summary Stores the semantic version number of the package
|
|
129
|
+
* @const VERSION
|
|
130
|
+
* @memberOf module:as-zod
|
|
131
|
+
*/
|
|
132
|
+
const VERSION = "0.0.2";
|
|
133
|
+
|
|
134
|
+
export { VERSION, zodify, zodifyValidation };
|
|
135
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXMtem9kLmVzbS5janMiLCJzb3VyY2VzIjpbIi4uL3NyYy9vdmVycmlkZXMudHMiLCIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTW9kZWwsXG4gIE1vZGVsS2V5cyxcbiAgVHlwZU1ldGFkYXRhLFxuICBQcmltaXRpdmVzLFxuICBERUZBVUxUX0VSUk9SX01FU1NBR0VTLFxuICBWYWxpZGF0b3JPcHRpb25zLFxuICBNaW5MZW5ndGhWYWxpZGF0b3JPcHRpb25zLFxuICBNaW5WYWxpZGF0b3JPcHRpb25zLFxuICBNYXhWYWxpZGF0b3JPcHRpb25zLFxuICBNYXhMZW5ndGhWYWxpZGF0b3JPcHRpb25zLFxuICBTdGVwVmFsaWRhdG9yT3B0aW9ucyxcbiAgUGF0dGVyblZhbGlkYXRvck9wdGlvbnMsXG4gIExpc3RNZXRhZGF0YSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgeiwgWm9kQW55LCBab2RPYmplY3QsIFpvZFJhd1NoYXBlIH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgUmVmbGVjdGlvbiB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbktleXMgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5cbmNvbnN0IFJlc2VydmVkS2V5cyA9IFtcbiAgVmFsaWRhdGlvbktleXMuUkVRVUlSRUQsXG4gIFZhbGlkYXRpb25LZXlzLlRZUEUsXG4gIE1vZGVsS2V5cy5UWVBFLFxuXSBhcyBjb25zdDtcblxuZnVuY3Rpb24gaXNSZXNlcnZlZEtleShlbDogc3RyaW5nKSB7XG4gIHJldHVybiBSZXNlcnZlZEtleXMuaW5jbHVkZXMoZWwgYXMgYW55KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHpvZGlmeSh0eXBlOiBzdHJpbmcgfCBzdHJpbmdbXSwgeno6IGFueSA9IFpvZEFueSkge1xuICB0eXBlID0gdHlwZW9mIHR5cGUgPT09IFwic3RyaW5nXCIgPyBbdHlwZV0gOiB0eXBlO1xuXG4gIGZ1bmN0aW9uIGlubmVyWm9kaWZ5KHR5cGU6IHN0cmluZykge1xuICAgIHN3aXRjaCAodHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlIFByaW1pdGl2ZXMuU1RSSU5HOlxuICAgICAgICByZXR1cm4gei5zdHJpbmcoKTtcbiAgICAgIGNhc2UgUHJpbWl0aXZlcy5OVU1CRVI6XG4gICAgICAgIHJldHVybiB6Lm51bWJlcigpO1xuICAgICAgY2FzZSBQcmltaXRpdmVzLkJJR0lOVDpcbiAgICAgICAgcmV0dXJuIHouYmlnaW50KCk7XG4gICAgICBjYXNlIFByaW1pdGl2ZXMuQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuIHouYm9vbGVhbigpO1xuICAgICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5EQVRFOlxuICAgICAgICByZXR1cm4gei5kYXRlKCk7XG4gICAgICBjYXNlIEFycmF5Lm5hbWUudG9Mb3dlckNhc2UoKTpcbiAgICAgICAgcmV0dXJuIHouYXJyYXkoenopO1xuICAgICAgY2FzZSBTZXQubmFtZS50b0xvd2VyQ2FzZSgpOlxuICAgICAgICByZXR1cm4gei5zZXQoenopO1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBtID0gTW9kZWwuZ2V0KHR5cGUpO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuem9kaWZpYWJsZSB0eXBlOiAke3R5cGV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB6eiA9IG5ldyBtKCkudG9ab2QoKTtcbiAgICAgICAgICByZXR1cm4geno7XG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byB6b2RpZnkgbW9kZWwgJHt0eXBlfTogJHtlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHpvZDogYW55O1xuICBmb3IgKGNvbnN0IHQgb2YgdHlwZSkge1xuICAgIHpvZCA9IHpvZCA/IHpvZC5vcihpbm5lclpvZGlmeSh0KSkgOiBpbm5lclpvZGlmeSh0KTtcbiAgfVxuXG4gIHJldHVybiB6b2Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB6b2RpZnlWYWxpZGF0aW9uKFxuICB6b2Q6IGFueSxcbiAgdHlwZTogc3RyaW5nLFxuICB2YWx1ZXM6IFZhbGlkYXRvck9wdGlvbnNcbikge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLk1JTjpcbiAgICAgIHJldHVybiB6b2QubWluKCh2YWx1ZXMgYXMgTWluVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuTUlOXSk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5NSU5fTEVOR1RIOlxuICAgICAgcmV0dXJuIHpvZC5taW4oXG4gICAgICAgICh2YWx1ZXMgYXMgTWluTGVuZ3RoVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuTUlOX0xFTkdUSF1cbiAgICAgICk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5NQVg6XG4gICAgICByZXR1cm4gem9kLm1heCgodmFsdWVzIGFzIE1heFZhbGlkYXRvck9wdGlvbnMpW1ZhbGlkYXRpb25LZXlzLk1BWF0pO1xuICAgIGNhc2UgVmFsaWRhdGlvbktleXMuTUFYX0xFTkdUSDpcbiAgICAgIHJldHVybiB6b2QubWF4KFxuICAgICAgICAodmFsdWVzIGFzIE1heExlbmd0aFZhbGlkYXRvck9wdGlvbnMpW1ZhbGlkYXRpb25LZXlzLk1BWF9MRU5HVEhdXG4gICAgICApO1xuICAgIGNhc2UgVmFsaWRhdGlvbktleXMuU1RFUDpcbiAgICAgIHJldHVybiB6b2QubXVsdGlwbGVPZihcbiAgICAgICAgKHZhbHVlcyBhcyBTdGVwVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuU1RFUF1cbiAgICAgICk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5QQVRURVJOOlxuICAgICAgcmV0dXJuIHpvZC5yZWdleChcbiAgICAgICAgKHZhbHVlcyBhcyBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuUEFUVEVSTl1cbiAgICAgICk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5VUkw6XG4gICAgICByZXR1cm4gem9kLnJlZ2V4KFxuICAgICAgICAodmFsdWVzIGFzIFBhdHRlcm5WYWxpZGF0b3JPcHRpb25zKVtWYWxpZGF0aW9uS2V5cy5QQVRURVJOXVxuICAgICAgKTtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLkVNQUlMOlxuICAgICAgcmV0dXJuIHpvZC5yZWdleChcbiAgICAgICAgKHZhbHVlcyBhcyBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuUEFUVEVSTl1cbiAgICAgICk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5QQVNTV09SRDpcbiAgICAgIHJldHVybiB6b2QucmVnZXgoXG4gICAgICAgICh2YWx1ZXMgYXMgUGF0dGVyblZhbGlkYXRvck9wdGlvbnMpW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dXG4gICAgICApO1xuICAgIGNhc2UgVmFsaWRhdGlvbktleXMuREFURTpcbiAgICAgIHJldHVybiB6b2QuZGF0ZSgpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gem9kO1xuICB9XG59XG5cbk1vZGVsLnByb3RvdHlwZS50b1pvZCA9IGZ1bmN0aW9uIDxNIGV4dGVuZHMgTW9kZWw+KHRoaXM6IE0pOiBab2RPYmplY3Q8YW55PiB7XG4gIGNvbnN0IHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBab2RSYXdTaGFwZSB9ID0ge307XG5cbiAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpO1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzKSAmJiAhcHJvcGVydGllcy5sZW5ndGgpIHJldHVybiB6Lm9iamVjdCh7fSk7XG4gIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiAodGhpcyBhcyBhbnkpW3Byb3BdID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgIHByb3Auc3RhcnRzV2l0aChcIl9cIikgfHxcbiAgICAgIHByb3AgPT09IFwiY29uc3RydWN0b3JcIlxuICAgICkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgYWxsRGVjcyA9IFJlZmxlY3Rpb24uZ2V0UHJvcGVydHlEZWNvcmF0b3JzKFxuICAgICAgVmFsaWRhdGlvbktleXMuUkVGTEVDVCxcbiAgICAgIHRoaXMsXG4gICAgICBwcm9wLFxuICAgICAgZmFsc2UsXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIGNvbnN0IGRlY29yYXRvckRhdGEgPSBhbGxEZWNzLmRlY29yYXRvcnMucmVkdWNlKFxuICAgICAgKGFjY3VtOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IGtleSwgcHJvcHMgfSA9IGVsO1xuICAgICAgICBpZiAoa2V5ID09PSBNb2RlbEtleXMuVFlQRSAmJiAhYWNjdW1bVmFsaWRhdGlvbktleXMuVFlQRV0pIHtcbiAgICAgICAgICBhY2N1bVtWYWxpZGF0aW9uS2V5cy5UWVBFXSA9IHtcbiAgICAgICAgICAgIGN1c3RvbVR5cGVzOiBbcHJvcHMubmFtZSBhcyBzdHJpbmddLFxuICAgICAgICAgICAgbWVzc2FnZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5UWVBFLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiZGVmaW5lcyB0aGUgYWNjZXB0ZWQgdHlwZXMgZm9yIHRoZSBhdHRyaWJ1dGVcIixcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjY3VtW2tleV0gPSBwcm9wcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhkZWNvcmF0b3JEYXRhKS5sZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxldCB6b2Q6IGFueSA9IFpvZEFueTtcblxuICAgIGNvbnN0IHR5cGVEYXRhOiBUeXBlTWV0YWRhdGEgPSBkZWNvcmF0b3JEYXRhW1xuICAgICAgVmFsaWRhdGlvbktleXMuVFlQRVxuICAgIF0gYXMgVHlwZU1ldGFkYXRhO1xuXG4gICAgaWYgKCF0eXBlRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHR5cGUgaW5mb3JtYXRpb25gKTtcbiAgICB9XG5cbiAgICB6b2QgPSB6b2RpZnkoXG4gICAgICB0eXBlRGF0YS5jdXN0b21UeXBlcyxcbiAgICAgIGRlY29yYXRvckRhdGFbVmFsaWRhdGlvbktleXMuTElTVF1cbiAgICAgICAgPyB6b2RpZnkoKGRlY29yYXRvckRhdGFbVmFsaWRhdGlvbktleXMuTElTVF0gYXMgTGlzdE1ldGFkYXRhKS5jbGF6eilcbiAgICAgICAgOiBab2RBbnlcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBwcm9wc10gb2YgT2JqZWN0LmVudHJpZXMoZGVjb3JhdG9yRGF0YSkuZmlsdGVyKFxuICAgICAgKFtrXSkgPT4gIWlzUmVzZXJ2ZWRLZXkoaylcbiAgICApKSB7XG4gICAgICB6b2QgPSB6b2RpZnlWYWxpZGF0aW9uKHpvZCwga2V5LCBwcm9wcyk7XG4gICAgfVxuXG4gICAgaWYgKCFkZWNvcmF0b3JEYXRhW1ZhbGlkYXRpb25LZXlzLlJFUVVJUkVEXSkge1xuICAgICAgem9kID0gem9kLm9wdGlvbmFsKCk7XG4gICAgfVxuXG4gICAgcmVzdWx0W3Byb3BdID0gem9kO1xuICB9XG5cbiAgcmV0dXJuIHoub2JqZWN0KHJlc3VsdCk7XG59O1xuIiwiZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL292ZXJyaWRlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHZlcnNpb24gb2YgdGhlIHJlZmxlY3Rpb24gcGFja2FnZVxuICogQHN1bW1hcnkgU3RvcmVzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgcGFja2FnZVxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6YXMtem9kXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIjI1ZFUlNJT04jI1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFtQkEsTUFBTSxZQUFZLEdBQUc7QUFDbkIsSUFBQSxjQUFjLENBQUMsUUFBUTtBQUN2QixJQUFBLGNBQWMsQ0FBQyxJQUFJO0FBQ25CLElBQUEsU0FBUyxDQUFDLElBQUk7Q0FDTjtBQUVWLFNBQVMsYUFBYSxDQUFDLEVBQVUsRUFBQTtBQUMvQixJQUFBLE9BQU8sWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFTLENBQUM7QUFDekM7U0FFZ0IsTUFBTSxDQUFDLElBQXVCLEVBQUUsS0FBVSxNQUFNLEVBQUE7QUFDOUQsSUFBQSxJQUFJLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSTtJQUUvQyxTQUFTLFdBQVcsQ0FBQyxJQUFZLEVBQUE7QUFDL0IsUUFBQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDeEIsS0FBSyxVQUFVLENBQUMsTUFBTTtBQUNwQixnQkFBQSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDbkIsS0FBSyxVQUFVLENBQUMsTUFBTTtBQUNwQixnQkFBQSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDbkIsS0FBSyxVQUFVLENBQUMsTUFBTTtBQUNwQixnQkFBQSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDbkIsS0FBSyxVQUFVLENBQUMsT0FBTztBQUNyQixnQkFBQSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDcEIsS0FBSyxjQUFjLENBQUMsSUFBSTtBQUN0QixnQkFB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
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./model";
|
|
2
|
+
export * from "./overrides";
|
|
3
|
+
/**
|
|
4
|
+
* @description Current version of the reflection package
|
|
5
|
+
* @summary Stores the semantic version number of the package
|
|
6
|
+
* @const VERSION
|
|
7
|
+
* @memberOf module:as-zod
|
|
8
|
+
*/
|
|
9
|
+
export declare const VERSION = "0.0.2";
|
package/lib/esm/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./model";
|
|
2
|
+
export * from "./overrides";
|
|
3
|
+
/**
|
|
4
|
+
* @description Current version of the reflection package
|
|
5
|
+
* @summary Stores the semantic version number of the package
|
|
6
|
+
* @const VERSION
|
|
7
|
+
* @memberOf module:as-zod
|
|
8
|
+
*/
|
|
9
|
+
export const VERSION = "0.0.2";
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxhQUFhLENBQUM7QUFFNUI7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL292ZXJyaWRlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHZlcnNpb24gb2YgdGhlIHJlZmxlY3Rpb24gcGFja2FnZVxuICogQHN1bW1hcnkgU3RvcmVzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgcGFja2FnZVxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6YXMtem9kXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIjI1ZFUlNJT04jI1wiO1xuIl19
|
package/lib/esm/model.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFpvZE9iamVjdCB9IGZyb20gXCJ6b2RcIjtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIiB7XG4gIGludGVyZmFjZSBNb2RlbCB7XG4gICAgdG9ab2QoKTogWm9kT2JqZWN0O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Model, ModelKeys, Primitives, DEFAULT_ERROR_MESSAGES, } from "@decaf-ts/decorator-validation";
|
|
2
|
+
import { z, ZodAny } from "zod";
|
|
3
|
+
import { Reflection } from "@decaf-ts/reflection";
|
|
4
|
+
import { ValidationKeys } from "@decaf-ts/decorator-validation";
|
|
5
|
+
const ReservedKeys = [
|
|
6
|
+
ValidationKeys.REQUIRED,
|
|
7
|
+
ValidationKeys.TYPE,
|
|
8
|
+
ModelKeys.TYPE,
|
|
9
|
+
];
|
|
10
|
+
function isReservedKey(el) {
|
|
11
|
+
return ReservedKeys.includes(el);
|
|
12
|
+
}
|
|
13
|
+
export function zodify(type, zz = ZodAny) {
|
|
14
|
+
type = typeof type === "string" ? [type] : type;
|
|
15
|
+
function innerZodify(type) {
|
|
16
|
+
switch (type.toLowerCase()) {
|
|
17
|
+
case Primitives.STRING:
|
|
18
|
+
return z.string();
|
|
19
|
+
case Primitives.NUMBER:
|
|
20
|
+
return z.number();
|
|
21
|
+
case Primitives.BIGINT:
|
|
22
|
+
return z.bigint();
|
|
23
|
+
case Primitives.BOOLEAN:
|
|
24
|
+
return z.boolean();
|
|
25
|
+
case ValidationKeys.DATE:
|
|
26
|
+
return z.date();
|
|
27
|
+
case Array.name.toLowerCase():
|
|
28
|
+
return z.array(zz);
|
|
29
|
+
case Set.name.toLowerCase():
|
|
30
|
+
return z.set(zz);
|
|
31
|
+
default: {
|
|
32
|
+
const m = Model.get(type);
|
|
33
|
+
if (!m) {
|
|
34
|
+
throw new Error(`Unzodifiable type: ${type}`);
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const zz = new m().toZod();
|
|
38
|
+
return zz;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
throw new Error(`Failed to zodify model ${type}: ${e}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
let zod;
|
|
47
|
+
for (const t of type) {
|
|
48
|
+
zod = zod ? zod.or(innerZodify(t)) : innerZodify(t);
|
|
49
|
+
}
|
|
50
|
+
return zod;
|
|
51
|
+
}
|
|
52
|
+
export function zodifyValidation(zod, type, values) {
|
|
53
|
+
switch (type) {
|
|
54
|
+
case ValidationKeys.MIN:
|
|
55
|
+
return zod.min(values[ValidationKeys.MIN]);
|
|
56
|
+
case ValidationKeys.MIN_LENGTH:
|
|
57
|
+
return zod.min(values[ValidationKeys.MIN_LENGTH]);
|
|
58
|
+
case ValidationKeys.MAX:
|
|
59
|
+
return zod.max(values[ValidationKeys.MAX]);
|
|
60
|
+
case ValidationKeys.MAX_LENGTH:
|
|
61
|
+
return zod.max(values[ValidationKeys.MAX_LENGTH]);
|
|
62
|
+
case ValidationKeys.STEP:
|
|
63
|
+
return zod.multipleOf(values[ValidationKeys.STEP]);
|
|
64
|
+
case ValidationKeys.PATTERN:
|
|
65
|
+
return zod.regex(values[ValidationKeys.PATTERN]);
|
|
66
|
+
case ValidationKeys.URL:
|
|
67
|
+
return zod.regex(values[ValidationKeys.PATTERN]);
|
|
68
|
+
case ValidationKeys.EMAIL:
|
|
69
|
+
return zod.regex(values[ValidationKeys.PATTERN]);
|
|
70
|
+
case ValidationKeys.PASSWORD:
|
|
71
|
+
return zod.regex(values[ValidationKeys.PATTERN]);
|
|
72
|
+
case ValidationKeys.DATE:
|
|
73
|
+
return zod.date();
|
|
74
|
+
default:
|
|
75
|
+
return zod;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
Model.prototype.toZod = function () {
|
|
79
|
+
const result = {};
|
|
80
|
+
const properties = Object.getOwnPropertyNames(this);
|
|
81
|
+
if (Array.isArray(properties) && !properties.length)
|
|
82
|
+
return z.object({});
|
|
83
|
+
for (const prop of Object.getOwnPropertyNames(this)) {
|
|
84
|
+
if (typeof this[prop] === "function" ||
|
|
85
|
+
prop.startsWith("_") ||
|
|
86
|
+
prop === "constructor") {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const allDecs = Reflection.getPropertyDecorators(ValidationKeys.REFLECT, this, prop, false, true);
|
|
90
|
+
const decoratorData = allDecs.decorators.reduce((accum, el) => {
|
|
91
|
+
const { key, props } = el;
|
|
92
|
+
if (key === ModelKeys.TYPE && !accum[ValidationKeys.TYPE]) {
|
|
93
|
+
accum[ValidationKeys.TYPE] = {
|
|
94
|
+
customTypes: [props.name],
|
|
95
|
+
message: DEFAULT_ERROR_MESSAGES.TYPE,
|
|
96
|
+
description: "defines the accepted types for the attribute",
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
accum[key] = props;
|
|
101
|
+
}
|
|
102
|
+
return accum;
|
|
103
|
+
}, {});
|
|
104
|
+
if (!Object.keys(decoratorData).length) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
let zod = ZodAny;
|
|
108
|
+
const typeData = decoratorData[ValidationKeys.TYPE];
|
|
109
|
+
if (!typeData) {
|
|
110
|
+
throw new Error(`Missing type information`);
|
|
111
|
+
}
|
|
112
|
+
zod = zodify(typeData.customTypes, decoratorData[ValidationKeys.LIST]
|
|
113
|
+
? zodify(decoratorData[ValidationKeys.LIST].clazz)
|
|
114
|
+
: ZodAny);
|
|
115
|
+
for (const [key, props] of Object.entries(decoratorData).filter(([k]) => !isReservedKey(k))) {
|
|
116
|
+
zod = zodifyValidation(zod, key, props);
|
|
117
|
+
}
|
|
118
|
+
if (!decoratorData[ValidationKeys.REQUIRED]) {
|
|
119
|
+
zod = zod.optional();
|
|
120
|
+
}
|
|
121
|
+
result[prop] = zod;
|
|
122
|
+
}
|
|
123
|
+
return z.object(result);
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnJpZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL292ZXJyaWRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsS0FBSyxFQUNMLFNBQVMsRUFFVCxVQUFVLEVBQ1Ysc0JBQXNCLEdBU3ZCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQTBCLE1BQU0sS0FBSyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFaEUsTUFBTSxZQUFZLEdBQUc7SUFDbkIsY0FBYyxDQUFDLFFBQVE7SUFDdkIsY0FBYyxDQUFDLElBQUk7SUFDbkIsU0FBUyxDQUFDLElBQUk7Q0FDTixDQUFDO0FBRVgsU0FBUyxhQUFhLENBQUMsRUFBVTtJQUMvQixPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBUyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQUMsSUFBdUIsRUFBRSxLQUFVLE1BQU07SUFDOUQsSUFBSSxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRWhELFNBQVMsV0FBVyxDQUFDLElBQVk7UUFDL0IsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUMzQixLQUFLLFVBQVUsQ0FBQyxNQUFNO2dCQUNwQixPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixLQUFLLFVBQVUsQ0FBQyxNQUFNO2dCQUNwQixPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixLQUFLLFVBQVUsQ0FBQyxNQUFNO2dCQUNwQixPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixL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QUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQzNCLEVBQUUsQ0FBQztZQUNGLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzVDLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBNb2RlbCxcbiAgTW9kZWxLZXlzLFxuICBUeXBlTWV0YWRhdGEsXG4gIFByaW1pdGl2ZXMsXG4gIERFRkFVTFRfRVJST1JfTUVTU0FHRVMsXG4gIFZhbGlkYXRvck9wdGlvbnMsXG4gIE1pbkxlbmd0aFZhbGlkYXRvck9wdGlvbnMsXG4gIE1pblZhbGlkYXRvck9wdGlvbnMsXG4gIE1heFZhbGlkYXRvck9wdGlvbnMsXG4gIE1heExlbmd0aFZhbGlkYXRvck9wdGlvbnMsXG4gIFN0ZXBWYWxpZGF0b3JPcHRpb25zLFxuICBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9ucyxcbiAgTGlzdE1ldGFkYXRhLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyB6LCBab2RBbnksIFpvZE9iamVjdCwgWm9kUmF3U2hhcGUgfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBSZWZsZWN0aW9uIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuY29uc3QgUmVzZXJ2ZWRLZXlzID0gW1xuICBWYWxpZGF0aW9uS2V5cy5SRVFVSVJFRCxcbiAgVmFsaWRhdGlvbktleXMuVFlQRSxcbiAgTW9kZWxLZXlzLlRZUEUsXG5dIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBpc1Jlc2VydmVkS2V5KGVsOiBzdHJpbmcpIHtcbiAgcmV0dXJuIFJlc2VydmVkS2V5cy5pbmNsdWRlcyhlbCBhcyBhbnkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gem9kaWZ5KHR5cGU6IHN0cmluZyB8IHN0cmluZ1tdLCB6ejogYW55ID0gWm9kQW55KSB7XG4gIHR5cGUgPSB0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiA/IFt0eXBlXSA6IHR5cGU7XG5cbiAgZnVuY3Rpb24gaW5uZXJab2RpZnkodHlwZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh0eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgUHJpbWl0aXZlcy5TVFJJTkc6XG4gICAgICAgIHJldHVybiB6LnN0cmluZygpO1xuICAgICAgY2FzZSBQcmltaXRpdmVzLk5VTUJFUjpcbiAgICAgICAgcmV0dXJuIHoubnVtYmVyKCk7XG4gICAgICBjYXNlIFByaW1pdGl2ZXMuQklHSU5UOlxuICAgICAgICByZXR1cm4gei5iaWdpbnQoKTtcbiAgICAgIGNhc2UgUHJpbWl0aXZlcy5CT09MRUFOOlxuICAgICAgICByZXR1cm4gei5ib29sZWFuKCk7XG4gICAgICBjYXNlIFZhbGlkYXRpb25LZXlzLkRBVEU6XG4gICAgICAgIHJldHVybiB6LmRhdGUoKTtcbiAgICAgIGNhc2UgQXJyYXkubmFtZS50b0xvd2VyQ2FzZSgpOlxuICAgICAgICByZXR1cm4gei5hcnJheSh6eik7XG4gICAgICBjYXNlIFNldC5uYW1lLnRvTG93ZXJDYXNlKCk6XG4gICAgICAgIHJldHVybiB6LnNldCh6eik7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IG0gPSBNb2RlbC5nZXQodHlwZSk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW56b2RpZmlhYmxlIHR5cGU6ICR7dHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHp6ID0gbmV3IG0oKS50b1pvZCgpO1xuICAgICAgICAgIHJldHVybiB6ejtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHpvZGlmeSBtb2RlbCAke3R5cGV9OiAke2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgem9kOiBhbnk7XG4gIGZvciAoY29uc3QgdCBvZiB0eXBlKSB7XG4gICAgem9kID0gem9kID8gem9kLm9yKGlubmVyWm9kaWZ5KHQpKSA6IGlubmVyWm9kaWZ5KHQpO1xuICB9XG5cbiAgcmV0dXJuIHpvZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHpvZGlmeVZhbGlkYXRpb24oXG4gIHpvZDogYW55LFxuICB0eXBlOiBzdHJpbmcsXG4gIHZhbHVlczogVmFsaWRhdG9yT3B0aW9uc1xuKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgVmFsaWRhdGlvbktleXMuTUlOOlxuICAgICAgcmV0dXJuIHpvZC5taW4oKHZhbHVlcyBhcyBNaW5WYWxpZGF0b3JPcHRpb25zKVtWYWxpZGF0aW9uS2V5cy5NSU5dKTtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLk1JTl9MRU5HVEg6XG4gICAgICByZXR1cm4gem9kLm1pbihcbiAgICAgICAgKHZhbHVlcyBhcyBNaW5MZW5ndGhWYWxpZGF0b3JPcHRpb25zKVtWYWxpZGF0aW9uS2V5cy5NSU5fTEVOR1RIXVxuICAgICAgKTtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLk1BWDpcbiAgICAgIHJldHVybiB6b2QubWF4KCh2YWx1ZXMgYXMgTWF4VmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuTUFYXSk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5NQVhfTEVOR1RIOlxuICAgICAgcmV0dXJuIHpvZC5tYXgoXG4gICAgICAgICh2YWx1ZXMgYXMgTWF4TGVuZ3RoVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuTUFYX0xFTkdUSF1cbiAgICAgICk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5TVEVQOlxuICAgICAgcmV0dXJuIHpvZC5tdWx0aXBsZU9mKFxuICAgICAgICAodmFsdWVzIGFzIFN0ZXBWYWxpZGF0b3JPcHRpb25zKVtWYWxpZGF0aW9uS2V5cy5TVEVQXVxuICAgICAgKTtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLlBBVFRFUk46XG4gICAgICByZXR1cm4gem9kLnJlZ2V4KFxuICAgICAgICAodmFsdWVzIGFzIFBhdHRlcm5WYWxpZGF0b3JPcHRpb25zKVtWYWxpZGF0aW9uS2V5cy5QQVRURVJOXVxuICAgICAgKTtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLlVSTDpcbiAgICAgIHJldHVybiB6b2QucmVnZXgoXG4gICAgICAgICh2YWx1ZXMgYXMgUGF0dGVyblZhbGlkYXRvck9wdGlvbnMpW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dXG4gICAgICApO1xuICAgIGNhc2UgVmFsaWRhdGlvbktleXMuRU1BSUw6XG4gICAgICByZXR1cm4gem9kLnJlZ2V4KFxuICAgICAgICAodmFsdWVzIGFzIFBhdHRlcm5WYWxpZGF0b3JPcHRpb25zKVtWYWxpZGF0aW9uS2V5cy5QQVRURVJOXVxuICAgICAgKTtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLlBBU1NXT1JEOlxuICAgICAgcmV0dXJuIHpvZC5yZWdleChcbiAgICAgICAgKHZhbHVlcyBhcyBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuUEFUVEVSTl1cbiAgICAgICk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5EQVRFOlxuICAgICAgcmV0dXJuIHpvZC5kYXRlKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB6b2Q7XG4gIH1cbn1cblxuTW9kZWwucHJvdG90eXBlLnRvWm9kID0gZnVuY3Rpb24gPE0gZXh0ZW5kcyBNb2RlbD4odGhpczogTSk6IFpvZE9iamVjdDxhbnk+IHtcbiAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IFpvZFJhd1NoYXBlIH0gPSB7fTtcblxuICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnRpZXMpICYmICFwcm9wZXJ0aWVzLmxlbmd0aCkgcmV0dXJuIHoub2JqZWN0KHt9KTtcbiAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mICh0aGlzIGFzIGFueSlbcHJvcF0gPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgcHJvcC5zdGFydHNXaXRoKFwiX1wiKSB8fFxuICAgICAgcHJvcCA9PT0gXCJjb25zdHJ1Y3RvclwiXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxEZWNzID0gUmVmbGVjdGlvbi5nZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNULFxuICAgICAgdGhpcyxcbiAgICAgIHByb3AsXG4gICAgICBmYWxzZSxcbiAgICAgIHRydWVcbiAgICApO1xuXG4gICAgY29uc3QgZGVjb3JhdG9yRGF0YSA9IGFsbERlY3MuZGVjb3JhdG9ycy5yZWR1Y2UoXG4gICAgICAoYWNjdW06IFJlY29yZDxzdHJpbmcsIGFueT4sIGVsKSA9PiB7XG4gICAgICAgIGNvbnN0IHsga2V5LCBwcm9wcyB9ID0gZWw7XG4gICAgICAgIGlmIChrZXkgPT09IE1vZGVsS2V5cy5UWVBFICYmICFhY2N1bVtWYWxpZGF0aW9uS2V5cy5UWVBFXSkge1xuICAgICAgICAgIGFjY3VtW1ZhbGlkYXRpb25LZXlzLlRZUEVdID0ge1xuICAgICAgICAgICAgY3VzdG9tVHlwZXM6IFtwcm9wcy5uYW1lIGFzIHN0cmluZ10sXG4gICAgICAgICAgICBtZXNzYWdlOiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlRZUEUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJkZWZpbmVzIHRoZSBhY2NlcHRlZCB0eXBlcyBmb3IgdGhlIGF0dHJpYnV0ZVwiLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjdW1ba2V5XSA9IHByb3BzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG5cbiAgICBpZiAoIU9iamVjdC5rZXlzKGRlY29yYXRvckRhdGEpLmxlbmd0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IHpvZDogYW55ID0gWm9kQW55O1xuXG4gICAgY29uc3QgdHlwZURhdGE6IFR5cGVNZXRhZGF0YSA9IGRlY29yYXRvckRhdGFbXG4gICAgICBWYWxpZGF0aW9uS2V5cy5UWVBFXG4gICAgXSBhcyBUeXBlTWV0YWRhdGE7XG5cbiAgICBpZiAoIXR5cGVEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgdHlwZSBpbmZvcm1hdGlvbmApO1xuICAgIH1cblxuICAgIHpvZCA9IHpvZGlmeShcbiAgICAgIHR5cGVEYXRhLmN1c3RvbVR5cGVzLFxuICAgICAgZGVjb3JhdG9yRGF0YVtWYWxpZGF0aW9uS2V5cy5MSVNUXVxuICAgICAgICA/IHpvZGlmeSgoZGVjb3JhdG9yRGF0YVtWYWxpZGF0aW9uS2V5cy5MSVNUXSBhcyBMaXN0TWV0YWRhdGEpLmNsYXp6KVxuICAgICAgICA6IFpvZEFueVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHByb3BzXSBvZiBPYmplY3QuZW50cmllcyhkZWNvcmF0b3JEYXRhKS5maWx0ZXIoXG4gICAgICAoW2tdKSA9PiAhaXNSZXNlcnZlZEtleShrKVxuICAgICkpIHtcbiAgICAgIHpvZCA9IHpvZGlmeVZhbGlkYXRpb24oem9kLCBrZXksIHByb3BzKTtcbiAgICB9XG5cbiAgICBpZiAoIWRlY29yYXRvckRhdGFbVmFsaWRhdGlvbktleXMuUkVRVUlSRURdKSB7XG4gICAgICB6b2QgPSB6b2Qub3B0aW9uYWwoKTtcbiAgICB9XG5cbiAgICByZXN1bHRbcHJvcF0gPSB6b2Q7XG4gIH1cblxuICByZXR1cm4gei5vYmplY3QocmVzdWx0KTtcbn07XG4iXX0=
|
package/lib/index.cjs
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.VERSION = void 0;
|
|
18
|
+
__exportStar(require("./model.cjs"), exports);
|
|
19
|
+
__exportStar(require("./overrides.cjs"), exports);
|
|
20
|
+
/**
|
|
21
|
+
* @description Current version of the reflection package
|
|
22
|
+
* @summary Stores the semantic version number of the package
|
|
23
|
+
* @const VERSION
|
|
24
|
+
* @memberOf module:as-zod
|
|
25
|
+
*/
|
|
26
|
+
exports.VERSION = "0.0.2";
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBd0I7QUFDeEIsa0RBQTRCO0FBRTVCOzs7OztHQUtHO0FBQ1UsUUFBQSxPQUFPLEdBQUcsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL292ZXJyaWRlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHZlcnNpb24gb2YgdGhlIHJlZmxlY3Rpb24gcGFja2FnZVxuICogQHN1bW1hcnkgU3RvcmVzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgcGFja2FnZVxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6YXMtem9kXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIjI1ZFUlNJT04jI1wiO1xuIl19
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./model";
|
|
2
|
+
export * from "./overrides";
|
|
3
|
+
/**
|
|
4
|
+
* @description Current version of the reflection package
|
|
5
|
+
* @summary Stores the semantic version number of the package
|
|
6
|
+
* @const VERSION
|
|
7
|
+
* @memberOf module:as-zod
|
|
8
|
+
*/
|
|
9
|
+
export declare const VERSION = "0.0.2";
|
package/lib/model.cjs
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFpvZE9iamVjdCB9IGZyb20gXCJ6b2RcIjtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIiB7XG4gIGludGVyZmFjZSBNb2RlbCB7XG4gICAgdG9ab2QoKTogWm9kT2JqZWN0O1xuICB9XG59XG4iXX0=
|
package/lib/model.d.ts
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.zodify = zodify;
|
|
4
|
+
exports.zodifyValidation = zodifyValidation;
|
|
5
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
const reflection_1 = require("@decaf-ts/reflection");
|
|
8
|
+
const decorator_validation_2 = require("@decaf-ts/decorator-validation");
|
|
9
|
+
const ReservedKeys = [
|
|
10
|
+
decorator_validation_2.ValidationKeys.REQUIRED,
|
|
11
|
+
decorator_validation_2.ValidationKeys.TYPE,
|
|
12
|
+
decorator_validation_1.ModelKeys.TYPE,
|
|
13
|
+
];
|
|
14
|
+
function isReservedKey(el) {
|
|
15
|
+
return ReservedKeys.includes(el);
|
|
16
|
+
}
|
|
17
|
+
function zodify(type, zz = zod_1.ZodAny) {
|
|
18
|
+
type = typeof type === "string" ? [type] : type;
|
|
19
|
+
function innerZodify(type) {
|
|
20
|
+
switch (type.toLowerCase()) {
|
|
21
|
+
case decorator_validation_1.Primitives.STRING:
|
|
22
|
+
return zod_1.z.string();
|
|
23
|
+
case decorator_validation_1.Primitives.NUMBER:
|
|
24
|
+
return zod_1.z.number();
|
|
25
|
+
case decorator_validation_1.Primitives.BIGINT:
|
|
26
|
+
return zod_1.z.bigint();
|
|
27
|
+
case decorator_validation_1.Primitives.BOOLEAN:
|
|
28
|
+
return zod_1.z.boolean();
|
|
29
|
+
case decorator_validation_2.ValidationKeys.DATE:
|
|
30
|
+
return zod_1.z.date();
|
|
31
|
+
case Array.name.toLowerCase():
|
|
32
|
+
return zod_1.z.array(zz);
|
|
33
|
+
case Set.name.toLowerCase():
|
|
34
|
+
return zod_1.z.set(zz);
|
|
35
|
+
default: {
|
|
36
|
+
const m = decorator_validation_1.Model.get(type);
|
|
37
|
+
if (!m) {
|
|
38
|
+
throw new Error(`Unzodifiable type: ${type}`);
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const zz = new m().toZod();
|
|
42
|
+
return zz;
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
throw new Error(`Failed to zodify model ${type}: ${e}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
let zod;
|
|
51
|
+
for (const t of type) {
|
|
52
|
+
zod = zod ? zod.or(innerZodify(t)) : innerZodify(t);
|
|
53
|
+
}
|
|
54
|
+
return zod;
|
|
55
|
+
}
|
|
56
|
+
function zodifyValidation(zod, type, values) {
|
|
57
|
+
switch (type) {
|
|
58
|
+
case decorator_validation_2.ValidationKeys.MIN:
|
|
59
|
+
return zod.min(values[decorator_validation_2.ValidationKeys.MIN]);
|
|
60
|
+
case decorator_validation_2.ValidationKeys.MIN_LENGTH:
|
|
61
|
+
return zod.min(values[decorator_validation_2.ValidationKeys.MIN_LENGTH]);
|
|
62
|
+
case decorator_validation_2.ValidationKeys.MAX:
|
|
63
|
+
return zod.max(values[decorator_validation_2.ValidationKeys.MAX]);
|
|
64
|
+
case decorator_validation_2.ValidationKeys.MAX_LENGTH:
|
|
65
|
+
return zod.max(values[decorator_validation_2.ValidationKeys.MAX_LENGTH]);
|
|
66
|
+
case decorator_validation_2.ValidationKeys.STEP:
|
|
67
|
+
return zod.multipleOf(values[decorator_validation_2.ValidationKeys.STEP]);
|
|
68
|
+
case decorator_validation_2.ValidationKeys.PATTERN:
|
|
69
|
+
return zod.regex(values[decorator_validation_2.ValidationKeys.PATTERN]);
|
|
70
|
+
case decorator_validation_2.ValidationKeys.URL:
|
|
71
|
+
return zod.regex(values[decorator_validation_2.ValidationKeys.PATTERN]);
|
|
72
|
+
case decorator_validation_2.ValidationKeys.EMAIL:
|
|
73
|
+
return zod.regex(values[decorator_validation_2.ValidationKeys.PATTERN]);
|
|
74
|
+
case decorator_validation_2.ValidationKeys.PASSWORD:
|
|
75
|
+
return zod.regex(values[decorator_validation_2.ValidationKeys.PATTERN]);
|
|
76
|
+
case decorator_validation_2.ValidationKeys.DATE:
|
|
77
|
+
return zod.date();
|
|
78
|
+
default:
|
|
79
|
+
return zod;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
decorator_validation_1.Model.prototype.toZod = function () {
|
|
83
|
+
const result = {};
|
|
84
|
+
const properties = Object.getOwnPropertyNames(this);
|
|
85
|
+
if (Array.isArray(properties) && !properties.length)
|
|
86
|
+
return zod_1.z.object({});
|
|
87
|
+
for (const prop of Object.getOwnPropertyNames(this)) {
|
|
88
|
+
if (typeof this[prop] === "function" ||
|
|
89
|
+
prop.startsWith("_") ||
|
|
90
|
+
prop === "constructor") {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const allDecs = reflection_1.Reflection.getPropertyDecorators(decorator_validation_2.ValidationKeys.REFLECT, this, prop, false, true);
|
|
94
|
+
const decoratorData = allDecs.decorators.reduce((accum, el) => {
|
|
95
|
+
const { key, props } = el;
|
|
96
|
+
if (key === decorator_validation_1.ModelKeys.TYPE && !accum[decorator_validation_2.ValidationKeys.TYPE]) {
|
|
97
|
+
accum[decorator_validation_2.ValidationKeys.TYPE] = {
|
|
98
|
+
customTypes: [props.name],
|
|
99
|
+
message: decorator_validation_1.DEFAULT_ERROR_MESSAGES.TYPE,
|
|
100
|
+
description: "defines the accepted types for the attribute",
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
accum[key] = props;
|
|
105
|
+
}
|
|
106
|
+
return accum;
|
|
107
|
+
}, {});
|
|
108
|
+
if (!Object.keys(decoratorData).length) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
let zod = zod_1.ZodAny;
|
|
112
|
+
const typeData = decoratorData[decorator_validation_2.ValidationKeys.TYPE];
|
|
113
|
+
if (!typeData) {
|
|
114
|
+
throw new Error(`Missing type information`);
|
|
115
|
+
}
|
|
116
|
+
zod = zodify(typeData.customTypes, decoratorData[decorator_validation_2.ValidationKeys.LIST]
|
|
117
|
+
? zodify(decoratorData[decorator_validation_2.ValidationKeys.LIST].clazz)
|
|
118
|
+
: zod_1.ZodAny);
|
|
119
|
+
for (const [key, props] of Object.entries(decoratorData).filter(([k]) => !isReservedKey(k))) {
|
|
120
|
+
zod = zodifyValidation(zod, key, props);
|
|
121
|
+
}
|
|
122
|
+
if (!decoratorData[decorator_validation_2.ValidationKeys.REQUIRED]) {
|
|
123
|
+
zod = zod.optional();
|
|
124
|
+
}
|
|
125
|
+
result[prop] = zod;
|
|
126
|
+
}
|
|
127
|
+
return zod_1.z.object(result);
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnJpZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL292ZXJyaWRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTZCQSx3QkF3Q0M7QUFFRCw0Q0EyQ0M7QUFsSEQseUVBY3dDO0FBQ3hDLDZCQUF3RDtBQUN4RCxxREFBa0Q7QUFDbEQseUVBQWdFO0FBRWhFLE1BQU0sWUFBWSxHQUFHO0lBQ25CLHFDQUFjLENBQUMsUUFBUTtJQUN2QixxQ0FBYyxDQUFDLElBQUk7SUFDbkIsZ0NBQVMsQ0FBQyxJQUFJO0NBQ04sQ0FBQztBQUVYLFNBQVMsYUFBYSxDQUFDLEVBQVU7SUFDL0IsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQVMsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFnQixNQUFNLENBQUMsSUFBdUIsRUFBRSxLQUFVLFlBQU07SUFDOUQsSUFBSSxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRWhELFNBQVMsV0FBVyxDQUFDLElBQVk7UUFDL0IsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUMzQixLQUFLLGlDQUFVLENBQUMsTUFBTTtnQkFDcEIsT0FBTyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEIsS0FBSyxpQ0FBVSxDQUFDLE1BQU07Z0JBQ3BCLE9BQU8sT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLEtBQUssaUNBQVUsQ0FBQyxNQUFNO2dCQUNwQixPQUFPLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixLQUFLLGlDQUFVLENBQUMsT0FBTztnQkFDckIsT0FBTyxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsS0FBSyxxQ0FBYyxDQUFDLElBQUk7Z0JBQ3RCLE9BQU8sT0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xCLEtBQUssS0FB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QUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLHFDQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxPQUFPLE9BQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTW9kZWwsXG4gIE1vZGVsS2V5cyxcbiAgVHlwZU1ldGFkYXRhLFxuICBQcmltaXRpdmVzLFxuICBERUZBVUxUX0VSUk9SX01FU1NBR0VTLFxuICBWYWxpZGF0b3JPcHRpb25zLFxuICBNaW5MZW5ndGhWYWxpZGF0b3JPcHRpb25zLFxuICBNaW5WYWxpZGF0b3JPcHRpb25zLFxuICBNYXhWYWxpZGF0b3JPcHRpb25zLFxuICBNYXhMZW5ndGhWYWxpZGF0b3JPcHRpb25zLFxuICBTdGVwVmFsaWRhdG9yT3B0aW9ucyxcbiAgUGF0dGVyblZhbGlkYXRvck9wdGlvbnMsXG4gIExpc3RNZXRhZGF0YSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgeiwgWm9kQW55LCBab2RPYmplY3QsIFpvZFJhd1NoYXBlIH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgUmVmbGVjdGlvbiB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbktleXMgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5cbmNvbnN0IFJlc2VydmVkS2V5cyA9IFtcbiAgVmFsaWRhdGlvbktleXMuUkVRVUlSRUQsXG4gIFZhbGlkYXRpb25LZXlzLlRZUEUsXG4gIE1vZGVsS2V5cy5UWVBFLFxuXSBhcyBjb25zdDtcblxuZnVuY3Rpb24gaXNSZXNlcnZlZEtleShlbDogc3RyaW5nKSB7XG4gIHJldHVybiBSZXNlcnZlZEtleXMuaW5jbHVkZXMoZWwgYXMgYW55KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHpvZGlmeSh0eXBlOiBzdHJpbmcgfCBzdHJpbmdbXSwgeno6IGFueSA9IFpvZEFueSkge1xuICB0eXBlID0gdHlwZW9mIHR5cGUgPT09IFwic3RyaW5nXCIgPyBbdHlwZV0gOiB0eXBlO1xuXG4gIGZ1bmN0aW9uIGlubmVyWm9kaWZ5KHR5cGU6IHN0cmluZykge1xuICAgIHN3aXRjaCAodHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlIFByaW1pdGl2ZXMuU1RSSU5HOlxuICAgICAgICByZXR1cm4gei5zdHJpbmcoKTtcbiAgICAgIGNhc2UgUHJpbWl0aXZlcy5OVU1CRVI6XG4gICAgICAgIHJldHVybiB6Lm51bWJlcigpO1xuICAgICAgY2FzZSBQcmltaXRpdmVzLkJJR0lOVDpcbiAgICAgICAgcmV0dXJuIHouYmlnaW50KCk7XG4gICAgICBjYXNlIFByaW1pdGl2ZXMuQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuIHouYm9vbGVhbigpO1xuICAgICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5EQVRFOlxuICAgICAgICByZXR1cm4gei5kYXRlKCk7XG4gICAgICBjYXNlIEFycmF5Lm5hbWUudG9Mb3dlckNhc2UoKTpcbiAgICAgICAgcmV0dXJuIHouYXJyYXkoenopO1xuICAgICAgY2FzZSBTZXQubmFtZS50b0xvd2VyQ2FzZSgpOlxuICAgICAgICByZXR1cm4gei5zZXQoenopO1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBtID0gTW9kZWwuZ2V0KHR5cGUpO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuem9kaWZpYWJsZSB0eXBlOiAke3R5cGV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB6eiA9IG5ldyBtKCkudG9ab2QoKTtcbiAgICAgICAgICByZXR1cm4geno7XG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byB6b2RpZnkgbW9kZWwgJHt0eXBlfTogJHtlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHpvZDogYW55O1xuICBmb3IgKGNvbnN0IHQgb2YgdHlwZSkge1xuICAgIHpvZCA9IHpvZCA/IHpvZC5vcihpbm5lclpvZGlmeSh0KSkgOiBpbm5lclpvZGlmeSh0KTtcbiAgfVxuXG4gIHJldHVybiB6b2Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB6b2RpZnlWYWxpZGF0aW9uKFxuICB6b2Q6IGFueSxcbiAgdHlwZTogc3RyaW5nLFxuICB2YWx1ZXM6IFZhbGlkYXRvck9wdGlvbnNcbikge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLk1JTjpcbiAgICAgIHJldHVybiB6b2QubWluKCh2YWx1ZXMgYXMgTWluVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuTUlOXSk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5NSU5fTEVOR1RIOlxuICAgICAgcmV0dXJuIHpvZC5taW4oXG4gICAgICAgICh2YWx1ZXMgYXMgTWluTGVuZ3RoVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuTUlOX0xFTkdUSF1cbiAgICAgICk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5NQVg6XG4gICAgICByZXR1cm4gem9kLm1heCgodmFsdWVzIGFzIE1heFZhbGlkYXRvck9wdGlvbnMpW1ZhbGlkYXRpb25LZXlzLk1BWF0pO1xuICAgIGNhc2UgVmFsaWRhdGlvbktleXMuTUFYX0xFTkdUSDpcbiAgICAgIHJldHVybiB6b2QubWF4KFxuICAgICAgICAodmFsdWVzIGFzIE1heExlbmd0aFZhbGlkYXRvck9wdGlvbnMpW1ZhbGlkYXRpb25LZXlzLk1BWF9MRU5HVEhdXG4gICAgICApO1xuICAgIGNhc2UgVmFsaWRhdGlvbktleXMuU1RFUDpcbiAgICAgIHJldHVybiB6b2QubXVsdGlwbGVPZihcbiAgICAgICAgKHZhbHVlcyBhcyBTdGVwVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuU1RFUF1cbiAgICAgICk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5QQVRURVJOOlxuICAgICAgcmV0dXJuIHpvZC5yZWdleChcbiAgICAgICAgKHZhbHVlcyBhcyBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuUEFUVEVSTl1cbiAgICAgICk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5VUkw6XG4gICAgICByZXR1cm4gem9kLnJlZ2V4KFxuICAgICAgICAodmFsdWVzIGFzIFBhdHRlcm5WYWxpZGF0b3JPcHRpb25zKVtWYWxpZGF0aW9uS2V5cy5QQVRURVJOXVxuICAgICAgKTtcbiAgICBjYXNlIFZhbGlkYXRpb25LZXlzLkVNQUlMOlxuICAgICAgcmV0dXJuIHpvZC5yZWdleChcbiAgICAgICAgKHZhbHVlcyBhcyBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9ucylbVmFsaWRhdGlvbktleXMuUEFUVEVSTl1cbiAgICAgICk7XG4gICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5QQVNTV09SRDpcbiAgICAgIHJldHVybiB6b2QucmVnZXgoXG4gICAgICAgICh2YWx1ZXMgYXMgUGF0dGVyblZhbGlkYXRvck9wdGlvbnMpW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dXG4gICAgICApO1xuICAgIGNhc2UgVmFsaWRhdGlvbktleXMuREFURTpcbiAgICAgIHJldHVybiB6b2QuZGF0ZSgpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gem9kO1xuICB9XG59XG5cbk1vZGVsLnByb3RvdHlwZS50b1pvZCA9IGZ1bmN0aW9uIDxNIGV4dGVuZHMgTW9kZWw+KHRoaXM6IE0pOiBab2RPYmplY3Q8YW55PiB7XG4gIGNvbnN0IHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBab2RSYXdTaGFwZSB9ID0ge307XG5cbiAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpO1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzKSAmJiAhcHJvcGVydGllcy5sZW5ndGgpIHJldHVybiB6Lm9iamVjdCh7fSk7XG4gIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiAodGhpcyBhcyBhbnkpW3Byb3BdID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgIHByb3Auc3RhcnRzV2l0aChcIl9cIikgfHxcbiAgICAgIHByb3AgPT09IFwiY29uc3RydWN0b3JcIlxuICAgICkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgYWxsRGVjcyA9IFJlZmxlY3Rpb24uZ2V0UHJvcGVydHlEZWNvcmF0b3JzKFxuICAgICAgVmFsaWRhdGlvbktleXMuUkVGTEVDVCxcbiAgICAgIHRoaXMsXG4gICAgICBwcm9wLFxuICAgICAgZmFsc2UsXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIGNvbnN0IGRlY29yYXRvckRhdGEgPSBhbGxEZWNzLmRlY29yYXRvcnMucmVkdWNlKFxuICAgICAgKGFjY3VtOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IGtleSwgcHJvcHMgfSA9IGVsO1xuICAgICAgICBpZiAoa2V5ID09PSBNb2RlbEtleXMuVFlQRSAmJiAhYWNjdW1bVmFsaWRhdGlvbktleXMuVFlQRV0pIHtcbiAgICAgICAgICBhY2N1bVtWYWxpZGF0aW9uS2V5cy5UWVBFXSA9IHtcbiAgICAgICAgICAgIGN1c3RvbVR5cGVzOiBbcHJvcHMubmFtZSBhcyBzdHJpbmddLFxuICAgICAgICAgICAgbWVzc2FnZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5UWVBFLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiZGVmaW5lcyB0aGUgYWNjZXB0ZWQgdHlwZXMgZm9yIHRoZSBhdHRyaWJ1dGVcIixcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjY3VtW2tleV0gPSBwcm9wcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhkZWNvcmF0b3JEYXRhKS5sZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxldCB6b2Q6IGFueSA9IFpvZEFueTtcblxuICAgIGNvbnN0IHR5cGVEYXRhOiBUeXBlTWV0YWRhdGEgPSBkZWNvcmF0b3JEYXRhW1xuICAgICAgVmFsaWRhdGlvbktleXMuVFlQRVxuICAgIF0gYXMgVHlwZU1ldGFkYXRhO1xuXG4gICAgaWYgKCF0eXBlRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHR5cGUgaW5mb3JtYXRpb25gKTtcbiAgICB9XG5cbiAgICB6b2QgPSB6b2RpZnkoXG4gICAgICB0eXBlRGF0YS5jdXN0b21UeXBlcyxcbiAgICAgIGRlY29yYXRvckRhdGFbVmFsaWRhdGlvbktleXMuTElTVF1cbiAgICAgICAgPyB6b2RpZnkoKGRlY29yYXRvckRhdGFbVmFsaWRhdGlvbktleXMuTElTVF0gYXMgTGlzdE1ldGFkYXRhKS5jbGF6eilcbiAgICAgICAgOiBab2RBbnlcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBwcm9wc10gb2YgT2JqZWN0LmVudHJpZXMoZGVjb3JhdG9yRGF0YSkuZmlsdGVyKFxuICAgICAgKFtrXSkgPT4gIWlzUmVzZXJ2ZWRLZXkoaylcbiAgICApKSB7XG4gICAgICB6b2QgPSB6b2RpZnlWYWxpZGF0aW9uKHpvZCwga2V5LCBwcm9wcyk7XG4gICAgfVxuXG4gICAgaWYgKCFkZWNvcmF0b3JEYXRhW1ZhbGlkYXRpb25LZXlzLlJFUVVJUkVEXSkge1xuICAgICAgem9kID0gem9kLm9wdGlvbmFsKCk7XG4gICAgfVxuXG4gICAgcmVzdWx0W3Byb3BdID0gem9kO1xuICB9XG5cbiAgcmV0dXJuIHoub2JqZWN0KHJlc3VsdCk7XG59O1xuIl19
|
package/package.json
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@decaf-ts/as-zod",
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"description": "Zod compatibility library",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
"require": "./lib/index.cjs",
|
|
8
|
+
"import": "./lib/esm/index.js"
|
|
9
|
+
},
|
|
10
|
+
"types": "lib/index.d.ts",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"do-install": "TOKEN=$(cat .token) npm install",
|
|
13
|
+
"update-scripts": "node ./bin/update-scripts.cjs",
|
|
14
|
+
"on-first-run": "node ./bin/update-scripts.cjs --boot",
|
|
15
|
+
"set-git-auth": "git config url.\"https://api:$(cat .token)@github.com/\".insteadOf \"https://github.com/\" && git config url.\"https://ssh:$(cat .token)@github.com/\".insteadOf \"ssh://git@github.com/\" && git config url.\"https://git:$(cat .token)@github.com/\".insteadOf \"git@github.com:\"",
|
|
16
|
+
"flash-forward": "npx npm-check-updates -u && npm run do-install",
|
|
17
|
+
"reset": "rm -rf * && git checkout . && git pull && npm run do-install",
|
|
18
|
+
"build": "node ./bin/build-scripts.cjs --dev",
|
|
19
|
+
"build:prod": "node ./bin/build-scripts.cjs --prod",
|
|
20
|
+
"test": "jest --runInBand --detectOpenHandles",
|
|
21
|
+
"test:unit": "jest --testPathPattern=\"/tests/unit\" --passWithNoTests --detectOpenHandles",
|
|
22
|
+
"test:integration": "jest --testPathPattern=\"/tests/(integration)\" --passWithNoTests --detectOpenHandles",
|
|
23
|
+
"test:all": "jest --testPathPattern=\"/tests\" --passWithNoTests --detectOpenHandles",
|
|
24
|
+
"test:circular": "dpdm -T --no-warning --no-tree ./src/index.ts",
|
|
25
|
+
"coverage": "rimraf ./workdocs/reports/data/*.json && npm run test:all -- --coverage --config=./workdocs/reports/jest.coverage.config.ts",
|
|
26
|
+
"lint": "eslint .",
|
|
27
|
+
"lint-fix": "eslint --fix .",
|
|
28
|
+
"prepare-release": "npm run lint-fix && npm run build:prod && npm run coverage && npm run docs",
|
|
29
|
+
"release": "./bin/tag-release.sh",
|
|
30
|
+
"clean-publish": "npx clean-publish",
|
|
31
|
+
"drawings": "for FILE in workdocs/drawings/*.drawio; do echo \"converting $FILE to image...\" && docker run --rm -v $(pwd):/data rlespinasse/drawio-export --format png $FILE; done && cp -rf workdocs/drawings/export/* workdocs/resources/",
|
|
32
|
+
"uml": "cd workdocs/uml && for FILE in ./*.puml; do docker run --rm -v $(pwd):/work -w /work miy4/plantuml -DPLANTUML_LIMIT_SIZE=8192 -tpng $FILE; done && cd ../.. && cp -fr workdocs/uml/*.png workdocs/resources/",
|
|
33
|
+
"docs": "npx rimraf ./docs && mkdir docs && node ./bin/build-scripts.cjs --docs",
|
|
34
|
+
"publish-docs": "docker run -it --rm --user $(id -u):$(id -g) -v \"$(pwd)/workdocs/confluence:/content\" -e ATLASSIAN_API_TOKEN=$(cat .confluence-token) ghcr.io/markdown-confluence/publish:latest",
|
|
35
|
+
"docker:login": "docker login ghcr.io -u $(cat .dockeruser) -p $(cat .dockertoken)",
|
|
36
|
+
"docker:build": "npm run docker:build-base",
|
|
37
|
+
"docker:build-base": "DOCKER_BUILDKIT=1 docker build --secret id=TOKEN,src=$PWD/.npmtoken -t ghcr.io/decaf-ts/as-zod:base-$(cat package.json | jq -r '.version') -t ghcr.io/decaf-ts/as-zod:base-${VERSION:-latest} -f ./Dockerfile .",
|
|
38
|
+
"docker:publish": "npm run docker:publish-base",
|
|
39
|
+
"docker:publish-base": "docker push ghcr.io/decaf-ts/as-zod:base-$(cat package.json | jq -r '.version') && docker push ghcr.io/decaf-ts/as-zod:base-${VERSION:-latest}"
|
|
40
|
+
},
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "git+https://github.com/decaf-ts/ts-workspace.git"
|
|
44
|
+
},
|
|
45
|
+
"engines": {
|
|
46
|
+
"node": ">=20.0.0",
|
|
47
|
+
"npm": ">=10.0.0"
|
|
48
|
+
},
|
|
49
|
+
"files": [
|
|
50
|
+
"lib",
|
|
51
|
+
"dist"
|
|
52
|
+
],
|
|
53
|
+
"keywords": [
|
|
54
|
+
"plantuml",
|
|
55
|
+
"mermaid",
|
|
56
|
+
"uml",
|
|
57
|
+
"drawio",
|
|
58
|
+
"mddocs",
|
|
59
|
+
"md",
|
|
60
|
+
"jsdoc",
|
|
61
|
+
"doc",
|
|
62
|
+
"docs",
|
|
63
|
+
"documentation",
|
|
64
|
+
"test",
|
|
65
|
+
"reports",
|
|
66
|
+
"confluence",
|
|
67
|
+
"ci/cd",
|
|
68
|
+
"ci",
|
|
69
|
+
"cd",
|
|
70
|
+
"template",
|
|
71
|
+
"typescript",
|
|
72
|
+
"ts"
|
|
73
|
+
],
|
|
74
|
+
"author": "Tiago Venceslau",
|
|
75
|
+
"bugs": {
|
|
76
|
+
"url": "https://github.com/decaf-ts/ts-workspace/issues"
|
|
77
|
+
},
|
|
78
|
+
"homepage": "https://github.com/decaf-ts/ts-workspace#readme",
|
|
79
|
+
"devDependencies": {
|
|
80
|
+
"@decaf-ts/logging": "latest",
|
|
81
|
+
"@decaf-ts/utils": "latest",
|
|
82
|
+
"@eslint/js": "^9.25.1",
|
|
83
|
+
"@rollup/plugin-commonjs": "^28.0.3",
|
|
84
|
+
"@rollup/plugin-json": "^6.1.0",
|
|
85
|
+
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
86
|
+
"@rollup/plugin-typescript": "^12.1.2",
|
|
87
|
+
"@stylistic/eslint-plugin": "^4.2.0",
|
|
88
|
+
"@types/jest": "^29.5.14",
|
|
89
|
+
"clean-publish": "^5.1.0",
|
|
90
|
+
"dpdm": "^3.14.0",
|
|
91
|
+
"eslint": "^9.25.1",
|
|
92
|
+
"eslint-config-prettier": "^10.1.2",
|
|
93
|
+
"eslint-plugin-prettier": "^5.2.6",
|
|
94
|
+
"globals": "^16.0.0",
|
|
95
|
+
"jest": "^29.7.0",
|
|
96
|
+
"jest-html-reporters": "^3.1.7",
|
|
97
|
+
"jest-junit": "^16.0.0",
|
|
98
|
+
"jsdoc": "^4.0.4",
|
|
99
|
+
"jsdoc-mermaid": "^1.0.0",
|
|
100
|
+
"markdown-include": "^0.4.3",
|
|
101
|
+
"minimist": "^1.2.8",
|
|
102
|
+
"nodemon": "^3.1.9",
|
|
103
|
+
"npm-check-updates": "^18.0.0",
|
|
104
|
+
"prettier": "3.5.3",
|
|
105
|
+
"rimraf": "^6.0.1",
|
|
106
|
+
"rollup": "^4.40.0",
|
|
107
|
+
"ts-jest": "^29.3.2",
|
|
108
|
+
"ts-loader": "^9.5.2",
|
|
109
|
+
"ts-node": "^10.9.2",
|
|
110
|
+
"typescript": "^5.8.3",
|
|
111
|
+
"typescript-eslint": "^8.31.0"
|
|
112
|
+
},
|
|
113
|
+
"peerDependencies": {
|
|
114
|
+
"@decaf-ts/decorator-validation": "^1.7.4",
|
|
115
|
+
"@decaf-ts/reflection": "^0.4.5",
|
|
116
|
+
"zod": "^4.0.4"
|
|
117
|
+
}
|
|
118
|
+
}
|