@prisma/adapter-ppg 0.0.1 → 6.20.0-dev.11
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/LICENSE +201 -0
- package/README.md +44 -0
- package/dist/index.d.mts +41 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +600 -0
- package/dist/index.mjs +573 -0
- package/package.json +45 -3
package/dist/index.js
ADDED
|
@@ -0,0 +1,600 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
PrismaPostgresAdapter: () => PrismaPostgresAdapter
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(index_exports);
|
|
26
|
+
|
|
27
|
+
// src/ppg.ts
|
|
28
|
+
var import_ppg = require("@prisma/ppg");
|
|
29
|
+
|
|
30
|
+
// src/conversion.ts
|
|
31
|
+
var import_driver_adapter_utils = require("@prisma/driver-adapter-utils");
|
|
32
|
+
var import_pg_types = require("pg-types");
|
|
33
|
+
var import_postgres_array = require("postgres-array");
|
|
34
|
+
function isolationLevelToSql(level) {
|
|
35
|
+
switch (level) {
|
|
36
|
+
case "READ UNCOMMITTED":
|
|
37
|
+
return "READ UNCOMMITTED";
|
|
38
|
+
case "READ COMMITTED":
|
|
39
|
+
return "READ COMMITTED";
|
|
40
|
+
case "REPEATABLE READ":
|
|
41
|
+
return "REPEATABLE READ";
|
|
42
|
+
case "SERIALIZABLE":
|
|
43
|
+
return "SERIALIZABLE";
|
|
44
|
+
case "SNAPSHOT":
|
|
45
|
+
return "REPEATABLE READ";
|
|
46
|
+
default:
|
|
47
|
+
throw new Error(`Unknown isolation level: ${level}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function convertArgs(args, argTypes) {
|
|
51
|
+
return args.map((arg, index) => {
|
|
52
|
+
const argType = argTypes[index];
|
|
53
|
+
if (arg === null || arg === void 0) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
const scalarType = argType.scalarType;
|
|
57
|
+
switch (scalarType) {
|
|
58
|
+
case "int":
|
|
59
|
+
case "bigint":
|
|
60
|
+
case "float":
|
|
61
|
+
case "decimal":
|
|
62
|
+
case "string":
|
|
63
|
+
case "enum":
|
|
64
|
+
case "boolean":
|
|
65
|
+
return String(arg);
|
|
66
|
+
case "datetime":
|
|
67
|
+
if (arg instanceof Date) {
|
|
68
|
+
return arg.toISOString();
|
|
69
|
+
}
|
|
70
|
+
return arg;
|
|
71
|
+
case "json":
|
|
72
|
+
return typeof arg === "string" ? arg : JSON.stringify(arg);
|
|
73
|
+
case "bytes":
|
|
74
|
+
if (arg instanceof Uint8Array) {
|
|
75
|
+
return `\\x${Array.from(arg).map((b) => b.toString(16).padStart(2, "0")).join("")}`;
|
|
76
|
+
}
|
|
77
|
+
return arg;
|
|
78
|
+
case "uuid":
|
|
79
|
+
return String(arg);
|
|
80
|
+
case "unknown":
|
|
81
|
+
default:
|
|
82
|
+
return arg;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
var ScalarColumnType = {
|
|
87
|
+
BOOL: 16,
|
|
88
|
+
BYTEA: 17,
|
|
89
|
+
CHAR: 18,
|
|
90
|
+
INT8: 20,
|
|
91
|
+
INT2: 21,
|
|
92
|
+
INT4: 23,
|
|
93
|
+
REGPROC: 24,
|
|
94
|
+
TEXT: 25,
|
|
95
|
+
OID: 26,
|
|
96
|
+
TID: 27,
|
|
97
|
+
XID: 28,
|
|
98
|
+
CID: 29,
|
|
99
|
+
JSON: 114,
|
|
100
|
+
XML: 142,
|
|
101
|
+
PG_NODE_TREE: 194,
|
|
102
|
+
SMGR: 210,
|
|
103
|
+
PATH: 602,
|
|
104
|
+
POLYGON: 604,
|
|
105
|
+
CIDR: 650,
|
|
106
|
+
FLOAT4: 700,
|
|
107
|
+
FLOAT8: 701,
|
|
108
|
+
ABSTIME: 702,
|
|
109
|
+
RELTIME: 703,
|
|
110
|
+
TINTERVAL: 704,
|
|
111
|
+
CIRCLE: 718,
|
|
112
|
+
MACADDR8: 774,
|
|
113
|
+
MONEY: 790,
|
|
114
|
+
MACADDR: 829,
|
|
115
|
+
INET: 869,
|
|
116
|
+
ACLITEM: 1033,
|
|
117
|
+
BPCHAR: 1042,
|
|
118
|
+
VARCHAR: 1043,
|
|
119
|
+
DATE: 1082,
|
|
120
|
+
TIME: 1083,
|
|
121
|
+
TIMESTAMP: 1114,
|
|
122
|
+
TIMESTAMPTZ: 1184,
|
|
123
|
+
INTERVAL: 1186,
|
|
124
|
+
TIMETZ: 1266,
|
|
125
|
+
BIT: 1560,
|
|
126
|
+
VARBIT: 1562,
|
|
127
|
+
NUMERIC: 1700,
|
|
128
|
+
REFCURSOR: 1790,
|
|
129
|
+
REGPROCEDURE: 2202,
|
|
130
|
+
REGOPER: 2203,
|
|
131
|
+
REGOPERATOR: 2204,
|
|
132
|
+
REGCLASS: 2205,
|
|
133
|
+
REGTYPE: 2206,
|
|
134
|
+
UUID: 2950,
|
|
135
|
+
TXID_SNAPSHOT: 2970,
|
|
136
|
+
PG_LSN: 3220,
|
|
137
|
+
PG_NDISTINCT: 3361,
|
|
138
|
+
PG_DEPENDENCIES: 3402,
|
|
139
|
+
TSVECTOR: 3614,
|
|
140
|
+
TSQUERY: 3615,
|
|
141
|
+
GTSVECTOR: 3642,
|
|
142
|
+
REGCONFIG: 3734,
|
|
143
|
+
REGDICTIONARY: 3769,
|
|
144
|
+
JSONB: 3802,
|
|
145
|
+
REGNAMESPACE: 4089,
|
|
146
|
+
REGROLE: 4096
|
|
147
|
+
};
|
|
148
|
+
var ArrayColumnType = {
|
|
149
|
+
BIT_ARRAY: 1561,
|
|
150
|
+
BOOL_ARRAY: 1e3,
|
|
151
|
+
BYTEA_ARRAY: 1001,
|
|
152
|
+
BPCHAR_ARRAY: 1014,
|
|
153
|
+
CHAR_ARRAY: 1002,
|
|
154
|
+
CIDR_ARRAY: 651,
|
|
155
|
+
DATE_ARRAY: 1182,
|
|
156
|
+
FLOAT4_ARRAY: 1021,
|
|
157
|
+
FLOAT8_ARRAY: 1022,
|
|
158
|
+
INET_ARRAY: 1041,
|
|
159
|
+
INT2_ARRAY: 1005,
|
|
160
|
+
INT4_ARRAY: 1007,
|
|
161
|
+
INT8_ARRAY: 1016,
|
|
162
|
+
JSONB_ARRAY: 3807,
|
|
163
|
+
JSON_ARRAY: 199,
|
|
164
|
+
MONEY_ARRAY: 791,
|
|
165
|
+
NUMERIC_ARRAY: 1231,
|
|
166
|
+
OID_ARRAY: 1028,
|
|
167
|
+
TEXT_ARRAY: 1009,
|
|
168
|
+
TIMESTAMP_ARRAY: 1115,
|
|
169
|
+
TIMESTAMPTZ_ARRAY: 1185,
|
|
170
|
+
TIME_ARRAY: 1183,
|
|
171
|
+
UUID_ARRAY: 2951,
|
|
172
|
+
VARBIT_ARRAY: 1563,
|
|
173
|
+
VARCHAR_ARRAY: 1015,
|
|
174
|
+
XML_ARRAY: 143
|
|
175
|
+
};
|
|
176
|
+
function fieldToColumnType(fieldTypeId) {
|
|
177
|
+
switch (fieldTypeId) {
|
|
178
|
+
case ScalarColumnType.INT2:
|
|
179
|
+
case ScalarColumnType.INT4:
|
|
180
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Int32;
|
|
181
|
+
case ScalarColumnType.INT8:
|
|
182
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Int64;
|
|
183
|
+
case ScalarColumnType.FLOAT4:
|
|
184
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Float;
|
|
185
|
+
case ScalarColumnType.FLOAT8:
|
|
186
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Double;
|
|
187
|
+
case ScalarColumnType.BOOL:
|
|
188
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Boolean;
|
|
189
|
+
case ScalarColumnType.DATE:
|
|
190
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Date;
|
|
191
|
+
case ScalarColumnType.TIME:
|
|
192
|
+
case ScalarColumnType.TIMETZ:
|
|
193
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Time;
|
|
194
|
+
case ScalarColumnType.TIMESTAMP:
|
|
195
|
+
case ScalarColumnType.TIMESTAMPTZ:
|
|
196
|
+
return import_driver_adapter_utils.ColumnTypeEnum.DateTime;
|
|
197
|
+
case ScalarColumnType.NUMERIC:
|
|
198
|
+
case ScalarColumnType.MONEY:
|
|
199
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Numeric;
|
|
200
|
+
case ScalarColumnType.JSON:
|
|
201
|
+
case ScalarColumnType.JSONB:
|
|
202
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Json;
|
|
203
|
+
case ScalarColumnType.UUID:
|
|
204
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Uuid;
|
|
205
|
+
case ScalarColumnType.OID:
|
|
206
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Int64;
|
|
207
|
+
case ScalarColumnType.BPCHAR:
|
|
208
|
+
case ScalarColumnType.TEXT:
|
|
209
|
+
case ScalarColumnType.VARCHAR:
|
|
210
|
+
case ScalarColumnType.BIT:
|
|
211
|
+
case ScalarColumnType.VARBIT:
|
|
212
|
+
case ScalarColumnType.INET:
|
|
213
|
+
case ScalarColumnType.CIDR:
|
|
214
|
+
case ScalarColumnType.XML:
|
|
215
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Text;
|
|
216
|
+
case ScalarColumnType.BYTEA:
|
|
217
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Bytes;
|
|
218
|
+
case ArrayColumnType.INT2_ARRAY:
|
|
219
|
+
case ArrayColumnType.INT4_ARRAY:
|
|
220
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Int32Array;
|
|
221
|
+
case ArrayColumnType.FLOAT4_ARRAY:
|
|
222
|
+
return import_driver_adapter_utils.ColumnTypeEnum.FloatArray;
|
|
223
|
+
case ArrayColumnType.FLOAT8_ARRAY:
|
|
224
|
+
return import_driver_adapter_utils.ColumnTypeEnum.DoubleArray;
|
|
225
|
+
case ArrayColumnType.NUMERIC_ARRAY:
|
|
226
|
+
case ArrayColumnType.MONEY_ARRAY:
|
|
227
|
+
return import_driver_adapter_utils.ColumnTypeEnum.NumericArray;
|
|
228
|
+
case ArrayColumnType.BOOL_ARRAY:
|
|
229
|
+
return import_driver_adapter_utils.ColumnTypeEnum.BooleanArray;
|
|
230
|
+
case ArrayColumnType.CHAR_ARRAY:
|
|
231
|
+
return import_driver_adapter_utils.ColumnTypeEnum.CharacterArray;
|
|
232
|
+
case ArrayColumnType.BPCHAR_ARRAY:
|
|
233
|
+
case ArrayColumnType.TEXT_ARRAY:
|
|
234
|
+
case ArrayColumnType.VARCHAR_ARRAY:
|
|
235
|
+
case ArrayColumnType.VARBIT_ARRAY:
|
|
236
|
+
case ArrayColumnType.BIT_ARRAY:
|
|
237
|
+
case ArrayColumnType.INET_ARRAY:
|
|
238
|
+
case ArrayColumnType.CIDR_ARRAY:
|
|
239
|
+
case ArrayColumnType.XML_ARRAY:
|
|
240
|
+
return import_driver_adapter_utils.ColumnTypeEnum.TextArray;
|
|
241
|
+
case ArrayColumnType.DATE_ARRAY:
|
|
242
|
+
return import_driver_adapter_utils.ColumnTypeEnum.DateArray;
|
|
243
|
+
case ArrayColumnType.TIME_ARRAY:
|
|
244
|
+
return import_driver_adapter_utils.ColumnTypeEnum.TimeArray;
|
|
245
|
+
case ArrayColumnType.TIMESTAMP_ARRAY:
|
|
246
|
+
return import_driver_adapter_utils.ColumnTypeEnum.DateTimeArray;
|
|
247
|
+
case ArrayColumnType.JSON_ARRAY:
|
|
248
|
+
case ArrayColumnType.JSONB_ARRAY:
|
|
249
|
+
return import_driver_adapter_utils.ColumnTypeEnum.JsonArray;
|
|
250
|
+
case ArrayColumnType.BYTEA_ARRAY:
|
|
251
|
+
return import_driver_adapter_utils.ColumnTypeEnum.BytesArray;
|
|
252
|
+
case ArrayColumnType.UUID_ARRAY:
|
|
253
|
+
return import_driver_adapter_utils.ColumnTypeEnum.UuidArray;
|
|
254
|
+
case ArrayColumnType.INT8_ARRAY:
|
|
255
|
+
case ArrayColumnType.OID_ARRAY:
|
|
256
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Int64Array;
|
|
257
|
+
default:
|
|
258
|
+
if (fieldTypeId >= 1e4) {
|
|
259
|
+
return import_driver_adapter_utils.ColumnTypeEnum.Text;
|
|
260
|
+
}
|
|
261
|
+
throw new UnsupportedNativeDataType(fieldTypeId);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
var UnsupportedNativeDataType = class extends Error {
|
|
265
|
+
constructor(code) {
|
|
266
|
+
super(`Unsupported column type id ${code}`);
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
var builtinParsers = Object.entries({
|
|
270
|
+
[ScalarColumnType.BOOL]: normalize_bool,
|
|
271
|
+
[ScalarColumnType.NUMERIC]: normalize_numeric,
|
|
272
|
+
[ArrayColumnType.NUMERIC_ARRAY]: normalize_array(normalize_numeric),
|
|
273
|
+
[ScalarColumnType.TIME]: normalize_time,
|
|
274
|
+
[ArrayColumnType.TIME_ARRAY]: normalize_array(normalize_time),
|
|
275
|
+
[ScalarColumnType.TIMETZ]: normalize_timez,
|
|
276
|
+
[ScalarColumnType.DATE]: normalize_date,
|
|
277
|
+
[ArrayColumnType.DATE_ARRAY]: normalize_array(normalize_date),
|
|
278
|
+
[ScalarColumnType.TIMESTAMP]: normalize_timestamp,
|
|
279
|
+
[ArrayColumnType.TIMESTAMP_ARRAY]: normalize_array(normalize_timestamp),
|
|
280
|
+
[ScalarColumnType.TIMESTAMPTZ]: normalize_timestamptz,
|
|
281
|
+
[ArrayColumnType.TIMESTAMPTZ_ARRAY]: normalize_array(normalize_timestamptz),
|
|
282
|
+
[ScalarColumnType.MONEY]: normalize_money,
|
|
283
|
+
[ArrayColumnType.MONEY_ARRAY]: normalize_array(normalize_money),
|
|
284
|
+
[ScalarColumnType.JSON]: toJson,
|
|
285
|
+
[ArrayColumnType.JSON_ARRAY]: normalize_array(toJson),
|
|
286
|
+
[ScalarColumnType.JSONB]: toJson,
|
|
287
|
+
[ArrayColumnType.JSONB_ARRAY]: normalize_array(toJson),
|
|
288
|
+
[ScalarColumnType.BYTEA]: convertBytes,
|
|
289
|
+
[ArrayColumnType.BYTEA_ARRAY]: normalizeByteaArray,
|
|
290
|
+
[ArrayColumnType.BIT_ARRAY]: normalize_array(normalizeBit),
|
|
291
|
+
[ArrayColumnType.VARBIT_ARRAY]: normalize_array(normalizeBit),
|
|
292
|
+
[ArrayColumnType.XML_ARRAY]: normalize_array(normalize_xml)
|
|
293
|
+
}).map(([k, v]) => ({
|
|
294
|
+
oid: Number(k),
|
|
295
|
+
parse: v
|
|
296
|
+
}));
|
|
297
|
+
function normalize_bool(x) {
|
|
298
|
+
return x === null ? null : x === "f" ? "false" : "true";
|
|
299
|
+
}
|
|
300
|
+
function normalize_array(element_normalizer) {
|
|
301
|
+
return (str) => (0, import_postgres_array.parse)(str, element_normalizer);
|
|
302
|
+
}
|
|
303
|
+
function normalize_numeric(numeric) {
|
|
304
|
+
return numeric;
|
|
305
|
+
}
|
|
306
|
+
function normalize_date(date) {
|
|
307
|
+
return date;
|
|
308
|
+
}
|
|
309
|
+
function normalize_timestamp(time) {
|
|
310
|
+
return `${time.replace(" ", "T")}+00:00`;
|
|
311
|
+
}
|
|
312
|
+
function normalize_timestamptz(time) {
|
|
313
|
+
return time.replace(" ", "T").replace(/[+-]\d{2}(:\d{2})?$/, "+00:00");
|
|
314
|
+
}
|
|
315
|
+
function normalize_time(time) {
|
|
316
|
+
return time;
|
|
317
|
+
}
|
|
318
|
+
function normalize_timez(time) {
|
|
319
|
+
return time.replace(/[+-]\d{2}(:\d{2})?$/, "");
|
|
320
|
+
}
|
|
321
|
+
function normalize_money(money) {
|
|
322
|
+
return money.slice(1);
|
|
323
|
+
}
|
|
324
|
+
function normalize_xml(xml) {
|
|
325
|
+
return xml;
|
|
326
|
+
}
|
|
327
|
+
function toJson(json) {
|
|
328
|
+
return json;
|
|
329
|
+
}
|
|
330
|
+
function encodeBuffer(buffer) {
|
|
331
|
+
return Array.from(new Uint8Array(buffer));
|
|
332
|
+
}
|
|
333
|
+
function parsePgBytes(x) {
|
|
334
|
+
return Buffer.from(x, "base64");
|
|
335
|
+
}
|
|
336
|
+
var builtInByteParser = (0, import_pg_types.getTypeParser)(ScalarColumnType.BYTEA);
|
|
337
|
+
function parseBytesArray(x) {
|
|
338
|
+
return (0, import_postgres_array.parse)(x).map(builtInByteParser);
|
|
339
|
+
}
|
|
340
|
+
function normalizeByteaArray(serializedBytesArray) {
|
|
341
|
+
const buffers = parseBytesArray(serializedBytesArray);
|
|
342
|
+
return buffers.map((buf) => buf ? encodeBuffer(buf) : null);
|
|
343
|
+
}
|
|
344
|
+
function convertBytes(serializedBytes) {
|
|
345
|
+
const buffer = parsePgBytes(serializedBytes);
|
|
346
|
+
return encodeBuffer(buffer);
|
|
347
|
+
}
|
|
348
|
+
function normalizeBit(bit) {
|
|
349
|
+
return bit;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// src/errors.ts
|
|
353
|
+
function convertDriverError(error) {
|
|
354
|
+
if (isDriverError(error)) {
|
|
355
|
+
return {
|
|
356
|
+
originalCode: error.code,
|
|
357
|
+
originalMessage: error.message,
|
|
358
|
+
...mapDriverError(error)
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
throw error;
|
|
362
|
+
}
|
|
363
|
+
function mapDriverError(error) {
|
|
364
|
+
switch (error.code) {
|
|
365
|
+
case "22001":
|
|
366
|
+
return {
|
|
367
|
+
kind: "LengthMismatch",
|
|
368
|
+
column: error.details.column
|
|
369
|
+
};
|
|
370
|
+
case "22003":
|
|
371
|
+
return {
|
|
372
|
+
kind: "ValueOutOfRange",
|
|
373
|
+
cause: error.message
|
|
374
|
+
};
|
|
375
|
+
case "23505": {
|
|
376
|
+
const fields = error.details.detail?.match(/Key \(([^)]+)\)/)?.at(1)?.split(", ");
|
|
377
|
+
return {
|
|
378
|
+
kind: "UniqueConstraintViolation",
|
|
379
|
+
constraint: fields !== void 0 ? { fields } : void 0
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
case "23502": {
|
|
383
|
+
const fields = error.details.detail?.match(/Key \(([^)]+)\)/)?.at(1)?.split(", ");
|
|
384
|
+
return {
|
|
385
|
+
kind: "NullConstraintViolation",
|
|
386
|
+
constraint: fields !== void 0 ? { fields } : void 0
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
case "23503": {
|
|
390
|
+
let constraint;
|
|
391
|
+
if (error.details.column) {
|
|
392
|
+
constraint = { fields: [error.details.column] };
|
|
393
|
+
} else if (error.details.constraint) {
|
|
394
|
+
constraint = { index: error.details.constraint };
|
|
395
|
+
}
|
|
396
|
+
return {
|
|
397
|
+
kind: "ForeignKeyConstraintViolation",
|
|
398
|
+
constraint
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
case "3D000":
|
|
402
|
+
return {
|
|
403
|
+
kind: "DatabaseDoesNotExist",
|
|
404
|
+
db: error.message.split(" ").at(1)?.split('"').at(1)
|
|
405
|
+
};
|
|
406
|
+
case "28000":
|
|
407
|
+
return {
|
|
408
|
+
kind: "DatabaseAccessDenied",
|
|
409
|
+
db: error.message.split(",").find((s) => s.startsWith(" database"))?.split('"').at(1)
|
|
410
|
+
};
|
|
411
|
+
case "28P01":
|
|
412
|
+
return {
|
|
413
|
+
kind: "AuthenticationFailed",
|
|
414
|
+
user: error.message.split(" ").pop()?.split('"').at(1)
|
|
415
|
+
};
|
|
416
|
+
case "40001":
|
|
417
|
+
return {
|
|
418
|
+
kind: "TransactionWriteConflict"
|
|
419
|
+
};
|
|
420
|
+
case "42P01":
|
|
421
|
+
return {
|
|
422
|
+
kind: "TableDoesNotExist",
|
|
423
|
+
table: error.message.split(" ").at(1)?.split('"').at(1)
|
|
424
|
+
};
|
|
425
|
+
case "42703":
|
|
426
|
+
return {
|
|
427
|
+
kind: "ColumnNotFound",
|
|
428
|
+
column: error.message.split(" ").at(1)?.split('"').at(1)
|
|
429
|
+
};
|
|
430
|
+
case "42P04":
|
|
431
|
+
return {
|
|
432
|
+
kind: "DatabaseAlreadyExists",
|
|
433
|
+
db: error.message.split(" ").at(1)?.split('"').at(1)
|
|
434
|
+
};
|
|
435
|
+
case "53300":
|
|
436
|
+
return {
|
|
437
|
+
kind: "TooManyConnections",
|
|
438
|
+
cause: error.message
|
|
439
|
+
};
|
|
440
|
+
default:
|
|
441
|
+
return {
|
|
442
|
+
kind: "postgres",
|
|
443
|
+
code: error.code ?? "N/A",
|
|
444
|
+
severity: error.details.severity ?? "N/A",
|
|
445
|
+
message: error.message,
|
|
446
|
+
detail: error.details.detail,
|
|
447
|
+
column: error.details.column,
|
|
448
|
+
hint: error.details.hint
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
function isDriverError(error) {
|
|
453
|
+
return typeof error.code === "string" && typeof error.message === "string" && typeof error.details === "object" && typeof error.details.severity === "string" && (typeof error.details.detail === "string" || error.details.detail === void 0) && (typeof error.details.column === "string" || error.details.column === void 0) && (typeof error.details.hint === "string" || error.details.hint === void 0);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
// src/ppg.ts
|
|
457
|
+
var PrismaPostgresAdapter = class {
|
|
458
|
+
#config;
|
|
459
|
+
adapterName = "@prisma/ppg-adapter";
|
|
460
|
+
provider = "postgres";
|
|
461
|
+
constructor(config) {
|
|
462
|
+
this.#config = config;
|
|
463
|
+
}
|
|
464
|
+
connect() {
|
|
465
|
+
return Promise.resolve(new PrismaPostgresConnection(this.#config));
|
|
466
|
+
}
|
|
467
|
+
};
|
|
468
|
+
var PrismaPostgresConnection = class {
|
|
469
|
+
#client;
|
|
470
|
+
adapterName = "@prisma/ppg-adapter";
|
|
471
|
+
provider = "postgres";
|
|
472
|
+
constructor(config) {
|
|
473
|
+
const existingParsers = "parsers" in config && config.parsers instanceof Array ? config.parsers : [];
|
|
474
|
+
this.#client = (0, import_ppg.client)({
|
|
475
|
+
...config,
|
|
476
|
+
parsers: [...existingParsers, ...builtinParsers]
|
|
477
|
+
});
|
|
478
|
+
}
|
|
479
|
+
async dispose() {
|
|
480
|
+
}
|
|
481
|
+
getConnectionInfo() {
|
|
482
|
+
return {
|
|
483
|
+
maxBindValues: 16 << 10,
|
|
484
|
+
schemaName: "public",
|
|
485
|
+
supportsRelationJoins: true
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
async executeRaw(params) {
|
|
489
|
+
return executeRawStatement(this.#client, params);
|
|
490
|
+
}
|
|
491
|
+
async executeScript(script) {
|
|
492
|
+
await this.#client.query(script);
|
|
493
|
+
}
|
|
494
|
+
async queryRaw(params) {
|
|
495
|
+
return executeQueryRaw(this.#client, params);
|
|
496
|
+
}
|
|
497
|
+
async startTransaction(isolationLevel) {
|
|
498
|
+
const session = await this.#client.newSession();
|
|
499
|
+
return new PrismaPostgresTransaction(session, isolationLevel);
|
|
500
|
+
}
|
|
501
|
+
};
|
|
502
|
+
var PrismaPostgresTransaction = class {
|
|
503
|
+
#session;
|
|
504
|
+
#isolationLevel;
|
|
505
|
+
#begun = false;
|
|
506
|
+
#finished = false;
|
|
507
|
+
adapterName = "@prisma/ppg-adapter";
|
|
508
|
+
provider = "postgres";
|
|
509
|
+
constructor(session, isolationLevel) {
|
|
510
|
+
this.#session = session;
|
|
511
|
+
this.#isolationLevel = isolationLevel;
|
|
512
|
+
}
|
|
513
|
+
get options() {
|
|
514
|
+
return {
|
|
515
|
+
usePhantomQuery: false
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
async #ensureBegun() {
|
|
519
|
+
if (this.#begun) return;
|
|
520
|
+
let beginSql = "BEGIN";
|
|
521
|
+
if (this.#isolationLevel) {
|
|
522
|
+
beginSql += ` ISOLATION LEVEL ${isolationLevelToSql(this.#isolationLevel)}`;
|
|
523
|
+
}
|
|
524
|
+
try {
|
|
525
|
+
await this.#session.query(beginSql);
|
|
526
|
+
this.#begun = true;
|
|
527
|
+
} catch (error) {
|
|
528
|
+
this.#session.close();
|
|
529
|
+
throw convertDriverError(error);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
async commit() {
|
|
533
|
+
if (this.#finished) {
|
|
534
|
+
throw new Error("Transaction already finished");
|
|
535
|
+
}
|
|
536
|
+
try {
|
|
537
|
+
await this.#ensureBegun();
|
|
538
|
+
await this.#session.query("COMMIT");
|
|
539
|
+
this.#finished = true;
|
|
540
|
+
} catch (error) {
|
|
541
|
+
throw convertDriverError(error);
|
|
542
|
+
} finally {
|
|
543
|
+
this.#session.close();
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
async rollback() {
|
|
547
|
+
if (this.#finished) {
|
|
548
|
+
throw new Error("Transaction already finished");
|
|
549
|
+
}
|
|
550
|
+
try {
|
|
551
|
+
if (this.#begun) {
|
|
552
|
+
await this.#session.query("ROLLBACK");
|
|
553
|
+
}
|
|
554
|
+
this.#finished = true;
|
|
555
|
+
} catch (error) {
|
|
556
|
+
throw convertDriverError(error);
|
|
557
|
+
} finally {
|
|
558
|
+
this.#session.close();
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
async executeRaw(params) {
|
|
562
|
+
await this.#ensureBegun();
|
|
563
|
+
return executeRawStatement(this.#session, params);
|
|
564
|
+
}
|
|
565
|
+
async queryRaw(params) {
|
|
566
|
+
await this.#ensureBegun();
|
|
567
|
+
return executeQueryRaw(this.#session, params);
|
|
568
|
+
}
|
|
569
|
+
};
|
|
570
|
+
async function executeQueryRaw(executor, params) {
|
|
571
|
+
const { sql, args } = params;
|
|
572
|
+
try {
|
|
573
|
+
const convertedArgs = convertArgs(args, params.argTypes);
|
|
574
|
+
const result = await executor.query(sql, ...convertedArgs);
|
|
575
|
+
const rows = await result.rows.collect();
|
|
576
|
+
const columnNames = result.columns.map((col) => col.name);
|
|
577
|
+
const columnTypes = result.columns.map((col) => fieldToColumnType(col.oid));
|
|
578
|
+
return {
|
|
579
|
+
columnNames,
|
|
580
|
+
columnTypes,
|
|
581
|
+
rows: rows.map((row) => row.values)
|
|
582
|
+
};
|
|
583
|
+
} catch (error) {
|
|
584
|
+
throw convertDriverError(error);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
async function executeRawStatement(executor, params) {
|
|
588
|
+
const { sql, args } = params;
|
|
589
|
+
try {
|
|
590
|
+
const convertedArgs = convertArgs(args, params.argTypes);
|
|
591
|
+
const affected = await executor.exec(sql, ...convertedArgs);
|
|
592
|
+
return affected;
|
|
593
|
+
} catch (error) {
|
|
594
|
+
throw convertDriverError(error);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
598
|
+
0 && (module.exports = {
|
|
599
|
+
PrismaPostgresAdapter
|
|
600
|
+
});
|