xansql 1.0.8 → 1.0.9
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/core/Xansql.cjs +7 -8
- package/core/Xansql.cjs.map +1 -1
- package/core/Xansql.d.ts +2 -3
- package/core/Xansql.mjs +7 -8
- package/core/Xansql.mjs.map +1 -1
- package/core/classes/ForeignInfo.cjs +3 -2
- package/core/classes/ForeignInfo.cjs.map +1 -1
- package/core/classes/ForeignInfo.d.ts +1 -2
- package/core/classes/ForeignInfo.mjs +3 -2
- package/core/classes/ForeignInfo.mjs.map +1 -1
- package/core/classes/Migration/TableMigration.cjs +24 -15
- package/core/classes/Migration/TableMigration.cjs.map +1 -1
- package/core/classes/Migration/TableMigration.mjs +25 -16
- package/core/classes/Migration/TableMigration.mjs.map +1 -1
- package/core/classes/Migration/index.cjs +13 -10
- package/core/classes/Migration/index.cjs.map +1 -1
- package/core/classes/Migration/index.mjs +14 -11
- package/core/classes/Migration/index.mjs.map +1 -1
- package/core/classes/{ModelFormatter.cjs → ModelFactory.cjs} +82 -56
- package/core/classes/ModelFactory.cjs.map +1 -0
- package/core/classes/{ModelFormatter.d.ts → ModelFactory.d.ts} +7 -2
- package/core/classes/{ModelFormatter.mjs → ModelFactory.mjs} +82 -56
- package/core/classes/ModelFactory.mjs.map +1 -0
- package/core/types.d.ts +1 -1
- package/dialect/MysqlDialect.cjs +7 -4
- package/dialect/MysqlDialect.cjs.map +1 -1
- package/dialect/MysqlDialect.d.ts +7 -4
- package/dialect/MysqlDialect.mjs +7 -4
- package/dialect/MysqlDialect.mjs.map +1 -1
- package/dialect/PostgresDialect.cjs +5 -2
- package/dialect/PostgresDialect.cjs.map +1 -1
- package/dialect/PostgresDialect.d.ts +5 -2
- package/dialect/PostgresDialect.mjs +5 -2
- package/dialect/PostgresDialect.mjs.map +1 -1
- package/dialect/SqliteDialect.cjs +3 -2
- package/dialect/SqliteDialect.cjs.map +1 -1
- package/dialect/SqliteDialect.d.ts +3 -2
- package/dialect/SqliteDialect.mjs +3 -2
- package/dialect/SqliteDialect.mjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.cjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.mjs.map +1 -1
- package/dialect/XansqlBridge/base.cjs +10 -5
- package/dialect/XansqlBridge/base.cjs.map +1 -1
- package/dialect/XansqlBridge/base.mjs +10 -5
- package/dialect/XansqlBridge/base.mjs.map +1 -1
- package/model/Args/WhereArgs.cjs +5 -8
- package/model/Args/WhereArgs.cjs.map +1 -1
- package/model/Args/WhereArgs.mjs +6 -9
- package/model/Args/WhereArgs.mjs.map +1 -1
- package/model/Base.cjs +2 -1
- package/model/Base.cjs.map +1 -1
- package/model/Base.mjs +2 -1
- package/model/Base.mjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.cjs +2 -1
- package/model/Executer/Aggregate/SelectArgs.cjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.mjs +2 -1
- package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -1
- package/model/Executer/Aggregate/index.cjs +4 -4
- package/model/Executer/Aggregate/index.cjs.map +1 -1
- package/model/Executer/Aggregate/index.mjs +4 -4
- package/model/Executer/Aggregate/index.mjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.cjs +9 -5
- package/model/Executer/Create/CreateDataArgs.cjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.mjs +10 -6
- package/model/Executer/Create/CreateDataArgs.mjs.map +1 -1
- package/model/Executer/Create/index.cjs +1 -1
- package/model/Executer/Create/index.cjs.map +1 -1
- package/model/Executer/Create/index.mjs +1 -1
- package/model/Executer/Create/index.mjs.map +1 -1
- package/model/Executer/Delete/index.cjs +2 -1
- package/model/Executer/Delete/index.cjs.map +1 -1
- package/model/Executer/Delete/index.mjs +2 -1
- package/model/Executer/Delete/index.mjs.map +1 -1
- package/model/Executer/Find/SelectArgs.cjs +3 -3
- package/model/Executer/Find/SelectArgs.cjs.map +1 -1
- package/model/Executer/Find/SelectArgs.mjs +3 -3
- package/model/Executer/Find/SelectArgs.mjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.cjs +4 -4
- package/model/Executer/Update/UpdateDataArgs.cjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.mjs +5 -5
- package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -1
- package/model/Executer/Update/index.cjs +1 -1
- package/model/Executer/Update/index.cjs.map +1 -1
- package/model/Executer/Update/index.mjs +1 -1
- package/model/Executer/Update/index.mjs.map +1 -1
- package/model/include/ValueFormatter.cjs +72 -17
- package/model/include/ValueFormatter.cjs.map +1 -1
- package/model/include/ValueFormatter.d.ts +1 -1
- package/model/include/ValueFormatter.mjs +72 -17
- package/model/include/ValueFormatter.mjs.map +1 -1
- package/model/index.cjs +8 -7
- package/model/index.cjs.map +1 -1
- package/model/index.mjs +8 -7
- package/model/index.mjs.map +1 -1
- package/package.json +12 -7
- package/utils/index.cjs +5 -2
- package/utils/index.cjs.map +1 -1
- package/utils/index.d.ts +2 -1
- package/utils/index.mjs +5 -3
- package/utils/index.mjs.map +1 -1
- package/xt/additional/IP.cjs +22 -0
- package/xt/additional/IP.cjs.map +1 -0
- package/xt/additional/IP.d.ts +6 -0
- package/xt/additional/IP.mjs +20 -0
- package/xt/additional/IP.mjs.map +1 -0
- package/xt/additional/Name.cjs +21 -0
- package/xt/additional/Name.cjs.map +1 -0
- package/xt/additional/Name.d.ts +6 -0
- package/xt/additional/Name.mjs +19 -0
- package/xt/additional/Name.mjs.map +1 -0
- package/xt/additional/Password.cjs +25 -0
- package/xt/additional/Password.cjs.map +1 -0
- package/xt/additional/Password.d.ts +6 -0
- package/xt/additional/Password.mjs +23 -0
- package/xt/additional/Password.mjs.map +1 -0
- package/xt/additional/Phone.cjs +21 -0
- package/xt/additional/Phone.cjs.map +1 -0
- package/xt/additional/Phone.d.ts +6 -0
- package/xt/additional/Phone.mjs +19 -0
- package/xt/additional/Phone.mjs.map +1 -0
- package/xt/additional/Photo.cjs +21 -0
- package/xt/additional/Photo.cjs.map +1 -0
- package/xt/additional/Photo.d.ts +6 -0
- package/xt/additional/Photo.mjs +19 -0
- package/xt/additional/Photo.mjs.map +1 -0
- package/xt/additional/Slug.cjs +21 -0
- package/xt/additional/Slug.cjs.map +1 -0
- package/xt/additional/Slug.d.ts +6 -0
- package/xt/additional/Slug.mjs +19 -0
- package/xt/additional/Slug.mjs.map +1 -0
- package/xt/additional/Url.cjs +26 -0
- package/xt/additional/Url.cjs.map +1 -0
- package/xt/additional/Url.d.ts +6 -0
- package/xt/additional/Url.mjs +24 -0
- package/xt/additional/Url.mjs.map +1 -0
- package/xt/additional/Username.cjs +21 -0
- package/xt/additional/Username.cjs.map +1 -0
- package/xt/additional/Username.d.ts +6 -0
- package/xt/additional/Username.mjs +19 -0
- package/xt/additional/Username.mjs.map +1 -0
- package/xt/fields/Array.cjs +9 -2
- package/xt/fields/Array.cjs.map +1 -1
- package/xt/fields/Array.d.ts +2 -0
- package/xt/fields/Array.mjs +9 -2
- package/xt/fields/Array.mjs.map +1 -1
- package/xt/fields/Boolean.cjs +10 -5
- package/xt/fields/Boolean.cjs.map +1 -1
- package/xt/fields/Boolean.d.ts +2 -0
- package/xt/fields/Boolean.mjs +10 -5
- package/xt/fields/Boolean.mjs.map +1 -1
- package/xt/fields/Date.cjs +12 -12
- package/xt/fields/Date.cjs.map +1 -1
- package/xt/fields/Date.d.ts +2 -0
- package/xt/fields/Date.mjs +12 -12
- package/xt/fields/Date.mjs.map +1 -1
- package/xt/fields/Enum.cjs +10 -4
- package/xt/fields/Enum.cjs.map +1 -1
- package/xt/fields/Enum.d.ts +2 -0
- package/xt/fields/Enum.mjs +10 -4
- package/xt/fields/Enum.mjs.map +1 -1
- package/xt/fields/File.cjs +9 -2
- package/xt/fields/File.cjs.map +1 -1
- package/xt/fields/File.d.ts +2 -0
- package/xt/fields/File.mjs +9 -2
- package/xt/fields/File.mjs.map +1 -1
- package/xt/fields/IDField.cjs +8 -0
- package/xt/fields/IDField.cjs.map +1 -1
- package/xt/fields/IDField.d.ts +2 -0
- package/xt/fields/IDField.mjs +8 -0
- package/xt/fields/IDField.mjs.map +1 -1
- package/xt/fields/Number.cjs +10 -5
- package/xt/fields/Number.cjs.map +1 -1
- package/xt/fields/Number.d.ts +2 -0
- package/xt/fields/Number.mjs +10 -5
- package/xt/fields/Number.mjs.map +1 -1
- package/xt/fields/Object.cjs +10 -5
- package/xt/fields/Object.cjs.map +1 -1
- package/xt/fields/Object.d.ts +2 -0
- package/xt/fields/Object.mjs +10 -5
- package/xt/fields/Object.mjs.map +1 -1
- package/xt/fields/Record.cjs +10 -5
- package/xt/fields/Record.cjs.map +1 -1
- package/xt/fields/Record.d.ts +2 -0
- package/xt/fields/Record.mjs +10 -5
- package/xt/fields/Record.mjs.map +1 -1
- package/xt/fields/Schema.cjs +12 -1
- package/xt/fields/Schema.cjs.map +1 -1
- package/xt/fields/Schema.d.ts +4 -1
- package/xt/fields/Schema.mjs +12 -1
- package/xt/fields/Schema.mjs.map +1 -1
- package/xt/fields/String.cjs +12 -9
- package/xt/fields/String.cjs.map +1 -1
- package/xt/fields/String.d.ts +2 -0
- package/xt/fields/String.mjs +12 -9
- package/xt/fields/String.mjs.map +1 -1
- package/xt/fields/Tuple.cjs +10 -5
- package/xt/fields/Tuple.cjs.map +1 -1
- package/xt/fields/Tuple.d.ts +2 -0
- package/xt/fields/Tuple.mjs +10 -5
- package/xt/fields/Tuple.mjs.map +1 -1
- package/xt/fields/Union.cjs +10 -5
- package/xt/fields/Union.cjs.map +1 -1
- package/xt/fields/Union.d.ts +2 -0
- package/xt/fields/Union.mjs +10 -5
- package/xt/fields/Union.mjs.map +1 -1
- package/xt/index.cjs +16 -100
- package/xt/index.cjs.map +1 -1
- package/xt/index.d.ts +16 -9
- package/xt/index.mjs +16 -100
- package/xt/index.mjs.map +1 -1
- package/core/classes/ModelFormatter.cjs.map +0 -1
- package/core/classes/ModelFormatter.mjs.map +0 -1
package/xt/index.cjs
CHANGED
|
@@ -13,7 +13,14 @@ var xt_fields_Union = require('./fields/Union.cjs');
|
|
|
13
13
|
var xt_fields_IDField = require('./fields/IDField.cjs');
|
|
14
14
|
var xt_fields_File = require('./fields/File.cjs');
|
|
15
15
|
var xt_fields_Schema = require('./fields/Schema.cjs');
|
|
16
|
-
var
|
|
16
|
+
var xt_additional_Name = require('./additional/Name.cjs');
|
|
17
|
+
var xt_additional_Password = require('./additional/Password.cjs');
|
|
18
|
+
var xt_additional_Username = require('./additional/Username.cjs');
|
|
19
|
+
var xt_additional_Slug = require('./additional/Slug.cjs');
|
|
20
|
+
var xt_additional_Url = require('./additional/Url.cjs');
|
|
21
|
+
var xt_additional_Photo = require('./additional/Photo.cjs');
|
|
22
|
+
var xt_additional_Phone = require('./additional/Phone.cjs');
|
|
23
|
+
var xt_additional_IP = require('./additional/IP.cjs');
|
|
17
24
|
|
|
18
25
|
const xt = {
|
|
19
26
|
id: () => new xt_fields_IDField(),
|
|
@@ -32,114 +39,23 @@ const xt = {
|
|
|
32
39
|
createdAt: () => xt.date().create(),
|
|
33
40
|
updatedAt: () => xt.date().update(),
|
|
34
41
|
// Custom Types
|
|
35
|
-
name: () =>
|
|
36
|
-
|
|
37
|
-
inst.set("name", (v) => {
|
|
38
|
-
const nameRegex = /^[a-zA-Z\s'-]+$/;
|
|
39
|
-
if (!nameRegex.test(v)) {
|
|
40
|
-
throw new Error("Invalid name format.");
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
return inst;
|
|
44
|
-
},
|
|
45
|
-
password: () => {
|
|
46
|
-
const inst = xt.string().min(8).max(64).index().transform(v => utils_sha256(v).slice(0, 64));
|
|
47
|
-
inst.strong = function () {
|
|
48
|
-
inst.set("strong", (v) => {
|
|
49
|
-
const hasUpperCase = /[A-Z]/.test(v);
|
|
50
|
-
const hasLowerCase = /[a-z]/.test(v);
|
|
51
|
-
const hasNumber = /[0-9]/.test(v);
|
|
52
|
-
const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(v);
|
|
53
|
-
if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {
|
|
54
|
-
throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
return this;
|
|
58
|
-
};
|
|
59
|
-
return inst;
|
|
60
|
-
},
|
|
42
|
+
name: () => new xt_additional_Name,
|
|
43
|
+
password: () => new xt_additional_Password,
|
|
61
44
|
email: () => xt.string().email().index().unique(),
|
|
62
45
|
status: (statuses) => xt.enum(statuses).index(),
|
|
63
46
|
gender: () => xt.enum(['male', 'female', 'other']).index(),
|
|
64
47
|
role: (roles) => xt.enum(roles).index(),
|
|
65
|
-
username: () =>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (!usernameRegex.test(v)) {
|
|
70
|
-
throw new Error("Invalid username format.");
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
return inst;
|
|
74
|
-
},
|
|
75
|
-
slug: () => {
|
|
76
|
-
const inst = xt.string().index().min(3).max(100);
|
|
77
|
-
inst.set("slug", (v) => {
|
|
78
|
-
const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
79
|
-
if (!slugRegex.test(v)) {
|
|
80
|
-
throw new Error("Invalid slug format.");
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
return inst;
|
|
84
|
-
},
|
|
85
|
-
url: () => {
|
|
86
|
-
const inst = xt.string().max(2048).min(10);
|
|
87
|
-
inst.set("url", (v) => {
|
|
88
|
-
try {
|
|
89
|
-
new URL(v);
|
|
90
|
-
}
|
|
91
|
-
catch (_a) {
|
|
92
|
-
throw new Error("Invalid URL format.");
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
return inst;
|
|
96
|
-
},
|
|
97
|
-
photo: () => {
|
|
98
|
-
const inst = xt.file().maxSize(2 * 1024 * 1024); // 2 MB
|
|
99
|
-
inst.set("photo", (v) => {
|
|
100
|
-
const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
|
|
101
|
-
if (!allowedTypes.includes(v.type)) {
|
|
102
|
-
throw new Error("Invalid photo file type.");
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
return inst;
|
|
106
|
-
},
|
|
107
|
-
avatar: () => {
|
|
108
|
-
const inst = xt.file().maxSize(2 * 1024 * 1024); // 1 MB
|
|
109
|
-
inst.set("avatar", (v) => {
|
|
110
|
-
const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
|
|
111
|
-
if (!allowedTypes.includes(v.type)) {
|
|
112
|
-
throw new Error("Invalid avatar file type.");
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
return inst;
|
|
116
|
-
},
|
|
48
|
+
username: () => new xt_additional_Username,
|
|
49
|
+
slug: () => new xt_additional_Slug,
|
|
50
|
+
url: () => new xt_additional_Url,
|
|
51
|
+
photo: () => new xt_additional_Photo,
|
|
117
52
|
amount: () => xt.number().float().min(0).max(1000000000),
|
|
118
|
-
phone: () =>
|
|
119
|
-
const inst = xt.string().min(7).max(15);
|
|
120
|
-
inst.set("phone", (v) => {
|
|
121
|
-
const phoneRegex = /^\+?[1-9]\d{1,14}$/;
|
|
122
|
-
if (!phoneRegex.test(v)) {
|
|
123
|
-
throw new Error("Invalid phone number format.");
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
return inst;
|
|
127
|
-
},
|
|
53
|
+
phone: () => new xt_additional_Phone,
|
|
128
54
|
title: () => xt.string().min(1).max(200),
|
|
129
55
|
description: () => xt.string().max(1000),
|
|
130
56
|
type: (types) => xt.enum(types).index(),
|
|
131
57
|
metadata: () => xt.record(xt.string(), xt.union([xt.string(), xt.number(), xt.boolean(), xt.date()])),
|
|
132
|
-
ip: () =>
|
|
133
|
-
const inst = xt.string().index();
|
|
134
|
-
inst.set("ip", (v) => {
|
|
135
|
-
const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
|
|
136
|
-
const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9]))$/;
|
|
137
|
-
if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {
|
|
138
|
-
throw new Error("Invalid IP address format.");
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
return inst;
|
|
142
|
-
},
|
|
58
|
+
ip: () => new xt_additional_IP,
|
|
143
59
|
key: () => xt.string().max(100).index().unique(),
|
|
144
60
|
value: () => xt.string().max(1000),
|
|
145
61
|
token: () => xt.string(64).index().unique(),
|
package/xt/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/xt/index.ts"],"sourcesContent":["import { XVEnumValues, XVObjectType } from \"xanv\";\nimport XqlString from \"./fields/String\";\nimport XqlBoolean from \"./fields/Boolean\";\nimport XqlArray from \"./fields/Array\";\nimport XqlDate from \"./fields/Date\";\nimport XqlEnum from \"./fields/Enum\";\nimport XqlNumber from \"./fields/Number\";\nimport XqlObject from \"./fields/Object\";\nimport XqlRecord from \"./fields/Record\";\nimport XqlTuple from \"./fields/Tuple\";\nimport XqlUnion from \"./fields/Union\";\nimport XqlIDField from \"./fields/IDField\";\nimport XqlFile from \"./fields/File\";\nimport XqlSchema from \"./fields/Schema\";\nimport { XqlFields } from \"./types\";\nimport sha256 from \"../utils/sha256\";\n\nconst xt = {\n id: () => new XqlIDField(),\n array: (type: XqlFields, length?: number) => new XqlArray(type as any, length),\n boolean: () => new XqlBoolean(),\n date: () => new XqlDate(),\n enum: (values: XVEnumValues) => new XqlEnum(values),\n number: (length?: number) => new XqlNumber(length),\n object: (arg?: XVObjectType) => new XqlObject(arg),\n record: (key: XqlFields, value: XqlFields) => new XqlRecord(key as any, value as any),\n string: (length?: number) => new XqlString(length),\n tuple: (type: XqlFields[]) => new XqlTuple(type as any),\n union: (type: XqlFields[]) => new XqlUnion(type as any),\n file: (size?: number) => new XqlFile(size),\n schema: (table: string, column: string) => new XqlSchema(table, column),\n\n createdAt: () => xt.date().create(),\n updatedAt: () => xt.date().update(),\n // Custom Types\n name: () => {\n const inst = xt.string().min(1).max(100)\n inst.set(\"name\" as any, (v: any) => {\n const nameRegex = /^[a-zA-Z\\s'-]+$/;\n if (!nameRegex.test(v)) {\n throw new Error(\"Invalid name format.\");\n }\n });\n return inst;\n },\n password: () => {\n const inst = xt.string().min(8).max(64).index().transform(v => sha256(v).slice(0, 64));\n (inst as any).strong = function () {\n inst.set(\"strong\" as any, (v: any) => {\n const hasUpperCase = /[A-Z]/.test(v);\n const hasLowerCase = /[a-z]/.test(v);\n const hasNumber = /[0-9]/.test(v);\n const hasSpecialChar = /[!@#$%^&*(),.?\":{}|<>]/.test(v);\n\n if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {\n throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');\n }\n });\n return this;\n }\n return inst;\n },\n email: () => xt.string().email().index().unique(),\n status: (statuses: string[]) => xt.enum(statuses).index(),\n gender: () => xt.enum(['male', 'female', 'other']).index(),\n role: (roles: string[]) => xt.enum(roles).index(),\n username: () => {\n const inst = xt.string().index().min(3).max(30).index().unique()\n inst.set(\"username\" as any, (v: any) => {\n const usernameRegex = /^[a-zA-Z0-9._-]{3,30}$/;\n if (!usernameRegex.test(v)) {\n throw new Error(\"Invalid username format.\");\n }\n });\n return inst;\n },\n slug: () => {\n const inst = xt.string().index().min(3).max(100)\n inst.set(\"slug\" as any, (v: any) => {\n const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n if (!slugRegex.test(v)) {\n throw new Error(\"Invalid slug format.\");\n }\n });\n return inst;\n },\n url: () => {\n const inst = xt.string().max(2048).min(10)\n inst.set(\"url\" as any, (v: any) => {\n try {\n new URL(v);\n } catch {\n throw new Error(\"Invalid URL format.\");\n }\n });\n return inst;\n },\n photo: () => {\n const inst = xt.file().maxSize(2 * 1024 * 1024); // 2 MB\n inst.set(\"photo\" as any, (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid photo file type.\");\n }\n });\n return inst;\n },\n avatar: () => {\n const inst = xt.file().maxSize(2 * 1024 * 1024); // 1 MB\n inst.set(\"avatar\" as any, (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid avatar file type.\");\n }\n });\n return inst;\n },\n amount: () => xt.number().float().min(0).max(1000000000),\n phone: () => {\n const inst = xt.string().min(7).max(15)\n inst.set(\"phone\" as any, (v: any) => {\n const phoneRegex = /^\\+?[1-9]\\d{1,14}$/;\n if (!phoneRegex.test(v)) {\n throw new Error(\"Invalid phone number format.\");\n }\n });\n return inst;\n },\n title: () => xt.string().min(1).max(200),\n description: () => xt.string().max(1000),\n type: (types: string[]) => xt.enum(types).index(),\n metadata: () => xt.record(xt.string(), xt.union([xt.string(), xt.number(), xt.boolean(), xt.date()])),\n ip: () => {\n const inst = xt.string().index()\n inst.set(\"ip\" as any, (v: any) => {\n const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9]))$/;\n if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {\n throw new Error(\"Invalid IP address format.\");\n }\n });\n return inst;\n },\n\n key: () => xt.string().max(100).index().unique(),\n value: () => xt.string().max(1000),\n token: () => xt.string(64).index().unique(),\n}\n\nexport default xt;"],"names":["XqlIDField","XqlArray","XqlBoolean","XqlDate","XqlEnum","XqlNumber","XqlObject","XqlRecord","XqlString","XqlTuple","XqlUnion","XqlFile","XqlSchema","sha256"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/xt/index.ts"],"sourcesContent":["import { XVEnumValues, XVObjectType } from \"xanv\";\nimport XqlString from \"./fields/String\";\nimport XqlBoolean from \"./fields/Boolean\";\nimport XqlArray from \"./fields/Array\";\nimport XqlDate from \"./fields/Date\";\nimport XqlEnum from \"./fields/Enum\";\nimport XqlNumber from \"./fields/Number\";\nimport XqlObject from \"./fields/Object\";\nimport XqlRecord from \"./fields/Record\";\nimport XqlTuple from \"./fields/Tuple\";\nimport XqlUnion from \"./fields/Union\";\nimport XqlIDField from \"./fields/IDField\";\nimport XqlFile from \"./fields/File\";\nimport XqlSchema from \"./fields/Schema\";\nimport { XqlFields } from \"./types\";\nimport XqlName from \"./additional/Name\";\nimport XqlPassword from \"./additional/Password\";\nimport XqlUsername from \"./additional/Username\";\nimport XqlSlug from \"./additional/Slug\";\nimport XqlUrl from \"./additional/Url\";\nimport XqlPhoto from \"./additional/Photo\";\nimport XqlPhone from \"./additional/Phone\";\nimport XqlIP from \"./additional/IP\";\n\nconst xt = {\n id: () => new XqlIDField(),\n array: (type: XqlFields, length?: number) => new XqlArray(type as any, length),\n boolean: () => new XqlBoolean(),\n date: () => new XqlDate(),\n enum: (values: XVEnumValues) => new XqlEnum(values),\n number: (length?: number) => new XqlNumber(length),\n object: (arg?: XVObjectType) => new XqlObject(arg),\n record: (key: XqlFields, value: XqlFields) => new XqlRecord(key as any, value as any),\n string: (length?: number) => new XqlString(length),\n tuple: (type: XqlFields[]) => new XqlTuple(type as any),\n union: (type: XqlFields[]) => new XqlUnion(type as any),\n file: (size?: number) => new XqlFile(size),\n schema: (table: string, column: string) => new XqlSchema(table, column),\n\n createdAt: () => xt.date().create(),\n updatedAt: () => xt.date().update(),\n // Custom Types\n name: () => new XqlName,\n password: () => new XqlPassword,\n email: () => xt.string().email().index().unique(),\n status: (statuses: string[]) => xt.enum(statuses).index(),\n gender: () => xt.enum(['male', 'female', 'other']).index(),\n role: (roles: string[]) => xt.enum(roles).index(),\n username: () => new XqlUsername,\n slug: () => new XqlSlug,\n url: () => new XqlUrl,\n photo: () => new XqlPhoto,\n amount: () => xt.number().float().min(0).max(1000000000),\n phone: () => new XqlPhone,\n title: () => xt.string().min(1).max(200),\n description: () => xt.string().max(1000),\n type: (types: string[]) => xt.enum(types).index(),\n metadata: () => xt.record(xt.string(), xt.union([xt.string(), xt.number(), xt.boolean(), xt.date()])),\n ip: () => new XqlIP,\n key: () => xt.string().max(100).index().unique(),\n value: () => xt.string().max(1000),\n token: () => xt.string(64).index().unique(),\n}\n\nexport default xt;"],"names":["XqlIDField","XqlArray","XqlBoolean","XqlDate","XqlEnum","XqlNumber","XqlObject","XqlRecord","XqlString","XqlTuple","XqlUnion","XqlFile","XqlSchema","XqlName","XqlPassword","XqlUsername","XqlSlug","XqlUrl","XqlPhoto","XqlPhone","XqlIP"],"mappings":"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"}
|
package/xt/index.d.ts
CHANGED
|
@@ -13,6 +13,14 @@ import XqlIDField from "./fields/IDField";
|
|
|
13
13
|
import XqlFile from "./fields/File";
|
|
14
14
|
import XqlSchema from "./fields/Schema";
|
|
15
15
|
import { XqlFields } from "./types";
|
|
16
|
+
import XqlName from "./additional/Name";
|
|
17
|
+
import XqlPassword from "./additional/Password";
|
|
18
|
+
import XqlUsername from "./additional/Username";
|
|
19
|
+
import XqlSlug from "./additional/Slug";
|
|
20
|
+
import XqlUrl from "./additional/Url";
|
|
21
|
+
import XqlPhoto from "./additional/Photo";
|
|
22
|
+
import XqlPhone from "./additional/Phone";
|
|
23
|
+
import XqlIP from "./additional/IP";
|
|
16
24
|
declare const xt: {
|
|
17
25
|
id: () => XqlIDField;
|
|
18
26
|
array: (type: XqlFields, length?: number) => XqlArray;
|
|
@@ -29,24 +37,23 @@ declare const xt: {
|
|
|
29
37
|
schema: (table: string, column: string) => XqlSchema;
|
|
30
38
|
createdAt: () => XqlDate;
|
|
31
39
|
updatedAt: () => XqlDate;
|
|
32
|
-
name: () =>
|
|
33
|
-
password: () =>
|
|
40
|
+
name: () => XqlName;
|
|
41
|
+
password: () => XqlPassword;
|
|
34
42
|
email: () => XqlString;
|
|
35
43
|
status: (statuses: string[]) => XqlEnum;
|
|
36
44
|
gender: () => XqlEnum;
|
|
37
45
|
role: (roles: string[]) => XqlEnum;
|
|
38
|
-
username: () =>
|
|
39
|
-
slug: () =>
|
|
40
|
-
url: () =>
|
|
41
|
-
photo: () =>
|
|
42
|
-
avatar: () => XqlFile;
|
|
46
|
+
username: () => XqlUsername;
|
|
47
|
+
slug: () => XqlSlug;
|
|
48
|
+
url: () => XqlUrl;
|
|
49
|
+
photo: () => XqlPhoto;
|
|
43
50
|
amount: () => XqlNumber;
|
|
44
|
-
phone: () =>
|
|
51
|
+
phone: () => XqlPhone;
|
|
45
52
|
title: () => XqlString;
|
|
46
53
|
description: () => XqlString;
|
|
47
54
|
type: (types: string[]) => XqlEnum;
|
|
48
55
|
metadata: () => XqlRecord;
|
|
49
|
-
ip: () =>
|
|
56
|
+
ip: () => XqlIP;
|
|
50
57
|
key: () => XqlString;
|
|
51
58
|
value: () => XqlString;
|
|
52
59
|
token: () => XqlString;
|
package/xt/index.mjs
CHANGED
|
@@ -11,7 +11,14 @@ import XqlUnion from './fields/Union.mjs';
|
|
|
11
11
|
import XqlIDField from './fields/IDField.mjs';
|
|
12
12
|
import XqlFile from './fields/File.mjs';
|
|
13
13
|
import XqlSchema from './fields/Schema.mjs';
|
|
14
|
-
import
|
|
14
|
+
import XqlName from './additional/Name.mjs';
|
|
15
|
+
import XqlPassword from './additional/Password.mjs';
|
|
16
|
+
import XqlUsername from './additional/Username.mjs';
|
|
17
|
+
import XqlSlug from './additional/Slug.mjs';
|
|
18
|
+
import XqlUrl from './additional/Url.mjs';
|
|
19
|
+
import XqlPhoto from './additional/Photo.mjs';
|
|
20
|
+
import XqlPhone from './additional/Phone.mjs';
|
|
21
|
+
import XqlIP from './additional/IP.mjs';
|
|
15
22
|
|
|
16
23
|
const xt = {
|
|
17
24
|
id: () => new XqlIDField(),
|
|
@@ -30,114 +37,23 @@ const xt = {
|
|
|
30
37
|
createdAt: () => xt.date().create(),
|
|
31
38
|
updatedAt: () => xt.date().update(),
|
|
32
39
|
// Custom Types
|
|
33
|
-
name: () =>
|
|
34
|
-
|
|
35
|
-
inst.set("name", (v) => {
|
|
36
|
-
const nameRegex = /^[a-zA-Z\s'-]+$/;
|
|
37
|
-
if (!nameRegex.test(v)) {
|
|
38
|
-
throw new Error("Invalid name format.");
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
return inst;
|
|
42
|
-
},
|
|
43
|
-
password: () => {
|
|
44
|
-
const inst = xt.string().min(8).max(64).index().transform(v => sha256(v).slice(0, 64));
|
|
45
|
-
inst.strong = function () {
|
|
46
|
-
inst.set("strong", (v) => {
|
|
47
|
-
const hasUpperCase = /[A-Z]/.test(v);
|
|
48
|
-
const hasLowerCase = /[a-z]/.test(v);
|
|
49
|
-
const hasNumber = /[0-9]/.test(v);
|
|
50
|
-
const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(v);
|
|
51
|
-
if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {
|
|
52
|
-
throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
return this;
|
|
56
|
-
};
|
|
57
|
-
return inst;
|
|
58
|
-
},
|
|
40
|
+
name: () => new XqlName,
|
|
41
|
+
password: () => new XqlPassword,
|
|
59
42
|
email: () => xt.string().email().index().unique(),
|
|
60
43
|
status: (statuses) => xt.enum(statuses).index(),
|
|
61
44
|
gender: () => xt.enum(['male', 'female', 'other']).index(),
|
|
62
45
|
role: (roles) => xt.enum(roles).index(),
|
|
63
|
-
username: () =>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (!usernameRegex.test(v)) {
|
|
68
|
-
throw new Error("Invalid username format.");
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
return inst;
|
|
72
|
-
},
|
|
73
|
-
slug: () => {
|
|
74
|
-
const inst = xt.string().index().min(3).max(100);
|
|
75
|
-
inst.set("slug", (v) => {
|
|
76
|
-
const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
77
|
-
if (!slugRegex.test(v)) {
|
|
78
|
-
throw new Error("Invalid slug format.");
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
return inst;
|
|
82
|
-
},
|
|
83
|
-
url: () => {
|
|
84
|
-
const inst = xt.string().max(2048).min(10);
|
|
85
|
-
inst.set("url", (v) => {
|
|
86
|
-
try {
|
|
87
|
-
new URL(v);
|
|
88
|
-
}
|
|
89
|
-
catch (_a) {
|
|
90
|
-
throw new Error("Invalid URL format.");
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
return inst;
|
|
94
|
-
},
|
|
95
|
-
photo: () => {
|
|
96
|
-
const inst = xt.file().maxSize(2 * 1024 * 1024); // 2 MB
|
|
97
|
-
inst.set("photo", (v) => {
|
|
98
|
-
const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
|
|
99
|
-
if (!allowedTypes.includes(v.type)) {
|
|
100
|
-
throw new Error("Invalid photo file type.");
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
return inst;
|
|
104
|
-
},
|
|
105
|
-
avatar: () => {
|
|
106
|
-
const inst = xt.file().maxSize(2 * 1024 * 1024); // 1 MB
|
|
107
|
-
inst.set("avatar", (v) => {
|
|
108
|
-
const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
|
|
109
|
-
if (!allowedTypes.includes(v.type)) {
|
|
110
|
-
throw new Error("Invalid avatar file type.");
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
return inst;
|
|
114
|
-
},
|
|
46
|
+
username: () => new XqlUsername,
|
|
47
|
+
slug: () => new XqlSlug,
|
|
48
|
+
url: () => new XqlUrl,
|
|
49
|
+
photo: () => new XqlPhoto,
|
|
115
50
|
amount: () => xt.number().float().min(0).max(1000000000),
|
|
116
|
-
phone: () =>
|
|
117
|
-
const inst = xt.string().min(7).max(15);
|
|
118
|
-
inst.set("phone", (v) => {
|
|
119
|
-
const phoneRegex = /^\+?[1-9]\d{1,14}$/;
|
|
120
|
-
if (!phoneRegex.test(v)) {
|
|
121
|
-
throw new Error("Invalid phone number format.");
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
return inst;
|
|
125
|
-
},
|
|
51
|
+
phone: () => new XqlPhone,
|
|
126
52
|
title: () => xt.string().min(1).max(200),
|
|
127
53
|
description: () => xt.string().max(1000),
|
|
128
54
|
type: (types) => xt.enum(types).index(),
|
|
129
55
|
metadata: () => xt.record(xt.string(), xt.union([xt.string(), xt.number(), xt.boolean(), xt.date()])),
|
|
130
|
-
ip: () =>
|
|
131
|
-
const inst = xt.string().index();
|
|
132
|
-
inst.set("ip", (v) => {
|
|
133
|
-
const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
|
|
134
|
-
const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9]))$/;
|
|
135
|
-
if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {
|
|
136
|
-
throw new Error("Invalid IP address format.");
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
return inst;
|
|
140
|
-
},
|
|
56
|
+
ip: () => new XqlIP,
|
|
141
57
|
key: () => xt.string().max(100).index().unique(),
|
|
142
58
|
value: () => xt.string().max(1000),
|
|
143
59
|
token: () => xt.string(64).index().unique(),
|
package/xt/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/xt/index.ts"],"sourcesContent":["import { XVEnumValues, XVObjectType } from \"xanv\";\nimport XqlString from \"./fields/String\";\nimport XqlBoolean from \"./fields/Boolean\";\nimport XqlArray from \"./fields/Array\";\nimport XqlDate from \"./fields/Date\";\nimport XqlEnum from \"./fields/Enum\";\nimport XqlNumber from \"./fields/Number\";\nimport XqlObject from \"./fields/Object\";\nimport XqlRecord from \"./fields/Record\";\nimport XqlTuple from \"./fields/Tuple\";\nimport XqlUnion from \"./fields/Union\";\nimport XqlIDField from \"./fields/IDField\";\nimport XqlFile from \"./fields/File\";\nimport XqlSchema from \"./fields/Schema\";\nimport { XqlFields } from \"./types\";\nimport sha256 from \"../utils/sha256\";\n\nconst xt = {\n id: () => new XqlIDField(),\n array: (type: XqlFields, length?: number) => new XqlArray(type as any, length),\n boolean: () => new XqlBoolean(),\n date: () => new XqlDate(),\n enum: (values: XVEnumValues) => new XqlEnum(values),\n number: (length?: number) => new XqlNumber(length),\n object: (arg?: XVObjectType) => new XqlObject(arg),\n record: (key: XqlFields, value: XqlFields) => new XqlRecord(key as any, value as any),\n string: (length?: number) => new XqlString(length),\n tuple: (type: XqlFields[]) => new XqlTuple(type as any),\n union: (type: XqlFields[]) => new XqlUnion(type as any),\n file: (size?: number) => new XqlFile(size),\n schema: (table: string, column: string) => new XqlSchema(table, column),\n\n createdAt: () => xt.date().create(),\n updatedAt: () => xt.date().update(),\n // Custom Types\n name: () => {\n const inst = xt.string().min(1).max(100)\n inst.set(\"name\" as any, (v: any) => {\n const nameRegex = /^[a-zA-Z\\s'-]+$/;\n if (!nameRegex.test(v)) {\n throw new Error(\"Invalid name format.\");\n }\n });\n return inst;\n },\n password: () => {\n const inst = xt.string().min(8).max(64).index().transform(v => sha256(v).slice(0, 64));\n (inst as any).strong = function () {\n inst.set(\"strong\" as any, (v: any) => {\n const hasUpperCase = /[A-Z]/.test(v);\n const hasLowerCase = /[a-z]/.test(v);\n const hasNumber = /[0-9]/.test(v);\n const hasSpecialChar = /[!@#$%^&*(),.?\":{}|<>]/.test(v);\n\n if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {\n throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');\n }\n });\n return this;\n }\n return inst;\n },\n email: () => xt.string().email().index().unique(),\n status: (statuses: string[]) => xt.enum(statuses).index(),\n gender: () => xt.enum(['male', 'female', 'other']).index(),\n role: (roles: string[]) => xt.enum(roles).index(),\n username: () => {\n const inst = xt.string().index().min(3).max(30).index().unique()\n inst.set(\"username\" as any, (v: any) => {\n const usernameRegex = /^[a-zA-Z0-9._-]{3,30}$/;\n if (!usernameRegex.test(v)) {\n throw new Error(\"Invalid username format.\");\n }\n });\n return inst;\n },\n slug: () => {\n const inst = xt.string().index().min(3).max(100)\n inst.set(\"slug\" as any, (v: any) => {\n const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n if (!slugRegex.test(v)) {\n throw new Error(\"Invalid slug format.\");\n }\n });\n return inst;\n },\n url: () => {\n const inst = xt.string().max(2048).min(10)\n inst.set(\"url\" as any, (v: any) => {\n try {\n new URL(v);\n } catch {\n throw new Error(\"Invalid URL format.\");\n }\n });\n return inst;\n },\n photo: () => {\n const inst = xt.file().maxSize(2 * 1024 * 1024); // 2 MB\n inst.set(\"photo\" as any, (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid photo file type.\");\n }\n });\n return inst;\n },\n avatar: () => {\n const inst = xt.file().maxSize(2 * 1024 * 1024); // 1 MB\n inst.set(\"avatar\" as any, (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid avatar file type.\");\n }\n });\n return inst;\n },\n amount: () => xt.number().float().min(0).max(1000000000),\n phone: () => {\n const inst = xt.string().min(7).max(15)\n inst.set(\"phone\" as any, (v: any) => {\n const phoneRegex = /^\\+?[1-9]\\d{1,14}$/;\n if (!phoneRegex.test(v)) {\n throw new Error(\"Invalid phone number format.\");\n }\n });\n return inst;\n },\n title: () => xt.string().min(1).max(200),\n description: () => xt.string().max(1000),\n type: (types: string[]) => xt.enum(types).index(),\n metadata: () => xt.record(xt.string(), xt.union([xt.string(), xt.number(), xt.boolean(), xt.date()])),\n ip: () => {\n const inst = xt.string().index()\n inst.set(\"ip\" as any, (v: any) => {\n const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9]))$/;\n if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {\n throw new Error(\"Invalid IP address format.\");\n }\n });\n return inst;\n },\n\n key: () => xt.string().max(100).index().unique(),\n value: () => xt.string().max(1000),\n token: () => xt.string(64).index().unique(),\n}\n\nexport default xt;"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/xt/index.ts"],"sourcesContent":["import { XVEnumValues, XVObjectType } from \"xanv\";\nimport XqlString from \"./fields/String\";\nimport XqlBoolean from \"./fields/Boolean\";\nimport XqlArray from \"./fields/Array\";\nimport XqlDate from \"./fields/Date\";\nimport XqlEnum from \"./fields/Enum\";\nimport XqlNumber from \"./fields/Number\";\nimport XqlObject from \"./fields/Object\";\nimport XqlRecord from \"./fields/Record\";\nimport XqlTuple from \"./fields/Tuple\";\nimport XqlUnion from \"./fields/Union\";\nimport XqlIDField from \"./fields/IDField\";\nimport XqlFile from \"./fields/File\";\nimport XqlSchema from \"./fields/Schema\";\nimport { XqlFields } from \"./types\";\nimport XqlName from \"./additional/Name\";\nimport XqlPassword from \"./additional/Password\";\nimport XqlUsername from \"./additional/Username\";\nimport XqlSlug from \"./additional/Slug\";\nimport XqlUrl from \"./additional/Url\";\nimport XqlPhoto from \"./additional/Photo\";\nimport XqlPhone from \"./additional/Phone\";\nimport XqlIP from \"./additional/IP\";\n\nconst xt = {\n id: () => new XqlIDField(),\n array: (type: XqlFields, length?: number) => new XqlArray(type as any, length),\n boolean: () => new XqlBoolean(),\n date: () => new XqlDate(),\n enum: (values: XVEnumValues) => new XqlEnum(values),\n number: (length?: number) => new XqlNumber(length),\n object: (arg?: XVObjectType) => new XqlObject(arg),\n record: (key: XqlFields, value: XqlFields) => new XqlRecord(key as any, value as any),\n string: (length?: number) => new XqlString(length),\n tuple: (type: XqlFields[]) => new XqlTuple(type as any),\n union: (type: XqlFields[]) => new XqlUnion(type as any),\n file: (size?: number) => new XqlFile(size),\n schema: (table: string, column: string) => new XqlSchema(table, column),\n\n createdAt: () => xt.date().create(),\n updatedAt: () => xt.date().update(),\n // Custom Types\n name: () => new XqlName,\n password: () => new XqlPassword,\n email: () => xt.string().email().index().unique(),\n status: (statuses: string[]) => xt.enum(statuses).index(),\n gender: () => xt.enum(['male', 'female', 'other']).index(),\n role: (roles: string[]) => xt.enum(roles).index(),\n username: () => new XqlUsername,\n slug: () => new XqlSlug,\n url: () => new XqlUrl,\n photo: () => new XqlPhoto,\n amount: () => xt.number().float().min(0).max(1000000000),\n phone: () => new XqlPhone,\n title: () => xt.string().min(1).max(200),\n description: () => xt.string().max(1000),\n type: (types: string[]) => xt.enum(types).index(),\n metadata: () => xt.record(xt.string(), xt.union([xt.string(), xt.number(), xt.boolean(), xt.date()])),\n ip: () => new XqlIP,\n key: () => xt.string().max(100).index().unique(),\n value: () => xt.string().max(1000),\n token: () => xt.string(64).index().unique(),\n}\n\nexport default xt;"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,EAAE,GAAG;AACR,IAAA,EAAE,EAAE,MAAM,IAAI,UAAU,EAAE;AAC1B,IAAA,KAAK,EAAE,CAAC,IAAe,EAAE,MAAe,KAAK,IAAI,QAAQ,CAAC,IAAW,EAAE,MAAM,CAAC;AAC9E,IAAA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE;AAC/B,IAAA,IAAI,EAAE,MAAM,IAAI,OAAO,EAAE;IACzB,IAAI,EAAE,CAAC,MAAoB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IACnD,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC;IAClD,MAAM,EAAE,CAAC,GAAkB,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC;AAClD,IAAA,MAAM,EAAE,CAAC,GAAc,EAAE,KAAgB,KAAK,IAAI,SAAS,CAAC,GAAU,EAAE,KAAY,CAAC;IACrF,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC;IAClD,KAAK,EAAE,CAAC,IAAiB,KAAK,IAAI,QAAQ,CAAC,IAAW,CAAC;IACvD,KAAK,EAAE,CAAC,IAAiB,KAAK,IAAI,QAAQ,CAAC,IAAW,CAAC;IACvD,IAAI,EAAE,CAAC,IAAa,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;AAC1C,IAAA,MAAM,EAAE,CAAC,KAAa,EAAE,MAAc,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvE,SAAS,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IACnC,SAAS,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;;AAEnC,IAAA,IAAI,EAAE,MAAM,IAAI,OAAO;AACvB,IAAA,QAAQ,EAAE,MAAM,IAAI,WAAW;AAC/B,IAAA,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;AACjD,IAAA,MAAM,EAAE,CAAC,QAAkB,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;AACzD,IAAA,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE;AAC1D,IAAA,IAAI,EAAE,CAAC,KAAe,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;AACjD,IAAA,QAAQ,EAAE,MAAM,IAAI,WAAW;AAC/B,IAAA,IAAI,EAAE,MAAM,IAAI,OAAO;AACvB,IAAA,GAAG,EAAE,MAAM,IAAI,MAAM;AACrB,IAAA,KAAK,EAAE,MAAM,IAAI,QAAQ;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;AACxD,IAAA,KAAK,EAAE,MAAM,IAAI,QAAQ;AACzB,IAAA,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AACxC,IAAA,WAAW,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,IAAA,IAAI,EAAE,CAAC,KAAe,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;AACjD,IAAA,QAAQ,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACrG,IAAA,EAAE,EAAE,MAAM,IAAI,KAAK;AACnB,IAAA,GAAG,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;AAChD,IAAA,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,IAAA,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ModelFormatter.cjs","sources":["../../../src/core/classes/ModelFormatter.ts"],"sourcesContent":["import xt from \"../../xt\";\nimport Model from \"../../model\";\nimport XqlSchema from \"../../xt/fields/Schema\";\nimport Xansql from \"../Xansql\";\nimport Foreign from \"./ForeignInfo\";\nimport XansqlError from \"../XansqlError\";\n\n/**\n * this class will format the models and assign relationships\n */\n\nclass ModelFormatter {\n private xansql: Xansql\n private isFormated: boolean = false;\n private restricted_columns: string[] = [\n // custom\n // \"OPTIONAL\", \"NULLABLE\", \"META\", \"METAARRAY\", \"SCHEMA\", \"ARRAY\",\n // \"EQUALS\", \"NOT\", \"LT\", \"LTE\", \"GT\", \"GTE\", \"IN\", \"NOTIN\", \"BETWEEN\", \"NOTBETWEEN\", \"CONTAINS\", \"NOTCONTAINS\", \"STARTSWITH\", \"ENDSWITH\", \"ISNULL\", \"ISNOTNULL\", \"ISEMPTY\", \"ISNOTEMPTY\", \"ISTRUE\", \"ISFALSE\",\n // \"AGGREGATE\",\n ];\n\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n }\n\n private restrictedColumn(column: string): boolean {\n return this.restricted_columns.includes(column.toUpperCase());\n }\n\n format() {\n if (this.isFormated) return this.xansql.ModelFactory;\n this.isFormated = true;\n const models = this.xansql.ModelFactory;\n\n // sort models by foreign key dependencies\n const sortedTables: string[] = [];\n for (let table of models.keys()) {\n const model = models.get(table) as Model\n const schema = model.schema\n for (let column in schema) {\n let field: any = schema[column]\n if (Foreign.isSchema(field)) {\n const foreignInfo = Foreign.get(model, column);\n const foreignTable = foreignInfo.table;\n const indexOfMainTable = sortedTables.indexOf(table);\n const indexOfForeignTable = sortedTables.indexOf(foreignTable);\n\n if (indexOfForeignTable === -1) {\n // foreign table not in sorted list, add it before main table\n sortedTables.splice(indexOfMainTable, 0, foreignTable);\n } else if (indexOfForeignTable > indexOfMainTable) {\n // foreign table is after main table, move it before\n sortedTables.splice(indexOfForeignTable, 1);\n sortedTables.splice(indexOfMainTable, 0, foreignTable);\n }\n }\n }\n if (!sortedTables.includes(table)) {\n sortedTables.push(table);\n }\n }\n\n // update models based with sorted tables\n const sortedModels: Map<string, Model> = new Map();\n for (let table of sortedTables) {\n const model = models.get(table) as Model\n sortedModels.set(table, model);\n }\n\n // assign relationships\n models.clear();\n for (let [table, model] of sortedModels) {\n models.set(table, model);\n }\n\n for (let model of models.values()) {\n for (let column in model.schema) {\n if (this.restrictedColumn(column)) {\n throw new XansqlError({\n message: `Column name \"${column}\" in model \"${model.table}\" is restricted and cannot be used.`,\n model: model.table,\n column,\n });\n }\n let field: any = model.schema[column]\n if (Foreign.isSchema(field)) {\n this.formatIsSchema(model, column)\n } else if (Foreign.isArray(field)) {\n this.formatIsArray(model, column)\n }\n }\n }\n\n return models\n }\n\n private formatIsSchema(model: Model, column: string) {\n const models = this.xansql.ModelFactory;\n let field: any = model.schema[column]\n const FModel = models.get(field.table);\n if (!FModel) {\n throw new XansqlError({\n message: `Foreign model ${field.table} not found for ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n\n if (field.column in FModel.schema) {\n const foreignCol = FModel.schema[field.column];\n if (Foreign.isArray(foreignCol)) {\n const foreignType = (foreignCol as any).type as XqlSchema;\n if (foreignType.table !== model.table || foreignType.column !== column) {\n throw new XansqlError({\n message: `Foreign column ${field.table}.${field.column} does not reference back to ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n } else {\n throw new XansqlError({\n message: `Foreign column ${field.table}.${field.column} is not an array referencing back to ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n } else {\n const n = xt.schema(model.table, column).nullable()\n n.dynamic = true // to identify that this is a dynamically added field\n FModel.schema[field.column] = xt.array(n)\n models.set(FModel.table, FModel);\n }\n }\n\n private formatIsArray(model: Model, column: string) {\n const models = this.xansql.ModelFactory;\n let field: any = model.schema[column];\n const FSchemaField = (field as any).type as XqlSchema;\n const FModel = models.get(FSchemaField.table);\n if (!FModel) {\n throw new XansqlError({\n message: `Foreign model ${FSchemaField.table} not found for ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n\n if (FSchemaField.column in FModel.schema) {\n const foreignCol = FModel.schema[FSchemaField.column] as XqlSchema;\n if (!Foreign.isSchema(foreignCol) || foreignCol.table !== model.table || foreignCol.column !== column) {\n throw new XansqlError({\n message: `Foreign column ${FSchemaField.table}.${FSchemaField.column} does not reference back to ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n } else {\n const n = xt.schema(model.table, column)\n if (FSchemaField.meta.nullable) n.nullable()\n if (FSchemaField.meta.optional) n.optional()\n if (FSchemaField.meta.default !== undefined) n.default(FSchemaField.meta.default)\n if (FSchemaField.meta.transform) n.transform(FSchemaField.meta.transform)\n\n n.dynamic = true // to identify that this is a dynamically added field\n FModel.schema[FSchemaField.column] = n\n models.set(FModel.table, FModel);\n }\n }\n}\n\nexport default ModelFormatter"],"names":["Foreign","XansqlError","xt"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ModelFormatter.mjs","sources":["../../../src/core/classes/ModelFormatter.ts"],"sourcesContent":["import xt from \"../../xt\";\nimport Model from \"../../model\";\nimport XqlSchema from \"../../xt/fields/Schema\";\nimport Xansql from \"../Xansql\";\nimport Foreign from \"./ForeignInfo\";\nimport XansqlError from \"../XansqlError\";\n\n/**\n * this class will format the models and assign relationships\n */\n\nclass ModelFormatter {\n private xansql: Xansql\n private isFormated: boolean = false;\n private restricted_columns: string[] = [\n // custom\n // \"OPTIONAL\", \"NULLABLE\", \"META\", \"METAARRAY\", \"SCHEMA\", \"ARRAY\",\n // \"EQUALS\", \"NOT\", \"LT\", \"LTE\", \"GT\", \"GTE\", \"IN\", \"NOTIN\", \"BETWEEN\", \"NOTBETWEEN\", \"CONTAINS\", \"NOTCONTAINS\", \"STARTSWITH\", \"ENDSWITH\", \"ISNULL\", \"ISNOTNULL\", \"ISEMPTY\", \"ISNOTEMPTY\", \"ISTRUE\", \"ISFALSE\",\n // \"AGGREGATE\",\n ];\n\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n }\n\n private restrictedColumn(column: string): boolean {\n return this.restricted_columns.includes(column.toUpperCase());\n }\n\n format() {\n if (this.isFormated) return this.xansql.ModelFactory;\n this.isFormated = true;\n const models = this.xansql.ModelFactory;\n\n // sort models by foreign key dependencies\n const sortedTables: string[] = [];\n for (let table of models.keys()) {\n const model = models.get(table) as Model\n const schema = model.schema\n for (let column in schema) {\n let field: any = schema[column]\n if (Foreign.isSchema(field)) {\n const foreignInfo = Foreign.get(model, column);\n const foreignTable = foreignInfo.table;\n const indexOfMainTable = sortedTables.indexOf(table);\n const indexOfForeignTable = sortedTables.indexOf(foreignTable);\n\n if (indexOfForeignTable === -1) {\n // foreign table not in sorted list, add it before main table\n sortedTables.splice(indexOfMainTable, 0, foreignTable);\n } else if (indexOfForeignTable > indexOfMainTable) {\n // foreign table is after main table, move it before\n sortedTables.splice(indexOfForeignTable, 1);\n sortedTables.splice(indexOfMainTable, 0, foreignTable);\n }\n }\n }\n if (!sortedTables.includes(table)) {\n sortedTables.push(table);\n }\n }\n\n // update models based with sorted tables\n const sortedModels: Map<string, Model> = new Map();\n for (let table of sortedTables) {\n const model = models.get(table) as Model\n sortedModels.set(table, model);\n }\n\n // assign relationships\n models.clear();\n for (let [table, model] of sortedModels) {\n models.set(table, model);\n }\n\n for (let model of models.values()) {\n for (let column in model.schema) {\n if (this.restrictedColumn(column)) {\n throw new XansqlError({\n message: `Column name \"${column}\" in model \"${model.table}\" is restricted and cannot be used.`,\n model: model.table,\n column,\n });\n }\n let field: any = model.schema[column]\n if (Foreign.isSchema(field)) {\n this.formatIsSchema(model, column)\n } else if (Foreign.isArray(field)) {\n this.formatIsArray(model, column)\n }\n }\n }\n\n return models\n }\n\n private formatIsSchema(model: Model, column: string) {\n const models = this.xansql.ModelFactory;\n let field: any = model.schema[column]\n const FModel = models.get(field.table);\n if (!FModel) {\n throw new XansqlError({\n message: `Foreign model ${field.table} not found for ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n\n if (field.column in FModel.schema) {\n const foreignCol = FModel.schema[field.column];\n if (Foreign.isArray(foreignCol)) {\n const foreignType = (foreignCol as any).type as XqlSchema;\n if (foreignType.table !== model.table || foreignType.column !== column) {\n throw new XansqlError({\n message: `Foreign column ${field.table}.${field.column} does not reference back to ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n } else {\n throw new XansqlError({\n message: `Foreign column ${field.table}.${field.column} is not an array referencing back to ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n } else {\n const n = xt.schema(model.table, column).nullable()\n n.dynamic = true // to identify that this is a dynamically added field\n FModel.schema[field.column] = xt.array(n)\n models.set(FModel.table, FModel);\n }\n }\n\n private formatIsArray(model: Model, column: string) {\n const models = this.xansql.ModelFactory;\n let field: any = model.schema[column];\n const FSchemaField = (field as any).type as XqlSchema;\n const FModel = models.get(FSchemaField.table);\n if (!FModel) {\n throw new XansqlError({\n message: `Foreign model ${FSchemaField.table} not found for ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n\n if (FSchemaField.column in FModel.schema) {\n const foreignCol = FModel.schema[FSchemaField.column] as XqlSchema;\n if (!Foreign.isSchema(foreignCol) || foreignCol.table !== model.table || foreignCol.column !== column) {\n throw new XansqlError({\n message: `Foreign column ${FSchemaField.table}.${FSchemaField.column} does not reference back to ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n } else {\n const n = xt.schema(model.table, column)\n if (FSchemaField.meta.nullable) n.nullable()\n if (FSchemaField.meta.optional) n.optional()\n if (FSchemaField.meta.default !== undefined) n.default(FSchemaField.meta.default)\n if (FSchemaField.meta.transform) n.transform(FSchemaField.meta.transform)\n\n n.dynamic = true // to identify that this is a dynamically added field\n FModel.schema[FSchemaField.column] = n\n models.set(FModel.table, FModel);\n }\n }\n}\n\nexport default ModelFormatter"],"names":[],"mappings":"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"}
|