xansql 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/Migration.cjs +3 -2
- package/core/Migration.cjs.map +1 -1
- package/core/Migration.js +3 -2
- package/core/Migration.js.map +1 -1
- package/core/Xansql.cjs +10 -4
- package/core/Xansql.cjs.map +1 -1
- package/core/Xansql.d.ts +1 -0
- package/core/Xansql.js +10 -4
- package/core/Xansql.js.map +1 -1
- package/core/classes/XansqlTransaction.cjs +3 -3
- package/core/classes/XansqlTransaction.cjs.map +1 -1
- package/core/classes/XansqlTransaction.js +3 -3
- package/core/classes/XansqlTransaction.js.map +1 -1
- package/dialects/Bridge/server.cjs +1 -5
- package/dialects/Bridge/server.cjs.map +1 -1
- package/dialects/Bridge/server.d.ts +4 -3
- package/dialects/Bridge/server.js +1 -5
- package/dialects/Bridge/server.js.map +1 -1
- package/model/index.cjs +18 -17
- package/model/index.cjs.map +1 -1
- package/model/index.d.ts +6 -6
- package/model/index.js +18 -17
- package/model/index.js.map +1 -1
- package/package.json +1 -1
package/core/Migration.cjs
CHANGED
|
@@ -95,7 +95,8 @@ class Migration {
|
|
|
95
95
|
return await this.model.findOne({
|
|
96
96
|
where: {
|
|
97
97
|
model: model.table
|
|
98
|
-
}
|
|
98
|
+
},
|
|
99
|
+
debug: false
|
|
99
100
|
});
|
|
100
101
|
}
|
|
101
102
|
async migrateSchema(model) {
|
|
@@ -106,7 +107,7 @@ class Migration {
|
|
|
106
107
|
}
|
|
107
108
|
async has(model) {
|
|
108
109
|
return await this.model.count({
|
|
109
|
-
model: model.table
|
|
110
|
+
model: model.table,
|
|
110
111
|
});
|
|
111
112
|
}
|
|
112
113
|
}
|
package/core/Migration.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Migration.cjs","sources":["../../src/core/Migration.ts"],"sourcesContent":["import { xv } from \"xanv\";\nimport Model from \"../model\";\nimport xt from \"../xt\";\nimport Xansql from \"./Xansql\";\nimport { XqlFieldInfoSchema } from \"../xt/XqlFieldInfo\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport { iof } from \"../utils\";\nimport XansqlError from \"./XansqlError\";\n\nclass MigrationModel extends Model {\n get table() {\n return \"_xansql_migration\"\n }\n\n schema() {\n return {\n id: xt.id(),\n model: xt.string(),\n schema: xt.record(xt.string(), xt.object({\n type: xt.string(),\n length: xt.number().nullable(),\n default: xv.any(),\n unique: xt.boolean(),\n nullable: xt.boolean(),\n index: xt.string()\n })),\n created_at: xt.date().createdAt(),\n updated_at: xt.date().updatedAt(),\n }\n }\n}\n\n\nclass Migration {\n model\n constructor(private xansql: Xansql) {\n this.model = xansql.model(MigrationModel)\n this.migrate(this.model)\n }\n\n async migrate<M extends Model<any>>(model: M) {\n if (typeof window !== \"undefined\") return\n\n const schema = model.schema()\n let column_sqls = []\n let index_sqls = []\n let migrate_schema: { [column: string]: XqlFieldInfoSchema } = {}\n\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n column_sqls.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n migrate_schema[column] = field.info.schema\n }\n }\n\n const sql = `CREATE TABLE IF NOT EXISTS ${model.table}(${column_sqls.join(\",\")})`\n await model.execute(sql, false)\n for (let idxql of index_sqls) {\n try {\n await model.execute(idxql, false)\n } catch (error) { }\n }\n\n if (model.table === this.model.table) {\n return\n }\n\n const prev_migration = await this.migrateSchema(model)\n if (prev_migration) {\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n if (column in prev_migration) {\n\n } else {\n // Add column\n await model.execute(info.sql.alter_column, false)\n }\n }\n }\n }\n\n return await this.model.upsert({\n create: {\n model: model.table,\n schema: migrate_schema\n },\n update: {\n schema: migrate_schema\n },\n where: {\n model: model.table\n },\n useTransection: false,\n debug: false\n })\n }\n\n async get(model: Model) {\n return await this.model.findOne({\n where: {\n model: model.table\n }\n })\n }\n\n async migrateSchema(model: Model) {\n const get = await this.get(model)\n if (get) {\n return get.schema\n }\n }\n\n async has(model: Model) {\n return await this.model.count({\n model: model.table
|
|
1
|
+
{"version":3,"file":"Migration.cjs","sources":["../../src/core/Migration.ts"],"sourcesContent":["import { xv } from \"xanv\";\nimport Model from \"../model\";\nimport xt from \"../xt\";\nimport Xansql from \"./Xansql\";\nimport { XqlFieldInfoSchema } from \"../xt/XqlFieldInfo\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport { iof } from \"../utils\";\nimport XansqlError from \"./XansqlError\";\n\nclass MigrationModel extends Model {\n get table() {\n return \"_xansql_migration\"\n }\n\n schema() {\n return {\n id: xt.id(),\n model: xt.string(),\n schema: xt.record(xt.string(), xt.object({\n type: xt.string(),\n length: xt.number().nullable(),\n default: xv.any(),\n unique: xt.boolean(),\n nullable: xt.boolean(),\n index: xt.string()\n })),\n created_at: xt.date().createdAt(),\n updated_at: xt.date().updatedAt(),\n }\n }\n}\n\n\nclass Migration {\n model\n constructor(private xansql: Xansql) {\n this.model = xansql.model(MigrationModel)\n this.migrate(this.model)\n }\n\n async migrate<M extends Model<any>>(model: M) {\n if (typeof window !== \"undefined\") return\n\n const schema = model.schema()\n let column_sqls = []\n let index_sqls = []\n let migrate_schema: { [column: string]: XqlFieldInfoSchema } = {}\n\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n column_sqls.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n migrate_schema[column] = field.info.schema\n }\n }\n\n const sql = `CREATE TABLE IF NOT EXISTS ${model.table}(${column_sqls.join(\",\")})`\n await model.execute(sql, false)\n for (let idxql of index_sqls) {\n try {\n await model.execute(idxql, false)\n } catch (error) { }\n }\n\n if (model.table === this.model.table) {\n return\n }\n\n const prev_migration = await this.migrateSchema(model)\n if (prev_migration) {\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n if (column in prev_migration) {\n\n } else {\n // Add column\n await model.execute(info.sql.alter_column, false)\n }\n }\n }\n }\n\n return await this.model.upsert({\n create: {\n model: model.table,\n schema: migrate_schema\n },\n update: {\n schema: migrate_schema\n },\n where: {\n model: model.table\n },\n useTransection: false,\n debug: false\n })\n }\n\n async get(model: Model) {\n return await this.model.findOne({\n where: {\n model: model.table\n },\n debug: false\n })\n }\n\n async migrateSchema(model: Model) {\n const get = await this.get(model)\n if (get) {\n return get.schema\n }\n }\n\n async has(model: Model) {\n return await this.model.count({\n model: model.table,\n })\n }\n}\n\nexport default Migration"],"names":["Model","xt","xv","iof","XqlRelationMany"],"mappings":"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"}
|
package/core/Migration.js
CHANGED
|
@@ -93,7 +93,8 @@ class Migration {
|
|
|
93
93
|
return await this.model.findOne({
|
|
94
94
|
where: {
|
|
95
95
|
model: model.table
|
|
96
|
-
}
|
|
96
|
+
},
|
|
97
|
+
debug: false
|
|
97
98
|
});
|
|
98
99
|
}
|
|
99
100
|
async migrateSchema(model) {
|
|
@@ -104,7 +105,7 @@ class Migration {
|
|
|
104
105
|
}
|
|
105
106
|
async has(model) {
|
|
106
107
|
return await this.model.count({
|
|
107
|
-
model: model.table
|
|
108
|
+
model: model.table,
|
|
108
109
|
});
|
|
109
110
|
}
|
|
110
111
|
}
|
package/core/Migration.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Migration.js","sources":["../../src/core/Migration.ts"],"sourcesContent":["import { xv } from \"xanv\";\nimport Model from \"../model\";\nimport xt from \"../xt\";\nimport Xansql from \"./Xansql\";\nimport { XqlFieldInfoSchema } from \"../xt/XqlFieldInfo\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport { iof } from \"../utils\";\nimport XansqlError from \"./XansqlError\";\n\nclass MigrationModel extends Model {\n get table() {\n return \"_xansql_migration\"\n }\n\n schema() {\n return {\n id: xt.id(),\n model: xt.string(),\n schema: xt.record(xt.string(), xt.object({\n type: xt.string(),\n length: xt.number().nullable(),\n default: xv.any(),\n unique: xt.boolean(),\n nullable: xt.boolean(),\n index: xt.string()\n })),\n created_at: xt.date().createdAt(),\n updated_at: xt.date().updatedAt(),\n }\n }\n}\n\n\nclass Migration {\n model\n constructor(private xansql: Xansql) {\n this.model = xansql.model(MigrationModel)\n this.migrate(this.model)\n }\n\n async migrate<M extends Model<any>>(model: M) {\n if (typeof window !== \"undefined\") return\n\n const schema = model.schema()\n let column_sqls = []\n let index_sqls = []\n let migrate_schema: { [column: string]: XqlFieldInfoSchema } = {}\n\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n column_sqls.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n migrate_schema[column] = field.info.schema\n }\n }\n\n const sql = `CREATE TABLE IF NOT EXISTS ${model.table}(${column_sqls.join(\",\")})`\n await model.execute(sql, false)\n for (let idxql of index_sqls) {\n try {\n await model.execute(idxql, false)\n } catch (error) { }\n }\n\n if (model.table === this.model.table) {\n return\n }\n\n const prev_migration = await this.migrateSchema(model)\n if (prev_migration) {\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n if (column in prev_migration) {\n\n } else {\n // Add column\n await model.execute(info.sql.alter_column, false)\n }\n }\n }\n }\n\n return await this.model.upsert({\n create: {\n model: model.table,\n schema: migrate_schema\n },\n update: {\n schema: migrate_schema\n },\n where: {\n model: model.table\n },\n useTransection: false,\n debug: false\n })\n }\n\n async get(model: Model) {\n return await this.model.findOne({\n where: {\n model: model.table\n }\n })\n }\n\n async migrateSchema(model: Model) {\n const get = await this.get(model)\n if (get) {\n return get.schema\n }\n }\n\n async has(model: Model) {\n return await this.model.count({\n model: model.table
|
|
1
|
+
{"version":3,"file":"Migration.js","sources":["../../src/core/Migration.ts"],"sourcesContent":["import { xv } from \"xanv\";\nimport Model from \"../model\";\nimport xt from \"../xt\";\nimport Xansql from \"./Xansql\";\nimport { XqlFieldInfoSchema } from \"../xt/XqlFieldInfo\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport { iof } from \"../utils\";\nimport XansqlError from \"./XansqlError\";\n\nclass MigrationModel extends Model {\n get table() {\n return \"_xansql_migration\"\n }\n\n schema() {\n return {\n id: xt.id(),\n model: xt.string(),\n schema: xt.record(xt.string(), xt.object({\n type: xt.string(),\n length: xt.number().nullable(),\n default: xv.any(),\n unique: xt.boolean(),\n nullable: xt.boolean(),\n index: xt.string()\n })),\n created_at: xt.date().createdAt(),\n updated_at: xt.date().updatedAt(),\n }\n }\n}\n\n\nclass Migration {\n model\n constructor(private xansql: Xansql) {\n this.model = xansql.model(MigrationModel)\n this.migrate(this.model)\n }\n\n async migrate<M extends Model<any>>(model: M) {\n if (typeof window !== \"undefined\") return\n\n const schema = model.schema()\n let column_sqls = []\n let index_sqls = []\n let migrate_schema: { [column: string]: XqlFieldInfoSchema } = {}\n\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n column_sqls.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n migrate_schema[column] = field.info.schema\n }\n }\n\n const sql = `CREATE TABLE IF NOT EXISTS ${model.table}(${column_sqls.join(\",\")})`\n await model.execute(sql, false)\n for (let idxql of index_sqls) {\n try {\n await model.execute(idxql, false)\n } catch (error) { }\n }\n\n if (model.table === this.model.table) {\n return\n }\n\n const prev_migration = await this.migrateSchema(model)\n if (prev_migration) {\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n if (column in prev_migration) {\n\n } else {\n // Add column\n await model.execute(info.sql.alter_column, false)\n }\n }\n }\n }\n\n return await this.model.upsert({\n create: {\n model: model.table,\n schema: migrate_schema\n },\n update: {\n schema: migrate_schema\n },\n where: {\n model: model.table\n },\n useTransection: false,\n debug: false\n })\n }\n\n async get(model: Model) {\n return await this.model.findOne({\n where: {\n model: model.table\n },\n debug: false\n })\n }\n\n async migrateSchema(model: Model) {\n const get = await this.get(model)\n if (get) {\n return get.schema\n }\n }\n\n async has(model: Model) {\n return await this.model.count({\n model: model.table,\n })\n }\n}\n\nexport default Migration"],"names":[],"mappings":"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"}
|
package/core/Xansql.cjs
CHANGED
|
@@ -34,19 +34,19 @@ class Xansql {
|
|
|
34
34
|
console.log(`[DB] Executing → ${query}`);
|
|
35
35
|
}
|
|
36
36
|
try {
|
|
37
|
-
const
|
|
37
|
+
const execute = await this.dialect.execute(query, this);
|
|
38
38
|
if (isDebug) {
|
|
39
39
|
console.log(`[DB] Executed ✓`);
|
|
40
|
-
console.dir(
|
|
40
|
+
console.dir(execute.results, { depth: null });
|
|
41
41
|
}
|
|
42
|
-
return
|
|
42
|
+
return execute;
|
|
43
43
|
}
|
|
44
44
|
catch (error) {
|
|
45
45
|
if (isDebug) {
|
|
46
46
|
console.error(`[DB] Execution failed ✗`);
|
|
47
47
|
console.error(query);
|
|
48
48
|
}
|
|
49
|
-
throw error;
|
|
49
|
+
throw error;
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
async uploadFile(file$1) {
|
|
@@ -117,6 +117,12 @@ class Xansql {
|
|
|
117
117
|
}
|
|
118
118
|
return await this.config.file.delete(fileId, this);
|
|
119
119
|
}
|
|
120
|
+
async migrate() {
|
|
121
|
+
const models = Array.from(this.models.values());
|
|
122
|
+
for (let model of models) {
|
|
123
|
+
await this.Migration.migrate(model);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
120
126
|
}
|
|
121
127
|
|
|
122
128
|
module.exports = Xansql;
|
package/core/Xansql.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Xansql.cjs","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired, XansqlFileMeta, XansqlFileUploadArgs } from \"./types\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport XansqlError from \"./XansqlError\";\nimport { ModelClass } from \"../model/types\";\nimport { chunkFile, getFileId, totalChunks } from \"../utils/file\";\nimport Migration from \"./Migration\";\nimport fileScaner from \"../utils/fileScaner\";\n\
|
|
1
|
+
{"version":3,"file":"Xansql.cjs","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired, XansqlFileMeta, XansqlFileUploadArgs } from \"./types\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport XansqlError from \"./XansqlError\";\nimport { ModelClass } from \"../model/types\";\nimport { chunkFile, getFileId, totalChunks } from \"../utils/file\";\nimport Migration from \"./Migration\";\nimport fileScaner from \"../utils/fileScaner\";\n\nclass Xansql {\n private XansqlConfig: XansqlConfig;\n readonly config: XansqlConfigTypeRequired;\n readonly XansqlTransaction: XansqlTransaction;\n readonly models = new Map<ModelClass<any>, Model>()\n readonly Migration: Migration\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.Migration = new Migration(this)\n }\n\n get dialect() {\n return this.config.dialect;\n }\n\n model<M extends Model<any>>(model: ModelClass<M>, hooks?: any) {\n if (this.models.has(model)) {\n return this.models.get(model) as Model<ReturnType<M['schema']>>\n }\n const _model = new model(this)\n this.models.set(model, _model)\n return _model as Model<ReturnType<M['schema']>>\n }\n\n async execute(sql: string, debug = this.config.debug): Promise<ExecuterResult> {\n const query = sql.trim().replace(/\\s+/g, ' ');\n const isDebug = debug ?? false\n\n if (isDebug) {\n console.log(`[DB] Executing → ${query}`);\n }\n\n try {\n const execute = await this.dialect.execute(query, this) as ExecuterResult;\n if (isDebug) {\n console.log(`[DB] Executed ✓`);\n console.dir(execute.results, { depth: null });\n }\n return execute;\n } catch (error) {\n if (isDebug) {\n console.error(`[DB] Execution failed ✗`);\n console.error(query);\n }\n throw error\n }\n }\n\n async uploadFile(file: XansqlFileUploadArgs) {\n const fileConfig = this.config.file\n if (!fileConfig?.upload) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n message: `File upload is not supported by the current dialect.`\n });\n }\n if (file instanceof File) {\n // make chunk\n const fileId = await getFileId(file);\n\n const maxFileSize = fileConfig?.maxFilesize\n if (maxFileSize && file.size > maxFileSize * 1024) {\n throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`)\n }\n\n const chunkSize = fileConfig?.chunkSize\n\n // send metadata\n const filemeta: XansqlFileMeta = {\n fileId: fileId,\n name: file.name,\n size: file.size,\n type: file.type,\n totalChunks: totalChunks(file, chunkSize),\n chunkIndex: 0,\n isFinish: false\n }\n for await (let { chunk, chunkIndex } of chunkFile(file, chunkSize)) {\n filemeta.chunkIndex = chunkIndex;\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\n filemeta.chunkIndex = chunkIndex\n await this.uploadFile({\n chunk,\n meta: filemeta\n })\n }\n return filemeta\n }\n\n if (file.meta.chunkIndex === 0 && !fileScaner(file.chunk).valid) {\n throw new XansqlError({\n code: \"FILE_ERROR\",\n message: `Failed to process file \"${file.meta.name}\".`\n });\n }\n return await this.config.file.upload(file.chunk, file.meta, this);\n }\n\n async deleteFile(fileId: string) {\n if (!this.config.file?.delete) {\n throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `File delete is not supported by the current dialect.`\n });\n }\n return await this.config.file.delete(fileId, this);\n }\n\n async migrate() {\n const models = Array.from(this.models.values())\n for (let model of models) {\n await this.Migration.migrate(model)\n }\n }\n}\n\nexport default Xansql"],"names":["file","getFileId","totalChunks","__asyncValues","chunkFile"],"mappings":";;;;;;;;;;AAUA,MAAM,MAAM,CAAA;AAOT,IAAA,WAAA,CAAY,MAAwB,EAAA;AAH3B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAA0B;QAIhD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;QACvC,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC;IACvC;AAEA,IAAA,IAAI,OAAO,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;IAC7B;IAEA,KAAK,CAAuB,KAAoB,EAAE,KAAW,EAAA;QAC1D,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACzB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAmC;QAClE;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;AAC9B,QAAA,OAAO,MAAwC;IAClD;IAEA,MAAM,OAAO,CAAC,GAAW,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAA;AACjD,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,KAAK;QAE9B,IAAI,OAAO,EAAE;AACV,YAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAA,CAAE,CAAC;QAC3C;AAEA,QAAA,IAAI;AACD,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAmB;YACzE,IAAI,OAAO,EAAE;AACV,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,eAAA,CAAiB,CAAC;AAC9B,gBAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAChD;AACA,YAAA,OAAO,OAAO;QACjB;QAAE,OAAO,KAAK,EAAE;YACb,IAAI,OAAO,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAA,uBAAA,CAAyB,CAAC;AACxC,gBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YACvB;AACA,YAAA,MAAM,KAAK;QACd;IACH;IAEA,MAAM,UAAU,CAACA,MAA0B,EAAA;;AACxC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;QACnC,IAAI,EAAC,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAA,MAAA,GAAV,UAAU,CAAE,MAAM,CAAA,EAAE;YACtB,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,OAAO,EAAE,CAAA,oDAAA;AACX,aAAA,CAAC;QACL;AACA,QAAA,IAAIA,MAAI,YAAY,IAAI,EAAE;;AAEvB,YAAA,MAAM,MAAM,GAAG,MAAMC,cAAS,CAACD,MAAI,CAAC;YAEpC,MAAM,WAAW,GAAG,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAA,MAAA,GAAV,UAAU,CAAE,WAAW;YAC3C,IAAI,WAAW,IAAIA,MAAI,CAAC,IAAI,GAAG,WAAW,GAAG,IAAI,EAAE;gBAChD,MAAM,IAAI,KAAK,CAAC,CAAA,+BAAA,EAAkC,WAAW,GAAG,IAAI,CAAA,GAAA,CAAK,CAAC;YAC7E;YAEA,MAAM,SAAS,GAAG,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAA,MAAA,GAAV,UAAU,CAAE,SAAS;;AAGvC,YAAA,MAAM,QAAQ,GAAmB;AAC9B,gBAAA,MAAM,EAAE,MAAM;gBACd,IAAI,EAAEA,MAAI,CAAC,IAAI;gBACf,IAAI,EAAEA,MAAI,CAAC,IAAI;gBACf,IAAI,EAAEA,MAAI,CAAC,IAAI;AACf,gBAAA,WAAW,EAAEE,gBAAW,CAACF,MAAI,EAAE,SAAS,CAAC;AACzC,gBAAA,UAAU,EAAE,CAAC;AACb,gBAAA,QAAQ,EAAE;aACZ;;AACD,gBAAA,KAAwC,IAAA,EAAA,GAAA,IAAA,EAAA,EAAA,GAAAG,mBAAA,CAAAC,cAAS,CAACJ,MAAI,EAAE,SAAS,CAAC,CAAA,EAAA,EAAA,EAAA,EAAA,GAAA,MAAA,EAAA,CAAA,IAAA,EAAA,EAAA,EAAA,GAAA,EAAA,CAAA,IAAA,EAAA,CAAA,EAAA,EAAA,EAAA,GAAA,IAAA,EAAE;oBAA5B,EAAA,GAAA,EAAA,CAAA,KAAA;oBAAA,EAAA,GAAA,KAAA;AAA7B,oBAAA,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAA;AACjC,oBAAA,QAAQ,CAAC,UAAU,GAAG,UAAU;oBAChC,QAAQ,CAAC,QAAQ,GAAG,UAAU,GAAG,CAAC,KAAK,QAAQ,CAAC,WAAW;AAC3D,oBAAA,QAAQ,CAAC,UAAU,GAAG,UAAU;oBAChC,MAAM,IAAI,CAAC,UAAU,CAAC;wBACnB,KAAK;AACL,wBAAA,IAAI,EAAE;AACR,qBAAA,CAAC;gBACL;;;;;;;;;AACA,YAAA,OAAO,QAAQ;QAClB;AAEA,QAAA,IAAIA,MAAI,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,UAAU,CAACA,MAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;YAC9D,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,OAAO,EAAE,CAAA,wBAAA,EAA2BA,MAAI,CAAC,IAAI,CAAC,IAAI,CAAA,EAAA;AACpD,aAAA,CAAC;QACL;AACA,QAAA,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAACA,MAAI,CAAC,KAAK,EAAEA,MAAI,CAAC,IAAI,EAAE,IAAI,CAAC;IACpE;IAEA,MAAM,UAAU,CAAC,MAAc,EAAA;;AAC5B,QAAA,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA,EAAE;YAC5B,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,OAAO,EAAE,CAAA,oDAAA;AACX,aAAA,CAAC;QACL;AACA,QAAA,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;IACrD;AAEA,IAAA,MAAM,OAAO,GAAA;AACV,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AAC/C,QAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;YACvB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC;IACH;AACF;;;;"}
|
package/core/Xansql.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ declare class Xansql {
|
|
|
16
16
|
execute(sql: string, debug?: boolean): Promise<ExecuterResult>;
|
|
17
17
|
uploadFile(file: XansqlFileUploadArgs): Promise<XansqlFileMeta>;
|
|
18
18
|
deleteFile(fileId: string): Promise<void>;
|
|
19
|
+
migrate(): Promise<void>;
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
export { Xansql as default };
|
package/core/Xansql.js
CHANGED
|
@@ -32,19 +32,19 @@ class Xansql {
|
|
|
32
32
|
console.log(`[DB] Executing → ${query}`);
|
|
33
33
|
}
|
|
34
34
|
try {
|
|
35
|
-
const
|
|
35
|
+
const execute = await this.dialect.execute(query, this);
|
|
36
36
|
if (isDebug) {
|
|
37
37
|
console.log(`[DB] Executed ✓`);
|
|
38
|
-
console.dir(
|
|
38
|
+
console.dir(execute.results, { depth: null });
|
|
39
39
|
}
|
|
40
|
-
return
|
|
40
|
+
return execute;
|
|
41
41
|
}
|
|
42
42
|
catch (error) {
|
|
43
43
|
if (isDebug) {
|
|
44
44
|
console.error(`[DB] Execution failed ✗`);
|
|
45
45
|
console.error(query);
|
|
46
46
|
}
|
|
47
|
-
throw error;
|
|
47
|
+
throw error;
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
async uploadFile(file) {
|
|
@@ -115,6 +115,12 @@ class Xansql {
|
|
|
115
115
|
}
|
|
116
116
|
return await this.config.file.delete(fileId, this);
|
|
117
117
|
}
|
|
118
|
+
async migrate() {
|
|
119
|
+
const models = Array.from(this.models.values());
|
|
120
|
+
for (let model of models) {
|
|
121
|
+
await this.Migration.migrate(model);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
118
124
|
}
|
|
119
125
|
|
|
120
126
|
export { Xansql as default };
|
package/core/Xansql.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Xansql.js","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired, XansqlFileMeta, XansqlFileUploadArgs } from \"./types\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport XansqlError from \"./XansqlError\";\nimport { ModelClass } from \"../model/types\";\nimport { chunkFile, getFileId, totalChunks } from \"../utils/file\";\nimport Migration from \"./Migration\";\nimport fileScaner from \"../utils/fileScaner\";\n\
|
|
1
|
+
{"version":3,"file":"Xansql.js","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired, XansqlFileMeta, XansqlFileUploadArgs } from \"./types\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport XansqlError from \"./XansqlError\";\nimport { ModelClass } from \"../model/types\";\nimport { chunkFile, getFileId, totalChunks } from \"../utils/file\";\nimport Migration from \"./Migration\";\nimport fileScaner from \"../utils/fileScaner\";\n\nclass Xansql {\n private XansqlConfig: XansqlConfig;\n readonly config: XansqlConfigTypeRequired;\n readonly XansqlTransaction: XansqlTransaction;\n readonly models = new Map<ModelClass<any>, Model>()\n readonly Migration: Migration\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.Migration = new Migration(this)\n }\n\n get dialect() {\n return this.config.dialect;\n }\n\n model<M extends Model<any>>(model: ModelClass<M>, hooks?: any) {\n if (this.models.has(model)) {\n return this.models.get(model) as Model<ReturnType<M['schema']>>\n }\n const _model = new model(this)\n this.models.set(model, _model)\n return _model as Model<ReturnType<M['schema']>>\n }\n\n async execute(sql: string, debug = this.config.debug): Promise<ExecuterResult> {\n const query = sql.trim().replace(/\\s+/g, ' ');\n const isDebug = debug ?? false\n\n if (isDebug) {\n console.log(`[DB] Executing → ${query}`);\n }\n\n try {\n const execute = await this.dialect.execute(query, this) as ExecuterResult;\n if (isDebug) {\n console.log(`[DB] Executed ✓`);\n console.dir(execute.results, { depth: null });\n }\n return execute;\n } catch (error) {\n if (isDebug) {\n console.error(`[DB] Execution failed ✗`);\n console.error(query);\n }\n throw error\n }\n }\n\n async uploadFile(file: XansqlFileUploadArgs) {\n const fileConfig = this.config.file\n if (!fileConfig?.upload) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n message: `File upload is not supported by the current dialect.`\n });\n }\n if (file instanceof File) {\n // make chunk\n const fileId = await getFileId(file);\n\n const maxFileSize = fileConfig?.maxFilesize\n if (maxFileSize && file.size > maxFileSize * 1024) {\n throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`)\n }\n\n const chunkSize = fileConfig?.chunkSize\n\n // send metadata\n const filemeta: XansqlFileMeta = {\n fileId: fileId,\n name: file.name,\n size: file.size,\n type: file.type,\n totalChunks: totalChunks(file, chunkSize),\n chunkIndex: 0,\n isFinish: false\n }\n for await (let { chunk, chunkIndex } of chunkFile(file, chunkSize)) {\n filemeta.chunkIndex = chunkIndex;\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\n filemeta.chunkIndex = chunkIndex\n await this.uploadFile({\n chunk,\n meta: filemeta\n })\n }\n return filemeta\n }\n\n if (file.meta.chunkIndex === 0 && !fileScaner(file.chunk).valid) {\n throw new XansqlError({\n code: \"FILE_ERROR\",\n message: `Failed to process file \"${file.meta.name}\".`\n });\n }\n return await this.config.file.upload(file.chunk, file.meta, this);\n }\n\n async deleteFile(fileId: string) {\n if (!this.config.file?.delete) {\n throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `File delete is not supported by the current dialect.`\n });\n }\n return await this.config.file.delete(fileId, this);\n }\n\n async migrate() {\n const models = Array.from(this.models.values())\n for (let model of models) {\n await this.Migration.migrate(model)\n }\n }\n}\n\nexport default Xansql"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ class XansqlTransaction {
|
|
|
10
10
|
clearTimeout(this.commitTimer);
|
|
11
11
|
if (!this.active) {
|
|
12
12
|
this.active = true;
|
|
13
|
-
await this.xansql.execute("BEGIN");
|
|
13
|
+
await this.xansql.execute("BEGIN", false);
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
async commit() {
|
|
@@ -18,7 +18,7 @@ class XansqlTransaction {
|
|
|
18
18
|
if (!this.active)
|
|
19
19
|
return;
|
|
20
20
|
this.active = false;
|
|
21
|
-
await this.xansql.execute("COMMIT");
|
|
21
|
+
await this.xansql.execute("COMMIT", false);
|
|
22
22
|
}, 0);
|
|
23
23
|
}
|
|
24
24
|
async rollback() {
|
|
@@ -26,7 +26,7 @@ class XansqlTransaction {
|
|
|
26
26
|
if (!this.active)
|
|
27
27
|
return;
|
|
28
28
|
this.active = false;
|
|
29
|
-
await this.xansql.execute("ROLLBACK");
|
|
29
|
+
await this.xansql.execute("ROLLBACK", false);
|
|
30
30
|
}, 0);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XansqlTransaction.cjs","sources":["../../../src/core/classes/XansqlTransaction.ts"],"sourcesContent":["import Xansql from \"../Xansql\"\n\nclass XansqlTransaction {\n private xansql: Xansql\n private active = false\n private commitTimer: NodeJS.Timeout | null = null\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n }\n\n async begin() {\n clearTimeout(this.commitTimer!)\n if (!this.active) {\n this.active = true\n await this.xansql.execute(\"BEGIN\")\n }\n }\n\n async commit() {\n this.commitTimer = setTimeout(async () => {\n if (!this.active) return\n this.active = false\n await this.xansql.execute(\"COMMIT\")\n }, 0)\n }\n\n async rollback() {\n this.commitTimer = setTimeout(async () => {\n if (!this.active) return\n this.active = false\n await this.xansql.execute(\"ROLLBACK\")\n }, 0)\n }\n}\n\nexport default XansqlTransaction"],"names":[],"mappings":";;AAEA,MAAM,iBAAiB,CAAA;AAKpB,IAAA,WAAA,CAAY,MAAc,EAAA;QAHlB,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,WAAW,GAA0B,IAAI;AAG9C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AAEA,IAAA,MAAM,KAAK,GAAA;AACR,QAAA,YAAY,CAAC,IAAI,CAAC,WAAY,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"XansqlTransaction.cjs","sources":["../../../src/core/classes/XansqlTransaction.ts"],"sourcesContent":["import Xansql from \"../Xansql\"\n\nclass XansqlTransaction {\n private xansql: Xansql\n private active = false\n private commitTimer: NodeJS.Timeout | null = null\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n }\n\n async begin() {\n clearTimeout(this.commitTimer!)\n if (!this.active) {\n this.active = true\n await this.xansql.execute(\"BEGIN\", false)\n }\n }\n\n async commit() {\n this.commitTimer = setTimeout(async () => {\n if (!this.active) return\n this.active = false\n await this.xansql.execute(\"COMMIT\", false)\n }, 0)\n }\n\n async rollback() {\n this.commitTimer = setTimeout(async () => {\n if (!this.active) return\n this.active = false\n await this.xansql.execute(\"ROLLBACK\", false)\n }, 0)\n }\n}\n\nexport default XansqlTransaction"],"names":[],"mappings":";;AAEA,MAAM,iBAAiB,CAAA;AAKpB,IAAA,WAAA,CAAY,MAAc,EAAA;QAHlB,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,WAAW,GAA0B,IAAI;AAG9C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AAEA,IAAA,MAAM,KAAK,GAAA;AACR,QAAA,YAAY,CAAC,IAAI,CAAC,WAAY,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;QAC5C;IACH;AAEA,IAAA,MAAM,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,YAAW;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE;AAClB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACnB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC7C,CAAC,EAAE,CAAC,CAAC;IACR;AAEA,IAAA,MAAM,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,YAAW;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE;AAClB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACnB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;QAC/C,CAAC,EAAE,CAAC,CAAC;IACR;AACF;;;;"}
|
|
@@ -8,7 +8,7 @@ class XansqlTransaction {
|
|
|
8
8
|
clearTimeout(this.commitTimer);
|
|
9
9
|
if (!this.active) {
|
|
10
10
|
this.active = true;
|
|
11
|
-
await this.xansql.execute("BEGIN");
|
|
11
|
+
await this.xansql.execute("BEGIN", false);
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
async commit() {
|
|
@@ -16,7 +16,7 @@ class XansqlTransaction {
|
|
|
16
16
|
if (!this.active)
|
|
17
17
|
return;
|
|
18
18
|
this.active = false;
|
|
19
|
-
await this.xansql.execute("COMMIT");
|
|
19
|
+
await this.xansql.execute("COMMIT", false);
|
|
20
20
|
}, 0);
|
|
21
21
|
}
|
|
22
22
|
async rollback() {
|
|
@@ -24,7 +24,7 @@ class XansqlTransaction {
|
|
|
24
24
|
if (!this.active)
|
|
25
25
|
return;
|
|
26
26
|
this.active = false;
|
|
27
|
-
await this.xansql.execute("ROLLBACK");
|
|
27
|
+
await this.xansql.execute("ROLLBACK", false);
|
|
28
28
|
}, 0);
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XansqlTransaction.js","sources":["../../../src/core/classes/XansqlTransaction.ts"],"sourcesContent":["import Xansql from \"../Xansql\"\n\nclass XansqlTransaction {\n private xansql: Xansql\n private active = false\n private commitTimer: NodeJS.Timeout | null = null\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n }\n\n async begin() {\n clearTimeout(this.commitTimer!)\n if (!this.active) {\n this.active = true\n await this.xansql.execute(\"BEGIN\")\n }\n }\n\n async commit() {\n this.commitTimer = setTimeout(async () => {\n if (!this.active) return\n this.active = false\n await this.xansql.execute(\"COMMIT\")\n }, 0)\n }\n\n async rollback() {\n this.commitTimer = setTimeout(async () => {\n if (!this.active) return\n this.active = false\n await this.xansql.execute(\"ROLLBACK\")\n }, 0)\n }\n}\n\nexport default XansqlTransaction"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,CAAA;AAKpB,IAAA,WAAA,CAAY,MAAc,EAAA;QAHlB,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,WAAW,GAA0B,IAAI;AAG9C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AAEA,IAAA,MAAM,KAAK,GAAA;AACR,QAAA,YAAY,CAAC,IAAI,CAAC,WAAY,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"XansqlTransaction.js","sources":["../../../src/core/classes/XansqlTransaction.ts"],"sourcesContent":["import Xansql from \"../Xansql\"\n\nclass XansqlTransaction {\n private xansql: Xansql\n private active = false\n private commitTimer: NodeJS.Timeout | null = null\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n }\n\n async begin() {\n clearTimeout(this.commitTimer!)\n if (!this.active) {\n this.active = true\n await this.xansql.execute(\"BEGIN\", false)\n }\n }\n\n async commit() {\n this.commitTimer = setTimeout(async () => {\n if (!this.active) return\n this.active = false\n await this.xansql.execute(\"COMMIT\", false)\n }, 0)\n }\n\n async rollback() {\n this.commitTimer = setTimeout(async () => {\n if (!this.active) return\n this.active = false\n await this.xansql.execute(\"ROLLBACK\", false)\n }, 0)\n }\n}\n\nexport default XansqlTransaction"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,CAAA;AAKpB,IAAA,WAAA,CAAY,MAAc,EAAA;QAHlB,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,WAAW,GAA0B,IAAI;AAG9C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AAEA,IAAA,MAAM,KAAK,GAAA;AACR,QAAA,YAAY,CAAC,IAAI,CAAC,WAAY,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;QAC5C;IACH;AAEA,IAAA,MAAM,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,YAAW;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE;AAClB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACnB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC7C,CAAC,EAAE,CAAC,CAAC;IACR;AAEA,IAAA,MAAM,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,YAAW;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE;AAClB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACnB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;QAC/C,CAAC,EAAE,CAAC,CAAC;IACR;AACF;;;;"}
|
|
@@ -97,11 +97,7 @@ class XansqlBridgeServer {
|
|
|
97
97
|
async listen(url, options) {
|
|
98
98
|
const server = await this.initial();
|
|
99
99
|
try {
|
|
100
|
-
|
|
101
|
-
return {
|
|
102
|
-
status: res.status,
|
|
103
|
-
value: res.value,
|
|
104
|
-
};
|
|
100
|
+
return await server.listen(url, options);
|
|
105
101
|
}
|
|
106
102
|
catch (error) {
|
|
107
103
|
const secret = await base.makeSecret(this.xansql);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.cjs","sources":["../../../src/dialects/Bridge/server.ts"],"sourcesContent":["import Xansql from \"../../core/Xansql\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { makePath, makeSecret } from \"./base\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\nimport { crypto, SecurequServer } from \"securequ\";\n\nclass XansqlBridgeServer {\n readonly REQUEST_CONTENT_TYPE = 'application/octet-stream';\n xansql: Xansql;\n config: XansqlBridgeServerConfig;\n private server: SecurequServer | null = null;\n\n constructor(xansql: Xansql, config: XansqlBridgeServerConfig) {\n this.xansql = xansql;\n this.config = config;\n }\n\n async authorized(info: XansqlBridgeAuthorizedInfo) {\n const config = this.config;\n if (config.isAuthorized) {\n const isPermit = await config.isAuthorized(info)\n if (!isPermit) throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: \"isAuthorized denied for server initialization.\",\n model: info.model ? info.model.table : undefined,\n })\n }\n }\n\n async initial() {\n if (this.server) return this.server;\n\n const config = this.config;\n const xansql = this.xansql\n const secret = await makeSecret(this.xansql);\n\n const server = new SecurequServer({\n ...(config || {}),\n file: {\n checkFileType: true,\n async upload(chunk, filemeta) {\n return await xansql.uploadFile({\n chunk,\n meta: filemeta\n }) as any\n },\n async delete(fileId) {\n return await xansql.deleteFile(fileId)\n },\n },\n clients: [\n {\n origin: `*`,\n secret\n }\n ]\n });\n\n server.get(await makePath('find', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"GET\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model<any>,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('insert', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.put(await makePath('update', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"PUT\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.delete(await makePath('delete', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"DELETE\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('executer', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n this.server = server;\n return this.server;\n }\n\n async listen(url: string, options: ListenOptions) {\n\n const server = await this.initial()\n try {\n
|
|
1
|
+
{"version":3,"file":"server.cjs","sources":["../../../src/dialects/Bridge/server.ts"],"sourcesContent":["import Xansql from \"../../core/Xansql\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { makePath, makeSecret } from \"./base\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\nimport { crypto, SecurequServer } from \"securequ\";\n\nclass XansqlBridgeServer {\n readonly REQUEST_CONTENT_TYPE = 'application/octet-stream';\n xansql: Xansql;\n config: XansqlBridgeServerConfig;\n private server: SecurequServer | null = null;\n\n constructor(xansql: Xansql, config: XansqlBridgeServerConfig) {\n this.xansql = xansql;\n this.config = config;\n }\n\n async authorized(info: XansqlBridgeAuthorizedInfo) {\n const config = this.config;\n if (config.isAuthorized) {\n const isPermit = await config.isAuthorized(info)\n if (!isPermit) throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: \"isAuthorized denied for server initialization.\",\n model: info.model ? info.model.table : undefined,\n })\n }\n }\n\n async initial() {\n if (this.server) return this.server;\n\n const config = this.config;\n const xansql = this.xansql\n const secret = await makeSecret(this.xansql);\n\n const server = new SecurequServer({\n ...(config || {}),\n file: {\n checkFileType: true,\n async upload(chunk, filemeta) {\n return await xansql.uploadFile({\n chunk,\n meta: filemeta\n }) as any\n },\n async delete(fileId) {\n return await xansql.deleteFile(fileId)\n },\n },\n clients: [\n {\n origin: `*`,\n secret\n }\n ]\n });\n\n server.get(await makePath('find', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"GET\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model<any>,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('insert', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.put(await makePath('update', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"PUT\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.delete(await makePath('delete', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"DELETE\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('executer', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n this.server = server;\n return this.server;\n }\n\n async listen(url: string, options: ListenOptions) {\n\n const server = await this.initial()\n try {\n return await server.listen(url, options)\n } catch (error: any) {\n\n const secret = await makeSecret(this.xansql)\n\n return {\n status: 500,\n value: await crypto.encryptBuffer({\n success: false,\n message: error.message || 'Internal Server Error'\n }, secret)\n }\n }\n }\n}\n\nexport default XansqlBridgeServer"],"names":["makeSecret","SecurequServer","makePath","crypto"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import * as securequ from 'securequ';
|
|
2
|
+
import { SecurequServer } from 'securequ';
|
|
1
3
|
import Xansql from '../../core/Xansql.js';
|
|
2
4
|
import { XansqlBridgeServerConfig, XansqlBridgeAuthorizedInfo, ListenOptions } from './types.js';
|
|
3
|
-
import { SecurequServer } from 'securequ';
|
|
4
5
|
|
|
5
6
|
declare class XansqlBridgeServer {
|
|
6
7
|
readonly REQUEST_CONTENT_TYPE = "application/octet-stream";
|
|
@@ -10,9 +11,9 @@ declare class XansqlBridgeServer {
|
|
|
10
11
|
constructor(xansql: Xansql, config: XansqlBridgeServerConfig);
|
|
11
12
|
authorized(info: XansqlBridgeAuthorizedInfo): Promise<void>;
|
|
12
13
|
initial(): Promise<SecurequServer>;
|
|
13
|
-
listen(url: string, options: ListenOptions): Promise<{
|
|
14
|
+
listen(url: string, options: ListenOptions): Promise<securequ.ServerResponse | {
|
|
14
15
|
status: number;
|
|
15
|
-
value:
|
|
16
|
+
value: Uint8Array<ArrayBufferLike>;
|
|
16
17
|
}>;
|
|
17
18
|
}
|
|
18
19
|
|
|
@@ -95,11 +95,7 @@ class XansqlBridgeServer {
|
|
|
95
95
|
async listen(url, options) {
|
|
96
96
|
const server = await this.initial();
|
|
97
97
|
try {
|
|
98
|
-
|
|
99
|
-
return {
|
|
100
|
-
status: res.status,
|
|
101
|
-
value: res.value,
|
|
102
|
-
};
|
|
98
|
+
return await server.listen(url, options);
|
|
103
99
|
}
|
|
104
100
|
catch (error) {
|
|
105
101
|
const secret = await makeSecret(this.xansql);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sources":["../../../src/dialects/Bridge/server.ts"],"sourcesContent":["import Xansql from \"../../core/Xansql\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { makePath, makeSecret } from \"./base\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\nimport { crypto, SecurequServer } from \"securequ\";\n\nclass XansqlBridgeServer {\n readonly REQUEST_CONTENT_TYPE = 'application/octet-stream';\n xansql: Xansql;\n config: XansqlBridgeServerConfig;\n private server: SecurequServer | null = null;\n\n constructor(xansql: Xansql, config: XansqlBridgeServerConfig) {\n this.xansql = xansql;\n this.config = config;\n }\n\n async authorized(info: XansqlBridgeAuthorizedInfo) {\n const config = this.config;\n if (config.isAuthorized) {\n const isPermit = await config.isAuthorized(info)\n if (!isPermit) throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: \"isAuthorized denied for server initialization.\",\n model: info.model ? info.model.table : undefined,\n })\n }\n }\n\n async initial() {\n if (this.server) return this.server;\n\n const config = this.config;\n const xansql = this.xansql\n const secret = await makeSecret(this.xansql);\n\n const server = new SecurequServer({\n ...(config || {}),\n file: {\n checkFileType: true,\n async upload(chunk, filemeta) {\n return await xansql.uploadFile({\n chunk,\n meta: filemeta\n }) as any\n },\n async delete(fileId) {\n return await xansql.deleteFile(fileId)\n },\n },\n clients: [\n {\n origin: `*`,\n secret\n }\n ]\n });\n\n server.get(await makePath('find', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"GET\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model<any>,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('insert', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.put(await makePath('update', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"PUT\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.delete(await makePath('delete', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"DELETE\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('executer', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n this.server = server;\n return this.server;\n }\n\n async listen(url: string, options: ListenOptions) {\n\n const server = await this.initial()\n try {\n
|
|
1
|
+
{"version":3,"file":"server.js","sources":["../../../src/dialects/Bridge/server.ts"],"sourcesContent":["import Xansql from \"../../core/Xansql\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { makePath, makeSecret } from \"./base\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\nimport { crypto, SecurequServer } from \"securequ\";\n\nclass XansqlBridgeServer {\n readonly REQUEST_CONTENT_TYPE = 'application/octet-stream';\n xansql: Xansql;\n config: XansqlBridgeServerConfig;\n private server: SecurequServer | null = null;\n\n constructor(xansql: Xansql, config: XansqlBridgeServerConfig) {\n this.xansql = xansql;\n this.config = config;\n }\n\n async authorized(info: XansqlBridgeAuthorizedInfo) {\n const config = this.config;\n if (config.isAuthorized) {\n const isPermit = await config.isAuthorized(info)\n if (!isPermit) throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: \"isAuthorized denied for server initialization.\",\n model: info.model ? info.model.table : undefined,\n })\n }\n }\n\n async initial() {\n if (this.server) return this.server;\n\n const config = this.config;\n const xansql = this.xansql\n const secret = await makeSecret(this.xansql);\n\n const server = new SecurequServer({\n ...(config || {}),\n file: {\n checkFileType: true,\n async upload(chunk, filemeta) {\n return await xansql.uploadFile({\n chunk,\n meta: filemeta\n }) as any\n },\n async delete(fileId) {\n return await xansql.deleteFile(fileId)\n },\n },\n clients: [\n {\n origin: `*`,\n secret\n }\n ]\n });\n\n server.get(await makePath('find', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"GET\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model<any>,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('insert', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.put(await makePath('update', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"PUT\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.delete(await makePath('delete', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"DELETE\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('executer', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n this.server = server;\n return this.server;\n }\n\n async listen(url: string, options: ListenOptions) {\n\n const server = await this.initial()\n try {\n return await server.listen(url, options)\n } catch (error: any) {\n\n const secret = await makeSecret(this.xansql)\n\n return {\n status: 500,\n value: await crypto.encryptBuffer({\n success: false,\n message: error.message || 'Internal Server Error'\n }, secret)\n }\n }\n }\n}\n\nexport default XansqlBridgeServer"],"names":[],"mappings":"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"}
|
package/model/index.cjs
CHANGED
|
@@ -155,10 +155,6 @@ class Model {
|
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
this.schema = (() => fields).bind(this);
|
|
158
|
-
// migration server only
|
|
159
|
-
if (this.table !== "_xansql_migration") {
|
|
160
|
-
xansql.Migration.migrate(this);
|
|
161
|
-
}
|
|
162
158
|
}
|
|
163
159
|
// private async migrationInit() {
|
|
164
160
|
// const fields = this.schema()
|
|
@@ -292,7 +288,7 @@ class Model {
|
|
|
292
288
|
take: perpage,
|
|
293
289
|
skip
|
|
294
290
|
} }));
|
|
295
|
-
const total = await this.count((args === null || args === void 0 ? void 0 : args.where) || {});
|
|
291
|
+
const total = await this.count((args === null || args === void 0 ? void 0 : args.where) || {}, args.debug);
|
|
296
292
|
return {
|
|
297
293
|
results,
|
|
298
294
|
total,
|
|
@@ -301,22 +297,23 @@ class Model {
|
|
|
301
297
|
pages: Math.ceil(total / perpage)
|
|
302
298
|
};
|
|
303
299
|
}
|
|
304
|
-
async exists(where) {
|
|
305
|
-
return !!(await this.count(where));
|
|
300
|
+
async exists(where, debug) {
|
|
301
|
+
return !!(await this.count(where, debug));
|
|
306
302
|
}
|
|
307
303
|
// Aggregate Methods
|
|
308
|
-
async count(where) {
|
|
304
|
+
async count(where, debug) {
|
|
309
305
|
const res = await this.aggregate({
|
|
310
306
|
where,
|
|
311
307
|
select: {
|
|
312
308
|
[this.IDColumn]: {
|
|
313
309
|
count: true
|
|
314
310
|
}
|
|
315
|
-
}
|
|
311
|
+
},
|
|
312
|
+
debug
|
|
316
313
|
});
|
|
317
314
|
return (res === null || res === void 0 ? void 0 : res.length) ? res[0][`count_${this.IDColumn}`] : 0;
|
|
318
315
|
}
|
|
319
|
-
async min(column, where) {
|
|
316
|
+
async min(column, where, debug) {
|
|
320
317
|
if (!(column in this.schema)) {
|
|
321
318
|
throw new XansqlError({
|
|
322
319
|
code: "INVALID_ARGUMENTS",
|
|
@@ -331,11 +328,12 @@ class Model {
|
|
|
331
328
|
[column]: {
|
|
332
329
|
min: true
|
|
333
330
|
}
|
|
334
|
-
}
|
|
331
|
+
},
|
|
332
|
+
debug
|
|
335
333
|
});
|
|
336
334
|
return (res === null || res === void 0 ? void 0 : res.length) ? res[0][`min_${column}`] : 0;
|
|
337
335
|
}
|
|
338
|
-
async max(column, where) {
|
|
336
|
+
async max(column, where, debug) {
|
|
339
337
|
if (!(column in this.schema)) {
|
|
340
338
|
throw new XansqlError({
|
|
341
339
|
code: "INVALID_ARGUMENTS",
|
|
@@ -350,11 +348,12 @@ class Model {
|
|
|
350
348
|
[column]: {
|
|
351
349
|
max: true
|
|
352
350
|
}
|
|
353
|
-
}
|
|
351
|
+
},
|
|
352
|
+
debug
|
|
354
353
|
});
|
|
355
354
|
return (res === null || res === void 0 ? void 0 : res.length) ? res[0][`max_${column}`] : 0;
|
|
356
355
|
}
|
|
357
|
-
async sum(column, where) {
|
|
356
|
+
async sum(column, where, debug) {
|
|
358
357
|
if (!(column in this.schema)) {
|
|
359
358
|
throw new XansqlError({
|
|
360
359
|
code: "INVALID_ARGUMENTS",
|
|
@@ -369,11 +368,12 @@ class Model {
|
|
|
369
368
|
[column]: {
|
|
370
369
|
sum: true
|
|
371
370
|
}
|
|
372
|
-
}
|
|
371
|
+
},
|
|
372
|
+
debug
|
|
373
373
|
});
|
|
374
374
|
return (res === null || res === void 0 ? void 0 : res.length) ? res[0][`sum_${column}`] : 0;
|
|
375
375
|
}
|
|
376
|
-
async avg(column, where) {
|
|
376
|
+
async avg(column, where, debug) {
|
|
377
377
|
if (!(column in this.schema)) {
|
|
378
378
|
throw new XansqlError({
|
|
379
379
|
code: "INVALID_ARGUMENTS",
|
|
@@ -388,7 +388,8 @@ class Model {
|
|
|
388
388
|
[column]: {
|
|
389
389
|
avg: true
|
|
390
390
|
}
|
|
391
|
-
}
|
|
391
|
+
},
|
|
392
|
+
debug
|
|
392
393
|
});
|
|
393
394
|
return (res === null || res === void 0 ? void 0 : res.length) ? res[0][`avg_${column}`] : 0;
|
|
394
395
|
}
|
package/model/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/model/index.ts"],"sourcesContent":["import Xansql from \"../core/Xansql\";\nimport { iof } from \"../utils\";\nimport XqlIDField from \"../xt/fields/IDField\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport XqlRelationOne from \"../xt/fields/RelationOne\";\nimport { AggregateArgs, CreateArgs, DeleteArgs, ExactArgs, FindArgs, FindResult, ModelClass, PaginateArgs, SchemaShape, UpdateArgs, UpsertArgs, WhereArgs } from \"./types\";\nimport XansqlError from \"../core/XansqlError\";\nimport BuildFindArgs from \"./Build/FindArgs\";\nimport BuildCreateArgs from \"./Build/CreateArgs\";\nimport xt from \"../xt\";\nimport BuildAggregateArgs from \"./Build/AggregateArgs\";\nimport BuildUpdateArgs from \"./Build/UpdateArgs\";\nimport BuildDeleteArgs from \"./Build/DeleteArgs\";\nimport ModelWhere from \"./ModelWhere\";\nimport ReserveKeywords from \"./ReserveKeywords\";\nimport BuildUpsertArgs from \"./Build/UpsertArgs\";\n\n\nabstract class Model<S extends SchemaShape = SchemaShape> {\n abstract schema(): S\n readonly xansql: Xansql\n readonly IDColumn: string\n readonly alias: string\n\n get table() {\n const name = this.constructor.name.replace(/_/g, \"\");\n let table = name.split(/(?=[A-Z])/).filter((l: string) => l.toLowerCase() !== 'model').join(\"_\").toLowerCase()\n table = table.endsWith(\"y\") ? table.slice(0, -1) + \"ies\" : table + \"s\"\n return table\n }\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n const fields = this.schema()\n\n this.IDColumn = Object.keys(fields).find(column => fields[column] instanceof XqlIDField) || ''\n if (!this.IDColumn) {\n throw new Error(`ID Column not found in schema ${this.table}. Please define an ID column using xt.id() in the schema.`)\n }\n\n // build model registry in xansql for relations\n xansql.models.set(this.constructor as ModelClass<any>, this as any)\n for (let column in fields) {\n const field = fields[column]\n if (iof(field, XqlRelationMany, XqlRelationOne) && !xansql.models.has(field.model)) {\n xansql.model(field.model)\n }\n }\n\n // const aliases = Array.from(xansql.models.values()).map(m => m.alias)\n // const parts = this.table.split(/_|(?=[A-Z])/);\n // let alias = parts.map(p => p[0]).join('');\n // if (!alias || alias.length < 1) {\n // alias = this.table.slice(0, 2);\n // }\n // alias = alias.toLowerCase();\n // let counter = 1;\n // while (aliases.includes(alias)) {\n // alias = alias + counter;\n // counter++;\n // }\n // this.alias = alias\n\n const aliases = Array.from(xansql.models.values()).map(m => m.alias);\n const parts = this.table.split(/_|(?=[A-Z])/).filter(Boolean);\n\n let alias = parts.map(p => p[0]).join('').toLowerCase(); // up\n let indexes = parts.map(() => 1);\n\n while (aliases.includes(alias)) {\n let changed = false;\n\n for (let i = 0; i < parts.length; i++) {\n if (indexes[i] < parts[i].length) {\n indexes[i]++;\n changed = true;\n break;\n }\n }\n\n if (!changed) break;\n\n alias = parts.map((p, i) => p.slice(0, indexes[i])).join('').toLowerCase();\n }\n\n if (aliases.includes(alias)) {\n let counter = 1;\n let temp = alias;\n while (aliases.includes(temp)) {\n temp = alias + counter;\n counter++;\n }\n alias = temp;\n }\n this.alias = alias;\n\n let migration_columns = []\n let index_sqls = []\n for (let column in fields) {\n if (ReserveKeywords.includes(column)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Invalid column name \"${column}\" in table \"${this.table}\". \"${column}\" is a reserved keyword.`,\n model: this.table,\n field: column\n })\n }\n\n const field = fields[column]\n\n // check field is valid XqlField\n if (!field.meta || !field.parse) {\n throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n model: this.constructor.name,\n field: column,\n message: `Invalid field type in model ${this.constructor.name}:${column}`\n })\n }\n\n field.table = this.table\n field.column_name = column\n field.engine = xansql.dialect.engine\n\n if (iof(field, XqlRelationMany, XqlRelationOne)) {\n const targetColumn = field.targetColumn\n const TModel = field.model\n const targetModel = xansql.models.get(TModel)\n if (!targetModel) {\n throw new Error(`Target model for relation ${column} in schema ${fields.table} not found. Please define the target schema before defining the relation.`)\n }\n const targetShape = targetModel.schema() as Record<string, any>\n\n // check if relation target exists\n if (field.type === 'relation-many') {\n if (!targetShape[targetColumn] || targetShape[targetColumn].type !== \"relation-one\") {\n throw new Error(`Target column ${targetColumn} for relation ${column} in schema ${fields.table} not found in target schema ${targetModel.table}. Please define the target column in the target schema.`)\n }\n } else if (!targetShape[targetColumn]) {\n // const tschema = targetModel.schema()\n // tschema[targetColumn] = xt.many(this.constructor as any, column)\n // targetModel.schema = (() => tschema).bind(targetModel)\n }\n\n if (field.type == 'relation-one') {\n field.relationInfo = {\n self: {\n table: this.table,\n relation: column,\n column: column,\n },\n target: {\n table: targetModel.table,\n relation: targetModel.IDColumn,\n column: targetColumn,\n },\n sql: `${this.table}.${column} = ${targetModel.table}.${targetModel.IDColumn}`\n }\n } else if (field.type == 'relation-many') {\n field.relationInfo = {\n self: {\n table: this.table,\n relation: this.IDColumn,\n column: column,\n },\n target: {\n table: targetModel.table,\n relation: targetColumn,\n column: targetColumn,\n },\n sql: `${this.table}.${this.IDColumn} = ${targetModel.table}.${targetColumn}`\n }\n }\n }\n\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n migration_columns.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n }\n }\n\n this.schema = (() => fields).bind(this)\n\n // migration server only\n if (this.table !== \"_xansql_migration\") {\n xansql.Migration.migrate(this)\n }\n }\n\n // private async migrationInit() {\n // const fields = this.schema()\n // let migration_columns = []\n // let index_sqls = []\n // for (let column in fields) {\n // const field = fields[column]\n\n // if (!iof(field, XqlRelationMany)) {\n // const info = field.info\n // migration_columns.push(info.sql.column)\n // if (info.sql.create_index) {\n // index_sqls.push(info.sql.create_index)\n // }\n // }\n // }\n // const sql = `CREATE TABLE IF NOT EXISTS ${this.table}(${migration_columns.join(\",\")})`\n // await this.xansql.execute(sql)\n\n // for (let idxql of index_sqls) {\n // try {\n // await this.xansql.execute(idxql)\n // } catch (error) { }\n // }\n // }\n\n where(inColumn: string, where?: WhereArgs<S>) {\n return new ModelWhere<S>(this, inColumn, where)\n }\n\n async execute(sql: string, debug?: boolean) {\n return this.xansql.execute(sql, debug)\n }\n\n async find<T extends FindArgs<S>>(args: ExactArgs<T, FindArgs<S>>): Promise<FindResult<T, S>[] | null> {\n try {\n const build = new BuildFindArgs(args as any, this)\n const results = await build.results()\n return results as any\n } catch (error) {\n throw error\n }\n }\n\n async findOne<T extends FindArgs<S>>(args: ExactArgs<T, FindArgs<S>>): Promise<FindResult<T, S> | null> {\n try {\n const results = await this.find(args)\n if (results?.length) {\n return results[0]\n }\n return null\n } catch (error) {\n throw error\n }\n }\n\n async aggregate<T extends AggregateArgs<S, any>>(args: ExactArgs<T, AggregateArgs<S, T>>) {\n try {\n await this.xansql.XansqlTransaction.begin()\n const build = new BuildAggregateArgs(args as any, this)\n const results = await build.results()\n await this.xansql.XansqlTransaction.commit()\n return results as any\n } catch (error) {\n await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async create<T extends CreateArgs<S>>(args: ExactArgs<T, CreateArgs<S>>): Promise<FindResult<T, S>[] | null> {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildCreateArgs(args as any, this)\n const results = await build.results() as any\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async update<T extends UpdateArgs<S>>(args: ExactArgs<T, UpdateArgs<S>>) {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpdateArgs(args, this)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async upsert<T extends UpsertArgs<S>>(args: ExactArgs<T, UpsertArgs<S>>) {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpsertArgs(args, this)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async delete<T extends DeleteArgs<S>>(args: ExactArgs<T, DeleteArgs<S>>) {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildDeleteArgs(args as any, this as any)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n // Helper Methods\n async paginate(args: PaginateArgs<S>) {\n const page = args.page\n const perpage = args?.perpage || 20;\n const skip = (page - 1) * perpage;\n const results = await this.find({\n ...args as any,\n limit: {\n take: perpage,\n skip\n }\n })\n const total = await this.count(args?.where || {} as WhereArgs<S>)\n return {\n results,\n total,\n page,\n perpage,\n pages: Math.ceil(total / perpage)\n }\n }\n\n async exists(where: WhereArgs<S>): Promise<boolean> {\n return !!(await this.count(where))\n }\n\n // Aggregate Methods\n async count(where: WhereArgs<S>): Promise<number> {\n const res: any = await this.aggregate({\n where,\n select: {\n [this.IDColumn]: {\n count: true\n }\n } as any\n })\n return res?.length ? res[0][`count_${this.IDColumn}`] : 0\n }\n\n async min(column: string, where: WhereArgs<S>): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n min: true\n }\n } as any\n })\n return res?.length ? res[0][`min_${column}`] : 0\n }\n\n async max(column: string, where: WhereArgs<S>): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n max: true\n }\n } as any\n })\n return res?.length ? res[0][`max_${column}`] : 0\n }\n\n async sum(column: string, where: WhereArgs<S>): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n sum: true\n }\n } as any\n })\n return res?.length ? res[0][`sum_${column}`] : 0\n }\n\n async avg(column: string, where: WhereArgs<S>): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n avg: true\n }\n } as any\n })\n return res?.length ? res[0][`avg_${column}`] : 0\n }\n}\n\nexport default Model"],"names":["XqlIDField","iof","XqlRelationMany","XqlRelationOne","BuildFindArgs","BuildAggregateArgs","BuildCreateArgs","BuildUpdateArgs","BuildUpsertArgs","BuildDeleteArgs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/model/index.ts"],"sourcesContent":["import Xansql from \"../core/Xansql\";\nimport { iof } from \"../utils\";\nimport XqlIDField from \"../xt/fields/IDField\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport XqlRelationOne from \"../xt/fields/RelationOne\";\nimport { AggregateArgs, CreateArgs, DeleteArgs, ExactArgs, FindArgs, FindResult, ModelClass, PaginateArgs, SchemaShape, UpdateArgs, UpsertArgs, WhereArgs } from \"./types\";\nimport XansqlError from \"../core/XansqlError\";\nimport BuildFindArgs from \"./Build/FindArgs\";\nimport BuildCreateArgs from \"./Build/CreateArgs\";\nimport xt from \"../xt\";\nimport BuildAggregateArgs from \"./Build/AggregateArgs\";\nimport BuildUpdateArgs from \"./Build/UpdateArgs\";\nimport BuildDeleteArgs from \"./Build/DeleteArgs\";\nimport ModelWhere from \"./ModelWhere\";\nimport ReserveKeywords from \"./ReserveKeywords\";\nimport BuildUpsertArgs from \"./Build/UpsertArgs\";\n\n\nabstract class Model<S extends SchemaShape = SchemaShape> {\n abstract schema(): S\n readonly xansql: Xansql\n readonly IDColumn: string\n readonly alias: string\n\n get table() {\n const name = this.constructor.name.replace(/_/g, \"\");\n let table = name.split(/(?=[A-Z])/).filter((l: string) => l.toLowerCase() !== 'model').join(\"_\").toLowerCase()\n table = table.endsWith(\"y\") ? table.slice(0, -1) + \"ies\" : table + \"s\"\n return table\n }\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n const fields = this.schema()\n\n this.IDColumn = Object.keys(fields).find(column => fields[column] instanceof XqlIDField) || ''\n if (!this.IDColumn) {\n throw new Error(`ID Column not found in schema ${this.table}. Please define an ID column using xt.id() in the schema.`)\n }\n\n // build model registry in xansql for relations\n xansql.models.set(this.constructor as ModelClass<any>, this as any)\n for (let column in fields) {\n const field = fields[column]\n if (iof(field, XqlRelationMany, XqlRelationOne) && !xansql.models.has(field.model)) {\n xansql.model(field.model)\n }\n }\n\n // const aliases = Array.from(xansql.models.values()).map(m => m.alias)\n // const parts = this.table.split(/_|(?=[A-Z])/);\n // let alias = parts.map(p => p[0]).join('');\n // if (!alias || alias.length < 1) {\n // alias = this.table.slice(0, 2);\n // }\n // alias = alias.toLowerCase();\n // let counter = 1;\n // while (aliases.includes(alias)) {\n // alias = alias + counter;\n // counter++;\n // }\n // this.alias = alias\n\n const aliases = Array.from(xansql.models.values()).map(m => m.alias);\n const parts = this.table.split(/_|(?=[A-Z])/).filter(Boolean);\n\n let alias = parts.map(p => p[0]).join('').toLowerCase(); // up\n let indexes = parts.map(() => 1);\n\n while (aliases.includes(alias)) {\n let changed = false;\n\n for (let i = 0; i < parts.length; i++) {\n if (indexes[i] < parts[i].length) {\n indexes[i]++;\n changed = true;\n break;\n }\n }\n\n if (!changed) break;\n\n alias = parts.map((p, i) => p.slice(0, indexes[i])).join('').toLowerCase();\n }\n\n if (aliases.includes(alias)) {\n let counter = 1;\n let temp = alias;\n while (aliases.includes(temp)) {\n temp = alias + counter;\n counter++;\n }\n alias = temp;\n }\n this.alias = alias;\n\n let migration_columns = []\n let index_sqls = []\n for (let column in fields) {\n if (ReserveKeywords.includes(column)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Invalid column name \"${column}\" in table \"${this.table}\". \"${column}\" is a reserved keyword.`,\n model: this.table,\n field: column\n })\n }\n\n const field = fields[column]\n\n // check field is valid XqlField\n if (!field.meta || !field.parse) {\n throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n model: this.constructor.name,\n field: column,\n message: `Invalid field type in model ${this.constructor.name}:${column}`\n })\n }\n\n field.table = this.table\n field.column_name = column\n field.engine = xansql.dialect.engine\n\n if (iof(field, XqlRelationMany, XqlRelationOne)) {\n const targetColumn = field.targetColumn\n const TModel = field.model\n const targetModel = xansql.models.get(TModel)\n if (!targetModel) {\n throw new Error(`Target model for relation ${column} in schema ${fields.table} not found. Please define the target schema before defining the relation.`)\n }\n const targetShape = targetModel.schema() as Record<string, any>\n\n // check if relation target exists\n if (field.type === 'relation-many') {\n if (!targetShape[targetColumn] || targetShape[targetColumn].type !== \"relation-one\") {\n throw new Error(`Target column ${targetColumn} for relation ${column} in schema ${fields.table} not found in target schema ${targetModel.table}. Please define the target column in the target schema.`)\n }\n } else if (!targetShape[targetColumn]) {\n // const tschema = targetModel.schema()\n // tschema[targetColumn] = xt.many(this.constructor as any, column)\n // targetModel.schema = (() => tschema).bind(targetModel)\n }\n\n if (field.type == 'relation-one') {\n field.relationInfo = {\n self: {\n table: this.table,\n relation: column,\n column: column,\n },\n target: {\n table: targetModel.table,\n relation: targetModel.IDColumn,\n column: targetColumn,\n },\n sql: `${this.table}.${column} = ${targetModel.table}.${targetModel.IDColumn}`\n }\n } else if (field.type == 'relation-many') {\n field.relationInfo = {\n self: {\n table: this.table,\n relation: this.IDColumn,\n column: column,\n },\n target: {\n table: targetModel.table,\n relation: targetColumn,\n column: targetColumn,\n },\n sql: `${this.table}.${this.IDColumn} = ${targetModel.table}.${targetColumn}`\n }\n }\n }\n\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n migration_columns.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n }\n }\n\n this.schema = (() => fields).bind(this)\n }\n\n // private async migrationInit() {\n // const fields = this.schema()\n // let migration_columns = []\n // let index_sqls = []\n // for (let column in fields) {\n // const field = fields[column]\n\n // if (!iof(field, XqlRelationMany)) {\n // const info = field.info\n // migration_columns.push(info.sql.column)\n // if (info.sql.create_index) {\n // index_sqls.push(info.sql.create_index)\n // }\n // }\n // }\n // const sql = `CREATE TABLE IF NOT EXISTS ${this.table}(${migration_columns.join(\",\")})`\n // await this.xansql.execute(sql)\n\n // for (let idxql of index_sqls) {\n // try {\n // await this.xansql.execute(idxql)\n // } catch (error) { }\n // }\n // }\n\n where(inColumn: string, where?: WhereArgs<S>) {\n return new ModelWhere<S>(this, inColumn, where)\n }\n\n async execute(sql: string, debug?: boolean) {\n return this.xansql.execute(sql, debug)\n }\n\n async find<T extends FindArgs<S>>(args: ExactArgs<T, FindArgs<S>>): Promise<FindResult<T, S>[] | null> {\n try {\n const build = new BuildFindArgs(args as any, this)\n const results = await build.results()\n return results as any\n } catch (error) {\n throw error\n }\n }\n\n async findOne<T extends FindArgs<S>>(args: ExactArgs<T, FindArgs<S>>): Promise<FindResult<T, S> | null> {\n try {\n const results = await this.find(args)\n if (results?.length) {\n return results[0]\n }\n return null\n } catch (error) {\n throw error\n }\n }\n\n async aggregate<T extends AggregateArgs<S, any>>(args: ExactArgs<T, AggregateArgs<S, T>>) {\n try {\n await this.xansql.XansqlTransaction.begin()\n const build = new BuildAggregateArgs(args as any, this)\n const results = await build.results()\n await this.xansql.XansqlTransaction.commit()\n return results as any\n } catch (error) {\n await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async create<T extends CreateArgs<S>>(args: ExactArgs<T, CreateArgs<S>>): Promise<FindResult<T, S>[] | null> {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildCreateArgs(args as any, this)\n const results = await build.results() as any\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async update<T extends UpdateArgs<S>>(args: ExactArgs<T, UpdateArgs<S>>) {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpdateArgs(args, this)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async upsert<T extends UpsertArgs<S>>(args: ExactArgs<T, UpsertArgs<S>>) {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpsertArgs(args, this)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async delete<T extends DeleteArgs<S>>(args: ExactArgs<T, DeleteArgs<S>>) {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildDeleteArgs(args as any, this as any)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n // Helper Methods\n async paginate(args: PaginateArgs<S>) {\n const page = args.page\n const perpage = args?.perpage || 20;\n const skip = (page - 1) * perpage;\n const results = await this.find({\n ...args as any,\n limit: {\n take: perpage,\n skip\n }\n })\n const total = await this.count(args?.where || {} as WhereArgs<S>, args.debug)\n return {\n results,\n total,\n page,\n perpage,\n pages: Math.ceil(total / perpage)\n }\n }\n\n async exists(where: WhereArgs<S>, debug?: boolean): Promise<boolean> {\n return !!(await this.count(where, debug))\n }\n\n // Aggregate Methods\n async count(where: WhereArgs<S>, debug?: boolean): Promise<number> {\n const res: any = await this.aggregate({\n where,\n select: {\n [this.IDColumn]: {\n count: true\n }\n } as any,\n debug\n })\n return res?.length ? res[0][`count_${this.IDColumn}`] : 0\n }\n\n async min(column: string, where: WhereArgs<S>, debug?: boolean): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n min: true\n }\n } as any,\n debug\n })\n return res?.length ? res[0][`min_${column}`] : 0\n }\n\n async max(column: string, where: WhereArgs<S>, debug?: boolean): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n max: true\n }\n } as any,\n debug\n })\n return res?.length ? res[0][`max_${column}`] : 0\n }\n\n async sum(column: string, where: WhereArgs<S>, debug?: boolean): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n sum: true\n }\n } as any,\n debug\n })\n return res?.length ? res[0][`sum_${column}`] : 0\n }\n\n async avg(column: string, where: WhereArgs<S>, debug?: boolean): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n avg: true\n }\n } as any,\n debug\n })\n return res?.length ? res[0][`avg_${column}`] : 0\n }\n}\n\nexport default Model"],"names":["XqlIDField","iof","XqlRelationMany","XqlRelationOne","BuildFindArgs","BuildAggregateArgs","BuildCreateArgs","BuildUpdateArgs","BuildUpsertArgs","BuildDeleteArgs"],"mappings":"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"}
|
package/model/index.d.ts
CHANGED
|
@@ -26,12 +26,12 @@ declare abstract class Model<S extends SchemaShape = SchemaShape> {
|
|
|
26
26
|
perpage: number;
|
|
27
27
|
pages: number;
|
|
28
28
|
}>;
|
|
29
|
-
exists(where: WhereArgs<S
|
|
30
|
-
count(where: WhereArgs<S
|
|
31
|
-
min(column: string, where: WhereArgs<S
|
|
32
|
-
max(column: string, where: WhereArgs<S
|
|
33
|
-
sum(column: string, where: WhereArgs<S
|
|
34
|
-
avg(column: string, where: WhereArgs<S
|
|
29
|
+
exists(where: WhereArgs<S>, debug?: boolean): Promise<boolean>;
|
|
30
|
+
count(where: WhereArgs<S>, debug?: boolean): Promise<number>;
|
|
31
|
+
min(column: string, where: WhereArgs<S>, debug?: boolean): Promise<number>;
|
|
32
|
+
max(column: string, where: WhereArgs<S>, debug?: boolean): Promise<number>;
|
|
33
|
+
sum(column: string, where: WhereArgs<S>, debug?: boolean): Promise<number>;
|
|
34
|
+
avg(column: string, where: WhereArgs<S>, debug?: boolean): Promise<number>;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export { Model as default };
|
package/model/index.js
CHANGED
|
@@ -153,10 +153,6 @@ class Model {
|
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
this.schema = (() => fields).bind(this);
|
|
156
|
-
// migration server only
|
|
157
|
-
if (this.table !== "_xansql_migration") {
|
|
158
|
-
xansql.Migration.migrate(this);
|
|
159
|
-
}
|
|
160
156
|
}
|
|
161
157
|
// private async migrationInit() {
|
|
162
158
|
// const fields = this.schema()
|
|
@@ -290,7 +286,7 @@ class Model {
|
|
|
290
286
|
take: perpage,
|
|
291
287
|
skip
|
|
292
288
|
} }));
|
|
293
|
-
const total = await this.count((args === null || args === void 0 ? void 0 : args.where) || {});
|
|
289
|
+
const total = await this.count((args === null || args === void 0 ? void 0 : args.where) || {}, args.debug);
|
|
294
290
|
return {
|
|
295
291
|
results,
|
|
296
292
|
total,
|
|
@@ -299,22 +295,23 @@ class Model {
|
|
|
299
295
|
pages: Math.ceil(total / perpage)
|
|
300
296
|
};
|
|
301
297
|
}
|
|
302
|
-
async exists(where) {
|
|
303
|
-
return !!(await this.count(where));
|
|
298
|
+
async exists(where, debug) {
|
|
299
|
+
return !!(await this.count(where, debug));
|
|
304
300
|
}
|
|
305
301
|
// Aggregate Methods
|
|
306
|
-
async count(where) {
|
|
302
|
+
async count(where, debug) {
|
|
307
303
|
const res = await this.aggregate({
|
|
308
304
|
where,
|
|
309
305
|
select: {
|
|
310
306
|
[this.IDColumn]: {
|
|
311
307
|
count: true
|
|
312
308
|
}
|
|
313
|
-
}
|
|
309
|
+
},
|
|
310
|
+
debug
|
|
314
311
|
});
|
|
315
312
|
return (res === null || res === void 0 ? void 0 : res.length) ? res[0][`count_${this.IDColumn}`] : 0;
|
|
316
313
|
}
|
|
317
|
-
async min(column, where) {
|
|
314
|
+
async min(column, where, debug) {
|
|
318
315
|
if (!(column in this.schema)) {
|
|
319
316
|
throw new XansqlError({
|
|
320
317
|
code: "INVALID_ARGUMENTS",
|
|
@@ -329,11 +326,12 @@ class Model {
|
|
|
329
326
|
[column]: {
|
|
330
327
|
min: true
|
|
331
328
|
}
|
|
332
|
-
}
|
|
329
|
+
},
|
|
330
|
+
debug
|
|
333
331
|
});
|
|
334
332
|
return (res === null || res === void 0 ? void 0 : res.length) ? res[0][`min_${column}`] : 0;
|
|
335
333
|
}
|
|
336
|
-
async max(column, where) {
|
|
334
|
+
async max(column, where, debug) {
|
|
337
335
|
if (!(column in this.schema)) {
|
|
338
336
|
throw new XansqlError({
|
|
339
337
|
code: "INVALID_ARGUMENTS",
|
|
@@ -348,11 +346,12 @@ class Model {
|
|
|
348
346
|
[column]: {
|
|
349
347
|
max: true
|
|
350
348
|
}
|
|
351
|
-
}
|
|
349
|
+
},
|
|
350
|
+
debug
|
|
352
351
|
});
|
|
353
352
|
return (res === null || res === void 0 ? void 0 : res.length) ? res[0][`max_${column}`] : 0;
|
|
354
353
|
}
|
|
355
|
-
async sum(column, where) {
|
|
354
|
+
async sum(column, where, debug) {
|
|
356
355
|
if (!(column in this.schema)) {
|
|
357
356
|
throw new XansqlError({
|
|
358
357
|
code: "INVALID_ARGUMENTS",
|
|
@@ -367,11 +366,12 @@ class Model {
|
|
|
367
366
|
[column]: {
|
|
368
367
|
sum: true
|
|
369
368
|
}
|
|
370
|
-
}
|
|
369
|
+
},
|
|
370
|
+
debug
|
|
371
371
|
});
|
|
372
372
|
return (res === null || res === void 0 ? void 0 : res.length) ? res[0][`sum_${column}`] : 0;
|
|
373
373
|
}
|
|
374
|
-
async avg(column, where) {
|
|
374
|
+
async avg(column, where, debug) {
|
|
375
375
|
if (!(column in this.schema)) {
|
|
376
376
|
throw new XansqlError({
|
|
377
377
|
code: "INVALID_ARGUMENTS",
|
|
@@ -386,7 +386,8 @@ class Model {
|
|
|
386
386
|
[column]: {
|
|
387
387
|
avg: true
|
|
388
388
|
}
|
|
389
|
-
}
|
|
389
|
+
},
|
|
390
|
+
debug
|
|
390
391
|
});
|
|
391
392
|
return (res === null || res === void 0 ? void 0 : res.length) ? res[0][`avg_${column}`] : 0;
|
|
392
393
|
}
|
package/model/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/model/index.ts"],"sourcesContent":["import Xansql from \"../core/Xansql\";\nimport { iof } from \"../utils\";\nimport XqlIDField from \"../xt/fields/IDField\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport XqlRelationOne from \"../xt/fields/RelationOne\";\nimport { AggregateArgs, CreateArgs, DeleteArgs, ExactArgs, FindArgs, FindResult, ModelClass, PaginateArgs, SchemaShape, UpdateArgs, UpsertArgs, WhereArgs } from \"./types\";\nimport XansqlError from \"../core/XansqlError\";\nimport BuildFindArgs from \"./Build/FindArgs\";\nimport BuildCreateArgs from \"./Build/CreateArgs\";\nimport xt from \"../xt\";\nimport BuildAggregateArgs from \"./Build/AggregateArgs\";\nimport BuildUpdateArgs from \"./Build/UpdateArgs\";\nimport BuildDeleteArgs from \"./Build/DeleteArgs\";\nimport ModelWhere from \"./ModelWhere\";\nimport ReserveKeywords from \"./ReserveKeywords\";\nimport BuildUpsertArgs from \"./Build/UpsertArgs\";\n\n\nabstract class Model<S extends SchemaShape = SchemaShape> {\n abstract schema(): S\n readonly xansql: Xansql\n readonly IDColumn: string\n readonly alias: string\n\n get table() {\n const name = this.constructor.name.replace(/_/g, \"\");\n let table = name.split(/(?=[A-Z])/).filter((l: string) => l.toLowerCase() !== 'model').join(\"_\").toLowerCase()\n table = table.endsWith(\"y\") ? table.slice(0, -1) + \"ies\" : table + \"s\"\n return table\n }\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n const fields = this.schema()\n\n this.IDColumn = Object.keys(fields).find(column => fields[column] instanceof XqlIDField) || ''\n if (!this.IDColumn) {\n throw new Error(`ID Column not found in schema ${this.table}. Please define an ID column using xt.id() in the schema.`)\n }\n\n // build model registry in xansql for relations\n xansql.models.set(this.constructor as ModelClass<any>, this as any)\n for (let column in fields) {\n const field = fields[column]\n if (iof(field, XqlRelationMany, XqlRelationOne) && !xansql.models.has(field.model)) {\n xansql.model(field.model)\n }\n }\n\n // const aliases = Array.from(xansql.models.values()).map(m => m.alias)\n // const parts = this.table.split(/_|(?=[A-Z])/);\n // let alias = parts.map(p => p[0]).join('');\n // if (!alias || alias.length < 1) {\n // alias = this.table.slice(0, 2);\n // }\n // alias = alias.toLowerCase();\n // let counter = 1;\n // while (aliases.includes(alias)) {\n // alias = alias + counter;\n // counter++;\n // }\n // this.alias = alias\n\n const aliases = Array.from(xansql.models.values()).map(m => m.alias);\n const parts = this.table.split(/_|(?=[A-Z])/).filter(Boolean);\n\n let alias = parts.map(p => p[0]).join('').toLowerCase(); // up\n let indexes = parts.map(() => 1);\n\n while (aliases.includes(alias)) {\n let changed = false;\n\n for (let i = 0; i < parts.length; i++) {\n if (indexes[i] < parts[i].length) {\n indexes[i]++;\n changed = true;\n break;\n }\n }\n\n if (!changed) break;\n\n alias = parts.map((p, i) => p.slice(0, indexes[i])).join('').toLowerCase();\n }\n\n if (aliases.includes(alias)) {\n let counter = 1;\n let temp = alias;\n while (aliases.includes(temp)) {\n temp = alias + counter;\n counter++;\n }\n alias = temp;\n }\n this.alias = alias;\n\n let migration_columns = []\n let index_sqls = []\n for (let column in fields) {\n if (ReserveKeywords.includes(column)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Invalid column name \"${column}\" in table \"${this.table}\". \"${column}\" is a reserved keyword.`,\n model: this.table,\n field: column\n })\n }\n\n const field = fields[column]\n\n // check field is valid XqlField\n if (!field.meta || !field.parse) {\n throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n model: this.constructor.name,\n field: column,\n message: `Invalid field type in model ${this.constructor.name}:${column}`\n })\n }\n\n field.table = this.table\n field.column_name = column\n field.engine = xansql.dialect.engine\n\n if (iof(field, XqlRelationMany, XqlRelationOne)) {\n const targetColumn = field.targetColumn\n const TModel = field.model\n const targetModel = xansql.models.get(TModel)\n if (!targetModel) {\n throw new Error(`Target model for relation ${column} in schema ${fields.table} not found. Please define the target schema before defining the relation.`)\n }\n const targetShape = targetModel.schema() as Record<string, any>\n\n // check if relation target exists\n if (field.type === 'relation-many') {\n if (!targetShape[targetColumn] || targetShape[targetColumn].type !== \"relation-one\") {\n throw new Error(`Target column ${targetColumn} for relation ${column} in schema ${fields.table} not found in target schema ${targetModel.table}. Please define the target column in the target schema.`)\n }\n } else if (!targetShape[targetColumn]) {\n // const tschema = targetModel.schema()\n // tschema[targetColumn] = xt.many(this.constructor as any, column)\n // targetModel.schema = (() => tschema).bind(targetModel)\n }\n\n if (field.type == 'relation-one') {\n field.relationInfo = {\n self: {\n table: this.table,\n relation: column,\n column: column,\n },\n target: {\n table: targetModel.table,\n relation: targetModel.IDColumn,\n column: targetColumn,\n },\n sql: `${this.table}.${column} = ${targetModel.table}.${targetModel.IDColumn}`\n }\n } else if (field.type == 'relation-many') {\n field.relationInfo = {\n self: {\n table: this.table,\n relation: this.IDColumn,\n column: column,\n },\n target: {\n table: targetModel.table,\n relation: targetColumn,\n column: targetColumn,\n },\n sql: `${this.table}.${this.IDColumn} = ${targetModel.table}.${targetColumn}`\n }\n }\n }\n\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n migration_columns.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n }\n }\n\n this.schema = (() => fields).bind(this)\n\n // migration server only\n if (this.table !== \"_xansql_migration\") {\n xansql.Migration.migrate(this)\n }\n }\n\n // private async migrationInit() {\n // const fields = this.schema()\n // let migration_columns = []\n // let index_sqls = []\n // for (let column in fields) {\n // const field = fields[column]\n\n // if (!iof(field, XqlRelationMany)) {\n // const info = field.info\n // migration_columns.push(info.sql.column)\n // if (info.sql.create_index) {\n // index_sqls.push(info.sql.create_index)\n // }\n // }\n // }\n // const sql = `CREATE TABLE IF NOT EXISTS ${this.table}(${migration_columns.join(\",\")})`\n // await this.xansql.execute(sql)\n\n // for (let idxql of index_sqls) {\n // try {\n // await this.xansql.execute(idxql)\n // } catch (error) { }\n // }\n // }\n\n where(inColumn: string, where?: WhereArgs<S>) {\n return new ModelWhere<S>(this, inColumn, where)\n }\n\n async execute(sql: string, debug?: boolean) {\n return this.xansql.execute(sql, debug)\n }\n\n async find<T extends FindArgs<S>>(args: ExactArgs<T, FindArgs<S>>): Promise<FindResult<T, S>[] | null> {\n try {\n const build = new BuildFindArgs(args as any, this)\n const results = await build.results()\n return results as any\n } catch (error) {\n throw error\n }\n }\n\n async findOne<T extends FindArgs<S>>(args: ExactArgs<T, FindArgs<S>>): Promise<FindResult<T, S> | null> {\n try {\n const results = await this.find(args)\n if (results?.length) {\n return results[0]\n }\n return null\n } catch (error) {\n throw error\n }\n }\n\n async aggregate<T extends AggregateArgs<S, any>>(args: ExactArgs<T, AggregateArgs<S, T>>) {\n try {\n await this.xansql.XansqlTransaction.begin()\n const build = new BuildAggregateArgs(args as any, this)\n const results = await build.results()\n await this.xansql.XansqlTransaction.commit()\n return results as any\n } catch (error) {\n await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async create<T extends CreateArgs<S>>(args: ExactArgs<T, CreateArgs<S>>): Promise<FindResult<T, S>[] | null> {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildCreateArgs(args as any, this)\n const results = await build.results() as any\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async update<T extends UpdateArgs<S>>(args: ExactArgs<T, UpdateArgs<S>>) {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpdateArgs(args, this)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async upsert<T extends UpsertArgs<S>>(args: ExactArgs<T, UpsertArgs<S>>) {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpsertArgs(args, this)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async delete<T extends DeleteArgs<S>>(args: ExactArgs<T, DeleteArgs<S>>) {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildDeleteArgs(args as any, this as any)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n // Helper Methods\n async paginate(args: PaginateArgs<S>) {\n const page = args.page\n const perpage = args?.perpage || 20;\n const skip = (page - 1) * perpage;\n const results = await this.find({\n ...args as any,\n limit: {\n take: perpage,\n skip\n }\n })\n const total = await this.count(args?.where || {} as WhereArgs<S>)\n return {\n results,\n total,\n page,\n perpage,\n pages: Math.ceil(total / perpage)\n }\n }\n\n async exists(where: WhereArgs<S>): Promise<boolean> {\n return !!(await this.count(where))\n }\n\n // Aggregate Methods\n async count(where: WhereArgs<S>): Promise<number> {\n const res: any = await this.aggregate({\n where,\n select: {\n [this.IDColumn]: {\n count: true\n }\n } as any\n })\n return res?.length ? res[0][`count_${this.IDColumn}`] : 0\n }\n\n async min(column: string, where: WhereArgs<S>): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n min: true\n }\n } as any\n })\n return res?.length ? res[0][`min_${column}`] : 0\n }\n\n async max(column: string, where: WhereArgs<S>): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n max: true\n }\n } as any\n })\n return res?.length ? res[0][`max_${column}`] : 0\n }\n\n async sum(column: string, where: WhereArgs<S>): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n sum: true\n }\n } as any\n })\n return res?.length ? res[0][`sum_${column}`] : 0\n }\n\n async avg(column: string, where: WhereArgs<S>): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n avg: true\n }\n } as any\n })\n return res?.length ? res[0][`avg_${column}`] : 0\n }\n}\n\nexport default Model"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/model/index.ts"],"sourcesContent":["import Xansql from \"../core/Xansql\";\nimport { iof } from \"../utils\";\nimport XqlIDField from \"../xt/fields/IDField\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport XqlRelationOne from \"../xt/fields/RelationOne\";\nimport { AggregateArgs, CreateArgs, DeleteArgs, ExactArgs, FindArgs, FindResult, ModelClass, PaginateArgs, SchemaShape, UpdateArgs, UpsertArgs, WhereArgs } from \"./types\";\nimport XansqlError from \"../core/XansqlError\";\nimport BuildFindArgs from \"./Build/FindArgs\";\nimport BuildCreateArgs from \"./Build/CreateArgs\";\nimport xt from \"../xt\";\nimport BuildAggregateArgs from \"./Build/AggregateArgs\";\nimport BuildUpdateArgs from \"./Build/UpdateArgs\";\nimport BuildDeleteArgs from \"./Build/DeleteArgs\";\nimport ModelWhere from \"./ModelWhere\";\nimport ReserveKeywords from \"./ReserveKeywords\";\nimport BuildUpsertArgs from \"./Build/UpsertArgs\";\n\n\nabstract class Model<S extends SchemaShape = SchemaShape> {\n abstract schema(): S\n readonly xansql: Xansql\n readonly IDColumn: string\n readonly alias: string\n\n get table() {\n const name = this.constructor.name.replace(/_/g, \"\");\n let table = name.split(/(?=[A-Z])/).filter((l: string) => l.toLowerCase() !== 'model').join(\"_\").toLowerCase()\n table = table.endsWith(\"y\") ? table.slice(0, -1) + \"ies\" : table + \"s\"\n return table\n }\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n const fields = this.schema()\n\n this.IDColumn = Object.keys(fields).find(column => fields[column] instanceof XqlIDField) || ''\n if (!this.IDColumn) {\n throw new Error(`ID Column not found in schema ${this.table}. Please define an ID column using xt.id() in the schema.`)\n }\n\n // build model registry in xansql for relations\n xansql.models.set(this.constructor as ModelClass<any>, this as any)\n for (let column in fields) {\n const field = fields[column]\n if (iof(field, XqlRelationMany, XqlRelationOne) && !xansql.models.has(field.model)) {\n xansql.model(field.model)\n }\n }\n\n // const aliases = Array.from(xansql.models.values()).map(m => m.alias)\n // const parts = this.table.split(/_|(?=[A-Z])/);\n // let alias = parts.map(p => p[0]).join('');\n // if (!alias || alias.length < 1) {\n // alias = this.table.slice(0, 2);\n // }\n // alias = alias.toLowerCase();\n // let counter = 1;\n // while (aliases.includes(alias)) {\n // alias = alias + counter;\n // counter++;\n // }\n // this.alias = alias\n\n const aliases = Array.from(xansql.models.values()).map(m => m.alias);\n const parts = this.table.split(/_|(?=[A-Z])/).filter(Boolean);\n\n let alias = parts.map(p => p[0]).join('').toLowerCase(); // up\n let indexes = parts.map(() => 1);\n\n while (aliases.includes(alias)) {\n let changed = false;\n\n for (let i = 0; i < parts.length; i++) {\n if (indexes[i] < parts[i].length) {\n indexes[i]++;\n changed = true;\n break;\n }\n }\n\n if (!changed) break;\n\n alias = parts.map((p, i) => p.slice(0, indexes[i])).join('').toLowerCase();\n }\n\n if (aliases.includes(alias)) {\n let counter = 1;\n let temp = alias;\n while (aliases.includes(temp)) {\n temp = alias + counter;\n counter++;\n }\n alias = temp;\n }\n this.alias = alias;\n\n let migration_columns = []\n let index_sqls = []\n for (let column in fields) {\n if (ReserveKeywords.includes(column)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Invalid column name \"${column}\" in table \"${this.table}\". \"${column}\" is a reserved keyword.`,\n model: this.table,\n field: column\n })\n }\n\n const field = fields[column]\n\n // check field is valid XqlField\n if (!field.meta || !field.parse) {\n throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n model: this.constructor.name,\n field: column,\n message: `Invalid field type in model ${this.constructor.name}:${column}`\n })\n }\n\n field.table = this.table\n field.column_name = column\n field.engine = xansql.dialect.engine\n\n if (iof(field, XqlRelationMany, XqlRelationOne)) {\n const targetColumn = field.targetColumn\n const TModel = field.model\n const targetModel = xansql.models.get(TModel)\n if (!targetModel) {\n throw new Error(`Target model for relation ${column} in schema ${fields.table} not found. Please define the target schema before defining the relation.`)\n }\n const targetShape = targetModel.schema() as Record<string, any>\n\n // check if relation target exists\n if (field.type === 'relation-many') {\n if (!targetShape[targetColumn] || targetShape[targetColumn].type !== \"relation-one\") {\n throw new Error(`Target column ${targetColumn} for relation ${column} in schema ${fields.table} not found in target schema ${targetModel.table}. Please define the target column in the target schema.`)\n }\n } else if (!targetShape[targetColumn]) {\n // const tschema = targetModel.schema()\n // tschema[targetColumn] = xt.many(this.constructor as any, column)\n // targetModel.schema = (() => tschema).bind(targetModel)\n }\n\n if (field.type == 'relation-one') {\n field.relationInfo = {\n self: {\n table: this.table,\n relation: column,\n column: column,\n },\n target: {\n table: targetModel.table,\n relation: targetModel.IDColumn,\n column: targetColumn,\n },\n sql: `${this.table}.${column} = ${targetModel.table}.${targetModel.IDColumn}`\n }\n } else if (field.type == 'relation-many') {\n field.relationInfo = {\n self: {\n table: this.table,\n relation: this.IDColumn,\n column: column,\n },\n target: {\n table: targetModel.table,\n relation: targetColumn,\n column: targetColumn,\n },\n sql: `${this.table}.${this.IDColumn} = ${targetModel.table}.${targetColumn}`\n }\n }\n }\n\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n migration_columns.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n }\n }\n\n this.schema = (() => fields).bind(this)\n }\n\n // private async migrationInit() {\n // const fields = this.schema()\n // let migration_columns = []\n // let index_sqls = []\n // for (let column in fields) {\n // const field = fields[column]\n\n // if (!iof(field, XqlRelationMany)) {\n // const info = field.info\n // migration_columns.push(info.sql.column)\n // if (info.sql.create_index) {\n // index_sqls.push(info.sql.create_index)\n // }\n // }\n // }\n // const sql = `CREATE TABLE IF NOT EXISTS ${this.table}(${migration_columns.join(\",\")})`\n // await this.xansql.execute(sql)\n\n // for (let idxql of index_sqls) {\n // try {\n // await this.xansql.execute(idxql)\n // } catch (error) { }\n // }\n // }\n\n where(inColumn: string, where?: WhereArgs<S>) {\n return new ModelWhere<S>(this, inColumn, where)\n }\n\n async execute(sql: string, debug?: boolean) {\n return this.xansql.execute(sql, debug)\n }\n\n async find<T extends FindArgs<S>>(args: ExactArgs<T, FindArgs<S>>): Promise<FindResult<T, S>[] | null> {\n try {\n const build = new BuildFindArgs(args as any, this)\n const results = await build.results()\n return results as any\n } catch (error) {\n throw error\n }\n }\n\n async findOne<T extends FindArgs<S>>(args: ExactArgs<T, FindArgs<S>>): Promise<FindResult<T, S> | null> {\n try {\n const results = await this.find(args)\n if (results?.length) {\n return results[0]\n }\n return null\n } catch (error) {\n throw error\n }\n }\n\n async aggregate<T extends AggregateArgs<S, any>>(args: ExactArgs<T, AggregateArgs<S, T>>) {\n try {\n await this.xansql.XansqlTransaction.begin()\n const build = new BuildAggregateArgs(args as any, this)\n const results = await build.results()\n await this.xansql.XansqlTransaction.commit()\n return results as any\n } catch (error) {\n await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async create<T extends CreateArgs<S>>(args: ExactArgs<T, CreateArgs<S>>): Promise<FindResult<T, S>[] | null> {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildCreateArgs(args as any, this)\n const results = await build.results() as any\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async update<T extends UpdateArgs<S>>(args: ExactArgs<T, UpdateArgs<S>>) {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpdateArgs(args, this)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async upsert<T extends UpsertArgs<S>>(args: ExactArgs<T, UpsertArgs<S>>) {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpsertArgs(args, this)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async delete<T extends DeleteArgs<S>>(args: ExactArgs<T, DeleteArgs<S>>) {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildDeleteArgs(args as any, this as any)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n useTransection && await this.xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n // Helper Methods\n async paginate(args: PaginateArgs<S>) {\n const page = args.page\n const perpage = args?.perpage || 20;\n const skip = (page - 1) * perpage;\n const results = await this.find({\n ...args as any,\n limit: {\n take: perpage,\n skip\n }\n })\n const total = await this.count(args?.where || {} as WhereArgs<S>, args.debug)\n return {\n results,\n total,\n page,\n perpage,\n pages: Math.ceil(total / perpage)\n }\n }\n\n async exists(where: WhereArgs<S>, debug?: boolean): Promise<boolean> {\n return !!(await this.count(where, debug))\n }\n\n // Aggregate Methods\n async count(where: WhereArgs<S>, debug?: boolean): Promise<number> {\n const res: any = await this.aggregate({\n where,\n select: {\n [this.IDColumn]: {\n count: true\n }\n } as any,\n debug\n })\n return res?.length ? res[0][`count_${this.IDColumn}`] : 0\n }\n\n async min(column: string, where: WhereArgs<S>, debug?: boolean): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n min: true\n }\n } as any,\n debug\n })\n return res?.length ? res[0][`min_${column}`] : 0\n }\n\n async max(column: string, where: WhereArgs<S>, debug?: boolean): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n max: true\n }\n } as any,\n debug\n })\n return res?.length ? res[0][`max_${column}`] : 0\n }\n\n async sum(column: string, where: WhereArgs<S>, debug?: boolean): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n sum: true\n }\n } as any,\n debug\n })\n return res?.length ? res[0][`sum_${column}`] : 0\n }\n\n async avg(column: string, where: WhereArgs<S>, debug?: boolean): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n code: \"INVALID_ARGUMENTS\",\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n field: column\n });\n }\n const res: any = await this.aggregate({\n where,\n select: {\n [column]: {\n avg: true\n }\n } as any,\n debug\n })\n return res?.length ? res[0][`avg_${column}`] : 0\n }\n}\n\nexport default Model"],"names":[],"mappings":"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"}
|