orez-sync-executor 0.12.14 → 0.12.16

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.
@@ -0,0 +1,20 @@
1
+ export type BillableCursor = {
2
+ rowsRead?: number;
3
+ rowsWritten?: number;
4
+ next?: (...args: unknown[]) => unknown;
5
+ one?: (...args: unknown[]) => unknown;
6
+ toArray?: (...args: unknown[]) => unknown;
7
+ raw?: (...args: unknown[]) => unknown;
8
+ [Symbol.iterator]?: () => Iterator<unknown>;
9
+ };
10
+ /**
11
+ * Account a cursor's final billing rows as it is consumed.
12
+ *
13
+ * Cloudflare's `rowsRead` and `rowsWritten` can increase during cursor
14
+ * iteration (notably for `... RETURNING` statements). Sampling only when
15
+ * `sql.exec()` returns misses that work. This proxy records monotonic deltas
16
+ * after every consumption method while preserving the cursor's native `this`
17
+ * binding.
18
+ */
19
+ export declare function trackBillableCursorRows<Cursor extends BillableCursor>(cursor: Cursor, recordWritten: (rows: number) => void, recordRead?: (rows: number) => void): Cursor;
20
+ //# sourceMappingURL=sql-billing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-billing.d.ts","sourceRoot":"","sources":["../src/sql-billing.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;IACtC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;IACrC,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;IACzC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;IACrC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;CAC5C,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,SAAS,cAAc,EACnE,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACrC,UAAU,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,GAC5C,MAAM,CA4DR"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Account a cursor's final billing rows as it is consumed.
3
+ *
4
+ * Cloudflare's `rowsRead` and `rowsWritten` can increase during cursor
5
+ * iteration (notably for `... RETURNING` statements). Sampling only when
6
+ * `sql.exec()` returns misses that work. This proxy records monotonic deltas
7
+ * after every consumption method while preserving the cursor's native `this`
8
+ * binding.
9
+ */
10
+ export function trackBillableCursorRows(cursor, recordWritten, recordRead = () => { }) {
11
+ if (!cursor || typeof cursor !== 'object')
12
+ return cursor;
13
+ let accountedWritten = 0;
14
+ let accountedRead = 0;
15
+ const account = () => {
16
+ const written = Number(cursor.rowsWritten ?? 0);
17
+ if (Number.isSafeInteger(written) && written > accountedWritten) {
18
+ recordWritten(written - accountedWritten);
19
+ accountedWritten = written;
20
+ }
21
+ const read = Number(cursor.rowsRead ?? 0);
22
+ if (Number.isSafeInteger(read) && read > accountedRead) {
23
+ recordRead(read - accountedRead);
24
+ accountedRead = read;
25
+ }
26
+ };
27
+ const wrapIterator = (iterator) => {
28
+ const next = iterator.next.bind(iterator);
29
+ return {
30
+ next(...args) {
31
+ try {
32
+ return next(...args);
33
+ }
34
+ finally {
35
+ account();
36
+ }
37
+ },
38
+ [Symbol.iterator]() {
39
+ return this;
40
+ },
41
+ };
42
+ };
43
+ let proxy;
44
+ proxy = new Proxy(cursor, {
45
+ get(target, property) {
46
+ const value = Reflect.get(target, property, target);
47
+ if (property === Symbol.iterator)
48
+ return () => proxy;
49
+ if ((property === 'next' || property === 'one' || property === 'toArray') &&
50
+ typeof value === 'function') {
51
+ return (...args) => {
52
+ try {
53
+ return Reflect.apply(value, target, args);
54
+ }
55
+ finally {
56
+ account();
57
+ }
58
+ };
59
+ }
60
+ if (property === 'raw' && typeof value === 'function') {
61
+ return (...args) => wrapIterator(Reflect.apply(value, target, args));
62
+ }
63
+ return typeof value === 'function' ? value.bind(target) : value;
64
+ },
65
+ });
66
+ account();
67
+ return proxy;
68
+ }
69
+ //# sourceMappingURL=sql-billing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-billing.js","sourceRoot":"","sources":["../src/sql-billing.ts"],"names":[],"mappings":"AAUA;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAc,EACd,aAAqC,EACrC,aAAqC,GAAG,EAAE,GAAE,CAAC;IAE7C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAA;IACxD,IAAI,gBAAgB,GAAG,CAAC,CAAA;IACxB,IAAI,aAAa,GAAG,CAAC,CAAA;IAErB,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAA;QAC/C,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,gBAAgB,EAAE,CAAC;YAChE,aAAa,CAAC,OAAO,GAAG,gBAAgB,CAAC,CAAA;YACzC,gBAAgB,GAAG,OAAO,CAAA;QAC5B,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA;QACzC,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,aAAa,EAAE,CAAC;YACvD,UAAU,CAAC,IAAI,GAAG,aAAa,CAAC,CAAA;YAChC,aAAa,GAAG,IAAI,CAAA;QACtB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,CAAC,QAA2B,EAA6B,EAAE;QAC9E,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACzC,OAAO;YACL,IAAI,CAAC,GAAG,IAAoB;gBAC1B,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;gBACtB,CAAC;wBAAS,CAAC;oBACT,OAAO,EAAE,CAAA;gBACX,CAAC;YACH,CAAC;YACD,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACf,OAAO,IAAI,CAAA;YACb,CAAC;SACF,CAAA;IACH,CAAC,CAAA;IAED,IAAI,KAAa,CAAA;IACjB,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;QACxB,GAAG,CAAC,MAAM,EAAE,QAAQ;YAClB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;YACnD,IAAI,QAAQ,KAAK,MAAM,CAAC,QAAQ;gBAAE,OAAO,GAAG,EAAE,CAAC,KAAqC,CAAA;YACpF,IACE,CAAC,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,SAAS,CAAC;gBACrE,OAAO,KAAK,KAAK,UAAU,EAC3B,CAAC;gBACD,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;oBAC5B,IAAI,CAAC;wBACH,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;oBAC3C,CAAC;4BAAS,CAAC;wBACT,OAAO,EAAE,CAAA;oBACX,CAAC;gBACH,CAAC,CAAA;YACH,CAAC;YACD,IAAI,QAAQ,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBACtD,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE,CAC5B,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAsB,CAAC,CAAA;YACzE,CAAC;YACD,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACjE,CAAC;KACF,CAAC,CAAA;IACF,OAAO,EAAE,CAAA;IACT,OAAO,KAAK,CAAA;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orez-sync-executor",
3
- "version": "0.12.14",
3
+ "version": "0.12.16",
4
4
  "description": "Internal orez engine package. Do not import directly: consumers use orez-lite (e.g. orez-lite/realtime).",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -24,6 +24,10 @@
24
24
  "./realtime": {
25
25
  "types": "./dist/realtime/index.d.ts",
26
26
  "import": "./dist/realtime/index.js"
27
+ },
28
+ "./sql-billing": {
29
+ "types": "./dist/sql-billing.d.ts",
30
+ "import": "./dist/sql-billing.js"
27
31
  }
28
32
  },
29
33
  "scripts": {