xansql 1.1.24 → 1.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -2,6 +2,6 @@ export { default as Xansql } from './core/Xansql.js';
2
2
  export { default as Model } from './model/index.js';
3
3
  export { default as XansqlError } from './core/XansqlError.js';
4
4
  export { default as xt } from './xt/index.js';
5
- export { AggregateArgs, AggregateArgsValue, AggregateFunctions, AggregateGroupByArgs, AggregateOrderBy, AggregateResult, AggregateResultGroupBy, AggregateSelectArgs, CreateArgs, CreateDataArgs, CreateDataValue, CreateResult, DeleteArgs, DeleteResult, ExactArgs, FindAggregateArgs, FindArgs, FindDistinctArgs, FindResult, FindResultColumnMap, FindResultFullSchema, FindResultMap, IsRelationField, IsRelationMany, IsRelationOne, LimitArgs, ModelClass, ModelHooks, ModelOptions, ModelRowObject, Normalize, OrderByArgs, PaginateArgs, SchemaAllColumns, SchemaShape, SelectArgs, UpdateArgs, UpdateDataArgs, UpdateDataValue, UpdateRelationArgs, UpdateResult, UpsertArgs, UpsertResult, WhereArgs, WhereSubConditionArgs } from './model/types.js';
5
+ export { AggregateArgs, AggregateArgsValue, AggregateFunctions, AggregateGroupByArgs, AggregateOrderBy, AggregateResult, AggregateResultGroupBy, AggregateSelectArgs, CreateArgs, CreateDataArgs, CreateDataValue, CreateResult, DeleteArgs, DeleteResult, ExactArgs, FindAggregateArgs, FindArgs, FindDistinctArgs, FindOneArgs, FindResult, FindResultColumnMap, FindResultFullSchema, FindResultMap, IsRelationField, IsRelationMany, IsRelationOne, LimitArgs, ModelClass, ModelHooks, ModelOptions, ModelRowObject, Normalize, OrderByArgs, PaginateArgs, SchemaAllColumns, SchemaShape, SelectArgs, UpdateArgs, UpdateDataArgs, UpdateDataValue, UpdateRelationArgs, UpdateResult, UpsertArgs, UpsertResult, WhereArgs, WhereSubConditionArgs } from './model/types.js';
6
6
  export { ExecuterResult, ResultData, RowObject, XansqlCache, XansqlConfigType, XansqlConfigTypeRequired, XansqlDialect, XansqlDialectEngine, XansqlFileConfig, XansqlFileMeta, XansqlFileUploadArgs, XansqlHooks, XansqlSocket } from './core/types.js';
7
7
  export { XqlField } from './xt/types.js';
@@ -43,13 +43,18 @@ class BuildWhereArgs {
43
43
  const andparts = [];
44
44
  const _aliases = Object.assign({}, aliases);
45
45
  _aliases[model.table] = aliases[model.table] - 1;
46
- for (let aargs of val) {
47
- if (!Object.keys(aargs).length) {
48
- continue;
49
- }
50
- const b = new BuildWhereArgs(aargs, model, _aliases);
46
+ if (index.isObject(val)) {
47
+ const b = new BuildWhereArgs(val, model, _aliases);
51
48
  andparts.push(b.parts.join(" AND "));
52
49
  }
50
+ else {
51
+ for (let aargs of val) {
52
+ if (!Object.keys(aargs).length)
53
+ continue;
54
+ const b = new BuildWhereArgs(aargs, model, _aliases);
55
+ andparts.push(b.parts.join(" AND "));
56
+ }
57
+ }
53
58
  if (andparts.length) {
54
59
  if (andparts.length > 1) {
55
60
  parts.push(`(${andparts.join(" AND ")})`);
@@ -64,13 +69,18 @@ class BuildWhereArgs {
64
69
  const _aliases = Object.assign({}, aliases);
65
70
  _aliases[model.table] = aliases[model.table] - 1;
66
71
  const orparts = [];
67
- for (let aargs of val) {
68
- if (!Object.keys(aargs).length) {
69
- continue;
70
- }
71
- const b = new BuildWhereArgs(aargs, model, _aliases);
72
+ if (index.isObject(val)) {
73
+ const b = new BuildWhereArgs(val, model, _aliases);
72
74
  orparts.push(b.parts.join(" AND "));
73
75
  }
76
+ else {
77
+ for (let aargs of val) {
78
+ if (!Object.keys(aargs).length)
79
+ continue;
80
+ const b = new BuildWhereArgs(aargs, model, _aliases);
81
+ orparts.push(b.parts.join(" AND "));
82
+ }
83
+ }
74
84
  if (orparts.length) {
75
85
  if (orparts.length > 1) {
76
86
  parts.push(`(${orparts.join(" OR ")})`);
@@ -85,13 +95,18 @@ class BuildWhereArgs {
85
95
  const _aliases = Object.assign({}, aliases);
86
96
  _aliases[model.table] = aliases[model.table] - 1;
87
97
  const notparts = [];
88
- for (let aargs of val) {
89
- if (!Object.keys(aargs).length) {
90
- continue;
91
- }
92
- const b = new BuildWhereArgs(aargs, model, _aliases);
98
+ if (index.isObject(val)) {
99
+ const b = new BuildWhereArgs(val, model, _aliases);
93
100
  notparts.push(b.parts.join(" AND "));
94
101
  }
102
+ else {
103
+ for (let aargs of val) {
104
+ if (!Object.keys(aargs).length)
105
+ continue;
106
+ const b = new BuildWhereArgs(aargs, model, _aliases);
107
+ notparts.push(b.parts.join(" AND "));
108
+ }
109
+ }
95
110
  if (notparts.length) {
96
111
  parts.push(`NOT (${notparts.join(" AND ")})`);
97
112
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/model/Build/WhereArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { isObject } from \"../../../utils\";\nimport { RelationManyInfo } from \"../../../xt/fields/RelationMany\";\nimport ModelWhere from \"../../ModelWhere\";\nimport { SchemaShape, WhereArgs, WhereSubConditionArgs } from \"../../types\";\n\ntype Aliases = {\n [table: string]: number\n}\n\nconst sub_keys = [\"is\", \"not\", \"lt\", \"lte\", \"gt\", \"gte\", \"in\", \"notIn\", \"between\", \"contains\", \"startsWith\", \"endsWith\"]\n\nclass BuildWhereArgs<S extends SchemaShape, M extends Model<any>> {\n readonly parts: string[];\n private model: M\n\n get sql() {\n if (!this.parts.length) return \"\";\n return `WHERE ${this.parts.join(\" AND \")}`;\n }\n\n constructor(args: WhereArgs<S>, model: M, aliases: Aliases = {}) {\n this.model = model\n const schema = model.schema();\n const parts: string[] = [];\n aliases[model.table] = model.table in aliases && aliases[model.table] > 0 ? aliases[model.table] : 0\n const alias = `${model.alias}${aliases[model.table] || \"\"}`\n\n if (Array.isArray(args)) {\n const _parts = []\n for (const arg of args) {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const w_parts = new BuildWhereArgs(arg, model, _aliases).parts\n if (w_parts.length) {\n if (w_parts.length > 1) {\n _parts.push(`(${w_parts.join(\" AND \")})`)\n } else {\n _parts.push(w_parts.join(\" AND \"))\n }\n }\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n for (const col in args) {\n const val = args[col];\n\n if (col === \"AND\") {\n const andparts = []\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, _aliases)\n andparts.push(b.parts.join(\" AND \"))\n }\n if (andparts.length) {\n if (andparts.length > 1) {\n parts.push(`(${andparts.join(\" AND \")})`)\n } else {\n parts.push(andparts.join(\" AND \"))\n }\n }\n continue\n }\n\n if (col === \"OR\") {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const orparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, _aliases)\n orparts.push(b.parts.join(\" AND \"))\n }\n if (orparts.length) {\n if (orparts.length > 1) {\n parts.push(`(${orparts.join(\" OR \")})`)\n } else {\n parts.push(orparts.join(\" OR \"))\n }\n }\n continue\n }\n\n if (col === \"NOT\") {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const notparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, _aliases)\n notparts.push(b.parts.join(\" AND \"))\n }\n if (notparts.length) {\n parts.push(`NOT (${notparts.join(\" AND \")})`)\n }\n continue\n }\n\n if (!(col in schema)) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n model: model.table,\n field: col,\n message: `Unknown column ${col} in ${model.table}`,\n });\n }\n\n const field = schema[col];\n if (field.isRelation) {\n const br = this.buildRelation(field, col, val, alias, aliases)\n br && parts.push(br)\n } else {\n // Array of subconditions → OR\n if (Array.isArray(val)) {\n const subParts: string[] = [];\n for (const subargs of val as any) {\n if (!isObject(subargs)) {\n throw new XansqlError({\n message: \"Invalid argument\",\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: col,\n params: subargs\n })\n }\n const cond = this.condition(col, subargs, alias, aliases);\n if (cond) {\n const keys = Object.keys(subargs);\n if (keys.length > 1) {\n subParts.push(`(${cond})`);\n } else {\n subParts.push(cond);\n }\n }\n }\n\n if (subParts.length) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${subParts.join(\" OR \")})`);\n } else {\n parts.push(`${subParts.join(\" OR \")}`);\n }\n }\n } else if (isObject(val)) {\n const cond = this.condition(col, val, alias, aliases);\n if (cond) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${cond})`);\n } else {\n parts.push(cond);\n }\n }\n } else {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n }\n }\n }\n }\n aliases[model.table] = aliases[model.table] + 1\n this.parts = parts;\n }\n\n\n private buildRelation(field: any, col: string, val: any, alias: string, aliases: Aliases) {\n const model = this.model\n const xansql = model.xansql\n const relArgs = val as WhereArgs<any>;\n const RModel = xansql.model(field.model);\n const parts: string[] = [];\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const rinfo = field.relationInfo as RelationManyInfo\n const relationSql = `${alias}.${rinfo.self.relation}=${ralias}.${rinfo.target.relation}`\n\n if (Array.isArray(relArgs)) {\n const _parts = []\n for (const rargs of relArgs) {\n if (!isObject(rargs)) { }\n const b = this.buildRelation(field, col, rargs, alias, aliases)\n _parts.push(`(${b})`)\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n const _sparts: string[] = []\n let _args: { [col: string]: any } = {}\n if (field.type === \"relation-one\") {\n if (relArgs === null) {\n parts.push(`${alias}.${col} IS NULL`);\n } else if (typeof relArgs === \"number\") {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n } else {\n const _subargs: { [col: string]: any } = {}\n for (let col in relArgs) {\n const val = relArgs[col]\n if (sub_keys.includes(col)) {\n _subargs[col] = val\n } else {\n _args[col] = val\n }\n }\n\n if (Object.keys(_subargs).length) {\n const cond = this.condition(col, _subargs, alias, aliases);\n if (cond) {\n _sparts.push(cond)\n }\n }\n }\n } else {\n _args = relArgs\n }\n\n if (Object.keys(_args).length) {\n const relWhere = new BuildWhereArgs(_args, RModel, aliases);\n const relSql = relWhere.parts.join(\" AND \");\n _sparts.push(\n `EXISTS (SELECT 1 FROM ${RModel.table} as ${ralias} WHERE ${relationSql}${relSql ? ` AND ${relSql}` : \"\"})`\n );\n }\n if (_sparts.length) {\n parts.push(_sparts.join(\" AND \"))\n }\n }\n\n return parts.join(\" AND \")\n }\n\n private condition(column: string, subargs: WhereSubConditionArgs<any>, alias: string, aliases: Aliases) {\n const parts: string[] = [];\n const col_name = `${alias}.${column}`\n const model = this.model\n const engin = model.xansql.dialect.engine\n\n for (const key in subargs) {\n const val = (subargs as any)[key];\n\n switch (key) {\n case \"is\":\n if (val === null) {\n parts.push(`${col_name} IS NULL`);\n } else {\n parts.push(`${col_name} = ${this.format(column, val)}`);\n }\n break;\n case \"not\":\n if (Array.isArray(val)) {\n const notParts: string[] = [];\n for (const v of val) {\n if (!isObject(v)) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: \"Invalid where condition\",\n field: column,\n model: this.model.table,\n })\n }\n const cond = this.condition(column, v as WhereSubConditionArgs<any>, alias, aliases);\n if (cond) {\n const keys = Object.keys(v);\n if (keys.length > 1) {\n notParts.push(`(${cond})`)\n } else {\n notParts.push(cond)\n }\n }\n }\n if (notParts.length) {\n parts.push(`NOT (${notParts.join(\" OR \")})`);\n }\n } else if (isObject(val)) {\n parts.push(`NOT (${this.condition(column, val, alias, aliases)})`);\n } else if (val === null) {\n parts.push(`${col_name} IS NOT NULL`)\n } else {\n parts.push(`${col_name} != ${this.format(column, val)}`);\n }\n break;\n\n case \"lt\":\n parts.push(`${col_name} < ${this.format(column, val)}`);\n break;\n\n case \"lte\":\n parts.push(`${col_name} <= ${this.format(column, val)}`);\n break;\n\n case \"gt\":\n parts.push(`${col_name} > ${this.format(column, val)}`);\n break;\n\n case \"gte\":\n parts.push(`${col_name} >= ${this.format(column, val)}`);\n break;\n\n case \"in\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n\n parts.push(\n `EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"notIn\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n parts.push(\n `NOT EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} NOT IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"between\":\n parts.push(\n `${col_name} BETWEEN ${this.format(column, val[0])} AND ${this.format(column, val[1])}`\n );\n break;\n\n case \"contains\":\n let csql = `${col_name} LIKE ${this.format(column, `%${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n csql = `${col_name} ILIKE ${this.format(column, `%${val}%`, false)}`\n } else {\n csql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}%`, false)})`\n }\n }\n parts.push(csql);\n break;\n\n case \"startsWith\":\n let ssql = `${col_name} LIKE ${this.format(column, `${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n ssql = `${col_name} ILIKE ${this.format(column, `${val}%`, false)}`\n } else {\n ssql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `${val}%`, false)})`\n }\n }\n parts.push(ssql);\n break;\n\n case \"endsWith\":\n let esql = `${col_name} LIKE ${this.format(column, `%${val}`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n esql = `${col_name} ILIKE ${this.format(column, `%${val}`, false)}`\n } else {\n esql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}`, false)})`\n }\n }\n parts.push(esql);\n break;\n }\n }\n\n return parts.join(\" AND \");\n }\n\n private format(column: string, value: any, parse = true) {\n const model = this.model;\n const schema = model.schema()\n const field = schema[column];\n\n if (field.type === 'relation-one') {\n if (typeof value == \"number\" || value === null) {\n return value\n } else {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for relation field \"${column}\" in table \"${model.table}\". Expected a number or null, received ${typeof value}.`,\n model: model.table,\n field: column\n })\n }\n }\n\n if (parse) {\n try {\n value = field.parse(value)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: column,\n sql: `${column}=${value}`,\n message: error.message\n });\n }\n }\n\n if (value instanceof Date) {\n return `'${value.toISOString()}'`;\n }\n\n if (typeof value === \"string\") {\n return `'${value.replace(/'/g, \"''\")}'`;\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"TRUE\" : \"FALSE\";\n }\n\n if (value === null) {\n return \"NULL\";\n }\n\n return value;\n }\n\n}\n\nexport default BuildWhereArgs;\n"],"names":["isObject"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/model/Build/WhereArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { isObject } from \"../../../utils\";\nimport { RelationManyInfo } from \"../../../xt/fields/RelationMany\";\nimport ModelWhere from \"../../ModelWhere\";\nimport { SchemaShape, WhereArgs, WhereSubConditionArgs } from \"../../types\";\n\ntype Aliases = {\n [table: string]: number\n}\n\nconst sub_keys = [\"is\", \"not\", \"lt\", \"lte\", \"gt\", \"gte\", \"in\", \"notIn\", \"between\", \"contains\", \"startsWith\", \"endsWith\"]\n\nclass BuildWhereArgs<S extends SchemaShape, M extends Model<any>> {\n readonly parts: string[];\n private model: M\n\n get sql() {\n if (!this.parts.length) return \"\";\n return `WHERE ${this.parts.join(\" AND \")}`;\n }\n\n constructor(args: WhereArgs<S>, model: M, aliases: Aliases = {}) {\n this.model = model\n const schema = model.schema();\n const parts: string[] = [];\n aliases[model.table] = model.table in aliases && aliases[model.table] > 0 ? aliases[model.table] : 0\n const alias = `${model.alias}${aliases[model.table] || \"\"}`\n\n if (Array.isArray(args)) {\n const _parts = []\n for (const arg of args) {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const w_parts = new BuildWhereArgs(arg, model, _aliases).parts\n if (w_parts.length) {\n if (w_parts.length > 1) {\n _parts.push(`(${w_parts.join(\" AND \")})`)\n } else {\n _parts.push(w_parts.join(\" AND \"))\n }\n }\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n for (const col in args) {\n const val = args[col];\n\n if (col === \"AND\") {\n const andparts = []\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n if (isObject(val)) {\n const b = new BuildWhereArgs(val, model, _aliases)\n andparts.push(b.parts.join(\" AND \"))\n } else {\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) continue\n const b = new BuildWhereArgs(aargs, model, _aliases)\n andparts.push(b.parts.join(\" AND \"))\n }\n }\n if (andparts.length) {\n if (andparts.length > 1) {\n parts.push(`(${andparts.join(\" AND \")})`)\n } else {\n parts.push(andparts.join(\" AND \"))\n }\n }\n continue\n }\n\n if (col === \"OR\") {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const orparts = []\n if (isObject(val)) {\n const b = new BuildWhereArgs(val, model, _aliases)\n orparts.push(b.parts.join(\" AND \"))\n } else {\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) continue\n const b = new BuildWhereArgs(aargs, model, _aliases)\n orparts.push(b.parts.join(\" AND \"))\n }\n }\n if (orparts.length) {\n if (orparts.length > 1) {\n parts.push(`(${orparts.join(\" OR \")})`)\n } else {\n parts.push(orparts.join(\" OR \"))\n }\n }\n continue\n }\n\n if (col === \"NOT\") {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n const notparts = []\n\n if (isObject(val)) {\n const b = new BuildWhereArgs(val, model, _aliases)\n notparts.push(b.parts.join(\" AND \"))\n } else {\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) continue\n const b = new BuildWhereArgs(aargs, model, _aliases)\n notparts.push(b.parts.join(\" AND \"))\n }\n }\n if (notparts.length) {\n parts.push(`NOT (${notparts.join(\" AND \")})`)\n }\n continue\n }\n\n if (!(col in schema)) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n model: model.table,\n field: col,\n message: `Unknown column ${col} in ${model.table}`,\n });\n }\n\n const field = schema[col];\n if (field.isRelation) {\n const br = this.buildRelation(field, col, val, alias, aliases)\n br && parts.push(br)\n } else {\n // Array of subconditions → OR\n if (Array.isArray(val)) {\n const subParts: string[] = [];\n for (const subargs of val as any) {\n if (!isObject(subargs)) {\n throw new XansqlError({\n message: \"Invalid argument\",\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: col,\n params: subargs\n })\n }\n const cond = this.condition(col, subargs, alias, aliases);\n if (cond) {\n const keys = Object.keys(subargs);\n if (keys.length > 1) {\n subParts.push(`(${cond})`);\n } else {\n subParts.push(cond);\n }\n }\n }\n\n if (subParts.length) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${subParts.join(\" OR \")})`);\n } else {\n parts.push(`${subParts.join(\" OR \")}`);\n }\n }\n } else if (isObject(val)) {\n const cond = this.condition(col, val, alias, aliases);\n if (cond) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${cond})`);\n } else {\n parts.push(cond);\n }\n }\n } else {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n }\n }\n }\n }\n aliases[model.table] = aliases[model.table] + 1\n this.parts = parts;\n }\n\n\n private buildRelation(field: any, col: string, val: any, alias: string, aliases: Aliases) {\n const model = this.model\n const xansql = model.xansql\n const relArgs = val as WhereArgs<any>;\n const RModel = xansql.model(field.model);\n const parts: string[] = [];\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const rinfo = field.relationInfo as RelationManyInfo\n const relationSql = `${alias}.${rinfo.self.relation}=${ralias}.${rinfo.target.relation}`\n\n if (Array.isArray(relArgs)) {\n const _parts = []\n for (const rargs of relArgs) {\n if (!isObject(rargs)) { }\n const b = this.buildRelation(field, col, rargs, alias, aliases)\n _parts.push(`(${b})`)\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n const _sparts: string[] = []\n let _args: { [col: string]: any } = {}\n if (field.type === \"relation-one\") {\n if (relArgs === null) {\n parts.push(`${alias}.${col} IS NULL`);\n } else if (typeof relArgs === \"number\") {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n } else {\n const _subargs: { [col: string]: any } = {}\n for (let col in relArgs) {\n const val = relArgs[col]\n if (sub_keys.includes(col)) {\n _subargs[col] = val\n } else {\n _args[col] = val\n }\n }\n\n if (Object.keys(_subargs).length) {\n const cond = this.condition(col, _subargs, alias, aliases);\n if (cond) {\n _sparts.push(cond)\n }\n }\n }\n } else {\n _args = relArgs\n }\n\n if (Object.keys(_args).length) {\n const relWhere = new BuildWhereArgs(_args, RModel, aliases);\n const relSql = relWhere.parts.join(\" AND \");\n _sparts.push(\n `EXISTS (SELECT 1 FROM ${RModel.table} as ${ralias} WHERE ${relationSql}${relSql ? ` AND ${relSql}` : \"\"})`\n );\n }\n if (_sparts.length) {\n parts.push(_sparts.join(\" AND \"))\n }\n }\n\n return parts.join(\" AND \")\n }\n\n private condition(column: string, subargs: WhereSubConditionArgs<any>, alias: string, aliases: Aliases) {\n const parts: string[] = [];\n const col_name = `${alias}.${column}`\n const model = this.model\n const engin = model.xansql.dialect.engine\n\n for (const key in subargs) {\n const val = (subargs as any)[key];\n\n switch (key) {\n case \"is\":\n if (val === null) {\n parts.push(`${col_name} IS NULL`);\n } else {\n parts.push(`${col_name} = ${this.format(column, val)}`);\n }\n break;\n case \"not\":\n if (Array.isArray(val)) {\n const notParts: string[] = [];\n for (const v of val) {\n if (!isObject(v)) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: \"Invalid where condition\",\n field: column,\n model: this.model.table,\n })\n }\n const cond = this.condition(column, v as WhereSubConditionArgs<any>, alias, aliases);\n if (cond) {\n const keys = Object.keys(v);\n if (keys.length > 1) {\n notParts.push(`(${cond})`)\n } else {\n notParts.push(cond)\n }\n }\n }\n if (notParts.length) {\n parts.push(`NOT (${notParts.join(\" OR \")})`);\n }\n } else if (isObject(val)) {\n parts.push(`NOT (${this.condition(column, val, alias, aliases)})`);\n } else if (val === null) {\n parts.push(`${col_name} IS NOT NULL`)\n } else {\n parts.push(`${col_name} != ${this.format(column, val)}`);\n }\n break;\n\n case \"lt\":\n parts.push(`${col_name} < ${this.format(column, val)}`);\n break;\n\n case \"lte\":\n parts.push(`${col_name} <= ${this.format(column, val)}`);\n break;\n\n case \"gt\":\n parts.push(`${col_name} > ${this.format(column, val)}`);\n break;\n\n case \"gte\":\n parts.push(`${col_name} >= ${this.format(column, val)}`);\n break;\n\n case \"in\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n\n parts.push(\n `EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"notIn\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n parts.push(\n `NOT EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} NOT IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"between\":\n parts.push(\n `${col_name} BETWEEN ${this.format(column, val[0])} AND ${this.format(column, val[1])}`\n );\n break;\n\n case \"contains\":\n let csql = `${col_name} LIKE ${this.format(column, `%${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n csql = `${col_name} ILIKE ${this.format(column, `%${val}%`, false)}`\n } else {\n csql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}%`, false)})`\n }\n }\n parts.push(csql);\n break;\n\n case \"startsWith\":\n let ssql = `${col_name} LIKE ${this.format(column, `${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n ssql = `${col_name} ILIKE ${this.format(column, `${val}%`, false)}`\n } else {\n ssql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `${val}%`, false)})`\n }\n }\n parts.push(ssql);\n break;\n\n case \"endsWith\":\n let esql = `${col_name} LIKE ${this.format(column, `%${val}`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n esql = `${col_name} ILIKE ${this.format(column, `%${val}`, false)}`\n } else {\n esql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}`, false)})`\n }\n }\n parts.push(esql);\n break;\n }\n }\n\n return parts.join(\" AND \");\n }\n\n private format(column: string, value: any, parse = true) {\n const model = this.model;\n const schema = model.schema()\n const field = schema[column];\n\n if (field.type === 'relation-one') {\n if (typeof value == \"number\" || value === null) {\n return value\n } else {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for relation field \"${column}\" in table \"${model.table}\". Expected a number or null, received ${typeof value}.`,\n model: model.table,\n field: column\n })\n }\n }\n\n if (parse) {\n try {\n value = field.parse(value)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: column,\n sql: `${column}=${value}`,\n message: error.message\n });\n }\n }\n\n if (value instanceof Date) {\n return `'${value.toISOString()}'`;\n }\n\n if (typeof value === \"string\") {\n return `'${value.replace(/'/g, \"''\")}'`;\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"TRUE\" : \"FALSE\";\n }\n\n if (value === null) {\n return \"NULL\";\n }\n\n return value;\n }\n\n}\n\nexport default BuildWhereArgs;\n"],"names":["isObject"],"mappings":"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"}
@@ -41,13 +41,18 @@ class BuildWhereArgs {
41
41
  const andparts = [];
42
42
  const _aliases = Object.assign({}, aliases);
43
43
  _aliases[model.table] = aliases[model.table] - 1;
44
- for (let aargs of val) {
45
- if (!Object.keys(aargs).length) {
46
- continue;
47
- }
48
- const b = new BuildWhereArgs(aargs, model, _aliases);
44
+ if (isObject(val)) {
45
+ const b = new BuildWhereArgs(val, model, _aliases);
49
46
  andparts.push(b.parts.join(" AND "));
50
47
  }
48
+ else {
49
+ for (let aargs of val) {
50
+ if (!Object.keys(aargs).length)
51
+ continue;
52
+ const b = new BuildWhereArgs(aargs, model, _aliases);
53
+ andparts.push(b.parts.join(" AND "));
54
+ }
55
+ }
51
56
  if (andparts.length) {
52
57
  if (andparts.length > 1) {
53
58
  parts.push(`(${andparts.join(" AND ")})`);
@@ -62,13 +67,18 @@ class BuildWhereArgs {
62
67
  const _aliases = Object.assign({}, aliases);
63
68
  _aliases[model.table] = aliases[model.table] - 1;
64
69
  const orparts = [];
65
- for (let aargs of val) {
66
- if (!Object.keys(aargs).length) {
67
- continue;
68
- }
69
- const b = new BuildWhereArgs(aargs, model, _aliases);
70
+ if (isObject(val)) {
71
+ const b = new BuildWhereArgs(val, model, _aliases);
70
72
  orparts.push(b.parts.join(" AND "));
71
73
  }
74
+ else {
75
+ for (let aargs of val) {
76
+ if (!Object.keys(aargs).length)
77
+ continue;
78
+ const b = new BuildWhereArgs(aargs, model, _aliases);
79
+ orparts.push(b.parts.join(" AND "));
80
+ }
81
+ }
72
82
  if (orparts.length) {
73
83
  if (orparts.length > 1) {
74
84
  parts.push(`(${orparts.join(" OR ")})`);
@@ -83,13 +93,18 @@ class BuildWhereArgs {
83
93
  const _aliases = Object.assign({}, aliases);
84
94
  _aliases[model.table] = aliases[model.table] - 1;
85
95
  const notparts = [];
86
- for (let aargs of val) {
87
- if (!Object.keys(aargs).length) {
88
- continue;
89
- }
90
- const b = new BuildWhereArgs(aargs, model, _aliases);
96
+ if (isObject(val)) {
97
+ const b = new BuildWhereArgs(val, model, _aliases);
91
98
  notparts.push(b.parts.join(" AND "));
92
99
  }
100
+ else {
101
+ for (let aargs of val) {
102
+ if (!Object.keys(aargs).length)
103
+ continue;
104
+ const b = new BuildWhereArgs(aargs, model, _aliases);
105
+ notparts.push(b.parts.join(" AND "));
106
+ }
107
+ }
93
108
  if (notparts.length) {
94
109
  parts.push(`NOT (${notparts.join(" AND ")})`);
95
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/model/Build/WhereArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { isObject } from \"../../../utils\";\nimport { RelationManyInfo } from \"../../../xt/fields/RelationMany\";\nimport ModelWhere from \"../../ModelWhere\";\nimport { SchemaShape, WhereArgs, WhereSubConditionArgs } from \"../../types\";\n\ntype Aliases = {\n [table: string]: number\n}\n\nconst sub_keys = [\"is\", \"not\", \"lt\", \"lte\", \"gt\", \"gte\", \"in\", \"notIn\", \"between\", \"contains\", \"startsWith\", \"endsWith\"]\n\nclass BuildWhereArgs<S extends SchemaShape, M extends Model<any>> {\n readonly parts: string[];\n private model: M\n\n get sql() {\n if (!this.parts.length) return \"\";\n return `WHERE ${this.parts.join(\" AND \")}`;\n }\n\n constructor(args: WhereArgs<S>, model: M, aliases: Aliases = {}) {\n this.model = model\n const schema = model.schema();\n const parts: string[] = [];\n aliases[model.table] = model.table in aliases && aliases[model.table] > 0 ? aliases[model.table] : 0\n const alias = `${model.alias}${aliases[model.table] || \"\"}`\n\n if (Array.isArray(args)) {\n const _parts = []\n for (const arg of args) {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const w_parts = new BuildWhereArgs(arg, model, _aliases).parts\n if (w_parts.length) {\n if (w_parts.length > 1) {\n _parts.push(`(${w_parts.join(\" AND \")})`)\n } else {\n _parts.push(w_parts.join(\" AND \"))\n }\n }\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n for (const col in args) {\n const val = args[col];\n\n if (col === \"AND\") {\n const andparts = []\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, _aliases)\n andparts.push(b.parts.join(\" AND \"))\n }\n if (andparts.length) {\n if (andparts.length > 1) {\n parts.push(`(${andparts.join(\" AND \")})`)\n } else {\n parts.push(andparts.join(\" AND \"))\n }\n }\n continue\n }\n\n if (col === \"OR\") {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const orparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, _aliases)\n orparts.push(b.parts.join(\" AND \"))\n }\n if (orparts.length) {\n if (orparts.length > 1) {\n parts.push(`(${orparts.join(\" OR \")})`)\n } else {\n parts.push(orparts.join(\" OR \"))\n }\n }\n continue\n }\n\n if (col === \"NOT\") {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const notparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, _aliases)\n notparts.push(b.parts.join(\" AND \"))\n }\n if (notparts.length) {\n parts.push(`NOT (${notparts.join(\" AND \")})`)\n }\n continue\n }\n\n if (!(col in schema)) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n model: model.table,\n field: col,\n message: `Unknown column ${col} in ${model.table}`,\n });\n }\n\n const field = schema[col];\n if (field.isRelation) {\n const br = this.buildRelation(field, col, val, alias, aliases)\n br && parts.push(br)\n } else {\n // Array of subconditions → OR\n if (Array.isArray(val)) {\n const subParts: string[] = [];\n for (const subargs of val as any) {\n if (!isObject(subargs)) {\n throw new XansqlError({\n message: \"Invalid argument\",\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: col,\n params: subargs\n })\n }\n const cond = this.condition(col, subargs, alias, aliases);\n if (cond) {\n const keys = Object.keys(subargs);\n if (keys.length > 1) {\n subParts.push(`(${cond})`);\n } else {\n subParts.push(cond);\n }\n }\n }\n\n if (subParts.length) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${subParts.join(\" OR \")})`);\n } else {\n parts.push(`${subParts.join(\" OR \")}`);\n }\n }\n } else if (isObject(val)) {\n const cond = this.condition(col, val, alias, aliases);\n if (cond) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${cond})`);\n } else {\n parts.push(cond);\n }\n }\n } else {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n }\n }\n }\n }\n aliases[model.table] = aliases[model.table] + 1\n this.parts = parts;\n }\n\n\n private buildRelation(field: any, col: string, val: any, alias: string, aliases: Aliases) {\n const model = this.model\n const xansql = model.xansql\n const relArgs = val as WhereArgs<any>;\n const RModel = xansql.model(field.model);\n const parts: string[] = [];\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const rinfo = field.relationInfo as RelationManyInfo\n const relationSql = `${alias}.${rinfo.self.relation}=${ralias}.${rinfo.target.relation}`\n\n if (Array.isArray(relArgs)) {\n const _parts = []\n for (const rargs of relArgs) {\n if (!isObject(rargs)) { }\n const b = this.buildRelation(field, col, rargs, alias, aliases)\n _parts.push(`(${b})`)\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n const _sparts: string[] = []\n let _args: { [col: string]: any } = {}\n if (field.type === \"relation-one\") {\n if (relArgs === null) {\n parts.push(`${alias}.${col} IS NULL`);\n } else if (typeof relArgs === \"number\") {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n } else {\n const _subargs: { [col: string]: any } = {}\n for (let col in relArgs) {\n const val = relArgs[col]\n if (sub_keys.includes(col)) {\n _subargs[col] = val\n } else {\n _args[col] = val\n }\n }\n\n if (Object.keys(_subargs).length) {\n const cond = this.condition(col, _subargs, alias, aliases);\n if (cond) {\n _sparts.push(cond)\n }\n }\n }\n } else {\n _args = relArgs\n }\n\n if (Object.keys(_args).length) {\n const relWhere = new BuildWhereArgs(_args, RModel, aliases);\n const relSql = relWhere.parts.join(\" AND \");\n _sparts.push(\n `EXISTS (SELECT 1 FROM ${RModel.table} as ${ralias} WHERE ${relationSql}${relSql ? ` AND ${relSql}` : \"\"})`\n );\n }\n if (_sparts.length) {\n parts.push(_sparts.join(\" AND \"))\n }\n }\n\n return parts.join(\" AND \")\n }\n\n private condition(column: string, subargs: WhereSubConditionArgs<any>, alias: string, aliases: Aliases) {\n const parts: string[] = [];\n const col_name = `${alias}.${column}`\n const model = this.model\n const engin = model.xansql.dialect.engine\n\n for (const key in subargs) {\n const val = (subargs as any)[key];\n\n switch (key) {\n case \"is\":\n if (val === null) {\n parts.push(`${col_name} IS NULL`);\n } else {\n parts.push(`${col_name} = ${this.format(column, val)}`);\n }\n break;\n case \"not\":\n if (Array.isArray(val)) {\n const notParts: string[] = [];\n for (const v of val) {\n if (!isObject(v)) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: \"Invalid where condition\",\n field: column,\n model: this.model.table,\n })\n }\n const cond = this.condition(column, v as WhereSubConditionArgs<any>, alias, aliases);\n if (cond) {\n const keys = Object.keys(v);\n if (keys.length > 1) {\n notParts.push(`(${cond})`)\n } else {\n notParts.push(cond)\n }\n }\n }\n if (notParts.length) {\n parts.push(`NOT (${notParts.join(\" OR \")})`);\n }\n } else if (isObject(val)) {\n parts.push(`NOT (${this.condition(column, val, alias, aliases)})`);\n } else if (val === null) {\n parts.push(`${col_name} IS NOT NULL`)\n } else {\n parts.push(`${col_name} != ${this.format(column, val)}`);\n }\n break;\n\n case \"lt\":\n parts.push(`${col_name} < ${this.format(column, val)}`);\n break;\n\n case \"lte\":\n parts.push(`${col_name} <= ${this.format(column, val)}`);\n break;\n\n case \"gt\":\n parts.push(`${col_name} > ${this.format(column, val)}`);\n break;\n\n case \"gte\":\n parts.push(`${col_name} >= ${this.format(column, val)}`);\n break;\n\n case \"in\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n\n parts.push(\n `EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"notIn\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n parts.push(\n `NOT EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} NOT IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"between\":\n parts.push(\n `${col_name} BETWEEN ${this.format(column, val[0])} AND ${this.format(column, val[1])}`\n );\n break;\n\n case \"contains\":\n let csql = `${col_name} LIKE ${this.format(column, `%${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n csql = `${col_name} ILIKE ${this.format(column, `%${val}%`, false)}`\n } else {\n csql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}%`, false)})`\n }\n }\n parts.push(csql);\n break;\n\n case \"startsWith\":\n let ssql = `${col_name} LIKE ${this.format(column, `${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n ssql = `${col_name} ILIKE ${this.format(column, `${val}%`, false)}`\n } else {\n ssql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `${val}%`, false)})`\n }\n }\n parts.push(ssql);\n break;\n\n case \"endsWith\":\n let esql = `${col_name} LIKE ${this.format(column, `%${val}`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n esql = `${col_name} ILIKE ${this.format(column, `%${val}`, false)}`\n } else {\n esql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}`, false)})`\n }\n }\n parts.push(esql);\n break;\n }\n }\n\n return parts.join(\" AND \");\n }\n\n private format(column: string, value: any, parse = true) {\n const model = this.model;\n const schema = model.schema()\n const field = schema[column];\n\n if (field.type === 'relation-one') {\n if (typeof value == \"number\" || value === null) {\n return value\n } else {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for relation field \"${column}\" in table \"${model.table}\". Expected a number or null, received ${typeof value}.`,\n model: model.table,\n field: column\n })\n }\n }\n\n if (parse) {\n try {\n value = field.parse(value)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: column,\n sql: `${column}=${value}`,\n message: error.message\n });\n }\n }\n\n if (value instanceof Date) {\n return `'${value.toISOString()}'`;\n }\n\n if (typeof value === \"string\") {\n return `'${value.replace(/'/g, \"''\")}'`;\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"TRUE\" : \"FALSE\";\n }\n\n if (value === null) {\n return \"NULL\";\n }\n\n return value;\n }\n\n}\n\nexport default BuildWhereArgs;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/model/Build/WhereArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { isObject } from \"../../../utils\";\nimport { RelationManyInfo } from \"../../../xt/fields/RelationMany\";\nimport ModelWhere from \"../../ModelWhere\";\nimport { SchemaShape, WhereArgs, WhereSubConditionArgs } from \"../../types\";\n\ntype Aliases = {\n [table: string]: number\n}\n\nconst sub_keys = [\"is\", \"not\", \"lt\", \"lte\", \"gt\", \"gte\", \"in\", \"notIn\", \"between\", \"contains\", \"startsWith\", \"endsWith\"]\n\nclass BuildWhereArgs<S extends SchemaShape, M extends Model<any>> {\n readonly parts: string[];\n private model: M\n\n get sql() {\n if (!this.parts.length) return \"\";\n return `WHERE ${this.parts.join(\" AND \")}`;\n }\n\n constructor(args: WhereArgs<S>, model: M, aliases: Aliases = {}) {\n this.model = model\n const schema = model.schema();\n const parts: string[] = [];\n aliases[model.table] = model.table in aliases && aliases[model.table] > 0 ? aliases[model.table] : 0\n const alias = `${model.alias}${aliases[model.table] || \"\"}`\n\n if (Array.isArray(args)) {\n const _parts = []\n for (const arg of args) {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const w_parts = new BuildWhereArgs(arg, model, _aliases).parts\n if (w_parts.length) {\n if (w_parts.length > 1) {\n _parts.push(`(${w_parts.join(\" AND \")})`)\n } else {\n _parts.push(w_parts.join(\" AND \"))\n }\n }\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n for (const col in args) {\n const val = args[col];\n\n if (col === \"AND\") {\n const andparts = []\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n if (isObject(val)) {\n const b = new BuildWhereArgs(val, model, _aliases)\n andparts.push(b.parts.join(\" AND \"))\n } else {\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) continue\n const b = new BuildWhereArgs(aargs, model, _aliases)\n andparts.push(b.parts.join(\" AND \"))\n }\n }\n if (andparts.length) {\n if (andparts.length > 1) {\n parts.push(`(${andparts.join(\" AND \")})`)\n } else {\n parts.push(andparts.join(\" AND \"))\n }\n }\n continue\n }\n\n if (col === \"OR\") {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const orparts = []\n if (isObject(val)) {\n const b = new BuildWhereArgs(val, model, _aliases)\n orparts.push(b.parts.join(\" AND \"))\n } else {\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) continue\n const b = new BuildWhereArgs(aargs, model, _aliases)\n orparts.push(b.parts.join(\" AND \"))\n }\n }\n if (orparts.length) {\n if (orparts.length > 1) {\n parts.push(`(${orparts.join(\" OR \")})`)\n } else {\n parts.push(orparts.join(\" OR \"))\n }\n }\n continue\n }\n\n if (col === \"NOT\") {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n const notparts = []\n\n if (isObject(val)) {\n const b = new BuildWhereArgs(val, model, _aliases)\n notparts.push(b.parts.join(\" AND \"))\n } else {\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) continue\n const b = new BuildWhereArgs(aargs, model, _aliases)\n notparts.push(b.parts.join(\" AND \"))\n }\n }\n if (notparts.length) {\n parts.push(`NOT (${notparts.join(\" AND \")})`)\n }\n continue\n }\n\n if (!(col in schema)) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n model: model.table,\n field: col,\n message: `Unknown column ${col} in ${model.table}`,\n });\n }\n\n const field = schema[col];\n if (field.isRelation) {\n const br = this.buildRelation(field, col, val, alias, aliases)\n br && parts.push(br)\n } else {\n // Array of subconditions → OR\n if (Array.isArray(val)) {\n const subParts: string[] = [];\n for (const subargs of val as any) {\n if (!isObject(subargs)) {\n throw new XansqlError({\n message: \"Invalid argument\",\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: col,\n params: subargs\n })\n }\n const cond = this.condition(col, subargs, alias, aliases);\n if (cond) {\n const keys = Object.keys(subargs);\n if (keys.length > 1) {\n subParts.push(`(${cond})`);\n } else {\n subParts.push(cond);\n }\n }\n }\n\n if (subParts.length) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${subParts.join(\" OR \")})`);\n } else {\n parts.push(`${subParts.join(\" OR \")}`);\n }\n }\n } else if (isObject(val)) {\n const cond = this.condition(col, val, alias, aliases);\n if (cond) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${cond})`);\n } else {\n parts.push(cond);\n }\n }\n } else {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n }\n }\n }\n }\n aliases[model.table] = aliases[model.table] + 1\n this.parts = parts;\n }\n\n\n private buildRelation(field: any, col: string, val: any, alias: string, aliases: Aliases) {\n const model = this.model\n const xansql = model.xansql\n const relArgs = val as WhereArgs<any>;\n const RModel = xansql.model(field.model);\n const parts: string[] = [];\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const rinfo = field.relationInfo as RelationManyInfo\n const relationSql = `${alias}.${rinfo.self.relation}=${ralias}.${rinfo.target.relation}`\n\n if (Array.isArray(relArgs)) {\n const _parts = []\n for (const rargs of relArgs) {\n if (!isObject(rargs)) { }\n const b = this.buildRelation(field, col, rargs, alias, aliases)\n _parts.push(`(${b})`)\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n const _sparts: string[] = []\n let _args: { [col: string]: any } = {}\n if (field.type === \"relation-one\") {\n if (relArgs === null) {\n parts.push(`${alias}.${col} IS NULL`);\n } else if (typeof relArgs === \"number\") {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n } else {\n const _subargs: { [col: string]: any } = {}\n for (let col in relArgs) {\n const val = relArgs[col]\n if (sub_keys.includes(col)) {\n _subargs[col] = val\n } else {\n _args[col] = val\n }\n }\n\n if (Object.keys(_subargs).length) {\n const cond = this.condition(col, _subargs, alias, aliases);\n if (cond) {\n _sparts.push(cond)\n }\n }\n }\n } else {\n _args = relArgs\n }\n\n if (Object.keys(_args).length) {\n const relWhere = new BuildWhereArgs(_args, RModel, aliases);\n const relSql = relWhere.parts.join(\" AND \");\n _sparts.push(\n `EXISTS (SELECT 1 FROM ${RModel.table} as ${ralias} WHERE ${relationSql}${relSql ? ` AND ${relSql}` : \"\"})`\n );\n }\n if (_sparts.length) {\n parts.push(_sparts.join(\" AND \"))\n }\n }\n\n return parts.join(\" AND \")\n }\n\n private condition(column: string, subargs: WhereSubConditionArgs<any>, alias: string, aliases: Aliases) {\n const parts: string[] = [];\n const col_name = `${alias}.${column}`\n const model = this.model\n const engin = model.xansql.dialect.engine\n\n for (const key in subargs) {\n const val = (subargs as any)[key];\n\n switch (key) {\n case \"is\":\n if (val === null) {\n parts.push(`${col_name} IS NULL`);\n } else {\n parts.push(`${col_name} = ${this.format(column, val)}`);\n }\n break;\n case \"not\":\n if (Array.isArray(val)) {\n const notParts: string[] = [];\n for (const v of val) {\n if (!isObject(v)) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: \"Invalid where condition\",\n field: column,\n model: this.model.table,\n })\n }\n const cond = this.condition(column, v as WhereSubConditionArgs<any>, alias, aliases);\n if (cond) {\n const keys = Object.keys(v);\n if (keys.length > 1) {\n notParts.push(`(${cond})`)\n } else {\n notParts.push(cond)\n }\n }\n }\n if (notParts.length) {\n parts.push(`NOT (${notParts.join(\" OR \")})`);\n }\n } else if (isObject(val)) {\n parts.push(`NOT (${this.condition(column, val, alias, aliases)})`);\n } else if (val === null) {\n parts.push(`${col_name} IS NOT NULL`)\n } else {\n parts.push(`${col_name} != ${this.format(column, val)}`);\n }\n break;\n\n case \"lt\":\n parts.push(`${col_name} < ${this.format(column, val)}`);\n break;\n\n case \"lte\":\n parts.push(`${col_name} <= ${this.format(column, val)}`);\n break;\n\n case \"gt\":\n parts.push(`${col_name} > ${this.format(column, val)}`);\n break;\n\n case \"gte\":\n parts.push(`${col_name} >= ${this.format(column, val)}`);\n break;\n\n case \"in\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n\n parts.push(\n `EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"notIn\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n parts.push(\n `NOT EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} NOT IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"between\":\n parts.push(\n `${col_name} BETWEEN ${this.format(column, val[0])} AND ${this.format(column, val[1])}`\n );\n break;\n\n case \"contains\":\n let csql = `${col_name} LIKE ${this.format(column, `%${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n csql = `${col_name} ILIKE ${this.format(column, `%${val}%`, false)}`\n } else {\n csql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}%`, false)})`\n }\n }\n parts.push(csql);\n break;\n\n case \"startsWith\":\n let ssql = `${col_name} LIKE ${this.format(column, `${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n ssql = `${col_name} ILIKE ${this.format(column, `${val}%`, false)}`\n } else {\n ssql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `${val}%`, false)})`\n }\n }\n parts.push(ssql);\n break;\n\n case \"endsWith\":\n let esql = `${col_name} LIKE ${this.format(column, `%${val}`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n esql = `${col_name} ILIKE ${this.format(column, `%${val}`, false)}`\n } else {\n esql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}`, false)})`\n }\n }\n parts.push(esql);\n break;\n }\n }\n\n return parts.join(\" AND \");\n }\n\n private format(column: string, value: any, parse = true) {\n const model = this.model;\n const schema = model.schema()\n const field = schema[column];\n\n if (field.type === 'relation-one') {\n if (typeof value == \"number\" || value === null) {\n return value\n } else {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for relation field \"${column}\" in table \"${model.table}\". Expected a number or null, received ${typeof value}.`,\n model: model.table,\n field: column\n })\n }\n }\n\n if (parse) {\n try {\n value = field.parse(value)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: column,\n sql: `${column}=${value}`,\n message: error.message\n });\n }\n }\n\n if (value instanceof Date) {\n return `'${value.toISOString()}'`;\n }\n\n if (typeof value === \"string\") {\n return `'${value.replace(/'/g, \"''\")}'`;\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"TRUE\" : \"FALSE\";\n }\n\n if (value === null) {\n return \"NULL\";\n }\n\n return value;\n }\n\n}\n\nexport default BuildWhereArgs;\n"],"names":[],"mappings":"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"}
package/model/index.cjs CHANGED
@@ -135,8 +135,12 @@ class Model {
135
135
  }
136
136
  }
137
137
  async findOne(args) {
138
+ var _a;
138
139
  try {
139
- const results = await this.find(args);
140
+ const results = await this.find(Object.assign(Object.assign({}, args), { limit: {
141
+ take: 1,
142
+ skip: ((_a = args === null || args === void 0 ? void 0 : args.limit) === null || _a === void 0 ? void 0 : _a.skip) || 0
143
+ } }));
140
144
  if (results === null || results === void 0 ? void 0 : results.length) {
141
145
  return results[0];
142
146
  }
@@ -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, AggregateResult, CreateArgs, CreateResult, DeleteArgs, DeleteResult, ExactArgs, FindArgs, FindResult, ModelClass, PaginateArgs, SchemaShape, UpdateArgs, UpdateResult, UpsertArgs, UpsertResult, 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\";\nimport { AliasGenerate } from \"./AliasGenerate\";\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 this.alias = (new AliasGenerate(xansql, this)).generate();\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 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: any = 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>>): Promise<AggregateResult<T, S>[] | null> {\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<CreateResult<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>>): Promise<UpdateResult<T, S>[] | null> {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpdateArgs(args as any, this)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results as any\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>>): Promise<UpsertResult<T, S>[] | null> {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpsertArgs(args as any, 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>>): Promise<DeleteResult<T, S>[] | null> {\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 as any\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 any, args.debug)\n return {\n total,\n page,\n perpage,\n pages: Math.ceil(total / perpage),\n results,\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","AliasGenerate","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, AggregateResult, CreateArgs, CreateResult, DeleteArgs, DeleteResult, ExactArgs, FindArgs, FindOneArgs, FindResult, ModelClass, PaginateArgs, SchemaShape, UpdateArgs, UpdateResult, UpsertArgs, UpsertResult, 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\";\nimport { AliasGenerate } from \"./AliasGenerate\";\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 this.alias = (new AliasGenerate(xansql, this)).generate();\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 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, FindOneArgs<S>>): Promise<FindResult<T, S> | null> {\n try {\n const results: any = await this.find({\n ...args,\n limit: {\n take: 1,\n skip: args?.limit?.skip || 0\n }\n })\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>>): Promise<AggregateResult<T, S>[] | null> {\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<CreateResult<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>>): Promise<UpdateResult<T, S>[] | null> {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpdateArgs(args as any, this)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results as any\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>>): Promise<UpsertResult<T, S>[] | null> {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpsertArgs(args as any, 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>>): Promise<DeleteResult<T, S>[] | null> {\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 as any\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 any, args.debug)\n return {\n total,\n page,\n perpage,\n pages: Math.ceil(total / perpage),\n results,\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","AliasGenerate","BuildFindArgs","BuildAggregateArgs","BuildCreateArgs","BuildUpdateArgs","BuildUpsertArgs","BuildDeleteArgs"],"mappings":"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"}
package/model/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { SchemaShape, WhereArgs, FindArgs, ExactArgs, FindResult, AggregateArgs, AggregateResult, CreateArgs, CreateResult, UpdateArgs, UpdateResult, UpsertArgs, UpsertResult, DeleteArgs, DeleteResult, PaginateArgs, Normalize, FindResultFullSchema } from './types.js';
1
+ import { SchemaShape, WhereArgs, FindArgs, ExactArgs, FindResult, FindOneArgs, AggregateArgs, AggregateResult, CreateArgs, CreateResult, UpdateArgs, UpdateResult, UpsertArgs, UpsertResult, DeleteArgs, DeleteResult, PaginateArgs, Normalize, FindResultFullSchema } from './types.js';
2
2
  import { ExecuterResult } from '../core/types.js';
3
3
  import Xansql from '../core/Xansql.js';
4
4
  import ModelWhere from './ModelWhere.js';
@@ -13,7 +13,7 @@ declare abstract class Model<S extends SchemaShape = SchemaShape> {
13
13
  where(inColumn: string, where?: WhereArgs<S>): ModelWhere<S>;
14
14
  execute(sql: string, debug?: boolean): Promise<ExecuterResult>;
15
15
  find<T extends FindArgs<S>>(args: ExactArgs<T, FindArgs<S>>): Promise<FindResult<T, S>[] | null>;
16
- findOne<T extends FindArgs<S>>(args: ExactArgs<T, FindArgs<S>>): Promise<FindResult<T, S> | null>;
16
+ findOne<T extends FindArgs<S>>(args: ExactArgs<T, FindOneArgs<S>>): Promise<FindResult<T, S> | null>;
17
17
  aggregate<T extends AggregateArgs<S, any>>(args: ExactArgs<T, AggregateArgs<S, T>>): Promise<AggregateResult<T, S>[] | null>;
18
18
  create<T extends CreateArgs<S>>(args: ExactArgs<T, CreateArgs<S>>): Promise<CreateResult<T, S>[] | null>;
19
19
  update<T extends UpdateArgs<S>>(args: ExactArgs<T, UpdateArgs<S>>): Promise<UpdateResult<T, S>[] | null>;
package/model/index.js CHANGED
@@ -133,8 +133,12 @@ class Model {
133
133
  }
134
134
  }
135
135
  async findOne(args) {
136
+ var _a;
136
137
  try {
137
- const results = await this.find(args);
138
+ const results = await this.find(Object.assign(Object.assign({}, args), { limit: {
139
+ take: 1,
140
+ skip: ((_a = args === null || args === void 0 ? void 0 : args.limit) === null || _a === void 0 ? void 0 : _a.skip) || 0
141
+ } }));
138
142
  if (results === null || results === void 0 ? void 0 : results.length) {
139
143
  return results[0];
140
144
  }
@@ -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, AggregateResult, CreateArgs, CreateResult, DeleteArgs, DeleteResult, ExactArgs, FindArgs, FindResult, ModelClass, PaginateArgs, SchemaShape, UpdateArgs, UpdateResult, UpsertArgs, UpsertResult, 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\";\nimport { AliasGenerate } from \"./AliasGenerate\";\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 this.alias = (new AliasGenerate(xansql, this)).generate();\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 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: any = 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>>): Promise<AggregateResult<T, S>[] | null> {\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<CreateResult<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>>): Promise<UpdateResult<T, S>[] | null> {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpdateArgs(args as any, this)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results as any\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>>): Promise<UpsertResult<T, S>[] | null> {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpsertArgs(args as any, 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>>): Promise<DeleteResult<T, S>[] | null> {\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 as any\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 any, args.debug)\n return {\n total,\n page,\n perpage,\n pages: Math.ceil(total / perpage),\n results,\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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"}
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, AggregateResult, CreateArgs, CreateResult, DeleteArgs, DeleteResult, ExactArgs, FindArgs, FindOneArgs, FindResult, ModelClass, PaginateArgs, SchemaShape, UpdateArgs, UpdateResult, UpsertArgs, UpsertResult, 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\";\nimport { AliasGenerate } from \"./AliasGenerate\";\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 this.alias = (new AliasGenerate(xansql, this)).generate();\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 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, FindOneArgs<S>>): Promise<FindResult<T, S> | null> {\n try {\n const results: any = await this.find({\n ...args,\n limit: {\n take: 1,\n skip: args?.limit?.skip || 0\n }\n })\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>>): Promise<AggregateResult<T, S>[] | null> {\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<CreateResult<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>>): Promise<UpdateResult<T, S>[] | null> {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpdateArgs(args as any, this)\n const results = await build.results()\n useTransection && await this.xansql.XansqlTransaction.commit()\n return results as any\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>>): Promise<UpsertResult<T, S>[] | null> {\n const useTransection = args.useTransection ?? true\n try {\n useTransection && await this.xansql.XansqlTransaction.begin()\n const build = new BuildUpsertArgs(args as any, 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>>): Promise<DeleteResult<T, S>[] | null> {\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 as any\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 any, args.debug)\n return {\n total,\n page,\n perpage,\n pages: Math.ceil(total / perpage),\n results,\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":";;;;;;;;;;;;;;;AAmBA,MAAe,KAAK,CAAA;AAMjB,IAAA,IAAI,KAAK,GAAA;AACN,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AACpD,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QAC9G,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG;AACtE,QAAA,OAAO,KAAK;IACf;AAEA,IAAA,WAAA,CAAY,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAE5B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,UAAU,CAAC,IAAI,EAAE;AAC9F,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,CAAA,8BAAA,EAAiC,IAAI,CAAC,KAAK,CAAA,yDAAA,CAA2D,CAAC;QAC1H;;QAGA,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAA8B,EAAE,IAAW,CAAC;AACnE,QAAA,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE;AACxB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;YAC5B,IAAI,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACjF,gBAAA,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;YAC5B;QACH;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE;QAEzD,IAAI,iBAAiB,GAAG,EAAE;QAC1B,IAAI,UAAU,GAAG,EAAE;AACnB,QAAA,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE;AACxB,YAAA,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACnC,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,IAAI,EAAE,mBAAmB;oBACzB,OAAO,EAAE,wBAAwB,MAAM,CAAA,YAAA,EAAe,IAAI,CAAC,KAAK,CAAA,IAAA,EAAO,MAAM,CAAA,wBAAA,CAA0B;oBACvG,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,oBAAA,KAAK,EAAE;AACT,iBAAA,CAAC;YACL;AAEA,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;;YAG5B,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBAC9B,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;AAC5B,oBAAA,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,+BAA+B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA;AACzE,iBAAA,CAAC;YACL;AAEA,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,YAAA,KAAK,CAAC,WAAW,GAAG,MAAM;YAC1B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM;YAEpC,IAAI,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE;AAC9C,gBAAA,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY;AACvC,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK;gBAC1B,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC7C,IAAI,CAAC,WAAW,EAAE;oBACf,MAAM,IAAI,KAAK,CAAC,CAAA,0BAAA,EAA6B,MAAM,CAAA,WAAA,EAAc,MAAM,CAAC,KAAK,CAAA,yEAAA,CAA2E,CAAC;gBAC5J;AACA,gBAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAyB;;AAG/D,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE;AACjC,oBAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE;AAClF,wBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,cAAA,EAAiB,YAAY,iBAAiB,MAAM,CAAA,WAAA,EAAc,MAAM,CAAC,KAAK,CAAA,4BAAA,EAA+B,WAAW,CAAC,KAAK,CAAA,uDAAA,CAAyD,CAAC;oBAC3M;gBACH;AAAO,qBAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE;AAMvC,gBAAA,IAAI,KAAK,CAAC,IAAI,IAAI,cAAc,EAAE;oBAC/B,KAAK,CAAC,YAAY,GAAG;AAClB,wBAAA,IAAI,EAAE;4BACH,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,MAAM,EAAE,MAAM;AAChB,yBAAA;AACD,wBAAA,MAAM,EAAE;4BACL,KAAK,EAAE,WAAW,CAAC,KAAK;4BACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;AAC9B,4BAAA,MAAM,EAAE,YAAY;AACtB,yBAAA;AACD,wBAAA,GAAG,EAAE,CAAA,EAAG,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,GAAA,EAAM,WAAW,CAAC,KAAK,CAAA,CAAA,EAAI,WAAW,CAAC,QAAQ,CAAA;qBAC7E;gBACJ;AAAO,qBAAA,IAAI,KAAK,CAAC,IAAI,IAAI,eAAe,EAAE;oBACvC,KAAK,CAAC,YAAY,GAAG;AAClB,wBAAA,IAAI,EAAE;4BACH,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,4BAAA,MAAM,EAAE,MAAM;AAChB,yBAAA;AACD,wBAAA,MAAM,EAAE;4BACL,KAAK,EAAE,WAAW,CAAC,KAAK;AACxB,4BAAA,QAAQ,EAAE,YAAY;AACtB,4BAAA,MAAM,EAAE,YAAY;AACtB,yBAAA;AACD,wBAAA,GAAG,EAAE,CAAA,EAAG,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,MAAM,WAAW,CAAC,KAAK,CAAA,CAAA,EAAI,YAAY,CAAA;qBAC5E;gBACJ;YACH;YAEA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE;AAC/B,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;gBACvB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACvC,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;oBACxB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;gBACzC;YACH;QACH;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;IAC1C;IAEA,KAAK,CAAC,QAAgB,EAAE,KAAoB,EAAA;QACzC,OAAO,IAAI,UAAU,CAAI,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC;IAClD;AAEA,IAAA,MAAM,OAAO,CAAC,GAAW,EAAE,KAAe,EAAA;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;IACzC;IAEA,MAAM,IAAI,CAAwB,IAA+B,EAAA;AAC9D,QAAA,IAAI;YACD,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,IAAW,EAAE,IAAI,CAAC;AAClD,YAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;AACrC,YAAA,OAAO,OAAc;QACxB;QAAE,OAAO,KAAK,EAAE;AACb,YAAA,MAAM,KAAK;QACd;IACH;IAEA,MAAM,OAAO,CAAwB,IAAkC,EAAA;;AACpE,QAAA,IAAI;YACD,MAAM,OAAO,GAAQ,MAAM,IAAI,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAC9B,IAAI,CAAA,EAAA,EACP,KAAK,EAAE;AACJ,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,IAAI,EAAE,CAAA,CAAA,EAAA,GAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,KAAI;AAC7B,iBAAA,EAAA,CAAA,CACF;YACF,IAAI,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,EAAE;AAClB,gBAAA,OAAO,OAAO,CAAC,CAAC,CAAC;YACpB;AACA,YAAA,OAAO,IAAI;QACd;QAAE,OAAO,KAAK,EAAE;AACb,YAAA,MAAM,KAAK;QACd;IACH;IAEA,MAAM,SAAS,CAAkC,IAAuC,EAAA;AACrF,QAAA,IAAI;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE;YAC3C,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,IAAW,EAAE,IAAI,CAAC;AACvD,YAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;YACrC,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE;AAC5C,YAAA,OAAO,OAAc;QACxB;QAAE,OAAO,KAAK,EAAE;YACb,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AAC9C,YAAA,MAAM,KAAK;QACd;IACH;IAEA,MAAM,MAAM,CAA0B,IAAiC,EAAA;;QACpE,MAAM,cAAc,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AAClD,QAAA,IAAI;YACD,cAAc,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE;YAC7D,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,IAAW,EAAE,IAAI,CAAC;AACpD,YAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,EAAS;YAC5C,cAAc,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE;AAC9D,YAAA,OAAO,OAAO;QACjB;QAAE,OAAO,KAAK,EAAE;YACb,cAAc,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AAChE,YAAA,MAAM,KAAK;QACd;IACH;IAEA,MAAM,MAAM,CAA0B,IAAiC,EAAA;;QACpE,MAAM,cAAc,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AAClD,QAAA,IAAI;YACD,cAAc,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE;YAC7D,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,IAAW,EAAE,IAAI,CAAC;AACpD,YAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;YACrC,cAAc,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE;AAC9D,YAAA,OAAO,OAAc;QACxB;QAAE,OAAO,KAAK,EAAE;YACb,cAAc,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AAChE,YAAA,MAAM,KAAK;QACd;IACH;IAEA,MAAM,MAAM,CAA0B,IAAiC,EAAA;;QACpE,MAAM,cAAc,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AAClD,QAAA,IAAI;YACD,cAAc,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE;YAC7D,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,IAAW,EAAE,IAAI,CAAC;AACpD,YAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;YACrC,cAAc,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE;AAC9D,YAAA,OAAO,OAAO;QACjB;QAAE,OAAO,KAAK,EAAE;YACb,cAAc,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AAChE,YAAA,MAAM,KAAK;QACd;IACH;IAEA,MAAM,MAAM,CAA0B,IAAiC,EAAA;;QACpE,MAAM,cAAc,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AAClD,QAAA,IAAI;YACD,cAAc,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE;YAC7D,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,IAAW,EAAE,IAAW,CAAC;AAC3D,YAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;YACrC,cAAc,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE;AAC9D,YAAA,OAAO,OAAc;QACxB;QAAE,OAAO,KAAK,EAAE;YACb,cAAc,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AAChE,YAAA,MAAM,KAAK;QACd;IACH;;IAGA,MAAM,QAAQ,CAAC,IAAqB,EAAA;AACjC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,QAAA,MAAM,OAAO,GAAG,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAE,OAAO,KAAI,EAAE;QACnC,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO;QACjC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACzB,IAAW,CAAA,EAAA,EACd,KAAK,EAAE;AACJ,gBAAA,IAAI,EAAE,OAAO;gBACb;AACF,aAAA,EAAA,CAAA,CACF;QACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KAAI,EAAS,EAAE,IAAI,CAAC,KAAK,CAAC;QACpE,OAAO;YACJ,KAAK;YACL,IAAI;YACJ,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACjC,OAAO;SACT;IACJ;AAEA,IAAA,MAAM,MAAM,CAAC,KAAmB,EAAE,KAAe,EAAA;AAC9C,QAAA,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC5C;;AAGA,IAAA,MAAM,KAAK,CAAC,KAAmB,EAAE,KAAe,EAAA;AAC7C,QAAA,MAAM,GAAG,GAAQ,MAAM,IAAI,CAAC,SAAS,CAAC;YACnC,KAAK;AACL,YAAA,MAAM,EAAE;AACL,gBAAA,CAAC,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA,KAAK,EAAE;AACT;AACI,aAAA;YACR;AACF,SAAA,CAAC;QACF,OAAO,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,MAAM,IAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,MAAA,EAAS,IAAI,CAAC,QAAQ,CAAA,CAAE,CAAC,GAAG,CAAC;IAC5D;AAEA,IAAA,MAAM,GAAG,CAAC,MAAc,EAAE,KAAmB,EAAE,KAAe,EAAA;QAC3D,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,CAAA,QAAA,EAAW,MAAM,8BAA8B,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;gBACrE,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,KAAK,EAAE;AACT,aAAA,CAAC;QACL;AACA,QAAA,MAAM,GAAG,GAAQ,MAAM,IAAI,CAAC,SAAS,CAAC;YACnC,KAAK;AACL,YAAA,MAAM,EAAE;gBACL,CAAC,MAAM,GAAG;AACP,oBAAA,GAAG,EAAE;AACP;AACI,aAAA;YACR;AACF,SAAA,CAAC;QACF,OAAO,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,MAAM,IAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAC,GAAG,CAAC;IACnD;AAEA,IAAA,MAAM,GAAG,CAAC,MAAc,EAAE,KAAmB,EAAE,KAAe,EAAA;QAC3D,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,CAAA,QAAA,EAAW,MAAM,8BAA8B,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;gBACrE,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,KAAK,EAAE;AACT,aAAA,CAAC;QACL;AACA,QAAA,MAAM,GAAG,GAAQ,MAAM,IAAI,CAAC,SAAS,CAAC;YACnC,KAAK;AACL,YAAA,MAAM,EAAE;gBACL,CAAC,MAAM,GAAG;AACP,oBAAA,GAAG,EAAE;AACP;AACI,aAAA;YACR;AACF,SAAA,CAAC;QACF,OAAO,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,MAAM,IAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAC,GAAG,CAAC;IACnD;AAEA,IAAA,MAAM,GAAG,CAAC,MAAc,EAAE,KAAmB,EAAE,KAAe,EAAA;QAC3D,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,CAAA,QAAA,EAAW,MAAM,8BAA8B,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;gBACrE,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,KAAK,EAAE;AACT,aAAA,CAAC;QACL;AACA,QAAA,MAAM,GAAG,GAAQ,MAAM,IAAI,CAAC,SAAS,CAAC;YACnC,KAAK;AACL,YAAA,MAAM,EAAE;gBACL,CAAC,MAAM,GAAG;AACP,oBAAA,GAAG,EAAE;AACP;AACI,aAAA;YACR;AACF,SAAA,CAAC;QACF,OAAO,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,MAAM,IAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAC,GAAG,CAAC;IACnD;AAEA,IAAA,MAAM,GAAG,CAAC,MAAc,EAAE,KAAmB,EAAE,KAAe,EAAA;QAC3D,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,CAAA,QAAA,EAAW,MAAM,8BAA8B,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;gBACrE,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,KAAK,EAAE;AACT,aAAA,CAAC;QACL;AACA,QAAA,MAAM,GAAG,GAAQ,MAAM,IAAI,CAAC,SAAS,CAAC;YACnC,KAAK;AACL,YAAA,MAAM,EAAE;gBACL,CAAC,MAAM,GAAG;AACP,oBAAA,GAAG,EAAE;AACP;AACI,aAAA;YACR;AACF,SAAA,CAAC;QACF,OAAO,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,MAAM,IAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAC,GAAG,CAAC;IACnD;AACF;;;;"}
package/model/types.d.ts CHANGED
@@ -80,9 +80,9 @@ type InferWhereValue<F extends XVType<any>> = F extends {
80
80
  } ? R : never;
81
81
  type WhereColumnArgs<F extends XqlField> = InferWhereValue<F> | WhereSubConditionArgs<F> | WhereSubConditionArgs<F>[];
82
82
  type WhereLogicalArgs<S extends SchemaShape> = {
83
- OR?: WhereObject<S>[];
84
- AND?: WhereObject<S>[];
85
- NOT?: WhereObject<S>[];
83
+ OR?: WhereObject<S> | WhereObject<S>[];
84
+ AND?: WhereObject<S> | WhereObject<S>[];
85
+ NOT?: WhereObject<S> | WhereObject<S>[];
86
86
  };
87
87
  type WhereObject<S extends SchemaShape> = Normalize<{
88
88
  [C in keyof S]?: S[C] extends {
@@ -135,14 +135,25 @@ type FindAggregateArgs<S extends SchemaShape> = Normalize<{
135
135
  } ? Normalize<AggregateSelectArgs<S[K]["schema"]>> : never;
136
136
  }>;
137
137
  type FindDistinctArgs<S extends SchemaShape> = (keyof SchemaAllColumns<S>)[];
138
- type FindArgs<S extends SchemaShape> = {
139
- distinct?: FindDistinctArgs<S>;
138
+ type FindArgs<S extends SchemaShape> = Normalize<{
139
+ distinct?: Normalize<FindDistinctArgs<S>>;
140
140
  where?: Normalize<WhereArgs<S>>;
141
- select?: SelectArgs<S>;
141
+ select?: Normalize<SelectArgs<S>>;
142
142
  limit?: LimitArgs;
143
143
  orderBy?: OrderByArgs<S>;
144
144
  aggregate?: FindAggregateArgs<S>;
145
145
  debug?: boolean;
146
+ }>;
147
+ type FindOneArgs<S extends SchemaShape> = {
148
+ distinct?: Normalize<FindDistinctArgs<S>>;
149
+ where?: Normalize<WhereArgs<S>>;
150
+ select?: SelectArgs<S>;
151
+ limit?: {
152
+ skip: number;
153
+ };
154
+ orderBy?: OrderByArgs<S>;
155
+ aggregate?: FindAggregateArgs<S>;
156
+ debug?: boolean;
146
157
  };
147
158
  type CreateDataValue<F extends XqlField> = F extends XqlRelationOne<any> ? (F extends {
148
159
  meta: {
@@ -274,4 +285,4 @@ type AggregateResult<T extends AggregateArgs<any, any>, S extends SchemaShape> =
274
285
  [RF in keyof T['select'] as keyof T['select'][RF] extends never ? never : `${keyof T['select'][RF] & string}_${RF & string}`]: number;
275
286
  }>;
276
287
 
277
- export type { AggregateArgs, AggregateArgsValue, AggregateFunctions, AggregateGroupByArgs, AggregateOrderBy, AggregateResult, AggregateResultGroupBy, AggregateSelectArgs, CreateArgs, CreateDataArgs, CreateDataValue, CreateResult, DeleteArgs, DeleteResult, ExactArgs, FindAggregateArgs, FindArgs, FindDistinctArgs, FindResult, FindResultColumnMap, FindResultFullSchema, FindResultMap, IsRelationField, IsRelationMany, IsRelationOne, LimitArgs, ModelClass, ModelHooks, ModelOptions, ModelRowObject, Normalize, OrderByArgs, PaginateArgs, SchemaAllColumns, SchemaShape, SelectArgs, UpdateArgs, UpdateDataArgs, UpdateDataValue, UpdateRelationArgs, UpdateResult, UpsertArgs, UpsertResult, WhereArgs, WhereSubConditionArgs };
288
+ export type { AggregateArgs, AggregateArgsValue, AggregateFunctions, AggregateGroupByArgs, AggregateOrderBy, AggregateResult, AggregateResultGroupBy, AggregateSelectArgs, CreateArgs, CreateDataArgs, CreateDataValue, CreateResult, DeleteArgs, DeleteResult, ExactArgs, FindAggregateArgs, FindArgs, FindDistinctArgs, FindOneArgs, FindResult, FindResultColumnMap, FindResultFullSchema, FindResultMap, IsRelationField, IsRelationMany, IsRelationOne, LimitArgs, ModelClass, ModelHooks, ModelOptions, ModelRowObject, Normalize, OrderByArgs, PaginateArgs, SchemaAllColumns, SchemaShape, SelectArgs, UpdateArgs, UpdateDataArgs, UpdateDataValue, UpdateRelationArgs, UpdateResult, UpsertArgs, UpsertResult, WhereArgs, WhereSubConditionArgs };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xansql",
3
- "version": "1.1.24",
3
+ "version": "1.1.26",
4
4
  "main": "./index.cjs",
5
5
  "module": "./index.js",
6
6
  "types": "./index.d.ts",