@runlot/pg 0.1.0-rc.11

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 +228 -0
  5. package/dist/bundler.js.map +1 -0
  6. package/dist/client.d.ts +118 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +365 -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 +62 -0
  13. package/dist/emitter.js.map +1 -0
  14. package/dist/errors.d.ts +32 -0
  15. package/dist/errors.d.ts.map +1 -0
  16. package/dist/errors.js +43 -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 +26 -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 +12 -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 +29 -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 +340 -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 +21 -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 +21 -0
  45. package/dist/orm/typeorm.js.map +1 -0
  46. package/dist/type-parsers.d.ts +155 -0
  47. package/dist/type-parsers.d.ts.map +1 -0
  48. package/dist/type-parsers.js +319 -0
  49. package/dist/type-parsers.js.map +1 -0
  50. package/dist/types.d.ts +79 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +7 -0
  53. package/dist/types.js.map +1 -0
  54. package/package.json +78 -0
@@ -0,0 +1,155 @@
1
+ export type TypeParser = (text: string) => unknown;
2
+ /** pg-types 의 builtins. OID 는 pg_catalog 의 안정된 값이다. */
3
+ export declare const builtins: {
4
+ readonly BOOL: 16;
5
+ readonly BYTEA: 17;
6
+ readonly CHAR: 18;
7
+ readonly INT8: 20;
8
+ readonly INT2: 21;
9
+ readonly INT4: 23;
10
+ readonly REGPROC: 24;
11
+ readonly TEXT: 25;
12
+ readonly OID: 26;
13
+ readonly TID: 27;
14
+ readonly XID: 28;
15
+ readonly CID: 29;
16
+ readonly JSON: 114;
17
+ readonly XML: 142;
18
+ readonly PG_NODE_TREE: 194;
19
+ readonly SMGR: 210;
20
+ readonly PATH: 602;
21
+ readonly POLYGON: 604;
22
+ readonly CIDR: 650;
23
+ readonly FLOAT4: 700;
24
+ readonly FLOAT8: 701;
25
+ readonly ABSTIME: 702;
26
+ readonly RELTIME: 703;
27
+ readonly TINTERVAL: 704;
28
+ readonly CIRCLE: 718;
29
+ readonly MACADDR8: 774;
30
+ readonly MONEY: 790;
31
+ readonly MACADDR: 829;
32
+ readonly INET: 869;
33
+ readonly ACLITEM: 1033;
34
+ readonly BPCHAR: 1042;
35
+ readonly VARCHAR: 1043;
36
+ readonly DATE: 1082;
37
+ readonly TIME: 1083;
38
+ readonly TIMESTAMP: 1114;
39
+ readonly TIMESTAMPTZ: 1184;
40
+ readonly INTERVAL: 1186;
41
+ readonly TIMETZ: 1266;
42
+ readonly BIT: 1560;
43
+ readonly VARBIT: 1562;
44
+ readonly NUMERIC: 1700;
45
+ readonly REFCURSOR: 1790;
46
+ readonly REGPROCEDURE: 2202;
47
+ readonly REGOPER: 2203;
48
+ readonly REGOPERATOR: 2204;
49
+ readonly REGCLASS: 2205;
50
+ readonly REGTYPE: 2206;
51
+ readonly UUID: 2950;
52
+ readonly TXID_SNAPSHOT: 2970;
53
+ readonly PG_LSN: 3220;
54
+ readonly PG_NDISTINCT: 3361;
55
+ readonly PG_DEPENDENCIES: 3402;
56
+ readonly TSVECTOR: 3614;
57
+ readonly TSQUERY: 3615;
58
+ readonly GTSVECTOR: 3642;
59
+ readonly REGCONFIG: 3734;
60
+ readonly REGDICTIONARY: 3769;
61
+ readonly JSONB: 3802;
62
+ readonly REGNAMESPACE: 4089;
63
+ readonly REGROLE: 4096;
64
+ };
65
+ /** PostgreSQL 배열 텍스트('{a,b}') 파서. 중첩과 따옴표를 다룬다. */
66
+ export declare function parseArray(text: string, element?: TypeParser): unknown[];
67
+ export declare function getTypeParser(oid: number, format?: "text" | "binary"): TypeParser;
68
+ export declare function setTypeParser(oid: number, format: "text" | "binary" | TypeParser, parser?: TypeParser): void;
69
+ /** `pg.types` 로 넘겨줄 객체. */
70
+ export declare const types: {
71
+ builtins: {
72
+ readonly BOOL: 16;
73
+ readonly BYTEA: 17;
74
+ readonly CHAR: 18;
75
+ readonly INT8: 20;
76
+ readonly INT2: 21;
77
+ readonly INT4: 23;
78
+ readonly REGPROC: 24;
79
+ readonly TEXT: 25;
80
+ readonly OID: 26;
81
+ readonly TID: 27;
82
+ readonly XID: 28;
83
+ readonly CID: 29;
84
+ readonly JSON: 114;
85
+ readonly XML: 142;
86
+ readonly PG_NODE_TREE: 194;
87
+ readonly SMGR: 210;
88
+ readonly PATH: 602;
89
+ readonly POLYGON: 604;
90
+ readonly CIDR: 650;
91
+ readonly FLOAT4: 700;
92
+ readonly FLOAT8: 701;
93
+ readonly ABSTIME: 702;
94
+ readonly RELTIME: 703;
95
+ readonly TINTERVAL: 704;
96
+ readonly CIRCLE: 718;
97
+ readonly MACADDR8: 774;
98
+ readonly MONEY: 790;
99
+ readonly MACADDR: 829;
100
+ readonly INET: 869;
101
+ readonly ACLITEM: 1033;
102
+ readonly BPCHAR: 1042;
103
+ readonly VARCHAR: 1043;
104
+ readonly DATE: 1082;
105
+ readonly TIME: 1083;
106
+ readonly TIMESTAMP: 1114;
107
+ readonly TIMESTAMPTZ: 1184;
108
+ readonly INTERVAL: 1186;
109
+ readonly TIMETZ: 1266;
110
+ readonly BIT: 1560;
111
+ readonly VARBIT: 1562;
112
+ readonly NUMERIC: 1700;
113
+ readonly REFCURSOR: 1790;
114
+ readonly REGPROCEDURE: 2202;
115
+ readonly REGOPER: 2203;
116
+ readonly REGOPERATOR: 2204;
117
+ readonly REGCLASS: 2205;
118
+ readonly REGTYPE: 2206;
119
+ readonly UUID: 2950;
120
+ readonly TXID_SNAPSHOT: 2970;
121
+ readonly PG_LSN: 3220;
122
+ readonly PG_NDISTINCT: 3361;
123
+ readonly PG_DEPENDENCIES: 3402;
124
+ readonly TSVECTOR: 3614;
125
+ readonly TSQUERY: 3615;
126
+ readonly GTSVECTOR: 3642;
127
+ readonly REGCONFIG: 3734;
128
+ readonly REGDICTIONARY: 3769;
129
+ readonly JSONB: 3802;
130
+ readonly REGNAMESPACE: 4089;
131
+ readonly REGROLE: 4096;
132
+ };
133
+ getTypeParser: typeof getTypeParser;
134
+ setTypeParser: typeof setTypeParser;
135
+ arrayParser: {
136
+ create: (s: string, p: TypeParser) => {
137
+ parse: () => unknown[];
138
+ };
139
+ };
140
+ };
141
+ /**
142
+ * facade 는 셀을 이미 디코딩해서 준다 (§8 표). 파서 표는 텍스트를 받으므로
143
+ * 되돌린다. 손실 없는 방향이다: number 는 facade 가 정확히 담을 수 있는
144
+ * 범위에서만 만들어졌고, json 은 문자열로 다시 직렬화해도 값이 같다.
145
+ */
146
+ export declare function cellToText(cell: unknown, oid: number): string | null;
147
+ /**
148
+ * 셀 하나를 공개 값으로 옮긴다.
149
+ *
150
+ * 등록된 파서(전역 또는 질의별)가 있으면 텍스트로 되돌려 그것에 먹인다. 없으면
151
+ * facade 의 디코딩을 그대로 두되, pg 기본과 다른 자리만 맞춘다: 날짜류는 Date,
152
+ * bytea 는 Uint8Array, 배열은 배열.
153
+ */
154
+ export declare function convertCell(cell: unknown, oid: number, lookup?: (oid: number, format: "text") => TypeParser): unknown;
155
+ //# sourceMappingURL=type-parsers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-parsers.d.ts","sourceRoot":"","sources":["../src/type-parsers.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;AAEnD,uDAAuD;AACvD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DX,CAAC;AAyDX,mDAAmD;AACnD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,UAAqB,GAAG,OAAO,EAAE,CA6ClF;AA6CD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,QAAiB,GAAG,UAAU,CAOzF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAM5G;AAED,2BAA2B;AAC3B,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAAwE,MAAM,KAAK,UAAU;;;;CAA4C,CAAC;AAI5J;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASpE;AAeD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,UAAU,GAAG,OAAO,CA+BrH"}
@@ -0,0 +1,319 @@
1
+ // `pg.types` 의 흉내.
2
+ //
3
+ // ORM 은 두 방식으로 이 표를 만진다: `types.setTypeParser(oid, fn)` 으로 전역
4
+ // 등록, 그리고 질의 설정의 `types.getTypeParser(oid, format)` 으로 질의별 주입
5
+ // (Drizzle·Prisma 가 그렇다). 둘 다 **텍스트 표현**을 받는 함수를 기대하므로,
6
+ // facade 가 이미 디코딩한 셀을 다시 텍스트로 되돌려 먹인다 (`cellToText`).
7
+ //
8
+ // 등록이 없으면 pg 의 기본 변환을 따른다 — 그래야 `pg` 를 그대로 쓰던 코드가
9
+ // 어댑터로 바꿔도 같은 값을 본다.
10
+ /** pg-types 의 builtins. OID 는 pg_catalog 의 안정된 값이다. */
11
+ export const builtins = {
12
+ BOOL: 16,
13
+ BYTEA: 17,
14
+ CHAR: 18,
15
+ INT8: 20,
16
+ INT2: 21,
17
+ INT4: 23,
18
+ REGPROC: 24,
19
+ TEXT: 25,
20
+ OID: 26,
21
+ TID: 27,
22
+ XID: 28,
23
+ CID: 29,
24
+ JSON: 114,
25
+ XML: 142,
26
+ PG_NODE_TREE: 194,
27
+ SMGR: 210,
28
+ PATH: 602,
29
+ POLYGON: 604,
30
+ CIDR: 650,
31
+ FLOAT4: 700,
32
+ FLOAT8: 701,
33
+ ABSTIME: 702,
34
+ RELTIME: 703,
35
+ TINTERVAL: 704,
36
+ CIRCLE: 718,
37
+ MACADDR8: 774,
38
+ MONEY: 790,
39
+ MACADDR: 829,
40
+ INET: 869,
41
+ ACLITEM: 1033,
42
+ BPCHAR: 1042,
43
+ VARCHAR: 1043,
44
+ DATE: 1082,
45
+ TIME: 1083,
46
+ TIMESTAMP: 1114,
47
+ TIMESTAMPTZ: 1184,
48
+ INTERVAL: 1186,
49
+ TIMETZ: 1266,
50
+ BIT: 1560,
51
+ VARBIT: 1562,
52
+ NUMERIC: 1700,
53
+ REFCURSOR: 1790,
54
+ REGPROCEDURE: 2202,
55
+ REGOPER: 2203,
56
+ REGOPERATOR: 2204,
57
+ REGCLASS: 2205,
58
+ REGTYPE: 2206,
59
+ UUID: 2950,
60
+ TXID_SNAPSHOT: 2970,
61
+ PG_LSN: 3220,
62
+ PG_NDISTINCT: 3361,
63
+ PG_DEPENDENCIES: 3402,
64
+ TSVECTOR: 3614,
65
+ TSQUERY: 3615,
66
+ GTSVECTOR: 3642,
67
+ REGCONFIG: 3734,
68
+ REGDICTIONARY: 3769,
69
+ JSONB: 3802,
70
+ REGNAMESPACE: 4089,
71
+ REGROLE: 4096,
72
+ };
73
+ // ---- 텍스트 → 값: pg-types 의 기본과 같은 규칙 ----
74
+ function parseBool(t) {
75
+ return t === "t" || t === "true" || t === "TRUE";
76
+ }
77
+ function parseBytea(t) {
78
+ // 서버는 hex 형식('\x...')으로 준다. escape 형식은 pg-feather 가 내지 않는다.
79
+ if (t.startsWith("\\x")) {
80
+ const hex = t.slice(2);
81
+ const out = new Uint8Array(hex.length >> 1);
82
+ for (let i = 0; i < out.length; i++)
83
+ out[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
84
+ return out;
85
+ }
86
+ const out = new Uint8Array(t.length);
87
+ for (let i = 0; i < t.length; i++)
88
+ out[i] = t.charCodeAt(i) & 0xff;
89
+ return out;
90
+ }
91
+ /**
92
+ * timestamp/timestamptz/date → Date (pg 의 기본).
93
+ *
94
+ * timestamp(시간대 없음)는 pg 가 **로컬 시간**으로 읽는다. 워커의 로컬은 UTC 라
95
+ * 실질적으로 UTC 다. date 도 pg 는 로컬 자정으로 만든다 — 같은 이유로 UTC 자정.
96
+ */
97
+ function parseDate(t) {
98
+ // pg-types 와 같다: infinity 는 Date 가 아니라 숫자 Infinity 다.
99
+ if (t === "infinity")
100
+ return Infinity;
101
+ if (t === "-infinity")
102
+ return -Infinity;
103
+ const m = /^(\d{4,})-(\d{2})-(\d{2})(?:[ T](\d{2}):(\d{2}):(\d{2})(\.\d+)?)?\s*(Z|[+-]\d{2}(?::?\d{2})?(?::?\d{2})?)?\s*(BC)?$/.exec(t);
104
+ if (!m) {
105
+ const d = new Date(t);
106
+ return Number.isNaN(d.getTime()) ? null : d;
107
+ }
108
+ let year = Number(m[1]);
109
+ if (m[9])
110
+ year = -year + 1;
111
+ const month = Number(m[2]) - 1;
112
+ const day = Number(m[3]);
113
+ const hour = m[4] ? Number(m[4]) : 0;
114
+ const minute = m[5] ? Number(m[5]) : 0;
115
+ const second = m[6] ? Number(m[6]) : 0;
116
+ const ms = m[7] ? Math.round(Number(m[7]) * 1000) : 0;
117
+ let offsetMin = 0;
118
+ const tz = m[8];
119
+ if (tz && tz !== "Z") {
120
+ const sign = tz[0] === "-" ? -1 : 1;
121
+ const parts = tz.slice(1).split(":");
122
+ const raw = parts.length === 1 && parts[0].length > 2 ? [parts[0].slice(0, 2), parts[0].slice(2, 4)] : parts;
123
+ offsetMin = sign * (Number(raw[0] ?? 0) * 60 + Number(raw[1] ?? 0));
124
+ }
125
+ const d = new Date(Date.UTC(2000, month, day, hour, minute, second, ms));
126
+ d.setUTCFullYear(year);
127
+ return new Date(d.getTime() - offsetMin * 60_000);
128
+ }
129
+ /** PostgreSQL 배열 텍스트('{a,b}') 파서. 중첩과 따옴표를 다룬다. */
130
+ export function parseArray(text, element = (s) => s) {
131
+ let i = 0;
132
+ // 차원 접두 '[1:3]={...}' 는 건너뛴다.
133
+ if (text[0] === "[")
134
+ i = text.indexOf("=") + 1;
135
+ function parseInner() {
136
+ const out = [];
137
+ if (text[i] !== "{")
138
+ throw new Error("배열 텍스트가 { 로 시작하지 않는다: " + text);
139
+ i++;
140
+ if (text[i] === "}") {
141
+ i++;
142
+ return out;
143
+ }
144
+ for (;;) {
145
+ if (text[i] === "{") {
146
+ out.push(parseInner());
147
+ }
148
+ else if (text[i] === '"') {
149
+ i++;
150
+ let s = "";
151
+ while (i < text.length && text[i] !== '"') {
152
+ if (text[i] === "\\")
153
+ i++;
154
+ s += text[i];
155
+ i++;
156
+ }
157
+ i++;
158
+ out.push(element(s));
159
+ }
160
+ else {
161
+ let s = "";
162
+ while (i < text.length && text[i] !== "," && text[i] !== "}") {
163
+ s += text[i];
164
+ i++;
165
+ }
166
+ out.push(s === "NULL" ? null : element(s));
167
+ }
168
+ if (text[i] === ",") {
169
+ i++;
170
+ continue;
171
+ }
172
+ if (text[i] === "}") {
173
+ i++;
174
+ return out;
175
+ }
176
+ throw new Error("배열 텍스트가 끝나지 않는다: " + text);
177
+ }
178
+ }
179
+ return parseInner();
180
+ }
181
+ const identity = (s) => s;
182
+ const num = (s) => Number(s);
183
+ const json = (s) => JSON.parse(s);
184
+ /** pg-types 의 기본 텍스트 파서 표. 여기 없는 oid 는 문자열 그대로다. */
185
+ const defaults = new Map([
186
+ [builtins.BOOL, parseBool],
187
+ [builtins.BYTEA, parseBytea],
188
+ [builtins.INT2, num],
189
+ [builtins.INT4, num],
190
+ [builtins.OID, num],
191
+ [builtins.FLOAT4, num],
192
+ [builtins.FLOAT8, num],
193
+ [builtins.JSON, json],
194
+ [builtins.JSONB, json],
195
+ [builtins.DATE, parseDate],
196
+ [builtins.TIMESTAMP, parseDate],
197
+ [builtins.TIMESTAMPTZ, parseDate],
198
+ // 배열 oid 는 pg_type.typarray 의 값이다.
199
+ [1000, (s) => parseArray(s, parseBool)],
200
+ [1001, (s) => parseArray(s, parseBytea)],
201
+ [1005, (s) => parseArray(s, num)],
202
+ [1007, (s) => parseArray(s, num)],
203
+ [1016, (s) => parseArray(s, identity)],
204
+ [1021, (s) => parseArray(s, num)],
205
+ [1022, (s) => parseArray(s, num)],
206
+ [1028, (s) => parseArray(s, num)],
207
+ [1231, (s) => parseArray(s, identity)],
208
+ [1009, (s) => parseArray(s, identity)],
209
+ [1014, (s) => parseArray(s, identity)],
210
+ [1015, (s) => parseArray(s, identity)],
211
+ [1002, (s) => parseArray(s, identity)],
212
+ [2951, (s) => parseArray(s, identity)],
213
+ [199, (s) => parseArray(s, json)],
214
+ [3807, (s) => parseArray(s, json)],
215
+ [1182, (s) => parseArray(s, parseDate)],
216
+ [1115, (s) => parseArray(s, parseDate)],
217
+ [1185, (s) => parseArray(s, parseDate)],
218
+ [1183, (s) => parseArray(s, identity)],
219
+ ]);
220
+ const overrides = new Map();
221
+ export function getTypeParser(oid, format = "text") {
222
+ if (format === "binary") {
223
+ // facade 는 텍스트만 나른다. 바이너리 파서를 요구하는 호출자는 없지만,
224
+ // pg 는 이 인자를 받으므로 서명만 맞춘다.
225
+ return identity;
226
+ }
227
+ return overrides.get(oid) ?? defaults.get(oid) ?? identity;
228
+ }
229
+ export function setTypeParser(oid, format, parser) {
230
+ if (typeof format === "function") {
231
+ overrides.set(oid, format);
232
+ return;
233
+ }
234
+ if (format === "text" && parser)
235
+ overrides.set(oid, parser);
236
+ }
237
+ /** `pg.types` 로 넘겨줄 객체. */
238
+ export const types = { builtins, getTypeParser, setTypeParser, arrayParser: { create: (s, p) => ({ parse: () => parseArray(s, p) }) } };
239
+ // ---- 값 → 텍스트: facade 가 디코딩한 셀을 파서가 먹는 모양으로 ----
240
+ /**
241
+ * facade 는 셀을 이미 디코딩해서 준다 (§8 표). 파서 표는 텍스트를 받으므로
242
+ * 되돌린다. 손실 없는 방향이다: number 는 facade 가 정확히 담을 수 있는
243
+ * 범위에서만 만들어졌고, json 은 문자열로 다시 직렬화해도 값이 같다.
244
+ */
245
+ export function cellToText(cell, oid) {
246
+ if (cell === null || cell === undefined)
247
+ return null;
248
+ if (typeof cell === "string")
249
+ return cell;
250
+ if (typeof cell === "boolean")
251
+ return cell ? "t" : "f";
252
+ if (typeof cell === "number")
253
+ return oid === builtins.FLOAT4 || oid === builtins.FLOAT8 ? floatText(cell) : String(cell);
254
+ if (typeof cell === "bigint")
255
+ return String(cell);
256
+ if (cell instanceof ArrayBuffer)
257
+ return hexText(new Uint8Array(cell));
258
+ if (ArrayBuffer.isView(cell))
259
+ return hexText(new Uint8Array(cell.buffer, cell.byteOffset, cell.byteLength));
260
+ return JSON.stringify(cell);
261
+ }
262
+ function floatText(n) {
263
+ if (Number.isNaN(n))
264
+ return "NaN";
265
+ if (n === Infinity)
266
+ return "Infinity";
267
+ if (n === -Infinity)
268
+ return "-Infinity";
269
+ return String(n);
270
+ }
271
+ function hexText(bytes) {
272
+ let s = "\\x";
273
+ for (let i = 0; i < bytes.length; i++)
274
+ s += bytes[i].toString(16).padStart(2, "0");
275
+ return s;
276
+ }
277
+ /**
278
+ * 셀 하나를 공개 값으로 옮긴다.
279
+ *
280
+ * 등록된 파서(전역 또는 질의별)가 있으면 텍스트로 되돌려 그것에 먹인다. 없으면
281
+ * facade 의 디코딩을 그대로 두되, pg 기본과 다른 자리만 맞춘다: 날짜류는 Date,
282
+ * bytea 는 Uint8Array, 배열은 배열.
283
+ */
284
+ export function convertCell(cell, oid, lookup) {
285
+ if (cell === null || cell === undefined)
286
+ return null;
287
+ const custom = lookup ? lookup(oid, "text") : overrides.get(oid);
288
+ if (custom) {
289
+ const text = cellToText(cell, oid);
290
+ return text === null ? null : custom(text);
291
+ }
292
+ switch (oid) {
293
+ case builtins.BOOL:
294
+ case builtins.INT2:
295
+ case builtins.INT4:
296
+ case builtins.OID:
297
+ case builtins.FLOAT4:
298
+ case builtins.FLOAT8:
299
+ case builtins.JSON:
300
+ case builtins.JSONB:
301
+ case builtins.INT8:
302
+ case builtins.NUMERIC:
303
+ case builtins.TEXT:
304
+ case builtins.VARCHAR:
305
+ case builtins.UUID:
306
+ return cell;
307
+ case builtins.BYTEA:
308
+ if (cell instanceof ArrayBuffer)
309
+ return new Uint8Array(cell);
310
+ return typeof cell === "string" ? parseBytea(cell) : cell;
311
+ default: {
312
+ const d = defaults.get(oid);
313
+ if (!d || typeof cell !== "string")
314
+ return cell;
315
+ return d(cell);
316
+ }
317
+ }
318
+ }
319
+ //# sourceMappingURL=type-parsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-parsers.js","sourceRoot":"","sources":["../src/type-parsers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /** `tryExec` 가 값으로 답하는 오류. SQLSTATE 는 `code` 하나로만 읽는다. */
2
+ export interface DbErrorData {
3
+ code: string;
4
+ message: string;
5
+ detail: string | null;
6
+ hint: string | null;
7
+ position: string | null;
8
+ severity: string;
9
+ }
10
+ export interface DbColumn {
11
+ name: string;
12
+ typeOid: number;
13
+ }
14
+ export type TryExecResult = {
15
+ ok: true;
16
+ columns: DbColumn[];
17
+ /** 위치 배열. 열 이름이 겹쳐도 셀을 잃지 않는다. */
18
+ values: unknown[][];
19
+ rows: Record<string, unknown>[];
20
+ commandTag: string | null;
21
+ transactionStatus: string | null;
22
+ } | {
23
+ ok: false;
24
+ error: DbErrorData;
25
+ transactionStatus?: string | null;
26
+ };
27
+ /** 요청 범위의 세션 핸들 (`env.db.session()`). 트랜잭션·prepared·SET 이 유지된다. */
28
+ export interface DbSession {
29
+ exec(sql: string, params?: unknown[]): Promise<unknown[]>;
30
+ tryExec(sql: string, params?: unknown[]): Promise<TryExecResult>;
31
+ close(): Promise<void>;
32
+ }
33
+ /** 사용자 워커가 `env.db` 로 보는 것. */
34
+ export interface Db {
35
+ exec(sql: string, params?: unknown[]): Promise<unknown[]>;
36
+ tryExec(sql: string, params?: unknown[]): Promise<TryExecResult>;
37
+ session(): Promise<DbSession>;
38
+ identity(): Promise<{
39
+ project: string;
40
+ epoch: number;
41
+ }>;
42
+ }
43
+ export interface StorageObject {
44
+ key: string;
45
+ size: number;
46
+ etag: string;
47
+ contentType: string;
48
+ /** RFC 1123 (Last-Modified 헤더 그대로). 비어 있을 수 있다. */
49
+ lastModified: string;
50
+ }
51
+ export interface StorageListPage {
52
+ objects: StorageObject[];
53
+ /** 비어 있으면 마지막 쪽이다. 다음 호출의 `cursor` 로 넘긴다. */
54
+ cursor: string;
55
+ }
56
+ /** 사용자 워커가 `env.storage` 로 보는 것. 키는 프로젝트 접두 아래의 상대 경로다. */
57
+ export interface Storage {
58
+ put(key: string, body: BodyInit | null, opts?: {
59
+ contentType?: string;
60
+ }): Promise<StorageObject>;
61
+ /** 없으면 `null`. 404 는 예외가 아니다. */
62
+ get(key: string): Promise<(StorageObject & {
63
+ body: ReadableStream<Uint8Array> | null;
64
+ }) | null>;
65
+ head(key: string): Promise<StorageObject | null>;
66
+ /** 멱등. 없는 키를 지워도 성공이다. */
67
+ delete(key: string): Promise<void>;
68
+ list(opts?: {
69
+ prefix?: string;
70
+ cursor?: string;
71
+ limit?: number;
72
+ }): Promise<StorageListPage>;
73
+ /** 서명 URL. GET·PUT 만. ttl 은 초 (기본 300, 상한 3600). */
74
+ presign(key: string, opts?: {
75
+ method?: "GET" | "PUT";
76
+ ttl?: number;
77
+ }): Promise<string>;
78
+ }
79
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,7 @@
1
+ // `env.db` 의 표면 (docs/env-db-assembly.md §8, docs/pg-driver-support.md §3.1).
2
+ //
3
+ // 여기 적힌 것이 어댑터가 기대는 전부다. 시스템 워커의 `Db` facade 가 정본이고
4
+ // 이 파일은 그 모양을 TypeScript 로 옮긴 사본이다 — 둘이 갈라지면 어댑터가
5
+ // 조용히 틀린 값을 만들므로, facade 가 바뀌면 여기도 같이 바꾼다.
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,oDAAoD;AACpD,kDAAkD;AAClD,2CAA2C"}
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "@runlot/pg",
3
+ "version": "0.1.0-rc.11",
4
+ "description": "env.db 위의 node-postgres 호환 어댑터와 ORM 어댑터 (docs/pg-driver-support.md §3.2·§3.3)",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/runlot/runlot",
11
+ "directory": "web/packages/pg"
12
+ },
13
+ "type": "module",
14
+ "main": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "default": "./dist/index.js"
20
+ },
21
+ "./drizzle": {
22
+ "types": "./dist/orm/drizzle.d.ts",
23
+ "default": "./dist/orm/drizzle.js"
24
+ },
25
+ "./kysely": {
26
+ "types": "./dist/orm/kysely.d.ts",
27
+ "default": "./dist/orm/kysely.js"
28
+ },
29
+ "./knex": {
30
+ "types": "./dist/orm/knex.d.ts",
31
+ "default": "./dist/orm/knex.js"
32
+ },
33
+ "./typeorm": {
34
+ "types": "./dist/orm/typeorm.d.ts",
35
+ "default": "./dist/orm/typeorm.js"
36
+ },
37
+ "./sequelize": {
38
+ "types": "./dist/orm/sequelize.d.ts",
39
+ "default": "./dist/orm/sequelize.js"
40
+ },
41
+ "./prisma": {
42
+ "types": "./dist/orm/prisma.d.ts",
43
+ "default": "./dist/orm/prisma.js"
44
+ },
45
+ "./bundler": {
46
+ "types": "./dist/bundler.d.ts",
47
+ "default": "./dist/bundler.js"
48
+ }
49
+ },
50
+ "files": [
51
+ "dist"
52
+ ],
53
+ "dependencies": {
54
+ "esbuild": "^0.24.2"
55
+ },
56
+ "devDependencies": {
57
+ "@types/node": "^22.10.2",
58
+ "@types/pg": "^8.23.1",
59
+ "typescript": "^5.7.2",
60
+ "drizzle-orm": "0.45.2",
61
+ "kysely": "0.29.5",
62
+ "knex": "3.3.0",
63
+ "typeorm": "1.1.1",
64
+ "reflect-metadata": "0.2.2",
65
+ "sequelize": "6.37.8",
66
+ "@prisma/client": "7.10.0",
67
+ "@prisma/driver-adapter-utils": "7.10.0",
68
+ "prisma": "7.10.0",
69
+ "@runlot/config": "0.1.0-rc.11"
70
+ },
71
+ "scripts": {
72
+ "build": "tsc -p tsconfig.build.json",
73
+ "test": "node build.mjs --test",
74
+ "prisma:generate": "prisma generate --config e2e/prisma/prisma.config.ts",
75
+ "typecheck": "pnpm run -s prisma:generate >/dev/null && tsc --noEmit",
76
+ "e2e:build": "node build.mjs --e2e"
77
+ }
78
+ }