@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 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
+ [![Banner](./workdocs/assets/Banner.png)](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
+ ![Licence](https://img.shields.io/github/license/decaf-ts/ts-workspace.svg?style=plastic)
9
+ ![GitHub language count](https://img.shields.io/github/languages/count/decaf-ts/as-zod?style=plastic)
10
+ ![GitHub top language](https://img.shields.io/github/languages/top/decaf-ts/ts-workspace?style=plastic)
11
+
12
+ [![Build & Test](https://github.com/decaf-ts/ts-workspace/actions/workflows/nodejs-build-prod.yaml/badge.svg)](https://github.com/decaf-ts/ts-workspace/actions/workflows/nodejs-build-prod.yaml)
13
+ [![CodeQL](https://github.com/decaf-ts/ts-workspace/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/decaf-ts/ts-workspace/actions/workflows/codeql-analysis.yml)[![Snyk Analysis](https://github.com/decaf-ts/ts-workspace/actions/workflows/snyk-analysis.yaml/badge.svg)](https://github.com/decaf-ts/ts-workspace/actions/workflows/snyk-analysis.yaml)
14
+ [![Pages builder](https://github.com/decaf-ts/ts-workspace/actions/workflows/pages.yaml/badge.svg)](https://github.com/decaf-ts/ts-workspace/actions/workflows/pages.yaml)
15
+ [![.github/workflows/release-on-tag.yaml](https://github.com/decaf-ts/ts-workspace/actions/workflows/release-on-tag.yaml/badge.svg?event=release)](https://github.com/decaf-ts/ts-workspace/actions/workflows/release-on-tag.yaml)
16
+
17
+ ![Open Issues](https://img.shields.io/github/issues/decaf-ts/ts-workspace.svg)
18
+ ![Closed Issues](https://img.shields.io/github/issues-closed/decaf-ts/ts-workspace.svg)
19
+ ![Pull Requests](https://img.shields.io/github/issues-pr-closed/decaf-ts/ts-workspace.svg)
20
+ ![Maintained](https://img.shields.io/badge/Maintained%3F-yes-green.svg)
21
+
22
+ ![Forks](https://img.shields.io/github/forks/decaf-ts/ts-workspace.svg)
23
+ ![Stars](https://img.shields.io/github/stars/decaf-ts/ts-workspace.svg)
24
+ ![Watchers](https://img.shields.io/github/watchers/decaf-ts/ts-workspace.svg)
25
+
26
+ ![Node Version](https://img.shields.io/badge/dynamic/json.svg?url=https%3A%2F%2Fraw.githubusercontent.com%2Fbadges%2Fshields%2Fmaster%2Fpackage.json&label=Node&query=$.engines.node&colorB=blue)
27
+ ![NPM Version](https://img.shields.io/badge/dynamic/json.svg?url=https%3A%2F%2Fraw.githubusercontent.com%2Fbadges%2Fshields%2Fmaster%2Fpackage.json&label=NPM&query=$.engines.npm&colorB=purple)
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
+ [![Decorator Validation Readme Card](https://github-readme-stats.vercel.app/api/pin/?username=decaf-ts&repo=decorator-validation)](https://github.com/decaf-ts/decorator-validation)
46
+
47
+ [![Decaf Readme Card](https://github-readme-stats.vercel.app/api/pin/?username=decaf-ts&repo=decaf-ts)](https://github.com/decaf-ts/decaf-ts)
48
+
49
+
50
+ ### Social
51
+
52
+ [![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/decaf-ts/)
53
+
54
+
55
+
56
+
57
+ #### Languages
58
+
59
+ ![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)
60
+ ![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black)
61
+ ![NodeJS](https://img.shields.io/badge/Node.js-43853D?style=for-the-badge&logo=node.js&logoColor=white)
62
+ ![ShellScript](https://img.shields.io/badge/Shell_Script-121011?style=for-the-badge&logo=gnu-bash&logoColor=white)
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...
@@ -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/IHpvZGlmeSgoZGVjb3JhdG9yRGF0YVtWYWxpZGF0aW9uS2V5cy5MSVNUXSBhcyBMaXN0TWV0YWRhdGEpLmNsYXp6KVxuICAgICAgICA6IFpvZEFueVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHByb3BzXSBvZiBPYmplY3QuZW50cmllcyhkZWNvcmF0b3JEYXRhKS5maWx0ZXIoXG4gICAgICAoW2tdKSA9PiAhaXNSZXNlcnZlZEtleShrKVxuICAgICkpIHtcbiAgICAgIHpvZCA9IHpvZGlmeVZhbGlkYXRpb24oem9kLCBrZXksIHByb3BzKTtcbiAgICB9XG5cbiAgICBpZiAoIWRlY29yYXRvckRhdGFbVmFsaWRhdGlvbktleXMuUkVRVUlSRURdKSB7XG4gICAgICB6b2QgPSB6b2Qub3B0aW9uYWwoKTtcbiAgICB9XG5cbiAgICByZXN1bHRbcHJvcF0gPSB6b2Q7XG4gIH1cblxuICByZXR1cm4gei5vYmplY3QocmVzdWx0KTtcbn07XG4iLCJleHBvcnQgKiBmcm9tIFwiLi9tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3ZlcnJpZGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgcmVmbGVjdGlvbiBwYWNrYWdlXG4gKiBAc3VtbWFyeSBTdG9yZXMgdGhlIHNlbWFudGljIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBwYWNrYWdlXG4gKiBAY29uc3QgVkVSU0lPTlxuICogQG1lbWJlck9mIG1vZHVsZTphcy16b2RcbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIiMjVkVSU0lPTiMjXCI7XG4iXSwibmFtZXMiOlsiVmFsaWRhdGlvbktleXMiLCJNb2RlbEtleXMiLCJab2RBbnkiLCJQcmltaXRpdmVzIiwieiIsIk1vZGVsIiwiem9kIiwiUmVmbGVjdGlvbiIsIkRFRkFVTFRfRVJST1JfTUVTU0FHRVMiXSwibWFwcGluZ3MiOiI7Ozs7OztJQW1CQSxNQUFNLFlBQVksR0FBRztJQUNuQixJQUFBQSxrQ0FBYyxDQUFDLFFBQVE7SUFDdkIsSUFBQUEsa0NBQWMsQ0FBQyxJQUFJO0lBQ25CLElBQUFDLDZCQUFTLENBQUMsSUFBSTtLQUNOO0lBRVYsU0FBUyxhQUFhLENBQUMsRUFBVSxFQUFBO0lBQy9CLElBQUEsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQVMsQ0FBQztJQUN6QzthQUVnQixNQUFNLENBQUMsSUFBdUIsRUFBRSxLQUFVQyxVQUFNLEVBQUE7SUFDOUQsSUFBQSxJQUFJLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSTtRQUUvQyxTQUFTLFdBQVcsQ0FBQyxJQUFZLEVBQUE7SUFDL0IsUUFBQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3hCLEtBQUtDLDhCQUFVLENBQUMsTUFBTTtJQUNwQixnQkFBQSxPQUFPQyxLQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNuQixLQUFLRCw4QkFBVSxDQUFDLE1BQU07SUFDcEIsZ0JBQUEsT0FBT0MsS0FBQyxDQUFDLE1BQU0sRUFBRTtnQkFDbkIsS0FBS0QsOEJBQVUsQ0FBQyxNQUFNO0lBQ3BCLGdCQUFBLE9BQU9DLEtBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ25CLEtBQUtELDhCQUFVLENBQUMsT0FBTztJQUNyQixnQkFBQSxPQUFPQyxLQUFDLENBQUMsT0FBTyxFQUFFO2dCQUNwQixLQUFLSixrQ0FBYyxDQUFDLElBQUk7SUFDdEIsZ0JBQUEsT0FBT0ksS0FBQyxDQUFDLElBQUksRUFBRTtJQUNqQixZQUFBLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7SUFDM0IsZ0JBQUEsT0FBT0EsS0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDcEIsWUFBQSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO0lBQ3pCLGdCQUFBLE9BQU9BLEtBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQixTQUFTO29CQUNQLE1BQU0sQ0FBQyxHQUFHQyx5QkFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDTixvQkFBQSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixJQUFJLENBQUEsQ0FBRSxDQUFDOztJQUUvQyxnQkFBQSxJQUFJO3dCQUNGLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFO0lBQzFCLG9CQUFBLE9BQU8sRUFBRTs7b0JBQ1QsT0FBTyxDQUFVLEVBQUU7d0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQSx1QkFBQSxFQUEwQixJQUFJLENBQUssRUFBQSxFQUFBLENBQUMsQ0FBRSxDQUFBLENBQUM7Ozs7O0lBTS9ELElBQUEsSUFBSUMsS0FBUTtJQUNaLElBQUEsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDcEJBLEtBQUcsR0FBR0EsS0FBRyxHQUFHQSxLQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7O0lBR3JELElBQUEsT0FBT0EsS0FBRztJQUNaO2FBRWdCLGdCQUFnQixDQUM5QixHQUFRLEVBQ1IsSUFBWSxFQUNaLE1BQXdCLEVBQUE7UUFFeEIsUUFBUSxJQUFJO1lBQ1YsS0FBS04sa0NBQWMsQ0FBQyxHQUFHO2dCQUNyQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUUsTUFBOEIsQ0FBQ0Esa0NBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyRSxLQUFLQSxrQ0FBYyxDQUFDLFVBQVU7Z0JBQzVCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FDWCxNQUFvQyxDQUFDQSxrQ0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUNqRTtZQUNILEtBQUtBLGtDQUFjLENBQUMsR0FBRztnQkFDckIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFFLE1BQThCLENBQUNBLGtDQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckUsS0FBS0Esa0NBQWMsQ0FBQyxVQUFVO2dCQUM1QixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQ1gsTUFBb0MsQ0FBQ0Esa0NBQWMsQ0FBQyxVQUFVLENBQUMsQ0FDakU7WUFDSCxLQUFLQSxrQ0FBYyxDQUFDLElBQUk7Z0JBQ3RCLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FDbEIsTUFBK0IsQ0FBQ0Esa0NBQWMsQ0FBQyxJQUFJLENBQUMsQ0FDdEQ7WUFDSCxLQUFLQSxrQ0FBYyxDQUFDLE9BQU87Z0JBQ3pCLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FDYixNQUFrQyxDQUFDQSxrQ0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUM1RDtZQUNILEtBQUtBLGtDQUFjLENBQUMsR0FBRztnQkFDckIsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUNiLE1BQWtDLENBQUNBLGtDQUFjLENBQUMsT0FBTyxDQUFDLENBQzVEO1lBQ0gsS0FBS0Esa0NBQWMsQ0FBQyxLQUFLO2dCQUN2QixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQ2IsTUFBa0MsQ0FBQ0Esa0NBQWMsQ0FBQyxPQUFPLENBQUMsQ0FDNUQ7WUFDSCxLQUFLQSxrQ0FBYyxDQUFDLFFBQVE7Z0JBQzFCLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FDYixNQUFrQyxDQUFDQSxrQ0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUM1RDtZQUNILEtBQUtBLGtDQUFjLENBQUMsSUFBSTtJQUN0QixZQUFBLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRTtJQUNuQixRQUFBO0lBQ0UsWUFBQSxPQUFPLEdBQUc7O0lBRWhCO0FBRUFLLDZCQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxZQUFBO1FBQ3RCLE1BQU0sTUFBTSxHQUFtQyxFQUFFO1FBRWpELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7UUFDbkQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07SUFBRSxRQUFBLE9BQU9ELEtBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3hFLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFO0lBQ25ELFFBQUEsSUFDRSxPQUFRLElBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVO0lBQ3pDLFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7Z0JBQ3BCLElBQUksS0FBSyxhQUFhLEVBQ3RCO2dCQUNBOztJQUdGLFFBQUEsTUFBTSxPQUFPLEdBQUdHLHFCQUFVLENBQUMscUJBQXFCLENBQzlDUCxrQ0FBYyxDQUFDLE9BQU8sRUFDdEIsSUFBSSxFQUNKLElBQUksRUFDSixLQUFLLEVBQ0wsSUFBSSxDQUNMO0lBRUQsUUFBQSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FDN0MsQ0FBQyxLQUEwQixFQUFFLEVBQUUsS0FBSTtJQUNqQyxZQUFBLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtJQUN6QixZQUFBLElBQUksR0FBRyxLQUFLQyw2QkFBUyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQ0Qsa0NBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtJQUN6RCxnQkFBQSxLQUFLLENBQUNBLGtDQUFjLENBQUMsSUFBSSxDQUFDLEdBQUc7SUFDM0Isb0JBQUEsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQWMsQ0FBQzt3QkFDbkMsT0FBTyxFQUFFUSwwQ0FBc0IsQ0FBQyxJQUFJO0lBQ3BDLG9CQUFBLFdBQVcsRUFBRSw4Q0FBOEM7cUJBQzVEOztxQkFDSTtJQUNMLGdCQUFBLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLOztJQUVwQixZQUFBLE9BQU8sS0FBSzthQUNiLEVBQ0QsRUFBRSxDQUNIO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUN0Qzs7WUFHRixJQUFJRixLQUFHLEdBQVFKLFVBQU07WUFFckIsTUFBTSxRQUFRLEdBQWlCLGFBQWEsQ0FDMUNGLGtDQUFjLENBQUMsSUFBSSxDQUNKO1lBRWpCLElBQUksQ0FBQyxRQUFRLEVBQUU7SUFDYixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQSx3QkFBQSxDQUEwQixDQUFDOztJQUc3QyxRQUFBTSxLQUFHLEdBQUcsTUFBTSxDQUNWLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLGFBQWEsQ0FBQ04sa0NBQWMsQ0FBQyxJQUFJO2tCQUM3QixNQUFNLENBQUUsYUFBYSxDQUFDQSxrQ0FBYyxDQUFDLElBQUksQ0FBa0IsQ0FBQyxLQUFLO2tCQUNqRUUsVUFBTSxDQUNYO0lBRUQsUUFBQSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQzdELENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FDM0IsRUFBRTtnQkFDREksS0FBRyxHQUFHLGdCQUFnQixDQUFDQSxLQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQzs7WUFHekMsSUFBSSxDQUFDLGFBQWEsQ0FBQ04sa0NBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUMzQyxZQUFBTSxLQUFHLEdBQUdBLEtBQUcsQ0FBQyxRQUFRLEVBQUU7O0lBR3RCLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHQSxLQUFHOztJQUdwQixJQUFBLE9BQU9GLEtBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3pCLENBQUM7O0lDM0xEOzs7OztJQUtHO0FBQ0ksVUFBTSxPQUFPLEdBQUc7Ozs7Ozs7Ozs7In0=
@@ -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";
@@ -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
@@ -0,0 +1,6 @@
1
+ import { ZodObject } from "zod";
2
+ declare module "@decaf-ts/decorator-validation" {
3
+ interface Model {
4
+ toZod(): ZodObject;
5
+ }
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFpvZE9iamVjdCB9IGZyb20gXCJ6b2RcIjtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIiB7XG4gIGludGVyZmFjZSBNb2RlbCB7XG4gICAgdG9ab2QoKTogWm9kT2JqZWN0O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { ValidatorOptions } from "@decaf-ts/decorator-validation";
2
+ export declare function zodify(type: string | string[], zz?: any): any;
3
+ export declare function zodifyValidation(zod: any, type: string, values: ValidatorOptions): any;
@@ -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,6 @@
1
+ import { ZodObject } from "zod";
2
+ declare module "@decaf-ts/decorator-validation" {
3
+ interface Model {
4
+ toZod(): ZodObject;
5
+ }
6
+ }
@@ -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
@@ -0,0 +1,3 @@
1
+ import { ValidatorOptions } from "@decaf-ts/decorator-validation";
2
+ export declare function zodify(type: string | string[], zz?: any): any;
3
+ export declare function zodifyValidation(zod: any, type: string, values: ValidatorOptions): any;
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
+ }