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
package/core/Xansql.js
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var index$1=require('../model/index.js'),XansqlTransaction=require('./classes/XansqlTransaction.js'),XansqlConfig=require('./classes/XansqlConfig.js'),ModelFormatter=require('./classes/ModelFormatter.js'),XansqlFetch=require('./classes/XansqlFetch.js'),ExcuteMeta=require('./ExcuteMeta.js'),index=require('./classes/Migration/index.js'),EventManager=require('./classes/EventManager.js'),TypesGenerator=require('./classes/TypesGenerator.js'),XansqlError=require('./XansqlError.js');class Xansql {
|
|
2
|
+
constructor(config) {
|
|
3
|
+
this.ModelFactory = new Map();
|
|
4
|
+
this.XANFETCH_CONTENT_TYPE = 'application/octet-stream';
|
|
5
|
+
this._aliases = new Map();
|
|
6
|
+
this._timer = null;
|
|
7
|
+
this.XansqlConfig = new XansqlConfig.default(this, config);
|
|
8
|
+
this.config = this.XansqlConfig.parse();
|
|
9
|
+
this.XansqlTransaction = new XansqlTransaction.default(this);
|
|
10
|
+
this.ModelFormatter = new ModelFormatter.default(this);
|
|
11
|
+
this.XansqlMigration = new index.default(this);
|
|
12
|
+
this.XansqlFetch = new XansqlFetch.default(this);
|
|
13
|
+
this.EventManager = new EventManager.default();
|
|
14
|
+
this.TypesGenerator = new TypesGenerator.default(this);
|
|
15
|
+
}
|
|
16
|
+
get dialect() {
|
|
17
|
+
return this.config.dialect;
|
|
18
|
+
}
|
|
19
|
+
get models() {
|
|
20
|
+
return this.ModelFormatter.format();
|
|
21
|
+
}
|
|
22
|
+
clone(config) {
|
|
23
|
+
const self = new XansqlClone(Object.assign(Object.assign({}, this.config), (config || {})));
|
|
24
|
+
for (let [table, model] of this.ModelFactory) {
|
|
25
|
+
self.model(table, model.schema, model.options);
|
|
26
|
+
}
|
|
27
|
+
return self;
|
|
28
|
+
}
|
|
29
|
+
makeAlias(table) {
|
|
30
|
+
let wordLength = 1;
|
|
31
|
+
table = table.toLowerCase().replace(/[^a-z0-9_]/g, '_');
|
|
32
|
+
let alias = table.slice(0, wordLength);
|
|
33
|
+
while (true) {
|
|
34
|
+
if (!this._aliases.has(alias) || wordLength > table.length)
|
|
35
|
+
break;
|
|
36
|
+
wordLength++;
|
|
37
|
+
alias = table.slice(0, wordLength);
|
|
38
|
+
}
|
|
39
|
+
if (this._aliases.has(alias)) {
|
|
40
|
+
throw new XansqlError.default({
|
|
41
|
+
message: `Cannot create alias for table ${table}, please rename the table to avoid conflicts.`,
|
|
42
|
+
model: table,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
this._aliases.set(table, alias);
|
|
46
|
+
return alias;
|
|
47
|
+
}
|
|
48
|
+
model(table, schema, options) {
|
|
49
|
+
const model = new index$1.default(table, schema);
|
|
50
|
+
if (!model.IDColumn) {
|
|
51
|
+
throw new XansqlError.default({
|
|
52
|
+
message: `Model ${table} must have an ID column.`,
|
|
53
|
+
model: table,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (this.ModelFactory.has(model.table)) {
|
|
57
|
+
throw new XansqlError.default({
|
|
58
|
+
message: `Model for table ${table} already exists.`,
|
|
59
|
+
model: table,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
model.alias = this.makeAlias(model.table);
|
|
63
|
+
model.xansql = this;
|
|
64
|
+
model.options = Object.assign({ hooks: {} }, options);
|
|
65
|
+
this.ModelFactory.set(model.table, model);
|
|
66
|
+
// this will delay the model formatting to allow multiple models to be added before formatting
|
|
67
|
+
clearTimeout(this._timer);
|
|
68
|
+
this._timer = setTimeout(() => {
|
|
69
|
+
this.ModelFormatter.format();
|
|
70
|
+
}, 5);
|
|
71
|
+
return model;
|
|
72
|
+
}
|
|
73
|
+
getModel(table) {
|
|
74
|
+
if (!this.ModelFactory.has(table)) {
|
|
75
|
+
throw new XansqlError.default({
|
|
76
|
+
message: `Model for table ${table} does not exist.`,
|
|
77
|
+
model: table,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return this.ModelFactory.get(table);
|
|
81
|
+
}
|
|
82
|
+
async execute(sql, executeId) {
|
|
83
|
+
if (typeof window !== "undefined" && !this.config.fetch) {
|
|
84
|
+
throw new XansqlError.default({
|
|
85
|
+
message: `In browser environment, fetch implementation is required in config.`,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
sql = sql.trim().replace(/\s+/g, ' ');
|
|
89
|
+
if (typeof window !== "undefined") {
|
|
90
|
+
if (!executeId || !ExcuteMeta.default.has(executeId)) {
|
|
91
|
+
throw new XansqlError.default({
|
|
92
|
+
message: `Execute ID is required for browser execution.`,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
const res = await this.XansqlFetch.execute(sql, executeId);
|
|
96
|
+
ExcuteMeta.default.delete(executeId);
|
|
97
|
+
return res;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
return await this.dialect.execute(sql);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async getRawSchema() {
|
|
104
|
+
if (typeof window !== "undefined") {
|
|
105
|
+
return await this.XansqlFetch.getSchema();
|
|
106
|
+
}
|
|
107
|
+
return await this.dialect.getSchema();
|
|
108
|
+
}
|
|
109
|
+
async uploadFile(file, executeId) {
|
|
110
|
+
return await this.XansqlFetch.uploadFile(file, executeId);
|
|
111
|
+
}
|
|
112
|
+
async deleteFile(filename, executeId) {
|
|
113
|
+
return await this.XansqlFetch.deleteFile(filename, executeId);
|
|
114
|
+
}
|
|
115
|
+
async transaction(callback) {
|
|
116
|
+
return await this.XansqlTransaction.transaction(callback);
|
|
117
|
+
}
|
|
118
|
+
async migrate(force) {
|
|
119
|
+
return await this.XansqlMigration.migrate(force);
|
|
120
|
+
}
|
|
121
|
+
async generateMigration() {
|
|
122
|
+
return await this.XansqlMigration.generate();
|
|
123
|
+
}
|
|
124
|
+
async onFetch(url, info) {
|
|
125
|
+
return await this.XansqlFetch.onFetch(url, info);
|
|
126
|
+
}
|
|
127
|
+
on(event, handler) {
|
|
128
|
+
this.EventManager.on(event, handler);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
class XansqlClone extends Xansql {
|
|
132
|
+
}exports.default=Xansql;//# sourceMappingURL=Xansql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Xansql.js","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired, XansqlModelOptions, XansqlOnFetchInfo } from \"./type\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport ModelFormatter from \"./classes/ModelFormatter\";\nimport XansqlFetch from \"./classes/XansqlFetch\";\nimport ExecuteMeta from \"./ExcuteMeta\";\nimport XansqlMigration from \"./classes/Migration\";\nimport { XansqlSchemaObject } from \"../Types/types\";\nimport EventManager, { EventHandler, EventNames } from \"./classes/EventManager\";\nimport TypesGenerator from \"./classes/TypesGenerator\";\nimport XansqlError from \"./XansqlError\";\n\nclass Xansql {\n readonly config: XansqlConfigTypeRequired;\n readonly ModelFactory = new Map<string, Model>()\n readonly XANFETCH_CONTENT_TYPE = 'application/octet-stream';\n private _aliases = new Map<string, string>();\n private ModelFormatter: ModelFormatter;\n private XansqlConfig: XansqlConfig;\n readonly XansqlTransaction: XansqlTransaction;\n private XansqlFetch: XansqlFetch\n readonly EventManager: EventManager\n readonly TypesGenerator: TypesGenerator\n\n // SQL Generator Instances can be added here\n readonly XansqlMigration: XansqlMigration\n\n constructor(config: XansqlConfigType) {\n this.XansqlConfig = new XansqlConfig(this, config);\n this.config = this.XansqlConfig.parse()\n this.XansqlTransaction = new XansqlTransaction(this);\n this.ModelFormatter = new ModelFormatter(this);\n\n this.XansqlMigration = new XansqlMigration(this);\n this.XansqlFetch = new XansqlFetch(this);\n this.EventManager = new EventManager();\n this.TypesGenerator = new TypesGenerator(this);\n }\n\n get dialect() {\n return this.config.dialect;\n }\n\n get models() {\n return this.ModelFormatter.format()\n }\n\n clone(config?: Partial<XansqlConfigType>) {\n const self = new XansqlClone({ ...this.config, ...(config || {}) });\n for (let [table, model] of this.ModelFactory) {\n self.model(table, model.schema, model.options);\n }\n return self;\n }\n\n private makeAlias(table: string) {\n let wordLength = 1;\n table = table.toLowerCase().replace(/[^a-z0-9_]/g, '_')\n let alias = table.slice(0, wordLength)\n while (true) {\n if (!this._aliases.has(alias) || wordLength > table.length) break;\n wordLength++;\n alias = table.slice(0, wordLength);\n }\n if (this._aliases.has(alias)) {\n throw new XansqlError({\n message: `Cannot create alias for table ${table}, please rename the table to avoid conflicts.`,\n model: table,\n });\n }\n this._aliases.set(table, alias);\n return alias;\n }\n\n _timer: any = null;\n model(table: string, schema: XansqlSchemaObject, options?: Partial<XansqlModelOptions>): Model {\n const model = new Model(table, schema);\n if (!model.IDColumn) {\n throw new XansqlError({\n message: `Model ${table} must have an ID column.`,\n model: table,\n });\n }\n if (this.ModelFactory.has(model.table)) {\n throw new XansqlError({\n message: `Model for table ${table} already exists.`,\n model: table,\n });\n }\n model.alias = this.makeAlias(model.table);\n model.xansql = this;\n model.options = {\n hooks: {},\n ...options\n };\n this.ModelFactory.set(model.table, model);\n\n // this will delay the model formatting to allow multiple models to be added before formatting\n clearTimeout(this._timer);\n this._timer = setTimeout(() => {\n this.ModelFormatter.format()\n }, 5);\n return model\n }\n\n getModel(table: string): Model {\n if (!this.ModelFactory.has(table)) {\n throw new XansqlError({\n message: `Model for table ${table} does not exist.`,\n model: table,\n });\n }\n return this.ModelFactory.get(table) as Model;\n }\n\n async execute(sql: string, executeId?: string): Promise<ExecuterResult> {\n if (typeof window !== \"undefined\" && !this.config.fetch) {\n throw new XansqlError({\n message: `In browser environment, fetch implementation is required in config.`,\n });\n }\n\n sql = sql.trim().replace(/\\s+/g, ' ');\n\n if (typeof window !== \"undefined\") {\n if (!executeId || !ExecuteMeta.has(executeId)) {\n throw new XansqlError({\n message: `Execute ID is required for browser execution.`,\n })\n }\n const res = await this.XansqlFetch.execute(sql, executeId);\n ExecuteMeta.delete(executeId);\n return res\n } else {\n return await this.dialect.execute(sql) as any\n }\n }\n\n async getRawSchema() {\n if (typeof window !== \"undefined\") {\n return await this.XansqlFetch.getSchema();\n }\n return await this.dialect.getSchema();\n }\n\n async uploadFile(file: File, executeId?: string) {\n return await this.XansqlFetch.uploadFile(file, executeId);\n }\n\n async deleteFile(filename: string, executeId?: string) {\n return await this.XansqlFetch.deleteFile(filename, executeId);\n }\n\n async transaction(callback: () => Promise<any>) {\n return await this.XansqlTransaction.transaction(callback);\n }\n\n async migrate(force?: boolean) {\n return await this.XansqlMigration.migrate(force);\n }\n\n async generateMigration() {\n return await this.XansqlMigration.generate();\n }\n\n async onFetch(url: string, info: XansqlOnFetchInfo) {\n return await this.XansqlFetch.onFetch(url, info);\n }\n\n on<K extends EventNames>(event: K, handler: EventHandler<K>) {\n this.EventManager.on(event, handler);\n }\n\n}\n\nclass XansqlClone extends Xansql { }\n\n\nexport default Xansql"],"names":["XansqlConfig","XansqlTransaction","ModelFormatter","XansqlMigration","XansqlFetch","EventManager","TypesGenerator","XansqlError","Model","ExecuteMeta"],"mappings":"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"}
|
package/core/Xansql.mjs
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import Model from'../model/index.mjs';import XansqlTransection from'./classes/XansqlTransaction.mjs';import XansqlConfig from'./classes/XansqlConfig.mjs';import ModelFormatter from'./classes/ModelFormatter.mjs';import XansqlFetch from'./classes/XansqlFetch.mjs';import ExecuteMeta from'./ExcuteMeta.mjs';import XansqlMigration from'./classes/Migration/index.mjs';import EventManager from'./classes/EventManager.mjs';import TypesGenerator from'./classes/TypesGenerator.mjs';import XansqlError from'./XansqlError.mjs';class Xansql {
|
|
2
|
+
constructor(config) {
|
|
3
|
+
this.ModelFactory = new Map();
|
|
4
|
+
this.XANFETCH_CONTENT_TYPE = 'application/octet-stream';
|
|
5
|
+
this._aliases = new Map();
|
|
6
|
+
this._timer = null;
|
|
7
|
+
this.XansqlConfig = new XansqlConfig(this, config);
|
|
8
|
+
this.config = this.XansqlConfig.parse();
|
|
9
|
+
this.XansqlTransaction = new XansqlTransection(this);
|
|
10
|
+
this.ModelFormatter = new ModelFormatter(this);
|
|
11
|
+
this.XansqlMigration = new XansqlMigration(this);
|
|
12
|
+
this.XansqlFetch = new XansqlFetch(this);
|
|
13
|
+
this.EventManager = new EventManager();
|
|
14
|
+
this.TypesGenerator = new TypesGenerator(this);
|
|
15
|
+
}
|
|
16
|
+
get dialect() {
|
|
17
|
+
return this.config.dialect;
|
|
18
|
+
}
|
|
19
|
+
get models() {
|
|
20
|
+
return this.ModelFormatter.format();
|
|
21
|
+
}
|
|
22
|
+
clone(config) {
|
|
23
|
+
const self = new XansqlClone(Object.assign(Object.assign({}, this.config), (config || {})));
|
|
24
|
+
for (let [table, model] of this.ModelFactory) {
|
|
25
|
+
self.model(table, model.schema, model.options);
|
|
26
|
+
}
|
|
27
|
+
return self;
|
|
28
|
+
}
|
|
29
|
+
makeAlias(table) {
|
|
30
|
+
let wordLength = 1;
|
|
31
|
+
table = table.toLowerCase().replace(/[^a-z0-9_]/g, '_');
|
|
32
|
+
let alias = table.slice(0, wordLength);
|
|
33
|
+
while (true) {
|
|
34
|
+
if (!this._aliases.has(alias) || wordLength > table.length)
|
|
35
|
+
break;
|
|
36
|
+
wordLength++;
|
|
37
|
+
alias = table.slice(0, wordLength);
|
|
38
|
+
}
|
|
39
|
+
if (this._aliases.has(alias)) {
|
|
40
|
+
throw new XansqlError({
|
|
41
|
+
message: `Cannot create alias for table ${table}, please rename the table to avoid conflicts.`,
|
|
42
|
+
model: table,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
this._aliases.set(table, alias);
|
|
46
|
+
return alias;
|
|
47
|
+
}
|
|
48
|
+
model(table, schema, options) {
|
|
49
|
+
const model = new Model(table, schema);
|
|
50
|
+
if (!model.IDColumn) {
|
|
51
|
+
throw new XansqlError({
|
|
52
|
+
message: `Model ${table} must have an ID column.`,
|
|
53
|
+
model: table,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (this.ModelFactory.has(model.table)) {
|
|
57
|
+
throw new XansqlError({
|
|
58
|
+
message: `Model for table ${table} already exists.`,
|
|
59
|
+
model: table,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
model.alias = this.makeAlias(model.table);
|
|
63
|
+
model.xansql = this;
|
|
64
|
+
model.options = Object.assign({ hooks: {} }, options);
|
|
65
|
+
this.ModelFactory.set(model.table, model);
|
|
66
|
+
// this will delay the model formatting to allow multiple models to be added before formatting
|
|
67
|
+
clearTimeout(this._timer);
|
|
68
|
+
this._timer = setTimeout(() => {
|
|
69
|
+
this.ModelFormatter.format();
|
|
70
|
+
}, 5);
|
|
71
|
+
return model;
|
|
72
|
+
}
|
|
73
|
+
getModel(table) {
|
|
74
|
+
if (!this.ModelFactory.has(table)) {
|
|
75
|
+
throw new XansqlError({
|
|
76
|
+
message: `Model for table ${table} does not exist.`,
|
|
77
|
+
model: table,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return this.ModelFactory.get(table);
|
|
81
|
+
}
|
|
82
|
+
async execute(sql, executeId) {
|
|
83
|
+
if (typeof window !== "undefined" && !this.config.fetch) {
|
|
84
|
+
throw new XansqlError({
|
|
85
|
+
message: `In browser environment, fetch implementation is required in config.`,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
sql = sql.trim().replace(/\s+/g, ' ');
|
|
89
|
+
if (typeof window !== "undefined") {
|
|
90
|
+
if (!executeId || !ExecuteMeta.has(executeId)) {
|
|
91
|
+
throw new XansqlError({
|
|
92
|
+
message: `Execute ID is required for browser execution.`,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
const res = await this.XansqlFetch.execute(sql, executeId);
|
|
96
|
+
ExecuteMeta.delete(executeId);
|
|
97
|
+
return res;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
return await this.dialect.execute(sql);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async getRawSchema() {
|
|
104
|
+
if (typeof window !== "undefined") {
|
|
105
|
+
return await this.XansqlFetch.getSchema();
|
|
106
|
+
}
|
|
107
|
+
return await this.dialect.getSchema();
|
|
108
|
+
}
|
|
109
|
+
async uploadFile(file, executeId) {
|
|
110
|
+
return await this.XansqlFetch.uploadFile(file, executeId);
|
|
111
|
+
}
|
|
112
|
+
async deleteFile(filename, executeId) {
|
|
113
|
+
return await this.XansqlFetch.deleteFile(filename, executeId);
|
|
114
|
+
}
|
|
115
|
+
async transaction(callback) {
|
|
116
|
+
return await this.XansqlTransaction.transaction(callback);
|
|
117
|
+
}
|
|
118
|
+
async migrate(force) {
|
|
119
|
+
return await this.XansqlMigration.migrate(force);
|
|
120
|
+
}
|
|
121
|
+
async generateMigration() {
|
|
122
|
+
return await this.XansqlMigration.generate();
|
|
123
|
+
}
|
|
124
|
+
async onFetch(url, info) {
|
|
125
|
+
return await this.XansqlFetch.onFetch(url, info);
|
|
126
|
+
}
|
|
127
|
+
on(event, handler) {
|
|
128
|
+
this.EventManager.on(event, handler);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
class XansqlClone extends Xansql {
|
|
132
|
+
}export{Xansql as default};//# sourceMappingURL=Xansql.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Xansql.mjs","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired, XansqlModelOptions, XansqlOnFetchInfo } from \"./type\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport ModelFormatter from \"./classes/ModelFormatter\";\nimport XansqlFetch from \"./classes/XansqlFetch\";\nimport ExecuteMeta from \"./ExcuteMeta\";\nimport XansqlMigration from \"./classes/Migration\";\nimport { XansqlSchemaObject } from \"../Types/types\";\nimport EventManager, { EventHandler, EventNames } from \"./classes/EventManager\";\nimport TypesGenerator from \"./classes/TypesGenerator\";\nimport XansqlError from \"./XansqlError\";\n\nclass Xansql {\n readonly config: XansqlConfigTypeRequired;\n readonly ModelFactory = new Map<string, Model>()\n readonly XANFETCH_CONTENT_TYPE = 'application/octet-stream';\n private _aliases = new Map<string, string>();\n private ModelFormatter: ModelFormatter;\n private XansqlConfig: XansqlConfig;\n readonly XansqlTransaction: XansqlTransaction;\n private XansqlFetch: XansqlFetch\n readonly EventManager: EventManager\n readonly TypesGenerator: TypesGenerator\n\n // SQL Generator Instances can be added here\n readonly XansqlMigration: XansqlMigration\n\n constructor(config: XansqlConfigType) {\n this.XansqlConfig = new XansqlConfig(this, config);\n this.config = this.XansqlConfig.parse()\n this.XansqlTransaction = new XansqlTransaction(this);\n this.ModelFormatter = new ModelFormatter(this);\n\n this.XansqlMigration = new XansqlMigration(this);\n this.XansqlFetch = new XansqlFetch(this);\n this.EventManager = new EventManager();\n this.TypesGenerator = new TypesGenerator(this);\n }\n\n get dialect() {\n return this.config.dialect;\n }\n\n get models() {\n return this.ModelFormatter.format()\n }\n\n clone(config?: Partial<XansqlConfigType>) {\n const self = new XansqlClone({ ...this.config, ...(config || {}) });\n for (let [table, model] of this.ModelFactory) {\n self.model(table, model.schema, model.options);\n }\n return self;\n }\n\n private makeAlias(table: string) {\n let wordLength = 1;\n table = table.toLowerCase().replace(/[^a-z0-9_]/g, '_')\n let alias = table.slice(0, wordLength)\n while (true) {\n if (!this._aliases.has(alias) || wordLength > table.length) break;\n wordLength++;\n alias = table.slice(0, wordLength);\n }\n if (this._aliases.has(alias)) {\n throw new XansqlError({\n message: `Cannot create alias for table ${table}, please rename the table to avoid conflicts.`,\n model: table,\n });\n }\n this._aliases.set(table, alias);\n return alias;\n }\n\n _timer: any = null;\n model(table: string, schema: XansqlSchemaObject, options?: Partial<XansqlModelOptions>): Model {\n const model = new Model(table, schema);\n if (!model.IDColumn) {\n throw new XansqlError({\n message: `Model ${table} must have an ID column.`,\n model: table,\n });\n }\n if (this.ModelFactory.has(model.table)) {\n throw new XansqlError({\n message: `Model for table ${table} already exists.`,\n model: table,\n });\n }\n model.alias = this.makeAlias(model.table);\n model.xansql = this;\n model.options = {\n hooks: {},\n ...options\n };\n this.ModelFactory.set(model.table, model);\n\n // this will delay the model formatting to allow multiple models to be added before formatting\n clearTimeout(this._timer);\n this._timer = setTimeout(() => {\n this.ModelFormatter.format()\n }, 5);\n return model\n }\n\n getModel(table: string): Model {\n if (!this.ModelFactory.has(table)) {\n throw new XansqlError({\n message: `Model for table ${table} does not exist.`,\n model: table,\n });\n }\n return this.ModelFactory.get(table) as Model;\n }\n\n async execute(sql: string, executeId?: string): Promise<ExecuterResult> {\n if (typeof window !== \"undefined\" && !this.config.fetch) {\n throw new XansqlError({\n message: `In browser environment, fetch implementation is required in config.`,\n });\n }\n\n sql = sql.trim().replace(/\\s+/g, ' ');\n\n if (typeof window !== \"undefined\") {\n if (!executeId || !ExecuteMeta.has(executeId)) {\n throw new XansqlError({\n message: `Execute ID is required for browser execution.`,\n })\n }\n const res = await this.XansqlFetch.execute(sql, executeId);\n ExecuteMeta.delete(executeId);\n return res\n } else {\n return await this.dialect.execute(sql) as any\n }\n }\n\n async getRawSchema() {\n if (typeof window !== \"undefined\") {\n return await this.XansqlFetch.getSchema();\n }\n return await this.dialect.getSchema();\n }\n\n async uploadFile(file: File, executeId?: string) {\n return await this.XansqlFetch.uploadFile(file, executeId);\n }\n\n async deleteFile(filename: string, executeId?: string) {\n return await this.XansqlFetch.deleteFile(filename, executeId);\n }\n\n async transaction(callback: () => Promise<any>) {\n return await this.XansqlTransaction.transaction(callback);\n }\n\n async migrate(force?: boolean) {\n return await this.XansqlMigration.migrate(force);\n }\n\n async generateMigration() {\n return await this.XansqlMigration.generate();\n }\n\n async onFetch(url: string, info: XansqlOnFetchInfo) {\n return await this.XansqlFetch.onFetch(url, info);\n }\n\n on<K extends EventNames>(event: K, handler: EventHandler<K>) {\n this.EventManager.on(event, handler);\n }\n\n}\n\nclass XansqlClone extends Xansql { }\n\n\nexport default Xansql"],"names":["XansqlTransaction"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});class XansqlError extends Error {
|
|
2
|
+
constructor(opt) {
|
|
3
|
+
let model = typeof opt === 'string' ? undefined : opt.model;
|
|
4
|
+
let column = typeof opt === 'string' ? undefined : opt.column;
|
|
5
|
+
let message = typeof opt === 'string' ? opt : opt.message;
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "XansqlError";
|
|
8
|
+
this.model = model;
|
|
9
|
+
this.column = column;
|
|
10
|
+
}
|
|
11
|
+
}exports.default=XansqlError;//# sourceMappingURL=XansqlError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XansqlError.js","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["type XanErrorOption = {\n model?: string;\n column?: string;\n message: string;\n}\n\n\nclass XansqlError extends Error {\n model?: string\n column?: string\n\n constructor(opt: XanErrorOption | string) {\n let model = typeof opt === 'string' ? undefined : opt.model;\n let column = typeof opt === 'string' ? undefined : opt.column;\n let message = typeof opt === 'string' ? (opt as string) : opt.message;\n super(message);\n this.name = \"XansqlError\";\n this.model = model;\n this.column = column;\n }\n}\n\nexport default XansqlError;"],"names":[],"mappings":"sEAOA,MAAM,WAAY,SAAQ,KAAK,CAAA;AAI5B,IAAA,WAAA,CAAY,GAA4B,EAAA;AACrC,QAAA,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK;AAC3D,QAAA,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM;AAC7D,QAAA,IAAI,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAI,GAAc,GAAG,GAAG,CAAC,OAAO;QACrE,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class XansqlError extends Error {
|
|
2
|
+
constructor(opt) {
|
|
3
|
+
let model = typeof opt === 'string' ? undefined : opt.model;
|
|
4
|
+
let column = typeof opt === 'string' ? undefined : opt.column;
|
|
5
|
+
let message = typeof opt === 'string' ? opt : opt.message;
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "XansqlError";
|
|
8
|
+
this.model = model;
|
|
9
|
+
this.column = column;
|
|
10
|
+
}
|
|
11
|
+
}export{XansqlError as default};//# sourceMappingURL=XansqlError.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XansqlError.mjs","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["type XanErrorOption = {\n model?: string;\n column?: string;\n message: string;\n}\n\n\nclass XansqlError extends Error {\n model?: string\n column?: string\n\n constructor(opt: XanErrorOption | string) {\n let model = typeof opt === 'string' ? undefined : opt.model;\n let column = typeof opt === 'string' ? undefined : opt.column;\n let message = typeof opt === 'string' ? (opt as string) : opt.message;\n super(message);\n this.name = \"XansqlError\";\n this.model = model;\n this.column = column;\n }\n}\n\nexport default XansqlError;"],"names":[],"mappings":"AAOA,MAAM,WAAY,SAAQ,KAAK,CAAA;AAI5B,IAAA,WAAA,CAAY,GAA4B,EAAA;AACrC,QAAA,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK;AAC3D,QAAA,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM;AAC7D,QAAA,IAAI,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAI,GAAc,GAAG,GAAG,CAAC,OAAO;QACrE,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare class XansqlResultArray<T> extends Array<T> {
|
|
2
|
+
errors: Map<string, string>;
|
|
3
|
+
hasError(): boolean;
|
|
4
|
+
setError(key: string, error: string): void;
|
|
5
|
+
getErrors(): Map<string, string>;
|
|
6
|
+
first(): T | null;
|
|
7
|
+
last(): T | null;
|
|
8
|
+
count(): number;
|
|
9
|
+
isEmpty(): boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { XansqlResultArray };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});class XansqlResultArray extends Array {
|
|
2
|
+
constructor() {
|
|
3
|
+
super(...arguments);
|
|
4
|
+
this.errors = new Map();
|
|
5
|
+
}
|
|
6
|
+
hasError() {
|
|
7
|
+
return this.errors.size > 0;
|
|
8
|
+
}
|
|
9
|
+
setError(key, error) {
|
|
10
|
+
this.errors.set(key, error);
|
|
11
|
+
}
|
|
12
|
+
getErrors() {
|
|
13
|
+
return this.errors;
|
|
14
|
+
}
|
|
15
|
+
first() {
|
|
16
|
+
return this.length > 0 ? this[0] : null;
|
|
17
|
+
}
|
|
18
|
+
last() {
|
|
19
|
+
return this.length > 0 ? this[this.length - 1] : null;
|
|
20
|
+
}
|
|
21
|
+
count() {
|
|
22
|
+
return this.length;
|
|
23
|
+
}
|
|
24
|
+
isEmpty() {
|
|
25
|
+
return this.length === 0;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const XansqlResult = (arr) => {
|
|
29
|
+
Object.setPrototypeOf(arr, XansqlResultArray.prototype);
|
|
30
|
+
arr.errors = new Map();
|
|
31
|
+
return arr;
|
|
32
|
+
};exports.XansqlResult=XansqlResult;exports.XansqlResultArray=XansqlResultArray;//# sourceMappingURL=XansqlResult.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XansqlResult.js","sources":["../../src/core/XansqlResult.ts"],"sourcesContent":["export class XansqlResultArray<T> extends Array<T> {\n errors: Map<string, string> = new Map();\n\n hasError(): boolean {\n return this.errors.size > 0;\n }\n\n setError(key: string, error: string) {\n this.errors.set(key, error);\n }\n\n getErrors() {\n return this.errors\n }\n\n first(): T | null {\n return this.length > 0 ? this[0] : null;\n }\n\n last(): T | null {\n return this.length > 0 ? this[this.length - 1] : null;\n }\n\n count(): number {\n return this.length;\n }\n\n isEmpty(): boolean {\n return this.length === 0;\n }\n}\n\n\nexport const XansqlResult = <T>(arr: T[]): (XansqlResultArray<T>) => {\n Object.setPrototypeOf(arr, XansqlResultArray.prototype);\n (arr as any).errors = new Map<string, string>();\n return arr as XansqlResultArray<T>;\n};"],"names":[],"mappings":"sEAAM,MAAO,iBAAqB,SAAQ,KAAQ,CAAA;AAAlD,IAAA,WAAA,GAAA;;AACG,QAAA,IAAA,CAAA,MAAM,GAAwB,IAAI,GAAG,EAAE;IA6B1C;IA3BG,QAAQ,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IAC9B;IAEA,QAAQ,CAAC,GAAW,EAAE,KAAa,EAAA;QAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IAC9B;IAEA,SAAS,GAAA;QACN,OAAO,IAAI,CAAC,MAAM;IACrB;IAEA,KAAK,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;IAC1C;IAEA,IAAI,GAAA;QACD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;IACxD;IAEA,KAAK,GAAA;QACF,OAAO,IAAI,CAAC,MAAM;IACrB;IAEA,OAAO,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC;IAC3B;AACF;AAGM,MAAM,YAAY,GAAG,CAAI,GAAQ,KAA4B;IACjE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,iBAAiB,CAAC,SAAS,CAAC;AACtD,IAAA,GAAW,CAAC,MAAM,GAAG,IAAI,GAAG,EAAkB;AAC/C,IAAA,OAAO,GAA2B;AACrC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
class XansqlResultArray extends Array {
|
|
2
|
+
constructor() {
|
|
3
|
+
super(...arguments);
|
|
4
|
+
this.errors = new Map();
|
|
5
|
+
}
|
|
6
|
+
hasError() {
|
|
7
|
+
return this.errors.size > 0;
|
|
8
|
+
}
|
|
9
|
+
setError(key, error) {
|
|
10
|
+
this.errors.set(key, error);
|
|
11
|
+
}
|
|
12
|
+
getErrors() {
|
|
13
|
+
return this.errors;
|
|
14
|
+
}
|
|
15
|
+
first() {
|
|
16
|
+
return this.length > 0 ? this[0] : null;
|
|
17
|
+
}
|
|
18
|
+
last() {
|
|
19
|
+
return this.length > 0 ? this[this.length - 1] : null;
|
|
20
|
+
}
|
|
21
|
+
count() {
|
|
22
|
+
return this.length;
|
|
23
|
+
}
|
|
24
|
+
isEmpty() {
|
|
25
|
+
return this.length === 0;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const XansqlResult = (arr) => {
|
|
29
|
+
Object.setPrototypeOf(arr, XansqlResultArray.prototype);
|
|
30
|
+
arr.errors = new Map();
|
|
31
|
+
return arr;
|
|
32
|
+
};export{XansqlResult,XansqlResultArray};//# sourceMappingURL=XansqlResult.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XansqlResult.mjs","sources":["../../src/core/XansqlResult.ts"],"sourcesContent":["export class XansqlResultArray<T> extends Array<T> {\n errors: Map<string, string> = new Map();\n\n hasError(): boolean {\n return this.errors.size > 0;\n }\n\n setError(key: string, error: string) {\n this.errors.set(key, error);\n }\n\n getErrors() {\n return this.errors\n }\n\n first(): T | null {\n return this.length > 0 ? this[0] : null;\n }\n\n last(): T | null {\n return this.length > 0 ? this[this.length - 1] : null;\n }\n\n count(): number {\n return this.length;\n }\n\n isEmpty(): boolean {\n return this.length === 0;\n }\n}\n\n\nexport const XansqlResult = <T>(arr: T[]): (XansqlResultArray<T>) => {\n Object.setPrototypeOf(arr, XansqlResultArray.prototype);\n (arr as any).errors = new Map<string, string>();\n return arr as XansqlResultArray<T>;\n};"],"names":[],"mappings":"AAAM,MAAO,iBAAqB,SAAQ,KAAQ,CAAA;AAAlD,IAAA,WAAA,GAAA;;AACG,QAAA,IAAA,CAAA,MAAM,GAAwB,IAAI,GAAG,EAAE;IA6B1C;IA3BG,QAAQ,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IAC9B;IAEA,QAAQ,CAAC,GAAW,EAAE,KAAa,EAAA;QAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IAC9B;IAEA,SAAS,GAAA;QACN,OAAO,IAAI,CAAC,MAAM;IACrB;IAEA,KAAK,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;IAC1C;IAEA,IAAI,GAAA;QACD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;IACxD;IAEA,KAAK,GAAA;QACF,OAAO,IAAI,CAAC,MAAM;IACrB;IAEA,OAAO,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC;IAC3B;AACF;AAGM,MAAM,YAAY,GAAG,CAAI,GAAQ,KAA4B;IACjE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,iBAAiB,CAAC,SAAS,CAAC;AACtD,IAAA,GAAW,CAAC,MAAM,GAAG,IAAI,GAAG,EAAkB;AAC/C,IAAA,OAAO,GAA2B;AACrC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import Model from '../../model/index.js';
|
|
2
|
+
import { CreateArgsType, UpdateArgsType, DeleteArgsType, FindArgsType } from '../../model/type.js';
|
|
3
|
+
|
|
4
|
+
type EventNames = "CREATE" | "UPDATE" | "DELETE" | "FIND" | "AGGREGATE" | "BEFORE_CREATE" | "BEFORE_UPDATE" | "BEFORE_DELETE" | "BEFORE_FIND" | "BEFORE_AGGREGATE" | "BEFORE_FETCH" | "FETCH";
|
|
5
|
+
type Result = {
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
};
|
|
8
|
+
type EventPayloads = {
|
|
9
|
+
CREATE: {
|
|
10
|
+
model: Model;
|
|
11
|
+
results: Result[];
|
|
12
|
+
args: CreateArgsType;
|
|
13
|
+
};
|
|
14
|
+
UPDATE: {
|
|
15
|
+
model: Model;
|
|
16
|
+
results: Result[];
|
|
17
|
+
args: UpdateArgsType;
|
|
18
|
+
};
|
|
19
|
+
DELETE: {
|
|
20
|
+
model: Model;
|
|
21
|
+
results: Result[];
|
|
22
|
+
args: DeleteArgsType;
|
|
23
|
+
};
|
|
24
|
+
FIND: {
|
|
25
|
+
model: Model;
|
|
26
|
+
results: Result[];
|
|
27
|
+
args: FindArgsType;
|
|
28
|
+
};
|
|
29
|
+
AGGREGATE: {
|
|
30
|
+
model: Model;
|
|
31
|
+
results: any;
|
|
32
|
+
args: any;
|
|
33
|
+
};
|
|
34
|
+
BEFORE_CREATE: {
|
|
35
|
+
model: Model;
|
|
36
|
+
args: CreateArgsType;
|
|
37
|
+
};
|
|
38
|
+
BEFORE_UPDATE: {
|
|
39
|
+
model: Model;
|
|
40
|
+
args: UpdateArgsType;
|
|
41
|
+
};
|
|
42
|
+
BEFORE_DELETE: {
|
|
43
|
+
model: Model;
|
|
44
|
+
args: DeleteArgsType;
|
|
45
|
+
};
|
|
46
|
+
BEFORE_FIND: {
|
|
47
|
+
model: Model;
|
|
48
|
+
args: FindArgsType;
|
|
49
|
+
};
|
|
50
|
+
BEFORE_AGGREGATE: {
|
|
51
|
+
model: Model;
|
|
52
|
+
args: any;
|
|
53
|
+
};
|
|
54
|
+
BEFORE_FETCH: {
|
|
55
|
+
url: string;
|
|
56
|
+
info: any;
|
|
57
|
+
};
|
|
58
|
+
FETCH: {
|
|
59
|
+
url: string;
|
|
60
|
+
info: any;
|
|
61
|
+
response: any;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
type EventHandler<K extends EventNames> = (payload: EventPayloads[K]) => void | Promise<void>;
|
|
65
|
+
declare class EventManager {
|
|
66
|
+
private events;
|
|
67
|
+
on<K extends EventNames>(event: K, handler: EventHandler<K>): this;
|
|
68
|
+
emit<K extends EventNames>(event: K, payload: EventPayloads[K]): Promise<this>;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export { EventManager as default };
|
|
72
|
+
export type { EventHandler, EventNames, EventPayloads };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});class EventManager {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.events = {};
|
|
4
|
+
}
|
|
5
|
+
on(event, handler) {
|
|
6
|
+
if (!this.events[event]) {
|
|
7
|
+
this.events[event] = [];
|
|
8
|
+
}
|
|
9
|
+
this.events[event].push(handler);
|
|
10
|
+
return this;
|
|
11
|
+
}
|
|
12
|
+
async emit(event, payload) {
|
|
13
|
+
const handlers = this.events[event];
|
|
14
|
+
if (!handlers)
|
|
15
|
+
return this;
|
|
16
|
+
for (const handler of handlers) {
|
|
17
|
+
await handler(payload);
|
|
18
|
+
}
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
}exports.default=EventManager;//# sourceMappingURL=EventManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventManager.js","sources":["../../../src/core/classes/EventManager.ts"],"sourcesContent":["import Model from \"../../model\";\nimport { CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType } from \"../../model/type\";\n\nexport type EventNames =\n | \"CREATE\"\n | \"UPDATE\"\n | \"DELETE\"\n | \"FIND\"\n | \"AGGREGATE\"\n\n | \"BEFORE_CREATE\"\n | \"BEFORE_UPDATE\"\n | \"BEFORE_DELETE\"\n | \"BEFORE_FIND\"\n | \"BEFORE_AGGREGATE\"\n\n | \"BEFORE_FETCH\"\n | \"FETCH\";\n\n\ntype Result = { [key: string]: any };\n\nexport type EventPayloads = {\n CREATE: { model: Model; results: Result[]; args: CreateArgsType };\n UPDATE: { model: Model; results: Result[], args: UpdateArgsType };\n DELETE: { model: Model; results: Result[], args: DeleteArgsType };\n FIND: { model: Model; results: Result[], args: FindArgsType };\n AGGREGATE: { model: Model; results: any; args: any };\n\n BEFORE_CREATE: { model: Model; args: CreateArgsType };\n BEFORE_UPDATE: { model: Model; args: UpdateArgsType };\n BEFORE_DELETE: { model: Model; args: DeleteArgsType };\n BEFORE_FIND: { model: Model; args: FindArgsType };\n BEFORE_AGGREGATE: { model: Model; args: any };\n\n BEFORE_FETCH: { url: string; info: any };\n FETCH: { url: string; info: any; response: any };\n\n};\n\n// correct type: handler only gets its OWN event payload\nexport type EventHandler<K extends EventNames> = (payload: EventPayloads[K]) => void | Promise<void>;\n\nclass EventManager {\n private events: {\n [K in EventNames]?: EventHandler<K>[];\n } = {};\n\n on<K extends EventNames>(event: K, handler: EventHandler<K>) {\n if (!this.events[event]) {\n this.events[event] = [];\n }\n this.events[event]!.push(handler);\n return this;\n }\n\n async emit<K extends EventNames>(event: K, payload: EventPayloads[K]) {\n const handlers = this.events[event];\n if (!handlers) return this;\n for (const handler of handlers) {\n await handler(payload);\n }\n return this;\n }\n}\n\nexport default EventManager;\n"],"names":[],"mappings":"sEA2CA,MAAM,YAAY,CAAA;AAAlB,IAAA,WAAA,GAAA;QACW,IAAA,CAAA,MAAM,GAEV,EAAE;IAkBT;IAhBG,EAAE,CAAuB,KAAQ,EAAE,OAAwB,EAAA;QACxD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAC1B;QACA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,MAAM,IAAI,CAAuB,KAAQ,EAAE,OAAyB,EAAA;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAC1B,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC7B,YAAA,MAAM,OAAO,CAAC,OAAO,CAAC;QACzB;AACA,QAAA,OAAO,IAAI;IACd;AACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class EventManager {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.events = {};
|
|
4
|
+
}
|
|
5
|
+
on(event, handler) {
|
|
6
|
+
if (!this.events[event]) {
|
|
7
|
+
this.events[event] = [];
|
|
8
|
+
}
|
|
9
|
+
this.events[event].push(handler);
|
|
10
|
+
return this;
|
|
11
|
+
}
|
|
12
|
+
async emit(event, payload) {
|
|
13
|
+
const handlers = this.events[event];
|
|
14
|
+
if (!handlers)
|
|
15
|
+
return this;
|
|
16
|
+
for (const handler of handlers) {
|
|
17
|
+
await handler(payload);
|
|
18
|
+
}
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
}export{EventManager as default};//# sourceMappingURL=EventManager.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventManager.mjs","sources":["../../../src/core/classes/EventManager.ts"],"sourcesContent":["import Model from \"../../model\";\nimport { CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType } from \"../../model/type\";\n\nexport type EventNames =\n | \"CREATE\"\n | \"UPDATE\"\n | \"DELETE\"\n | \"FIND\"\n | \"AGGREGATE\"\n\n | \"BEFORE_CREATE\"\n | \"BEFORE_UPDATE\"\n | \"BEFORE_DELETE\"\n | \"BEFORE_FIND\"\n | \"BEFORE_AGGREGATE\"\n\n | \"BEFORE_FETCH\"\n | \"FETCH\";\n\n\ntype Result = { [key: string]: any };\n\nexport type EventPayloads = {\n CREATE: { model: Model; results: Result[]; args: CreateArgsType };\n UPDATE: { model: Model; results: Result[], args: UpdateArgsType };\n DELETE: { model: Model; results: Result[], args: DeleteArgsType };\n FIND: { model: Model; results: Result[], args: FindArgsType };\n AGGREGATE: { model: Model; results: any; args: any };\n\n BEFORE_CREATE: { model: Model; args: CreateArgsType };\n BEFORE_UPDATE: { model: Model; args: UpdateArgsType };\n BEFORE_DELETE: { model: Model; args: DeleteArgsType };\n BEFORE_FIND: { model: Model; args: FindArgsType };\n BEFORE_AGGREGATE: { model: Model; args: any };\n\n BEFORE_FETCH: { url: string; info: any };\n FETCH: { url: string; info: any; response: any };\n\n};\n\n// correct type: handler only gets its OWN event payload\nexport type EventHandler<K extends EventNames> = (payload: EventPayloads[K]) => void | Promise<void>;\n\nclass EventManager {\n private events: {\n [K in EventNames]?: EventHandler<K>[];\n } = {};\n\n on<K extends EventNames>(event: K, handler: EventHandler<K>) {\n if (!this.events[event]) {\n this.events[event] = [];\n }\n this.events[event]!.push(handler);\n return this;\n }\n\n async emit<K extends EventNames>(event: K, payload: EventPayloads[K]) {\n const handlers = this.events[event];\n if (!handlers) return this;\n for (const handler of handlers) {\n await handler(payload);\n }\n return this;\n }\n}\n\nexport default EventManager;\n"],"names":[],"mappings":"AA2CA,MAAM,YAAY,CAAA;AAAlB,IAAA,WAAA,GAAA;QACW,IAAA,CAAA,MAAM,GAEV,EAAE;IAkBT;IAhBG,EAAE,CAAuB,KAAQ,EAAE,OAAwB,EAAA;QACxD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAC1B;QACA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,MAAM,IAAI,CAAuB,KAAQ,EAAE,OAAyB,EAAA;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAC1B,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC7B,YAAA,MAAM,OAAO,CAAC,OAAO,CAAC;QACzB;AACA,QAAA,OAAO,IAAI;IACd;AACF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var Array=require('../../Types/fields/Array.js'),Schema=require('../../Types/fields/Schema.js'),XansqlError=require('../XansqlError.js');/**
|
|
2
|
+
* Foreign Key Class
|
|
3
|
+
* @description This class is used to handle foreign key relationships between models
|
|
4
|
+
* @example
|
|
5
|
+
* const foreignInfo = Foreign.info(model, column);
|
|
6
|
+
* console.log(foreignInfo);
|
|
7
|
+
*/
|
|
8
|
+
class Foreign {
|
|
9
|
+
static is(field) {
|
|
10
|
+
return this.isArray(field) || this.isSchema(field);
|
|
11
|
+
}
|
|
12
|
+
static isArray(field) {
|
|
13
|
+
return field instanceof Array.default && this.isSchema(field.type);
|
|
14
|
+
}
|
|
15
|
+
static isSchema(field) {
|
|
16
|
+
return field instanceof Schema.default;
|
|
17
|
+
}
|
|
18
|
+
static get(model, column) {
|
|
19
|
+
model.table;
|
|
20
|
+
let schema = model.schema;
|
|
21
|
+
let field = schema[column];
|
|
22
|
+
if (this.isArray(field)) {
|
|
23
|
+
const foreignType = field.type;
|
|
24
|
+
return {
|
|
25
|
+
table: foreignType.table,
|
|
26
|
+
column: foreignType.column,
|
|
27
|
+
relation: {
|
|
28
|
+
main: foreignType.column,
|
|
29
|
+
target: model.IDColumn,
|
|
30
|
+
},
|
|
31
|
+
sql: `${foreignType.table}.${foreignType.column} = ${model.table}.${model.IDColumn}`
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
else if (this.isSchema(field)) {
|
|
35
|
+
const FModel = model.xansql.getModel(field.table);
|
|
36
|
+
return {
|
|
37
|
+
table: field.table,
|
|
38
|
+
column: field.column,
|
|
39
|
+
relation: {
|
|
40
|
+
main: FModel.IDColumn,
|
|
41
|
+
target: column
|
|
42
|
+
},
|
|
43
|
+
sql: `${field.table}.${FModel.IDColumn} = ${model.table}.${column}`
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
throw new XansqlError.default({
|
|
47
|
+
message: `Field ${column} in model ${model.table} is not a foreign key.`,
|
|
48
|
+
model: model.table,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}exports.default=Foreign;//# sourceMappingURL=ForeignInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForeignInfo.js","sources":["../../../src/core/classes/ForeignInfo.ts"],"sourcesContent":["import Model from \"../../model\";\nimport XqlArray from \"../../Types/fields/Array\";\nimport XqlSchema from \"../../Types/fields/Schema\";\nimport { XqlFields } from \"../../Types/types\";\nimport XansqlError from \"../XansqlError\";\n\n\nexport type ForeignInfoType = {\n table: string\n column: string\n relation: {\n main: string\n target: string\n }\n sql: string\n}\n/**\n * Foreign Key Class\n * @description This class is used to handle foreign key relationships between models\n * @example\n * const foreignInfo = Foreign.info(model, column);\n * console.log(foreignInfo);\n */\nclass Foreign {\n\n static is(field: XqlFields) {\n return this.isArray(field) || this.isSchema(field)\n }\n\n static isArray(field: XqlFields) {\n return field instanceof XqlArray && this.isSchema((field as any).type)\n }\n\n static isSchema(field: XqlFields) {\n return field instanceof XqlSchema\n }\n\n static get(model: Model, column: string): ForeignInfoType {\n let table = model.table\n let schema = model.schema\n let field: any = schema[column]\n\n if (this.isArray(field)) {\n const foreignType = field.type as XqlSchema;\n return {\n table: foreignType.table,\n column: foreignType.column,\n relation: {\n main: foreignType.column,\n target: model.IDColumn,\n },\n sql: `${foreignType.table}.${foreignType.column} = ${model.table}.${model.IDColumn}`\n }\n } else if (this.isSchema(field)) {\n const FModel = model.xansql.getModel(field.table)\n return {\n table: field.table,\n column: field.column,\n relation: {\n main: FModel.IDColumn,\n target: column\n },\n sql: `${field.table}.${FModel.IDColumn} = ${model.table}.${column}`\n }\n }\n throw new XansqlError({\n message: `Field ${column} in model ${model.table} is not a foreign key.`,\n model: model.table,\n });\n }\n\n}\n\nexport default Foreign"],"names":["XqlArray","XqlSchema","XansqlError"],"mappings":"+MAgBA;;;;;;AAMG;AACH,MAAM,OAAO,CAAA;IAEV,OAAO,EAAE,CAAC,KAAgB,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACrD;IAEA,OAAO,OAAO,CAAC,KAAgB,EAAA;AAC5B,QAAA,OAAO,KAAK,YAAYA,aAAQ,IAAI,IAAI,CAAC,QAAQ,CAAE,KAAa,CAAC,IAAI,CAAC;IACzE;IAEA,OAAO,QAAQ,CAAC,KAAgB,EAAA;QAC7B,OAAO,KAAK,YAAYC,cAAS;IACpC;AAEA,IAAA,OAAO,GAAG,CAAC,KAAY,EAAE,MAAc,EAAA;AACpC,QAAY,KAAK,CAAC;AAClB,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AACzB,QAAA,IAAI,KAAK,GAAQ,MAAM,CAAC,MAAM,CAAC;AAE/B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAiB;YAC3C,OAAO;gBACJ,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,MAAM,EAAE,WAAW,CAAC,MAAM;AAC1B,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,WAAW,CAAC,MAAM;oBACxB,MAAM,EAAE,KAAK,CAAC,QAAQ;AACxB,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM,CAAA,GAAA,EAAM,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAA;aACpF;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACjD,OAAO;gBACJ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,MAAM,CAAC,QAAQ;AACrB,oBAAA,MAAM,EAAE;AACV,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,MAAM,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA;aACnE;QACJ;QACA,MAAM,IAAIC,mBAAW,CAAC;AACnB,YAAA,OAAO,EAAE,CAAA,MAAA,EAAS,MAAM,aAAa,KAAK,CAAC,KAAK,CAAA,sBAAA,CAAwB;YACxE,KAAK,EAAE,KAAK,CAAC,KAAK;AACpB,SAAA,CAAC;IACL;AAEF"}
|