okmodel 0.6.0 → 0.8.0
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/README.md +100 -1131
- package/dist/adapters/capabilities.d.ts +35 -0
- package/dist/adapters/failure.d.ts +13 -2
- package/dist/adapters/lazy-errors.d.ts +22 -0
- package/dist/adapters/pg/bun-sql.d.ts +53 -0
- package/dist/adapters/pg/bunsql-extra.d.ts +54 -3
- package/dist/adapters/pg/bunsql.d.ts +15 -2
- package/dist/adapters/pg/cursor.d.ts +17 -0
- package/dist/adapters/pg/neon-extra.d.ts +18 -0
- package/dist/adapters/pg/neon.d.ts +104 -0
- package/dist/adapters/pg/no-inflight-timeout.d.ts +11 -8
- package/dist/adapters/pg/nodepostgres-extra.d.ts +22 -1
- package/dist/adapters/pg/nodepostgres.d.ts +12 -0
- package/dist/adapters/pg/pglite-wire.d.ts +24 -0
- package/dist/adapters/pg/pglite.d.ts +10 -0
- package/dist/adapters/pg/postgres-extra.d.ts +27 -11
- package/dist/adapters/pg/reserved.d.ts +42 -0
- package/dist/adapters/pg/session.d.ts +0 -18
- package/dist/contracts/connection.d.ts +7 -6
- package/dist/contracts/error.d.ts +1 -1
- package/dist/dialects/pg/floor.d.ts +68 -0
- package/dist/dialects/pg/fn/index.d.ts +39 -1
- package/dist/dialects/pg/fn/index.js +118 -26
- package/dist/dialects/pg/index.d.ts +8 -1
- package/dist/dialects/pg/index.js +435 -170
- package/dist/dialects/pg/introspect.d.ts +11 -0
- package/dist/dialects/pg/keys.d.ts +11 -8
- package/dist/dialects/pg/model.d.ts +40 -0
- package/dist/dialects/pg/morph.d.ts +43 -0
- package/dist/dialects/pg/operator-fit.d.ts +2 -2
- package/dist/dialects/pg/operators.d.ts +14 -7
- package/dist/dialects/pg/ops/bucket.d.ts +65 -0
- package/dist/dialects/pg/ops/fragment.d.ts +119 -0
- package/dist/dialects/pg/ops/inc.d.ts +2 -2
- package/dist/dialects/pg/ops/lane.d.ts +49 -0
- package/dist/dialects/pg/ops/matches.d.ts +9 -12
- package/dist/dialects/pg/ops/relevance.d.ts +13 -0
- package/dist/dialects/pg/ops/search-query.d.ts +22 -0
- package/dist/dialects/pg/ops/window.d.ts +103 -0
- package/dist/dialects/pg/preset.d.ts +1 -1
- package/dist/dialects/pg/relations.d.ts +100 -3
- package/dist/dialects/pg/schema.d.ts +31 -3
- package/dist/dialects/pg/view/client.d.ts +14 -6
- package/dist/dialects/pg/view/index.d.ts +73 -1
- package/dist/dialects/pg/view/index.js +156 -5
- package/dist/dialects/pg/view/scratch.d.ts +8 -5
- package/dist/runtime/aggregate.d.ts +8 -2
- package/dist/runtime/bucket-group.d.ts +70 -0
- package/dist/runtime/conflict.d.ts +22 -4
- package/dist/runtime/include.d.ts +0 -8
- package/dist/runtime/inflight.d.ts +1 -1
- package/dist/runtime/otel.d.ts +105 -0
- package/dist/runtime/otel.js +97 -0
- package/dist/runtime/page.d.ts +4 -1
- package/dist/runtime/pg/bun.js +12 -6
- package/dist/runtime/pg/neon.d.ts +38 -0
- package/dist/runtime/pg/neon.js +64 -0
- package/dist/runtime/pg/pg.js +5 -5
- package/dist/runtime/pg/pglite.d.ts +1 -0
- package/dist/runtime/pg/pglite.js +9 -9
- package/dist/runtime/pg/postgresjs.js +5 -5
- package/dist/runtime/plan.d.ts +95 -5
- package/dist/runtime/read-stream.d.ts +13 -16
- package/dist/runtime/result-name.d.ts +17 -0
- package/dist/runtime/server-check.d.ts +3 -3
- package/dist/runtime/sort-bind.d.ts +21 -0
- package/dist/runtime/sort.d.ts +56 -0
- package/dist/runtime/sql-fragment.d.ts +43 -0
- package/dist/runtime/sync.d.ts +70 -0
- package/dist/runtime/tenancy/index.js +15 -13
- package/dist/runtime/text-search.d.ts +20 -0
- package/dist/runtime/topology.d.ts +1 -1
- package/dist/runtime/traits/index.d.ts +80 -0
- package/dist/runtime/traits/index.js +184 -21
- package/dist/runtime/tree.d.ts +38 -0
- package/dist/runtime/types.d.ts +232 -22
- package/dist/runtime/validate/index.js +4 -4
- package/dist/runtime/version.d.ts +39 -0
- package/dist/runtime/window.d.ts +21 -0
- package/dist/runtime/write.d.ts +54 -2
- package/dist/shared/{929h19xp.js → 0wrea3jq.js} +141 -13
- package/dist/shared/{qq3899ht.js → 12z7aznj.js} +243 -14
- package/dist/shared/{1z04fa85.js → 14x60fbf.js} +12 -57
- package/dist/shared/{ek2wt2dz.js → 16kvjebh.js} +4 -4
- package/dist/shared/{wynzeggs.js → 195pzzzz.js} +8 -8
- package/dist/shared/1d9q9cv2.js +312 -0
- package/dist/shared/2c13q96h.js +18 -0
- package/dist/shared/{b4v57v3x.js → 2d3xq4ps.js} +2 -2
- package/dist/shared/{1f0xa3cb.js → 3449rcae.js} +5 -5
- package/dist/shared/{wkme6tep.js → 35q0n9tz.js} +8 -16
- package/dist/shared/3bb7wsqt.js +99 -0
- package/dist/shared/3t6kw83m.js +249 -0
- package/dist/shared/{5j36z8dn.js → 4m6hskg8.js} +39 -70
- package/dist/shared/{n076ydsc.js → 4vbf83xx.js} +69 -28
- package/dist/shared/{vmfkhszw.js → 63f4ksbz.js} +33 -26
- package/dist/shared/{c58secgj.js → 63qtkrca.js} +38 -4
- package/dist/shared/6m78c8ss.js +6 -0
- package/dist/shared/{x3jc53kg.js → 760ppr76.js} +15 -7
- package/dist/shared/7ghwamrf.js +40 -0
- package/dist/shared/7kms6fvj.js +20 -0
- package/dist/shared/7n7ddwt4.js +6 -0
- package/dist/shared/9a4ae4p8.js +31 -0
- package/dist/shared/{hazqqecq.js → 9dr2qnx7.js} +63 -34
- package/dist/shared/{h15jx9bc.js → 9dvh1dr6.js} +1 -1
- package/dist/shared/a62rb2da.js +13 -0
- package/dist/shared/{cgbamx3e.js → ae4j5f42.js} +23 -4
- package/dist/shared/agsfb86s.js +233 -0
- package/dist/shared/{8x72s86k.js → b6d6p0zc.js} +13 -7
- package/dist/shared/{ag4c7516.js → b76b8d95.js} +2 -2
- package/dist/shared/{j60w0dvr.js → bah9nbg3.js} +58 -38
- package/dist/shared/bnby0esn.js +10 -0
- package/dist/shared/bsek72fg.js +225 -0
- package/dist/shared/{2cg3wnxc.js → bxas03mq.js} +608 -141
- package/dist/shared/{31vm914h.js → cm3w0ywp.js} +15 -16
- package/dist/shared/{gwn6v667.js → cnkky55j.js} +25 -14
- package/dist/shared/{dk8v79p3.js → d5nmj7vv.js} +1 -1
- package/dist/shared/{ttmg09vd.js → dpc2r7rb.js} +8 -8
- package/dist/shared/dzj09cye.js +10 -0
- package/dist/shared/{sbdme3vy.js → e8zyaqvj.js} +60 -10
- package/dist/shared/{2jd1sn0e.js → ecn8mfdq.js} +6 -6
- package/dist/shared/exn3sd90.js +359 -0
- package/dist/shared/{t3g0k88x.js → f4jy1j7x.js} +39 -22
- package/dist/shared/{y2t3jktd.js → fjpnhqan.js} +20 -13
- package/dist/shared/g5yc06ka.js +272 -0
- package/dist/shared/ga9j92qj.js +25 -0
- package/dist/shared/{3fqwmr09.js → hfqmpasr.js} +6 -6
- package/dist/shared/{wt5rzv1h.js → hm5f8jby.js} +7 -7
- package/dist/shared/{ys0xzyaj.js → hqpxf4a4.js} +224 -19
- package/dist/shared/jebgrkeq.js +179 -0
- package/dist/shared/{09p049xa.js → jp36k7dp.js} +44 -16
- package/dist/shared/jx2m62cs.js +96 -0
- package/dist/shared/{r11n8grd.js → k86n8vq3.js} +7 -4
- package/dist/shared/{2z7wv5tj.js → kgwp4jdd.js} +56 -35
- package/dist/shared/{knmes2kh.js → kj9d8maq.js} +1 -1
- package/dist/shared/{g90m9b0g.js → m4xff2a6.js} +6 -5
- package/dist/shared/{r6nwkxnt.js → m7n9h2a5.js} +4 -4
- package/dist/shared/mfedzr74.js +145 -0
- package/dist/shared/{f0f1n281.js → mkrn359n.js} +60 -11
- package/dist/shared/{p248q79y.js → mnvjvqyp.js} +10 -10
- package/dist/shared/{672t5vym.js → mss6ctgv.js} +2 -2
- package/dist/shared/{4az561fn.js → mtw6jz76.js} +8 -23
- package/dist/shared/n05z9nwz.js +313 -0
- package/dist/shared/{pjr6xrm5.js → n0jmpgj1.js} +20 -17
- package/dist/shared/{p6bjzq9q.js → n41w4fbz.js} +14 -6
- package/dist/shared/{b3awxn7h.js → n454kcnw.js} +1 -1
- package/dist/shared/n7kg8mmx.js +61 -0
- package/dist/shared/nbw1z4yd.js +18 -0
- package/dist/shared/needfe47.js +66 -0
- package/dist/shared/{1nw1f3vs.js → njga14v4.js} +9 -9
- package/dist/shared/{5yv4k6a6.js → nmnsgj7x.js} +145 -3
- package/dist/shared/{vjpnzwjz.js → p3xbdcvt.js} +14 -18
- package/dist/shared/p5nh3r8q.js +622 -0
- package/dist/shared/{nx9hh281.js → pan0370z.js} +13 -12
- package/dist/shared/q0cqt2sp.js +12 -0
- package/dist/shared/qd9hhd8f.js +37 -0
- package/dist/shared/{mb2ycs1p.js → qfw14tna.js} +15 -15
- package/dist/shared/{9s0ypp87.js → sjk86yrx.js} +1 -1
- package/dist/shared/th3be82n.js +208 -0
- package/dist/shared/{ed0b8k4s.js → typ3vy7t.js} +1 -1
- package/dist/shared/{5d8t84hg.js → v1wad97q.js} +14 -14
- package/dist/shared/{x72jb7ad.js → v8g1vgv8.js} +1 -1
- package/dist/shared/{9628a9xt.js → vk7rag46.js} +1 -1
- package/dist/shared/{ze4hxsmy.js → w9ejzaqf.js} +1 -1
- package/dist/shared/{q3j1tq7a.js → wcrheftc.js} +148 -23
- package/dist/shared/wvdjznah.js +213 -0
- package/dist/shared/wz2a78mp.js +8 -0
- package/dist/shared/xfhe73sb.js +436 -0
- package/dist/shared/{r1fdd0f6.js → z581d7ny.js} +5 -2
- package/dist/shared/{8etn7d8w.js → z7s6fpxv.js} +1 -1
- package/dist/shared/{32cnm7kn.js → zbqbmmrp.js} +76 -40
- package/dist/shared/{n7mcc1gk.js → zchaghkf.js} +4 -3
- package/dist/shared/{xq0mvhts.js → zgex00fd.js} +6 -6
- package/dist/shared/{nsva2a6b.js → znm0bpp5.js} +3 -0
- package/dist/shared/zq1he88x.js +155 -0
- package/dist/tooling/cli.js +26 -13
- package/dist/tooling/driver-run.js +4971 -0
- package/dist/tooling/driver-test.d.ts +36 -0
- package/dist/tooling/migrate/commands.d.ts +2 -2
- package/dist/tooling/migrate/engine.d.ts +3 -2
- package/dist/tooling/migrate/index.js +9 -9
- package/dist/tooling/migrate/project.d.ts +3 -0
- package/dist/tooling/shared/03k6res6.js +210 -0
- package/dist/tooling/shared/08kemxjd.js +10 -0
- package/dist/tooling/shared/2revefqt.js +209 -0
- package/dist/tooling/shared/2wtvc7rw.js +1425 -0
- package/dist/tooling/shared/345tbc2k.js +16 -0
- package/dist/tooling/shared/3m1hkg7z.js +344 -0
- package/dist/tooling/shared/3rrw5w8f.js +81 -0
- package/dist/tooling/shared/3tq8pnb8.js +131 -0
- package/dist/tooling/shared/417zdsk7.js +194 -0
- package/dist/tooling/shared/4d2w25vw.js +40 -0
- package/dist/tooling/shared/54tqkxja.js +51 -0
- package/dist/tooling/shared/5bvw2nev.js +12 -0
- package/dist/tooling/shared/6nyfyw70.js +231 -0
- package/dist/tooling/shared/72fyg4zv.js +160 -0
- package/dist/tooling/shared/733a1tq3.js +38 -0
- package/dist/tooling/shared/7ae7rjmn.js +20 -0
- package/dist/tooling/shared/7kms6fvj.js +20 -0
- package/dist/tooling/shared/8sqrsw3s.js +49 -0
- package/dist/tooling/shared/96ps4g1z.js +32 -0
- package/dist/tooling/shared/9kazs5p6.js +195 -0
- package/dist/tooling/shared/9xzm7hjg.js +38 -0
- package/dist/tooling/shared/a6pp9d12.js +49 -0
- package/dist/tooling/shared/a7q7t4n3.js +22 -0
- package/dist/tooling/shared/aftb2mwr.js +18 -0
- package/dist/tooling/shared/bz2dqhab.js +311 -0
- package/dist/tooling/shared/cmptmb4f.js +12 -0
- package/dist/tooling/shared/ddjtfgnx.js +177 -0
- package/dist/tooling/shared/djydjpqt.js +261 -0
- package/dist/tooling/shared/dw08f3m8.js +9 -0
- package/dist/tooling/shared/dy672fz6.js +16 -0
- package/dist/tooling/shared/dzx85q70.js +66 -0
- package/dist/tooling/shared/ec71zqgt.js +270 -0
- package/dist/{shared/d5azex6s.js → tooling/shared/ep8zh3bk.js} +1 -1
- package/dist/tooling/shared/f9mphxej.js +3789 -0
- package/dist/tooling/shared/fb9k2qwd.js +89 -0
- package/dist/tooling/shared/g9ad4n80.js +211 -0
- package/dist/tooling/shared/gfvtj6d0.js +94 -0
- package/dist/tooling/shared/gmcf9cxf.js +294 -0
- package/dist/tooling/shared/htnaj77v.js +17 -0
- package/dist/tooling/shared/j9t5s12a.js +7 -0
- package/dist/tooling/shared/jne7b93p.js +42 -0
- package/dist/tooling/shared/ma2340rx.js +118 -0
- package/dist/tooling/shared/mtrqn2hn.js +505 -0
- package/dist/tooling/shared/n4jqhpqz.js +27 -0
- package/dist/tooling/shared/nf7jmhfa.js +20 -0
- package/dist/tooling/shared/p7f08ktn.js +332 -0
- package/dist/tooling/shared/ppnnnvj8.js +13 -0
- package/dist/tooling/shared/pqy21k24.js +312 -0
- package/dist/tooling/shared/pw8fgahx.js +69 -0
- package/dist/tooling/shared/pwsytxm5.js +17 -0
- package/dist/tooling/shared/rf83gr2d.js +94 -0
- package/dist/tooling/shared/rq5kk8j6.js +401 -0
- package/dist/tooling/shared/rs1jb051.js +12 -0
- package/dist/tooling/shared/smn6kz1p.js +157 -0
- package/dist/tooling/shared/spk1jg3r.js +1696 -0
- package/dist/tooling/shared/tn8gay14.js +143 -0
- package/dist/tooling/shared/vraj6d74.js +42 -0
- package/dist/tooling/shared/vs0t6qt8.js +64 -0
- package/dist/tooling/shared/vx86qjv8.js +150 -0
- package/dist/tooling/shared/w7qe8sj1.js +140 -0
- package/dist/tooling/shared/wt7j7nf6.js +15 -0
- package/dist/tooling/shared/wwnekq5n.js +6 -0
- package/dist/tooling/shared/xhrnjch9.js +185 -0
- package/dist/tooling/shared/xjs6zqtc.js +190 -0
- package/dist/tooling/shared/y031jct9.js +16 -0
- package/dist/tooling/shared/y5656f0e.js +233 -0
- package/dist/tooling/shared/yfr8hzhm.js +604 -0
- package/dist/tooling/shared/yk9mp7vb.js +250 -0
- package/dist/tooling/shared/yw30vnq2.js +139 -0
- package/dist/tooling/shared/z8d7ptht.js +618 -0
- package/dist/tooling/shared/zhwnfyb2.js +9 -0
- package/dist/tooling/shared/zvnhh1n0.js +198 -0
- package/dist/tooling/testing/index.js +3 -3
- package/package.json +17 -3
- package/dist/shared/3qnhc7w5.js +0 -38
- package/dist/shared/7m88x3e9.js +0 -45
- package/dist/shared/8dqhth8c.js +0 -12
- package/dist/shared/j3rkk835.js +0 -99
- package/dist/shared/k68eedmy.js +0 -85
- package/dist/shared/venqrjna.js +0 -216
- package/dist/shared/wxr8cwns.js +0 -6
- package/dist/shared/y34a8714.js +0 -150
- package/dist/shared/zm0mafk4.js +0 -92
- package/dist/shared/zy8r7qvz.js +0 -116
- package/dist/shared/{ywr8hmey.js → 606g0nbf.js} +3 -3
- package/dist/shared/{rpycarcr.js → gcefca6p.js} +4 -4
|
@@ -2,14 +2,6 @@
|
|
|
2
2
|
* LATERAL include planner. Loaded on the first include.
|
|
3
3
|
*/
|
|
4
4
|
import { type IncludeHooks, type Plan } from "./plan.js";
|
|
5
|
-
/**
|
|
6
|
-
* Decodes a result that has includes.
|
|
7
|
-
*
|
|
8
|
-
* @param plan - Compiled plan
|
|
9
|
-
* @param rows - Wire rows
|
|
10
|
-
* @param table - Table the call named
|
|
11
|
-
* @returns The call's value
|
|
12
|
-
*/
|
|
13
5
|
export declare function decodeIncluded(plan: Plan, rows: readonly (readonly (string | null)[])[], table: string): unknown;
|
|
14
6
|
/** Hooks the read planner calls after this module has loaded. */
|
|
15
7
|
export declare const includeHooks: IncludeHooks;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Refuses a positive timeout on a driver that cannot cancel.
|
|
3
3
|
*
|
|
4
4
|
* `tx({ timeout })` and `batch({ timeout })` load this with the call. The
|
|
5
|
-
* connect graph does not. The
|
|
5
|
+
* connect graph does not. The OKM1120 text loads with the lazy error module.
|
|
6
6
|
*/
|
|
7
7
|
import type { DriverPool } from "../contracts/driver.js";
|
|
8
8
|
/**
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry observers (`okmodel/otel`).
|
|
3
|
+
*
|
|
4
|
+
* The package does not import `@opentelemetry/*`. Pass a tracer you already
|
|
5
|
+
* have. The observers are `hookm`, `onRoute`, and an `inspect()` result.
|
|
6
|
+
* Statement text is off unless `statement` is true. Parameters and tenant ids
|
|
7
|
+
* are never attributes (spec §5.5, D267).
|
|
8
|
+
*/
|
|
9
|
+
import type { RouteEvent } from "./topology.js";
|
|
10
|
+
import type { Hookm, Inspection } from "./types.js";
|
|
11
|
+
/** A scalar OpenTelemetry attribute. Arrays are not used. */
|
|
12
|
+
export type OtelAttribute = string | number | boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Status codes from the OpenTelemetry API.
|
|
15
|
+
*
|
|
16
|
+
* `0` is unset, `1` is OK, and `2` is ERROR.
|
|
17
|
+
*/
|
|
18
|
+
export type OtelStatusCode = 0 | 1 | 2;
|
|
19
|
+
/**
|
|
20
|
+
* The span methods this entry calls.
|
|
21
|
+
*
|
|
22
|
+
* A tracer from `@opentelemetry/api` satisfies this shape.
|
|
23
|
+
*/
|
|
24
|
+
export interface OtelSpan {
|
|
25
|
+
/** Sets one attribute. */
|
|
26
|
+
setAttribute(key: string, value: OtelAttribute): void;
|
|
27
|
+
/** Sets the span status. `message` is never sent. */
|
|
28
|
+
setStatus(status: {
|
|
29
|
+
readonly code: OtelStatusCode;
|
|
30
|
+
}): void;
|
|
31
|
+
/**
|
|
32
|
+
* Records an exception.
|
|
33
|
+
*
|
|
34
|
+
* `name` is the error name. `code` is an OKM code when the error has one.
|
|
35
|
+
* Message and stack are omitted.
|
|
36
|
+
*/
|
|
37
|
+
recordException(exception: {
|
|
38
|
+
readonly name: string;
|
|
39
|
+
readonly code?: string;
|
|
40
|
+
}): void;
|
|
41
|
+
/** Adds a span event. */
|
|
42
|
+
addEvent(name: string, attributes?: Readonly<Record<string, OtelAttribute>>): void;
|
|
43
|
+
/** Ends the span. */
|
|
44
|
+
end(): void;
|
|
45
|
+
}
|
|
46
|
+
/** Options passed to `startSpan`. `kind` is `2` (client). */
|
|
47
|
+
export interface OtelSpanOptions {
|
|
48
|
+
/** OpenTelemetry span kind. This entry always passes `2`. */
|
|
49
|
+
readonly kind?: number;
|
|
50
|
+
/** Attributes set when the span starts. */
|
|
51
|
+
readonly attributes?: Readonly<Record<string, OtelAttribute>>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The tracer methods this entry calls.
|
|
55
|
+
*
|
|
56
|
+
* A tracer from `@opentelemetry/api` satisfies this shape.
|
|
57
|
+
*/
|
|
58
|
+
export interface OtelTracer {
|
|
59
|
+
/**
|
|
60
|
+
* Starts a span.
|
|
61
|
+
*
|
|
62
|
+
* @param name - Span name
|
|
63
|
+
* @param options - Kind and attributes
|
|
64
|
+
*/
|
|
65
|
+
startSpan(name: string, options?: OtelSpanOptions): OtelSpan;
|
|
66
|
+
}
|
|
67
|
+
/** What {@link otel} accepts. */
|
|
68
|
+
export interface OtelOptions {
|
|
69
|
+
/** Tracer the caller owns. This module does not construct one. */
|
|
70
|
+
readonly tracer: OtelTracer;
|
|
71
|
+
/**
|
|
72
|
+
* Record `db.query.text` from `inspect()`.
|
|
73
|
+
*
|
|
74
|
+
* Omitted or false, the text is left off. Parameters stay off either way.
|
|
75
|
+
*/
|
|
76
|
+
readonly statement?: boolean;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Observers to pass to `connect`, plus `query` for one `inspect()` result.
|
|
80
|
+
*/
|
|
81
|
+
export interface OtelObservers {
|
|
82
|
+
/** Pass this in `connect({ hookm })`. */
|
|
83
|
+
readonly hookm: Hookm;
|
|
84
|
+
/** Pass this in `connect({ onRoute })`. A topology calls it. */
|
|
85
|
+
readonly onRoute: (event: RouteEvent) => void;
|
|
86
|
+
/**
|
|
87
|
+
* Records `db.query.summary` from `inspect()`.
|
|
88
|
+
*
|
|
89
|
+
* The fingerprint is that summary. `db.query.text` is included only when
|
|
90
|
+
* `statement` is true.
|
|
91
|
+
*
|
|
92
|
+
* @param inspection - The result of `inspect()`
|
|
93
|
+
*/
|
|
94
|
+
readonly query: (inspection: Inspection) => void;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Connects the existing observers to a tracer.
|
|
98
|
+
*
|
|
99
|
+
* `onRoute` spans start and end in that call, because the hook fires once.
|
|
100
|
+
* A transaction span stays open from `start` until `commit` or `rollback`.
|
|
101
|
+
*
|
|
102
|
+
* @param options - Tracer, and whether statement text is recorded
|
|
103
|
+
* @returns `hookm`, `onRoute`, and `query`
|
|
104
|
+
*/
|
|
105
|
+
export declare function otel(options: OtelOptions): OtelObservers;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// src/runtime/otel.ts
|
|
2
|
+
var SYSTEM = "postgresql";
|
|
3
|
+
var CLIENT = 2;
|
|
4
|
+
var STATUS_OK = 1;
|
|
5
|
+
var STATUS_ERROR = 2;
|
|
6
|
+
function otel(options) {
|
|
7
|
+
const tracer = options.tracer;
|
|
8
|
+
const statement = options.statement === true;
|
|
9
|
+
const open = [];
|
|
10
|
+
const hookm = {
|
|
11
|
+
onTransaction(event) {
|
|
12
|
+
if (event.phase === "start") {
|
|
13
|
+
const name = event.depth === 0 ? "transaction" : "savepoint";
|
|
14
|
+
open.push({
|
|
15
|
+
depth: event.depth,
|
|
16
|
+
span: begin(tracer, name, {
|
|
17
|
+
"db.system.name": SYSTEM,
|
|
18
|
+
"db.operation.name": name
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const index = latest(open, event.depth);
|
|
24
|
+
const found = index < 0 ? undefined : open[index];
|
|
25
|
+
if (found === undefined)
|
|
26
|
+
return;
|
|
27
|
+
open.splice(index, 1);
|
|
28
|
+
if (event.phase === "rollback") {
|
|
29
|
+
found.span.setAttribute("error.type", "rollback");
|
|
30
|
+
found.span.setStatus({ code: STATUS_ERROR });
|
|
31
|
+
} else {
|
|
32
|
+
found.span.setStatus({ code: STATUS_OK });
|
|
33
|
+
}
|
|
34
|
+
found.span.end();
|
|
35
|
+
},
|
|
36
|
+
onError(error) {
|
|
37
|
+
const span = begin(tracer, "error", {
|
|
38
|
+
"db.system.name": SYSTEM,
|
|
39
|
+
"error.type": errorType(error)
|
|
40
|
+
});
|
|
41
|
+
span.recordException(recordedException(error));
|
|
42
|
+
span.setStatus({ code: STATUS_ERROR });
|
|
43
|
+
span.end();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
return {
|
|
47
|
+
hookm,
|
|
48
|
+
onRoute(event) {
|
|
49
|
+
const span = begin(tracer, event.op, {
|
|
50
|
+
"db.system.name": SYSTEM,
|
|
51
|
+
"db.operation.name": event.op
|
|
52
|
+
});
|
|
53
|
+
span.addEvent("route", { endpoint: event.endpoint, reason: event.reason });
|
|
54
|
+
span.end();
|
|
55
|
+
},
|
|
56
|
+
query(inspection) {
|
|
57
|
+
const op = inspection.intent.op;
|
|
58
|
+
const table = inspection.intent.table;
|
|
59
|
+
const attributes = {
|
|
60
|
+
"db.system.name": SYSTEM,
|
|
61
|
+
"db.operation.name": op,
|
|
62
|
+
"db.collection.name": table,
|
|
63
|
+
"db.query.summary": inspection.plan.fingerprint
|
|
64
|
+
};
|
|
65
|
+
if (statement)
|
|
66
|
+
attributes["db.query.text"] = inspection.sql.text;
|
|
67
|
+
begin(tracer, `${op} ${table}`, attributes).end();
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function begin(tracer, name, attributes) {
|
|
72
|
+
return tracer.startSpan(name, { kind: CLIENT, attributes });
|
|
73
|
+
}
|
|
74
|
+
function latest(open, depth) {
|
|
75
|
+
for (let index = open.length - 1;index >= 0; index -= 1) {
|
|
76
|
+
if (open[index]?.depth === depth)
|
|
77
|
+
return index;
|
|
78
|
+
}
|
|
79
|
+
return -1;
|
|
80
|
+
}
|
|
81
|
+
function errorType(error) {
|
|
82
|
+
return error instanceof Error && error.name.length > 0 ? error.name : "error";
|
|
83
|
+
}
|
|
84
|
+
function recordedException(error) {
|
|
85
|
+
const name = errorType(error);
|
|
86
|
+
const code = okmCode(error);
|
|
87
|
+
return code === undefined ? { name } : { name, code };
|
|
88
|
+
}
|
|
89
|
+
function okmCode(error) {
|
|
90
|
+
if (typeof error !== "object" || error === null || !("code" in error))
|
|
91
|
+
return;
|
|
92
|
+
const code = error.code;
|
|
93
|
+
return typeof code === "string" && /^OKM\d+$/.test(code) ? code : undefined;
|
|
94
|
+
}
|
|
95
|
+
export {
|
|
96
|
+
otel
|
|
97
|
+
};
|
package/dist/runtime/page.d.ts
CHANGED
|
@@ -20,6 +20,9 @@ import { type ArchiveView } from "./plan.js";
|
|
|
20
20
|
* @param options - `where`, `select`, `orderBy`, `limit`, `include`, and `after`
|
|
21
21
|
* @param mods - Signal and timeout
|
|
22
22
|
* @param view - Archive visibility
|
|
23
|
+
* @param pin - Endpoint a stream already chose. Absent for `page()`
|
|
23
24
|
* @returns A handle that resolves to `{ items, next }`
|
|
24
25
|
*/
|
|
25
|
-
export declare function build(session: Session, table: string, options: object, mods: Mods, view: ArchiveView | undefined
|
|
26
|
+
export declare function build(session: Session, table: string, options: object, mods: Mods, view: ArchiveView | undefined, pin?: {
|
|
27
|
+
name?: string;
|
|
28
|
+
}): Promise<unknown> & Record<string, unknown>;
|
package/dist/runtime/pg/bun.js
CHANGED
|
@@ -1,23 +1,27 @@
|
|
|
1
|
-
import"../../shared/8dqhth8c.js";
|
|
2
1
|
import {
|
|
3
2
|
DriverError2
|
|
4
|
-
} from "../../shared/
|
|
3
|
+
} from "../../shared/cm3w0ywp.js";
|
|
5
4
|
import {
|
|
5
|
+
markClientPool,
|
|
6
6
|
open5
|
|
7
|
-
} from "../../shared/
|
|
7
|
+
} from "../../shared/zbqbmmrp.js";
|
|
8
8
|
import {
|
|
9
9
|
BUNSQL_CAPABILITIES,
|
|
10
10
|
readCapability2,
|
|
11
11
|
hasCapability2
|
|
12
|
-
} from "../../shared/
|
|
12
|
+
} from "../../shared/ae4j5f42.js";
|
|
13
13
|
import {
|
|
14
14
|
createClient
|
|
15
|
-
} from "../../shared/
|
|
15
|
+
} from "../../shared/bah9nbg3.js";
|
|
16
16
|
|
|
17
17
|
// src/runtime/pg/bun.ts
|
|
18
18
|
function connect(target, options) {
|
|
19
19
|
if (typeof target === "object" && !isPool(target)) {
|
|
20
|
-
return import("../../shared/
|
|
20
|
+
return import("../../shared/0wrea3jq.js").then((mod) => mod.default(target, options, (config) => {
|
|
21
|
+
const pool = open5(config);
|
|
22
|
+
markClientPool(pool);
|
|
23
|
+
return pool;
|
|
24
|
+
}));
|
|
21
25
|
}
|
|
22
26
|
const owned = !isPool(target);
|
|
23
27
|
const pool = isPool(target) ? target : open5({
|
|
@@ -28,6 +32,8 @@ function connect(target, options) {
|
|
|
28
32
|
...options.searchPath !== undefined ? { searchPath: options.searchPath } : {},
|
|
29
33
|
...options.ssl !== undefined ? { ssl: options.ssl } : {}
|
|
30
34
|
});
|
|
35
|
+
if (!isPool(target))
|
|
36
|
+
markClientPool(pool);
|
|
31
37
|
return createClient(options.schema, pool, {
|
|
32
38
|
ownsPool: owned,
|
|
33
39
|
http: options.errors?.http,
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `connect` for Neon (`okmodel/pg/neon`).
|
|
3
|
+
*
|
|
4
|
+
* A string or an existing pool is one endpoint. A `{ primary, replicas }` object
|
|
5
|
+
* loads the topology module. The client is typed by the schema passed in.
|
|
6
|
+
* `mode` is `websocket` (the default) or `http`.
|
|
7
|
+
*/
|
|
8
|
+
import type { DriverPool } from "../../contracts/driver.js";
|
|
9
|
+
import type { QuerySchema } from "../../dialects/pg/model.js";
|
|
10
|
+
import { type NeonConfig } from "../../adapters/pg/neon.js";
|
|
11
|
+
import type { RoutedClient, TopologyInput, TopologyOptions } from "../topology.js";
|
|
12
|
+
import type { ConnectOptions, Connected } from "../types.js";
|
|
13
|
+
export { open, type NeonConfig, type NeonMode } from "../../adapters/pg/neon.js";
|
|
14
|
+
export { capabilities, hasCapability, httpCapabilities, readCapability, } from "../../adapters/pg/neon.js";
|
|
15
|
+
export { DriverError } from "../../adapters/error.js";
|
|
16
|
+
/** A connection string or a pool from {@link open}. */
|
|
17
|
+
export type NeonTarget = string | DriverPool;
|
|
18
|
+
/** Driver options `connect` forwards to {@link open}. */
|
|
19
|
+
export type NeonConnectOptions<S extends QuerySchema> = ConnectOptions<S> & Omit<NeonConfig, "url"> & TopologyOptions;
|
|
20
|
+
/**
|
|
21
|
+
* Connects one Neon endpoint, or a primary and its replicas.
|
|
22
|
+
*
|
|
23
|
+
* A string or a pool is one endpoint. A topology loads on demand and the promise
|
|
24
|
+
* resolves to the client. Reads use the first healthy replica.
|
|
25
|
+
*
|
|
26
|
+
* `mode: "websocket"` is the default. Interactive `tx()` needs it. `mode: "http"`
|
|
27
|
+
* is one-shot HTTP: `batch()` is atomic and `tx()` is refused.
|
|
28
|
+
*
|
|
29
|
+
* Named prepared statements are off unless `prepared` is `"named"`.
|
|
30
|
+
* `prepared: "named"` is not for transaction-mode poolers.
|
|
31
|
+
*
|
|
32
|
+
* @typeParam S - Schema
|
|
33
|
+
* @param target - URL, an existing pool, or `{ primary, replicas }`
|
|
34
|
+
* @param options - Schema, mode, errors, logger, and driver options
|
|
35
|
+
* @returns The client. A topology returns a promise. Await `connected` for the dialect check
|
|
36
|
+
*/
|
|
37
|
+
export declare function connect<const S extends QuerySchema>(target: TopologyInput, options: NeonConnectOptions<S>): Promise<RoutedClient<S>>;
|
|
38
|
+
export declare function connect<const S extends QuerySchema>(target: NeonTarget, options: NeonConnectOptions<S>): Promise<Connected<S>>;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DriverError2
|
|
3
|
+
} from "../../shared/cm3w0ywp.js";
|
|
4
|
+
import {
|
|
5
|
+
open6
|
|
6
|
+
} from "../../shared/agsfb86s.js";
|
|
7
|
+
import {
|
|
8
|
+
NEON_WEBSOCKET_CAPABILITIES,
|
|
9
|
+
NEON_HTTP_CAPABILITIES,
|
|
10
|
+
readCapability2,
|
|
11
|
+
hasCapability2
|
|
12
|
+
} from "../../shared/ae4j5f42.js";
|
|
13
|
+
import {
|
|
14
|
+
createClient
|
|
15
|
+
} from "../../shared/bah9nbg3.js";
|
|
16
|
+
|
|
17
|
+
// src/runtime/pg/neon.ts
|
|
18
|
+
function connect(target, options) {
|
|
19
|
+
if (typeof target === "object" && !isPool(target)) {
|
|
20
|
+
return import("../../shared/0wrea3jq.js").then((mod) => mod.default(target, options, (config) => open6({
|
|
21
|
+
url: config.url,
|
|
22
|
+
...options.mode !== undefined ? { mode: options.mode } : {},
|
|
23
|
+
...config.max !== undefined ? { max: config.max } : {},
|
|
24
|
+
...config.timeouts !== undefined ? { timeouts: config.timeouts } : {},
|
|
25
|
+
...config.prepared !== undefined ? { prepared: config.prepared } : {},
|
|
26
|
+
...config.searchPath !== undefined ? { searchPath: config.searchPath } : {}
|
|
27
|
+
})));
|
|
28
|
+
}
|
|
29
|
+
const owned = !isPool(target);
|
|
30
|
+
const opened = isPool(target) ? Promise.resolve(target) : open6({
|
|
31
|
+
url: target,
|
|
32
|
+
...options.mode !== undefined ? { mode: options.mode } : {},
|
|
33
|
+
...options.max !== undefined ? { max: options.max } : {},
|
|
34
|
+
...options.timeouts !== undefined ? { timeouts: options.timeouts } : {},
|
|
35
|
+
...options.prepared !== undefined ? { prepared: options.prepared } : {},
|
|
36
|
+
...options.searchPath !== undefined ? { searchPath: options.searchPath } : {}
|
|
37
|
+
});
|
|
38
|
+
return opened.then((pool) => createClient(options.schema, pool, {
|
|
39
|
+
ownsPool: owned,
|
|
40
|
+
http: options.errors?.http,
|
|
41
|
+
includeValues: options.errors?.includeValues,
|
|
42
|
+
logger: options.logger,
|
|
43
|
+
signal: options.signal,
|
|
44
|
+
timeout: options.timeout,
|
|
45
|
+
timeouts: options.timeouts,
|
|
46
|
+
hookm: options.hookm,
|
|
47
|
+
catalog: options.catalog,
|
|
48
|
+
catalogDir: options.catalogDir,
|
|
49
|
+
requireMeta: options.requireMeta,
|
|
50
|
+
generators: options.generators
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
function isPool(target) {
|
|
54
|
+
return typeof target === "object" && "execute" in target && "capabilities" in target;
|
|
55
|
+
}
|
|
56
|
+
export {
|
|
57
|
+
DriverError2 as DriverError,
|
|
58
|
+
NEON_WEBSOCKET_CAPABILITIES as capabilities,
|
|
59
|
+
connect,
|
|
60
|
+
hasCapability2 as hasCapability,
|
|
61
|
+
NEON_HTTP_CAPABILITIES as httpCapabilities,
|
|
62
|
+
open6 as open,
|
|
63
|
+
readCapability2 as readCapability
|
|
64
|
+
};
|
package/dist/runtime/pg/pg.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DriverError2
|
|
3
|
-
} from "../../shared/
|
|
3
|
+
} from "../../shared/cm3w0ywp.js";
|
|
4
4
|
import {
|
|
5
5
|
open4
|
|
6
|
-
} from "../../shared/
|
|
6
|
+
} from "../../shared/14x60fbf.js";
|
|
7
7
|
import {
|
|
8
8
|
NODE_POSTGRES_CAPABILITIES,
|
|
9
9
|
readCapability2,
|
|
10
10
|
hasCapability2
|
|
11
|
-
} from "../../shared/
|
|
11
|
+
} from "../../shared/ae4j5f42.js";
|
|
12
12
|
import {
|
|
13
13
|
createClient
|
|
14
|
-
} from "../../shared/
|
|
14
|
+
} from "../../shared/bah9nbg3.js";
|
|
15
15
|
|
|
16
16
|
// src/runtime/pg/pg.ts
|
|
17
17
|
function connect(target, options) {
|
|
18
18
|
if (typeof target === "object" && !isPool(target)) {
|
|
19
|
-
return import("../../shared/
|
|
19
|
+
return import("../../shared/0wrea3jq.js").then((mod) => mod.default(target, options, open4));
|
|
20
20
|
}
|
|
21
21
|
const owned = !isPool(target);
|
|
22
22
|
const pool = isPool(target) ? target : open4({
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* `connect` for PGlite (`okmodel/pg/pglite`).
|
|
3
3
|
*
|
|
4
4
|
* Opening a database is async. An existing pool is reused and not closed.
|
|
5
|
+
* Closing that client marks the client closed.
|
|
5
6
|
* A `{ primary, replicas }` object loads the topology module. A replica URL is
|
|
6
7
|
* that endpoint's data directory.
|
|
7
8
|
*/
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import"../../shared/8dqhth8c.js";
|
|
2
1
|
import {
|
|
3
2
|
DriverError2
|
|
4
|
-
} from "../../shared/
|
|
3
|
+
} from "../../shared/cm3w0ywp.js";
|
|
5
4
|
import {
|
|
6
|
-
open3
|
|
7
|
-
|
|
5
|
+
open3,
|
|
6
|
+
seal2
|
|
7
|
+
} from "../../shared/4m6hskg8.js";
|
|
8
8
|
import {
|
|
9
9
|
PGLITE_CAPABILITIES,
|
|
10
10
|
readCapability2,
|
|
11
11
|
hasCapability2
|
|
12
|
-
} from "../../shared/
|
|
12
|
+
} from "../../shared/ae4j5f42.js";
|
|
13
13
|
import {
|
|
14
14
|
createClient
|
|
15
|
-
} from "../../shared/
|
|
15
|
+
} from "../../shared/bah9nbg3.js";
|
|
16
16
|
|
|
17
17
|
// src/runtime/pg/pglite.ts
|
|
18
18
|
async function connect(target, options) {
|
|
19
19
|
if (typeof target === "object" && !isPool(target)) {
|
|
20
|
-
return import("../../shared/
|
|
20
|
+
return import("../../shared/0wrea3jq.js").then((mod) => mod.default(target, options, open3));
|
|
21
21
|
}
|
|
22
|
-
const pool = isPool(target) ? target : await open3({
|
|
22
|
+
const pool = isPool(target) ? seal2(target) : await open3({
|
|
23
23
|
...target !== undefined ? { dataDir: target } : {},
|
|
24
24
|
...options.timeouts !== undefined ? { timeouts: options.timeouts } : {}
|
|
25
25
|
});
|
|
26
26
|
return createClient(options.schema, pool, {
|
|
27
|
-
ownsPool:
|
|
27
|
+
ownsPool: true,
|
|
28
28
|
http: options.errors?.http,
|
|
29
29
|
includeValues: options.errors?.includeValues,
|
|
30
30
|
logger: options.logger,
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DriverError2
|
|
3
|
-
} from "../../shared/
|
|
3
|
+
} from "../../shared/cm3w0ywp.js";
|
|
4
4
|
import {
|
|
5
5
|
open2
|
|
6
|
-
} from "../../shared/
|
|
6
|
+
} from "../../shared/35q0n9tz.js";
|
|
7
7
|
import {
|
|
8
8
|
POSTGRESJS_CAPABILITIES,
|
|
9
9
|
readCapability2,
|
|
10
10
|
hasCapability2
|
|
11
|
-
} from "../../shared/
|
|
11
|
+
} from "../../shared/ae4j5f42.js";
|
|
12
12
|
import {
|
|
13
13
|
createClient
|
|
14
|
-
} from "../../shared/
|
|
14
|
+
} from "../../shared/bah9nbg3.js";
|
|
15
15
|
|
|
16
16
|
// src/runtime/pg/postgresjs.ts
|
|
17
17
|
function connect(target, options) {
|
|
18
18
|
if (typeof target === "object" && !isPool(target)) {
|
|
19
|
-
return import("../../shared/
|
|
19
|
+
return import("../../shared/0wrea3jq.js").then((mod) => mod.default(target, options, open2));
|
|
20
20
|
}
|
|
21
21
|
const owned = !isPool(target);
|
|
22
22
|
const pool = isPool(target) ? target : open2({
|