drizzle-orm 0.30.5 → 0.30.6
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/package.json +103 -50
- package/pglite/driver.cjs +71 -0
- package/pglite/driver.cjs.map +1 -0
- package/pglite/driver.d.cts +21 -0
- package/pglite/driver.d.ts +21 -0
- package/pglite/driver.js +49 -0
- package/pglite/driver.js.map +1 -0
- package/pglite/index.cjs +25 -0
- package/pglite/index.cjs.map +1 -0
- package/pglite/index.d.cts +2 -0
- package/pglite/index.d.ts +2 -0
- package/pglite/index.js +3 -0
- package/pglite/index.js.map +1 -0
- package/pglite/migrator.cjs +33 -0
- package/pglite/migrator.cjs.map +1 -0
- package/pglite/migrator.d.cts +3 -0
- package/pglite/migrator.d.ts +3 -0
- package/pglite/migrator.js +9 -0
- package/pglite/migrator.js.map +1 -0
- package/pglite/session.cjs +145 -0
- package/pglite/session.cjs.map +1 -0
- package/pglite/session.d.cts +47 -0
- package/pglite/session.d.ts +47 -0
- package/pglite/session.js +119 -0
- package/pglite/session.js.map +1 -0
- package/version.cjs +1 -1
- package/version.d.cts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "drizzle-orm",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.6",
|
|
4
4
|
"description": "Drizzle ORM package for SQL databases",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -66,7 +66,8 @@
|
|
|
66
66
|
"postgres": ">=3",
|
|
67
67
|
"react": ">=18",
|
|
68
68
|
"sql.js": ">=1",
|
|
69
|
-
"sqlite3": ">=5"
|
|
69
|
+
"sqlite3": ">=5",
|
|
70
|
+
"@electric-sql/pglite": ">=0.1.1"
|
|
70
71
|
},
|
|
71
72
|
"peerDependenciesMeta": {
|
|
72
73
|
"mysql2": {
|
|
@@ -140,11 +141,15 @@
|
|
|
140
141
|
},
|
|
141
142
|
"@types/react": {
|
|
142
143
|
"optional": true
|
|
144
|
+
},
|
|
145
|
+
"@electric-sql/pglite": {
|
|
146
|
+
"optional": true
|
|
143
147
|
}
|
|
144
148
|
},
|
|
145
149
|
"devDependencies": {
|
|
146
150
|
"@aws-sdk/client-rds-data": "^3.344.0",
|
|
147
151
|
"@cloudflare/workers-types": "^4.20230904.0",
|
|
152
|
+
"@electric-sql/pglite": "^0.1.1",
|
|
148
153
|
"@libsql/client": "^0.5.6",
|
|
149
154
|
"@neondatabase/serverless": "^0.9.0",
|
|
150
155
|
"@op-engineering/op-sqlite": "^2.0.16",
|
|
@@ -730,54 +735,6 @@
|
|
|
730
735
|
"types": "./libsql/session.d.ts",
|
|
731
736
|
"default": "./libsql/session.js"
|
|
732
737
|
},
|
|
733
|
-
"./mysql-proxy/driver": {
|
|
734
|
-
"import": {
|
|
735
|
-
"types": "./mysql-proxy/driver.d.ts",
|
|
736
|
-
"default": "./mysql-proxy/driver.js"
|
|
737
|
-
},
|
|
738
|
-
"require": {
|
|
739
|
-
"types": "./mysql-proxy/driver.d.cts",
|
|
740
|
-
"default": "./mysql-proxy/driver.cjs"
|
|
741
|
-
},
|
|
742
|
-
"types": "./mysql-proxy/driver.d.ts",
|
|
743
|
-
"default": "./mysql-proxy/driver.js"
|
|
744
|
-
},
|
|
745
|
-
"./mysql-proxy": {
|
|
746
|
-
"import": {
|
|
747
|
-
"types": "./mysql-proxy/index.d.ts",
|
|
748
|
-
"default": "./mysql-proxy/index.js"
|
|
749
|
-
},
|
|
750
|
-
"require": {
|
|
751
|
-
"types": "./mysql-proxy/index.d.cts",
|
|
752
|
-
"default": "./mysql-proxy/index.cjs"
|
|
753
|
-
},
|
|
754
|
-
"types": "./mysql-proxy/index.d.ts",
|
|
755
|
-
"default": "./mysql-proxy/index.js"
|
|
756
|
-
},
|
|
757
|
-
"./mysql-proxy/migrator": {
|
|
758
|
-
"import": {
|
|
759
|
-
"types": "./mysql-proxy/migrator.d.ts",
|
|
760
|
-
"default": "./mysql-proxy/migrator.js"
|
|
761
|
-
},
|
|
762
|
-
"require": {
|
|
763
|
-
"types": "./mysql-proxy/migrator.d.cts",
|
|
764
|
-
"default": "./mysql-proxy/migrator.cjs"
|
|
765
|
-
},
|
|
766
|
-
"types": "./mysql-proxy/migrator.d.ts",
|
|
767
|
-
"default": "./mysql-proxy/migrator.js"
|
|
768
|
-
},
|
|
769
|
-
"./mysql-proxy/session": {
|
|
770
|
-
"import": {
|
|
771
|
-
"types": "./mysql-proxy/session.d.ts",
|
|
772
|
-
"default": "./mysql-proxy/session.js"
|
|
773
|
-
},
|
|
774
|
-
"require": {
|
|
775
|
-
"types": "./mysql-proxy/session.d.cts",
|
|
776
|
-
"default": "./mysql-proxy/session.cjs"
|
|
777
|
-
},
|
|
778
|
-
"types": "./mysql-proxy/session.d.ts",
|
|
779
|
-
"default": "./mysql-proxy/session.js"
|
|
780
|
-
},
|
|
781
738
|
"./mysql-core/alias": {
|
|
782
739
|
"import": {
|
|
783
740
|
"types": "./mysql-core/alias.d.ts",
|
|
@@ -994,6 +951,54 @@
|
|
|
994
951
|
"types": "./mysql-core/view.d.ts",
|
|
995
952
|
"default": "./mysql-core/view.js"
|
|
996
953
|
},
|
|
954
|
+
"./mysql-proxy/driver": {
|
|
955
|
+
"import": {
|
|
956
|
+
"types": "./mysql-proxy/driver.d.ts",
|
|
957
|
+
"default": "./mysql-proxy/driver.js"
|
|
958
|
+
},
|
|
959
|
+
"require": {
|
|
960
|
+
"types": "./mysql-proxy/driver.d.cts",
|
|
961
|
+
"default": "./mysql-proxy/driver.cjs"
|
|
962
|
+
},
|
|
963
|
+
"types": "./mysql-proxy/driver.d.ts",
|
|
964
|
+
"default": "./mysql-proxy/driver.js"
|
|
965
|
+
},
|
|
966
|
+
"./mysql-proxy": {
|
|
967
|
+
"import": {
|
|
968
|
+
"types": "./mysql-proxy/index.d.ts",
|
|
969
|
+
"default": "./mysql-proxy/index.js"
|
|
970
|
+
},
|
|
971
|
+
"require": {
|
|
972
|
+
"types": "./mysql-proxy/index.d.cts",
|
|
973
|
+
"default": "./mysql-proxy/index.cjs"
|
|
974
|
+
},
|
|
975
|
+
"types": "./mysql-proxy/index.d.ts",
|
|
976
|
+
"default": "./mysql-proxy/index.js"
|
|
977
|
+
},
|
|
978
|
+
"./mysql-proxy/migrator": {
|
|
979
|
+
"import": {
|
|
980
|
+
"types": "./mysql-proxy/migrator.d.ts",
|
|
981
|
+
"default": "./mysql-proxy/migrator.js"
|
|
982
|
+
},
|
|
983
|
+
"require": {
|
|
984
|
+
"types": "./mysql-proxy/migrator.d.cts",
|
|
985
|
+
"default": "./mysql-proxy/migrator.cjs"
|
|
986
|
+
},
|
|
987
|
+
"types": "./mysql-proxy/migrator.d.ts",
|
|
988
|
+
"default": "./mysql-proxy/migrator.js"
|
|
989
|
+
},
|
|
990
|
+
"./mysql-proxy/session": {
|
|
991
|
+
"import": {
|
|
992
|
+
"types": "./mysql-proxy/session.d.ts",
|
|
993
|
+
"default": "./mysql-proxy/session.js"
|
|
994
|
+
},
|
|
995
|
+
"require": {
|
|
996
|
+
"types": "./mysql-proxy/session.d.cts",
|
|
997
|
+
"default": "./mysql-proxy/session.cjs"
|
|
998
|
+
},
|
|
999
|
+
"types": "./mysql-proxy/session.d.ts",
|
|
1000
|
+
"default": "./mysql-proxy/session.js"
|
|
1001
|
+
},
|
|
997
1002
|
"./mysql2/driver": {
|
|
998
1003
|
"import": {
|
|
999
1004
|
"types": "./mysql2/driver.d.ts",
|
|
@@ -1498,6 +1503,54 @@
|
|
|
1498
1503
|
"types": "./pg-proxy/session.d.ts",
|
|
1499
1504
|
"default": "./pg-proxy/session.js"
|
|
1500
1505
|
},
|
|
1506
|
+
"./pglite/driver": {
|
|
1507
|
+
"import": {
|
|
1508
|
+
"types": "./pglite/driver.d.ts",
|
|
1509
|
+
"default": "./pglite/driver.js"
|
|
1510
|
+
},
|
|
1511
|
+
"require": {
|
|
1512
|
+
"types": "./pglite/driver.d.cts",
|
|
1513
|
+
"default": "./pglite/driver.cjs"
|
|
1514
|
+
},
|
|
1515
|
+
"types": "./pglite/driver.d.ts",
|
|
1516
|
+
"default": "./pglite/driver.js"
|
|
1517
|
+
},
|
|
1518
|
+
"./pglite": {
|
|
1519
|
+
"import": {
|
|
1520
|
+
"types": "./pglite/index.d.ts",
|
|
1521
|
+
"default": "./pglite/index.js"
|
|
1522
|
+
},
|
|
1523
|
+
"require": {
|
|
1524
|
+
"types": "./pglite/index.d.cts",
|
|
1525
|
+
"default": "./pglite/index.cjs"
|
|
1526
|
+
},
|
|
1527
|
+
"types": "./pglite/index.d.ts",
|
|
1528
|
+
"default": "./pglite/index.js"
|
|
1529
|
+
},
|
|
1530
|
+
"./pglite/migrator": {
|
|
1531
|
+
"import": {
|
|
1532
|
+
"types": "./pglite/migrator.d.ts",
|
|
1533
|
+
"default": "./pglite/migrator.js"
|
|
1534
|
+
},
|
|
1535
|
+
"require": {
|
|
1536
|
+
"types": "./pglite/migrator.d.cts",
|
|
1537
|
+
"default": "./pglite/migrator.cjs"
|
|
1538
|
+
},
|
|
1539
|
+
"types": "./pglite/migrator.d.ts",
|
|
1540
|
+
"default": "./pglite/migrator.js"
|
|
1541
|
+
},
|
|
1542
|
+
"./pglite/session": {
|
|
1543
|
+
"import": {
|
|
1544
|
+
"types": "./pglite/session.d.ts",
|
|
1545
|
+
"default": "./pglite/session.js"
|
|
1546
|
+
},
|
|
1547
|
+
"require": {
|
|
1548
|
+
"types": "./pglite/session.d.cts",
|
|
1549
|
+
"default": "./pglite/session.cjs"
|
|
1550
|
+
},
|
|
1551
|
+
"types": "./pglite/session.d.ts",
|
|
1552
|
+
"default": "./pglite/session.js"
|
|
1553
|
+
},
|
|
1501
1554
|
"./planetscale-serverless/driver": {
|
|
1502
1555
|
"import": {
|
|
1503
1556
|
"types": "./planetscale-serverless/driver.d.ts",
|
|
@@ -0,0 +1,71 @@
|
|
|
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
|
+
var driver_exports = {};
|
|
20
|
+
__export(driver_exports, {
|
|
21
|
+
PgliteDriver: () => PgliteDriver,
|
|
22
|
+
drizzle: () => drizzle
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(driver_exports);
|
|
25
|
+
var import_entity = require("../entity.cjs");
|
|
26
|
+
var import_logger = require("../logger.cjs");
|
|
27
|
+
var import_db = require("../pg-core/db.cjs");
|
|
28
|
+
var import_dialect = require("../pg-core/dialect.cjs");
|
|
29
|
+
var import_relations = require("../relations.cjs");
|
|
30
|
+
var import_session = require("./session.cjs");
|
|
31
|
+
class PgliteDriver {
|
|
32
|
+
constructor(client, dialect, options = {}) {
|
|
33
|
+
this.client = client;
|
|
34
|
+
this.dialect = dialect;
|
|
35
|
+
this.options = options;
|
|
36
|
+
}
|
|
37
|
+
static [import_entity.entityKind] = "PgliteDriver";
|
|
38
|
+
createSession(schema) {
|
|
39
|
+
return new import_session.PgliteSession(this.client, this.dialect, schema, { logger: this.options.logger });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function drizzle(client, config = {}) {
|
|
43
|
+
const dialect = new import_dialect.PgDialect();
|
|
44
|
+
let logger;
|
|
45
|
+
if (config.logger === true) {
|
|
46
|
+
logger = new import_logger.DefaultLogger();
|
|
47
|
+
} else if (config.logger !== false) {
|
|
48
|
+
logger = config.logger;
|
|
49
|
+
}
|
|
50
|
+
let schema;
|
|
51
|
+
if (config.schema) {
|
|
52
|
+
const tablesConfig = (0, import_relations.extractTablesRelationalConfig)(
|
|
53
|
+
config.schema,
|
|
54
|
+
import_relations.createTableRelationsHelpers
|
|
55
|
+
);
|
|
56
|
+
schema = {
|
|
57
|
+
fullSchema: config.schema,
|
|
58
|
+
schema: tablesConfig.tables,
|
|
59
|
+
tableNamesMap: tablesConfig.tableNamesMap
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const driver = new PgliteDriver(client, dialect, { logger });
|
|
63
|
+
const session = driver.createSession(schema);
|
|
64
|
+
return new import_db.PgDatabase(dialect, session, schema);
|
|
65
|
+
}
|
|
66
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
67
|
+
0 && (module.exports = {
|
|
68
|
+
PgliteDriver,
|
|
69
|
+
drizzle
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=driver.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pglite/driver.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport type { PgliteClient, PgliteQueryResultHKT } from './session.ts';\nimport { PgliteSession } from './session.ts';\n\nexport interface PgDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class PgliteDriver {\n\tstatic readonly [entityKind]: string = 'PgliteDriver';\n\n\tconstructor(\n\t\tprivate client: PgliteClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: PgDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): PgliteSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new PgliteSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n}\n\nexport type PgliteDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> = PgDatabase<PgliteQueryResultHKT, TSchema>;\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n\tclient: PgliteClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): PgliteDatabase<TSchema> {\n\tconst dialect = new PgDialect();\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new PgliteDriver(client, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\treturn new PgDatabase(dialect, session, schema) as PgliteDatabase<TSchema>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAE3B,oBAA8B;AAC9B,gBAA2B;AAC3B,qBAA0B;AAC1B,uBAKO;AAGP,qBAA8B;AAMvB,MAAM,aAAa;AAAA,EAGzB,YACS,QACA,SACA,UAA2B,CAAC,GACnC;AAHO;AACA;AACA;AAAA,EAET;AAAA,EAPA,QAAiB,wBAAU,IAAY;AAAA,EASvC,cACC,QACiE;AACjE,WAAO,IAAI,6BAAc,KAAK,QAAQ,KAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK,QAAQ,OAAO,CAAC;AAAA,EAC5F;AACD;AAMO,SAAS,QACf,QACA,SAAiC,CAAC,GACR;AAC1B,QAAM,UAAU,IAAI,yBAAU;AAC9B,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,4BAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,mBAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,SAAS,IAAI,aAAa,QAAQ,SAAS,EAAE,OAAO,CAAC;AAC3D,QAAM,UAAU,OAAO,cAAc,MAAM;AAC3C,SAAO,IAAI,qBAAW,SAAS,SAAS,MAAM;AAC/C;","names":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { entityKind } from "../entity.cjs";
|
|
2
|
+
import type { Logger } from "../logger.cjs";
|
|
3
|
+
import { PgDatabase } from "../pg-core/db.cjs";
|
|
4
|
+
import { PgDialect } from "../pg-core/dialect.cjs";
|
|
5
|
+
import { type RelationalSchemaConfig, type TablesRelationalConfig } from "../relations.cjs";
|
|
6
|
+
import type { DrizzleConfig } from "../utils.cjs";
|
|
7
|
+
import type { PgliteClient, PgliteQueryResultHKT } from "./session.cjs";
|
|
8
|
+
import { PgliteSession } from "./session.cjs";
|
|
9
|
+
export interface PgDriverOptions {
|
|
10
|
+
logger?: Logger;
|
|
11
|
+
}
|
|
12
|
+
export declare class PgliteDriver {
|
|
13
|
+
private client;
|
|
14
|
+
private dialect;
|
|
15
|
+
private options;
|
|
16
|
+
static readonly [entityKind]: string;
|
|
17
|
+
constructor(client: PgliteClient, dialect: PgDialect, options?: PgDriverOptions);
|
|
18
|
+
createSession(schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined): PgliteSession<Record<string, unknown>, TablesRelationalConfig>;
|
|
19
|
+
}
|
|
20
|
+
export type PgliteDatabase<TSchema extends Record<string, unknown> = Record<string, never>> = PgDatabase<PgliteQueryResultHKT, TSchema>;
|
|
21
|
+
export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(client: PgliteClient, config?: DrizzleConfig<TSchema>): PgliteDatabase<TSchema>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { entityKind } from "../entity.js";
|
|
2
|
+
import type { Logger } from "../logger.js";
|
|
3
|
+
import { PgDatabase } from "../pg-core/db.js";
|
|
4
|
+
import { PgDialect } from "../pg-core/dialect.js";
|
|
5
|
+
import { type RelationalSchemaConfig, type TablesRelationalConfig } from "../relations.js";
|
|
6
|
+
import type { DrizzleConfig } from "../utils.js";
|
|
7
|
+
import type { PgliteClient, PgliteQueryResultHKT } from "./session.js";
|
|
8
|
+
import { PgliteSession } from "./session.js";
|
|
9
|
+
export interface PgDriverOptions {
|
|
10
|
+
logger?: Logger;
|
|
11
|
+
}
|
|
12
|
+
export declare class PgliteDriver {
|
|
13
|
+
private client;
|
|
14
|
+
private dialect;
|
|
15
|
+
private options;
|
|
16
|
+
static readonly [entityKind]: string;
|
|
17
|
+
constructor(client: PgliteClient, dialect: PgDialect, options?: PgDriverOptions);
|
|
18
|
+
createSession(schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined): PgliteSession<Record<string, unknown>, TablesRelationalConfig>;
|
|
19
|
+
}
|
|
20
|
+
export type PgliteDatabase<TSchema extends Record<string, unknown> = Record<string, never>> = PgDatabase<PgliteQueryResultHKT, TSchema>;
|
|
21
|
+
export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(client: PgliteClient, config?: DrizzleConfig<TSchema>): PgliteDatabase<TSchema>;
|
package/pglite/driver.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { entityKind } from "../entity.js";
|
|
2
|
+
import { DefaultLogger } from "../logger.js";
|
|
3
|
+
import { PgDatabase } from "../pg-core/db.js";
|
|
4
|
+
import { PgDialect } from "../pg-core/dialect.js";
|
|
5
|
+
import {
|
|
6
|
+
createTableRelationsHelpers,
|
|
7
|
+
extractTablesRelationalConfig
|
|
8
|
+
} from "../relations.js";
|
|
9
|
+
import { PgliteSession } from "./session.js";
|
|
10
|
+
class PgliteDriver {
|
|
11
|
+
constructor(client, dialect, options = {}) {
|
|
12
|
+
this.client = client;
|
|
13
|
+
this.dialect = dialect;
|
|
14
|
+
this.options = options;
|
|
15
|
+
}
|
|
16
|
+
static [entityKind] = "PgliteDriver";
|
|
17
|
+
createSession(schema) {
|
|
18
|
+
return new PgliteSession(this.client, this.dialect, schema, { logger: this.options.logger });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function drizzle(client, config = {}) {
|
|
22
|
+
const dialect = new PgDialect();
|
|
23
|
+
let logger;
|
|
24
|
+
if (config.logger === true) {
|
|
25
|
+
logger = new DefaultLogger();
|
|
26
|
+
} else if (config.logger !== false) {
|
|
27
|
+
logger = config.logger;
|
|
28
|
+
}
|
|
29
|
+
let schema;
|
|
30
|
+
if (config.schema) {
|
|
31
|
+
const tablesConfig = extractTablesRelationalConfig(
|
|
32
|
+
config.schema,
|
|
33
|
+
createTableRelationsHelpers
|
|
34
|
+
);
|
|
35
|
+
schema = {
|
|
36
|
+
fullSchema: config.schema,
|
|
37
|
+
schema: tablesConfig.tables,
|
|
38
|
+
tableNamesMap: tablesConfig.tableNamesMap
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const driver = new PgliteDriver(client, dialect, { logger });
|
|
42
|
+
const session = driver.createSession(schema);
|
|
43
|
+
return new PgDatabase(dialect, session, schema);
|
|
44
|
+
}
|
|
45
|
+
export {
|
|
46
|
+
PgliteDriver,
|
|
47
|
+
drizzle
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pglite/driver.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport type { PgliteClient, PgliteQueryResultHKT } from './session.ts';\nimport { PgliteSession } from './session.ts';\n\nexport interface PgDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class PgliteDriver {\n\tstatic readonly [entityKind]: string = 'PgliteDriver';\n\n\tconstructor(\n\t\tprivate client: PgliteClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: PgDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): PgliteSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new PgliteSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n}\n\nexport type PgliteDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> = PgDatabase<PgliteQueryResultHKT, TSchema>;\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n\tclient: PgliteClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): PgliteDatabase<TSchema> {\n\tconst dialect = new PgDialect();\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new PgliteDriver(client, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\treturn new PgDatabase(dialect, session, schema) as PgliteDatabase<TSchema>;\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAE3B,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAC1B;AAAA,EACC;AAAA,EACA;AAAA,OAGM;AAGP,SAAS,qBAAqB;AAMvB,MAAM,aAAa;AAAA,EAGzB,YACS,QACA,SACA,UAA2B,CAAC,GACnC;AAHO;AACA;AACA;AAAA,EAET;AAAA,EAPA,QAAiB,UAAU,IAAY;AAAA,EASvC,cACC,QACiE;AACjE,WAAO,IAAI,cAAc,KAAK,QAAQ,KAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK,QAAQ,OAAO,CAAC;AAAA,EAC5F;AACD;AAMO,SAAS,QACf,QACA,SAAiC,CAAC,GACR;AAC1B,QAAM,UAAU,IAAI,UAAU;AAC9B,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,eAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,SAAS,IAAI,aAAa,QAAQ,SAAS,EAAE,OAAO,CAAC;AAC3D,QAAM,UAAU,OAAO,cAAc,MAAM;AAC3C,SAAO,IAAI,WAAW,SAAS,SAAS,MAAM;AAC/C;","names":[]}
|
package/pglite/index.cjs
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
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 __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
15
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
|
+
var pglite_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(pglite_exports);
|
|
18
|
+
__reExport(pglite_exports, require("./driver.cjs"), module.exports);
|
|
19
|
+
__reExport(pglite_exports, require("./session.cjs"), module.exports);
|
|
20
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
21
|
+
0 && (module.exports = {
|
|
22
|
+
...require("./driver.cjs"),
|
|
23
|
+
...require("./session.cjs")
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pglite/index.ts"],"sourcesContent":["export * from './driver.ts';\nexport * from './session.ts';\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,2BAAc,wBAAd;AACA,2BAAc,yBADd;","names":[]}
|
package/pglite/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pglite/index.ts"],"sourcesContent":["export * from './driver.ts';\nexport * from './session.ts';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;","names":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
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
|
+
var migrator_exports = {};
|
|
20
|
+
__export(migrator_exports, {
|
|
21
|
+
migrate: () => migrate
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(migrator_exports);
|
|
24
|
+
var import_migrator = require("../migrator.cjs");
|
|
25
|
+
async function migrate(db, config) {
|
|
26
|
+
const migrations = (0, import_migrator.readMigrationFiles)(config);
|
|
27
|
+
await db.dialect.migrate(migrations, db.session, config);
|
|
28
|
+
}
|
|
29
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
30
|
+
0 && (module.exports = {
|
|
31
|
+
migrate
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=migrator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pglite/migrator.ts"],"sourcesContent":["import type { MigrationConfig } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport type { PgliteDatabase } from './driver.ts';\n\nexport async function migrate<TSchema extends Record<string, unknown>>(\n\tdb: PgliteDatabase<TSchema>,\n\tconfig: string | MigrationConfig,\n) {\n\tconst migrations = readMigrationFiles(config);\n\tawait db.dialect.migrate(migrations, db.session, config);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,sBAAmC;AAGnC,eAAsB,QACrB,IACA,QACC;AACD,QAAM,iBAAa,oCAAmB,MAAM;AAC5C,QAAM,GAAG,QAAQ,QAAQ,YAAY,GAAG,SAAS,MAAM;AACxD;","names":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { readMigrationFiles } from "../migrator.js";
|
|
2
|
+
async function migrate(db, config) {
|
|
3
|
+
const migrations = readMigrationFiles(config);
|
|
4
|
+
await db.dialect.migrate(migrations, db.session, config);
|
|
5
|
+
}
|
|
6
|
+
export {
|
|
7
|
+
migrate
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=migrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pglite/migrator.ts"],"sourcesContent":["import type { MigrationConfig } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport type { PgliteDatabase } from './driver.ts';\n\nexport async function migrate<TSchema extends Record<string, unknown>>(\n\tdb: PgliteDatabase<TSchema>,\n\tconfig: string | MigrationConfig,\n) {\n\tconst migrations = readMigrationFiles(config);\n\tawait db.dialect.migrate(migrations, db.session, config);\n}\n"],"mappings":"AACA,SAAS,0BAA0B;AAGnC,eAAsB,QACrB,IACA,QACC;AACD,QAAM,aAAa,mBAAmB,MAAM;AAC5C,QAAM,GAAG,QAAQ,QAAQ,YAAY,GAAG,SAAS,MAAM;AACxD;","names":[]}
|
|
@@ -0,0 +1,145 @@
|
|
|
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
|
+
var session_exports = {};
|
|
20
|
+
__export(session_exports, {
|
|
21
|
+
PglitePreparedQuery: () => PglitePreparedQuery,
|
|
22
|
+
PgliteSession: () => PgliteSession,
|
|
23
|
+
PgliteTransaction: () => PgliteTransaction
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(session_exports);
|
|
26
|
+
var import_entity = require("../entity.cjs");
|
|
27
|
+
var import_logger = require("../logger.cjs");
|
|
28
|
+
var import_pg_core = require("../pg-core/index.cjs");
|
|
29
|
+
var import_session = require("../pg-core/session.cjs");
|
|
30
|
+
var import_sql = require("../sql/sql.cjs");
|
|
31
|
+
var import_utils = require("../utils.cjs");
|
|
32
|
+
var import_pglite = require("@electric-sql/pglite");
|
|
33
|
+
class PglitePreparedQuery extends import_session.PgPreparedQuery {
|
|
34
|
+
constructor(client, queryString, params, logger, fields, name, _isResponseInArrayMode, customResultMapper) {
|
|
35
|
+
super({ sql: queryString, params });
|
|
36
|
+
this.client = client;
|
|
37
|
+
this.queryString = queryString;
|
|
38
|
+
this.params = params;
|
|
39
|
+
this.logger = logger;
|
|
40
|
+
this.fields = fields;
|
|
41
|
+
this._isResponseInArrayMode = _isResponseInArrayMode;
|
|
42
|
+
this.customResultMapper = customResultMapper;
|
|
43
|
+
this.rawQueryConfig = {
|
|
44
|
+
rowMode: "object",
|
|
45
|
+
parsers: {
|
|
46
|
+
[import_pglite.types.TIMESTAMP]: (value) => value,
|
|
47
|
+
[import_pglite.types.TIMESTAMPTZ]: (value) => value,
|
|
48
|
+
[import_pglite.types.INTERVAL]: (value) => value,
|
|
49
|
+
[import_pglite.types.DATE]: (value) => value
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
this.queryConfig = {
|
|
53
|
+
rowMode: "array",
|
|
54
|
+
parsers: {
|
|
55
|
+
[import_pglite.types.TIMESTAMP]: (value) => value,
|
|
56
|
+
[import_pglite.types.TIMESTAMPTZ]: (value) => value,
|
|
57
|
+
[import_pglite.types.INTERVAL]: (value) => value,
|
|
58
|
+
[import_pglite.types.DATE]: (value) => value
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
static [import_entity.entityKind] = "PglitePreparedQuery";
|
|
63
|
+
rawQueryConfig;
|
|
64
|
+
queryConfig;
|
|
65
|
+
async execute(placeholderValues = {}) {
|
|
66
|
+
const params = (0, import_sql.fillPlaceholders)(this.params, placeholderValues);
|
|
67
|
+
this.logger.logQuery(this.queryString, params);
|
|
68
|
+
const { fields, rawQueryConfig, client, queryConfig, joinsNotNullableMap, customResultMapper, queryString } = this;
|
|
69
|
+
if (!fields && !customResultMapper) {
|
|
70
|
+
return client.query(queryString, params, rawQueryConfig);
|
|
71
|
+
}
|
|
72
|
+
const result = await client.query(queryString, params, queryConfig);
|
|
73
|
+
return customResultMapper ? customResultMapper(result.rows) : result.rows.map((row) => (0, import_utils.mapResultRow)(fields, row, joinsNotNullableMap));
|
|
74
|
+
}
|
|
75
|
+
all(placeholderValues = {}) {
|
|
76
|
+
const params = (0, import_sql.fillPlaceholders)(this.params, placeholderValues);
|
|
77
|
+
this.logger.logQuery(this.queryString, params);
|
|
78
|
+
return this.client.query(this.queryString, params, this.rawQueryConfig).then((result) => result.rows);
|
|
79
|
+
}
|
|
80
|
+
/** @internal */
|
|
81
|
+
isResponseInArrayMode() {
|
|
82
|
+
return this._isResponseInArrayMode;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
class PgliteSession extends import_session.PgSession {
|
|
86
|
+
constructor(client, dialect, schema, options = {}) {
|
|
87
|
+
super(dialect);
|
|
88
|
+
this.client = client;
|
|
89
|
+
this.schema = schema;
|
|
90
|
+
this.options = options;
|
|
91
|
+
this.logger = options.logger ?? new import_logger.NoopLogger();
|
|
92
|
+
}
|
|
93
|
+
static [import_entity.entityKind] = "PgliteSession";
|
|
94
|
+
logger;
|
|
95
|
+
prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper) {
|
|
96
|
+
return new PglitePreparedQuery(
|
|
97
|
+
this.client,
|
|
98
|
+
query.sql,
|
|
99
|
+
query.params,
|
|
100
|
+
this.logger,
|
|
101
|
+
fields,
|
|
102
|
+
name,
|
|
103
|
+
isResponseInArrayMode,
|
|
104
|
+
customResultMapper
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
async transaction(transaction, config) {
|
|
108
|
+
return this.client.transaction(async (client) => {
|
|
109
|
+
const session = new PgliteSession(
|
|
110
|
+
client,
|
|
111
|
+
this.dialect,
|
|
112
|
+
this.schema,
|
|
113
|
+
this.options
|
|
114
|
+
);
|
|
115
|
+
const tx = new PgliteTransaction(this.dialect, session, this.schema);
|
|
116
|
+
if (config) {
|
|
117
|
+
await tx.setTransaction(config);
|
|
118
|
+
}
|
|
119
|
+
return transaction(tx);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
class PgliteTransaction extends import_pg_core.PgTransaction {
|
|
124
|
+
static [import_entity.entityKind] = "PgliteTransaction";
|
|
125
|
+
async transaction(transaction) {
|
|
126
|
+
const savepointName = `sp${this.nestedIndex + 1}`;
|
|
127
|
+
const tx = new PgliteTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);
|
|
128
|
+
await tx.execute(import_sql.sql.raw(`savepoint ${savepointName}`));
|
|
129
|
+
try {
|
|
130
|
+
const result = await transaction(tx);
|
|
131
|
+
await tx.execute(import_sql.sql.raw(`release savepoint ${savepointName}`));
|
|
132
|
+
return result;
|
|
133
|
+
} catch (err) {
|
|
134
|
+
await tx.execute(import_sql.sql.raw(`rollback to savepoint ${savepointName}`));
|
|
135
|
+
throw err;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
140
|
+
0 && (module.exports = {
|
|
141
|
+
PglitePreparedQuery,
|
|
142
|
+
PgliteSession,
|
|
143
|
+
PgliteTransaction
|
|
144
|
+
});
|
|
145
|
+
//# sourceMappingURL=session.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pglite/session.ts"],"sourcesContent":["import type { PGlite, QueryOptions, Results, Row, Transaction } from '@electric-sql/pglite';\nimport { entityKind } from '~/entity.ts';\nimport { type Logger, NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from '~/pg-core/session.ts';\nimport { PgPreparedQuery, PgSession } from '~/pg-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nimport { types } from '@electric-sql/pglite';\n\nexport type PgliteClient = PGlite;\n\nexport class PglitePreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic readonly [entityKind]: string = 'PglitePreparedQuery';\n\n\tprivate rawQueryConfig: QueryOptions;\n\tprivate queryConfig: QueryOptions;\n\n\tconstructor(\n\t\tprivate client: PgliteClient | Transaction,\n\t\tprivate queryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper({ sql: queryString, params });\n\t\tthis.rawQueryConfig = {\n\t\t\trowMode: 'object',\n\t\t\tparsers: {\n\t\t\t\t[types.TIMESTAMP]: (value) => value,\n\t\t\t\t[types.TIMESTAMPTZ]: (value) => value,\n\t\t\t\t[types.INTERVAL]: (value) => value,\n\t\t\t\t[types.DATE]: (value) => value,\n\t\t\t},\n\t\t};\n\t\tthis.queryConfig = {\n\t\t\trowMode: 'array',\n\t\t\tparsers: {\n\t\t\t\t[types.TIMESTAMP]: (value) => value,\n\t\t\t\t[types.TIMESTAMPTZ]: (value) => value,\n\t\t\t\t[types.INTERVAL]: (value) => value,\n\t\t\t\t[types.DATE]: (value) => value,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.queryString, params);\n\n\t\tconst { fields, rawQueryConfig, client, queryConfig, joinsNotNullableMap, customResultMapper, queryString } = this;\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn client.query<any[]>(queryString, params, rawQueryConfig);\n\t\t}\n\n\t\tconst result = await client.query<any[][]>(queryString, params, queryConfig);\n\n\t\treturn customResultMapper\n\t\t\t? customResultMapper(result.rows)\n\t\t\t: result.rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tthis.logger.logQuery(this.queryString, params);\n\t\treturn this.client.query(this.queryString, params, this.rawQueryConfig).then((result) => result.rows);\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport interface PgliteSessionOptions {\n\tlogger?: Logger;\n}\n\nexport class PgliteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<PgliteQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'PgliteSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: PgliteClient | Transaction,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: PgliteSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new PglitePreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tname,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig | undefined,\n\t): Promise<T> {\n\t\treturn (this.client as PgliteClient).transaction(async (client) => {\n\t\t\tconst session = new PgliteSession<TFullSchema, TSchema>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t);\n\t\t\tconst tx = new PgliteTransaction(this.dialect, session, this.schema);\n\t\t\tif (config) {\n\t\t\t\tawait tx.setTransaction(config);\n\t\t\t}\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t}\n}\n\nexport class PgliteTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<PgliteQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'PgliteTransaction';\n\n\toverride async transaction<T>(transaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new PgliteTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport interface PgliteQueryResultHKT extends QueryResultHKT {\n\ttype: Results<Assume<this['row'], Row>>;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { PGlite, Results, Row, Transaction } from '@electric-sql/pglite';
|
|
2
|
+
import { entityKind } from "../entity.cjs";
|
|
3
|
+
import { type Logger } from "../logger.cjs";
|
|
4
|
+
import type { PgDialect } from "../pg-core/dialect.cjs";
|
|
5
|
+
import { PgTransaction } from "../pg-core/index.cjs";
|
|
6
|
+
import type { SelectedFieldsOrdered } from "../pg-core/query-builders/select.types.cjs";
|
|
7
|
+
import type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from "../pg-core/session.cjs";
|
|
8
|
+
import { PgPreparedQuery, PgSession } from "../pg-core/session.cjs";
|
|
9
|
+
import type { RelationalSchemaConfig, TablesRelationalConfig } from "../relations.cjs";
|
|
10
|
+
import { type Query } from "../sql/sql.cjs";
|
|
11
|
+
import { type Assume } from "../utils.cjs";
|
|
12
|
+
export type PgliteClient = PGlite;
|
|
13
|
+
export declare class PglitePreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {
|
|
14
|
+
private client;
|
|
15
|
+
private queryString;
|
|
16
|
+
private params;
|
|
17
|
+
private logger;
|
|
18
|
+
private fields;
|
|
19
|
+
private _isResponseInArrayMode;
|
|
20
|
+
private customResultMapper?;
|
|
21
|
+
static readonly [entityKind]: string;
|
|
22
|
+
private rawQueryConfig;
|
|
23
|
+
private queryConfig;
|
|
24
|
+
constructor(client: PgliteClient | Transaction, queryString: string, params: unknown[], logger: Logger, fields: SelectedFieldsOrdered | undefined, name: string | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: unknown[][]) => T['execute']) | undefined);
|
|
25
|
+
execute(placeholderValues?: Record<string, unknown> | undefined): Promise<T['execute']>;
|
|
26
|
+
all(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']>;
|
|
27
|
+
}
|
|
28
|
+
export interface PgliteSessionOptions {
|
|
29
|
+
logger?: Logger;
|
|
30
|
+
}
|
|
31
|
+
export declare class PgliteSession<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends PgSession<PgliteQueryResultHKT, TFullSchema, TSchema> {
|
|
32
|
+
private client;
|
|
33
|
+
private schema;
|
|
34
|
+
private options;
|
|
35
|
+
static readonly [entityKind]: string;
|
|
36
|
+
private logger;
|
|
37
|
+
constructor(client: PgliteClient | Transaction, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: PgliteSessionOptions);
|
|
38
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
|
|
39
|
+
transaction<T>(transaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>, config?: PgTransactionConfig | undefined): Promise<T>;
|
|
40
|
+
}
|
|
41
|
+
export declare class PgliteTransaction<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends PgTransaction<PgliteQueryResultHKT, TFullSchema, TSchema> {
|
|
42
|
+
static readonly [entityKind]: string;
|
|
43
|
+
transaction<T>(transaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T>;
|
|
44
|
+
}
|
|
45
|
+
export interface PgliteQueryResultHKT extends QueryResultHKT {
|
|
46
|
+
type: Results<Assume<this['row'], Row>>;
|
|
47
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { PGlite, Results, Row, Transaction } from '@electric-sql/pglite';
|
|
2
|
+
import { entityKind } from "../entity.js";
|
|
3
|
+
import { type Logger } from "../logger.js";
|
|
4
|
+
import type { PgDialect } from "../pg-core/dialect.js";
|
|
5
|
+
import { PgTransaction } from "../pg-core/index.js";
|
|
6
|
+
import type { SelectedFieldsOrdered } from "../pg-core/query-builders/select.types.js";
|
|
7
|
+
import type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from "../pg-core/session.js";
|
|
8
|
+
import { PgPreparedQuery, PgSession } from "../pg-core/session.js";
|
|
9
|
+
import type { RelationalSchemaConfig, TablesRelationalConfig } from "../relations.js";
|
|
10
|
+
import { type Query } from "../sql/sql.js";
|
|
11
|
+
import { type Assume } from "../utils.js";
|
|
12
|
+
export type PgliteClient = PGlite;
|
|
13
|
+
export declare class PglitePreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {
|
|
14
|
+
private client;
|
|
15
|
+
private queryString;
|
|
16
|
+
private params;
|
|
17
|
+
private logger;
|
|
18
|
+
private fields;
|
|
19
|
+
private _isResponseInArrayMode;
|
|
20
|
+
private customResultMapper?;
|
|
21
|
+
static readonly [entityKind]: string;
|
|
22
|
+
private rawQueryConfig;
|
|
23
|
+
private queryConfig;
|
|
24
|
+
constructor(client: PgliteClient | Transaction, queryString: string, params: unknown[], logger: Logger, fields: SelectedFieldsOrdered | undefined, name: string | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: unknown[][]) => T['execute']) | undefined);
|
|
25
|
+
execute(placeholderValues?: Record<string, unknown> | undefined): Promise<T['execute']>;
|
|
26
|
+
all(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']>;
|
|
27
|
+
}
|
|
28
|
+
export interface PgliteSessionOptions {
|
|
29
|
+
logger?: Logger;
|
|
30
|
+
}
|
|
31
|
+
export declare class PgliteSession<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends PgSession<PgliteQueryResultHKT, TFullSchema, TSchema> {
|
|
32
|
+
private client;
|
|
33
|
+
private schema;
|
|
34
|
+
private options;
|
|
35
|
+
static readonly [entityKind]: string;
|
|
36
|
+
private logger;
|
|
37
|
+
constructor(client: PgliteClient | Transaction, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: PgliteSessionOptions);
|
|
38
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
|
|
39
|
+
transaction<T>(transaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>, config?: PgTransactionConfig | undefined): Promise<T>;
|
|
40
|
+
}
|
|
41
|
+
export declare class PgliteTransaction<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends PgTransaction<PgliteQueryResultHKT, TFullSchema, TSchema> {
|
|
42
|
+
static readonly [entityKind]: string;
|
|
43
|
+
transaction<T>(transaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T>;
|
|
44
|
+
}
|
|
45
|
+
export interface PgliteQueryResultHKT extends QueryResultHKT {
|
|
46
|
+
type: Results<Assume<this['row'], Row>>;
|
|
47
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { entityKind } from "../entity.js";
|
|
2
|
+
import { NoopLogger } from "../logger.js";
|
|
3
|
+
import { PgTransaction } from "../pg-core/index.js";
|
|
4
|
+
import { PgPreparedQuery, PgSession } from "../pg-core/session.js";
|
|
5
|
+
import { fillPlaceholders, sql } from "../sql/sql.js";
|
|
6
|
+
import { mapResultRow } from "../utils.js";
|
|
7
|
+
import { types } from "@electric-sql/pglite";
|
|
8
|
+
class PglitePreparedQuery extends PgPreparedQuery {
|
|
9
|
+
constructor(client, queryString, params, logger, fields, name, _isResponseInArrayMode, customResultMapper) {
|
|
10
|
+
super({ sql: queryString, params });
|
|
11
|
+
this.client = client;
|
|
12
|
+
this.queryString = queryString;
|
|
13
|
+
this.params = params;
|
|
14
|
+
this.logger = logger;
|
|
15
|
+
this.fields = fields;
|
|
16
|
+
this._isResponseInArrayMode = _isResponseInArrayMode;
|
|
17
|
+
this.customResultMapper = customResultMapper;
|
|
18
|
+
this.rawQueryConfig = {
|
|
19
|
+
rowMode: "object",
|
|
20
|
+
parsers: {
|
|
21
|
+
[types.TIMESTAMP]: (value) => value,
|
|
22
|
+
[types.TIMESTAMPTZ]: (value) => value,
|
|
23
|
+
[types.INTERVAL]: (value) => value,
|
|
24
|
+
[types.DATE]: (value) => value
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
this.queryConfig = {
|
|
28
|
+
rowMode: "array",
|
|
29
|
+
parsers: {
|
|
30
|
+
[types.TIMESTAMP]: (value) => value,
|
|
31
|
+
[types.TIMESTAMPTZ]: (value) => value,
|
|
32
|
+
[types.INTERVAL]: (value) => value,
|
|
33
|
+
[types.DATE]: (value) => value
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
static [entityKind] = "PglitePreparedQuery";
|
|
38
|
+
rawQueryConfig;
|
|
39
|
+
queryConfig;
|
|
40
|
+
async execute(placeholderValues = {}) {
|
|
41
|
+
const params = fillPlaceholders(this.params, placeholderValues);
|
|
42
|
+
this.logger.logQuery(this.queryString, params);
|
|
43
|
+
const { fields, rawQueryConfig, client, queryConfig, joinsNotNullableMap, customResultMapper, queryString } = this;
|
|
44
|
+
if (!fields && !customResultMapper) {
|
|
45
|
+
return client.query(queryString, params, rawQueryConfig);
|
|
46
|
+
}
|
|
47
|
+
const result = await client.query(queryString, params, queryConfig);
|
|
48
|
+
return customResultMapper ? customResultMapper(result.rows) : result.rows.map((row) => mapResultRow(fields, row, joinsNotNullableMap));
|
|
49
|
+
}
|
|
50
|
+
all(placeholderValues = {}) {
|
|
51
|
+
const params = fillPlaceholders(this.params, placeholderValues);
|
|
52
|
+
this.logger.logQuery(this.queryString, params);
|
|
53
|
+
return this.client.query(this.queryString, params, this.rawQueryConfig).then((result) => result.rows);
|
|
54
|
+
}
|
|
55
|
+
/** @internal */
|
|
56
|
+
isResponseInArrayMode() {
|
|
57
|
+
return this._isResponseInArrayMode;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
class PgliteSession extends PgSession {
|
|
61
|
+
constructor(client, dialect, schema, options = {}) {
|
|
62
|
+
super(dialect);
|
|
63
|
+
this.client = client;
|
|
64
|
+
this.schema = schema;
|
|
65
|
+
this.options = options;
|
|
66
|
+
this.logger = options.logger ?? new NoopLogger();
|
|
67
|
+
}
|
|
68
|
+
static [entityKind] = "PgliteSession";
|
|
69
|
+
logger;
|
|
70
|
+
prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper) {
|
|
71
|
+
return new PglitePreparedQuery(
|
|
72
|
+
this.client,
|
|
73
|
+
query.sql,
|
|
74
|
+
query.params,
|
|
75
|
+
this.logger,
|
|
76
|
+
fields,
|
|
77
|
+
name,
|
|
78
|
+
isResponseInArrayMode,
|
|
79
|
+
customResultMapper
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
async transaction(transaction, config) {
|
|
83
|
+
return this.client.transaction(async (client) => {
|
|
84
|
+
const session = new PgliteSession(
|
|
85
|
+
client,
|
|
86
|
+
this.dialect,
|
|
87
|
+
this.schema,
|
|
88
|
+
this.options
|
|
89
|
+
);
|
|
90
|
+
const tx = new PgliteTransaction(this.dialect, session, this.schema);
|
|
91
|
+
if (config) {
|
|
92
|
+
await tx.setTransaction(config);
|
|
93
|
+
}
|
|
94
|
+
return transaction(tx);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
class PgliteTransaction extends PgTransaction {
|
|
99
|
+
static [entityKind] = "PgliteTransaction";
|
|
100
|
+
async transaction(transaction) {
|
|
101
|
+
const savepointName = `sp${this.nestedIndex + 1}`;
|
|
102
|
+
const tx = new PgliteTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);
|
|
103
|
+
await tx.execute(sql.raw(`savepoint ${savepointName}`));
|
|
104
|
+
try {
|
|
105
|
+
const result = await transaction(tx);
|
|
106
|
+
await tx.execute(sql.raw(`release savepoint ${savepointName}`));
|
|
107
|
+
return result;
|
|
108
|
+
} catch (err) {
|
|
109
|
+
await tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));
|
|
110
|
+
throw err;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
PglitePreparedQuery,
|
|
116
|
+
PgliteSession,
|
|
117
|
+
PgliteTransaction
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pglite/session.ts"],"sourcesContent":["import type { PGlite, QueryOptions, Results, Row, Transaction } from '@electric-sql/pglite';\nimport { entityKind } from '~/entity.ts';\nimport { type Logger, NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from '~/pg-core/session.ts';\nimport { PgPreparedQuery, PgSession } from '~/pg-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nimport { types } from '@electric-sql/pglite';\n\nexport type PgliteClient = PGlite;\n\nexport class PglitePreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic readonly [entityKind]: string = 'PglitePreparedQuery';\n\n\tprivate rawQueryConfig: QueryOptions;\n\tprivate queryConfig: QueryOptions;\n\n\tconstructor(\n\t\tprivate client: PgliteClient | Transaction,\n\t\tprivate queryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper({ sql: queryString, params });\n\t\tthis.rawQueryConfig = {\n\t\t\trowMode: 'object',\n\t\t\tparsers: {\n\t\t\t\t[types.TIMESTAMP]: (value) => value,\n\t\t\t\t[types.TIMESTAMPTZ]: (value) => value,\n\t\t\t\t[types.INTERVAL]: (value) => value,\n\t\t\t\t[types.DATE]: (value) => value,\n\t\t\t},\n\t\t};\n\t\tthis.queryConfig = {\n\t\t\trowMode: 'array',\n\t\t\tparsers: {\n\t\t\t\t[types.TIMESTAMP]: (value) => value,\n\t\t\t\t[types.TIMESTAMPTZ]: (value) => value,\n\t\t\t\t[types.INTERVAL]: (value) => value,\n\t\t\t\t[types.DATE]: (value) => value,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.queryString, params);\n\n\t\tconst { fields, rawQueryConfig, client, queryConfig, joinsNotNullableMap, customResultMapper, queryString } = this;\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn client.query<any[]>(queryString, params, rawQueryConfig);\n\t\t}\n\n\t\tconst result = await client.query<any[][]>(queryString, params, queryConfig);\n\n\t\treturn customResultMapper\n\t\t\t? customResultMapper(result.rows)\n\t\t\t: result.rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tthis.logger.logQuery(this.queryString, params);\n\t\treturn this.client.query(this.queryString, params, this.rawQueryConfig).then((result) => result.rows);\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport interface PgliteSessionOptions {\n\tlogger?: Logger;\n}\n\nexport class PgliteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<PgliteQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'PgliteSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: PgliteClient | Transaction,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: PgliteSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new PglitePreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tname,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig | undefined,\n\t): Promise<T> {\n\t\treturn (this.client as PgliteClient).transaction(async (client) => {\n\t\t\tconst session = new PgliteSession<TFullSchema, TSchema>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t);\n\t\t\tconst tx = new PgliteTransaction(this.dialect, session, this.schema);\n\t\t\tif (config) {\n\t\t\t\tawait tx.setTransaction(config);\n\t\t\t}\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t}\n}\n\nexport class PgliteTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<PgliteQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'PgliteTransaction';\n\n\toverride async transaction<T>(transaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new PgliteTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport interface PgliteQueryResultHKT extends QueryResultHKT {\n\ttype: Results<Assume<this['row'], Row>>;\n}\n"],"mappings":"AACA,SAAS,kBAAkB;AAC3B,SAAsB,kBAAkB;AAExC,SAAS,qBAAqB;AAG9B,SAAS,iBAAiB,iBAAiB;AAE3C,SAAS,kBAA8B,WAAW;AAClD,SAAsB,oBAAoB;AAE1C,SAAS,aAAa;AAIf,MAAM,4BAA2D,gBAAmB;AAAA,EAM1F,YACS,QACA,aACA,QACA,QACA,QACR,MACQ,wBACA,oBACP;AACD,UAAM,EAAE,KAAK,aAAa,OAAO,CAAC;AAT1B;AACA;AACA;AACA;AACA;AAEA;AACA;AAGR,SAAK,iBAAiB;AAAA,MACrB,SAAS;AAAA,MACT,SAAS;AAAA,QACR,CAAC,MAAM,SAAS,GAAG,CAAC,UAAU;AAAA,QAC9B,CAAC,MAAM,WAAW,GAAG,CAAC,UAAU;AAAA,QAChC,CAAC,MAAM,QAAQ,GAAG,CAAC,UAAU;AAAA,QAC7B,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU;AAAA,MAC1B;AAAA,IACD;AACA,SAAK,cAAc;AAAA,MAClB,SAAS;AAAA,MACT,SAAS;AAAA,QACR,CAAC,MAAM,SAAS,GAAG,CAAC,UAAU;AAAA,QAC9B,CAAC,MAAM,WAAW,GAAG,CAAC,UAAU;AAAA,QAChC,CAAC,MAAM,QAAQ,GAAG,CAAC,UAAU;AAAA,QAC7B,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU;AAAA,MAC1B;AAAA,IACD;AAAA,EACD;AAAA,EAlCA,QAAiB,UAAU,IAAY;AAAA,EAE/B;AAAA,EACA;AAAA,EAiCR,MAAM,QAAQ,oBAAyD,CAAC,GAA0B;AACjG,UAAM,SAAS,iBAAiB,KAAK,QAAQ,iBAAiB;AAE9D,SAAK,OAAO,SAAS,KAAK,aAAa,MAAM;AAE7C,UAAM,EAAE,QAAQ,gBAAgB,QAAQ,aAAa,qBAAqB,oBAAoB,YAAY,IAAI;AAE9G,QAAI,CAAC,UAAU,CAAC,oBAAoB;AACnC,aAAO,OAAO,MAAa,aAAa,QAAQ,cAAc;AAAA,IAC/D;AAEA,UAAM,SAAS,MAAM,OAAO,MAAe,aAAa,QAAQ,WAAW;AAE3E,WAAO,qBACJ,mBAAmB,OAAO,IAAI,IAC9B,OAAO,KAAK,IAAI,CAAC,QAAQ,aAA2B,QAAS,KAAK,mBAAmB,CAAC;AAAA,EAC1F;AAAA,EAEA,IAAI,oBAAyD,CAAC,GAAsB;AACnF,UAAM,SAAS,iBAAiB,KAAK,QAAQ,iBAAiB;AAC9D,SAAK,OAAO,SAAS,KAAK,aAAa,MAAM;AAC7C,WAAO,KAAK,OAAO,MAAM,KAAK,aAAa,QAAQ,KAAK,cAAc,EAAE,KAAK,CAAC,WAAW,OAAO,IAAI;AAAA,EACrG;AAAA;AAAA,EAGA,wBAAiC;AAChC,WAAO,KAAK;AAAA,EACb;AACD;AAMO,MAAM,sBAGH,UAAsD;AAAA,EAK/D,YACS,QACR,SACQ,QACA,UAAgC,CAAC,GACxC;AACD,UAAM,OAAO;AALL;AAEA;AACA;AAGR,SAAK,SAAS,QAAQ,UAAU,IAAI,WAAW;AAAA,EAChD;AAAA,EAZA,QAAiB,UAAU,IAAY;AAAA,EAE/B;AAAA,EAYR,aACC,OACA,QACA,MACA,uBACA,oBACqB;AACrB,WAAO,IAAI;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAe,YACd,aACA,QACa;AACb,WAAQ,KAAK,OAAwB,YAAY,OAAO,WAAW;AAClE,YAAM,UAAU,IAAI;AAAA,QACnB;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AACA,YAAM,KAAK,IAAI,kBAAkB,KAAK,SAAS,SAAS,KAAK,MAAM;AACnE,UAAI,QAAQ;AACX,cAAM,GAAG,eAAe,MAAM;AAAA,MAC/B;AACA,aAAO,YAAY,EAAE;AAAA,IACtB,CAAC;AAAA,EACF;AACD;AAEO,MAAM,0BAGH,cAA0D;AAAA,EACnE,QAAiB,UAAU,IAAY;AAAA,EAEvC,MAAe,YAAe,aAAsF;AACnH,UAAM,gBAAgB,KAAK,KAAK,cAAc,CAAC;AAC/C,UAAM,KAAK,IAAI,kBAAkB,KAAK,SAAS,KAAK,SAAS,KAAK,QAAQ,KAAK,cAAc,CAAC;AAC9F,UAAM,GAAG,QAAQ,IAAI,IAAI,aAAa,aAAa,EAAE,CAAC;AACtD,QAAI;AACH,YAAM,SAAS,MAAM,YAAY,EAAE;AACnC,YAAM,GAAG,QAAQ,IAAI,IAAI,qBAAqB,aAAa,EAAE,CAAC;AAC9D,aAAO;AAAA,IACR,SAAS,KAAK;AACb,YAAM,GAAG,QAAQ,IAAI,IAAI,yBAAyB,aAAa,EAAE,CAAC;AAClE,YAAM;AAAA,IACP;AAAA,EACD;AACD;","names":[]}
|
package/version.cjs
CHANGED
package/version.d.cts
CHANGED
package/version.d.ts
CHANGED
package/version.js
CHANGED