xansql 1.0.0
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/Types/fields/Array.d.ts +7 -0
- package/Types/fields/Array.js +6 -0
- package/Types/fields/Array.js.map +1 -0
- package/Types/fields/Array.mjs +6 -0
- package/Types/fields/Array.mjs.map +1 -0
- package/Types/fields/Boolean.d.ts +8 -0
- package/Types/fields/Boolean.js +11 -0
- package/Types/fields/Boolean.js.map +1 -0
- package/Types/fields/Boolean.mjs +11 -0
- package/Types/fields/Boolean.mjs.map +1 -0
- package/Types/fields/Date.d.ts +10 -0
- package/Types/fields/Date.js +22 -0
- package/Types/fields/Date.js.map +1 -0
- package/Types/fields/Date.mjs +22 -0
- package/Types/fields/Date.mjs.map +1 -0
- package/Types/fields/Enum.d.ts +8 -0
- package/Types/fields/Enum.js +10 -0
- package/Types/fields/Enum.js.map +1 -0
- package/Types/fields/Enum.mjs +10 -0
- package/Types/fields/Enum.mjs.map +1 -0
- package/Types/fields/File.d.ts +7 -0
- package/Types/fields/File.js +6 -0
- package/Types/fields/File.js.map +1 -0
- package/Types/fields/File.mjs +6 -0
- package/Types/fields/File.mjs.map +1 -0
- package/Types/fields/IDField.d.ts +6 -0
- package/Types/fields/IDField.js +2 -0
- package/Types/fields/IDField.js.map +1 -0
- package/Types/fields/IDField.mjs +2 -0
- package/Types/fields/IDField.mjs.map +1 -0
- package/Types/fields/Number.d.ts +8 -0
- package/Types/fields/Number.js +11 -0
- package/Types/fields/Number.js.map +1 -0
- package/Types/fields/Number.mjs +11 -0
- package/Types/fields/Number.mjs.map +1 -0
- package/Types/fields/Object.d.ts +8 -0
- package/Types/fields/Object.js +11 -0
- package/Types/fields/Object.js.map +1 -0
- package/Types/fields/Object.mjs +11 -0
- package/Types/fields/Object.mjs.map +1 -0
- package/Types/fields/Record.d.ts +8 -0
- package/Types/fields/Record.js +11 -0
- package/Types/fields/Record.js.map +1 -0
- package/Types/fields/Record.mjs +11 -0
- package/Types/fields/Record.mjs.map +1 -0
- package/Types/fields/Schema.d.ts +16 -0
- package/Types/fields/Schema.js +34 -0
- package/Types/fields/Schema.js.map +1 -0
- package/Types/fields/Schema.mjs +34 -0
- package/Types/fields/Schema.mjs.map +1 -0
- package/Types/fields/String.d.ts +10 -0
- package/Types/fields/String.js +20 -0
- package/Types/fields/String.js.map +1 -0
- package/Types/fields/String.mjs +20 -0
- package/Types/fields/String.mjs.map +1 -0
- package/Types/fields/Tuple.d.ts +8 -0
- package/Types/fields/Tuple.js +11 -0
- package/Types/fields/Tuple.js.map +1 -0
- package/Types/fields/Tuple.mjs +11 -0
- package/Types/fields/Tuple.mjs.map +1 -0
- package/Types/fields/Union.d.ts +8 -0
- package/Types/fields/Union.js +11 -0
- package/Types/fields/Union.js.map +1 -0
- package/Types/fields/Union.mjs +11 -0
- package/Types/fields/Union.mjs.map +1 -0
- package/Types/index.d.ts +56 -0
- package/Types/index.js +129 -0
- package/Types/index.js.map +1 -0
- package/Types/index.mjs +129 -0
- package/Types/index.mjs.map +1 -0
- package/Types/types.d.ts +20 -0
- package/core/ExcuteMeta.d.ts +11 -0
- package/core/ExcuteMeta.js +22 -0
- package/core/ExcuteMeta.js.map +1 -0
- package/core/ExcuteMeta.mjs +22 -0
- package/core/ExcuteMeta.mjs.map +1 -0
- package/core/Xansql.d.ts +46 -0
- package/core/Xansql.js +132 -0
- package/core/Xansql.js.map +1 -0
- package/core/Xansql.mjs +132 -0
- package/core/Xansql.mjs.map +1 -0
- package/core/XansqlError.js +11 -0
- package/core/XansqlError.js.map +1 -0
- package/core/XansqlError.mjs +11 -0
- package/core/XansqlError.mjs.map +1 -0
- package/core/XansqlResult.d.ts +12 -0
- package/core/XansqlResult.js +32 -0
- package/core/XansqlResult.js.map +1 -0
- package/core/XansqlResult.mjs +32 -0
- package/core/XansqlResult.mjs.map +1 -0
- package/core/classes/EventManager.d.ts +72 -0
- package/core/classes/EventManager.js +21 -0
- package/core/classes/EventManager.js.map +1 -0
- package/core/classes/EventManager.mjs +21 -0
- package/core/classes/EventManager.mjs.map +1 -0
- package/core/classes/ForeignInfo.js +51 -0
- package/core/classes/ForeignInfo.js.map +1 -0
- package/core/classes/ForeignInfo.mjs +51 -0
- package/core/classes/ForeignInfo.mjs.map +1 -0
- package/core/classes/Migration/ForeingMigration.d.ts +12 -0
- package/core/classes/Migration/ForeingMigration.js +52 -0
- package/core/classes/Migration/ForeingMigration.js.map +1 -0
- package/core/classes/Migration/ForeingMigration.mjs +52 -0
- package/core/classes/Migration/ForeingMigration.mjs.map +1 -0
- package/core/classes/Migration/IndexMigration.d.ts +12 -0
- package/core/classes/Migration/IndexMigration.js +49 -0
- package/core/classes/Migration/IndexMigration.js.map +1 -0
- package/core/classes/Migration/IndexMigration.mjs +49 -0
- package/core/classes/Migration/IndexMigration.mjs.map +1 -0
- package/core/classes/Migration/TableMigration.d.ts +33 -0
- package/core/classes/Migration/TableMigration.js +215 -0
- package/core/classes/Migration/TableMigration.js.map +1 -0
- package/core/classes/Migration/TableMigration.mjs +215 -0
- package/core/classes/Migration/TableMigration.mjs.map +1 -0
- package/core/classes/Migration/index.d.ts +12 -0
- package/core/classes/Migration/index.js +189 -0
- package/core/classes/Migration/index.js.map +1 -0
- package/core/classes/Migration/index.mjs +189 -0
- package/core/classes/Migration/index.mjs.map +1 -0
- package/core/classes/ModelFormatter.js +166 -0
- package/core/classes/ModelFormatter.js.map +1 -0
- package/core/classes/ModelFormatter.mjs +166 -0
- package/core/classes/ModelFormatter.mjs.map +1 -0
- package/core/classes/TypesGenerator.d.ts +13 -0
- package/core/classes/TypesGenerator.js +170 -0
- package/core/classes/TypesGenerator.js.map +1 -0
- package/core/classes/TypesGenerator.mjs +170 -0
- package/core/classes/TypesGenerator.mjs.map +1 -0
- package/core/classes/XansqlConfig.js +33 -0
- package/core/classes/XansqlConfig.js.map +1 -0
- package/core/classes/XansqlConfig.mjs +33 -0
- package/core/classes/XansqlConfig.mjs.map +1 -0
- package/core/classes/XansqlFetch.js +304 -0
- package/core/classes/XansqlFetch.js.map +1 -0
- package/core/classes/XansqlFetch.mjs +304 -0
- package/core/classes/XansqlFetch.mjs.map +1 -0
- package/core/classes/XansqlTransaction.d.ts +13 -0
- package/core/classes/XansqlTransaction.js +46 -0
- package/core/classes/XansqlTransaction.js.map +1 -0
- package/core/classes/XansqlTransaction.mjs +46 -0
- package/core/classes/XansqlTransaction.mjs.map +1 -0
- package/core/type.d.ts +117 -0
- package/index.d.ts +3 -0
- package/index.js +1 -0
- package/index.js.map +1 -0
- package/index.mjs +1 -0
- package/index.mjs.map +1 -0
- package/model/Args/RelationExcuteArgs.js +5 -0
- package/model/Args/RelationExcuteArgs.js.map +1 -0
- package/model/Args/RelationExcuteArgs.mjs +5 -0
- package/model/Args/RelationExcuteArgs.mjs.map +1 -0
- package/model/Args/WhereArgs.js +226 -0
- package/model/Args/WhereArgs.js.map +1 -0
- package/model/Args/WhereArgs.mjs +226 -0
- package/model/Args/WhereArgs.mjs.map +1 -0
- package/model/Base.d.ts +26 -0
- package/model/Base.js +64 -0
- package/model/Base.js.map +1 -0
- package/model/Base.mjs +64 -0
- package/model/Base.mjs.map +1 -0
- package/model/Executer/Aggregate/SelectArgs.js +59 -0
- package/model/Executer/Aggregate/SelectArgs.js.map +1 -0
- package/model/Executer/Aggregate/SelectArgs.mjs +59 -0
- package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -0
- package/model/Executer/Aggregate/index.js +59 -0
- package/model/Executer/Aggregate/index.js.map +1 -0
- package/model/Executer/Aggregate/index.mjs +59 -0
- package/model/Executer/Aggregate/index.mjs.map +1 -0
- package/model/Executer/Create/CreateDataArgs.js +145 -0
- package/model/Executer/Create/CreateDataArgs.js.map +1 -0
- package/model/Executer/Create/CreateDataArgs.mjs +145 -0
- package/model/Executer/Create/CreateDataArgs.mjs.map +1 -0
- package/model/Executer/Create/index.js +101 -0
- package/model/Executer/Create/index.js.map +1 -0
- package/model/Executer/Create/index.mjs +101 -0
- package/model/Executer/Create/index.mjs.map +1 -0
- package/model/Executer/Delete/index.js +112 -0
- package/model/Executer/Delete/index.js.map +1 -0
- package/model/Executer/Delete/index.mjs +112 -0
- package/model/Executer/Delete/index.mjs.map +1 -0
- package/model/Executer/Find/DistinctArgs.js +32 -0
- package/model/Executer/Find/DistinctArgs.js.map +1 -0
- package/model/Executer/Find/DistinctArgs.mjs +32 -0
- package/model/Executer/Find/DistinctArgs.mjs.map +1 -0
- package/model/Executer/Find/LimitArgs.js +31 -0
- package/model/Executer/Find/LimitArgs.js.map +1 -0
- package/model/Executer/Find/LimitArgs.mjs +31 -0
- package/model/Executer/Find/LimitArgs.mjs.map +1 -0
- package/model/Executer/Find/OrderByArgs.js +29 -0
- package/model/Executer/Find/OrderByArgs.js.map +1 -0
- package/model/Executer/Find/OrderByArgs.mjs +29 -0
- package/model/Executer/Find/OrderByArgs.mjs.map +1 -0
- package/model/Executer/Find/SelectArgs.js +119 -0
- package/model/Executer/Find/SelectArgs.js.map +1 -0
- package/model/Executer/Find/SelectArgs.mjs +119 -0
- package/model/Executer/Find/SelectArgs.mjs.map +1 -0
- package/model/Executer/Find/index.js +338 -0
- package/model/Executer/Find/index.js.map +1 -0
- package/model/Executer/Find/index.mjs +338 -0
- package/model/Executer/Find/index.mjs.map +1 -0
- package/model/Executer/Update/UpdateDataArgs.js +124 -0
- package/model/Executer/Update/UpdateDataArgs.js.map +1 -0
- package/model/Executer/Update/UpdateDataArgs.mjs +124 -0
- package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -0
- package/model/Executer/Update/index.js +207 -0
- package/model/Executer/Update/index.js.map +1 -0
- package/model/Executer/Update/index.mjs +207 -0
- package/model/Executer/Update/index.mjs.map +1 -0
- package/model/include/ValueFormatter.js +99 -0
- package/model/include/ValueFormatter.js.map +1 -0
- package/model/include/ValueFormatter.mjs +99 -0
- package/model/include/ValueFormatter.mjs.map +1 -0
- package/model/index.d.ts +29 -0
- package/model/index.js +236 -0
- package/model/index.js.map +1 -0
- package/model/index.mjs +236 -0
- package/model/index.mjs.map +1 -0
- package/model/type.d.ts +106 -0
- package/package.json +32 -0
- package/readme.md +359 -0
- package/utils/chunker.js +53 -0
- package/utils/chunker.js.map +1 -0
- package/utils/chunker.mjs +53 -0
- package/utils/chunker.mjs.map +1 -0
- package/utils/index.js +49 -0
- package/utils/index.js.map +1 -0
- package/utils/index.mjs +49 -0
- package/utils/index.mjs.map +1 -0
- package/utils/sha256.js +66 -0
- package/utils/sha256.js.map +1 -0
- package/utils/sha256.mjs +66 -0
- package/utils/sha256.mjs.map +1 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import {XVUnion}from'xanv';class XqlUnion extends XVUnion {
|
|
2
|
+
index() {
|
|
3
|
+
this.meta.index = true;
|
|
4
|
+
return this;
|
|
5
|
+
}
|
|
6
|
+
unique() {
|
|
7
|
+
this.meta.unique = true;
|
|
8
|
+
this.index();
|
|
9
|
+
return this;
|
|
10
|
+
}
|
|
11
|
+
}export{XqlUnion as default};//# sourceMappingURL=Union.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Union.mjs","sources":["../../../src/Types/fields/Union.ts"],"sourcesContent":["import { XVUnion } from \"xanv\"\n\nclass XqlUnion extends XVUnion {\n\n index() {\n this.meta.index = true\n return this\n }\n\n unique() {\n this.meta.unique = true\n this.index()\n return this\n }\n}\n\nexport default XqlUnion"],"names":[],"mappings":"2BAEA,MAAM,QAAS,SAAQ,OAAO,CAAA;IAE3B,KAAK,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI;AACtB,QAAA,OAAO,IAAI;IACd;IAEA,MAAM,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI;QACvB,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,OAAO,IAAI;IACd;AACF"}
|
package/Types/index.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { XVEnumValues, XVObjectType } from 'xanv';
|
|
2
|
+
import XqlString from './fields/String.js';
|
|
3
|
+
import XqlBoolean from './fields/Boolean.js';
|
|
4
|
+
import XqlArray from './fields/Array.js';
|
|
5
|
+
import XqlDate from './fields/Date.js';
|
|
6
|
+
import XqlEnum from './fields/Enum.js';
|
|
7
|
+
import XqlNumber from './fields/Number.js';
|
|
8
|
+
import XqlObject from './fields/Object.js';
|
|
9
|
+
import XqlRecord from './fields/Record.js';
|
|
10
|
+
import XqlTuple from './fields/Tuple.js';
|
|
11
|
+
import XqlUnion from './fields/Union.js';
|
|
12
|
+
import XqlIDField from './fields/IDField.js';
|
|
13
|
+
import XqlFile from './fields/File.js';
|
|
14
|
+
import XqlSchema from './fields/Schema.js';
|
|
15
|
+
import { XqlFields } from './types.js';
|
|
16
|
+
|
|
17
|
+
declare const xt: {
|
|
18
|
+
id: () => XqlIDField;
|
|
19
|
+
array: (type: XqlFields, length?: number) => XqlArray;
|
|
20
|
+
boolean: () => XqlBoolean;
|
|
21
|
+
date: () => XqlDate;
|
|
22
|
+
enum: (values: XVEnumValues) => XqlEnum;
|
|
23
|
+
number: (length?: number) => XqlNumber;
|
|
24
|
+
object: (arg?: XVObjectType) => XqlObject;
|
|
25
|
+
record: (key: XqlFields, value: XqlFields) => XqlRecord;
|
|
26
|
+
string: (length?: number) => XqlString;
|
|
27
|
+
tuple: (type: XqlFields[]) => XqlTuple;
|
|
28
|
+
union: (type: XqlFields[]) => XqlUnion;
|
|
29
|
+
file: (size?: number) => XqlFile;
|
|
30
|
+
schema: (table: string, column: string) => XqlSchema;
|
|
31
|
+
createdAt: () => XqlDate;
|
|
32
|
+
updatedAt: () => XqlDate;
|
|
33
|
+
name: () => XqlString;
|
|
34
|
+
password: () => XqlString;
|
|
35
|
+
email: () => XqlString;
|
|
36
|
+
status: (statuses: string[]) => XqlEnum;
|
|
37
|
+
gender: () => XqlEnum;
|
|
38
|
+
role: (roles: string[]) => XqlEnum;
|
|
39
|
+
username: () => XqlString;
|
|
40
|
+
slug: () => XqlString;
|
|
41
|
+
url: () => XqlString;
|
|
42
|
+
photo: () => XqlFile;
|
|
43
|
+
avatar: () => XqlFile;
|
|
44
|
+
amount: () => XqlNumber;
|
|
45
|
+
phone: () => XqlString;
|
|
46
|
+
title: () => XqlString;
|
|
47
|
+
description: () => XqlString;
|
|
48
|
+
type: (types: string[]) => XqlEnum;
|
|
49
|
+
metadata: () => XqlRecord;
|
|
50
|
+
ip: () => XqlString;
|
|
51
|
+
key: () => XqlString;
|
|
52
|
+
value: () => XqlString;
|
|
53
|
+
token: () => XqlString;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export { xt as default, xt };
|
package/Types/index.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var String=require('./fields/String.js'),Boolean=require('./fields/Boolean.js'),Array=require('./fields/Array.js'),Date=require('./fields/Date.js'),Enum=require('./fields/Enum.js'),Number=require('./fields/Number.js'),Object$1=require('./fields/Object.js'),Record=require('./fields/Record.js'),Tuple=require('./fields/Tuple.js'),Union=require('./fields/Union.js'),IDField=require('./fields/IDField.js'),File=require('./fields/File.js'),Schema=require('./fields/Schema.js'),sha256=require('../utils/sha256.js');const xt = {
|
|
2
|
+
id: () => new IDField.default(),
|
|
3
|
+
array: (type, length) => new Array.default(type, length),
|
|
4
|
+
boolean: () => new Boolean.default(),
|
|
5
|
+
date: () => new Date.default(),
|
|
6
|
+
enum: (values) => new Enum.default(values),
|
|
7
|
+
number: (length) => new Number.default(length),
|
|
8
|
+
object: (arg) => new Object$1.default(arg),
|
|
9
|
+
record: (key, value) => new Record.default(key, value),
|
|
10
|
+
string: (length) => new String.default(length),
|
|
11
|
+
tuple: (type) => new Tuple.default(type),
|
|
12
|
+
union: (type) => new Union.default(type),
|
|
13
|
+
file: (size) => new File.default(size),
|
|
14
|
+
schema: (table, column) => new Schema.default(table, column),
|
|
15
|
+
createdAt: () => xt.date().create(),
|
|
16
|
+
updatedAt: () => xt.date().update(),
|
|
17
|
+
// Custom Types
|
|
18
|
+
name: () => {
|
|
19
|
+
const inst = xt.string().min(1).max(100);
|
|
20
|
+
inst.set("name", (v) => {
|
|
21
|
+
const nameRegex = /^[a-zA-Z\s'-]+$/;
|
|
22
|
+
if (!nameRegex.test(v)) {
|
|
23
|
+
throw new Error("Invalid name format.");
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
return inst;
|
|
27
|
+
},
|
|
28
|
+
password: () => {
|
|
29
|
+
const inst = xt.string().min(8).max(32).index().transform(v => sha256.sha256(v).slice(0, 32));
|
|
30
|
+
inst.strong = function () {
|
|
31
|
+
inst.set("strong", (v) => {
|
|
32
|
+
const hasUpperCase = /[A-Z]/.test(v);
|
|
33
|
+
const hasLowerCase = /[a-z]/.test(v);
|
|
34
|
+
const hasNumber = /[0-9]/.test(v);
|
|
35
|
+
const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(v);
|
|
36
|
+
if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {
|
|
37
|
+
throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return this;
|
|
41
|
+
};
|
|
42
|
+
return inst;
|
|
43
|
+
},
|
|
44
|
+
email: () => xt.string().email(),
|
|
45
|
+
status: (statuses) => xt.enum(statuses).index(),
|
|
46
|
+
gender: () => xt.enum(['male', 'female', 'other']).index(),
|
|
47
|
+
role: (roles) => xt.enum(roles).index(),
|
|
48
|
+
username: () => {
|
|
49
|
+
const inst = xt.string().index().min(3).max(30).index().unique();
|
|
50
|
+
inst.set("username", (v) => {
|
|
51
|
+
const usernameRegex = /^[a-zA-Z0-9._-]{3,30}$/;
|
|
52
|
+
if (!usernameRegex.test(v)) {
|
|
53
|
+
throw new Error("Invalid username format.");
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return inst;
|
|
57
|
+
},
|
|
58
|
+
slug: () => {
|
|
59
|
+
const inst = xt.string().index().min(3).max(100);
|
|
60
|
+
inst.set("slug", (v) => {
|
|
61
|
+
const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
62
|
+
if (!slugRegex.test(v)) {
|
|
63
|
+
throw new Error("Invalid slug format.");
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
return inst;
|
|
67
|
+
},
|
|
68
|
+
url: () => {
|
|
69
|
+
const inst = xt.string().max(2048).min(10);
|
|
70
|
+
inst.set("url", (v) => {
|
|
71
|
+
try {
|
|
72
|
+
new URL(v);
|
|
73
|
+
}
|
|
74
|
+
catch (_a) {
|
|
75
|
+
throw new Error("Invalid URL format.");
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return inst;
|
|
79
|
+
},
|
|
80
|
+
photo: () => {
|
|
81
|
+
const inst = xt.file().maxSize(2 * 1024 * 1024); // 2 MB
|
|
82
|
+
inst.set("photo", (v) => {
|
|
83
|
+
const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
|
|
84
|
+
if (!allowedTypes.includes(v.type)) {
|
|
85
|
+
throw new Error("Invalid photo file type.");
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return inst;
|
|
89
|
+
},
|
|
90
|
+
avatar: () => {
|
|
91
|
+
const inst = xt.file().maxSize(2 * 1024 * 1024); // 1 MB
|
|
92
|
+
inst.set("avatar", (v) => {
|
|
93
|
+
const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
|
|
94
|
+
if (!allowedTypes.includes(v.type)) {
|
|
95
|
+
throw new Error("Invalid avatar file type.");
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
return inst;
|
|
99
|
+
},
|
|
100
|
+
amount: () => xt.number().float().min(0).max(1000000000),
|
|
101
|
+
phone: () => {
|
|
102
|
+
const inst = xt.string().min(7).max(15);
|
|
103
|
+
inst.set("phone", (v) => {
|
|
104
|
+
const phoneRegex = /^\+?[1-9]\d{1,14}$/;
|
|
105
|
+
if (!phoneRegex.test(v)) {
|
|
106
|
+
throw new Error("Invalid phone number format.");
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
return inst;
|
|
110
|
+
},
|
|
111
|
+
title: () => xt.string().min(1).max(200),
|
|
112
|
+
description: () => xt.string().max(1000),
|
|
113
|
+
type: (types) => xt.enum(types).index(),
|
|
114
|
+
metadata: () => xt.record(xt.string(), xt.union([xt.string(), xt.number(), xt.boolean(), xt.date()])),
|
|
115
|
+
ip: () => {
|
|
116
|
+
const inst = xt.string().index();
|
|
117
|
+
inst.set("ip", (v) => {
|
|
118
|
+
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]?)$/;
|
|
119
|
+
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]))$/;
|
|
120
|
+
if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {
|
|
121
|
+
throw new Error("Invalid IP address format.");
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
return inst;
|
|
125
|
+
},
|
|
126
|
+
key: () => xt.string().max(100).index().unique(),
|
|
127
|
+
value: () => xt.string().max(1000),
|
|
128
|
+
token: () => xt.string(64).index().unique(),
|
|
129
|
+
};exports.default=xt;exports.xt=xt;//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/Types/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\nexport const 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(32).index().transform(v => sha256(v).slice(0, 32));\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(),\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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"}
|
package/Types/index.mjs
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import XqlString from'./fields/String.mjs';import XqlBoolean from'./fields/Boolean.mjs';import XqlArray from'./fields/Array.mjs';import XqlDate from'./fields/Date.mjs';import XqlEnum from'./fields/Enum.mjs';import XqlNumber from'./fields/Number.mjs';import XqlObject from'./fields/Object.mjs';import XqlRecord from'./fields/Record.mjs';import XqlTuple from'./fields/Tuple.mjs';import XqlUnion from'./fields/Union.mjs';import XqlIDField from'./fields/IDField.mjs';import XqlFile from'./fields/File.mjs';import XqlSchema from'./fields/Schema.mjs';import {sha256}from'../utils/sha256.mjs';const xt = {
|
|
2
|
+
id: () => new XqlIDField(),
|
|
3
|
+
array: (type, length) => new XqlArray(type, length),
|
|
4
|
+
boolean: () => new XqlBoolean(),
|
|
5
|
+
date: () => new XqlDate(),
|
|
6
|
+
enum: (values) => new XqlEnum(values),
|
|
7
|
+
number: (length) => new XqlNumber(length),
|
|
8
|
+
object: (arg) => new XqlObject(arg),
|
|
9
|
+
record: (key, value) => new XqlRecord(key, value),
|
|
10
|
+
string: (length) => new XqlString(length),
|
|
11
|
+
tuple: (type) => new XqlTuple(type),
|
|
12
|
+
union: (type) => new XqlUnion(type),
|
|
13
|
+
file: (size) => new XqlFile(size),
|
|
14
|
+
schema: (table, column) => new XqlSchema(table, column),
|
|
15
|
+
createdAt: () => xt.date().create(),
|
|
16
|
+
updatedAt: () => xt.date().update(),
|
|
17
|
+
// Custom Types
|
|
18
|
+
name: () => {
|
|
19
|
+
const inst = xt.string().min(1).max(100);
|
|
20
|
+
inst.set("name", (v) => {
|
|
21
|
+
const nameRegex = /^[a-zA-Z\s'-]+$/;
|
|
22
|
+
if (!nameRegex.test(v)) {
|
|
23
|
+
throw new Error("Invalid name format.");
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
return inst;
|
|
27
|
+
},
|
|
28
|
+
password: () => {
|
|
29
|
+
const inst = xt.string().min(8).max(32).index().transform(v => sha256(v).slice(0, 32));
|
|
30
|
+
inst.strong = function () {
|
|
31
|
+
inst.set("strong", (v) => {
|
|
32
|
+
const hasUpperCase = /[A-Z]/.test(v);
|
|
33
|
+
const hasLowerCase = /[a-z]/.test(v);
|
|
34
|
+
const hasNumber = /[0-9]/.test(v);
|
|
35
|
+
const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(v);
|
|
36
|
+
if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {
|
|
37
|
+
throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return this;
|
|
41
|
+
};
|
|
42
|
+
return inst;
|
|
43
|
+
},
|
|
44
|
+
email: () => xt.string().email(),
|
|
45
|
+
status: (statuses) => xt.enum(statuses).index(),
|
|
46
|
+
gender: () => xt.enum(['male', 'female', 'other']).index(),
|
|
47
|
+
role: (roles) => xt.enum(roles).index(),
|
|
48
|
+
username: () => {
|
|
49
|
+
const inst = xt.string().index().min(3).max(30).index().unique();
|
|
50
|
+
inst.set("username", (v) => {
|
|
51
|
+
const usernameRegex = /^[a-zA-Z0-9._-]{3,30}$/;
|
|
52
|
+
if (!usernameRegex.test(v)) {
|
|
53
|
+
throw new Error("Invalid username format.");
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return inst;
|
|
57
|
+
},
|
|
58
|
+
slug: () => {
|
|
59
|
+
const inst = xt.string().index().min(3).max(100);
|
|
60
|
+
inst.set("slug", (v) => {
|
|
61
|
+
const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
62
|
+
if (!slugRegex.test(v)) {
|
|
63
|
+
throw new Error("Invalid slug format.");
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
return inst;
|
|
67
|
+
},
|
|
68
|
+
url: () => {
|
|
69
|
+
const inst = xt.string().max(2048).min(10);
|
|
70
|
+
inst.set("url", (v) => {
|
|
71
|
+
try {
|
|
72
|
+
new URL(v);
|
|
73
|
+
}
|
|
74
|
+
catch (_a) {
|
|
75
|
+
throw new Error("Invalid URL format.");
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return inst;
|
|
79
|
+
},
|
|
80
|
+
photo: () => {
|
|
81
|
+
const inst = xt.file().maxSize(2 * 1024 * 1024); // 2 MB
|
|
82
|
+
inst.set("photo", (v) => {
|
|
83
|
+
const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
|
|
84
|
+
if (!allowedTypes.includes(v.type)) {
|
|
85
|
+
throw new Error("Invalid photo file type.");
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return inst;
|
|
89
|
+
},
|
|
90
|
+
avatar: () => {
|
|
91
|
+
const inst = xt.file().maxSize(2 * 1024 * 1024); // 1 MB
|
|
92
|
+
inst.set("avatar", (v) => {
|
|
93
|
+
const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
|
|
94
|
+
if (!allowedTypes.includes(v.type)) {
|
|
95
|
+
throw new Error("Invalid avatar file type.");
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
return inst;
|
|
99
|
+
},
|
|
100
|
+
amount: () => xt.number().float().min(0).max(1000000000),
|
|
101
|
+
phone: () => {
|
|
102
|
+
const inst = xt.string().min(7).max(15);
|
|
103
|
+
inst.set("phone", (v) => {
|
|
104
|
+
const phoneRegex = /^\+?[1-9]\d{1,14}$/;
|
|
105
|
+
if (!phoneRegex.test(v)) {
|
|
106
|
+
throw new Error("Invalid phone number format.");
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
return inst;
|
|
110
|
+
},
|
|
111
|
+
title: () => xt.string().min(1).max(200),
|
|
112
|
+
description: () => xt.string().max(1000),
|
|
113
|
+
type: (types) => xt.enum(types).index(),
|
|
114
|
+
metadata: () => xt.record(xt.string(), xt.union([xt.string(), xt.number(), xt.boolean(), xt.date()])),
|
|
115
|
+
ip: () => {
|
|
116
|
+
const inst = xt.string().index();
|
|
117
|
+
inst.set("ip", (v) => {
|
|
118
|
+
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]?)$/;
|
|
119
|
+
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]))$/;
|
|
120
|
+
if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {
|
|
121
|
+
throw new Error("Invalid IP address format.");
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
return inst;
|
|
125
|
+
},
|
|
126
|
+
key: () => xt.string().max(100).index().unique(),
|
|
127
|
+
value: () => xt.string().max(1000),
|
|
128
|
+
token: () => xt.string(64).index().unique(),
|
|
129
|
+
};export{xt as default,xt};//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/Types/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\nexport const 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(32).index().transform(v => sha256(v).slice(0, 32));\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(),\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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"}
|
package/Types/types.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import XqlArray from './fields/Array.js';
|
|
2
|
+
import XqlBoolean from './fields/Boolean.js';
|
|
3
|
+
import XqlDate from './fields/Date.js';
|
|
4
|
+
import XqlEnum from './fields/Enum.js';
|
|
5
|
+
import XqlFile from './fields/File.js';
|
|
6
|
+
import XqlIDField from './fields/IDField.js';
|
|
7
|
+
import XqlNumber from './fields/Number.js';
|
|
8
|
+
import XqlObject from './fields/Object.js';
|
|
9
|
+
import XqlRecord from './fields/Record.js';
|
|
10
|
+
import XqlString from './fields/String.js';
|
|
11
|
+
import XqlTuple from './fields/Tuple.js';
|
|
12
|
+
import XqlUnion from './fields/Union.js';
|
|
13
|
+
import XqlSchema from './fields/Schema.js';
|
|
14
|
+
|
|
15
|
+
type XqlFields = XqlArray | XqlBoolean | XqlDate | XqlEnum | XqlFile | XqlNumber | XqlObject | XqlRecord | XqlString | XqlTuple | XqlUnion | XqlSchema | XqlIDField;
|
|
16
|
+
type XansqlSchemaObject = {
|
|
17
|
+
[key: string]: XqlFields;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type { XansqlSchemaObject, XqlFields };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import Model from '../model/index.js';
|
|
2
|
+
|
|
3
|
+
type ExecuteMetaAction = "SELECT" | "INSERT" | "UPDATE" | "DELETE" | "AGGREGATE" | "CREATE_TABLE" | "DROP_TABLE" | "DROP_COLUMN" | "ADD_COLUMN" | "RENAME_COLUMN" | "CREATE_INDEX" | "DROP_INDEX" | "DROP_FOREIGN_KEY" | "ADD_FOREIGN_KEY" | "UPLOAD_FILE" | "DELETE_FILE" | "MODIFY_COLUMN" | "getSchema";
|
|
4
|
+
type ExecuteMetaData = {
|
|
5
|
+
model: Model;
|
|
6
|
+
action: ExecuteMetaAction;
|
|
7
|
+
modelType: "main" | "child";
|
|
8
|
+
args: any;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export type { ExecuteMetaAction, ExecuteMetaData };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var index=require('../utils/index.js');const metas = new Map();
|
|
2
|
+
class ExecuteMeta {
|
|
3
|
+
static set(meta) {
|
|
4
|
+
if (typeof window !== "undefined") {
|
|
5
|
+
const executeId = index.uid(Math.random().toString() + Date.now().toString());
|
|
6
|
+
metas.set(executeId, meta);
|
|
7
|
+
return executeId;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
static get(executeId) {
|
|
11
|
+
return metas.get(executeId);
|
|
12
|
+
}
|
|
13
|
+
static delete(executeId) {
|
|
14
|
+
metas.delete(executeId);
|
|
15
|
+
}
|
|
16
|
+
static has(executeId) {
|
|
17
|
+
return metas.has(executeId);
|
|
18
|
+
}
|
|
19
|
+
static clear() {
|
|
20
|
+
metas.clear();
|
|
21
|
+
}
|
|
22
|
+
}exports.default=ExecuteMeta;//# sourceMappingURL=ExcuteMeta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExcuteMeta.js","sources":["../../src/core/ExcuteMeta.ts"],"sourcesContent":["import Model from \"../model\";\nimport { uid } from \"../utils\";\n\nexport type ExecuteMetaAction =\n | \"SELECT\"\n | \"INSERT\"\n | \"UPDATE\"\n | \"DELETE\"\n | \"AGGREGATE\"\n | \"CREATE_TABLE\"\n | \"DROP_TABLE\"\n | \"DROP_COLUMN\"\n | \"ADD_COLUMN\"\n | \"RENAME_COLUMN\"\n | \"CREATE_INDEX\"\n | \"DROP_INDEX\"\n | \"DROP_FOREIGN_KEY\"\n | \"ADD_FOREIGN_KEY\"\n | \"UPLOAD_FILE\"\n | \"DELETE_FILE\"\n | \"MODIFY_COLUMN\"\n | \"getSchema\"\n\n\nexport type ExecuteMetaData = {\n model: Model;\n action: ExecuteMetaAction;\n modelType: \"main\" | \"child\";\n args: any;\n}\n\nconst metas = new Map<string, ExecuteMetaData>();\n\nclass ExecuteMeta {\n static set(meta: ExecuteMetaData) {\n if (typeof window !== \"undefined\") {\n const executeId = uid(Math.random().toString() + Date.now().toString());\n metas.set(executeId, meta);\n return executeId\n }\n }\n static get(executeId: string): ExecuteMetaData | undefined {\n return metas.get(executeId);\n }\n static delete(executeId: string) {\n metas.delete(executeId);\n }\n static has(executeId: string) {\n return metas.has(executeId);\n }\n static clear() {\n metas.clear();\n }\n}\n\nexport default ExecuteMeta;"],"names":["uid"],"mappings":"6GA+BA,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2B;AAEhD,MAAM,WAAW,CAAA;IACd,OAAO,GAAG,CAAC,IAAqB,EAAA;AAC7B,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAChC,MAAM,SAAS,GAAGA,SAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AACvE,YAAA,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;AAC1B,YAAA,OAAO,SAAS;QACnB;IACH;IACA,OAAO,GAAG,CAAC,SAAiB,EAAA;AACzB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAC9B;IACA,OAAO,MAAM,CAAC,SAAiB,EAAA;AAC5B,QAAA,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;IAC1B;IACA,OAAO,GAAG,CAAC,SAAiB,EAAA;AACzB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAC9B;AACA,IAAA,OAAO,KAAK,GAAA;QACT,KAAK,CAAC,KAAK,EAAE;IAChB;AACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {uid}from'../utils/index.mjs';const metas = new Map();
|
|
2
|
+
class ExecuteMeta {
|
|
3
|
+
static set(meta) {
|
|
4
|
+
if (typeof window !== "undefined") {
|
|
5
|
+
const executeId = uid(Math.random().toString() + Date.now().toString());
|
|
6
|
+
metas.set(executeId, meta);
|
|
7
|
+
return executeId;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
static get(executeId) {
|
|
11
|
+
return metas.get(executeId);
|
|
12
|
+
}
|
|
13
|
+
static delete(executeId) {
|
|
14
|
+
metas.delete(executeId);
|
|
15
|
+
}
|
|
16
|
+
static has(executeId) {
|
|
17
|
+
return metas.has(executeId);
|
|
18
|
+
}
|
|
19
|
+
static clear() {
|
|
20
|
+
metas.clear();
|
|
21
|
+
}
|
|
22
|
+
}export{ExecuteMeta as default};//# sourceMappingURL=ExcuteMeta.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExcuteMeta.mjs","sources":["../../src/core/ExcuteMeta.ts"],"sourcesContent":["import Model from \"../model\";\nimport { uid } from \"../utils\";\n\nexport type ExecuteMetaAction =\n | \"SELECT\"\n | \"INSERT\"\n | \"UPDATE\"\n | \"DELETE\"\n | \"AGGREGATE\"\n | \"CREATE_TABLE\"\n | \"DROP_TABLE\"\n | \"DROP_COLUMN\"\n | \"ADD_COLUMN\"\n | \"RENAME_COLUMN\"\n | \"CREATE_INDEX\"\n | \"DROP_INDEX\"\n | \"DROP_FOREIGN_KEY\"\n | \"ADD_FOREIGN_KEY\"\n | \"UPLOAD_FILE\"\n | \"DELETE_FILE\"\n | \"MODIFY_COLUMN\"\n | \"getSchema\"\n\n\nexport type ExecuteMetaData = {\n model: Model;\n action: ExecuteMetaAction;\n modelType: \"main\" | \"child\";\n args: any;\n}\n\nconst metas = new Map<string, ExecuteMetaData>();\n\nclass ExecuteMeta {\n static set(meta: ExecuteMetaData) {\n if (typeof window !== \"undefined\") {\n const executeId = uid(Math.random().toString() + Date.now().toString());\n metas.set(executeId, meta);\n return executeId\n }\n }\n static get(executeId: string): ExecuteMetaData | undefined {\n return metas.get(executeId);\n }\n static delete(executeId: string) {\n metas.delete(executeId);\n }\n static has(executeId: string) {\n return metas.has(executeId);\n }\n static clear() {\n metas.clear();\n }\n}\n\nexport default ExecuteMeta;"],"names":[],"mappings":"qCA+BA,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2B;AAEhD,MAAM,WAAW,CAAA;IACd,OAAO,GAAG,CAAC,IAAqB,EAAA;AAC7B,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAChC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AACvE,YAAA,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;AAC1B,YAAA,OAAO,SAAS;QACnB;IACH;IACA,OAAO,GAAG,CAAC,SAAiB,EAAA;AACzB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAC9B;IACA,OAAO,MAAM,CAAC,SAAiB,EAAA;AAC5B,QAAA,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;IAC1B;IACA,OAAO,GAAG,CAAC,SAAiB,EAAA;AACzB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAC9B;AACA,IAAA,OAAO,KAAK,GAAA;QACT,KAAK,CAAC,KAAK,EAAE;IAChB;AACF"}
|
package/core/Xansql.d.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as securequ from 'securequ';
|
|
2
|
+
import { XansqlConfigTypeRequired, XansqlConfigType, XansqlDialect, XansqlModelOptions, ExecuterResult, XansqlOnFetchInfo } from './type.js';
|
|
3
|
+
import Model from '../model/index.js';
|
|
4
|
+
import XansqlTransection from './classes/XansqlTransaction.js';
|
|
5
|
+
import XansqlMigration from './classes/Migration/index.js';
|
|
6
|
+
import { XansqlSchemaObject } from '../Types/types.js';
|
|
7
|
+
import EventManager, { EventNames, EventHandler } from './classes/EventManager.js';
|
|
8
|
+
import TypesGenerator from './classes/TypesGenerator.js';
|
|
9
|
+
|
|
10
|
+
declare class Xansql {
|
|
11
|
+
readonly config: XansqlConfigTypeRequired;
|
|
12
|
+
readonly ModelFactory: Map<string, Model>;
|
|
13
|
+
readonly XANFETCH_CONTENT_TYPE = "application/octet-stream";
|
|
14
|
+
private _aliases;
|
|
15
|
+
private ModelFormatter;
|
|
16
|
+
private XansqlConfig;
|
|
17
|
+
readonly XansqlTransaction: XansqlTransection;
|
|
18
|
+
private XansqlFetch;
|
|
19
|
+
readonly EventManager: EventManager;
|
|
20
|
+
readonly TypesGenerator: TypesGenerator;
|
|
21
|
+
readonly XansqlMigration: XansqlMigration;
|
|
22
|
+
constructor(config: XansqlConfigType);
|
|
23
|
+
get dialect(): XansqlDialect;
|
|
24
|
+
get models(): Map<string, Model>;
|
|
25
|
+
clone(config?: Partial<XansqlConfigType>): XansqlClone;
|
|
26
|
+
private makeAlias;
|
|
27
|
+
_timer: any;
|
|
28
|
+
model(table: string, schema: XansqlSchemaObject, options?: Partial<XansqlModelOptions>): Model;
|
|
29
|
+
getModel(table: string): Model;
|
|
30
|
+
execute(sql: string, executeId?: string): Promise<ExecuterResult>;
|
|
31
|
+
getRawSchema(): Promise<any>;
|
|
32
|
+
uploadFile(file: File, executeId?: string): Promise<securequ.UploadFileMeta>;
|
|
33
|
+
deleteFile(filename: string, executeId?: string): Promise<void | securequ.SecurequClientResponse>;
|
|
34
|
+
transaction(callback: () => Promise<any>): Promise<any>;
|
|
35
|
+
migrate(force?: boolean): Promise<boolean>;
|
|
36
|
+
generateMigration(): Promise<string[]>;
|
|
37
|
+
onFetch(url: string, info: XansqlOnFetchInfo): Promise<{
|
|
38
|
+
status: number;
|
|
39
|
+
body: string | Uint8Array<ArrayBufferLike>;
|
|
40
|
+
}>;
|
|
41
|
+
on<K extends EventNames>(event: K, handler: EventHandler<K>): void;
|
|
42
|
+
}
|
|
43
|
+
declare class XansqlClone extends Xansql {
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export { Xansql as default };
|