xansql 1.1.16 → 1.1.18

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.
@@ -1,4 +1,3 @@
1
- import { ResultData } from './types.js';
2
1
  import XqlDate from '../xt/fields/Date.js';
3
2
  import XqlRecord from '../xt/fields/Record.js';
4
3
  import XqlString from '../xt/fields/String.js';
@@ -32,7 +31,7 @@ declare class Migration {
32
31
  };
33
32
  }>;
34
33
  constructor(xansql: Xansql);
35
- migrate<M extends Model<any>>(model: M, force?: boolean): Promise<ResultData | undefined>;
34
+ migrate<M extends Model<any>>(model: M, force?: boolean): Promise<any>;
36
35
  get(model: Model): Promise<{
37
36
  id: number;
38
37
  model: string;
@@ -3,31 +3,50 @@
3
3
  class XansqlTransaction {
4
4
  constructor(xansql) {
5
5
  this.active = false;
6
- this.commitTimer = null;
7
6
  this.xansql = xansql;
8
7
  }
8
+ /**
9
+ * Begin a transaction
10
+ */
9
11
  async begin() {
10
- clearTimeout(this.commitTimer);
11
- if (!this.active) {
12
- this.active = true;
13
- await this.xansql.execute("BEGIN", false);
14
- }
12
+ if (this.active)
13
+ return; // already active
14
+ await this.xansql.execute("BEGIN");
15
+ this.active = true;
15
16
  }
17
+ /**
18
+ * Commit the transaction immediately
19
+ */
16
20
  async commit() {
17
- this.commitTimer = setTimeout(async () => {
18
- if (!this.active)
19
- return;
20
- this.active = false;
21
- await this.xansql.execute("COMMIT", false);
22
- }, 0);
21
+ if (!this.active)
22
+ return;
23
+ await this.xansql.execute("COMMIT");
24
+ this.active = false;
23
25
  }
26
+ /**
27
+ * Rollback the transaction immediately
28
+ */
24
29
  async rollback() {
25
- this.commitTimer = setTimeout(async () => {
26
- if (!this.active)
27
- return;
28
- this.active = false;
29
- await this.xansql.execute("ROLLBACK", false);
30
- }, 0);
30
+ if (!this.active)
31
+ return;
32
+ await this.xansql.execute("ROLLBACK");
33
+ this.active = false;
34
+ }
35
+ /**
36
+ * Run a function inside the transaction safely
37
+ * Automatically commits or rolls back if there’s an error
38
+ */
39
+ async run(fn) {
40
+ await this.begin();
41
+ try {
42
+ const result = await fn();
43
+ await this.commit();
44
+ return result;
45
+ }
46
+ catch (err) {
47
+ await this.rollback();
48
+ throw err;
49
+ }
31
50
  }
32
51
  }
33
52
 
@@ -1 +1 @@
1
- {"version":3,"file":"XansqlTransaction.cjs","sources":["../../../src/core/classes/XansqlTransaction.ts"],"sourcesContent":["import Xansql from \"../Xansql\"\n\nclass XansqlTransaction {\n private xansql: Xansql\n private active = false\n private commitTimer: NodeJS.Timeout | null = null\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n }\n\n async begin() {\n clearTimeout(this.commitTimer!)\n if (!this.active) {\n this.active = true\n await this.xansql.execute(\"BEGIN\", false)\n }\n }\n\n async commit() {\n this.commitTimer = setTimeout(async () => {\n if (!this.active) return\n this.active = false\n await this.xansql.execute(\"COMMIT\", false)\n }, 0)\n }\n\n async rollback() {\n this.commitTimer = setTimeout(async () => {\n if (!this.active) return\n this.active = false\n await this.xansql.execute(\"ROLLBACK\", false)\n }, 0)\n }\n}\n\nexport default XansqlTransaction"],"names":[],"mappings":";;AAEA,MAAM,iBAAiB,CAAA;AAKpB,IAAA,WAAA,CAAY,MAAc,EAAA;QAHlB,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,WAAW,GAA0B,IAAI;AAG9C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AAEA,IAAA,MAAM,KAAK,GAAA;AACR,QAAA,YAAY,CAAC,IAAI,CAAC,WAAY,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;QAC5C;IACH;AAEA,IAAA,MAAM,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,YAAW;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE;AAClB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACnB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC7C,CAAC,EAAE,CAAC,CAAC;IACR;AAEA,IAAA,MAAM,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,YAAW;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE;AAClB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACnB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;QAC/C,CAAC,EAAE,CAAC,CAAC;IACR;AACF;;;;"}
1
+ {"version":3,"file":"XansqlTransaction.cjs","sources":["../../../src/core/classes/XansqlTransaction.ts"],"sourcesContent":["class XansqlTransaction {\n private active: boolean = false;\n private xansql: any; // your Xansql instance\n\n constructor(xansql: any) {\n this.xansql = xansql;\n }\n\n /**\n * Begin a transaction\n */\n async begin() {\n if (this.active) return; // already active\n await this.xansql.execute(\"BEGIN\");\n this.active = true;\n }\n\n /**\n * Commit the transaction immediately\n */\n async commit() {\n if (!this.active) return;\n await this.xansql.execute(\"COMMIT\");\n this.active = false;\n }\n\n /**\n * Rollback the transaction immediately\n */\n async rollback() {\n if (!this.active) return;\n await this.xansql.execute(\"ROLLBACK\");\n this.active = false;\n }\n\n /**\n * Run a function inside the transaction safely\n * Automatically commits or rolls back if there’s an error\n */\n async run<T>(fn: () => Promise<T>): Promise<T> {\n await this.begin();\n try {\n const result = await fn();\n await this.commit();\n return result;\n } catch (err) {\n await this.rollback();\n throw err;\n }\n }\n}\n\nexport default XansqlTransaction;"],"names":[],"mappings":";;AAAA,MAAM,iBAAiB,CAAA;AAIpB,IAAA,WAAA,CAAY,MAAW,EAAA;QAHf,IAAA,CAAA,MAAM,GAAY,KAAK;AAI5B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AAEA;;AAEG;AACH,IAAA,MAAM,KAAK,GAAA;QACR,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO;QACxB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;AAClC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACrB;AAEA;;AAEG;AACH,IAAA,MAAM,MAAM,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QAClB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACtB;AAEA;;AAEG;AACH,IAAA,MAAM,QAAQ,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QAClB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACtB;AAEA;;;AAGG;IACH,MAAM,GAAG,CAAI,EAAoB,EAAA;AAC9B,QAAA,MAAM,IAAI,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI;AACD,YAAA,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE;AACzB,YAAA,MAAM,IAAI,CAAC,MAAM,EAAE;AACnB,YAAA,OAAO,MAAM;QAChB;QAAE,OAAO,GAAG,EAAE;AACX,YAAA,MAAM,IAAI,CAAC,QAAQ,EAAE;AACrB,YAAA,MAAM,GAAG;QACZ;IACH;AACF;;;;"}
@@ -1,13 +1,24 @@
1
- import Xansql from '../Xansql.js';
2
-
3
1
  declare class XansqlTransaction {
4
- private xansql;
5
2
  private active;
6
- private commitTimer;
7
- constructor(xansql: Xansql);
3
+ private xansql;
4
+ constructor(xansql: any);
5
+ /**
6
+ * Begin a transaction
7
+ */
8
8
  begin(): Promise<void>;
9
+ /**
10
+ * Commit the transaction immediately
11
+ */
9
12
  commit(): Promise<void>;
13
+ /**
14
+ * Rollback the transaction immediately
15
+ */
10
16
  rollback(): Promise<void>;
17
+ /**
18
+ * Run a function inside the transaction safely
19
+ * Automatically commits or rolls back if there’s an error
20
+ */
21
+ run<T>(fn: () => Promise<T>): Promise<T>;
11
22
  }
12
23
 
13
24
  export { XansqlTransaction as default };
@@ -1,31 +1,50 @@
1
1
  class XansqlTransaction {
2
2
  constructor(xansql) {
3
3
  this.active = false;
4
- this.commitTimer = null;
5
4
  this.xansql = xansql;
6
5
  }
6
+ /**
7
+ * Begin a transaction
8
+ */
7
9
  async begin() {
8
- clearTimeout(this.commitTimer);
9
- if (!this.active) {
10
- this.active = true;
11
- await this.xansql.execute("BEGIN", false);
12
- }
10
+ if (this.active)
11
+ return; // already active
12
+ await this.xansql.execute("BEGIN");
13
+ this.active = true;
13
14
  }
15
+ /**
16
+ * Commit the transaction immediately
17
+ */
14
18
  async commit() {
15
- this.commitTimer = setTimeout(async () => {
16
- if (!this.active)
17
- return;
18
- this.active = false;
19
- await this.xansql.execute("COMMIT", false);
20
- }, 0);
19
+ if (!this.active)
20
+ return;
21
+ await this.xansql.execute("COMMIT");
22
+ this.active = false;
21
23
  }
24
+ /**
25
+ * Rollback the transaction immediately
26
+ */
22
27
  async rollback() {
23
- this.commitTimer = setTimeout(async () => {
24
- if (!this.active)
25
- return;
26
- this.active = false;
27
- await this.xansql.execute("ROLLBACK", false);
28
- }, 0);
28
+ if (!this.active)
29
+ return;
30
+ await this.xansql.execute("ROLLBACK");
31
+ this.active = false;
32
+ }
33
+ /**
34
+ * Run a function inside the transaction safely
35
+ * Automatically commits or rolls back if there’s an error
36
+ */
37
+ async run(fn) {
38
+ await this.begin();
39
+ try {
40
+ const result = await fn();
41
+ await this.commit();
42
+ return result;
43
+ }
44
+ catch (err) {
45
+ await this.rollback();
46
+ throw err;
47
+ }
29
48
  }
30
49
  }
31
50
 
@@ -1 +1 @@
1
- {"version":3,"file":"XansqlTransaction.js","sources":["../../../src/core/classes/XansqlTransaction.ts"],"sourcesContent":["import Xansql from \"../Xansql\"\n\nclass XansqlTransaction {\n private xansql: Xansql\n private active = false\n private commitTimer: NodeJS.Timeout | null = null\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n }\n\n async begin() {\n clearTimeout(this.commitTimer!)\n if (!this.active) {\n this.active = true\n await this.xansql.execute(\"BEGIN\", false)\n }\n }\n\n async commit() {\n this.commitTimer = setTimeout(async () => {\n if (!this.active) return\n this.active = false\n await this.xansql.execute(\"COMMIT\", false)\n }, 0)\n }\n\n async rollback() {\n this.commitTimer = setTimeout(async () => {\n if (!this.active) return\n this.active = false\n await this.xansql.execute(\"ROLLBACK\", false)\n }, 0)\n }\n}\n\nexport default XansqlTransaction"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,CAAA;AAKpB,IAAA,WAAA,CAAY,MAAc,EAAA;QAHlB,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,WAAW,GAA0B,IAAI;AAG9C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AAEA,IAAA,MAAM,KAAK,GAAA;AACR,QAAA,YAAY,CAAC,IAAI,CAAC,WAAY,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;QAC5C;IACH;AAEA,IAAA,MAAM,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,YAAW;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE;AAClB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACnB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC7C,CAAC,EAAE,CAAC,CAAC;IACR;AAEA,IAAA,MAAM,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,YAAW;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE;AAClB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACnB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;QAC/C,CAAC,EAAE,CAAC,CAAC;IACR;AACF;;;;"}
1
+ {"version":3,"file":"XansqlTransaction.js","sources":["../../../src/core/classes/XansqlTransaction.ts"],"sourcesContent":["class XansqlTransaction {\n private active: boolean = false;\n private xansql: any; // your Xansql instance\n\n constructor(xansql: any) {\n this.xansql = xansql;\n }\n\n /**\n * Begin a transaction\n */\n async begin() {\n if (this.active) return; // already active\n await this.xansql.execute(\"BEGIN\");\n this.active = true;\n }\n\n /**\n * Commit the transaction immediately\n */\n async commit() {\n if (!this.active) return;\n await this.xansql.execute(\"COMMIT\");\n this.active = false;\n }\n\n /**\n * Rollback the transaction immediately\n */\n async rollback() {\n if (!this.active) return;\n await this.xansql.execute(\"ROLLBACK\");\n this.active = false;\n }\n\n /**\n * Run a function inside the transaction safely\n * Automatically commits or rolls back if there’s an error\n */\n async run<T>(fn: () => Promise<T>): Promise<T> {\n await this.begin();\n try {\n const result = await fn();\n await this.commit();\n return result;\n } catch (err) {\n await this.rollback();\n throw err;\n }\n }\n}\n\nexport default XansqlTransaction;"],"names":[],"mappings":"AAAA,MAAM,iBAAiB,CAAA;AAIpB,IAAA,WAAA,CAAY,MAAW,EAAA;QAHf,IAAA,CAAA,MAAM,GAAY,KAAK;AAI5B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AAEA;;AAEG;AACH,IAAA,MAAM,KAAK,GAAA;QACR,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO;QACxB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;AAClC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACrB;AAEA;;AAEG;AACH,IAAA,MAAM,MAAM,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QAClB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACtB;AAEA;;AAEG;AACH,IAAA,MAAM,QAAQ,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QAClB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACtB;AAEA;;;AAGG;IACH,MAAM,GAAG,CAAI,EAAoB,EAAA;AAC9B,QAAA,MAAM,IAAI,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI;AACD,YAAA,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE;AACzB,YAAA,MAAM,IAAI,CAAC,MAAM,EAAE;AACnB,YAAA,OAAO,MAAM;QAChB;QAAE,OAAO,GAAG,EAAE;AACX,YAAA,MAAM,IAAI,CAAC,QAAQ,EAAE;AACrB,YAAA,MAAM,GAAG;QACZ;IACH;AACF;;;;"}
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  var XansqlError = require('../../../core/XansqlError.cjs');
4
- var index = require('../../../utils/index.cjs');
4
+ var index$1 = require('../../../utils/index.cjs');
5
5
  var Date$1 = require('../../../xt/fields/Date.cjs');
6
6
  var File$1 = require('../../../xt/fields/File.cjs');
7
7
  var IDField = require('../../../xt/fields/IDField.cjs');
8
- var index$1 = require('../FindArgs/index.cjs');
8
+ var index = require('../FindArgs/index.cjs');
9
9
 
10
10
  class BuildCreateArgs {
11
11
  constructor(args, model, isSubquery = false) {
@@ -31,9 +31,24 @@ class BuildCreateArgs {
31
31
  const schema = model.schema();
32
32
  const data = args.data;
33
33
  if (Array.isArray(data)) {
34
+ const insertIds = [];
34
35
  for (let d of data) {
35
- const build = new BuildCreateArgs({ data: d }, model, isSubquery);
36
- await build.results();
36
+ const build = new BuildCreateArgs({ data: d }, model, true);
37
+ const id = await build.results();
38
+ insertIds.push(id);
39
+ }
40
+ if (!isSubquery) {
41
+ let sargs = !args.select ? this.makeSelectArgs(data, model) : args.select;
42
+ const buildFind = new index({
43
+ select: sargs,
44
+ where: {
45
+ [model.IDColumn]: {
46
+ in: insertIds
47
+ }
48
+ },
49
+ debug: args.debug
50
+ }, model);
51
+ return await buildFind.results();
37
52
  }
38
53
  }
39
54
  else {
@@ -43,26 +58,26 @@ class BuildCreateArgs {
43
58
  // set create and update
44
59
  for (let col in schema) {
45
60
  const field = schema[col];
46
- if (index.iof(field, IDField)) {
61
+ if (index$1.iof(field, IDField)) {
47
62
  continue;
48
63
  }
49
- if (index.iof(field, Date$1) && (field.meta.createdAt || field.meta.updatedAt)) {
64
+ if (index$1.iof(field, Date$1) && (field.meta.createdAt || field.meta.updatedAt)) {
50
65
  const v = field.value.toSql(new Date());
51
- values[index.quote(xansql.dialect.engine, col)] = v;
66
+ values[index$1.quote(xansql.dialect.engine, col)] = v;
52
67
  continue;
53
68
  }
54
69
  if (col in data) {
55
70
  const value = data[col];
56
71
  if (field.isRelation) {
57
72
  if (field.type === "relation-one") {
58
- values[index.quote(xansql.dialect.engine, col)] = value;
73
+ values[index$1.quote(xansql.dialect.engine, col)] = value;
59
74
  }
60
75
  else {
61
76
  relations[col] = value;
62
77
  }
63
78
  }
64
79
  else {
65
- if (index.iof(field, File$1) && index.iof(value, File)) {
80
+ if (index$1.iof(field, File$1) && index$1.iof(value, File)) {
66
81
  try {
67
82
  const filemeta = await xansql.uploadFile(value);
68
83
  if (!filemeta) {
@@ -75,7 +90,7 @@ class BuildCreateArgs {
75
90
  }
76
91
  ;
77
92
  fileMetas[col] = filemeta;
78
- values[index.quote(xansql.dialect.engine, col)] = `'${JSON.stringify(filemeta)}'`;
93
+ values[index$1.quote(xansql.dialect.engine, col)] = `'${JSON.stringify(filemeta)}'`;
79
94
  }
80
95
  catch (error) {
81
96
  throw error;
@@ -83,7 +98,7 @@ class BuildCreateArgs {
83
98
  }
84
99
  else {
85
100
  try {
86
- values[index.quote(xansql.dialect.engine, col)] = field.value.toSql(value);
101
+ values[index$1.quote(xansql.dialect.engine, col)] = field.value.toSql(value);
87
102
  }
88
103
  catch (error) {
89
104
  throw new XansqlError.XansqlError({
@@ -109,7 +124,7 @@ class BuildCreateArgs {
109
124
  }
110
125
  else {
111
126
  try {
112
- values[index.quote(xansql.dialect.engine, col)] = field.value.toSql(undefined);
127
+ values[index$1.quote(xansql.dialect.engine, col)] = field.value.toSql(undefined);
113
128
  }
114
129
  catch (error) {
115
130
  throw new XansqlError.XansqlError({
@@ -161,7 +176,7 @@ class BuildCreateArgs {
161
176
  }
162
177
  if (!isSubquery && insertId) {
163
178
  let sargs = !args.select ? this.makeSelectArgs(data, model) : args.select;
164
- const buildFind = new index$1({
179
+ const buildFind = new index({
165
180
  select: sargs,
166
181
  where: {
167
182
  [model.IDColumn]: insertId
@@ -170,6 +185,7 @@ class BuildCreateArgs {
170
185
  }, model);
171
186
  return await buildFind.results();
172
187
  }
188
+ return insertId;
173
189
  }
174
190
  }
175
191
  makeSelectArgs(data, model) {
@@ -179,7 +195,7 @@ class BuildCreateArgs {
179
195
  if (Array.isArray(data)) {
180
196
  for (let d of data) {
181
197
  const a = this.makeSelectArgs(d, model);
182
- args = index.deepMerge(args, a);
198
+ args = index$1.deepMerge(args, a);
183
199
  }
184
200
  }
185
201
  else {
@@ -204,7 +220,7 @@ class BuildCreateArgs {
204
220
  validateData(data) {
205
221
  const model = this.model;
206
222
  const schema = model.schema();
207
- if (!index.isObject(data)) {
223
+ if (!index$1.isObject(data)) {
208
224
  throw new XansqlError.XansqlError({
209
225
  code: "VALIDATION_ERROR",
210
226
  message: `Expected "data" to be an object, received ${typeof data}`,
@@ -234,7 +250,7 @@ class BuildCreateArgs {
234
250
  });
235
251
  }
236
252
  }
237
- if (field.type === "relation-one" && !index.isNumber(value)) {
253
+ if (field.type === "relation-one" && !index$1.isNumber(value)) {
238
254
  throw new XansqlError.XansqlError({
239
255
  code: "VALIDATION_ERROR",
240
256
  message: `Invalid value for foreign key "${col}" in table "${model.table}". Expected a number, got ${typeof value}.`,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/model/Build/CreateArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { XansqlFileMeta } from \"../../../core/types\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { deepMerge, iof, isNumber, isObject, quote } from \"../../../utils\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport { CreateArgs, SchemaShape, SelectArgs } from \"../../types\";\nimport BuildFindArgs from \"../FindArgs\";\n\nclass BuildCreateArgs {\n private isSubquery\n constructor(private args: CreateArgs<SchemaShape>, private model: Model<any>, isSubquery = false) {\n this.isSubquery = isSubquery\n const data = args.data\n if (Array.isArray(data)) {\n for (let d of data) {\n this.validateData(d)\n }\n } else {\n this.validateData(data)\n }\n }\n\n async results() {\n const model = this.model\n const xansql = this.model.xansql\n const args = this.args\n const isSubquery = this.isSubquery\n const schema = model.schema()\n const data = args.data\n\n if (Array.isArray(data)) {\n for (let d of data) {\n const build = new BuildCreateArgs({ data: d }, model, isSubquery)\n await build.results()\n }\n } else {\n const values: { [col: string]: any } = {}\n const relations: { [col: string]: CreateArgs<any>['data'] } = {}\n const fileMetas: { [col: string]: XansqlFileMeta } = {}\n\n // set create and update\n for (let col in schema) {\n const field = schema[col]\n\n if (iof(field, XqlIDField)) {\n continue\n }\n if (iof(field, XqlDate) && (field.meta.createdAt || field.meta.updatedAt)) {\n const v = field.value.toSql(new Date())\n values[quote(xansql.dialect.engine, col)] = v\n continue\n }\n\n if (col in data) {\n const value = data[col]\n if (field.isRelation) {\n if (field.type === \"relation-one\") {\n values[quote(xansql.dialect.engine, col)] = value\n } else {\n relations[col] = value\n }\n } else {\n if (iof(field, XqlFile) && iof(value, File)) {\n try {\n const filemeta = await xansql.uploadFile(value);\n if (!filemeta) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Failed to upload file for field \"${col}\" in table \"${model.table}\".`,\n model: model.table,\n field: col\n })\n };\n (fileMetas as any)[col] = filemeta\n values[quote(xansql.dialect.engine, col)] = `'${JSON.stringify(filemeta)}'`\n } catch (error: any) {\n throw error\n }\n } else {\n try {\n values[quote(xansql.dialect.engine, col)] = field.value.toSql(value)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n }\n }\n } else {\n if (field.isRelation) {\n if (field.type === \"relation-one\" && !field.meta.nullable) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Field \"${col}\" in table \"${model.table}\" is a non-nullable relation-one field and cannot be left empty.`,\n model: model.table,\n field: col,\n });\n }\n } else {\n try {\n values[quote(xansql.dialect.engine, col)] = field.value.toSql(undefined)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n }\n }\n }\n\n let insertId\n try {\n const engine = xansql.dialect.engine\n let sql = `INSERT INTO ${model.table} (${Object.keys(values).join(', ')}) VALUES (${Object.values(values).join(\", \")})`\n if (engine === \"postgres\") sql += ` RETURNING ${model.IDColumn}`\n sql = sql.replace(/\\s+/gi, \" \")\n const results = await model.execute(sql, args.debug)\n insertId = results?.insertId\n if (results.results?.length && engine === \"postgres\") {\n insertId = results.results[0][model.IDColumn]\n }\n } catch (error) {\n for (let col in fileMetas) {\n await xansql.deleteFile(fileMetas[col].fileId)\n }\n throw error\n }\n\n if (insertId && Object.keys(relations).length) {\n for (let col in relations) {\n const rdata = relations[col]\n const field = schema[col]\n const rinfo = field.relationInfo\n const RModel = xansql.model(field.model)\n if (Array.isArray(rdata)) {\n for (let d of rdata) {\n d[rinfo.target.relation] = insertId\n }\n } else {\n rdata[rinfo.target.relation] = insertId\n }\n\n const build = new BuildCreateArgs({ data: rdata, debug: args.debug }, RModel, true)\n await build.results()\n }\n }\n\n if (!isSubquery && insertId) {\n let sargs: SelectArgs = !args.select ? this.makeSelectArgs(data, model) : args.select\n const buildFind = new BuildFindArgs({\n select: sargs,\n where: {\n [model.IDColumn]: insertId\n },\n debug: args.debug\n }, model)\n return await buildFind.results()\n }\n }\n }\n\n private makeSelectArgs(data: CreateArgs<any>['data'], model: Model<any>) {\n let args: any = {}\n const schema = model.schema()\n const xansql = model.xansql\n\n if (Array.isArray(data)) {\n for (let d of data) {\n const a = this.makeSelectArgs(d, model)\n args = deepMerge(args, a)\n }\n } else {\n for (let col in data) {\n const field = schema[col] as any\n if (field.type === \"relation-many\") {\n const RModel = xansql.model(field.model)\n const childargs = this.makeSelectArgs(data[col] as any, RModel)\n if (Object.keys(childargs).length) {\n args[col] = {\n select: childargs\n }\n } else {\n args[col] = true\n }\n }\n }\n }\n\n return args\n }\n\n private validateData(data: any) {\n const model = this.model\n const schema = model.schema()\n\n if (!isObject(data)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Expected \"data\" to be an object, received ${typeof data}`,\n model: model.table,\n params: data\n })\n }\n\n // check if idColumn exists\n if (model.IDColumn in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `You cannot set a value for the primary key \"${model.IDColumn}\" in table \"${model.table}\".`,\n model: model.table,\n field: model.IDColumn,\n })\n }\n\n for (let col in data) {\n const value = data[col]\n const field = schema[col]\n\n if (field.meta.create || field.meta.update) {\n if (col in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Cannot set a value for \"${col}\" in table \"${model.table}\" — this field is automatically managed.`,\n model: model.table,\n field: col,\n })\n }\n }\n\n if (field.type === \"relation-one\" && !isNumber(value)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for foreign key \"${col}\" in table \"${model.table}\". Expected a number, got ${typeof value}.`,\n model: model.table,\n field: col,\n })\n }\n\n }\n }\n}\n\nexport default BuildCreateArgs"],"names":["iof","XqlIDField","XqlDate","quote","XqlFile","XansqlError","BuildFindArgs","deepMerge","isObject","isNumber"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/model/Build/CreateArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { XansqlFileMeta } from \"../../../core/types\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { deepMerge, iof, isNumber, isObject, quote } from \"../../../utils\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport { CreateArgs, SchemaShape, SelectArgs } from \"../../types\";\nimport BuildFindArgs from \"../FindArgs\";\n\nclass BuildCreateArgs {\n private isSubquery\n constructor(private args: CreateArgs<SchemaShape>, private model: Model<any>, isSubquery = false) {\n this.isSubquery = isSubquery\n const data = args.data\n if (Array.isArray(data)) {\n for (let d of data) {\n this.validateData(d)\n }\n } else {\n this.validateData(data)\n }\n }\n\n async results() {\n const model = this.model\n const xansql = this.model.xansql\n const args = this.args\n const isSubquery = this.isSubquery\n const schema = model.schema()\n const data = args.data\n\n if (Array.isArray(data)) {\n const insertIds: number[] = []\n for (let d of data) {\n const build = new BuildCreateArgs({ data: d }, model, true)\n const id = await build.results()\n insertIds.push(id)\n }\n\n if (!isSubquery) {\n let sargs: SelectArgs = !args.select ? this.makeSelectArgs(data, model) : args.select\n const buildFind = new BuildFindArgs({\n select: sargs,\n where: {\n [model.IDColumn]: {\n in: insertIds\n }\n },\n debug: args.debug\n }, model)\n return await buildFind.results()\n }\n } else {\n const values: { [col: string]: any } = {}\n const relations: { [col: string]: CreateArgs<any>['data'] } = {}\n const fileMetas: { [col: string]: XansqlFileMeta } = {}\n\n // set create and update\n for (let col in schema) {\n const field = schema[col]\n\n if (iof(field, XqlIDField)) {\n continue\n }\n if (iof(field, XqlDate) && (field.meta.createdAt || field.meta.updatedAt)) {\n const v = field.value.toSql(new Date())\n values[quote(xansql.dialect.engine, col)] = v\n continue\n }\n\n if (col in data) {\n const value = data[col]\n if (field.isRelation) {\n if (field.type === \"relation-one\") {\n values[quote(xansql.dialect.engine, col)] = value\n } else {\n relations[col] = value\n }\n } else {\n if (iof(field, XqlFile) && iof(value, File)) {\n try {\n const filemeta = await xansql.uploadFile(value);\n if (!filemeta) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Failed to upload file for field \"${col}\" in table \"${model.table}\".`,\n model: model.table,\n field: col\n })\n };\n (fileMetas as any)[col] = filemeta\n values[quote(xansql.dialect.engine, col)] = `'${JSON.stringify(filemeta)}'`\n } catch (error: any) {\n throw error\n }\n } else {\n try {\n values[quote(xansql.dialect.engine, col)] = field.value.toSql(value)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n }\n }\n } else {\n if (field.isRelation) {\n if (field.type === \"relation-one\" && !field.meta.nullable) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Field \"${col}\" in table \"${model.table}\" is a non-nullable relation-one field and cannot be left empty.`,\n model: model.table,\n field: col,\n });\n }\n } else {\n try {\n values[quote(xansql.dialect.engine, col)] = field.value.toSql(undefined)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n }\n }\n }\n\n let insertId\n try {\n const engine = xansql.dialect.engine\n let sql = `INSERT INTO ${model.table} (${Object.keys(values).join(', ')}) VALUES (${Object.values(values).join(\", \")})`\n if (engine === \"postgres\") sql += ` RETURNING ${model.IDColumn}`\n sql = sql.replace(/\\s+/gi, \" \")\n const results = await model.execute(sql, args.debug)\n insertId = results?.insertId\n if (results.results?.length && engine === \"postgres\") {\n insertId = results.results[0][model.IDColumn]\n }\n } catch (error) {\n for (let col in fileMetas) {\n await xansql.deleteFile(fileMetas[col].fileId)\n }\n throw error\n }\n\n if (insertId && Object.keys(relations).length) {\n for (let col in relations) {\n const rdata = relations[col]\n const field = schema[col]\n const rinfo = field.relationInfo\n const RModel = xansql.model(field.model)\n if (Array.isArray(rdata)) {\n for (let d of rdata) {\n d[rinfo.target.relation] = insertId\n }\n } else {\n rdata[rinfo.target.relation] = insertId\n }\n\n const build = new BuildCreateArgs({ data: rdata, debug: args.debug }, RModel, true)\n await build.results()\n }\n }\n\n if (!isSubquery && insertId) {\n let sargs: SelectArgs = !args.select ? this.makeSelectArgs(data, model) : args.select\n const buildFind = new BuildFindArgs({\n select: sargs,\n where: {\n [model.IDColumn]: insertId\n },\n debug: args.debug\n }, model)\n return await buildFind.results()\n }\n\n return insertId\n }\n }\n\n private makeSelectArgs(data: CreateArgs<any>['data'], model: Model<any>) {\n let args: any = {}\n const schema = model.schema()\n const xansql = model.xansql\n\n if (Array.isArray(data)) {\n for (let d of data) {\n const a = this.makeSelectArgs(d, model)\n args = deepMerge(args, a)\n }\n } else {\n for (let col in data) {\n const field = schema[col] as any\n if (field.type === \"relation-many\") {\n const RModel = xansql.model(field.model)\n const childargs = this.makeSelectArgs(data[col] as any, RModel)\n if (Object.keys(childargs).length) {\n args[col] = {\n select: childargs\n }\n } else {\n args[col] = true\n }\n }\n }\n }\n\n return args\n }\n\n private validateData(data: any) {\n const model = this.model\n const schema = model.schema()\n\n if (!isObject(data)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Expected \"data\" to be an object, received ${typeof data}`,\n model: model.table,\n params: data\n })\n }\n\n // check if idColumn exists\n if (model.IDColumn in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `You cannot set a value for the primary key \"${model.IDColumn}\" in table \"${model.table}\".`,\n model: model.table,\n field: model.IDColumn,\n })\n }\n\n for (let col in data) {\n const value = data[col]\n const field = schema[col]\n\n if (field.meta.create || field.meta.update) {\n if (col in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Cannot set a value for \"${col}\" in table \"${model.table}\" — this field is automatically managed.`,\n model: model.table,\n field: col,\n })\n }\n }\n\n if (field.type === \"relation-one\" && !isNumber(value)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for foreign key \"${col}\" in table \"${model.table}\". Expected a number, got ${typeof value}.`,\n model: model.table,\n field: col,\n })\n }\n\n }\n }\n}\n\nexport default BuildCreateArgs"],"names":["BuildFindArgs","iof","XqlIDField","XqlDate","quote","XqlFile","XansqlError","deepMerge","isObject","isNumber"],"mappings":"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"}
@@ -29,9 +29,24 @@ class BuildCreateArgs {
29
29
  const schema = model.schema();
30
30
  const data = args.data;
31
31
  if (Array.isArray(data)) {
32
+ const insertIds = [];
32
33
  for (let d of data) {
33
- const build = new BuildCreateArgs({ data: d }, model, isSubquery);
34
- await build.results();
34
+ const build = new BuildCreateArgs({ data: d }, model, true);
35
+ const id = await build.results();
36
+ insertIds.push(id);
37
+ }
38
+ if (!isSubquery) {
39
+ let sargs = !args.select ? this.makeSelectArgs(data, model) : args.select;
40
+ const buildFind = new BuildFindArgs({
41
+ select: sargs,
42
+ where: {
43
+ [model.IDColumn]: {
44
+ in: insertIds
45
+ }
46
+ },
47
+ debug: args.debug
48
+ }, model);
49
+ return await buildFind.results();
35
50
  }
36
51
  }
37
52
  else {
@@ -168,6 +183,7 @@ class BuildCreateArgs {
168
183
  }, model);
169
184
  return await buildFind.results();
170
185
  }
186
+ return insertId;
171
187
  }
172
188
  }
173
189
  makeSelectArgs(data, model) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/model/Build/CreateArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { XansqlFileMeta } from \"../../../core/types\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { deepMerge, iof, isNumber, isObject, quote } from \"../../../utils\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport { CreateArgs, SchemaShape, SelectArgs } from \"../../types\";\nimport BuildFindArgs from \"../FindArgs\";\n\nclass BuildCreateArgs {\n private isSubquery\n constructor(private args: CreateArgs<SchemaShape>, private model: Model<any>, isSubquery = false) {\n this.isSubquery = isSubquery\n const data = args.data\n if (Array.isArray(data)) {\n for (let d of data) {\n this.validateData(d)\n }\n } else {\n this.validateData(data)\n }\n }\n\n async results() {\n const model = this.model\n const xansql = this.model.xansql\n const args = this.args\n const isSubquery = this.isSubquery\n const schema = model.schema()\n const data = args.data\n\n if (Array.isArray(data)) {\n for (let d of data) {\n const build = new BuildCreateArgs({ data: d }, model, isSubquery)\n await build.results()\n }\n } else {\n const values: { [col: string]: any } = {}\n const relations: { [col: string]: CreateArgs<any>['data'] } = {}\n const fileMetas: { [col: string]: XansqlFileMeta } = {}\n\n // set create and update\n for (let col in schema) {\n const field = schema[col]\n\n if (iof(field, XqlIDField)) {\n continue\n }\n if (iof(field, XqlDate) && (field.meta.createdAt || field.meta.updatedAt)) {\n const v = field.value.toSql(new Date())\n values[quote(xansql.dialect.engine, col)] = v\n continue\n }\n\n if (col in data) {\n const value = data[col]\n if (field.isRelation) {\n if (field.type === \"relation-one\") {\n values[quote(xansql.dialect.engine, col)] = value\n } else {\n relations[col] = value\n }\n } else {\n if (iof(field, XqlFile) && iof(value, File)) {\n try {\n const filemeta = await xansql.uploadFile(value);\n if (!filemeta) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Failed to upload file for field \"${col}\" in table \"${model.table}\".`,\n model: model.table,\n field: col\n })\n };\n (fileMetas as any)[col] = filemeta\n values[quote(xansql.dialect.engine, col)] = `'${JSON.stringify(filemeta)}'`\n } catch (error: any) {\n throw error\n }\n } else {\n try {\n values[quote(xansql.dialect.engine, col)] = field.value.toSql(value)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n }\n }\n } else {\n if (field.isRelation) {\n if (field.type === \"relation-one\" && !field.meta.nullable) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Field \"${col}\" in table \"${model.table}\" is a non-nullable relation-one field and cannot be left empty.`,\n model: model.table,\n field: col,\n });\n }\n } else {\n try {\n values[quote(xansql.dialect.engine, col)] = field.value.toSql(undefined)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n }\n }\n }\n\n let insertId\n try {\n const engine = xansql.dialect.engine\n let sql = `INSERT INTO ${model.table} (${Object.keys(values).join(', ')}) VALUES (${Object.values(values).join(\", \")})`\n if (engine === \"postgres\") sql += ` RETURNING ${model.IDColumn}`\n sql = sql.replace(/\\s+/gi, \" \")\n const results = await model.execute(sql, args.debug)\n insertId = results?.insertId\n if (results.results?.length && engine === \"postgres\") {\n insertId = results.results[0][model.IDColumn]\n }\n } catch (error) {\n for (let col in fileMetas) {\n await xansql.deleteFile(fileMetas[col].fileId)\n }\n throw error\n }\n\n if (insertId && Object.keys(relations).length) {\n for (let col in relations) {\n const rdata = relations[col]\n const field = schema[col]\n const rinfo = field.relationInfo\n const RModel = xansql.model(field.model)\n if (Array.isArray(rdata)) {\n for (let d of rdata) {\n d[rinfo.target.relation] = insertId\n }\n } else {\n rdata[rinfo.target.relation] = insertId\n }\n\n const build = new BuildCreateArgs({ data: rdata, debug: args.debug }, RModel, true)\n await build.results()\n }\n }\n\n if (!isSubquery && insertId) {\n let sargs: SelectArgs = !args.select ? this.makeSelectArgs(data, model) : args.select\n const buildFind = new BuildFindArgs({\n select: sargs,\n where: {\n [model.IDColumn]: insertId\n },\n debug: args.debug\n }, model)\n return await buildFind.results()\n }\n }\n }\n\n private makeSelectArgs(data: CreateArgs<any>['data'], model: Model<any>) {\n let args: any = {}\n const schema = model.schema()\n const xansql = model.xansql\n\n if (Array.isArray(data)) {\n for (let d of data) {\n const a = this.makeSelectArgs(d, model)\n args = deepMerge(args, a)\n }\n } else {\n for (let col in data) {\n const field = schema[col] as any\n if (field.type === \"relation-many\") {\n const RModel = xansql.model(field.model)\n const childargs = this.makeSelectArgs(data[col] as any, RModel)\n if (Object.keys(childargs).length) {\n args[col] = {\n select: childargs\n }\n } else {\n args[col] = true\n }\n }\n }\n }\n\n return args\n }\n\n private validateData(data: any) {\n const model = this.model\n const schema = model.schema()\n\n if (!isObject(data)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Expected \"data\" to be an object, received ${typeof data}`,\n model: model.table,\n params: data\n })\n }\n\n // check if idColumn exists\n if (model.IDColumn in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `You cannot set a value for the primary key \"${model.IDColumn}\" in table \"${model.table}\".`,\n model: model.table,\n field: model.IDColumn,\n })\n }\n\n for (let col in data) {\n const value = data[col]\n const field = schema[col]\n\n if (field.meta.create || field.meta.update) {\n if (col in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Cannot set a value for \"${col}\" in table \"${model.table}\" — this field is automatically managed.`,\n model: model.table,\n field: col,\n })\n }\n }\n\n if (field.type === \"relation-one\" && !isNumber(value)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for foreign key \"${col}\" in table \"${model.table}\". Expected a number, got ${typeof value}.`,\n model: model.table,\n field: col,\n })\n }\n\n }\n }\n}\n\nexport default BuildCreateArgs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/model/Build/CreateArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { XansqlFileMeta } from \"../../../core/types\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { deepMerge, iof, isNumber, isObject, quote } from \"../../../utils\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport { CreateArgs, SchemaShape, SelectArgs } from \"../../types\";\nimport BuildFindArgs from \"../FindArgs\";\n\nclass BuildCreateArgs {\n private isSubquery\n constructor(private args: CreateArgs<SchemaShape>, private model: Model<any>, isSubquery = false) {\n this.isSubquery = isSubquery\n const data = args.data\n if (Array.isArray(data)) {\n for (let d of data) {\n this.validateData(d)\n }\n } else {\n this.validateData(data)\n }\n }\n\n async results() {\n const model = this.model\n const xansql = this.model.xansql\n const args = this.args\n const isSubquery = this.isSubquery\n const schema = model.schema()\n const data = args.data\n\n if (Array.isArray(data)) {\n const insertIds: number[] = []\n for (let d of data) {\n const build = new BuildCreateArgs({ data: d }, model, true)\n const id = await build.results()\n insertIds.push(id)\n }\n\n if (!isSubquery) {\n let sargs: SelectArgs = !args.select ? this.makeSelectArgs(data, model) : args.select\n const buildFind = new BuildFindArgs({\n select: sargs,\n where: {\n [model.IDColumn]: {\n in: insertIds\n }\n },\n debug: args.debug\n }, model)\n return await buildFind.results()\n }\n } else {\n const values: { [col: string]: any } = {}\n const relations: { [col: string]: CreateArgs<any>['data'] } = {}\n const fileMetas: { [col: string]: XansqlFileMeta } = {}\n\n // set create and update\n for (let col in schema) {\n const field = schema[col]\n\n if (iof(field, XqlIDField)) {\n continue\n }\n if (iof(field, XqlDate) && (field.meta.createdAt || field.meta.updatedAt)) {\n const v = field.value.toSql(new Date())\n values[quote(xansql.dialect.engine, col)] = v\n continue\n }\n\n if (col in data) {\n const value = data[col]\n if (field.isRelation) {\n if (field.type === \"relation-one\") {\n values[quote(xansql.dialect.engine, col)] = value\n } else {\n relations[col] = value\n }\n } else {\n if (iof(field, XqlFile) && iof(value, File)) {\n try {\n const filemeta = await xansql.uploadFile(value);\n if (!filemeta) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Failed to upload file for field \"${col}\" in table \"${model.table}\".`,\n model: model.table,\n field: col\n })\n };\n (fileMetas as any)[col] = filemeta\n values[quote(xansql.dialect.engine, col)] = `'${JSON.stringify(filemeta)}'`\n } catch (error: any) {\n throw error\n }\n } else {\n try {\n values[quote(xansql.dialect.engine, col)] = field.value.toSql(value)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n }\n }\n } else {\n if (field.isRelation) {\n if (field.type === \"relation-one\" && !field.meta.nullable) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Field \"${col}\" in table \"${model.table}\" is a non-nullable relation-one field and cannot be left empty.`,\n model: model.table,\n field: col,\n });\n }\n } else {\n try {\n values[quote(xansql.dialect.engine, col)] = field.value.toSql(undefined)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n }\n }\n }\n\n let insertId\n try {\n const engine = xansql.dialect.engine\n let sql = `INSERT INTO ${model.table} (${Object.keys(values).join(', ')}) VALUES (${Object.values(values).join(\", \")})`\n if (engine === \"postgres\") sql += ` RETURNING ${model.IDColumn}`\n sql = sql.replace(/\\s+/gi, \" \")\n const results = await model.execute(sql, args.debug)\n insertId = results?.insertId\n if (results.results?.length && engine === \"postgres\") {\n insertId = results.results[0][model.IDColumn]\n }\n } catch (error) {\n for (let col in fileMetas) {\n await xansql.deleteFile(fileMetas[col].fileId)\n }\n throw error\n }\n\n if (insertId && Object.keys(relations).length) {\n for (let col in relations) {\n const rdata = relations[col]\n const field = schema[col]\n const rinfo = field.relationInfo\n const RModel = xansql.model(field.model)\n if (Array.isArray(rdata)) {\n for (let d of rdata) {\n d[rinfo.target.relation] = insertId\n }\n } else {\n rdata[rinfo.target.relation] = insertId\n }\n\n const build = new BuildCreateArgs({ data: rdata, debug: args.debug }, RModel, true)\n await build.results()\n }\n }\n\n if (!isSubquery && insertId) {\n let sargs: SelectArgs = !args.select ? this.makeSelectArgs(data, model) : args.select\n const buildFind = new BuildFindArgs({\n select: sargs,\n where: {\n [model.IDColumn]: insertId\n },\n debug: args.debug\n }, model)\n return await buildFind.results()\n }\n\n return insertId\n }\n }\n\n private makeSelectArgs(data: CreateArgs<any>['data'], model: Model<any>) {\n let args: any = {}\n const schema = model.schema()\n const xansql = model.xansql\n\n if (Array.isArray(data)) {\n for (let d of data) {\n const a = this.makeSelectArgs(d, model)\n args = deepMerge(args, a)\n }\n } else {\n for (let col in data) {\n const field = schema[col] as any\n if (field.type === \"relation-many\") {\n const RModel = xansql.model(field.model)\n const childargs = this.makeSelectArgs(data[col] as any, RModel)\n if (Object.keys(childargs).length) {\n args[col] = {\n select: childargs\n }\n } else {\n args[col] = true\n }\n }\n }\n }\n\n return args\n }\n\n private validateData(data: any) {\n const model = this.model\n const schema = model.schema()\n\n if (!isObject(data)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Expected \"data\" to be an object, received ${typeof data}`,\n model: model.table,\n params: data\n })\n }\n\n // check if idColumn exists\n if (model.IDColumn in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `You cannot set a value for the primary key \"${model.IDColumn}\" in table \"${model.table}\".`,\n model: model.table,\n field: model.IDColumn,\n })\n }\n\n for (let col in data) {\n const value = data[col]\n const field = schema[col]\n\n if (field.meta.create || field.meta.update) {\n if (col in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Cannot set a value for \"${col}\" in table \"${model.table}\" — this field is automatically managed.`,\n model: model.table,\n field: col,\n })\n }\n }\n\n if (field.type === \"relation-one\" && !isNumber(value)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for foreign key \"${col}\" in table \"${model.table}\". Expected a number, got ${typeof value}.`,\n model: model.table,\n field: col,\n })\n }\n\n }\n }\n}\n\nexport default BuildCreateArgs"],"names":[],"mappings":"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"}
package/model/index.d.ts CHANGED
@@ -17,7 +17,7 @@ declare abstract class Model<S extends SchemaShape = SchemaShape> {
17
17
  aggregate<T extends AggregateArgs<S, any>>(args: ExactArgs<T, AggregateArgs<S, T>>): Promise<any>;
18
18
  create<T extends CreateArgs<S>>(args: ExactArgs<T, CreateArgs<S>>): Promise<FindResult<T, S>[] | null>;
19
19
  update<T extends UpdateArgs<S>>(args: ExactArgs<T, UpdateArgs<S>>): Promise<ResultData | undefined>;
20
- upsert<T extends UpsertArgs<S>>(args: ExactArgs<T, UpsertArgs<S>>): Promise<ResultData | undefined>;
20
+ upsert<T extends UpsertArgs<S>>(args: ExactArgs<T, UpsertArgs<S>>): Promise<any>;
21
21
  delete<T extends DeleteArgs<S>>(args: ExactArgs<T, DeleteArgs<S>>): Promise<ResultData | undefined>;
22
22
  paginate(args: PaginateArgs<S>): Promise<{
23
23
  results: Normalize<keyof FindResultColumnMap<any, S> extends never ? Normalize<FindResultFullSchema<S>> & Normalize<FindResultMap<any, S>> : Normalize<FindResultMap<any, S>>>[] | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xansql",
3
- "version": "1.1.16",
3
+ "version": "1.1.18",
4
4
  "main": "./index.cjs",
5
5
  "module": "./index.js",
6
6
  "types": "./index.d.ts",