@runlot/pg 0.1.0-rc.100

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.
Files changed (54) hide show
  1. package/README.md +60 -0
  2. package/dist/bundler.d.ts +33 -0
  3. package/dist/bundler.d.ts.map +1 -0
  4. package/dist/bundler.js +276 -0
  5. package/dist/bundler.js.map +1 -0
  6. package/dist/client.d.ts +138 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +505 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/emitter.d.ts +14 -0
  11. package/dist/emitter.d.ts.map +1 -0
  12. package/dist/emitter.js +63 -0
  13. package/dist/emitter.js.map +1 -0
  14. package/dist/errors.d.ts +34 -0
  15. package/dist/errors.d.ts.map +1 -0
  16. package/dist/errors.js +46 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/index.d.ts +94 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +27 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/orm/drizzle.d.ts +9 -0
  23. package/dist/orm/drizzle.d.ts.map +1 -0
  24. package/dist/orm/drizzle.js +13 -0
  25. package/dist/orm/drizzle.js.map +1 -0
  26. package/dist/orm/knex.d.ts +6 -0
  27. package/dist/orm/knex.d.ts.map +1 -0
  28. package/dist/orm/knex.js +28 -0
  29. package/dist/orm/knex.js.map +1 -0
  30. package/dist/orm/kysely.d.ts +5 -0
  31. package/dist/orm/kysely.d.ts.map +1 -0
  32. package/dist/orm/kysely.js +14 -0
  33. package/dist/orm/kysely.js.map +1 -0
  34. package/dist/orm/prisma.d.ts +49 -0
  35. package/dist/orm/prisma.d.ts.map +1 -0
  36. package/dist/orm/prisma.js +344 -0
  37. package/dist/orm/prisma.js.map +1 -0
  38. package/dist/orm/sequelize.d.ts +4 -0
  39. package/dist/orm/sequelize.d.ts.map +1 -0
  40. package/dist/orm/sequelize.js +24 -0
  41. package/dist/orm/sequelize.js.map +1 -0
  42. package/dist/orm/typeorm.d.ts +11 -0
  43. package/dist/orm/typeorm.d.ts.map +1 -0
  44. package/dist/orm/typeorm.js +22 -0
  45. package/dist/orm/typeorm.js.map +1 -0
  46. package/dist/type-parsers.d.ts +159 -0
  47. package/dist/type-parsers.d.ts.map +1 -0
  48. package/dist/type-parsers.js +329 -0
  49. package/dist/type-parsers.js.map +1 -0
  50. package/dist/types.d.ts +93 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +9 -0
  53. package/dist/types.js.map +1 -0
  54. package/package.json +83 -0
package/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # @runlot/pg
2
+
3
+ `env.db` 위에서 node-postgres(`pg`) 모양으로 쓰는 어댑터입니다. 이미 `pg` 를 쓰는 코드와
4
+ ORM 을 고치지 않고 runlot 의 데이터베이스에 붙일 수 있습니다.
5
+
6
+ ```ts
7
+ import { Pool } from "@runlot/pg";
8
+
9
+ export default {
10
+ async fetch(req, env) {
11
+ const pool = new Pool({ db: env.db });
12
+ const { rows } = await pool.query("select id, name from users where id = $1", [1]);
13
+ return Response.json(rows);
14
+ },
15
+ };
16
+ ```
17
+
18
+ ## 무엇을 할 수 있나요
19
+
20
+ - `Pool.query(text, values)` — 호출마다 새 세션입니다. 문장 하나짜리 질의에 알맞습니다.
21
+ - `Pool.connect()` / `new Client({ db })` — 세션 하나를 쥐어요. `BEGIN … COMMIT`,
22
+ prepared statement, `SET` 이 그 안에서 유지됩니다. `release()` 나 `end()` 로 돌려주세요.
23
+ - 오류는 `DatabaseError` 로 던지고 `err.code` 가 SQLSTATE 입니다 (`23505` 같은 값).
24
+ - `types.setTypeParser(oid, fn)` 으로 타입 변환을 바꿀 수 있어요. 기본은 `pg` 와
25
+ 같습니다 — `timestamptz`·`date` 는 `Date`, `int8`·`numeric` 은 문자열입니다.
26
+
27
+ ## ORM
28
+
29
+ | ORM | 쓰는 법 |
30
+ |---|---|
31
+ | Prisma | `import { PrismaRunlot } from "@runlot/pg/prisma"` → `new PrismaClient({ adapter: new PrismaRunlot(env.db) })` |
32
+ | Drizzle | `import { drizzle } from "@runlot/pg/drizzle"` → `drizzle(env.db, { schema })` |
33
+ | Kysely | `import { kysely } from "@runlot/pg/kysely"` → `kysely<DB>(env.db)` |
34
+ | TypeORM | `import { dataSource } from "@runlot/pg/typeorm"` → `dataSource(env.db, { entities })` |
35
+ | Sequelize | `import { sequelize } from "@runlot/pg/sequelize"` → `sequelize(env.db)` |
36
+ | Knex | `import { knex } from "@runlot/pg/knex"` → `knex(env.db)` |
37
+
38
+ `runlot deploy` 로 배포하면 따로 할 일이 없습니다. 배포 번들러(`@runlot/pg/bundler`)가
39
+ `pg` 를 이 패키지로 풀고, ORM 이 node 내장 모듈을 쓰면 `nodejs_compat` 를,
40
+ Prisma 의 WASM 쿼리 컴파일러는 별도 모듈로 `runlot.json` 에 적습니다.
41
+
42
+ 다른 도구로 직접 묶는다면 같은 일을 해야 합니다: `pg` → `@runlot/pg` alias,
43
+ node 내장은 `node:` 접두로 외부에 두고 매니페스트에 `"compatibilityFlags":
44
+ ["nodejs_compat"]`, `fs`·`os`·`tty` 는 빈 스텁, `.wasm` 은 번들 밖 모듈로 두고
45
+ 매니페스트 `modules` 에 `{ "name", "type": "wasm", "path" }` 로 적습니다. `buildWorker`
46
+ 를 직접 불러도 됩니다:
47
+
48
+ ```ts
49
+ import { buildWorker } from "@runlot/pg/bundler";
50
+ const { code, report } = await buildWorker({ entry: "src/index.ts", absWorkingDir: process.cwd() });
51
+ // report.nodeImports 가 비어 있지 않으면 nodejs_compat, report.wasmModules 는 곁에 실을 파일
52
+ ```
53
+
54
+ ## 개발
55
+
56
+ ```sh
57
+ pnpm --filter @runlot/pg test # 가짜 env.db 상대 단위 시험
58
+ pnpm --filter @runlot/pg e2e:build # e2e/*.ts → e2e-dist/*.js (실물 workerd 시험용)
59
+ go test ./node/internal/workerd -run TestLiveORM -v # 실물 workerd 위 ORM 별 E2E
60
+ ```
@@ -0,0 +1,33 @@
1
+ export interface WasmModule {
2
+ /** The specifier imported by the worker and manifest `modules[].name`. */
3
+ name: string;
4
+ /** Absolute source-file path. */
5
+ path: string;
6
+ }
7
+ export interface WorkerBundleReport {
8
+ /** Node built-ins left external by the worker (sorted, such as `node:util`). Requires `nodejs_compat` when nonempty. */
9
+ nodeImports: string[];
10
+ /** WASM modules that must be included alongside it. */
11
+ wasmModules: WasmModule[];
12
+ }
13
+ export interface BuildWorkerOptions {
14
+ /** Entry point, relative to absWorkingDir or absolute. */
15
+ entry: string;
16
+ absWorkingDir: string;
17
+ /** Metafile output name. Defaults to `worker/index.js`; no file is written. */
18
+ outfile?: string;
19
+ /** Where to resolve `pg`. Defaults to `@runlot/pg`; leaves `pg` alone if unresolved. */
20
+ pgAlias?: string;
21
+ define?: Record<string, string>;
22
+ minify?: boolean;
23
+ }
24
+ export interface WorkerBundle {
25
+ code: Uint8Array;
26
+ report: WorkerBundleReport;
27
+ }
28
+ /**
29
+ * Bundles one worker without writing files. Returns its bytes and report; the caller
30
+ * (the deployment tool or E2E) chooses where and under what name to place them.
31
+ */
32
+ export declare function buildWorker(opts: BuildWorkerOptions): Promise<WorkerBundle>;
33
+ //# sourceMappingURL=bundler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundler.d.ts","sourceRoot":"","sources":["../src/bundler.ts"],"names":[],"mappings":"AAkCA,MAAM,WAAW,UAAU;IACzB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,wHAAwH;IACxH,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,uDAAuD;IACvD,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AA0MD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CA4CjF"}
@@ -0,0 +1,276 @@
1
+ // Worker bundler — the user's deployment tool (`runlot deploy`) and this package's E2E
2
+ // bundle workers with the **same** rules (docs/pg-driver-support.md §3.3).
3
+ //
4
+ // The rules must live in one place because the E2E measures whether a worker bundled with
5
+ // these rules runs in real workerd. A green result from different deployment rules does not
6
+ // answer anything about the user's deployment.
7
+ //
8
+ // It:
9
+ // - aliases `pg` to `@runlot/pg`; ORMs import `pg` at module top level. The alias holds
10
+ // only for the modules **this** pass resolves: on the `framework: next` path OpenNext
11
+ // has already bundled the app before we run, so an ORM inside that bundle got its `pg`
12
+ // from the project. Nothing here can make `instanceof Pool` hold across that seam, which
13
+ // is why the classes in client.ts pin their own constructor names.
14
+ // - leaves Node built-ins external with the `node:` prefix for workerd's `nodejs_compat`.
15
+ // Requested built-ins go in report.nodeImports, which tells the deployer to add
16
+ // `nodejs_compat` to the manifest.
17
+ // - stubs built-ins missing from this workerd build's `nodejs_compat` (`fs`, `os`, and
18
+ // `tty`, verified) plus `module`, which requires a file URL at load time. This is what
19
+ // Wrangler fills with unenv. ORMs require these at load time but do not use them on the
20
+ // paths we run; using one throws.
21
+ // - resolves CJS `require("util")` through a require table in the banner. Dynamic require
22
+ // cannot remain in ESM output, and esbuild's `__toCommonJS` bridge returns an object,
23
+ // which breaks modules such as `assert(x)` whose default is a function. A table returning
24
+ // statically imported namespaces fixes that; it is added on the second bundle after the
25
+ // first pass identifies required modules.
26
+ // - keeps `.wasm` as an external module name. workerd disallows WASM compilation inside a
27
+ // bundle, so it can enter only through a configuration `wasm = embed` module.
28
+ // report.wasmModules tells the deployer which files to include and under which names.
29
+ // - uses the browser build of `debug`, because its Node build accesses `process.stderr.fd`.
30
+ // - resolves other DB drivers and optional dependencies as empty modules; workers lack and
31
+ // do not need them.
32
+ import { createHash } from "node:crypto";
33
+ import { build } from "esbuild";
34
+ /** Node built-in module names. Leaves bare names such as `util` external as `node:util`. */
35
+ const NODE_BUILTINS = new Set([
36
+ "assert", "async_hooks", "buffer", "child_process", "cluster", "console", "constants", "crypto", "dgram",
37
+ "diagnostics_channel", "dns", "domain", "events", "fs", "http", "http2", "https", "inspector", "module", "net",
38
+ "os", "path", "perf_hooks", "process", "punycode", "querystring", "readline", "repl", "stream", "string_decoder",
39
+ "sys", "timers", "tls", "trace_events", "tty", "url", "util", "v8", "vm", "wasi", "worker_threads", "zlib",
40
+ ]);
41
+ /** Other database drivers and optional dependencies, resolved as empty modules. */
42
+ const EMPTY = new Set([
43
+ "mariadb/callback", "mariadb", "mysql", "mysql2", "sqlite3", "better-sqlite3", "oracledb", "tedious", "mssql",
44
+ "ibm_db", "pg-native", "pg-query-stream", "pg-hstore", "pg-copy-streams", "snowflake-sdk", "@sap/hana-client",
45
+ "hdb-pool", "mongodb", "typeorm-aurora-data-api-driver", "sql.js", "react-native-sqlite-storage",
46
+ "@google-cloud/spanner", "spanner", "libsql", "@libsql/client", "@sqlite.org/sqlite-wasm", "sap-hana-client",
47
+ "@sap/hana-client/extension/Stream", "pg-cloudflare", "cloudflare:sockets", "pgpass",
48
+ ]);
49
+ /** Stubs for built-ins unavailable in `nodejs_compat` (fs, os, tty) or requiring a file URL at load time (module). */
50
+ const STUBS = {
51
+ fs: `// Empty stub for node:fs. This workerd build's nodejs_compat does not include fs (verified).
52
+ const missing = (name) => (..._a) => { throw new Error("node:fs." + name + " is not available in the worker"); };
53
+ export const existsSync = () => false;
54
+ export const readFileSync = missing("readFileSync");
55
+ export const writeFileSync = missing("writeFileSync");
56
+ export const appendFileSync = missing("appendFileSync");
57
+ export const statSync = missing("statSync");
58
+ export const lstatSync = missing("lstatSync");
59
+ export const readdirSync = missing("readdirSync");
60
+ export const mkdirSync = missing("mkdirSync");
61
+ export const unlinkSync = missing("unlinkSync");
62
+ export const realpathSync = missing("realpathSync");
63
+ export const createReadStream = missing("createReadStream");
64
+ export const createWriteStream = missing("createWriteStream");
65
+ export const readFile = missing("readFile");
66
+ export const writeFile = missing("writeFile");
67
+ export const readdir = missing("readdir");
68
+ export const realpath = missing("realpath");
69
+ export const stat = missing("stat");
70
+ export const lstat = missing("lstat");
71
+ export const mkdir = missing("mkdir");
72
+ export const unlink = missing("unlink");
73
+ export const access = missing("access");
74
+ export const promises = {
75
+ readFile: missing("readFile"), writeFile: missing("writeFile"), stat: missing("stat"), lstat: missing("lstat"),
76
+ access: missing("access"), readdir: missing("readdir"), realpath: missing("realpath"), mkdir: missing("mkdir"), unlink: missing("unlink"),
77
+ };
78
+ export const constants = { F_OK: 0, R_OK: 4, W_OK: 2, X_OK: 1 };
79
+ export default {
80
+ existsSync, readFileSync, writeFileSync, appendFileSync, statSync, lstatSync, readdirSync, mkdirSync, unlinkSync, realpathSync,
81
+ createReadStream, createWriteStream, readFile, writeFile, readdir, realpath, stat, lstat, mkdir, unlink, access, promises, constants,
82
+ };
83
+ `,
84
+ os: `// Stub for node:os. Same values as unenv.
85
+ export const EOL = "\\n";
86
+ export const platform = () => "linux";
87
+ export const type = () => "Linux";
88
+ export const release = () => "";
89
+ export const hostname = () => "localhost";
90
+ export const homedir = () => "/";
91
+ export const tmpdir = () => "/tmp";
92
+ export const cpus = () => [];
93
+ export const totalmem = () => 0;
94
+ export const freemem = () => 0;
95
+ export const arch = () => "wasm";
96
+ export const endianness = () => "LE";
97
+ export const networkInterfaces = () => ({});
98
+ export const userInfo = () => ({ username: "", uid: -1, gid: -1, shell: null, homedir: "/" });
99
+ export default { EOL, platform, type, release, hostname, homedir, tmpdir, cpus, totalmem, freemem, arch, endianness, networkInterfaces, userInfo };
100
+ `,
101
+ tty: `// Stub for node:tty. Only used when colorette (knex) asks whether to enable color.
102
+ export const isatty = () => false;
103
+ export class ReadStream {}
104
+ export class WriteStream {}
105
+ export default { isatty, ReadStream, WriteStream };
106
+ `,
107
+ // node:module is **present** in nodejs_compat; only one of its functions is
108
+ // unusable here. fdir (tinyglobby ← TypeORM) calls createRequire(import.meta.url)
109
+ // at module scope and the worker's import.meta.url is not a file URL, so the
110
+ // real createRequire throws. Replacing the whole module was too wide a fix:
111
+ // Next's require-hook.js reads `require("module").prototype.require` and
112
+ // `_resolveFilename`, and against a plain object that is
113
+ // "Cannot read properties of undefined" on the first request
114
+ // (docs/nextjs.md §8). So stand on the real one and narrow the repair to
115
+ // createRequire. CommonJS on purpose — `require("node:module")` has to come
116
+ // back as the Module **function**, which a namespace object is not.
117
+ module: `const real = require("node:module");
118
+ const FALLBACK = "file:///worker.js";
119
+ const createRequire = (from) => {
120
+ try {
121
+ return real.createRequire(from);
122
+ } catch {
123
+ // Not a file URL — the worker's own module identity. Resolution still only
124
+ // reaches built-ins, which is all that ever worked here.
125
+ return real.createRequire(FALLBACK);
126
+ }
127
+ };
128
+ module.exports = new Proxy(real, {
129
+ get: (target, prop, recv) => (prop === "createRequire" ? createRequire : Reflect.get(target, prop, recv)),
130
+ });
131
+ `,
132
+ };
133
+ const STUB_NS = "runlot-stub";
134
+ const EMPTY_NS = "runlot-empty";
135
+ function requireBanner(mods) {
136
+ const names = [...mods].sort();
137
+ const lines = [];
138
+ names.forEach((m, i) => lines.push(`import * as __rl_node_${i} from ${JSON.stringify(m)};`));
139
+ lines.push(`const __rl_node = { ${names.map((m, i) => `${JSON.stringify(m)}: __rl_node_${i}`).join(", ")} };`);
140
+ // What require() hands back has to be **patchable**. An ES module namespace
141
+ // is not: assigning to one throws, and CJS code written for Node patches the
142
+ // module object in place. Next does exactly that —
143
+ // `nodeTimers.setImmediate = patchedSetImmediate` — and against a namespace
144
+ // it died with "Cannot assign to property 'setImmediate' of [object Module]"
145
+ // on the first request (docs/nextjs.md §8).
146
+ //
147
+ // A builtin's `default` is the CJS object: measured writable, and carrying
148
+ // the same functions as the namespace. So prefer it whenever it is an object,
149
+ // and fill in any named export it happens to lack — one shared object, so a
150
+ // patch one module makes is the patch every other one sees, as in Node.
151
+ lines.push(`const require = (id) => { const k = id.startsWith("node:") ? id : "node:" + id; const ns = __rl_node[k]; ` +
152
+ `if (!ns) throw new Error("require(" + JSON.stringify(id) + ") is not available in the worker"); ` +
153
+ `if (typeof ns.default === "function") return ns.default; ` +
154
+ `if (!ns.default || typeof ns.default !== "object") return ns; ` +
155
+ `for (const key of Object.keys(ns)) { if (key !== "default" && !(key in ns.default)) { try { ns.default[key] = ns[key]; } catch {} } } ` +
156
+ `return ns.default; };`);
157
+ return lines.join("\n");
158
+ }
159
+ /** Module name for a WASM file. Defaults to its filename; adds a hash if another file uses it. */
160
+ function wasmName(state, abs) {
161
+ const base = abs.slice(abs.lastIndexOf("/") + 1);
162
+ const have = state.wasm.get(base);
163
+ if (have === undefined || have === abs)
164
+ return base;
165
+ const h = createHash("sha256").update(abs).digest("hex").slice(0, 8);
166
+ return base.replace(/\.wasm$/, `-${h}.wasm`);
167
+ }
168
+ function workerPlugin(state, opts) {
169
+ const pgAlias = opts.pgAlias ?? "@runlot/pg";
170
+ return {
171
+ name: "runlot-worker",
172
+ setup(b) {
173
+ b.onResolve({ filter: /\.wasm(\?module)?$/ }, (args) => {
174
+ const rel = args.path.replace(/\?module$/, "");
175
+ const abs = rel.startsWith("/") ? rel : new URL(rel, "file://" + args.resolveDir + "/").pathname;
176
+ const name = wasmName(state, abs);
177
+ state.wasm.set(name, abs);
178
+ return { path: name, external: true };
179
+ });
180
+ b.onResolve({ filter: /^[^./]/ }, async (args) => {
181
+ if (args.namespace === STUB_NS) {
182
+ // A stub may stand **on top of** the real module rather than replace
183
+ // it (node:module does). Its own import has to reach workerd, not
184
+ // come back here and recurse.
185
+ const b0 = args.path.startsWith("node:") ? args.path.slice(5) : args.path;
186
+ if (NODE_BUILTINS.has(b0)) {
187
+ state.nodeBuiltins.add("node:" + b0);
188
+ if (args.kind === "require-call")
189
+ state.requireBuiltins.add("node:" + b0);
190
+ return { path: "node:" + b0, external: true };
191
+ }
192
+ return undefined;
193
+ }
194
+ if (args.namespace === EMPTY_NS)
195
+ return undefined;
196
+ if (args.path === "pg" && args.kind !== "entry-point") {
197
+ const r = await b.resolve(pgAlias, { kind: args.kind, resolveDir: opts.absWorkingDir, importer: args.importer });
198
+ if (r.errors.length === 0 && r.path)
199
+ return { path: r.path };
200
+ return undefined;
201
+ }
202
+ if (args.path === "debug" && args.namespace !== "debug-browser") {
203
+ const r = await b.resolve("debug/src/browser.js", { kind: args.kind, resolveDir: args.resolveDir, namespace: "debug-browser" });
204
+ if (r.errors.length === 0 && r.path)
205
+ return { path: r.path };
206
+ }
207
+ const bare = args.path.startsWith("node:") ? args.path.slice(5) : args.path;
208
+ const bareBase = bare.split("/")[0];
209
+ if (NODE_BUILTINS.has(bare) || (NODE_BUILTINS.has(bareBase) && bare.startsWith(bareBase + "/"))) {
210
+ state.nodeBuiltins.add("node:" + bare);
211
+ if (bare in STUBS)
212
+ return { path: bare, namespace: STUB_NS };
213
+ if (args.kind === "require-call")
214
+ state.requireBuiltins.add("node:" + bare);
215
+ return { path: "node:" + bare, external: true };
216
+ }
217
+ if (EMPTY.has(args.path))
218
+ return { path: args.path, namespace: EMPTY_NS };
219
+ return undefined;
220
+ });
221
+ b.onLoad({ filter: /.*/, namespace: STUB_NS }, (args) => ({ contents: STUBS[args.path], loader: "js" }));
222
+ b.onLoad({ filter: /.*/, namespace: EMPTY_NS }, () => ({ contents: "export default {};", loader: "js" }));
223
+ },
224
+ };
225
+ }
226
+ /**
227
+ * Bundles one worker without writing files. Returns its bytes and report; the caller
228
+ * (the deployment tool or E2E) chooses where and under what name to place them.
229
+ */
230
+ export async function buildWorker(opts) {
231
+ const outfile = opts.outfile ?? "worker/index.js";
232
+ const pass = async (banner) => {
233
+ const state = { nodeBuiltins: new Set(), requireBuiltins: new Set(), wasm: new Map() };
234
+ const options = {
235
+ bundle: true,
236
+ // Do not use the `browser` condition or field: TypeORM's package.json `browser` map
237
+ // replaces every driver with an empty stub, leaving DataSource without a driver.
238
+ platform: "neutral",
239
+ conditions: ["workerd", "worker", "node", "import", "default"],
240
+ mainFields: ["module", "main"],
241
+ format: "esm",
242
+ target: "es2022",
243
+ // Do not escape non-ASCII strings as \u: workerd reads UTF-8 directly, and Korean
244
+ // messages in stacks must remain human-readable.
245
+ charset: "utf8",
246
+ entryPoints: [opts.entry],
247
+ outfile,
248
+ absWorkingDir: opts.absWorkingDir,
249
+ plugins: [workerPlugin(state, opts)],
250
+ external: ["node:*", "cloudflare:*"],
251
+ define: { "process.env.NODE_ENV": '"production"', ...(opts.define ?? {}) },
252
+ write: false,
253
+ logLevel: "silent",
254
+ ...(opts.minify ? { minify: true } : {}),
255
+ ...(banner !== undefined ? { banner: { js: banner } } : {}),
256
+ };
257
+ const r = await build(options);
258
+ const file = r.outputFiles?.[0];
259
+ if (!file)
260
+ throw new Error("esbuild produced no output");
261
+ return { code: file.contents, state };
262
+ };
263
+ let { code, state } = await pass();
264
+ // If CJS required Node built-ins, bundle again with the banner's require table.
265
+ if (state.requireBuiltins.size > 0) {
266
+ ({ code, state } = await pass(requireBanner(state.requireBuiltins)));
267
+ }
268
+ return {
269
+ code,
270
+ report: {
271
+ nodeImports: [...state.nodeBuiltins].sort(),
272
+ wasmModules: [...state.wasm.entries()].map(([name, path]) => ({ name, path })).sort((a, b) => a.name.localeCompare(b.name)),
273
+ },
274
+ };
275
+ }
276
+ //# sourceMappingURL=bundler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundler.js","sourceRoot":"","sources":["../src/bundler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ import { Emitter } from "./emitter.js";
2
+ import { DatabaseError } from "./errors.js";
3
+ import { types, type TypeParser } from "./type-parsers.js";
4
+ import type { Db, DbSession } from "./types.js";
5
+ export interface FieldDef {
6
+ name: string;
7
+ tableID: number;
8
+ columnID: number;
9
+ dataTypeID: number;
10
+ dataTypeSize: number;
11
+ dataTypeModifier: number;
12
+ format: string;
13
+ }
14
+ export interface QueryResult<R = Record<string, unknown>> {
15
+ command: string;
16
+ rowCount: number | null;
17
+ oid: number;
18
+ rows: R[];
19
+ fields: FieldDef[];
20
+ }
21
+ export interface QueryConfig {
22
+ text: string;
23
+ values?: unknown[] | undefined;
24
+ name?: string | undefined;
25
+ rowMode?: "array" | undefined;
26
+ types?: {
27
+ getTypeParser(oid: number, format: "text"): TypeParser;
28
+ } | undefined;
29
+ }
30
+ export type QueryCallback<R = Record<string, unknown>> = (err: Error | null, result?: QueryResult<R>) => void;
31
+ /** The material for `new Client({ db })` / `new Pool({ db })`. The other keys
32
+ * are there for pg compatibility and are ignored. */
33
+ export interface ClientConfig {
34
+ db?: Db | undefined;
35
+ [key: string]: unknown;
36
+ }
37
+ /** Moves a CommandComplete tag into pg's `command`, `rowCount` and `oid`. */
38
+ export declare function parseCommandTag(tag: string | null): {
39
+ command: string;
40
+ rowCount: number | null;
41
+ oid: number;
42
+ };
43
+ /**
44
+ * A client that holds one session. `connect()` opens the session and `end()`
45
+ * closes it. A `query` before `connect()` opens the session on its own — pg
46
+ * throws there, but opening is easier for an ORM to deal with and loses
47
+ * nothing.
48
+ */
49
+ export declare class Client extends Emitter {
50
+ #private;
51
+ readonly db: Db;
52
+ /** Sequelize hooks `client.connection.on('parameterStatus')`. */
53
+ readonly connection: Emitter;
54
+ readonly processID: number | null;
55
+ readonly secretKey: number | null;
56
+ _ending: boolean;
57
+ _connected: boolean;
58
+ _connecting: boolean;
59
+ constructor(config: ClientConfig | Db);
60
+ get session(): DbSession | null;
61
+ connect(): Promise<void>;
62
+ connect(cb: (err: Error | null) => void): void;
63
+ query<R = Record<string, unknown>>(text: string | QueryConfig, values?: unknown[]): Promise<QueryResult<R>>;
64
+ query<R = Record<string, unknown>>(text: string | QueryConfig, cb: QueryCallback<R>): void;
65
+ query<R = Record<string, unknown>>(text: string | QueryConfig, values: unknown[], cb: QueryCallback<R>): void;
66
+ end(): Promise<void>;
67
+ end(cb: (err?: Error) => void): void;
68
+ escapeIdentifier(s: string): string;
69
+ escapeLiteral(s: string): string;
70
+ }
71
+ export declare class PoolClient extends Client {
72
+ #private;
73
+ constructor(pool: Pool, db: Db);
74
+ /** pg's `release(err?)`. Passing an error throws the session away — we
75
+ * always throw it away, so it is the same. */
76
+ release(_err?: Error | boolean): void;
77
+ }
78
+ export interface PoolConfig extends ClientConfig {
79
+ max?: number | undefined;
80
+ /**
81
+ * How long `connect()` and `end()` wait for the closes that `release()`
82
+ * started, in milliseconds. Defaults to `DEFAULT_CLOSE_WAIT_MS`.
83
+ *
84
+ * The wait is bounded on purpose: a close that never settles — a session the
85
+ * actor has already lost — must not turn into a pool that never hands out a
86
+ * client again. pg has no such option and ignores unknown ones, so this is
87
+ * additive.
88
+ */
89
+ closeWaitMs?: number | undefined;
90
+ }
91
+ /** The bound on how long a pool waits for `release()`'s closes. */
92
+ export declare const DEFAULT_CLOSE_WAIT_MS = 5000;
93
+ export declare class Pool extends Emitter {
94
+ #private;
95
+ readonly db: Db;
96
+ readonly options: PoolConfig;
97
+ constructor(config: PoolConfig | Db);
98
+ get totalCount(): number;
99
+ get idleCount(): number;
100
+ get waitingCount(): number;
101
+ get ended(): boolean;
102
+ connect(): Promise<PoolClient>;
103
+ connect(cb: (err: Error | null, client?: PoolClient, release?: (err?: Error) => void) => void): void;
104
+ /** Called by `PoolClient.release()`, which cannot await its own close. */
105
+ _closing(close: Promise<void>): void;
106
+ _forget(c: PoolClient): void;
107
+ /** A query with no session. The facade's session-per-call is the same as
108
+ * pg's "borrow it, use it, give it back". */
109
+ query<R = Record<string, unknown>>(text: string | QueryConfig, values?: unknown[]): Promise<QueryResult<R>>;
110
+ query<R = Record<string, unknown>>(text: string | QueryConfig, cb: QueryCallback<R>): void;
111
+ query<R = Record<string, unknown>>(text: string | QueryConfig, values: unknown[], cb: QueryCallback<R>): void;
112
+ end(): Promise<void>;
113
+ end(cb: (err?: Error) => void): void;
114
+ }
115
+ /**
116
+ * A pg-shaped module with `db` bound in advance.
117
+ *
118
+ * It is handed to the places where an ORM takes a whole driver module
119
+ * (TypeORM's `driver`, Sequelize's `dialectModule`, Knex's `_driver()`). Those
120
+ * ORMs call `new Pool(options)` with their own options, so there is no way to
121
+ * put `db` into the options — it is bound here.
122
+ */
123
+ export declare function pgModule(db: Db): PgModule;
124
+ export interface PgModule {
125
+ Client: typeof Client;
126
+ Pool: typeof Pool;
127
+ DatabaseError: typeof DatabaseError;
128
+ defaults: typeof defaults;
129
+ /** Sequelize's `lib.types.getTypeParser`, Drizzle's `types.builtins`. */
130
+ types: typeof types;
131
+ native: null;
132
+ escapeIdentifier(s: string): string;
133
+ escapeLiteral(s: string): string;
134
+ }
135
+ /** pg's `defaults`. TypeORM touches `parseInt8` — we always keep int8 as a
136
+ * string. */
137
+ export declare const defaults: Record<string, unknown>;
138
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}