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.
- package/core/Migration.d.ts +1 -2
- package/core/classes/XansqlTransaction.cjs +37 -18
- package/core/classes/XansqlTransaction.cjs.map +1 -1
- package/core/classes/XansqlTransaction.d.ts +16 -5
- package/core/classes/XansqlTransaction.js +37 -18
- package/core/classes/XansqlTransaction.js.map +1 -1
- package/model/Build/CreateArgs/index.cjs +32 -16
- package/model/Build/CreateArgs/index.cjs.map +1 -1
- package/model/Build/CreateArgs/index.js +18 -2
- package/model/Build/CreateArgs/index.js.map +1 -1
- package/model/index.d.ts +1 -1
- package/package.json +1 -1
package/core/Migration.d.ts
CHANGED
|
@@ -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<
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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":["
|
|
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
|
|
7
|
-
constructor(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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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":["
|
|
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
|
|
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,
|
|
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
|
|
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":";;;;;;;;;AAUA,MAAM,eAAe,CAAA;AAElB,IAAA,WAAA,CAAoB,IAA6B,EAAU,KAAiB,EAAE,UAAU,GAAG,KAAK,EAAA;QAA5E,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAmC,IAAA,CAAA,KAAK,GAAL,KAAK;AAC7D,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACtB,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;AACjB,gBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACvB;QACH;aAAO;AACJ,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAC1B;IACH;AAEA,IAAA,MAAM,OAAO,GAAA;;AACV,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AAChC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;AAClC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AAEtB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACtB,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;AACjB,gBAAA,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC;AACjE,gBAAA,MAAM,KAAK,CAAC,OAAO,EAAE;YACxB;QACH;aAAO;YACJ,MAAM,MAAM,GAA2B,EAAE;YACzC,MAAM,SAAS,GAA+C,EAAE;YAChE,MAAM,SAAS,GAAsC,EAAE;;AAGvD,YAAA,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;AACrB,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AAEzB,gBAAA,IAAIA,SAAG,CAAC,KAAK,EAAEC,OAAU,CAAC,EAAE;oBACzB;gBACH;gBACA,IAAID,SAAG,CAAC,KAAK,EAAEE,MAAO,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACxE,oBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;AACvC,oBAAA,MAAM,CAACC,WAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;oBAC7C;gBACH;AAEA,gBAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACd,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AACvB,oBAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AACnB,wBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;AAChC,4BAAA,MAAM,CAACA,WAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK;wBACpD;6BAAO;AACJ,4BAAA,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK;wBACzB;oBACH;yBAAO;AACJ,wBAAA,IAAIH,SAAG,CAAC,KAAK,EAAEI,MAAO,CAAC,IAAIJ,SAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;AAC1C,4BAAA,IAAI;gCACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;gCAC/C,IAAI,CAAC,QAAQ,EAAE;oCACZ,MAAM,IAAIK,uBAAW,CAAC;AACnB,wCAAA,IAAI,EAAE,kBAAkB;AACxB,wCAAA,OAAO,EAAE,CAAA,iCAAA,EAAoC,GAAG,eAAe,KAAK,CAAC,KAAK,CAAA,EAAA,CAAI;wCAC9E,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,wCAAA,KAAK,EAAE;AACT,qCAAA,CAAC;gCACL;gCAAC;AACA,gCAAA,SAAiB,CAAC,GAAG,CAAC,GAAG,QAAQ;gCAClC,MAAM,CAACF,WAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA,CAAA,CAAG;4BAC9E;4BAAE,OAAO,KAAU,EAAE;AAClB,gCAAA,MAAM,KAAK;4BACd;wBACH;6BAAO;AACJ,4BAAA,IAAI;gCACD,MAAM,CAACA,WAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;4BACvE;4BAAE,OAAO,KAAU,EAAE;gCAClB,MAAM,IAAIE,uBAAW,CAAC;AACnB,oCAAA,IAAI,EAAE,kBAAkB;oCACxB,OAAO,EAAE,KAAK,CAAC,OAAO;oCACtB,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oCAAA,KAAK,EAAE;AACT,iCAAA,CAAC;4BACL;wBACH;oBACH;gBACH;qBAAO;AACJ,oBAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AACnB,wBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;4BACxD,MAAM,IAAIA,uBAAW,CAAC;AACnB,gCAAA,IAAI,EAAE,kBAAkB;AACxB,gCAAA,OAAO,EAAE,CAAA,OAAA,EAAU,GAAG,eAAe,KAAK,CAAC,KAAK,CAAA,gEAAA,CAAkE;gCAClH,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,gCAAA,KAAK,EAAE,GAAG;AACZ,6BAAA,CAAC;wBACL;oBACH;yBAAO;AACJ,wBAAA,IAAI;4BACD,MAAM,CAACF,WAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;wBAC3E;wBAAE,OAAO,KAAU,EAAE;4BAClB,MAAM,IAAIE,uBAAW,CAAC;AACnB,gCAAA,IAAI,EAAE,kBAAkB;gCACxB,OAAO,EAAE,KAAK,CAAC,OAAO;gCACtB,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,gCAAA,KAAK,EAAE;AACT,6BAAA,CAAC;wBACL;oBACH;gBACH;YACH;AAEA,YAAA,IAAI,QAAQ;AACZ,YAAA,IAAI;AACD,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM;AACpC,gBAAA,IAAI,GAAG,GAAG,CAAA,YAAA,EAAe,KAAK,CAAC,KAAK,CAAA,EAAA,EAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,UAAA,EAAa,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACvH,IAAI,MAAM,KAAK,UAAU;AAAE,oBAAA,GAAG,IAAI,CAAA,WAAA,EAAc,KAAK,CAAC,QAAQ,EAAE;gBAChE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;AAC/B,gBAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;gBACpD,QAAQ,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ;AAC5B,gBAAA,IAAI,CAAA,CAAA,EAAA,GAAA,OAAO,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,KAAI,MAAM,KAAK,UAAU,EAAE;AACnD,oBAAA,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAChD;YACH;YAAE,OAAO,KAAK,EAAE;AACb,gBAAA,KAAK,IAAI,GAAG,IAAI,SAAS,EAAE;oBACxB,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;gBACjD;AACA,gBAAA,MAAM,KAAK;YACd;YAEA,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;AAC5C,gBAAA,KAAK,IAAI,GAAG,IAAI,SAAS,EAAE;AACxB,oBAAA,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC;AAC5B,oBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AACzB,oBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY;oBAChC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AACxC,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,wBAAA,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;4BAClB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ;wBACtC;oBACH;yBAAO;wBACJ,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ;oBAC1C;oBAEA,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AACnF,oBAAA,MAAM,KAAK,CAAC,OAAO,EAAE;gBACxB;YACH;AAEA,YAAA,IAAI,CAAC,UAAU,IAAI,QAAQ,EAAE;gBAC1B,IAAI,KAAK,GAAe,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM;AACrF,gBAAA,MAAM,SAAS,GAAG,IAAIC,OAAa,CAAC;AACjC,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,KAAK,EAAE;AACJ,wBAAA,CAAC,KAAK,CAAC,QAAQ,GAAG;AACpB,qBAAA;oBACD,KAAK,EAAE,IAAI,CAAC;iBACd,EAAE,KAAK,CAAC;AACT,gBAAA,OAAO,MAAM,SAAS,CAAC,OAAO,EAAE;YACnC;QACH;IACH;IAEQ,cAAc,CAAC,IAA6B,EAAE,KAAiB,EAAA;QACpE,IAAI,IAAI,GAAQ,EAAE;AAClB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;AAC7B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAE3B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACtB,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;gBACjB,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC;AACvC,gBAAA,IAAI,GAAGC,eAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5B;QACH;aAAO;AACJ,YAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;AACnB,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAQ;AAChC,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE;oBACjC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AACxC,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAQ,EAAE,MAAM,CAAC;oBAC/D,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;wBAChC,IAAI,CAAC,GAAG,CAAC,GAAG;AACT,4BAAA,MAAM,EAAE;yBACV;oBACJ;yBAAO;AACJ,wBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;oBACnB;gBACH;YACH;QACH;AAEA,QAAA,OAAO,IAAI;IACd;AAEQ,IAAA,YAAY,CAAC,IAAS,EAAA;AAC3B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;AAE7B,QAAA,IAAI,CAACC,cAAQ,CAAC,IAAI,CAAC,EAAE;YAClB,MAAM,IAAIH,uBAAW,CAAC;AACnB,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,OAAO,EAAE,CAAA,0CAAA,EAA6C,OAAO,IAAI,CAAA,CAAE;gBACnE,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,gBAAA,MAAM,EAAE;AACV,aAAA,CAAC;QACL;;AAGA,QAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE;YACzB,MAAM,IAAIA,uBAAW,CAAC;AACnB,gBAAA,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,+CAA+C,KAAK,CAAC,QAAQ,CAAA,YAAA,EAAe,KAAK,CAAC,KAAK,CAAA,EAAA,CAAI;gBACpG,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,KAAK,CAAC,QAAQ;AACvB,aAAA,CAAC;QACL;AAEA,QAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;AACnB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AACvB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AAEzB,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;AACzC,gBAAA,IAAI,GAAG,IAAI,IAAI,EAAE;oBACd,MAAM,IAAIA,uBAAW,CAAC;AACnB,wBAAA,IAAI,EAAE,kBAAkB;AACxB,wBAAA,OAAO,EAAE,CAAA,wBAAA,EAA2B,GAAG,eAAe,KAAK,CAAC,KAAK,CAAA,wCAAA,CAA0C;wBAC3G,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,wBAAA,KAAK,EAAE,GAAG;AACZ,qBAAA,CAAC;gBACL;YACH;AAEA,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,CAACI,cAAQ,CAAC,KAAK,CAAC,EAAE;gBACpD,MAAM,IAAIJ,uBAAW,CAAC;AACnB,oBAAA,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,CAAA,+BAAA,EAAkC,GAAG,CAAA,YAAA,EAAe,KAAK,CAAC,KAAK,CAAA,0BAAA,EAA6B,OAAO,KAAK,CAAA,CAAA,CAAG;oBACpH,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oBAAA,KAAK,EAAE,GAAG;AACZ,iBAAA,CAAC;YACL;QAEH;IACH;AACF;;;;"}
|
|
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,
|
|
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<
|
|
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;
|