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.
@@ -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
  }
@@ -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\n })\n }\n}\n\nexport default Migration"],"names":["Model","xt","xv","iof","XqlRelationMany"],"mappings":"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"}
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
  }
@@ -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\n })\n }\n}\n\nexport default Migration"],"names":[],"mappings":"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"}
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 result = await this.dialect.execute(query, this);
37
+ const execute = await this.dialect.execute(query, this);
38
38
  if (isDebug) {
39
39
  console.log(`[DB] Executed ✓`);
40
- console.dir(result, { depth: null });
40
+ console.dir(execute.results, { depth: null });
41
41
  }
42
- return result;
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; // never swallow DB errors
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;
@@ -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\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\n const isDebug = debug ?? false\n\n if (isDebug) {\n console.log(`[DB] Executing → ${query}`);\n }\n\n try {\n const result = await this.dialect.execute(query, this) as ExecuterResult;\n\n if (isDebug) {\n console.log(`[DB] Executed ✓`);\n console.dir(result, { depth: null });\n }\n\n return result;\n } catch (error) {\n if (isDebug) {\n console.error(`[DB] Execution failed ✗`);\n console.error(query);\n }\n\n throw error; // never swallow DB errors\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\nclass XansqlClone extends Xansql { }\n\n\nexport default Xansql"],"names":["file","getFileId","totalChunks","__asyncValues","chunkFile"],"mappings":"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"}
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":"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"}
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 result = await this.dialect.execute(query, this);
35
+ const execute = await this.dialect.execute(query, this);
36
36
  if (isDebug) {
37
37
  console.log(`[DB] Executed ✓`);
38
- console.dir(result, { depth: null });
38
+ console.dir(execute.results, { depth: null });
39
39
  }
40
- return result;
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; // never swallow DB errors
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 };
@@ -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\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\n const isDebug = debug ?? false\n\n if (isDebug) {\n console.log(`[DB] Executing → ${query}`);\n }\n\n try {\n const result = await this.dialect.execute(query, this) as ExecuterResult;\n\n if (isDebug) {\n console.log(`[DB] Executed ✓`);\n console.dir(result, { depth: null });\n }\n\n return result;\n } catch (error) {\n if (isDebug) {\n console.error(`[DB] Execution failed ✗`);\n console.error(query);\n }\n\n throw error; // never swallow DB errors\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\nclass XansqlClone extends Xansql { }\n\n\nexport default Xansql"],"names":[],"mappings":"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"}
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;QACrC;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,CAAC;QACtC,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,CAAC;QACxC,CAAC,EAAE,CAAC,CAAC;IACR;AACF;;;;"}
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;QACrC;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,CAAC;QACtC,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,CAAC;QACxC,CAAC,EAAE,CAAC,CAAC;IACR;AACF;;;;"}
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
- const res = await server.listen(url, options);
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\n const res = await server.listen(url, options)\n return {\n status: res.status,\n value: res.value,\n }\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
+ {"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: string | Uint8Array<ArrayBufferLike>;
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
- const res = await server.listen(url, options);
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\n const res = await server.listen(url, options)\n return {\n status: res.status,\n value: res.value,\n }\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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"}
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
  }
@@ -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>): Promise<boolean>;
30
- count(where: WhereArgs<S>): Promise<number>;
31
- min(column: string, where: WhereArgs<S>): Promise<number>;
32
- max(column: string, where: WhereArgs<S>): Promise<number>;
33
- sum(column: string, where: WhereArgs<S>): Promise<number>;
34
- avg(column: string, where: WhereArgs<S>): Promise<number>;
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
  }
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xansql",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "main": "./index.cjs",
5
5
  "module": "./index.js",
6
6
  "types": "./index.d.ts",