@adonis-agora/durable 0.59.0 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/assets/spa/assets/index-70hGzOnT.css +1 -0
  3. package/dist/assets/spa/assets/index-BI1EANJO.js +16 -0
  4. package/dist/assets/spa/assets/index-BI1EANJO.js.map +1 -0
  5. package/dist/assets/spa/index.html +2 -2
  6. package/dist/providers/durable_provider.d.ts.map +1 -1
  7. package/dist/providers/durable_provider.js +3 -0
  8. package/dist/providers/durable_provider.js.map +1 -1
  9. package/dist/src/codec-state-store.d.ts +10 -1
  10. package/dist/src/codec-state-store.d.ts.map +1 -1
  11. package/dist/src/codec-state-store.js +25 -0
  12. package/dist/src/codec-state-store.js.map +1 -1
  13. package/dist/src/dashboard/index.d.ts +1 -1
  14. package/dist/src/dashboard/index.js +1 -1
  15. package/dist/src/define_config.d.ts +13 -0
  16. package/dist/src/define_config.d.ts.map +1 -1
  17. package/dist/src/define_config.js.map +1 -1
  18. package/dist/src/engine.d.ts +75 -1
  19. package/dist/src/engine.d.ts.map +1 -1
  20. package/dist/src/engine.js +510 -23
  21. package/dist/src/engine.js.map +1 -1
  22. package/dist/src/errors.d.ts.map +1 -1
  23. package/dist/src/errors.js +4 -0
  24. package/dist/src/errors.js.map +1 -1
  25. package/dist/src/index.d.ts +1 -1
  26. package/dist/src/index.js +1 -1
  27. package/dist/src/interfaces.d.ts +94 -1
  28. package/dist/src/interfaces.d.ts.map +1 -1
  29. package/dist/src/interfaces.js +11 -0
  30. package/dist/src/interfaces.js.map +1 -1
  31. package/dist/src/sticky-continuation.d.ts +141 -0
  32. package/dist/src/sticky-continuation.d.ts.map +1 -0
  33. package/dist/src/sticky-continuation.js +231 -0
  34. package/dist/src/sticky-continuation.js.map +1 -0
  35. package/dist/src/stores/factory.d.ts +6 -0
  36. package/dist/src/stores/factory.d.ts.map +1 -1
  37. package/dist/src/stores/factory.js +3 -0
  38. package/dist/src/stores/factory.js.map +1 -1
  39. package/dist/src/stores/lucid-pg-hot-path.d.ts +30 -0
  40. package/dist/src/stores/lucid-pg-hot-path.d.ts.map +1 -0
  41. package/dist/src/stores/lucid-pg-hot-path.js +67 -0
  42. package/dist/src/stores/lucid-pg-hot-path.js.map +1 -0
  43. package/dist/src/stores/lucid.d.ts +30 -1
  44. package/dist/src/stores/lucid.d.ts.map +1 -1
  45. package/dist/src/stores/lucid.js +456 -17
  46. package/dist/src/stores/lucid.js.map +1 -1
  47. package/dist/src/testing/in-memory-state-store.d.ts +12 -1
  48. package/dist/src/testing/in-memory-state-store.d.ts.map +1 -1
  49. package/dist/src/testing/in-memory-state-store.js +101 -1
  50. package/dist/src/testing/in-memory-state-store.js.map +1 -1
  51. package/dist/src/testing-kit/state-store-conformance.d.ts.map +1 -1
  52. package/dist/src/testing-kit/state-store-conformance.js +199 -0
  53. package/dist/src/testing-kit/state-store-conformance.js.map +1 -1
  54. package/dist/src/transport-pool.d.ts +10 -0
  55. package/dist/src/transport-pool.d.ts.map +1 -1
  56. package/dist/src/transport-pool.js +23 -2
  57. package/dist/src/transport-pool.js.map +1 -1
  58. package/dist/src/transports/bullmq/bullmq-transport.d.ts +41 -1
  59. package/dist/src/transports/bullmq/bullmq-transport.d.ts.map +1 -1
  60. package/dist/src/transports/bullmq/bullmq-transport.js +283 -5
  61. package/dist/src/transports/bullmq/bullmq-transport.js.map +1 -1
  62. package/dist/src/transports/bullmq/deps.d.ts +12 -1
  63. package/dist/src/transports/bullmq/deps.d.ts.map +1 -1
  64. package/dist/src/transports/bullmq/deps.js.map +1 -1
  65. package/dist/src/transports/bullmq/naming.d.ts +10 -0
  66. package/dist/src/transports/bullmq/naming.d.ts.map +1 -1
  67. package/dist/src/transports/bullmq/naming.js +16 -0
  68. package/dist/src/transports/bullmq/naming.js.map +1 -1
  69. package/dist/src/transports/db.d.ts +3 -1
  70. package/dist/src/transports/db.d.ts.map +1 -1
  71. package/dist/src/transports/db.js +4 -4
  72. package/dist/src/transports/db.js.map +1 -1
  73. package/dist/src/transports/queue.d.ts +3 -1
  74. package/dist/src/transports/queue.d.ts.map +1 -1
  75. package/dist/src/transports/queue.js +2 -2
  76. package/dist/src/transports/queue.js.map +1 -1
  77. package/dist/src/transports/worker-keys.d.ts +2 -1
  78. package/dist/src/transports/worker-keys.d.ts.map +1 -1
  79. package/dist/src/transports/worker-keys.js +3 -2
  80. package/dist/src/transports/worker-keys.js.map +1 -1
  81. package/dist/src/workflow-ctx.d.ts +7 -0
  82. package/dist/src/workflow-ctx.d.ts.map +1 -1
  83. package/dist/src/workflow-ctx.js +28 -1
  84. package/dist/src/workflow-ctx.js.map +1 -1
  85. package/package.json +3 -3
  86. package/dist/assets/spa/assets/index-Co0ef3-q.css +0 -1
  87. package/dist/assets/spa/assets/index-DmgfShPp.js +0 -16
  88. package/dist/assets/spa/assets/index-DmgfShPp.js.map +0 -1
@@ -0,0 +1,231 @@
1
+ import { WorkflowSuspended } from './errors.js';
2
+ export class StickyContinuation {
3
+ runId;
4
+ fn;
5
+ workflowVersion;
6
+ compensations;
7
+ replay;
8
+ onPoisoned;
9
+ /** The body's settled outcome, once it has one. */
10
+ outcome;
11
+ /** Primitives started by the body and not yet settled or parked. */
12
+ active = 0;
13
+ /** Bumped on every change, so a quiescence check can tell nothing happened in between. */
14
+ version = 0;
15
+ checkScheduled = false;
16
+ waiter;
17
+ parked = new Map();
18
+ /** A turn currently owns the body (holds the run's lease). */
19
+ attached = true;
20
+ /** The body called a primitive while detached, or one suspended the classic way: never reuse it. */
21
+ unusable = false;
22
+ /** The run row's `updatedAt` (epoch ms) this process wrote when the body last parked. */
23
+ stamp;
24
+ lastUsed = Date.now();
25
+ /**
26
+ * Parked steps' `completed` rows, as the instance that settled them read them back: the next turn
27
+ * takes them instead of reading them again. A completed row never changes, so the hint can only be
28
+ * missing, never stale.
29
+ */
30
+ hints = new Map();
31
+ constructor(runId,
32
+ /** Identity of the registered body, so a re-registration is never resumed with an old one. */
33
+ fn, workflowVersion, compensations, replay, onPoisoned) {
34
+ this.runId = runId;
35
+ this.fn = fn;
36
+ this.workflowVersion = workflowVersion;
37
+ this.compensations = compensations;
38
+ this.replay = replay;
39
+ this.onPoisoned = onPoisoned;
40
+ }
41
+ /** Remember a parked step's settled row for the next turn (see {@link hints}). */
42
+ hint(cp) {
43
+ if (cp.status === 'completed' && this.parked.has(cp.seq))
44
+ this.hints.set(cp.seq, cp);
45
+ }
46
+ /** Start the body. `run` invokes it (inside the ambient workflow ctx). */
47
+ begin(run) {
48
+ let started;
49
+ try {
50
+ started = run();
51
+ }
52
+ catch (error) {
53
+ started = Promise.reject(error);
54
+ }
55
+ started.then((value) => this.settle({ kind: 'returned', value }), (error) => this.settle({ kind: 'threw', error }));
56
+ }
57
+ settle(outcome) {
58
+ this.outcome = outcome;
59
+ this.changed();
60
+ }
61
+ /**
62
+ * Called by every primitive the body starts. `false` refuses the call: the body is detached (no
63
+ * turn holds the lease), and this continuation is poisoned.
64
+ */
65
+ enter() {
66
+ if (!this.attached) {
67
+ if (!this.unusable) {
68
+ this.unusable = true;
69
+ this.onPoisoned(this);
70
+ }
71
+ return false;
72
+ }
73
+ this.active += 1;
74
+ this.changed();
75
+ return true;
76
+ }
77
+ /** A primitive the body started settled. A classic suspension makes the body single-use. */
78
+ exit(error) {
79
+ this.active -= 1;
80
+ if (error instanceof WorkflowSuspended)
81
+ this.unusable = true;
82
+ this.changed();
83
+ }
84
+ /**
85
+ * Park a dispatched call: it stops counting as active, and its promise settles when a later turn
86
+ * re-evaluates it to an outcome.
87
+ */
88
+ park(seq, wakeAt, reevaluate) {
89
+ return new Promise((resolve, reject) => {
90
+ this.parked.set(seq, { seq, wakeAt, reevaluate, resolve, reject });
91
+ this.active -= 1;
92
+ this.changed();
93
+ });
94
+ }
95
+ /**
96
+ * Re-evaluate every parked call (in position order) with its freshly read checkpoint. A call that
97
+ * has an outcome leaves the parked set and settles; one still waiting stays parked, with its new
98
+ * deadline. Run by a warm turn after it attached.
99
+ */
100
+ async resumeParked(fresh) {
101
+ const calls = [...this.parked.values()].sort((a, b) => a.seq - b.seq);
102
+ for (const call of calls) {
103
+ try {
104
+ const value = await call.reevaluate(fresh.get(call.seq) ?? null);
105
+ this.parked.delete(call.seq);
106
+ this.active += 1; // balanced by the primitive's own exit once it settles
107
+ call.resolve(value);
108
+ }
109
+ catch (error) {
110
+ if (error instanceof WorkflowSuspended) {
111
+ call.wakeAt = error.wakeAt;
112
+ continue;
113
+ }
114
+ this.parked.delete(call.seq);
115
+ this.active += 1;
116
+ call.reject(error);
117
+ }
118
+ }
119
+ this.changed();
120
+ }
121
+ /**
122
+ * Wait for this turn's outcome: the body settled, or it is parked on at least one dispatched call
123
+ * with nothing else in flight. Quiescence is confirmed a macrotask later with nothing changed in
124
+ * between, so microtask continuations of the body (a `Promise.all` starting its next call) run
125
+ * first. Parking detaches the body.
126
+ */
127
+ next() {
128
+ return new Promise((resolve) => {
129
+ this.waiter = resolve;
130
+ this.changed();
131
+ });
132
+ }
133
+ changed() {
134
+ this.version += 1;
135
+ const waiter = this.waiter;
136
+ if (!waiter)
137
+ return;
138
+ if (this.outcome) {
139
+ this.waiter = undefined;
140
+ waiter(this.outcome);
141
+ return;
142
+ }
143
+ if (this.checkScheduled || this.parked.size === 0 || this.active > 0)
144
+ return;
145
+ this.checkScheduled = true;
146
+ const at = this.version;
147
+ setImmediate(() => {
148
+ this.checkScheduled = false;
149
+ if (this.waiter !== waiter)
150
+ return;
151
+ if (this.version !== at) {
152
+ this.changed();
153
+ return;
154
+ }
155
+ if (this.outcome || this.parked.size === 0 || this.active > 0)
156
+ return;
157
+ this.waiter = undefined;
158
+ this.attached = false;
159
+ let wakeAt;
160
+ for (const call of this.parked.values()) {
161
+ if (call.wakeAt !== undefined)
162
+ wakeAt = Math.min(wakeAt ?? call.wakeAt, call.wakeAt);
163
+ }
164
+ waiter({ kind: 'parked', wakeAt, waitSeqs: [...this.parked.keys()] });
165
+ });
166
+ }
167
+ }
168
+ /**
169
+ * The per-process cache of parked continuations, by run id: bounded by count (least recently used
170
+ * out first) and by idle time. Taking an entry removes it, so a continuation is owned by at most one
171
+ * turn at a time.
172
+ */
173
+ export class StickyCache {
174
+ maxEntries;
175
+ maxIdleMs;
176
+ entries = new Map();
177
+ hits = 0;
178
+ misses = 0;
179
+ constructor(maxEntries, maxIdleMs) {
180
+ this.maxEntries = maxEntries;
181
+ this.maxIdleMs = maxIdleMs;
182
+ }
183
+ get enabled() {
184
+ return this.maxEntries > 0;
185
+ }
186
+ get size() {
187
+ return this.entries.size;
188
+ }
189
+ put(c) {
190
+ if (!this.enabled || c.unusable)
191
+ return;
192
+ c.lastUsed = Date.now();
193
+ this.entries.delete(c.runId);
194
+ this.entries.set(c.runId, c);
195
+ this.prune(c.lastUsed);
196
+ }
197
+ take(runId) {
198
+ const c = this.entries.get(runId);
199
+ if (!c)
200
+ return undefined;
201
+ this.entries.delete(runId);
202
+ if (c.unusable || Date.now() - c.lastUsed > this.maxIdleMs)
203
+ return undefined;
204
+ return c;
205
+ }
206
+ /** The parked continuation of `runId`, left in place. */
207
+ peek(runId) {
208
+ return this.entries.get(runId);
209
+ }
210
+ has(runId) {
211
+ return this.entries.has(runId);
212
+ }
213
+ evict(runId) {
214
+ this.entries.delete(runId);
215
+ }
216
+ clear() {
217
+ this.entries.clear();
218
+ }
219
+ prune(now) {
220
+ while (this.entries.size > this.maxEntries) {
221
+ const oldest = this.entries.keys().next().value;
222
+ this.entries.delete(oldest);
223
+ }
224
+ for (const [runId, c] of this.entries) {
225
+ if (now - c.lastUsed <= this.maxIdleMs)
226
+ break;
227
+ this.entries.delete(runId);
228
+ }
229
+ }
230
+ }
231
+ //# sourceMappingURL=sticky-continuation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sticky-continuation.js","sourceRoot":"","sources":["../../src/sticky-continuation.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,12 @@ export interface LucidStoreConfig {
22
22
  * `'utf8mb4_unicode_ci'`) so a JOIN against them doesn't fail with `Illegal mix of collations`.
23
23
  */
24
24
  collation?: string;
25
+ /**
26
+ * Postgres only: send the statements every workflow step runs as named prepared statements,
27
+ * parsed once per connection. Needs a direct connection or a pooler that supports protocol-level
28
+ * prepared statements (PgBouncer in transaction mode before 1.21 does not). Default off.
29
+ */
30
+ preparedStatements?: boolean;
25
31
  }
26
32
  /**
27
33
  * The store factory namespace used in `config/durable.ts`:
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/stores/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE5C;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtE,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,MAAM;IACjB,4EAA4E;IAC5E,KAAK,UAAS,gBAAgB,GAAQ,YAAY;CAUnD,CAAC"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/stores/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE5C;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtE,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,MAAM;IACjB,4EAA4E;IAC5E,KAAK,UAAS,gBAAgB,GAAQ,YAAY;CAanD,CAAC"}
@@ -26,6 +26,9 @@ export const stores = {
26
26
  return new LucidStateStore(db, {
27
27
  ...(config.connection !== undefined ? { connectionName: config.connection } : {}),
28
28
  ...(config.collation !== undefined ? { collation: config.collation } : {}),
29
+ ...(config.preparedStatements !== undefined
30
+ ? { preparedStatements: config.preparedStatements }
31
+ : {}),
29
32
  });
30
33
  };
31
34
  },
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/stores/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AA6B9D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,4EAA4E;IAC5E,KAAK,CAAC,MAAM,GAAqB,EAAE;QACjC,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;YACnB,MAAM,EAAE,GAAG,CAAC,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAa,CAAC;YACzD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YACvD,OAAO,IAAI,eAAe,CAAC,EAAE,EAAE;gBAC7B,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3E,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/stores/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAmC9D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,4EAA4E;IAC5E,KAAK,CAAC,MAAM,GAAqB,EAAE;QACjC,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;YACnB,MAAM,EAAE,GAAG,CAAC,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAa,CAAC;YACzD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YACvD,OAAO,IAAI,eAAe,CAAC,EAAE,EAAE;gBAC7B,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,GAAG,CAAC,MAAM,CAAC,kBAAkB,KAAK,SAAS;oBACzC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE;oBACnD,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { QueryClientContract } from '@adonisjs/lucid/types/database';
2
+ export interface PgHotPathOptions {
3
+ /**
4
+ * Send the hot statements as NAMED prepared statements (parsed once per connection). Saves Postgres
5
+ * a parse per statement, but needs a direct connection or a pooler that supports protocol-level
6
+ * prepared statements (PgBouncer in transaction mode before 1.21 does not). Default off.
7
+ */
8
+ preparedStatements?: boolean | undefined;
9
+ }
10
+ export declare class LucidPgHotPath {
11
+ private readonly knex;
12
+ private readonly prepared;
13
+ private constructor();
14
+ /** The hot path for `client`, or `undefined` when it is not Postgres or is being debugged. */
15
+ static for(client: QueryClientContract, options?: PgHotPathOptions): LucidPgHotPath | undefined;
16
+ /**
17
+ * Run one statement, written with `?` placeholders (the store's texts carry no other `?`);
18
+ * resolves its rows as the driver decoded them, and the affected-row count. The connection comes
19
+ * from the Knex client's own pool: inside a (global) transaction, that is the transaction's.
20
+ */
21
+ run(sql: string, values: unknown[]): Promise<{
22
+ rows: Record<string, unknown>[];
23
+ count: number;
24
+ }>;
25
+ /** {@link run}'s rows. */
26
+ rows(text: string, values: unknown[]): Promise<Record<string, unknown>[]>;
27
+ }
28
+ /** A quoted identifier. */
29
+ export declare const quote: (name: string) => string;
30
+ //# sourceMappingURL=lucid-pg-hot-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lucid-pg-hot-path.d.ts","sourceRoot":"","sources":["../../../src/stores/lucid-pg-hot-path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAsC1E,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC1C;AAYD,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAF3B,OAAO,eAGH;IAEJ,8FAA8F;IAC9F,MAAM,CAAC,GAAG,CACR,MAAM,EAAE,mBAAmB,EAC3B,OAAO,GAAE,gBAAqB,GAC7B,cAAc,GAAG,SAAS,CAK5B;IAED;;;;OAIG;IACG,GAAG,CACP,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,OAAO,EAAE,GAChB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAY7D;IAED,0BAA0B;IACpB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAE9E;CACF;AAiBD,2BAA2B;AAC3B,eAAO,MAAM,KAAK,SAAU,MAAM,KAAG,MAAyC,CAAC"}
@@ -0,0 +1,67 @@
1
+ /** A short stable hash, for statement names. */
2
+ function hash(text) {
3
+ let h = 2166136261;
4
+ for (let i = 0; i < text.length; i += 1) {
5
+ h ^= text.charCodeAt(i);
6
+ h = Math.imul(h, 16777619);
7
+ }
8
+ return (h >>> 0).toString(36);
9
+ }
10
+ export class LucidPgHotPath {
11
+ knex;
12
+ prepared;
13
+ constructor(knex, prepared) {
14
+ this.knex = knex;
15
+ this.prepared = prepared;
16
+ }
17
+ /** The hot path for `client`, or `undefined` when it is not Postgres or is being debugged. */
18
+ static for(client, options = {}) {
19
+ if (client.dialect.name !== 'postgres' || client.debug)
20
+ return undefined;
21
+ const knex = client.getWriteClient();
22
+ if (typeof knex?.client?.acquireConnection !== 'function')
23
+ return undefined;
24
+ return new LucidPgHotPath(knex, options.preparedStatements === true);
25
+ }
26
+ /**
27
+ * Run one statement, written with `?` placeholders (the store's texts carry no other `?`);
28
+ * resolves its rows as the driver decoded them, and the affected-row count. The connection comes
29
+ * from the Knex client's own pool: inside a (global) transaction, that is the transaction's.
30
+ */
31
+ async run(sql, values) {
32
+ const text = numbered(sql);
33
+ this.knex.emit?.('query', { method: 'raw', sql: text, bindings: values });
34
+ const config = { text, values };
35
+ if (this.prepared)
36
+ config.name = `durable_${hash(text)}`;
37
+ const connection = await this.knex.client.acquireConnection();
38
+ try {
39
+ const result = await connection.query(config);
40
+ return { rows: result.rows, count: result.rowCount ?? result.rows.length };
41
+ }
42
+ finally {
43
+ await this.knex.client.releaseConnection(connection);
44
+ }
45
+ }
46
+ /** {@link run}'s rows. */
47
+ async rows(text, values) {
48
+ return (await this.run(text, values)).rows;
49
+ }
50
+ }
51
+ /** Statement texts with `?` placeholders, numbered once (`$1`, `$2`, …). */
52
+ const numberedTexts = new Map();
53
+ function numbered(sql) {
54
+ let text = numberedTexts.get(sql);
55
+ if (text === undefined) {
56
+ let n = 0;
57
+ text = sql.replace(/\?/g, () => {
58
+ n += 1;
59
+ return `$${n}`;
60
+ });
61
+ numberedTexts.set(sql, text);
62
+ }
63
+ return text;
64
+ }
65
+ /** A quoted identifier. */
66
+ export const quote = (name) => `"${name.replace(/"/g, '""')}"`;
67
+ //# sourceMappingURL=lucid-pg-hot-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lucid-pg-hot-path.js","sourceRoot":"","sources":["../../../src/stores/lucid-pg-hot-path.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Database } from '@adonisjs/lucid/database';
2
- import type { BufferedSignalRow, CheckpointQuery, CheckpointStat, ChildWait, RunFacetQuery, RunFacetRow, RunQuery, RunStatus, RunValueAxis, RunValueFacetOptions, RunValueFacetRow, ScheduleQuery, ScheduleRecord, SignalWaiter, StateStore, StepCheckpoint, StepSettlement, WorkflowRun } from '../interfaces.js';
2
+ import type { BufferedSignalRow, CheckpointQuery, CheckpointStat, ChildWait, RunFacetQuery, RunFacetRow, RunQuery, RunStatus, RunValueAxis, RunValueFacetOptions, RunValueFacetRow, ScheduleQuery, ScheduleRecord, SettledStepResult, SignalWaiter, StateStore, StepCheckpoint, StepResultSettlement, StepSettlement, WorkflowRun } from '../interfaces.js';
3
3
  export interface LucidStateStoreOptions {
4
4
  /**
5
5
  * The Lucid connection name to use. Defaults to the connection's primary (the `Database` default).
@@ -20,6 +20,13 @@ export interface LucidStateStoreOptions {
20
20
  * `CreateDurableTablesOptions.collation`). Ignored on other dialects.
21
21
  */
22
22
  collation?: string | undefined;
23
+ /**
24
+ * Postgres: send the statements of a workflow's hot path (the ones every step runs) as NAMED
25
+ * prepared statements, parsed once per connection. Needs a direct connection or a pooler that
26
+ * supports protocol-level prepared statements (PgBouncer in transaction mode before 1.21 does not).
27
+ * Default off. Ignored on other dialects.
28
+ */
29
+ preparedStatements?: boolean | undefined;
23
30
  }
24
31
  /**
25
32
  * A production-grade, persistent `StateStore` backed by AdonisJS **Lucid** (Knex). Runs, checkpoints,
@@ -50,6 +57,12 @@ export declare class LucidStateStore implements StateStore {
50
57
  private fenced;
51
58
  /** The base query client (or a named connection's), used unless an explicit tx client is passed. */
52
59
  private client;
60
+ /**
61
+ * The Postgres hot path (see `lucid-pg-hot-path.ts`): the statements a turn and a step result run
62
+ * on every step, as constant SQL. `undefined` on any other dialect, or with Lucid's `debug` on.
63
+ * Resolved per call, like {@link client}: under a global transaction it is the transaction's.
64
+ */
65
+ private hot;
53
66
  /** Idempotently provision the durable tables (called on boot when `autoSchema` is on). */
54
67
  ensureSchema(): Promise<void>;
55
68
  createRun(run: WorkflowRun): Promise<void>;
@@ -61,6 +74,11 @@ export declare class LucidStateStore implements StateStore {
61
74
  private writeRun;
62
75
  updateRun(runId: string, patch: Partial<WorkflowRun>): Promise<void>;
63
76
  updateRunIf(runId: string, expectedStatuses: RunStatus[], patch: Partial<WorkflowRun>): Promise<boolean>;
77
+ /**
78
+ * The hot path for a run write of `patch`: one that needs no transaction (see {@link writeRun}),
79
+ * on a connection that takes it.
80
+ */
81
+ private hotFor;
64
82
  pullRunWakesIn(runIds: string[], wakeAt: number): Promise<void>;
65
83
  /** Whether the runs table has `awaiting_decision_task_id`, probed once per store and cached. */
66
84
  private decisionMarkerColumn;
@@ -86,6 +104,15 @@ export declare class LucidStateStore implements StateStore {
86
104
  renewCheckpointLease(runId: string, seq: number, expectedWakeAt: number | undefined, wakeAt: number): Promise<boolean>;
87
105
  saveCheckpointsIfPending(checkpoints: StepCheckpoint[]): Promise<boolean[]>;
88
106
  settleCheckpointsIfPending(settlements: StepSettlement[]): Promise<boolean[]>;
107
+ settleResultsIfPending(results: StepResultSettlement[]): Promise<(SettledStepResult | null)[]>;
108
+ /**
109
+ * {@link settleResultsIfPending} on a dialect without `UPDATE … RETURNING` in one statement
110
+ * (MySQL, SQLite): the runs' statuses, the rows, then the settle (one conditional UPDATE for a
111
+ * single result, the batched transaction for several). The same three statements the engine's
112
+ * read-first path costs.
113
+ */
114
+ private settleResultsPlain;
115
+ insertCheckpointIfAbsent(checkpoint: StepCheckpoint): Promise<boolean>;
89
116
  /** Persist the latest worker heartbeat on the step's checkpoint row (see the interface doc).
90
117
  * A targeted two-column UPDATE — never an upsert: a beat racing the checkpoint's own insert (or
91
118
  * outliving a deleted run) matches zero rows and is a silent no-op, by design. */
@@ -100,8 +127,10 @@ export declare class LucidStateStore implements StateStore {
100
127
  listIncompleteRuns(namespace?: string): Promise<WorkflowRun[]>;
101
128
  listOrphanedRuns(nowMs: number, limit: number, namespace?: string, owner?: string): Promise<WorkflowRun[]>;
102
129
  listPendingRuns(limit: number, namespace?: string): Promise<WorkflowRun[]>;
130
+ claimPendingRuns(limit: number, owner: string, leaseUntilMs: number, nowMs: number, namespace?: string): Promise<WorkflowRun[]>;
103
131
  listDueTimers(nowMs: number, namespace?: string, limit?: number): Promise<WorkflowRun[]>;
104
132
  tryLockRun(runId: string, owner: string, leaseUntilMs: number, nowMs: number): Promise<boolean>;
133
+ tryLockRunAndGet(runId: string, owner: string, leaseUntilMs: number, nowMs: number): Promise<WorkflowRun | null>;
105
134
  releaseRunLock(runId: string, owner?: string): Promise<void>;
106
135
  releaseRunLockUnlessWakeRequested(runId: string, owner: string): Promise<boolean>;
107
136
  /** {@link hasWakeMarkerColumn} on the caller's transaction (a single-connection pool has no other). */
@@ -1 +1 @@
1
- {"version":3,"file":"lucid.d.ts","sourceRoot":"","sources":["../../../src/stores/lucid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lucid.d.ts","sourceRoot":"","sources":["../../../src/stores/lucid.ts"],"names":[],"mappings":"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"}