@typesql/postgres 0.1.5 → 0.2.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @typesql/postgres
2
2
 
3
+ ## 0.2.1
4
+
5
+ ### Patch Changes
6
+
7
+ - The README is shorter: install, one example and links to the docs site, which now has the details it used to repeat.
8
+
9
+ - Updated dependencies:
10
+ - @typesql/core@0.6.0
11
+
12
+ ## 0.2.0
13
+
14
+ ### Minor Changes
15
+
16
+ - `NoResultError`, `Executor` and `TransactionalSql` are no longer re-exported (from `@typesql/drizzle` also `Sql`, `Query`, `RowType`, `ParamsType`, `DefaultTypeMap` and `TypeMap`); import them from `@typesql/core`.
17
+
18
+ - `createBigIntSql(sql)` is replaced by `createSql(sql, { bigint: true })`, and `PostgresJsBigIntSql<DB, Keys>` by `PostgresJsSql<DB, Keys, PostgresJsBigIntTypeMap>`.
19
+
20
+ ### Patch Changes
21
+
22
+ - The README's TypeScript Playground example uses `createSql(sql, { bigint: true })` instead of the removed `createBigIntSql`.
23
+
24
+ - Updated dependencies:
25
+ - @typesql/core@0.5.0
26
+
3
27
  ## 0.1.5
4
28
 
5
29
  ### Patch Changes
package/README.md CHANGED
@@ -1,16 +1,13 @@
1
1
  # @typesql/postgres
2
2
 
3
- [postgres.js](https://github.com/porsager/postgres) (`postgres` 3.x) adapter for
4
- [`@typesql/core`](https://www.npmjs.com/package/@typesql/core): a `createSql` bound to the type
5
- map of postgres.js' default parsers, whose queries run on your `sql` instance and return rows
6
- typed from the SQL.
3
+ Run [TypeSQL](https://www.npmjs.com/package/@typesql/core) queries on [postgres.js](https://github.com/porsager/postgres) (`postgres` 3.x), with rows typed the way postgres.js returns them.
4
+
5
+ ## Install
7
6
 
8
7
  ```sh
9
- pnpm add @typesql/core @typesql/postgres postgres
8
+ npm install @typesql/core @typesql/postgres postgres
10
9
  ```
11
10
 
12
- [Open an example in the TypeScript Playground](https://www.typescriptlang.org/play/#code/PTAEBUE8AcFMGUCKAZUB3AlgFwBamgPYDOWA5gE6xEB0AVkaABQACWMVAjgDbCEkVUAlNVCIArrHIYqocmIB26bHiLdqCogEMAZrEZZYADywAaUADdNXCUUFnN8gCayCaIgCgQoTZVBs4zgBGkOg4mlj4xGSUNPT4PkRUAFygGPJYABypDJqgJFLypGYE5N6ggRikaRGYuKAAQpUAkunx5ERppKAE8tTuGAC2hOQR-rCgAN6g8NygAL6g2uQEA6AARHzRVGsA3P1DJRFTAMaU4bCNpC1YM1xmp7Dnt-OLy6trrOyqPJsCRLv7YajdiTUAAYQId1AAHFYPJJOdHGYAHJiLhcTSBLjjBZLFbrT5wb7AY4lWAA-rpSTaTTHcYAEXqk3coFAYkS7RSExZrNSjhSsPh5ERAB41tUACxrAB8e15oFgA00GC4KQhXDFBmMMrlvMcGCI0AxkAA+vJNANYClUejMdjNUYsDqeayHoiTeEBXCEQZHJrBlQsBboFgAF7O1lzXWbIhcl18r1C0Xi9IZCO8zRiXAlE0YfngyFiyXp1lYbDYtWFtZap2y+NB0ixgsa6uOgDaAF101H3HN3O5HLBjhjfKT5CRQI5AilbjtQF5fjFGBson8kiAuARjlYcFFgJpoNA1oJ3GOJ99QABeUBugy3EWM6WMKeCPannoTmNX7xoZURb6MAABvAACiyAgWC4B8mYZZYNiMGaI2oAAGIAEoAPIALKRCQDAAOoABIgahIGgAAJAAjN+ACCyIAJpMA2tiAWYazfMe1BGEOWZ6K+nhgLyAB6AD8-ZeOhii5GO8LHGWPRKHUgFjE2UwVFU6QpIuVDUJc1zzCxqSpt4Tg3gQChYIwABUgimZa5S0gA1t4DBqdUfSDsOPjjGeERTpcM7cCKqmVNUKSua0cx1j55SVN+t4XM06T3o+z6BJcfHRaS5kMNemi-tgMWkEBoHgZB3hZru5C5kipnmVZNnUfAoCKGhWE4VgDDQhhACqAAKDQMZm2ZVXmgHCFxxw8YwfFeEJon8XkahYMK460nJigGotXDUIEsDqXOWCGNQy0OFoskYPJm25Fo5iwIQbnuHlf5bcdK1netjCaEQkDyMcjGGDZl7SsyrJPQVh1AX19LUeApFfqBUGwdi35iIekj6OWsA2YRxGkUNlXVd+lEGQA7ONhjcQY026tFii5floyGEB9JgSBsMoRh2FfjjJE3j4+rmlw2CQPoiG2N+AAMY2cRTk0GBCdV8ays2siJvZ8e4AHAazZV5hzbXc0RvNMaAzDA8TrHsa+85gJIyzkCkJtm34mgOTIuQ1p27hAA) <!-- playground:postgres --> to hover the types and edit the SQL, with nothing to install.
13
-
14
11
  ## Usage
15
12
 
16
13
  ```ts
@@ -18,64 +15,25 @@ import postgres from "postgres";
18
15
  import { createSql } from "@typesql/postgres";
19
16
  import type { DB } from "./schema";
20
17
 
21
- const db = postgres(process.env.DATABASE_URL!);
22
- const sql = createSql<DB>(db); // PostgresJsTypeMap
18
+ const sql = createSql<DB>(postgres(process.env.DATABASE_URL!));
23
19
 
24
20
  const posts = await sql("SELECT id, title FROM posts WHERE author_id = $1", 1).execute();
25
- // { id: string; title: string }[] int8 is a string by default
21
+ // { id: string; title: string }[] (int8 is a string by default)
26
22
 
27
23
  await sql.transaction(async (tx) => {
28
24
  await tx("UPDATE posts SET title = upper(title) WHERE author_id = $1", 1).execute();
29
25
  });
30
26
  ```
31
27
 
32
- With bigint parsing enabled on the connection, use `createBigIntSql`:
33
-
34
- ```ts
35
- import { createBigIntSql } from "@typesql/postgres";
36
-
37
- const dbBig = postgres(process.env.DATABASE_URL!, { types: { bigint: postgres.BigInt } });
38
- const big = createBigIntSql<DB>(dbBig); // PostgresJsBigIntTypeMap
39
-
40
- const counts = await big("SELECT author_id, count(*) AS n FROM posts GROUP BY author_id").execute();
41
- // { author_id: number; n: bigint }[]
42
- ```
43
-
44
- ## API
45
-
46
- | Export | |
47
- |---|---|
48
- | `createSql<DB>(db, options?)` | core's `createSql<DB, PostgresJsTypeMap>()` with the queries running on `db`; `{ rowKeys: "camelCase" }` camelCases the row keys |
49
- | `createBigIntSql<DB>(db, options?)` | the same with `PostgresJsBigIntTypeMap`, for `types: { bigint: postgres.BigInt }` |
50
- | `q.execute()`, `q.executeTakeFirst()`, `q.executeTakeFirstOrThrow()`, `q.executeCount()` | `Promise<Row[]>` (a plain array, result metadata stripped), `Promise<Row \| undefined>`, `Promise<Row>` (`NoResultError` on 0 rows), `Promise<number>` (`.count`, 0 for DDL) |
51
- | `sql.transaction(fn)` | `db.begin(fn)` with `tx` bound to the transaction; `tx.transaction(fn)` is `savepoint(fn)` |
52
- | `executor(db)` | an `Executor` for `q.execute(executor)` and core's `createSql(executor)` (reports `.count`) |
53
- | `migrate(db, m)` | runs `m.statements` (e.g. from core's `migrations()`) in one transaction |
54
- | `PostgresJsSql<DB, Keys>`, `PostgresJsBigIntSql<DB, Keys>` | the types `createSql` and `createBigIntSql` return |
55
- | `PostgresJsTypeMap`, `PostgresJsBigIntTypeMap`, `PostgresJsParamTypeMap` | the type maps (rows), and what parameters also accept |
56
- | `NoResultError`, `PostgresJsQueryable`, `PostgresJsTransactable`, `PostgresJsRows`, `MigrationSource` | errors and parameter types |
57
-
58
- Queries run with `db.unsafe(text, values)`, so the text reaches the server unchanged and values
59
- are bind parameters. `db` is the `Sql` instance, a `TransactionSql` or a `ReservedSql`.
28
+ If your connection parses `int8` to `bigint` (`types: { bigint: postgres.BigInt }`), pass `{ bigint: true }` as the second argument of `createSql`.
60
29
 
61
- ## Type maps
30
+ [Open an example in the TypeScript Playground](https://www.typescriptlang.org/play/#code/PTAEBUE8AcFMGUCKAZUB3AlgFwBamgPYDOWA5gE6xEB0AVkaABQACWMVAjgDbCEkVUAlNVCIArrHIYqocmIB26bHiLdqCogEMAZrEZZYADywAaUADdNXCUUFnN8gCayCaIgCgQoTZVBs4zgBGkOg4mlj4xGSUNPT4PkRUAFygGPJYABypDJqgJFLypGYE5N6ggRikaRGYuKAAQpUAkunx5ERppKAE8tTu7hgAtoTkEf6woADeoADCBFxmAOKw8pLhsI5mAHJiXFyagVwTAL6g2uQEg6AARKzsqjwAxiWw1wDcA8MlEdOPlOvwbigU7nS43O5wB68KICIjvT4jMbsKagQFcYFnC5Xa58aJUeEDdKSbSaR4TAAi9Sm7gAkGJEu0UpNaTSMI4UstVuR1o4ADzXaoAFmuAD4PjSabBBpoMFwUnMuPyDMZReKaY4MERoPtIAB9eSaQawFI7PYHI5KoxYVUsv6wHm68IclZrAx865YIZULCG6BYABeNppx3FuKITJZbOdXJ5-OqGSDNM0YlwJV1Udm8zj6WFYpZnqwR3lWY9VsTPtI4czitLxgA2gBdIMh9zHfqOWCPfa+Z7yEigRyBFJot6gLy42GMHEwmJJEBcAiPKw4KLATTQaDXQTuXv9h6gAC8oDtAO4vMpIsYg8EHx3PX7YcP3jQMoiD0YtIABvAAKLIH8zOAqSbH42BHGYFYMAAYgASgA8gAspEJAMAA6gAEj+ME-qAAAkACMT4AIJbAAmkwkGCJ+Ji0tcDzXDRwhGJ2KZ6DenhgKAXEAHoAPz9F4cGKLkvarI8no9EodSfuMVbTBUVTpCkE4xNQjSkC0ETHNRqTpFkDjOM8ChYIwABUgjHpcEyBKSADW3gMAp1R9B2XY+BMu4RIO6nDme8mVNUKROa0xx5p55SVE+J4GGi571Je3mVGY-mKVgKRYHIJzseFRnpAwR6aC+2ARaQH40t+f4AUByapuQ6YgblJnmaARHwKAiiwYhyFYAwizwQAqgACg05E1SudVstR7hMYYLEGIw7FeFxoB8QJYAPNQGUOFo4kYJJmp5GogSwIpo5YIYm3cn2pISYoB25Fo5iwIQznuIVr6HVwl3bTde3yIwmhEJA8iPBRhgWQeIrUkmRVjIYZXlUN5JEeAOGPr+QEFkcT5iBukj6GBsAWRhWE4WNaZsk+BFTRKADsNE0jNc1seK4WKAVsN+PDLKfuSlWo6AnVIY+JPYcePgagaXDYJA+iaJWEOgAADDTTOPKxczGQt4pLTx-HHOx7jvhV-6AcBgvwcLURoZhYuQaAzBQ9TZh0dwW6jl4kgXOQ6Xywwjt+JotkyLkypYI27hAA) <!-- playground:postgres --> to hover the types and edit the SQL, with nothing to install.
62
31
 
63
- postgres.js parses only a few types by default; everything else is the text Postgres sent:
32
+ ## Documentation
64
33
 
65
- | Postgres | `PostgresJsTypeMap` | `PostgresJsBigIntTypeMap` |
66
- |---|---|---|
67
- | `int2`, `int4`, `oid`, `float4`, `float8` | `number` | `number` |
68
- | `int8` (also `count(*)`) | `string` | `bigint` |
69
- | `bool` | `boolean` | `boolean` |
70
- | `date`, `timestamp`, `timestamptz` | `Date` | `Date` |
71
- | `json`, `jsonb` | `unknown` | `unknown` |
72
- | `bytea` | `Buffer` | `Buffer` |
73
- | `numeric`, `interval`, `point`, text-like and other types | `string` | `string` |
34
+ - [postgres.js adapter](https://typesql.karsli.net/adapters/postgres): running queries, transactions and migrations
35
+ - [Type mapping](https://typesql.karsli.net/reference/type-mapping#postgres-js): the TypeScript type of every Postgres type
74
36
 
75
- Arrays map element-wise. Details in the
76
- [postgres.js adapter page](https://github.com/ismailkarsli/typesql/blob/main/packages/docs/adapters/postgres.md).
37
+ ## License
77
38
 
78
- Parameters accept the row type and what postgres.js serializes for the type
79
- (`PostgresJsParamTypeMap`): `number | bigint | string` for `int8`, `numeric` and `money`,
80
- `Date | string | number` (epoch ms) for dates and timestamps, `string` for `interval`,
81
- `Uint8Array` for `bytea`.
39
+ [MIT](LICENSE)
package/dist/client.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import type { Executor, SqlDriver } from "@typesql/core";
1
+ import type { Executor } from "@typesql/core";
2
+ import type { SqlDriver } from "@typesql/core/adapter";
2
3
  /**
3
4
  * The shape of a resolved `sql.unsafe()` result the adapter relies on: an array with `count`
4
5
  * (`null` for statements without a count, such as DDL).
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,OAAO,EAAE,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAEpF;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;CAC5E;AAED,qFAAqF;AACrF,MAAM,WAAW,sBAAsB,CAAC,EAAE,SAAS,mBAAmB,GAAG,mBAAmB;IAC1F,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3D;AAOD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,QAAQ,CAK3D;AAcD,0DAA0D;AAC1D,eAAO,MAAM,MAAM,EAAE,SAAS,CAAC,mBAAmB,CAA6B,CAAC;AAEhF,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,EAAE,SAAS,mBAAmB,EAAE,GAAG,EAAE,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhI"}
1
+ {"version":3,"file":"client.d.ts","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,OAAO,EAAE,GAAG;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IACnC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;CAC3E;AAED,qFAAqF;AACrF,MAAM,WAAW,sBAAsB,CACtC,EAAE,SAAS,mBAAmB,GAAG,mBAAmB;IAEpD,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1D;AASD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,QAAQ,CAK3D;AAsBD,0DAA0D;AAC1D,eAAO,MAAM,MAAM,EAAE,SAAS,CAAC,mBAAmB,CAA6B,CAAC;AAEhF,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,EAAE,SAAS,mBAAmB,EAC3D,GAAG,EAAE,sBAAsB,CAAC,EAAE,CAAC,EAC/B,CAAC,EAAE,eAAe,GAChB,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sources":["../src/client.ts"],"names":[],"mappings":"AA0BA;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAwB;IAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC5B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,WAAW,CAAI,GAAwB,EAAE,MAAc,EAAE,EAA2C;IACjH,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,GAAgE,CAAC;IAC9F,IAAI,SAAS;QAAE,OAAO,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAM,CAAC;IAC3D,IAAI,KAAK;QAAE,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAM,CAAC;IACnD,MAAM,IAAI,KAAK,CAAC,6GAA6G,CAAC,CAAC;AACjI,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,MAAM,MAAM,GAAmC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAOhF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAiC,GAA+B,EAAE,CAAkB;IAC/G,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC3B,KAAK,MAAM,SAAS,IAAI,CAAC,CAAC,UAAU;YAAE,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"client.js","sources":["../src/client.ts"],"names":[],"mappings":"AAiCA;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAwB;IAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;IACrE,CAAC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,WAAW,CACzB,GAAwB,EACxB,MAAc,EACd,EAA2C;IAE3C,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,GAE5B,CAAC;IACF,IAAI,SAAS;QAAE,OAAO,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAM,CAAC;IAC3D,IAAI,KAAK;QAAE,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAM,CAAC;IACnD,MAAM,IAAI,KAAK,CACd,6GAA6G,CAC7G,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,MAAM,MAAM,GAAmC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAOhF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC5B,GAA+B,EAC/B,CAAkB;IAElB,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC5B,KAAK,MAAM,SAAS,IAAI,CAAC,CAAC,UAAU;YAAE,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,30 +1,32 @@
1
- import { type RowKeys, type TransactionalSql } from "@typesql/core";
1
+ import type { RowKeys, TransactionalSql } from "@typesql/core";
2
2
  import { type PostgresJsQueryable } from "./client.js";
3
3
  import type { PostgresJsBigIntTypeMap, PostgresJsTypeMap } from "./type-map.js";
4
- export { NoResultError, type Executor, type TransactionalSql } from "@typesql/core";
5
- export type { PostgresJsTypeMap, PostgresJsBigIntTypeMap, PostgresJsParamTypeMap } from "./type-map.js";
6
- export { executor, migrate, type MigrationSource, type PostgresJsQueryable, type PostgresJsRows, type PostgresJsTransactable, } from "./client.js";
7
- /** What `createSql<DB>(sql)` returns: core's `Sql` under `PostgresJsTypeMap`, with `transaction(fn)`. */
8
- export type PostgresJsSql<DB, Keys extends RowKeys = "preserve"> = TransactionalSql<DB, PostgresJsTypeMap, Keys>;
9
- /** What `createBigIntSql<DB>(sql)` returns: core's `Sql` under `PostgresJsBigIntTypeMap`, with `transaction(fn)`. */
10
- export type PostgresJsBigIntSql<DB, Keys extends RowKeys = "preserve"> = TransactionalSql<DB, PostgresJsBigIntTypeMap, Keys>;
4
+ export { executor, type MigrationSource, migrate, type PostgresJsQueryable, type PostgresJsRows, type PostgresJsTransactable, } from "./client.js";
5
+ export type { PostgresJsBigIntTypeMap, PostgresJsParamTypeMap, PostgresJsTypeMap, } from "./type-map.js";
6
+ /** What `createSql<DB>(sql)` returns: core's `Sql` under `PostgresJsTypeMap` (or `TM`), with `transaction(fn)`. */
7
+ export type PostgresJsSql<DB, Keys extends RowKeys = "preserve", TM = PostgresJsTypeMap> = TransactionalSql<DB, TM, Keys>;
11
8
  /**
12
9
  * `createSql<DB>()` from core, pre-bound to `PostgresJsTypeMap` (default parsers: `int8` and `count(*)` are `string`).
13
10
  * The queries' `execute*` methods run on the postgres.js `sql` instance (or a `TransactionSql`,
14
11
  * `ReservedSql`), and `sql.transaction(fn)` runs `fn` with a `sql` bound to one transaction.
15
12
  * `{ rowKeys: "camelCase" }` camelCases the rows' keys, in the types and at runtime.
13
+ * `{ bigint: true }` is for `postgres({ types: { bigint: postgres.BigInt } })` connections:
14
+ * `int8` and `count(*)` are `bigint` (`PostgresJsBigIntTypeMap`).
16
15
  */
17
16
  export declare function createSql<DB>(sql: PostgresJsQueryable | undefined, options: {
18
17
  readonly rowKeys: "camelCase";
18
+ readonly bigint: true;
19
+ }): PostgresJsSql<DB, "camelCase", PostgresJsBigIntTypeMap>;
20
+ export declare function createSql<DB>(sql: PostgresJsQueryable | undefined, options: {
21
+ readonly rowKeys?: "preserve";
22
+ readonly bigint: true;
23
+ }): PostgresJsSql<DB, "preserve", PostgresJsBigIntTypeMap>;
24
+ export declare function createSql<DB>(sql: PostgresJsQueryable | undefined, options: {
25
+ readonly rowKeys: "camelCase";
26
+ readonly bigint?: false;
19
27
  }): PostgresJsSql<DB, "camelCase">;
20
28
  export declare function createSql<DB>(sql?: PostgresJsQueryable, options?: {
21
29
  readonly rowKeys?: "preserve";
30
+ readonly bigint?: false;
22
31
  }): PostgresJsSql<DB>;
23
- /** For `postgres({ types: { bigint: postgres.BigInt } })` connections: `int8` and `count(*)` are `bigint`. */
24
- export declare function createBigIntSql<DB>(sql: PostgresJsQueryable | undefined, options: {
25
- readonly rowKeys: "camelCase";
26
- }): PostgresJsBigIntSql<DB, "camelCase">;
27
- export declare function createBigIntSql<DB>(sql?: PostgresJsQueryable, options?: {
28
- readonly rowKeys?: "preserve";
29
- }): PostgresJsBigIntSql<DB>;
30
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7G,OAAO,EAAU,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACpF,YAAY,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACxG,OAAO,EACL,QAAQ,EACR,OAAO,EACP,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC;AAErB,yGAAyG;AACzG,MAAM,MAAM,aAAa,CAAC,EAAE,EAAE,IAAI,SAAS,OAAO,GAAG,UAAU,IAAI,gBAAgB,CAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;AACjH,qHAAqH;AACrH,MAAM,MAAM,mBAAmB,CAAC,EAAE,EAAE,IAAI,SAAS,OAAO,GAAG,UAAU,IAAI,gBAAgB,CAAC,EAAE,EAAE,uBAAuB,EAAE,IAAI,CAAC,CAAC;AAE7H;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,mBAAmB,GAAG,SAAS,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAAG,aAAa,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AAChJ,wBAAgB,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;AAKzH,8GAA8G;AAC9G,wBAAgB,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,mBAAmB,GAAG,SAAS,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAAG,mBAAmB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AAC5J,wBAAgB,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAc,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAU,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEhF,OAAO,EACN,QAAQ,EACR,KAAK,eAAe,EACpB,OAAO,EACP,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC3B,MAAM,aAAa,CAAC;AACrB,YAAY,EACX,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,GACjB,MAAM,eAAe,CAAC;AAEvB,mHAAmH;AACnH,MAAM,MAAM,aAAa,CACxB,EAAE,EACF,IAAI,SAAS,OAAO,GAAG,UAAU,EACjC,EAAE,GAAG,iBAAiB,IACnB,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAOnC;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAC3B,GAAG,EAAE,mBAAmB,GAAG,SAAS,EACpC,OAAO,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GAC/D,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,uBAAuB,CAAC,CAAC;AAC3D,wBAAgB,SAAS,CAAC,EAAE,EAC3B,GAAG,EAAE,mBAAmB,GAAG,SAAS,EACpC,OAAO,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GAC/D,aAAa,CAAC,EAAE,EAAE,UAAU,EAAE,uBAAuB,CAAC,CAAC;AAC1D,wBAAgB,SAAS,CAAC,EAAE,EAC3B,GAAG,EAAE,mBAAmB,GAAG,SAAS,EACpC,OAAO,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,GACjE,aAAa,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AAClC,wBAAgB,SAAS,CAAC,EAAE,EAC3B,GAAG,CAAC,EAAE,mBAAmB,EACzB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,GAClE,aAAa,CAAC,EAAE,CAAC,CAAC"}
package/dist/index.js CHANGED
@@ -1,11 +1,7 @@
1
- import { createTransactionalSql } from "@typesql/core";
1
+ import { createTransactionalSql } from "@typesql/core/adapter";
2
2
  import { driver } from "./client.js";
3
- export { NoResultError } from "@typesql/core";
4
3
  export { executor, migrate, } from "./client.js";
5
4
  export function createSql(sql, options) {
6
5
  return createTransactionalSql(sql, driver, options);
7
6
  }
8
- export function createBigIntSql(sql, options) {
9
- return createTransactionalSql(sql, driver, options);
10
- }
11
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAwD,MAAM,eAAe,CAAC;AAC7G,OAAO,EAAE,MAAM,EAA4B,MAAM,aAAa,CAAC;AAG/D,OAAO,EAAE,aAAa,EAAwC,MAAM,eAAe,CAAC;AAEpF,OAAO,EACL,QAAQ,EACR,OAAO,GAKR,MAAM,aAAa,CAAC;AAerB,MAAM,UAAU,SAAS,CAAK,GAAyB,EAAE,OAAoB;IAC3E,OAAO,sBAAsB,CAA6C,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAClG,CAAC;AAKD,MAAM,UAAU,eAAe,CAAK,GAAyB,EAAE,OAAoB;IACjF,OAAO,sBAAsB,CAAmD,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACxG,CAAC"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAA4B,MAAM,aAAa,CAAC;AAG/D,OAAO,EACN,QAAQ,EAER,OAAO,GAIP,MAAM,aAAa,CAAC;AA2CrB,MAAM,UAAU,SAAS,CACxB,GAAyB,EACzB,OAA8B;IAE9B,OAAO,sBAAsB,CAC5B,GAAG,EACH,MAAM,EACN,OAAO,CACP,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"type-map.d.ts","sources":["../src/type-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5H,sDAAsD;IACtD,OAAO,EAAE,sBAAsB,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC;IAC7G,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC7B,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,WAAW,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC9E,IAAI,EAAE,MAAM,CAAC;CACd"}
1
+ {"version":3,"file":"type-map.d.ts","sources":["../src/type-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,iBAChB,SAAQ,IAAI,CACX,cAAc,EACd,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAC7D;IACD,sDAAsD;IACtD,OAAO,EAAE,sBAAsB,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,sBAChB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC;IACvE,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC7B,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,WAAW,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;CACpC;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAChB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;CACb"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typesql/postgres",
3
- "version": "0.1.5",
3
+ "version": "0.2.1",
4
4
  "description": "postgres.js adapter for TypeSQL.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -28,7 +28,7 @@
28
28
  "access": "public"
29
29
  },
30
30
  "dependencies": {
31
- "@typesql/core": "0.4.0"
31
+ "@typesql/core": "0.6.0"
32
32
  },
33
33
  "peerDependencies": {
34
34
  "postgres": ">=3"
package/src/client.ts CHANGED
@@ -1,27 +1,34 @@
1
- import type { Executor, SqlDriver } from "@typesql/core";
1
+ import type { Executor } from "@typesql/core";
2
+ import type { SqlDriver } from "@typesql/core/adapter";
2
3
 
3
4
  /**
4
5
  * The shape of a resolved `sql.unsafe()` result the adapter relies on: an array with `count`
5
6
  * (`null` for statements without a count, such as DDL).
6
7
  */
7
- export type PostgresJsRows = readonly unknown[] & { readonly count: number | null };
8
+ export type PostgresJsRows = readonly unknown[] & {
9
+ readonly count: number | null;
10
+ };
8
11
 
9
12
  /**
10
13
  * Anything with postgres.js' `unsafe(query, parameters)` method: the `Sql` instance,
11
14
  * a `TransactionSql` inside `begin`, a `ReservedSql`, or a fake in tests.
12
15
  */
13
16
  export interface PostgresJsQueryable {
14
- unsafe(query: string, parameters?: unknown[]): PromiseLike<PostgresJsRows>;
17
+ unsafe(query: string, parameters?: unknown[]): PromiseLike<PostgresJsRows>;
15
18
  }
16
19
 
17
20
  /** Anything with postgres.js' `begin(fn)`: the `Sql` instance or a `ReservedSql`. */
18
- export interface PostgresJsTransactable<Tx extends PostgresJsQueryable = PostgresJsQueryable> {
19
- begin(fn: (tx: Tx) => Promise<unknown>): Promise<unknown>;
21
+ export interface PostgresJsTransactable<
22
+ Tx extends PostgresJsQueryable = PostgresJsQueryable,
23
+ > {
24
+ begin(fn: (tx: Tx) => Promise<unknown>): Promise<unknown>;
20
25
  }
21
26
 
22
27
  /** A `TransactionSql`'s `savepoint(fn)`. */
23
28
  interface PostgresJsSavepointable {
24
- savepoint(fn: (tx: PostgresJsQueryable) => Promise<unknown>): Promise<unknown>;
29
+ savepoint(
30
+ fn: (tx: PostgresJsQueryable) => Promise<unknown>,
31
+ ): Promise<unknown>;
25
32
  }
26
33
 
27
34
  /**
@@ -29,10 +36,10 @@ interface PostgresJsSavepointable {
29
36
  * `{ rows, rowCount }` (postgres.js' `.count`, so `q.executeCount()` works).
30
37
  */
31
38
  export function executor(sql: PostgresJsQueryable): Executor {
32
- return async (text, values) => {
33
- const result = await sql.unsafe(text, Array.from(values));
34
- return { rows: Array.from(result), rowCount: result.count ?? null };
35
- };
39
+ return async (text, values) => {
40
+ const result = await sql.unsafe(text, Array.from(values));
41
+ return { rows: Array.from(result), rowCount: result.count ?? null };
42
+ };
36
43
  }
37
44
 
38
45
  /**
@@ -40,11 +47,19 @@ export function executor(sql: PostgresJsQueryable): Executor {
40
47
  * otherwise `sql.begin(fn)`. postgres.js issues BEGIN (or SAVEPOINT), runs the callback with a
41
48
  * transaction-bound `sql`, then COMMIT, or ROLLBACK and rethrow when the callback throws.
42
49
  */
43
- async function transaction<T>(sql: PostgresJsQueryable, _depth: number, fn: (tx: PostgresJsQueryable) => Promise<T>): Promise<T> {
44
- const { savepoint, begin } = sql as Partial<PostgresJsSavepointable & PostgresJsTransactable>;
45
- if (savepoint) return (await savepoint.call(sql, fn)) as T;
46
- if (begin) return (await begin.call(sql, fn)) as T;
47
- throw new Error("typesql: sql.transaction() needs a postgres.js Sql, ReservedSql or TransactionSql (with begin or savepoint)");
50
+ async function transaction<T>(
51
+ sql: PostgresJsQueryable,
52
+ _depth: number,
53
+ fn: (tx: PostgresJsQueryable) => Promise<T>,
54
+ ): Promise<T> {
55
+ const { savepoint, begin } = sql as Partial<
56
+ PostgresJsSavepointable & PostgresJsTransactable
57
+ >;
58
+ if (savepoint) return (await savepoint.call(sql, fn)) as T;
59
+ if (begin) return (await begin.call(sql, fn)) as T;
60
+ throw new Error(
61
+ "typesql: sql.transaction() needs a postgres.js Sql, ReservedSql or TransactionSql (with begin or savepoint)",
62
+ );
48
63
  }
49
64
 
50
65
  /** How `createSql(sql)` runs queries and transactions. */
@@ -52,7 +67,7 @@ export const driver: SqlDriver<PostgresJsQueryable> = { executor, transaction };
52
67
 
53
68
  /** Anything carrying an ordered list of DDL statements, e.g. a `migrations()` builder from core. */
54
69
  export interface MigrationSource {
55
- readonly statements: readonly string[];
70
+ readonly statements: readonly string[];
56
71
  }
57
72
 
58
73
  /**
@@ -60,8 +75,11 @@ export interface MigrationSource {
60
75
  * Each statement goes through `unsafe` without parameters (simple protocol), so scripts with
61
76
  * `$$`-quoted function bodies work.
62
77
  */
63
- export async function migrate<Tx extends PostgresJsQueryable>(sql: PostgresJsTransactable<Tx>, m: MigrationSource): Promise<void> {
64
- await sql.begin(async (tx) => {
65
- for (const statement of m.statements) await tx.unsafe(statement);
66
- });
78
+ export async function migrate<Tx extends PostgresJsQueryable>(
79
+ sql: PostgresJsTransactable<Tx>,
80
+ m: MigrationSource,
81
+ ): Promise<void> {
82
+ await sql.begin(async (tx) => {
83
+ for (const statement of m.statements) await tx.unsafe(statement);
84
+ });
67
85
  }
package/src/index.ts CHANGED
@@ -1,38 +1,65 @@
1
- import { createTransactionalSql, type RowKeys, type SqlOptions, type TransactionalSql } from "@typesql/core";
1
+ import type { RowKeys, SqlOptions, TransactionalSql } from "@typesql/core";
2
+ import { createTransactionalSql } from "@typesql/core/adapter";
2
3
  import { driver, type PostgresJsQueryable } from "./client.js";
3
4
  import type { PostgresJsBigIntTypeMap, PostgresJsTypeMap } from "./type-map.js";
4
5
 
5
- export { NoResultError, type Executor, type TransactionalSql } from "@typesql/core";
6
- export type { PostgresJsTypeMap, PostgresJsBigIntTypeMap, PostgresJsParamTypeMap } from "./type-map.js";
7
6
  export {
8
- executor,
9
- migrate,
10
- type MigrationSource,
11
- type PostgresJsQueryable,
12
- type PostgresJsRows,
13
- type PostgresJsTransactable,
7
+ executor,
8
+ type MigrationSource,
9
+ migrate,
10
+ type PostgresJsQueryable,
11
+ type PostgresJsRows,
12
+ type PostgresJsTransactable,
14
13
  } from "./client.js";
14
+ export type {
15
+ PostgresJsBigIntTypeMap,
16
+ PostgresJsParamTypeMap,
17
+ PostgresJsTypeMap,
18
+ } from "./type-map.js";
15
19
 
16
- /** What `createSql<DB>(sql)` returns: core's `Sql` under `PostgresJsTypeMap`, with `transaction(fn)`. */
17
- export type PostgresJsSql<DB, Keys extends RowKeys = "preserve"> = TransactionalSql<DB, PostgresJsTypeMap, Keys>;
18
- /** What `createBigIntSql<DB>(sql)` returns: core's `Sql` under `PostgresJsBigIntTypeMap`, with `transaction(fn)`. */
19
- export type PostgresJsBigIntSql<DB, Keys extends RowKeys = "preserve"> = TransactionalSql<DB, PostgresJsBigIntTypeMap, Keys>;
20
+ /** What `createSql<DB>(sql)` returns: core's `Sql` under `PostgresJsTypeMap` (or `TM`), with `transaction(fn)`. */
21
+ export type PostgresJsSql<
22
+ DB,
23
+ Keys extends RowKeys = "preserve",
24
+ TM = PostgresJsTypeMap,
25
+ > = TransactionalSql<DB, TM, Keys>;
26
+
27
+ /** `createSql`'s options: core's `rowKeys`, and `bigint: true` for a connection that parses `int8` as `bigint`. */
28
+ interface PostgresJsSqlOptions extends SqlOptions {
29
+ readonly bigint?: boolean;
30
+ }
20
31
 
21
32
  /**
22
33
  * `createSql<DB>()` from core, pre-bound to `PostgresJsTypeMap` (default parsers: `int8` and `count(*)` are `string`).
23
34
  * The queries' `execute*` methods run on the postgres.js `sql` instance (or a `TransactionSql`,
24
35
  * `ReservedSql`), and `sql.transaction(fn)` runs `fn` with a `sql` bound to one transaction.
25
36
  * `{ rowKeys: "camelCase" }` camelCases the rows' keys, in the types and at runtime.
37
+ * `{ bigint: true }` is for `postgres({ types: { bigint: postgres.BigInt } })` connections:
38
+ * `int8` and `count(*)` are `bigint` (`PostgresJsBigIntTypeMap`).
26
39
  */
27
- export function createSql<DB>(sql: PostgresJsQueryable | undefined, options: { readonly rowKeys: "camelCase" }): PostgresJsSql<DB, "camelCase">;
28
- export function createSql<DB>(sql?: PostgresJsQueryable, options?: { readonly rowKeys?: "preserve" }): PostgresJsSql<DB>;
29
- export function createSql<DB>(sql?: PostgresJsQueryable, options?: SqlOptions): PostgresJsSql<DB, RowKeys> {
30
- return createTransactionalSql<DB, PostgresJsTypeMap, PostgresJsQueryable>(sql, driver, options);
31
- }
32
-
33
- /** For `postgres({ types: { bigint: postgres.BigInt } })` connections: `int8` and `count(*)` are `bigint`. */
34
- export function createBigIntSql<DB>(sql: PostgresJsQueryable | undefined, options: { readonly rowKeys: "camelCase" }): PostgresJsBigIntSql<DB, "camelCase">;
35
- export function createBigIntSql<DB>(sql?: PostgresJsQueryable, options?: { readonly rowKeys?: "preserve" }): PostgresJsBigIntSql<DB>;
36
- export function createBigIntSql<DB>(sql?: PostgresJsQueryable, options?: SqlOptions): PostgresJsBigIntSql<DB, RowKeys> {
37
- return createTransactionalSql<DB, PostgresJsBigIntTypeMap, PostgresJsQueryable>(sql, driver, options);
40
+ export function createSql<DB>(
41
+ sql: PostgresJsQueryable | undefined,
42
+ options: { readonly rowKeys: "camelCase"; readonly bigint: true },
43
+ ): PostgresJsSql<DB, "camelCase", PostgresJsBigIntTypeMap>;
44
+ export function createSql<DB>(
45
+ sql: PostgresJsQueryable | undefined,
46
+ options: { readonly rowKeys?: "preserve"; readonly bigint: true },
47
+ ): PostgresJsSql<DB, "preserve", PostgresJsBigIntTypeMap>;
48
+ export function createSql<DB>(
49
+ sql: PostgresJsQueryable | undefined,
50
+ options: { readonly rowKeys: "camelCase"; readonly bigint?: false },
51
+ ): PostgresJsSql<DB, "camelCase">;
52
+ export function createSql<DB>(
53
+ sql?: PostgresJsQueryable,
54
+ options?: { readonly rowKeys?: "preserve"; readonly bigint?: false },
55
+ ): PostgresJsSql<DB>;
56
+ export function createSql<DB>(
57
+ sql?: PostgresJsQueryable,
58
+ options?: PostgresJsSqlOptions,
59
+ ): PostgresJsSql<DB, RowKeys, PostgresJsTypeMap | PostgresJsBigIntTypeMap> {
60
+ return createTransactionalSql<DB, PostgresJsTypeMap, PostgresJsQueryable>(
61
+ sql,
62
+ driver,
63
+ options,
64
+ );
38
65
  }
package/src/type-map.ts CHANGED
@@ -22,20 +22,24 @@ import type { DefaultParamTypeMap, DefaultTypeMap } from "@typesql/core";
22
22
  * registers an element-wise array parser for every array type, so core's `T[]` →
23
23
  * element-type[] mapping is exact (int8[] → string[], timestamptz[] → Date[], ...).
24
24
  */
25
- export interface PostgresJsTypeMap extends Omit<DefaultTypeMap, "bytea" | "interval" | "point" | "circle" | "record" | "void"> {
26
- /** What parameters accept on top of the row types. */
27
- $params: PostgresJsParamTypeMap;
28
- bytea: Buffer;
29
- /** No default parser: the Postgres text form, e.g. `"1 day 02:00:00"`. */
30
- interval: string;
31
- /** No default parser: `"(1,2)"`. */
32
- point: string;
33
- /** No default parser: `"<(1,2),3>"`. */
34
- circle: string;
35
- /** Anonymous `ROW(...)` results: raw text such as `"(1,foo)"`. */
36
- record: string;
37
- /** `void`-returning functions (`pg_sleep`) yield an empty string. */
38
- void: string;
25
+ export interface PostgresJsTypeMap
26
+ extends Omit<
27
+ DefaultTypeMap,
28
+ "bytea" | "interval" | "point" | "circle" | "record" | "void"
29
+ > {
30
+ /** What parameters accept on top of the row types. */
31
+ $params: PostgresJsParamTypeMap;
32
+ bytea: Buffer;
33
+ /** No default parser: the Postgres text form, e.g. `"1 day 02:00:00"`. */
34
+ interval: string;
35
+ /** No default parser: `"(1,2)"`. */
36
+ point: string;
37
+ /** No default parser: `"<(1,2),3>"`. */
38
+ circle: string;
39
+ /** Anonymous `ROW(...)` results: raw text such as `"(1,foo)"`. */
40
+ record: string;
41
+ /** `void`-returning functions (`pg_sleep`) yield an empty string. */
42
+ void: string;
39
43
  }
40
44
 
41
45
  /**
@@ -52,10 +56,11 @@ export interface PostgresJsTypeMap extends Omit<DefaultTypeMap, "bytea" | "inter
52
56
  *
53
57
  * `bool` takes only booleans: its serializer sends `'f'` for anything but `true`.
54
58
  */
55
- export interface PostgresJsParamTypeMap extends Omit<DefaultParamTypeMap, "date" | "timestamp" | "timestamptz"> {
56
- date: Date | string | number;
57
- timestamp: Date | string | number;
58
- timestamptz: Date | string | number;
59
+ export interface PostgresJsParamTypeMap
60
+ extends Omit<DefaultParamTypeMap, "date" | "timestamp" | "timestamptz"> {
61
+ date: Date | string | number;
62
+ timestamp: Date | string | number;
63
+ timestamptz: Date | string | number;
59
64
  }
60
65
 
61
66
  /**
@@ -64,6 +69,7 @@ export interface PostgresJsParamTypeMap extends Omit<DefaultParamTypeMap, "date"
64
69
  * and `int8` columns become `bigint`; `int8[]` becomes `bigint[]`. Everything else is as in
65
70
  * `PostgresJsTypeMap`.
66
71
  */
67
- export interface PostgresJsBigIntTypeMap extends Omit<PostgresJsTypeMap, "int8"> {
68
- int8: bigint;
72
+ export interface PostgresJsBigIntTypeMap
73
+ extends Omit<PostgresJsTypeMap, "int8"> {
74
+ int8: bigint;
69
75
  }