@yieldstar/sqlite-runtime 0.6.0 → 0.7.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.
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  SqliteHeapClient2,
5
5
  SqliteStoreClient2,
6
6
  SqliteRuntime2
7
- } from "./index-h3h7r4b6.js";
7
+ } from "./index-t60e4kvz.js";
8
8
  export {
9
9
  SqliteEffectClient2 as SqliteEffectClient,
10
10
  SqliteExecutionClient2 as SqliteExecutionClient,
package/dist/node.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  SqliteHeapClient2,
5
5
  SqliteStoreClient2,
6
6
  SqliteRuntime2
7
- } from "./index-h3h7r4b6.js";
7
+ } from "./index-t60e4kvz.js";
8
8
  import {
9
9
  createSqliteDriver,
10
10
  wrapSqliteStatement
@@ -1,4 +1,4 @@
1
- import { type ExecutionAcknowledgeResult, type ExecutionAdmissionRequest, type ExecutionAdmissionResult, type ExecutionClient, type ExecutionLease, type ExecutionRecord, type ExecutionStartRequest, type ExecutionStartResult, type ExecutionReleaseResult, type ExecutionRenewResult, type ExecutionWakeResult, type WorkflowRunOutcome } from "@yieldstar/core";
1
+ import { type ExecutionAcknowledgeResult, type ExecutionAdmissionRequest, type ExecutionAdmissionResult, type ExecutionClaimFilter, type ExecutionClient, type ExecutionLease, type ExecutionRecord, type ExecutionStartRequest, type ExecutionStartResult, type ExecutionReleaseResult, type ExecutionRenewResult, type ExecutionWakeResult, type WorkflowRunOutcome } from "@yieldstar/core";
2
2
  import type { SqliteDriver } from "./sqlite-driver";
3
3
  export type SqliteExecutionClientOptions = {
4
4
  /** Reads the current time. Defaults to `Date.now`. */
@@ -26,6 +26,7 @@ export declare class SqliteExecutionClient implements ExecutionClient {
26
26
  claimDue(request: {
27
27
  limit: number;
28
28
  duration: number;
29
+ filter?: ExecutionClaimFilter;
29
30
  }): Promise<ExecutionLease[]>;
30
31
  renew(request: {
31
32
  lease: ExecutionLease;
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-execution.d.ts","sourceRoot":"","sources":["../src/sqlite-execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAeL,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAEzB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,MAAM,MAAM,4BAA4B,GAAG;IACzC,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,eAAe;IAC3D,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,KAAK,CAAe;gBAEhB,EAAE,EAAE,YAAY,EAAE,OAAO,GAAE,4BAAiC;IAQlE,KAAK,CACT,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC;IA0B9B,KAAK,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAiCpE,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAK9D,WAAW,CAAC,OAAO,EAAE;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAa1B,QAAQ,CAAC,OAAO,EAAE;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA2BvB,KAAK,CAAC,OAAO,EAAE;QACnB,KAAK,EAAE,cAAc,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAU3B,OAAO,CAAC,OAAO,EAAE;QACrB,KAAK,EAAE,cAAc,CAAC;KACvB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAM7B,WAAW,CAAC,OAAO,EAAE;QACzB,KAAK,EAAE,cAAc,CAAC;QACtB,OAAO,EAAE,kBAAkB,CAAC;KAC7B,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAUvC;;;OAGG;IACH,OAAO,CAAC,UAAU;IAelB;;;;;OAKG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,MAAqB;CAOrE"}
1
+ {"version":3,"file":"sqlite-execution.d.ts","sourceRoot":"","sources":["../src/sqlite-execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAeL,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAEzB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,MAAM,MAAM,4BAA4B,GAAG;IACzC,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,eAAe;IAC3D,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,KAAK,CAAe;gBAEhB,EAAE,EAAE,YAAY,EAAE,OAAO,GAAE,4BAAiC;IAQlE,KAAK,CACT,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC;IA0B9B,KAAK,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAiCpE,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAK9D,WAAW,CAAC,OAAO,EAAE;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAa1B,QAAQ,CAAC,OAAO,EAAE;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,oBAAoB,CAAC;KAC/B,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA6BvB,KAAK,CAAC,OAAO,EAAE;QACnB,KAAK,EAAE,cAAc,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAU3B,OAAO,CAAC,OAAO,EAAE;QACrB,KAAK,EAAE,cAAc,CAAC;KACvB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAM7B,WAAW,CAAC,OAAO,EAAE;QACzB,KAAK,EAAE,cAAc,CAAC;QACtB,OAAO,EAAE,kBAAkB,CAAC;KAC7B,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAUvC;;;OAGG;IACH,OAAO,CAAC,UAAU;IAelB;;;;;OAKG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,MAAqB;CAOrE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yieldstar/sqlite-runtime",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "license": "MIT",
5
5
  "author": "Daniel Grant",
6
6
  "repository": {
@@ -31,7 +31,7 @@
31
31
  "dependencies": {
32
32
  "pino": "^9.9.0",
33
33
  "uuid": "^11.1.0",
34
- "@yieldstar/core": "0.6.0"
34
+ "@yieldstar/core": "0.7.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/bun": "^1.2.21",
@@ -76,17 +76,28 @@ export class ExecutionsDao {
76
76
 
77
77
  /**
78
78
  * Up to `limit` claimable execution IDs, earliest due first. `now` is a
79
- * millisecond Unix timestamp from the runtime clock.
79
+ * millisecond Unix timestamp from the runtime clock. When `executionIds` is
80
+ * given, only those executions are considered.
80
81
  */
81
- getClaimableIds(now: number, limit: number) {
82
+ getClaimableIds(
83
+ now: number,
84
+ limit: number,
85
+ executionIds?: readonly string[]
86
+ ) {
82
87
  return this.db
83
88
  .query<ExecutionIdRow>(
84
89
  `SELECT execution_id FROM executions
85
90
  WHERE next_claim_at IS NOT NULL AND next_claim_at <= $now
91
+ AND ($executionIds IS NULL
92
+ OR execution_id IN (SELECT value FROM json_each($executionIds)))
86
93
  ORDER BY next_claim_at, execution_id
87
94
  LIMIT $limit`
88
95
  )
89
- .all({ $now: now, $limit: limit })
96
+ .all({
97
+ $now: now,
98
+ $limit: limit,
99
+ $executionIds: executionIds ? JSON.stringify(executionIds) : null,
100
+ })
90
101
  .map((row) => row.execution_id);
91
102
  }
92
103
 
@@ -16,6 +16,7 @@ import {
16
16
  type ExecutionAcknowledgeResult,
17
17
  type ExecutionAdmissionRequest,
18
18
  type ExecutionAdmissionResult,
19
+ type ExecutionClaimFilter,
19
20
  type ExecutionClient,
20
21
  type ExecutionLease,
21
22
  type ExecutionRecord,
@@ -142,8 +143,10 @@ export class SqliteExecutionClient implements ExecutionClient {
142
143
  async claimDue(request: {
143
144
  limit: number;
144
145
  duration: number;
146
+ filter?: ExecutionClaimFilter;
145
147
  }): Promise<ExecutionLease[]> {
146
- if (request.limit <= 0) return [];
148
+ const executionIds = request.filter?.executionIds;
149
+ if (request.limit <= 0 || executionIds?.length === 0) return [];
147
150
  // The IMMEDIATE transaction holds the write lock, so concurrent claims from
148
151
  // any process sharing the file see each other's leases.
149
152
  return runTransaction(this.db, () => {
@@ -152,7 +155,8 @@ export class SqliteExecutionClient implements ExecutionClient {
152
155
 
153
156
  for (const executionId of this.executionsDao.getClaimableIds(
154
157
  now,
155
- request.limit
158
+ request.limit,
159
+ executionIds
156
160
  )) {
157
161
  const state = this.executionsDao.getState(executionId);
158
162
  if (!state || !isExecutionClaimable(state, now)) continue;