pipework 0.7.21 → 0.7.23

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 (116) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/REFERENCE.md +66 -2
  3. package/dist/REFERENCE.md +66 -2
  4. package/dist/async/jobs/queue.d.ts +1 -0
  5. package/dist/async/jobs/queue.d.ts.map +1 -1
  6. package/dist/async/jobs/queue.js +2 -1
  7. package/dist/async/jobs/queue.js.map +1 -1
  8. package/dist/cli/commands/check.d.ts.map +1 -1
  9. package/dist/cli/commands/check.js +23 -0
  10. package/dist/cli/commands/check.js.map +1 -1
  11. package/dist/cli/commands/db.d.ts +10 -0
  12. package/dist/cli/commands/db.d.ts.map +1 -0
  13. package/dist/cli/commands/db.js +235 -0
  14. package/dist/cli/commands/db.js.map +1 -0
  15. package/dist/cli/commands/init.d.ts.map +1 -1
  16. package/dist/cli/commands/init.js +19 -1
  17. package/dist/cli/commands/init.js.map +1 -1
  18. package/dist/cli/index.d.ts.map +1 -1
  19. package/dist/cli/index.js +16 -0
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/core/config/namespace.d.ts +1 -0
  22. package/dist/core/config/namespace.d.ts.map +1 -1
  23. package/dist/core/config/schema.d.ts +2 -0
  24. package/dist/core/config/schema.d.ts.map +1 -1
  25. package/dist/core/config/schema.js +1 -0
  26. package/dist/core/config/schema.js.map +1 -1
  27. package/dist/core/pipework.d.ts.map +1 -1
  28. package/dist/core/pipework.js +27 -1
  29. package/dist/core/pipework.js.map +1 -1
  30. package/dist/core/surface/types.d.ts +7 -0
  31. package/dist/core/surface/types.d.ts.map +1 -1
  32. package/dist/core/surface/worker.d.ts.map +1 -1
  33. package/dist/core/surface/worker.js +60 -1
  34. package/dist/core/surface/worker.js.map +1 -1
  35. package/dist/data/db/advisory-lock.d.ts +6 -1
  36. package/dist/data/db/advisory-lock.d.ts.map +1 -1
  37. package/dist/data/db/advisory-lock.js +20 -7
  38. package/dist/data/db/advisory-lock.js.map +1 -1
  39. package/dist/data/db/bulk-set.d.ts.map +1 -1
  40. package/dist/data/db/bulk-set.js +12 -20
  41. package/dist/data/db/bulk-set.js.map +1 -1
  42. package/dist/data/db/composed.d.ts +23 -0
  43. package/dist/data/db/composed.d.ts.map +1 -0
  44. package/dist/data/db/composed.js +42 -0
  45. package/dist/data/db/composed.js.map +1 -0
  46. package/dist/data/db/expressions.d.ts +32 -0
  47. package/dist/data/db/expressions.d.ts.map +1 -1
  48. package/dist/data/db/expressions.js +67 -0
  49. package/dist/data/db/expressions.js.map +1 -1
  50. package/dist/data/db/filter.d.ts +22 -1
  51. package/dist/data/db/filter.d.ts.map +1 -1
  52. package/dist/data/db/filter.js +22 -1
  53. package/dist/data/db/filter.js.map +1 -1
  54. package/dist/data/db/namespace.d.ts +27 -0
  55. package/dist/data/db/namespace.d.ts.map +1 -1
  56. package/dist/data/db/namespace.js +6 -0
  57. package/dist/data/db/namespace.js.map +1 -1
  58. package/dist/data/db/serializable.d.ts +8 -0
  59. package/dist/data/db/serializable.d.ts.map +1 -0
  60. package/dist/data/db/serializable.js +44 -0
  61. package/dist/data/db/serializable.js.map +1 -0
  62. package/dist/data/db/values.d.ts +10 -0
  63. package/dist/data/db/values.d.ts.map +1 -0
  64. package/dist/data/db/values.js +20 -0
  65. package/dist/data/db/values.js.map +1 -0
  66. package/dist/data/domain/field.d.ts +1 -0
  67. package/dist/data/domain/field.d.ts.map +1 -1
  68. package/dist/data/domain/field.js +4 -0
  69. package/dist/data/domain/field.js.map +1 -1
  70. package/dist/data/domain/project-table.js +6 -1
  71. package/dist/data/domain/project-table.js.map +1 -1
  72. package/dist/data/domain/types.d.ts +1 -1
  73. package/dist/data/domain/types.d.ts.map +1 -1
  74. package/dist/data/jsonb/composed.d.ts +8 -0
  75. package/dist/data/jsonb/composed.d.ts.map +1 -0
  76. package/dist/data/jsonb/composed.js +15 -0
  77. package/dist/data/jsonb/composed.js.map +1 -0
  78. package/dist/data/jsonb/namespace.d.ts +12 -1
  79. package/dist/data/jsonb/namespace.d.ts.map +1 -1
  80. package/dist/data/jsonb/namespace.js +12 -1
  81. package/dist/data/jsonb/namespace.js.map +1 -1
  82. package/dist/data/jsonb/query.d.ts +4 -0
  83. package/dist/data/jsonb/query.d.ts.map +1 -1
  84. package/dist/data/jsonb/query.js +21 -0
  85. package/dist/data/jsonb/query.js.map +1 -1
  86. package/dist/data/temporal/close.d.ts.map +1 -1
  87. package/dist/data/temporal/close.js +3 -2
  88. package/dist/data/temporal/close.js.map +1 -1
  89. package/dist/data/temporal/get-current.d.ts.map +1 -1
  90. package/dist/data/temporal/get-current.js +2 -1
  91. package/dist/data/temporal/get-current.js.map +1 -1
  92. package/dist/data/temporal/revise.d.ts.map +1 -1
  93. package/dist/data/temporal/revise.js +8 -11
  94. package/dist/data/temporal/revise.js.map +1 -1
  95. package/dist/index.d.ts +3 -0
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js.map +1 -1
  98. package/dist/lint/config.d.ts +1 -0
  99. package/dist/lint/config.d.ts.map +1 -1
  100. package/dist/lint/config.js +5 -4
  101. package/dist/lint/config.js.map +1 -1
  102. package/dist/lint/rules/no-reexports.d.ts +3 -0
  103. package/dist/lint/rules/no-reexports.d.ts.map +1 -0
  104. package/dist/lint/rules/no-reexports.js +43 -0
  105. package/dist/lint/rules/no-reexports.js.map +1 -0
  106. package/dist/workspace/check-deps.d.ts +12 -0
  107. package/dist/workspace/check-deps.d.ts.map +1 -0
  108. package/dist/workspace/check-deps.js +183 -0
  109. package/dist/workspace/check-deps.js.map +1 -0
  110. package/dist/workspace/generate.d.ts.map +1 -1
  111. package/dist/workspace/generate.js +29 -0
  112. package/dist/workspace/generate.js.map +1 -1
  113. package/dist/workspace/sync.d.ts.map +1 -1
  114. package/dist/workspace/sync.js +4 -1
  115. package/dist/workspace/sync.js.map +1 -1
  116. package/package.json +1 -1
@@ -2,6 +2,7 @@ import { randomUUID } from 'node:crypto';
2
2
  import { DEFAULT_DB } from '../../request/di/types.js';
3
3
  import { createQueue } from '../../async/jobs/queue.js';
4
4
  import { executeJob } from '../../async/jobs/execute.js';
5
+ import { getBaseLogger } from '../logging/index.js';
5
6
  import { sql } from '../../data/db/sql.js';
6
7
  export function createWorkerSurface(config) {
7
8
  const databases = collectWorkerDatabases(config);
@@ -16,16 +17,31 @@ export function createWorkerSurface(config) {
16
17
  return surface;
17
18
  },
18
19
  async start(context) {
20
+ const logger = getBaseLogger();
19
21
  const queue = createQueue(config.queue);
20
22
  const dbName = config.database ?? context.config.defaultDatabaseName();
21
23
  const dbConfig = context.config.database(dbName);
22
24
  const conn = context.pool.getOrCreate(dbConfig);
23
25
  const db = conn.drizzle;
24
26
  await db.execute(sql `SELECT 1`);
27
+ if (config.listen === true) {
28
+ const rawConn = conn;
29
+ const listenClient = {
30
+ async listen(channel, cb) {
31
+ const sub = await rawConn.client.listen(channel, cb);
32
+ return { unlisten: () => sub.unlisten() };
33
+ },
34
+ };
35
+ await queue.startListener(listenClient);
36
+ logger.info('LISTEN/NOTIFY active for job completion');
37
+ }
25
38
  const dispatch = buildDispatchTable(config.jobs);
26
39
  const concurrency = config.concurrency ?? 1;
27
40
  const pollIntervalMs = config.pollIntervalMs ?? 1000;
41
+ const shutdownDeadlineMs = config.shutdownDeadlineMs ?? 30_000;
42
+ const priorityTimeouts = config.timeouts ?? {};
28
43
  const shouldRun = { value: true };
44
+ let inFlight = 0;
29
45
  const claimLoop = async () => {
30
46
  const workerId = randomUUID();
31
47
  while (shouldRun.value) {
@@ -42,11 +58,12 @@ export function createWorkerSurface(config) {
42
58
  ' This job was enqueued with a type that no handler recognizes.\n'));
43
59
  continue;
44
60
  }
61
+ inFlight++;
45
62
  const heartbeatInterval = setInterval(() => {
46
63
  void queue.heartbeat(db, claimed.id);
47
64
  }, 30_000);
48
65
  try {
49
- const timeoutMs = handler.meta.jobTimeout ?? undefined;
66
+ const timeoutMs = resolvePriorityTimeout(claimed, handler, priorityTimeouts);
50
67
  const result = await executeWithTimeout(() => executeJob(handler, {
51
68
  instance: context,
52
69
  jobId: claimed.id,
@@ -60,6 +77,7 @@ export function createWorkerSurface(config) {
60
77
  }
61
78
  finally {
62
79
  clearInterval(heartbeatInterval);
80
+ inFlight--;
63
81
  }
64
82
  }
65
83
  catch {
@@ -68,11 +86,46 @@ export function createWorkerSurface(config) {
68
86
  }
69
87
  };
70
88
  const workers = Array.from({ length: concurrency }, () => claimLoop());
89
+ let reaperTimer = null;
90
+ if (config.reaper !== undefined && config.reaper !== false) {
91
+ const reaperIntervalMs = typeof config.reaper === 'object'
92
+ ? (config.reaper.intervalMs ?? 60_000)
93
+ : 60_000;
94
+ reaperTimer = setInterval(() => {
95
+ void queue.reap(db).then((count) => {
96
+ if (count > 0) {
97
+ logger.info({ reaped: count }, `Reaped ${String(count)} stale job(s)`);
98
+ }
99
+ }).catch((err) => {
100
+ logger.error({ err }, 'Reaper failed');
101
+ });
102
+ }, reaperIntervalMs);
103
+ reaperTimer.unref();
104
+ }
71
105
  return {
72
106
  kind: 'worker',
73
107
  async stop() {
108
+ logger.info({ inFlight, deadlineMs: shutdownDeadlineMs }, 'Worker surface draining');
74
109
  shouldRun.value = false;
110
+ if (reaperTimer !== null) {
111
+ clearInterval(reaperTimer);
112
+ reaperTimer = null;
113
+ }
114
+ if (config.listen === true) {
115
+ await queue.stopListener();
116
+ }
117
+ const deadline = Date.now() + shutdownDeadlineMs;
75
118
  await Promise.allSettled(workers);
119
+ while (inFlight > 0 && Date.now() < deadline) {
120
+ logger.info({ inFlight, remainingMs: deadline - Date.now() }, 'Waiting for in-flight jobs');
121
+ await sleep(Math.min(500, deadline - Date.now()));
122
+ }
123
+ if (inFlight > 0) {
124
+ logger.warn({ inFlight }, 'Shutdown deadline reached with in-flight jobs');
125
+ }
126
+ else {
127
+ logger.info('Worker surface drained cleanly');
128
+ }
76
129
  },
77
130
  };
78
131
  },
@@ -129,6 +182,12 @@ function collectJobTypes(jobs) {
129
182
  }
130
183
  return types;
131
184
  }
185
+ function resolvePriorityTimeout(claimed, handler, priorityTimeouts) {
186
+ const fromPriority = priorityTimeouts[claimed.priority];
187
+ if (fromPriority !== undefined)
188
+ return fromPriority;
189
+ return handler.meta.jobTimeout ?? undefined;
190
+ }
132
191
  async function executeWithTimeout(fn, timeoutMs, jobType, jobId) {
133
192
  if (timeoutMs === undefined)
134
193
  return fn();
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/core/surface/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/core/surface/worker.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,9 @@
1
1
  import type { DB } from './types.js';
2
- /** Acquires a transaction-scoped advisory lock. Released automatically at commit/rollback. Multiple string keys are hashed independently into the two int4 arguments of pg_advisory_xact_lock. */
2
+ /** Acquires a transaction-scoped advisory lock. Released automatically at commit/rollback.
3
+ *
4
+ * String keys: hashed independently into the int4 arguments of pg_advisory_xact_lock.
5
+ * Numeric namespace: `advisoryLock(db, 1001, 'key')` → `pg_advisory_xact_lock(1001, hashtext('key'))`.
6
+ */
7
+ export declare function advisoryLock(db: DB, namespace: number, key: string): Promise<void>;
3
8
  export declare function advisoryLock(db: DB, ...keys: string[]): Promise<void>;
4
9
  //# sourceMappingURL=advisory-lock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"advisory-lock.d.ts","sourceRoot":"","sources":["../../../src/data/db/advisory-lock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAA;AAEpC,kMAAkM;AAClM,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3E"}
1
+ {"version":3,"file":"advisory-lock.d.ts","sourceRoot":"","sources":["../../../src/data/db/advisory-lock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAA;AAEpC;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AACzF,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA"}
@@ -1,13 +1,26 @@
1
1
  import { sql } from './sql.js';
2
- /** Acquires a transaction-scoped advisory lock. Released automatically at commit/rollback. Multiple string keys are hashed independently into the two int4 arguments of pg_advisory_xact_lock. */
3
- export async function advisoryLock(db, ...keys) {
4
- if (keys.length === 0)
5
- throw new Error('advisoryLock requires at least one key');
6
- if (keys.length === 1) {
7
- await db.execute(sql `SELECT pg_advisory_xact_lock(hashtext(${keys[0]}))`);
2
+ export async function advisoryLock(db, first, ...rest) {
3
+ if (typeof first === 'number') {
4
+ const key = rest[0];
5
+ if (key === undefined) {
6
+ throw new Error('[pipework] advisoryLock(db, namespace, key) requires a key string.\n\n' +
7
+ ' advisoryLock(db, 1001, \'my-entity\') — numeric namespace + string key\n' +
8
+ ' advisoryLock(db, \'key1\', \'key2\') — two hashed string keys\n');
9
+ }
10
+ await db.execute(sql `SELECT pg_advisory_xact_lock(${first}, hashtext(${key}))`);
11
+ return;
12
+ }
13
+ if (first === undefined) {
14
+ throw new Error('[pipework] advisoryLock requires at least one key.\n\n' +
15
+ ' advisoryLock(db, \'my-lock\') — single hashed key\n' +
16
+ ' advisoryLock(db, \'key1\', \'key2\') — two hashed keys\n' +
17
+ ' advisoryLock(db, 1001, \'my-entity\') — numeric namespace + hashed key\n');
18
+ }
19
+ if (rest.length === 0) {
20
+ await db.execute(sql `SELECT pg_advisory_xact_lock(hashtext(${first}))`);
8
21
  }
9
22
  else {
10
- await db.execute(sql `SELECT pg_advisory_xact_lock(hashtext(${keys[0]}), hashtext(${keys[1]}))`);
23
+ await db.execute(sql `SELECT pg_advisory_xact_lock(hashtext(${first}), hashtext(${rest[0]}))`);
11
24
  }
12
25
  }
13
26
  //# sourceMappingURL=advisory-lock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"advisory-lock.js","sourceRoot":"","sources":["../../../src/data/db/advisory-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAG9B,kMAAkM;AAClM,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAM,EAAE,GAAG,IAAc;IAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAChF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA,yCAAyC,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,CAAA;IAC5E,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA,yCAAyC,IAAI,CAAC,CAAC,CAAE,eAAe,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,CAAA;IACnG,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"advisory-lock.js","sourceRoot":"","sources":["../../../src/data/db/advisory-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAU9B,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAM,EAAE,KAAuB,EAAE,GAAG,IAAc;IACnF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,wEAAwE;gBACxE,6EAA6E;gBAC7E,wEAAwE,CACzE,CAAA;QACH,CAAC;QACD,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA,gCAAgC,KAAK,cAAc,GAAG,IAAI,CAAC,CAAA;QAC/E,OAAM;IACR,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,wDAAwD;YACxD,mEAAmE;YACnE,mEAAmE;YACnE,+EAA+E,CAChF,CAAA;IACH,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA,yCAAyC,KAAK,IAAI,CAAC,CAAA;IACzE,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA,yCAAyC,KAAK,eAAe,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,CAAA;IAChG,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bulk-set.d.ts","sourceRoot":"","sources":["../../../src/data/db/bulk-set.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,KAAK,EAAO,MAAM,YAAY,CAAA;AAGhD,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,kBAAkB,GAAG,UAAU,GAAG,UAAU,CAAA;AAEzL,UAAU,cAAc,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,MAAM,CAAA;IACnC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAA;IAChD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;CAClE;AAED,4FAA4F;AAC5F,wBAAsB,OAAO,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,SAAS,IAAI,EAAE,EACrB,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmCf"}
1
+ {"version":3,"file":"bulk-set.d.ts","sourceRoot":"","sources":["../../../src/data/db/bulk-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAO3C,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,kBAAkB,GAAG,UAAU,GAAG,UAAU,CAAA;AAEzL,UAAU,cAAc,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,MAAM,CAAA;IACnC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAA;IAChD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;CAClE;AAED,4FAA4F;AAC5F,wBAAsB,OAAO,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,SAAS,IAAI,EAAE,EACrB,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
@@ -1,5 +1,7 @@
1
- import { sql } from './sql.js';
2
1
  import { getTableName, getTableColumns } from './generated/drizzle-orm/introspection.js';
2
+ import { values } from './values.js';
3
+ import { identifier } from './expressions.js';
4
+ import { sql } from './sql.js';
3
5
  /** Executes UPDATE ... FROM (VALUES ...) for bulk per-row updates in a single statement. */
4
6
  export async function bulkSet(db, table, rows, options) {
5
7
  if (rows.length === 0)
@@ -7,28 +9,18 @@ export async function bulkSet(db, table, rows, options) {
7
9
  const tableName = getTableName(table);
8
10
  const columns = getTableColumns(table);
9
11
  const allKeys = [options.match, ...options.set];
10
- const valueRows = rows.map(row => {
11
- const cols = allKeys.map(key => {
12
- const cast = options.types[key];
13
- const val = row[key];
14
- if (cast === 'jsonb') {
15
- return sql `${JSON.stringify(val)}::jsonb`;
16
- }
17
- return sql `${val}::${sql.raw(cast)}`;
18
- });
19
- return sql `(${sql.join(cols, sql `, `)})`;
20
- });
21
- const valuesClause = sql.join(valueRows, sql `, `);
22
- const colNames = allKeys.map(k => {
23
- const col = columns[k];
24
- return col ? col.name : k;
25
- });
26
- const valsDef = colNames.join(', ');
12
+ const columnDefs = allKeys.map(key => ({
13
+ name: columns[key]?.name ?? key,
14
+ type: options.types[key],
15
+ }));
16
+ const rowArrays = rows.map(row => allKeys.map(key => row[key]));
17
+ const valuesClause = values(rowArrays, columnDefs);
18
+ const colNames = columnDefs.map(c => c.name);
27
19
  const matchCol = columns[options.match]?.name ?? options.match;
28
20
  const setClauses = options.set.map(key => {
29
21
  const colName = columns[key]?.name ?? key;
30
- return sql `${sql.raw('"' + colName + '"')} = ${sql.raw('_vals.' + '"' + colName + '"')}`;
22
+ return sql `${identifier(colName)} = ${sql.raw('_vals.' + '"' + colName + '"')}`;
31
23
  });
32
- await db.execute(sql `UPDATE ${sql.raw('"' + tableName + '"')} SET ${sql.join(setClauses, sql `, `)} FROM (VALUES ${valuesClause}) AS _vals(${sql.raw(valsDef)}) WHERE ${sql.raw('"' + tableName + '"')}.${sql.raw('"' + matchCol + '"')} = ${sql.raw('_vals.' + '"' + matchCol + '"')}`);
24
+ await db.execute(sql `UPDATE ${identifier(tableName)} SET ${sql.join(setClauses, sql `, `)} FROM ${valuesClause} AS _vals(${sql.raw(colNames.join(', '))}) WHERE ${identifier(tableName)}.${identifier(matchCol)} = ${sql.raw('_vals.' + '"' + matchCol + '"')}`);
33
25
  }
34
26
  //# sourceMappingURL=bulk-set.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bulk-set.js","sourceRoot":"","sources":["../../../src/data/db/bulk-set.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bulk-set.js","sourceRoot":"","sources":["../../../src/data/db/bulk-set.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAA;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAU9B,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,EAAM,EACN,KAAY,EACZ,IAAqB,EACrB,OAA6B;IAE7B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAE7B,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IACtC,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,GAAG,CAAa,CAAA;IAE3D,MAAM,UAAU,GAAqB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,GAAG;QAC/B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAA0B,CAAe;KAC9D,CAAC,CAAC,CAAA;IAEH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAiB,CAAC,CAAC,CAAC,CAAA;IAC7E,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IAElD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,OAAO,CAAC,KAAK,CAAA;IAE9D,MAAM,UAAU,GAAI,OAAO,CAAC,GAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACrD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,GAAG,CAAA;QACzC,OAAO,GAAG,CAAA,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC,EAAE,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,MAAM,EAAE,CAAC,OAAO,CACd,GAAG,CAAA,UAAU,UAAU,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAA,IAAI,CAAC,SAAS,YAAY,aAAa,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC,EAAE,CAC9O,CAAA;AACH,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { SQL, Column, DB } from './types.js';
2
+ import type { SQLWrapper } from '../query/sql/sql.js';
3
+ type IntervalUnit = 'microseconds' | 'milliseconds' | 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years';
4
+ /** `now() - interval '5 minutes'`. Composes `now`, `subtract`, and `interval`. */
5
+ export declare function ago(amount: number, unit: IntervalUnit): SQL<Date>;
6
+ /** Shorthand for `cast(expr, 'uuid')`. */
7
+ export declare function castUuid(expression: SQL | Column | SQLWrapper): SQL<string>;
8
+ /** Shorthand for `cast(expr, 'jsonb')`. */
9
+ export declare function castJsonb(expression: SQL | Column | SQLWrapper): SQL;
10
+ /** Shorthand for `cast(expr, 'timestamptz')`. */
11
+ export declare function castTimestamp(expression: SQL | Column | SQLWrapper): SQL<Date>;
12
+ /** Shorthand for `cast(expr, 'boolean')`. */
13
+ export declare function castBoolean(expression: SQL | Column | SQLWrapper): SQL<boolean>;
14
+ /** Shorthand for `cast(expr, 'numeric')`. */
15
+ export declare function castNumeric(expression: SQL | Column | SQLWrapper): SQL<number>;
16
+ /** Shorthand for `cast(expr, 'integer')`. */
17
+ export declare function castInteger(expression: SQL | Column | SQLWrapper): SQL<number>;
18
+ /** Shorthand for `cast(expr, 'text')`. */
19
+ export declare function castText(expression: SQL | Column | SQLWrapper): SQL<string>;
20
+ /** `COALESCE((SELECT MAX(column) FROM table WHERE condition), 0) + 1`. Composes scalar, coalesce, max, increment. */
21
+ export declare function nextSequence(db: DB, column: Column, where?: SQL): SQL<number>;
22
+ export {};
23
+ //# sourceMappingURL=composed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composed.d.ts","sourceRoot":"","sources":["../../../src/data/db/composed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,YAAY,CAAA;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAErD,KAAK,YAAY,GAAG,cAAc,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE7H,kFAAkF;AAClF,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,CAEjE;AAED,0CAA0C;AAC1C,wBAAgB,QAAQ,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,GAAG,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAE3E;AAED,2CAA2C;AAC3C,wBAAgB,SAAS,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,GAAG,UAAU,GAAG,GAAG,CAEpE;AAED,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,GAAG,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,CAE9E;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,GAAG,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,CAE/E;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,GAAG,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAE9E;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,GAAG,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAE9E;AAED,0CAA0C;AAC1C,wBAAgB,QAAQ,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,GAAG,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAE3E;AAED,qHAAqH;AACrH,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAK7E"}
@@ -0,0 +1,42 @@
1
+ import { now, subtract, interval, cast, scalar, coalesce, increment } from './expressions.js';
2
+ import { max } from './generated/drizzle-orm/aggregate.js';
3
+ /** `now() - interval '5 minutes'`. Composes `now`, `subtract`, and `interval`. */
4
+ export function ago(amount, unit) {
5
+ return subtract(now(), interval(amount, unit));
6
+ }
7
+ /** Shorthand for `cast(expr, 'uuid')`. */
8
+ export function castUuid(expression) {
9
+ return cast(expression, 'uuid');
10
+ }
11
+ /** Shorthand for `cast(expr, 'jsonb')`. */
12
+ export function castJsonb(expression) {
13
+ return cast(expression, 'jsonb');
14
+ }
15
+ /** Shorthand for `cast(expr, 'timestamptz')`. */
16
+ export function castTimestamp(expression) {
17
+ return cast(expression, 'timestamptz');
18
+ }
19
+ /** Shorthand for `cast(expr, 'boolean')`. */
20
+ export function castBoolean(expression) {
21
+ return cast(expression, 'boolean');
22
+ }
23
+ /** Shorthand for `cast(expr, 'numeric')`. */
24
+ export function castNumeric(expression) {
25
+ return cast(expression, 'numeric');
26
+ }
27
+ /** Shorthand for `cast(expr, 'integer')`. */
28
+ export function castInteger(expression) {
29
+ return cast(expression, 'integer');
30
+ }
31
+ /** Shorthand for `cast(expr, 'text')`. */
32
+ export function castText(expression) {
33
+ return cast(expression, 'text');
34
+ }
35
+ /** `COALESCE((SELECT MAX(column) FROM table WHERE condition), 0) + 1`. Composes scalar, coalesce, max, increment. */
36
+ export function nextSequence(db, column, where) {
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- drizzle's select/from generics require concrete schema types
38
+ const base = db.select({ v: max(column) }).from(column.table);
39
+ const subquery = where !== undefined ? base.where(where) : base;
40
+ return increment(coalesce(scalar(subquery), 0), 1);
41
+ }
42
+ //# sourceMappingURL=composed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composed.js","sourceRoot":"","sources":["../../../src/data/db/composed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAE,GAAG,EAAE,MAAM,sCAAsC,CAAA;AAK1D,kFAAkF;AAClF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,IAAkB;IACpD,OAAO,QAAQ,CAAO,GAAG,EAAE,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;AACtD,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,QAAQ,CAAC,UAAqC;IAC5D,OAAO,IAAI,CAAS,UAAU,EAAE,MAAM,CAAC,CAAA;AACzC,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,SAAS,CAAC,UAAqC;IAC7D,OAAO,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AAClC,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,aAAa,CAAC,UAAqC;IACjE,OAAO,IAAI,CAAO,UAAU,EAAE,aAAa,CAAC,CAAA;AAC9C,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,WAAW,CAAC,UAAqC;IAC/D,OAAO,IAAI,CAAU,UAAU,EAAE,SAAS,CAAC,CAAA;AAC7C,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,WAAW,CAAC,UAAqC;IAC/D,OAAO,IAAI,CAAS,UAAU,EAAE,SAAS,CAAC,CAAA;AAC5C,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,WAAW,CAAC,UAAqC;IAC/D,OAAO,IAAI,CAAS,UAAU,EAAE,SAAS,CAAC,CAAA;AAC5C,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,QAAQ,CAAC,UAAqC;IAC5D,OAAO,IAAI,CAAS,UAAU,EAAE,MAAM,CAAC,CAAA;AACzC,CAAC;AAED,qHAAqH;AACrH,MAAM,UAAU,YAAY,CAAC,EAAM,EAAE,MAAc,EAAE,KAAW;IAC9D,8HAA8H;IAC9H,MAAM,IAAI,GAAI,EAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACtE,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC/D,OAAO,SAAS,CAAC,QAAQ,CAAS,MAAM,CAAS,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACpE,CAAC"}
@@ -4,10 +4,42 @@ import type { SQLWrapper } from '../query/sql/sql.js';
4
4
  export declare function increment(column: Column | SQL, amount: number): SQL<number>;
5
5
  /** Returns `column - amount`. Convenience wrapper — equivalent to `increment(column, -amount)`. */
6
6
  export declare function decrement(column: Column | SQL, amount: number): SQL<number>;
7
+ /** Returns `left + right` for two SQL expressions. For column + literal number, use `increment`. */
8
+ export declare function add<T = unknown>(left: Column | SQL, right: Column | SQL): SQL<T>;
9
+ /** Returns `left - right` for two SQL expressions. For column - literal number, use `decrement`. */
10
+ export declare function subtract<T = unknown>(left: Column | SQL, right: Column | SQL): SQL<T>;
7
11
  /** Wraps an expression with COALESCE — returns `defaultValue` when the expression is NULL. */
8
12
  export declare function coalesce<T>(expression: SQL | Column, defaultValue: T): SQL<T>;
9
13
  /** Returns a SQL expression for PostgreSQL `now()` — the current transaction timestamp. */
10
14
  export declare function now(): SQL<Date>;
11
15
  /** Wraps a select query as a scalar subquery expression, usable in `.values()` and `.set()`. */
12
16
  export declare function scalar<T>(subquery: SQLWrapper): SQL<T>;
17
+ type IntervalUnit = 'microseconds' | 'milliseconds' | 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years';
18
+ /** PostgreSQL type cast: `expression::pgType`. */
19
+ export declare function cast<T = unknown>(expression: SQL | Column | SQLWrapper, pgType: string): SQL<T>;
20
+ /** PostgreSQL interval literal: `interval '5 minutes'`. */
21
+ export declare function interval(amount: number, unit: IntervalUnit): SQL;
22
+ /** PostgreSQL `date_trunc('unit', column)` — truncates a timestamp to the given precision. */
23
+ export declare function dateTrunc(unit: 'microseconds' | 'milliseconds' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year' | 'decade' | 'century' | 'millennium', column: Column | SQL): SQL<Date>;
24
+ /** PostgreSQL `ROW_NUMBER()` window function. Use with `over()` to apply a window specification. */
25
+ export declare function rowNumber(): SQL<number>;
26
+ /** PostgreSQL `RANK()` window function. Use with `over()` to apply a window specification. */
27
+ export declare function rank(): SQL<number>;
28
+ /** PostgreSQL `DENSE_RANK()` window function. Use with `over()` to apply a window specification. */
29
+ export declare function denseRank(): SQL<number>;
30
+ export interface WindowSpec {
31
+ readonly partitionBy?: Column | SQL | ReadonlyArray<Column | SQL>;
32
+ readonly orderBy?: SQL | ReadonlyArray<SQL>;
33
+ }
34
+ /** Applies a window specification to a window function or aggregate: `fn OVER (PARTITION BY ... ORDER BY ...)`. */
35
+ export declare function over<T>(fn: SQL<T>, spec: WindowSpec): SQL<T>;
36
+ /** PostgreSQL quoted identifier: `"name"`. Promotes `sql.identifier` to a base primitive. */
37
+ export declare function identifier(name: string): SQL;
38
+ /** PostgreSQL `WITH RECURSIVE alias AS (seed UNION ALL step) finalQuery`. If `finalQuery` is omitted, defaults to `SELECT * FROM alias`. */
39
+ export declare function withRecursive(alias: string, seed: SQL, step: SQL, finalQuery?: SQL): SQL;
40
+ /** PostgreSQL `pg_current_wal_lsn()` — returns the current WAL write position on the primary. Internal primitive for replica-aware job execution. */
41
+ export declare function walCurrentLsn(): SQL<string>;
42
+ /** PostgreSQL `pg_last_wal_replay_lsn()` — returns the last replayed WAL position on a replica. Returns NULL on the primary. Internal primitive for replica-aware job execution. */
43
+ export declare function walReplayLsn(): SQL<string>;
44
+ export {};
13
45
  //# sourceMappingURL=expressions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../../src/data/db/expressions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAErD,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAE3E;AAED,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAE3E;AAED,8FAA8F;AAC9F,wBAAgB,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,GAAG,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAE7E;AAED,2FAA2F;AAC3F,wBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAE/B;AAED,gGAAgG;AAChG,wBAAgB,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAEtD"}
1
+ {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../../src/data/db/expressions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAErD,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAE3E;AAED,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAE3E;AAED,oGAAoG;AACpG,wBAAgB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAEhF;AAED,oGAAoG;AACpG,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAErF;AAED,8FAA8F;AAC9F,wBAAgB,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,GAAG,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAE7E;AAED,2FAA2F;AAC3F,wBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAE/B;AAED,gGAAgG;AAChG,wBAAgB,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAEtD;AAED,KAAK,YAAY,GAAG,cAAc,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE7H,kDAAkD;AAClD,wBAAgB,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,MAAM,GAAG,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAE/F;AAED,2DAA2D;AAC3D,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,GAAG,CAEhE;AAED,8FAA8F;AAC9F,wBAAgB,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAErN;AAED,oGAAoG;AACpG,wBAAgB,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,CAEvC;AAED,8FAA8F;AAC9F,wBAAgB,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAElC;AAED,oGAAoG;AACpG,wBAAgB,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,CAEvC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,aAAa,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;CAC5C;AAED,mHAAmH;AACnH,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAY5D;AAED,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAE5C;AAED,4IAA4I;AAC5I,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,CAMxF;AAED,qJAAqJ;AACrJ,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,CAAC,CAE3C;AAED,oLAAoL;AACpL,wBAAgB,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC,CAE1C"}
@@ -7,6 +7,14 @@ export function increment(column, amount) {
7
7
  export function decrement(column, amount) {
8
8
  return sql `${column} - ${amount}`;
9
9
  }
10
+ /** Returns `left + right` for two SQL expressions. For column + literal number, use `increment`. */
11
+ export function add(left, right) {
12
+ return sql `${left} + ${right}`;
13
+ }
14
+ /** Returns `left - right` for two SQL expressions. For column - literal number, use `decrement`. */
15
+ export function subtract(left, right) {
16
+ return sql `${left} - ${right}`;
17
+ }
10
18
  /** Wraps an expression with COALESCE — returns `defaultValue` when the expression is NULL. */
11
19
  export function coalesce(expression, defaultValue) {
12
20
  return sql `coalesce(${expression}, ${defaultValue})`;
@@ -19,4 +27,63 @@ export function now() {
19
27
  export function scalar(subquery) {
20
28
  return sql `(${subquery})`;
21
29
  }
30
+ /** PostgreSQL type cast: `expression::pgType`. */
31
+ export function cast(expression, pgType) {
32
+ return sql `(${expression})::${sql.raw(pgType)}`;
33
+ }
34
+ /** PostgreSQL interval literal: `interval '5 minutes'`. */
35
+ export function interval(amount, unit) {
36
+ return sql `interval '${sql.raw(String(amount))} ${sql.raw(unit)}'`;
37
+ }
38
+ /** PostgreSQL `date_trunc('unit', column)` — truncates a timestamp to the given precision. */
39
+ export function dateTrunc(unit, column) {
40
+ return sql `date_trunc('${sql.raw(unit)}', ${column})`;
41
+ }
42
+ /** PostgreSQL `ROW_NUMBER()` window function. Use with `over()` to apply a window specification. */
43
+ export function rowNumber() {
44
+ return sql `row_number()`;
45
+ }
46
+ /** PostgreSQL `RANK()` window function. Use with `over()` to apply a window specification. */
47
+ export function rank() {
48
+ return sql `rank()`;
49
+ }
50
+ /** PostgreSQL `DENSE_RANK()` window function. Use with `over()` to apply a window specification. */
51
+ export function denseRank() {
52
+ return sql `dense_rank()`;
53
+ }
54
+ /** Applies a window specification to a window function or aggregate: `fn OVER (PARTITION BY ... ORDER BY ...)`. */
55
+ export function over(fn, spec) {
56
+ const parts = [];
57
+ if (spec.partitionBy !== undefined) {
58
+ const cols = Array.isArray(spec.partitionBy) ? spec.partitionBy : [spec.partitionBy];
59
+ parts.push(sql `partition by ${sql.join(cols.map(c => sql `${c}`), sql `, `)}`);
60
+ }
61
+ if (spec.orderBy !== undefined) {
62
+ const cols = Array.isArray(spec.orderBy) ? spec.orderBy : [spec.orderBy];
63
+ parts.push(sql `order by ${sql.join(cols, sql `, `)}`);
64
+ }
65
+ if (parts.length === 0)
66
+ return sql `${fn} over ()`;
67
+ return sql `${fn} over (${sql.join(parts, sql ` `)})`;
68
+ }
69
+ /** PostgreSQL quoted identifier: `"name"`. Promotes `sql.identifier` to a base primitive. */
70
+ export function identifier(name) {
71
+ return sql `${sql.identifier(name)}`;
72
+ }
73
+ /** PostgreSQL `WITH RECURSIVE alias AS (seed UNION ALL step) finalQuery`. If `finalQuery` is omitted, defaults to `SELECT * FROM alias`. */
74
+ export function withRecursive(alias, seed, step, finalQuery) {
75
+ const cte = sql `WITH RECURSIVE ${sql.identifier(alias)} AS (${seed} UNION ALL ${step})`;
76
+ if (finalQuery !== undefined) {
77
+ return sql `${cte} ${finalQuery}`;
78
+ }
79
+ return sql `${cte} SELECT * FROM ${sql.identifier(alias)}`;
80
+ }
81
+ /** PostgreSQL `pg_current_wal_lsn()` — returns the current WAL write position on the primary. Internal primitive for replica-aware job execution. */
82
+ export function walCurrentLsn() {
83
+ return sql `pg_current_wal_lsn()::text`;
84
+ }
85
+ /** PostgreSQL `pg_last_wal_replay_lsn()` — returns the last replayed WAL position on a replica. Returns NULL on the primary. Internal primitive for replica-aware job execution. */
86
+ export function walReplayLsn() {
87
+ return sql `pg_last_wal_replay_lsn()::text`;
88
+ }
22
89
  //# sourceMappingURL=expressions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../../src/data/db/expressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAI9B,uEAAuE;AACvE,MAAM,UAAU,SAAS,CAAC,MAAoB,EAAE,MAAc;IAC5D,OAAO,GAAG,CAAQ,GAAG,MAAM,MAAM,MAAM,EAAE,CAAA;AAC3C,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,SAAS,CAAC,MAAoB,EAAE,MAAc;IAC5D,OAAO,GAAG,CAAQ,GAAG,MAAM,MAAM,MAAM,EAAE,CAAA;AAC3C,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,QAAQ,CAAI,UAAwB,EAAE,YAAe;IACnE,OAAO,GAAG,CAAG,YAAY,UAAU,KAAK,YAAY,GAAG,CAAA;AACzD,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,GAAG;IACjB,OAAO,GAAG,CAAM,OAAO,CAAA;AACzB,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,MAAM,CAAI,QAAoB;IAC5C,OAAO,GAAG,CAAG,IAAI,QAAQ,GAAG,CAAA;AAC9B,CAAC"}
1
+ {"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../../src/data/db/expressions.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,33 @@
1
1
  import * as operators from './generated/drizzle-orm/operator.js';
2
2
  import * as aggregates from './generated/drizzle-orm/aggregate.js';
3
- import { increment, decrement, coalesce, now, scalar } from './expressions.js';
3
+ import { increment, decrement, add, subtract, coalesce, now, scalar, cast, interval, dateTrunc, rowNumber, rank, denseRank, over, identifier, withRecursive } from './expressions.js';
4
+ import { ago, castUuid, castJsonb, castTimestamp, castBoolean, castNumeric, castInteger, castText, nextSequence } from './composed.js';
4
5
  export declare const filter: {
5
6
  readonly increment: typeof increment;
6
7
  readonly decrement: typeof decrement;
8
+ readonly add: typeof add;
9
+ readonly subtract: typeof subtract;
7
10
  readonly coalesce: typeof coalesce;
8
11
  readonly now: typeof now;
9
12
  readonly scalar: typeof scalar;
13
+ readonly cast: typeof cast;
14
+ readonly interval: typeof interval;
15
+ readonly dateTrunc: typeof dateTrunc;
16
+ readonly rowNumber: typeof rowNumber;
17
+ readonly rank: typeof rank;
18
+ readonly denseRank: typeof denseRank;
19
+ readonly over: typeof over;
20
+ readonly identifier: typeof identifier;
21
+ readonly withRecursive: typeof withRecursive;
22
+ readonly ago: typeof ago;
23
+ readonly castUuid: typeof castUuid;
24
+ readonly castJsonb: typeof castJsonb;
25
+ readonly castTimestamp: typeof castTimestamp;
26
+ readonly castBoolean: typeof castBoolean;
27
+ readonly castNumeric: typeof castNumeric;
28
+ readonly castInteger: typeof castInteger;
29
+ readonly castText: typeof castText;
30
+ readonly nextSequence: typeof nextSequence;
10
31
  readonly except: import("./generated/pg-core/type.js").PgCreateSetOperatorFn;
11
32
  readonly exceptAll: import("./generated/pg-core/type.js").PgCreateSetOperatorFn;
12
33
  readonly intersect: import("./generated/pg-core/type.js").PgCreateSetOperatorFn;
@@ -1 +1 @@
1
- {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/data/db/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,qCAAqC,CAAA;AAChE,OAAO,KAAK,UAAU,MAAM,sCAAsC,CAAA;AAElE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE9E,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAST,CAAA"}
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/data/db/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,qCAAqC,CAAA;AAChE,OAAO,KAAK,UAAU,MAAM,sCAAsC,CAAA;AAElE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrL,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEtI,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BT,CAAA"}
@@ -1,15 +1,36 @@
1
1
  import * as operators from './generated/drizzle-orm/operator.js';
2
2
  import * as aggregates from './generated/drizzle-orm/aggregate.js';
3
3
  import * as setOps from './generated/pg-core/set-operation.js';
4
- import { increment, decrement, coalesce, now, scalar } from './expressions.js';
4
+ import { increment, decrement, add, subtract, coalesce, now, scalar, cast, interval, dateTrunc, rowNumber, rank, denseRank, over, identifier, withRecursive } from './expressions.js';
5
+ import { ago, castUuid, castJsonb, castTimestamp, castBoolean, castNumeric, castInteger, castText, nextSequence } from './composed.js';
5
6
  export const filter = {
6
7
  ...operators,
7
8
  ...aggregates,
8
9
  ...setOps,
9
10
  increment,
10
11
  decrement,
12
+ add,
13
+ subtract,
11
14
  coalesce,
12
15
  now,
13
16
  scalar,
17
+ cast,
18
+ interval,
19
+ dateTrunc,
20
+ rowNumber,
21
+ rank,
22
+ denseRank,
23
+ over,
24
+ identifier,
25
+ withRecursive,
26
+ ago,
27
+ castUuid,
28
+ castJsonb,
29
+ castTimestamp,
30
+ castBoolean,
31
+ castNumeric,
32
+ castInteger,
33
+ castText,
34
+ nextSequence,
14
35
  };
15
36
  //# sourceMappingURL=filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/data/db/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,qCAAqC,CAAA;AAChE,OAAO,KAAK,UAAU,MAAM,sCAAsC,CAAA;AAClE,OAAO,KAAK,MAAM,MAAM,sCAAsC,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE9E,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,GAAG,SAAS;IACZ,GAAG,UAAU;IACb,GAAG,MAAM;IACT,SAAS;IACT,SAAS;IACT,QAAQ;IACR,GAAG;IACH,MAAM;CACE,CAAA"}
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/data/db/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,qCAAqC,CAAA;AAChE,OAAO,KAAK,UAAU,MAAM,sCAAsC,CAAA;AAClE,OAAO,KAAK,MAAM,MAAM,sCAAsC,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrL,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEtI,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,GAAG,SAAS;IACZ,GAAG,UAAU;IACb,GAAG,MAAM;IACT,SAAS;IACT,SAAS;IACT,GAAG;IACH,QAAQ;IACR,QAAQ;IACR,GAAG;IACH,MAAM;IACN,IAAI;IACJ,QAAQ;IACR,SAAS;IACT,SAAS;IACT,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,UAAU;IACV,aAAa;IACb,GAAG;IACH,QAAQ;IACR,SAAS;IACT,aAAa;IACb,WAAW;IACX,WAAW;IACX,WAAW;IACX,QAAQ;IACR,YAAY;CACJ,CAAA"}