@juit/pgproxy-persister 1.3.1 → 1.3.2
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/dist/model.cjs +6 -4
- package/dist/model.cjs.map +1 -1
- package/dist/model.d.ts +18 -1
- package/dist/model.mjs +6 -4
- package/dist/model.mjs.map +1 -1
- package/package.json +3 -3
- package/src/model.ts +35 -5
package/dist/model.cjs
CHANGED
|
@@ -52,7 +52,7 @@ function where(query, params) {
|
|
|
52
52
|
count
|
|
53
53
|
];
|
|
54
54
|
}
|
|
55
|
-
function insert(schema, table, query) {
|
|
55
|
+
function insert(schema, table, query, unique = false) {
|
|
56
56
|
assertObject(query, "Called INSERT with a non-object");
|
|
57
57
|
const columns = [];
|
|
58
58
|
const placeholders = [];
|
|
@@ -63,8 +63,9 @@ function insert(schema, table, query) {
|
|
|
63
63
|
placeholders.push(`$${index}`);
|
|
64
64
|
values.push(value);
|
|
65
65
|
}
|
|
66
|
+
const returning = unique ? "ON CONFLICT DO NOTHING RETURNING *" : "RETURNING *";
|
|
66
67
|
return [
|
|
67
|
-
columns.length == 0 ? `INSERT INTO ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} DEFAULT VALUES
|
|
68
|
+
columns.length == 0 ? `INSERT INTO ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} DEFAULT VALUES ${returning}` : `INSERT INTO ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} (${columns.join()}) VALUES (${placeholders.join()}) ${returning}`,
|
|
68
69
|
values
|
|
69
70
|
];
|
|
70
71
|
}
|
|
@@ -160,8 +161,9 @@ var ModelImpl = class {
|
|
|
160
161
|
this._schema = schema || "public";
|
|
161
162
|
this._table = table;
|
|
162
163
|
}
|
|
163
|
-
|
|
164
|
-
|
|
164
|
+
// Actual implementation
|
|
165
|
+
async create(data, unique = false) {
|
|
166
|
+
const [sql, params] = insert(this._schema, this._table, data, unique);
|
|
165
167
|
const result = await this._connection.query(sql, params);
|
|
166
168
|
return result.rows[0];
|
|
167
169
|
}
|
package/dist/model.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/model.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAuB;AAQvB,SAAS,OAAO,WAAgB,SAAoC;AAClE,MAAI,CAAE,UAAW,OAAM,IAAI,MAAM,OAAO;AAC1C;AAEA,SAAS,YAAY,OAAY,SAAyC;AACxE,SAAO,MAAM,QAAQ,KAAK,GAAG,OAAO;AACtC;AAEA,SAAS,aAAa,OAAY,SAA0C;AAC1E,SAAO,SAAU,OAAO,UAAU,UAAW,OAAO;AACtD;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/model.d.ts
CHANGED
|
@@ -39,10 +39,27 @@ export interface Model<Table extends Record<string, ColumnDefinition>> {
|
|
|
39
39
|
/**
|
|
40
40
|
* Create a row in the table.
|
|
41
41
|
*
|
|
42
|
+
* With this variant, uniqueness checks are not performed, that is, if a
|
|
43
|
+
* conflict occurs due to a unique constraint or primary key, an error will
|
|
44
|
+
* be raised.
|
|
45
|
+
*
|
|
46
|
+
* @param data - The data to insert in the table
|
|
47
|
+
* @param unique - Ignore uniqueness checks (defaults to `false`)
|
|
48
|
+
* @returns A record containing all colums from the table (including defaults)
|
|
49
|
+
*/
|
|
50
|
+
create(data: InferInsertType<Table>, unique?: false): Promise<InferSelectType<Table>>;
|
|
51
|
+
/**
|
|
52
|
+
* Create a row in the table returning a value *only if* a new one is created.
|
|
53
|
+
*
|
|
54
|
+
* With this variant, uniqueness checks **are performed**, that is, if a
|
|
55
|
+
* conflict occurs due to a unique constraint or primary key, this will
|
|
56
|
+
* return `undefined`.
|
|
57
|
+
*
|
|
42
58
|
* @param data - The data to insert in the table
|
|
59
|
+
* @param unique - Enforce uniqueness checks (typed as `true`)
|
|
43
60
|
* @returns A record containing all colums from the table (including defaults)
|
|
44
61
|
*/
|
|
45
|
-
create(data: InferInsertType<Table
|
|
62
|
+
create(data: InferInsertType<Table>, unique: true): Promise<InferSelectType<Table> | undefined>;
|
|
46
63
|
/**
|
|
47
64
|
* Insert a row in the database or update its contents on conflict.
|
|
48
65
|
*
|
package/dist/model.mjs
CHANGED
|
@@ -28,7 +28,7 @@ function where(query, params) {
|
|
|
28
28
|
count
|
|
29
29
|
];
|
|
30
30
|
}
|
|
31
|
-
function insert(schema, table, query) {
|
|
31
|
+
function insert(schema, table, query, unique = false) {
|
|
32
32
|
assertObject(query, "Called INSERT with a non-object");
|
|
33
33
|
const columns = [];
|
|
34
34
|
const placeholders = [];
|
|
@@ -39,8 +39,9 @@ function insert(schema, table, query) {
|
|
|
39
39
|
placeholders.push(`$${index}`);
|
|
40
40
|
values.push(value);
|
|
41
41
|
}
|
|
42
|
+
const returning = unique ? "ON CONFLICT DO NOTHING RETURNING *" : "RETURNING *";
|
|
42
43
|
return [
|
|
43
|
-
columns.length == 0 ? `INSERT INTO ${escape(schema)}.${escape(table)} DEFAULT VALUES
|
|
44
|
+
columns.length == 0 ? `INSERT INTO ${escape(schema)}.${escape(table)} DEFAULT VALUES ${returning}` : `INSERT INTO ${escape(schema)}.${escape(table)} (${columns.join()}) VALUES (${placeholders.join()}) ${returning}`,
|
|
44
45
|
values
|
|
45
46
|
];
|
|
46
47
|
}
|
|
@@ -136,8 +137,9 @@ var ModelImpl = class {
|
|
|
136
137
|
this._schema = schema || "public";
|
|
137
138
|
this._table = table;
|
|
138
139
|
}
|
|
139
|
-
|
|
140
|
-
|
|
140
|
+
// Actual implementation
|
|
141
|
+
async create(data, unique = false) {
|
|
142
|
+
const [sql, params] = insert(this._schema, this._table, data, unique);
|
|
141
143
|
const result = await this._connection.query(sql, params);
|
|
142
144
|
return result.rows[0];
|
|
143
145
|
}
|
package/dist/model.mjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/model.ts"],
|
|
4
|
-
"mappings": ";AAAA,SAAS,cAAc;AAQvB,SAAS,OAAO,WAAgB,SAAoC;AAClE,MAAI,CAAE,UAAW,OAAM,IAAI,MAAM,OAAO;AAC1C;AAEA,SAAS,YAAY,OAAY,SAAyC;AACxE,SAAO,MAAM,QAAQ,KAAK,GAAG,OAAO;AACtC;AAEA,SAAS,aAAa,OAAY,SAA0C;AAC1E,SAAO,SAAU,OAAO,UAAU,UAAW,OAAO;AACtD;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juit/pgproxy-persister",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.2",
|
|
4
4
|
"main": "./dist/index.cjs",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"src/"
|
|
54
54
|
],
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@juit/pgproxy-client": "1.3.
|
|
57
|
-
"@juit/pgproxy-types": "1.3.
|
|
56
|
+
"@juit/pgproxy-client": "1.3.2",
|
|
57
|
+
"@juit/pgproxy-types": "1.3.2"
|
|
58
58
|
}
|
|
59
59
|
}
|
package/src/model.ts
CHANGED
|
@@ -106,13 +106,35 @@ export interface Model<Table extends Record<string, ColumnDefinition>> {
|
|
|
106
106
|
/**
|
|
107
107
|
* Create a row in the table.
|
|
108
108
|
*
|
|
109
|
+
* With this variant, uniqueness checks are not performed, that is, if a
|
|
110
|
+
* conflict occurs due to a unique constraint or primary key, an error will
|
|
111
|
+
* be raised.
|
|
112
|
+
*
|
|
109
113
|
* @param data - The data to insert in the table
|
|
114
|
+
* @param unique - Ignore uniqueness checks (defaults to `false`)
|
|
110
115
|
* @returns A record containing all colums from the table (including defaults)
|
|
111
116
|
*/
|
|
112
117
|
create(
|
|
113
118
|
data: InferInsertType<Table>,
|
|
119
|
+
unique?: false,
|
|
114
120
|
): Promise<InferSelectType<Table>>
|
|
115
121
|
|
|
122
|
+
/**
|
|
123
|
+
* Create a row in the table returning a value *only if* a new one is created.
|
|
124
|
+
*
|
|
125
|
+
* With this variant, uniqueness checks **are performed**, that is, if a
|
|
126
|
+
* conflict occurs due to a unique constraint or primary key, this will
|
|
127
|
+
* return `undefined`.
|
|
128
|
+
*
|
|
129
|
+
* @param data - The data to insert in the table
|
|
130
|
+
* @param unique - Enforce uniqueness checks (typed as `true`)
|
|
131
|
+
* @returns A record containing all colums from the table (including defaults)
|
|
132
|
+
*/
|
|
133
|
+
create(
|
|
134
|
+
data: InferInsertType<Table>,
|
|
135
|
+
unique: true,
|
|
136
|
+
): Promise<InferSelectType<Table> | undefined>
|
|
137
|
+
|
|
116
138
|
/**
|
|
117
139
|
* Insert a row in the database or update its contents on conflict.
|
|
118
140
|
*
|
|
@@ -228,6 +250,7 @@ function insert(
|
|
|
228
250
|
schema: string,
|
|
229
251
|
table: string,
|
|
230
252
|
query: Record<string, any>,
|
|
253
|
+
unique: boolean = false,
|
|
231
254
|
): Query {
|
|
232
255
|
assertObject(query, 'Called INSERT with a non-object')
|
|
233
256
|
|
|
@@ -242,10 +265,12 @@ function insert(
|
|
|
242
265
|
values.push(value)
|
|
243
266
|
}
|
|
244
267
|
|
|
268
|
+
const returning = unique ? 'ON CONFLICT DO NOTHING RETURNING *' : 'RETURNING *'
|
|
269
|
+
|
|
245
270
|
return [
|
|
246
271
|
columns.length == 0 ?
|
|
247
|
-
`INSERT INTO ${escape(schema)}.${escape(table)} DEFAULT VALUES
|
|
248
|
-
`INSERT INTO ${escape(schema)}.${escape(table)} (${columns.join()}) VALUES (${placeholders.join()})
|
|
272
|
+
`INSERT INTO ${escape(schema)}.${escape(table)} DEFAULT VALUES ${returning}` :
|
|
273
|
+
`INSERT INTO ${escape(schema)}.${escape(table)} (${columns.join()}) VALUES (${placeholders.join()}) ${returning}`,
|
|
249
274
|
values,
|
|
250
275
|
]
|
|
251
276
|
}
|
|
@@ -408,12 +433,17 @@ class ModelImpl<Table extends Record<string, ColumnDefinition>> implements Model
|
|
|
408
433
|
this._table = table
|
|
409
434
|
}
|
|
410
435
|
|
|
436
|
+
// Make typescript happy about overloads
|
|
437
|
+
create(data: InferInsertType<Table>): Promise<InferSelectType<Table>>
|
|
438
|
+
|
|
439
|
+
// Actual implementation
|
|
411
440
|
async create(
|
|
412
441
|
data: InferInsertType<Table>,
|
|
413
|
-
|
|
414
|
-
|
|
442
|
+
unique: false = false,
|
|
443
|
+
): Promise<InferSelectType<Table> | undefined> {
|
|
444
|
+
const [ sql, params ] = insert(this._schema, this._table, data, unique)
|
|
415
445
|
const result = await this._connection.query<InferSelectType<Table>>(sql, params)
|
|
416
|
-
return result.rows[0]
|
|
446
|
+
return result.rows[0]
|
|
417
447
|
}
|
|
418
448
|
|
|
419
449
|
async upsert<K extends InferQueryType<Table>>(
|