@typesql/pg 0.2.8 → 0.2.9
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 +11 -0
- package/README.md +1 -2
- package/dist/bin.js +0 -1
- package/dist/bin.js.map +1 -1
- package/dist/client.d.ts +0 -19
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +0 -22
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/introspect/cli.d.ts +0 -5
- package/dist/introspect/cli.d.ts.map +1 -1
- package/dist/introspect/cli.js +0 -1
- package/dist/introspect/cli.js.map +1 -1
- package/dist/introspect/emit.d.ts +0 -19
- package/dist/introspect/emit.d.ts.map +1 -1
- package/dist/introspect/emit.js +0 -11
- package/dist/introspect/emit.js.map +1 -1
- package/dist/introspect/introspect.d.ts +0 -27
- package/dist/introspect/introspect.d.ts.map +1 -1
- package/dist/introspect/introspect.js +0 -11
- package/dist/introspect/introspect.js.map +1 -1
- package/dist/introspect/nullability.d.ts +0 -27
- package/dist/introspect/nullability.d.ts.map +1 -1
- package/dist/introspect/nullability.js +9 -61
- package/dist/introspect/nullability.js.map +1 -1
- package/dist/type-map.d.ts +0 -65
- package/dist/type-map.d.ts.map +1 -1
- package/package.json +4 -6
- package/src/bin.ts +0 -1
- package/src/client.ts +0 -31
- package/src/index.ts +0 -7
- package/src/introspect/cli.ts +0 -5
- package/src/introspect/emit.ts +0 -25
- package/src/introspect/introspect.ts +0 -35
- package/src/introspect/nullability.ts +8 -70
- package/src/type-map.ts +0 -65
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @typesql/pg
|
|
2
2
|
|
|
3
|
+
## 0.2.9
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Validate packages against PostgreSQL behavior and built outputs instead of hand-written test suites.
|
|
8
|
+
|
|
9
|
+
- Reorganize core internals and remove source comments and inline API documentation without changing SQL behavior.
|
|
10
|
+
|
|
11
|
+
- Updated dependencies:
|
|
12
|
+
- @typesql/core@0.7.6
|
|
13
|
+
|
|
3
14
|
## 0.2.8
|
|
4
15
|
|
|
5
16
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -18,7 +18,6 @@ import type { DB } from "./schema";
|
|
|
18
18
|
const sql = createSql<DB>(new Pool());
|
|
19
19
|
|
|
20
20
|
const users = await sql("SELECT id, email FROM users").execute();
|
|
21
|
-
// { id: number; email: string }[]
|
|
22
21
|
|
|
23
22
|
const user = await sql("SELECT id, email FROM users WHERE id = $1", 7).executeTakeFirstOrThrow();
|
|
24
23
|
|
|
@@ -30,7 +29,7 @@ await sql.transaction(async (tx) => {
|
|
|
30
29
|
|
|
31
30
|
`createSql` takes a `Pool`, a `Client` or a `PoolClient`. As in `pg`, `int8` (so `count(*)`), `numeric` and `money` come back as strings.
|
|
32
31
|
|
|
33
|
-
[Open an example in the TypeScript Playground](https://www.typescriptlang.org/play/#code/
|
|
32
|
+
[Open an example in the TypeScript Playground](https://www.typescriptlang.org/play/#code/JYWwDg9gTgLgBDAnmApnA3nAwhANgGjgHEUA7FKAQxhQBNCA5AV110oCNc0BfOAMygQQcAEQABJKgDOAR1wB6AMbQUIgNwAoUJFgY4iqCmooAynLi8BQ0ROQpZCsAHN1W8NHiYAChDwX+gsIizq5apDRQfJSKaAAiAEIYGgCQTFIUUgBcScnJwLTZJORUNLQAPCLA4QAsIgB8mrkoIJTAuNk4uBU0AB4w9Y3JtMBSYGyIAPqklCAo2cysHFzdKH0DKcnslGykMR14FaRMs1DAiuu5BkalE9SFZBTG5SIwoPYwM2AwAF4X3I2QKQwLI5PIFYgPEp0CpVGAADguyUoTBgAAtoBN8vsupUaojXjAuNiVmsGhswExOCNUXRbjB5iw2JwUN03kDPj8-ppuBoNMpSEC4JA-ABeODkADucB8eAAFJh+eRFK8IKQTDBTqQnNlghAgU5DFl5PJcBBFNt0UD5JQwGARBYAJSafmChxwMVXYxmLoJOqy4W4J28l3wdiIACCKPRUHdcAcspSAAMTABRAAyKawABUhQA6fKEMC5glcQu5ilUqQ02h0whMXPNVq4DRwVtt9sdztwABiACUAPIAWSFeuBQrgACl+wBJBhwNIZedwftz+v5WNF5FojH5Ftd-edgDqAAkU72U3mt9HMbRYwASACMifwKQA7C+gyGR0CpLHKBLWlDCMo2gBsehQRQURQWUgz5VVBQXGMxX-QC4zkBNkmTdNMxzAs4C2HYYkIT0bmoHsB2HRDfxPM8L0bNp7yfF9khEShaEoMRVk+Lhc2UEARA-MCIKgrNKAAaxQbtgCgIF+ygLNUUECUYM0OCBXgZQmHCX9kIA4B4HjJNUwzbM4CvHd6H0CAtJgWUACoHTgcMTHFcih2-MciAHABVLw4HiABNMyQKgG9nw0B0hMgmgVODeD4EBGBp1vXTUIcYsqAFaIVVIWVKCkRBdjgWUYB6RyRTqHIv0wddeFS-SEB6DDMNnVNexzWcs37ed0hk4r6IIfDtkoXYUEcgA1cM028lMXNlR9CDvAAmRzzyzbzewYWciDgfJwtyEQDWiFBOJ6biUF4oQBI2AAGZjItWYSaFEiSpJkmA5IUpTYuSL9Er-PT4FK5rE1as8OoYLqPN-PKQpvQgSzGuBJum2bioWuBltWlN1s27bdtofawWYljjxQVgIGu5IHvA6KUBeyTpNk+TFIgZSg2SQwYCYKBSA8-NaG5WCUIa+NE1ibCswvPt3MS6jT3PYLt1C9cxUfZ9RFfEQaae6CgyAA) <span data-playground="pg"></span> to hover the types and edit the SQL, with nothing to install.
|
|
34
33
|
|
|
35
34
|
## Generate your schema
|
|
36
35
|
|
package/dist/bin.js
CHANGED
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,46 +1,27 @@
|
|
|
1
1
|
import type { Executor } from "@typesql/core";
|
|
2
2
|
import { type SqlDriver } from "@typesql/core/adapter";
|
|
3
|
-
/** The subset of a `pg` query result the adapter relies on. */
|
|
4
3
|
export interface PgResult {
|
|
5
4
|
readonly rows: unknown[];
|
|
6
5
|
readonly rowCount: number | null;
|
|
7
6
|
}
|
|
8
|
-
/**
|
|
9
|
-
* Anything with node-postgres' `query(text, values)` method: `Pool`, `Client`, `PoolClient`,
|
|
10
|
-
* or a fake in tests. Prepared queries use the named query config form.
|
|
11
|
-
*/
|
|
12
7
|
export interface PgQueryable {
|
|
13
8
|
query(text: string | PgQueryConfig, values?: unknown[]): Promise<PgResult>;
|
|
14
9
|
}
|
|
15
|
-
/** A named node-postgres statement. Names are derived from the final SQL text. */
|
|
16
10
|
export interface PgQueryConfig {
|
|
17
11
|
readonly name: string;
|
|
18
12
|
readonly text: string;
|
|
19
13
|
readonly values: unknown[];
|
|
20
14
|
}
|
|
21
|
-
/** A client checked out of a pool (`pg.PoolClient`): queryable and releasable. */
|
|
22
15
|
export interface PgTransactionClient extends PgQueryable {
|
|
23
16
|
release(err?: Error | boolean): void;
|
|
24
17
|
}
|
|
25
|
-
/** Anything with `pg.Pool`'s `connect()`. */
|
|
26
18
|
export interface PgPoolLike<C extends PgTransactionClient = PgTransactionClient> {
|
|
27
19
|
connect(): Promise<C>;
|
|
28
20
|
}
|
|
29
|
-
/**
|
|
30
|
-
* An `Executor` for core's `q.execute()`: runs queries on `client` and resolves to
|
|
31
|
-
* `{ rows, rowCount }` (pg's `rowCount`, so `q.executeCount()` works).
|
|
32
|
-
*/
|
|
33
21
|
export declare function executor(client: PgQueryable): Executor;
|
|
34
|
-
/** How `createSql(client)` runs queries and transactions. */
|
|
35
22
|
export declare const driver: SqlDriver<PgQueryable>;
|
|
36
|
-
/** Anything carrying an ordered list of DDL statements, e.g. a `migrations()` builder from core. */
|
|
37
23
|
export interface MigrationSource {
|
|
38
24
|
readonly statements: readonly string[];
|
|
39
25
|
}
|
|
40
|
-
/**
|
|
41
|
-
* Run a migration's statements in order on one connection, inside a single transaction
|
|
42
|
-
* (all or nothing). Statements are sent as simple queries without parameters, so scripts
|
|
43
|
-
* with `$$`-quoted function bodies work.
|
|
44
|
-
*/
|
|
45
26
|
export declare function migrate<C extends PgTransactionClient>(pool: PgPoolLike<C>, m: MigrationSource): Promise<void>;
|
|
46
27
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvE
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC3B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACvD,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,UAAU,CAC1B,CAAC,SAAS,mBAAmB,GAAG,mBAAmB;IAEnD,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAoBtD;AAqDD,eAAO,MAAM,MAAM,EAAE,SAAS,CAAC,WAAW,CAA6B,CAAC;AAExE,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,wBAAsB,OAAO,CAAC,CAAC,SAAS,mBAAmB,EAC1D,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EACnB,CAAC,EAAE,eAAe,GAChB,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
package/dist/client.js
CHANGED
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { runTransaction } from "@typesql/core/adapter";
|
|
3
|
-
/**
|
|
4
|
-
* An `Executor` for core's `q.execute()`: runs queries on `client` and resolves to
|
|
5
|
-
* `{ rows, rowCount }` (pg's `rowCount`, so `q.executeCount()` works).
|
|
6
|
-
*/
|
|
7
3
|
export function executor(client) {
|
|
8
4
|
return Object.assign(async (text, values) => {
|
|
9
|
-
// `pg` requires a mutable array (`QueryConfigValues<I>` matches `Array<U>` only).
|
|
10
5
|
const { rows, rowCount } = await client.query(text, Array.from(values));
|
|
11
6
|
return { rows, rowCount };
|
|
12
7
|
}, {
|
|
13
8
|
prepare: (text) => {
|
|
14
|
-
// Keep names stable across factories and connections, within PostgreSQL's 63-byte limit.
|
|
15
9
|
const name = `typesql_${createHash("sha256").update(text).digest("hex").slice(0, 48)}`;
|
|
16
10
|
return async (text, values) => {
|
|
17
11
|
const { rows, rowCount } = await client.query({
|
|
@@ -25,7 +19,6 @@ export function executor(client) {
|
|
|
25
19
|
});
|
|
26
20
|
}
|
|
27
21
|
function isPool(client) {
|
|
28
|
-
// `pg.Client` has `connect()` too (it opens the socket), and `processID`; a `PoolClient` has `release()`.
|
|
29
22
|
return (typeof client.connect === "function" &&
|
|
30
23
|
!("release" in client) &&
|
|
31
24
|
!("processID" in client));
|
|
@@ -34,10 +27,6 @@ function isConnection(client) {
|
|
|
34
27
|
return "release" in client || "processID" in client;
|
|
35
28
|
}
|
|
36
29
|
const on = (c) => (statement) => c.query(statement);
|
|
37
|
-
/**
|
|
38
|
-
* Check out a client, run `fn` with it between `BEGIN` and `COMMIT`, and release it, with the
|
|
39
|
-
* error when `ROLLBACK` fails so the pool discards the connection instead of reusing it.
|
|
40
|
-
*/
|
|
41
30
|
async function inPoolTransaction(pool, fn) {
|
|
42
31
|
const conn = await pool.connect();
|
|
43
32
|
let releaseWith;
|
|
@@ -52,11 +41,6 @@ async function inPoolTransaction(pool, fn) {
|
|
|
52
41
|
conn.release(releaseWith);
|
|
53
42
|
}
|
|
54
43
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Run `fn` inside a transaction: on a pool, on a client checked out of it; on a `Client` or
|
|
57
|
-
* `PoolClient`, on that connection. With `depth > 0` the client is already in a transaction,
|
|
58
|
-
* and `fn` runs in a savepoint.
|
|
59
|
-
*/
|
|
60
44
|
function transaction(client, depth, fn) {
|
|
61
45
|
if (depth > 0)
|
|
62
46
|
return runTransaction(on(client), () => fn(client), {
|
|
@@ -69,13 +53,7 @@ function transaction(client, depth, fn) {
|
|
|
69
53
|
}
|
|
70
54
|
return runTransaction(on(client), () => fn(client));
|
|
71
55
|
}
|
|
72
|
-
/** How `createSql(client)` runs queries and transactions. */
|
|
73
56
|
export const driver = { executor, transaction };
|
|
74
|
-
/**
|
|
75
|
-
* Run a migration's statements in order on one connection, inside a single transaction
|
|
76
|
-
* (all or nothing). Statements are sent as simple queries without parameters, so scripts
|
|
77
|
-
* with `$$`-quoted function bodies work.
|
|
78
|
-
*/
|
|
79
57
|
export async function migrate(pool, m) {
|
|
80
58
|
await inPoolTransaction(pool, async (client) => {
|
|
81
59
|
for (const statement of m.statements)
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAkB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,14 +3,7 @@ import { type PgQueryable } from "./client.js";
|
|
|
3
3
|
import type { PgTypeMap } from "./type-map.js";
|
|
4
4
|
export { executor, type MigrationSource, migrate, type PgPoolLike, type PgQueryable, type PgQueryConfig, type PgResult, type PgTransactionClient, } from "./client.js";
|
|
5
5
|
export type { PgInterval, PgParamTypeMap, PgTypeMap } from "./type-map.js";
|
|
6
|
-
/** What `createSql<DB>(client)` returns: core's `Sql` under `PgTypeMap`, with `transaction(fn)`. */
|
|
7
6
|
export type PgSql<DB, Keys extends RowKeys = "preserve"> = TransactionalSql<DB, PgTypeMap, Keys>;
|
|
8
|
-
/**
|
|
9
|
-
* `createSql<DB>()` from core, pre-bound to `PgTypeMap` (`count(*)` is `string`, `int8` is `string`, dates are `Date`).
|
|
10
|
-
* The queries' `execute*` methods run on `client` (a `Pool`, `Client` or `PoolClient`), and
|
|
11
|
-
* `sql.transaction(fn)` runs `fn` with a `sql` bound to one transaction.
|
|
12
|
-
* `{ rowKeys: "camelCase" }` camelCases the rows' keys, in the types and at runtime.
|
|
13
|
-
*/
|
|
14
7
|
export declare function createSql<DB>(client: PgQueryable | undefined, options: {
|
|
15
8
|
readonly rowKeys: "camelCase";
|
|
16
9
|
}): PgSql<DB, "camelCase">;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAc,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EACN,QAAQ,EACR,KAAK,eAAe,EACpB,OAAO,EACP,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,mBAAmB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE3E,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAc,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EACN,QAAQ,EACR,KAAK,eAAe,EACpB,OAAO,EACP,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,mBAAmB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE3E,MAAM,MAAM,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,OAAO,GAAG,UAAU,IAAI,gBAAgB,CAC1E,EAAE,EACF,SAAS,EACT,IAAI,CACJ,CAAC;AAEF,wBAAgB,SAAS,CAAC,EAAE,EAC3B,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,OAAO,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GACxC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AAC1B,wBAAgB,SAAS,CAAC,EAAE,EAC3B,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE,GACzC,KAAK,CAAC,EAAE,CAAC,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AAGvD,OAAO,EACN,QAAQ,EAER,OAAO,GAMP,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AAGvD,OAAO,EACN,QAAQ,EAER,OAAO,GAMP,MAAM,aAAa,CAAC;AAiBrB,MAAM,UAAU,SAAS,CACxB,MAAoB,EACpB,OAAoB;IAEpB,OAAO,sBAAsB,CAC5B,MAAM,EACN,MAAM,EACN,OAAO,CACP,CAAC;AACH,CAAC"}
|
package/dist/introspect/cli.d.ts
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import type { PgQueryable } from "../client.js";
|
|
2
2
|
import { type GenerateOptions } from "./emit.js";
|
|
3
3
|
import { type IntrospectOptions } from "./introspect.js";
|
|
4
|
-
/** What a `--config` module exports as its default: CLI settings plus every generator option. */
|
|
5
4
|
export interface IntrospectConfig extends GenerateOptions, IntrospectOptions {
|
|
6
|
-
/** Connection string. Default: `--url`, then `$DATABASE_URL`. */
|
|
7
5
|
readonly url?: string;
|
|
8
|
-
/** Output file, relative to the working directory. Default: stdout. */
|
|
9
6
|
readonly out?: string;
|
|
10
7
|
}
|
|
11
8
|
interface Io {
|
|
@@ -13,12 +10,10 @@ interface Io {
|
|
|
13
10
|
readonly stderr: (s: string) => void;
|
|
14
11
|
readonly env: Readonly<Record<string, string | undefined>>;
|
|
15
12
|
readonly cwd: string;
|
|
16
|
-
/** Opens a client for a connection string; default: a `pg.Client`. */
|
|
17
13
|
readonly connect?: (url: string) => Promise<PgQueryable & {
|
|
18
14
|
end(): Promise<void>;
|
|
19
15
|
}>;
|
|
20
16
|
}
|
|
21
|
-
/** Runs the `typesql` CLI with `argv` (without `node` and the script). Returns the exit code. */
|
|
22
17
|
export declare function main(argv: readonly string[], io?: Io): Promise<number>;
|
|
23
18
|
export {};
|
|
24
19
|
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/introspect/cli.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,eAAe,EAAkB,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,KAAK,iBAAiB,EAAc,MAAM,iBAAiB,CAAC;AAErE,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/introspect/cli.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,eAAe,EAAkB,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,KAAK,iBAAiB,EAAc,MAAM,iBAAiB,CAAC;AAErE,MAAM,WAAW,gBAAiB,SAAQ,eAAe,EAAE,iBAAiB;IAC3E,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACtB;AAmBD,UAAU,EAAE;IACX,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,CAClB,GAAG,EAAE,MAAM,KACP,OAAO,CAAC,WAAW,GAAG;QAAE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC,CAAC;CACrD;AAwCD,wBAAsB,IAAI,CACzB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,GAAE,EAAgB,GAClB,OAAO,CAAC,MAAM,CAAC,CAuEjB"}
|
package/dist/introspect/cli.js
CHANGED
|
@@ -53,7 +53,6 @@ const parse = (argv) => parseArgs({
|
|
|
53
53
|
help: { type: "boolean", short: "h" },
|
|
54
54
|
},
|
|
55
55
|
});
|
|
56
|
-
/** Runs the `typesql` CLI with `argv` (without `node` and the script). Returns the exit code. */
|
|
57
56
|
export async function main(argv, io = defaultIo()) {
|
|
58
57
|
let parsed;
|
|
59
58
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/introspect/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAwB,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAA0B,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/introspect/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +1,11 @@
|
|
|
1
1
|
import type { IntrospectedColumn, IntrospectedDatabase, IntrospectedRelation } from "./introspect.js";
|
|
2
2
|
export interface GenerateOptions {
|
|
3
|
-
/** Name of the exported schema interface. Default `"DB"`. */
|
|
4
3
|
readonly typeName?: string;
|
|
5
|
-
/** Module the column helpers are imported from. Default `"@typesql/core"`. */
|
|
6
4
|
readonly importFrom?: string;
|
|
7
|
-
/** Extra lines after the helper import, e.g. `import type { HistoryItem } from "./json.js";`. */
|
|
8
5
|
readonly imports?: readonly string[];
|
|
9
|
-
/**
|
|
10
|
-
* TypeScript types of `json` / `jsonb` columns: a map keyed `"table.column"` (public) or
|
|
11
|
-
* `"schema.table.column"`, or a function returning the TS type source for a column (or
|
|
12
|
-
* `undefined`). Such a column is declared as `Json<T>`: still jsonb to the SQL, read as `T`,
|
|
13
|
-
* written with `sql.json(value)`. Other columns are an error (use `column` for those).
|
|
14
|
-
*/
|
|
15
6
|
readonly columnTypes?: Readonly<Record<string, string>> | ((column: IntrospectedColumn, relation: IntrospectedRelation) => string | undefined);
|
|
16
|
-
/**
|
|
17
|
-
* Full control over one column: return the TypeScript source of its descriptor
|
|
18
|
-
* (`Col<"jsonb">`, a helper of your own, ...) or `undefined` to keep the default.
|
|
19
|
-
*/
|
|
20
7
|
readonly column?: (column: IntrospectedColumn, relation: IntrospectedRelation) => string | undefined;
|
|
21
|
-
/** Emit table and column comments and notes as JSDoc. Default `true`. */
|
|
22
8
|
readonly comments?: boolean;
|
|
23
9
|
}
|
|
24
|
-
/**
|
|
25
|
-
* TypeScript source declaring the TypeSQL schema of an introspected database: `public`
|
|
26
|
-
* relations at the top level, other schemas nested (`DB["auth"]["sessions"]`), views and
|
|
27
|
-
* materialized views as `View<…>`, enums under `$types`.
|
|
28
|
-
*/
|
|
29
10
|
export declare function generateSource(db: IntrospectedDatabase, options?: GenerateOptions): string;
|
|
30
11
|
//# sourceMappingURL=emit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/introspect/emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,eAAe;IAC/B,
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/introspect/emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAClB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAChC,CAAC,CACD,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,oBAAoB,KACzB,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,CACjB,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,oBAAoB,KAC1B,MAAM,GAAG,SAAS,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC5B;AA2CD,wBAAgB,cAAc,CAC7B,EAAE,EAAE,oBAAoB,EACxB,OAAO,GAAE,eAAoB,GAC3B,MAAM,CA2JR"}
|
package/dist/introspect/emit.js
CHANGED
|
@@ -32,18 +32,12 @@ function columnNotes(c) {
|
|
|
32
32
|
notes.push("`GENERATED ALWAYS AS IDENTITY`: written only with `OVERRIDING SYSTEM VALUE`.");
|
|
33
33
|
return notes;
|
|
34
34
|
}
|
|
35
|
-
/**
|
|
36
|
-
* TypeScript source declaring the TypeSQL schema of an introspected database: `public`
|
|
37
|
-
* relations at the top level, other schemas nested (`DB["auth"]["sessions"]`), views and
|
|
38
|
-
* materialized views as `View<…>`, enums under `$types`.
|
|
39
|
-
*/
|
|
40
35
|
export function generateSource(db, options = {}) {
|
|
41
36
|
const typeName = options.typeName ?? "DB";
|
|
42
37
|
const comments = options.comments ?? true;
|
|
43
38
|
const columnTypes = options.columnTypes ?? {};
|
|
44
39
|
const used = new Set();
|
|
45
40
|
const usedKeys = new Set();
|
|
46
|
-
/** The TS type `columnTypes` gives a column, if any. */
|
|
47
41
|
const customType = (rel, col) => {
|
|
48
42
|
const qualified = `${rel.schema}.${rel.name}.${col.name}`;
|
|
49
43
|
const short = `${rel.name}.${col.name}`;
|
|
@@ -51,7 +45,6 @@ export function generateSource(db, options = {}) {
|
|
|
51
45
|
if (typeof columnTypes === "function")
|
|
52
46
|
ts = columnTypes(col, rel);
|
|
53
47
|
else {
|
|
54
|
-
// The keys contain a dot, so no key is a property every object has.
|
|
55
48
|
const k = rel.schema === "public" && !(qualified in columnTypes)
|
|
56
49
|
? short
|
|
57
50
|
: qualified;
|
|
@@ -63,7 +56,6 @@ export function generateSource(db, options = {}) {
|
|
|
63
56
|
}
|
|
64
57
|
return ts;
|
|
65
58
|
};
|
|
66
|
-
/** `Json<T>`, `Json<T, { nullable: true }>`, `Json<T, {}, "json">`, … */
|
|
67
59
|
const jsonDescriptor = (col, ts) => {
|
|
68
60
|
const flags = [
|
|
69
61
|
...(col.nullable ? ["nullable: true"] : []),
|
|
@@ -122,8 +114,6 @@ export function generateSource(db, options = {}) {
|
|
|
122
114
|
lines.push(` ${key(schema)}: {\n${body.join("\n")}\n };`);
|
|
123
115
|
}
|
|
124
116
|
if (db.enums.length > 0) {
|
|
125
|
-
// TypeSQL's enum registry is flat (`Col<"mood">`, schema qualifiers are dropped), so enums
|
|
126
|
-
// of the same name in different schemas share an entry.
|
|
127
117
|
const byName = new Map();
|
|
128
118
|
for (const e of db.enums) {
|
|
129
119
|
const entry = byName.get(e.name) ?? {
|
|
@@ -167,7 +157,6 @@ export function generateSource(db, options = {}) {
|
|
|
167
157
|
"}",
|
|
168
158
|
"",
|
|
169
159
|
];
|
|
170
|
-
// A function has no keys of its own.
|
|
171
160
|
const unknownKeys = Object.keys(columnTypes).filter((k) => !usedKeys.has(k));
|
|
172
161
|
if (unknownKeys.length > 0 && options.column === undefined) {
|
|
173
162
|
throw new Error(`columnTypes: no column ${unknownKeys.map((k) => JSON.stringify(k)).join(", ")} (keys are "table.column" for public tables, else "schema.table.column")`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/introspect/emit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/introspect/emit.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,23 +3,13 @@ import { type NullabilityOptions } from "./nullability.js";
|
|
|
3
3
|
export type RelationKind = "table" | "partitioned table" | "view" | "materialized view" | "foreign table";
|
|
4
4
|
export interface IntrospectedColumn {
|
|
5
5
|
readonly name: string;
|
|
6
|
-
/**
|
|
7
|
-
* Canonical Postgres type name as TypeSQL spells it: `int4`, `timestamptz`, `varchar`, an enum
|
|
8
|
-
* name, `${T}[]` for arrays. Domains are replaced by their base type; `citext` is `text`.
|
|
9
|
-
*/
|
|
10
6
|
readonly type: string;
|
|
11
|
-
/** The column's type as Postgres prints it (`character varying(40)`, a domain name, ...). */
|
|
12
7
|
readonly declaredType: string;
|
|
13
|
-
/** The domain the column is declared with, if any (`public.positive`). */
|
|
14
8
|
readonly domain: string | null;
|
|
15
9
|
readonly nullable: boolean;
|
|
16
|
-
/** Optional on INSERT: a DEFAULT, serial, identity or generated column. Always false for views. */
|
|
17
10
|
readonly hasDefault: boolean;
|
|
18
|
-
/** `GENERATED ALWAYS AS IDENTITY` / `GENERATED BY DEFAULT AS IDENTITY`. */
|
|
19
11
|
readonly identity: "always" | "by default" | null;
|
|
20
|
-
/** The expression of a `GENERATED ALWAYS AS (…) STORED` column. */
|
|
21
12
|
readonly generated: string | null;
|
|
22
|
-
/** The DEFAULT expression. */
|
|
23
13
|
readonly default: string | null;
|
|
24
14
|
readonly comment: string | null;
|
|
25
15
|
}
|
|
@@ -33,35 +23,18 @@ export interface IntrospectedRelation {
|
|
|
33
23
|
export interface IntrospectedEnum {
|
|
34
24
|
readonly schema: string;
|
|
35
25
|
readonly name: string;
|
|
36
|
-
/** Labels in sort order. */
|
|
37
26
|
readonly values: readonly string[];
|
|
38
27
|
}
|
|
39
28
|
export interface IntrospectedDatabase {
|
|
40
|
-
/** `server_version`, e.g. `17.2`. */
|
|
41
29
|
readonly version: string;
|
|
42
|
-
/** Schemas that were read, in order. */
|
|
43
30
|
readonly schemas: readonly string[];
|
|
44
31
|
readonly relations: readonly IntrospectedRelation[];
|
|
45
|
-
/** Enums of the read schemas and enums their columns use. */
|
|
46
32
|
readonly enums: readonly IntrospectedEnum[];
|
|
47
33
|
}
|
|
48
34
|
export interface IntrospectOptions {
|
|
49
|
-
/** Schemas to read. Default: every schema except `pg_catalog`, `information_schema` and `pg_*`. */
|
|
50
35
|
readonly schemas?: readonly string[];
|
|
51
|
-
/**
|
|
52
|
-
* Relations to leave out: names (`kysely_migration`) or `schema.name`, with `*` matching any
|
|
53
|
-
* run of characters (`kysely_migration*`, `audit.*`).
|
|
54
|
-
*/
|
|
55
36
|
readonly exclude?: readonly string[];
|
|
56
|
-
/**
|
|
57
|
-
* View columns to treat as NOT NULL when the analysis cannot prove it, called with the view's
|
|
58
|
-
* name and the column's name.
|
|
59
|
-
*/
|
|
60
37
|
readonly viewNotNull?: NullabilityOptions["notNull"];
|
|
61
38
|
}
|
|
62
|
-
/**
|
|
63
|
-
* Read tables, views, materialized views, foreign tables and enums of a live database through
|
|
64
|
-
* any node-postgres-style client (`Client`, `Pool`, `PoolClient`).
|
|
65
|
-
*/
|
|
66
39
|
export declare function introspect(client: PgQueryable, options?: IntrospectOptions): Promise<IntrospectedDatabase>;
|
|
67
40
|
//# sourceMappingURL=introspect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../../src/introspect/introspect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,kBAAkB,EAAmB,MAAM,kBAAkB,CAAC;AAE5E,MAAM,MAAM,YAAY,GACrB,OAAO,GACP,mBAAmB,GACnB,MAAM,GACN,mBAAmB,GACnB,eAAe,CAAC;AAEnB,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB
|
|
1
|
+
{"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../../src/introspect/introspect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,kBAAkB,EAAmB,MAAM,kBAAkB,CAAC;AAE5E,MAAM,MAAM,YAAY,GACrB,OAAO,GACP,mBAAmB,GACnB,MAAM,GACN,mBAAmB,GACnB,eAAe,CAAC;AAEnB,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAChD;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;CACrD;AAyED,wBAAsB,UAAU,CAC/B,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,iBAAsB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAqJ/B"}
|
|
@@ -10,12 +10,10 @@ const KINDS = {
|
|
|
10
10
|
m: "materialized view",
|
|
11
11
|
f: "foreign table",
|
|
12
12
|
};
|
|
13
|
-
/** Postgres type names TypeSQL spells differently. */
|
|
14
13
|
const TYPE_ALIASES = { citext: "text" };
|
|
15
14
|
function resolver(types) {
|
|
16
15
|
const resolve = (oid) => {
|
|
17
16
|
const t = types.get(oid);
|
|
18
|
-
// A type created after the types were read (a concurrent CREATE TYPE and CREATE TABLE)
|
|
19
17
|
if (!t)
|
|
20
18
|
return { type: "unknown", notnull: false, scalarOid: oid, domain: null };
|
|
21
19
|
if (t.typtype === "d") {
|
|
@@ -26,8 +24,6 @@ function resolver(types) {
|
|
|
26
24
|
domain: `${t.schema}.${t.name}`,
|
|
27
25
|
};
|
|
28
26
|
}
|
|
29
|
-
// `typelem` is "0" (no type) for scalars; fixed-length types like `point` have one but are
|
|
30
|
-
// not its array type.
|
|
31
27
|
const elem = types.get(t.elem);
|
|
32
28
|
if (elem && elem.array === t.oid) {
|
|
33
29
|
const inner = resolve(elem.oid);
|
|
@@ -47,12 +43,7 @@ function resolver(types) {
|
|
|
47
43
|
};
|
|
48
44
|
return resolve;
|
|
49
45
|
}
|
|
50
|
-
/** Default schema filter: everything but the system schemas. */
|
|
51
46
|
const USER_SCHEMAS = `n.nspname NOT IN ('pg_catalog', 'information_schema') AND n.nspname NOT LIKE 'pg\\_%'`;
|
|
52
|
-
/**
|
|
53
|
-
* Read tables, views, materialized views, foreign tables and enums of a live database through
|
|
54
|
-
* any node-postgres-style client (`Client`, `Pool`, `PoolClient`).
|
|
55
|
-
*/
|
|
56
47
|
export async function introspect(client, options = {}) {
|
|
57
48
|
const q = async (text, values) => (await client.query(text, values)).rows;
|
|
58
49
|
const [{ version }] = (await q(`SELECT current_setting('server_version') AS version`));
|
|
@@ -90,7 +81,6 @@ export async function introspect(client, options = {}) {
|
|
|
90
81
|
const views = new ViewNullability((text, values) => client.query(text, values), {
|
|
91
82
|
...(options.viewNotNull && { notNull: options.viewNotNull }),
|
|
92
83
|
});
|
|
93
|
-
/** Types the columns use: their enums are read even outside `schemas`. */
|
|
94
84
|
const usedTypes = new Set();
|
|
95
85
|
const relations = [];
|
|
96
86
|
for (const rel of relRows) {
|
|
@@ -112,7 +102,6 @@ export async function introspect(client, options = {}) {
|
|
|
112
102
|
declaredType: c.declared,
|
|
113
103
|
domain: t.domain,
|
|
114
104
|
nullable: viewNotNull ? !viewNotNull[i] : !(c.notnull || t.notnull),
|
|
115
|
-
// A generated column's expression is its `default` row in pg_attrdef.
|
|
116
105
|
hasDefault: !isView && (c.default !== null || identity !== null),
|
|
117
106
|
identity,
|
|
118
107
|
generated,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"introspect.js","sourceRoot":"","sources":["../../src/introspect/introspect.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"introspect.js","sourceRoot":"","sources":["../../src/introspect/introspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nullability of view columns, derived from the view's query tree.
|
|
3
|
-
*
|
|
4
|
-
* Postgres records no NOT NULL information for view (or materialized view) columns. Its rewrite
|
|
5
|
-
* rule (`pg_rewrite.ev_action`, the `_RETURN` rule) holds the parsed query, though, and from
|
|
6
|
-
* PostgreSQL 16 every column reference in it carries `varnullingrels`, the outer joins that can
|
|
7
|
-
* null it. A view column is NOT NULL here only when its expression provably cannot be NULL: a
|
|
8
|
-
* NOT NULL table column that no outer join nulls, a non-NULL constant, a cast or a strict
|
|
9
|
-
* operator over such values, a CASE whose every branch is NOT NULL, `count(*)`, ... Anything
|
|
10
|
-
* else (function calls outside a short list, scalar subqueries, set-returning function columns)
|
|
11
|
-
* is nullable. On PostgreSQL 15 and older every column reference counts as nullable.
|
|
12
|
-
*
|
|
13
|
-
* This module has no imports so that scripts/pg-catalog-from-pg.ts can load it with Node's
|
|
14
|
-
* type stripping.
|
|
15
|
-
*/
|
|
16
|
-
/** Runs a query: node-postgres' `client.query(text, values)` fits. */
|
|
17
1
|
export type QueryFn = (text: string, values?: unknown[]) => Promise<{
|
|
18
2
|
readonly rows: readonly any[];
|
|
19
3
|
}>;
|
|
20
4
|
export interface NullabilityOptions {
|
|
21
|
-
/**
|
|
22
|
-
* Columns known never to be NULL that the analysis cannot prove (typically columns of a
|
|
23
|
-
* set-returning function). Called with the view's name and the column's name.
|
|
24
|
-
*/
|
|
25
5
|
readonly notNull?: (view: string, column: string) => boolean;
|
|
26
6
|
}
|
|
27
|
-
/** A node of a parsed `pg_node_tree`: `{ _: "VAR", varno: "1", … }`. */
|
|
28
7
|
export interface Node {
|
|
29
8
|
readonly _: string;
|
|
30
9
|
readonly [field: string]: NodeValue;
|
|
31
10
|
}
|
|
32
11
|
export type NodeValue = Node | readonly NodeValue[] | string | null;
|
|
33
|
-
/** Parse a node tree into plain values: nodes as objects, lists as arrays, `<>` as null. */
|
|
34
12
|
export declare function parseNodeTree(text: string): NodeValue;
|
|
35
|
-
/** Per-column NOT NULL of views and materialized views; caches what it reads. */
|
|
36
13
|
export declare class ViewNullability {
|
|
37
14
|
private readonly query;
|
|
38
15
|
private readonly options;
|
|
@@ -42,18 +19,14 @@ export declare class ViewNullability {
|
|
|
42
19
|
private procs;
|
|
43
20
|
private operators;
|
|
44
21
|
constructor(query: QueryFn, options?: NullabilityOptions);
|
|
45
|
-
/** NOT NULL flags of the view's columns, in column order. `relid` is the view's `pg_class.oid`. */
|
|
46
22
|
notNull(relid: string | number): Promise<boolean[]>;
|
|
47
23
|
private analyze;
|
|
48
24
|
private loadProcs;
|
|
49
25
|
private loadOperators;
|
|
50
|
-
/** A built-in operator that returns a value for non-NULL operands. */
|
|
51
26
|
private strictOperator;
|
|
52
27
|
private columns;
|
|
53
|
-
/** Is output column `attno` (1-based) of a (sub)query NOT NULL? */
|
|
54
28
|
private queryColumn;
|
|
55
29
|
private variable;
|
|
56
|
-
/** Column `attno` of a single set-returning function in FROM (`WITH ORDINALITY` adds a NOT NULL counter). */
|
|
57
30
|
private functionColumn;
|
|
58
31
|
private all;
|
|
59
32
|
private expr;
|