effect-mq 0.4.1 → 0.5.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/README.md +2 -0
- package/dist/Job.d.ts +34 -4
- package/dist/Job.d.ts.map +1 -1
- package/dist/Job.js +9 -1
- package/dist/Job.js.map +1 -1
- package/dist/JobSchedules.d.ts +112 -0
- package/dist/JobSchedules.d.ts.map +1 -0
- package/dist/JobSchedules.js +106 -0
- package/dist/JobSchedules.js.map +1 -0
- package/dist/JobStore.d.ts +8 -0
- package/dist/JobStore.d.ts.map +1 -1
- package/dist/JobStore.js.map +1 -1
- package/dist/MemoryJobStore.d.ts.map +1 -1
- package/dist/MemoryJobStore.js +2 -1
- package/dist/MemoryJobStore.js.map +1 -1
- package/dist/Worker.d.ts +29 -1
- package/dist/Worker.d.ts.map +1 -1
- package/dist/Worker.js +51 -0
- package/dist/Worker.js.map +1 -1
- package/dist/drizzle-postgres/DrizzleJobStore.d.ts.map +1 -1
- package/dist/drizzle-postgres/DrizzleJobStore.js +9 -4
- package/dist/drizzle-postgres/DrizzleJobStore.js.map +1 -1
- package/dist/drizzle-postgres/schema.d.ts +17 -0
- package/dist/drizzle-postgres/schema.d.ts.map +1 -1
- package/dist/drizzle-postgres/schema.js +2 -0
- package/dist/drizzle-postgres/schema.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/redis/RedisJobStore.d.ts.map +1 -1
- package/dist/redis/RedisJobStore.js +2 -1
- package/dist/redis/RedisJobStore.js.map +1 -1
- package/dist/redis/scripts.d.ts +1 -1
- package/dist/redis/scripts.d.ts.map +1 -1
- package/dist/redis/scripts.js +5 -3
- package/dist/redis/scripts.js.map +1 -1
- package/dist/testing/conformance.d.ts.map +1 -1
- package/dist/testing/conformance.js +37 -0
- package/dist/testing/conformance.js.map +1 -1
- package/package.json +2 -1
- package/src/Job.ts +45 -5
- package/src/JobSchedules.ts +223 -0
- package/src/JobStore.ts +8 -0
- package/src/MemoryJobStore.ts +2 -1
- package/src/Worker.ts +92 -0
- package/src/drizzle-postgres/DrizzleJobStore.ts +10 -4
- package/src/drizzle-postgres/schema.ts +2 -0
- package/src/index.ts +8 -0
- package/src/redis/RedisJobStore.ts +2 -0
- package/src/redis/scripts.ts +5 -2
- package/src/testing/conformance.ts +44 -0
|
@@ -805,6 +805,7 @@ export const jobStoreConformance = (
|
|
|
805
805
|
backoff: { _tag: "fixed", delayMs: 1_000 },
|
|
806
806
|
keep: undefined,
|
|
807
807
|
timeoutMs: 5_000,
|
|
808
|
+
group: undefined,
|
|
808
809
|
nextRunAt: 60_000
|
|
809
810
|
}
|
|
810
811
|
yield* store.upsertSchedule(schedule)
|
|
@@ -847,9 +848,49 @@ export const jobStoreConformance = (
|
|
|
847
848
|
backoff: undefined,
|
|
848
849
|
keep: undefined,
|
|
849
850
|
timeoutMs: undefined,
|
|
851
|
+
group: undefined,
|
|
850
852
|
nextRunAt: 60_000
|
|
851
853
|
})
|
|
852
854
|
|
|
855
|
+
it.effect("schedule group labels persist and filter listSchedules", () =>
|
|
856
|
+
withStore((store) =>
|
|
857
|
+
Effect.gen(function*() {
|
|
858
|
+
const base = minutelySchedule()
|
|
859
|
+
yield* store.upsertSchedule({
|
|
860
|
+
...base,
|
|
861
|
+
key: JobStore.ScheduleKey("TestJob/labeled"),
|
|
862
|
+
group: "svc-a"
|
|
863
|
+
})
|
|
864
|
+
yield* store.upsertSchedule({
|
|
865
|
+
...base,
|
|
866
|
+
key: JobStore.ScheduleKey("TestJob/other"),
|
|
867
|
+
group: "svc-b"
|
|
868
|
+
})
|
|
869
|
+
yield* store.upsertSchedule({ ...base, key: JobStore.ScheduleKey("TestJob/plain") })
|
|
870
|
+
|
|
871
|
+
const labeled = yield* store.listSchedules({ group: "svc-a" })
|
|
872
|
+
expect(labeled.map((schedule) => schedule.key)).toEqual(["TestJob/labeled"])
|
|
873
|
+
expect(labeled[0]?.group).toBe("svc-a")
|
|
874
|
+
|
|
875
|
+
const all = yield* store.listSchedules()
|
|
876
|
+
expect(all).toHaveLength(3)
|
|
877
|
+
expect(all.find((schedule) => schedule.key === "TestJob/plain")?.group).toBeUndefined()
|
|
878
|
+
|
|
879
|
+
// Re-upsert relabels; an unchanged cadence still keeps its next
|
|
880
|
+
// occurrence (the reconciler re-registers on every startup).
|
|
881
|
+
yield* store.upsertSchedule({
|
|
882
|
+
...base,
|
|
883
|
+
key: JobStore.ScheduleKey("TestJob/labeled"),
|
|
884
|
+
group: "svc-c",
|
|
885
|
+
nextRunAt: 999_999
|
|
886
|
+
})
|
|
887
|
+
const relabeled = yield* store.listSchedules({ group: "svc-c" })
|
|
888
|
+
expect(relabeled.map((schedule) => schedule.key)).toEqual(["TestJob/labeled"])
|
|
889
|
+
expect(relabeled[0]?.nextRunAt).toBe(60_000)
|
|
890
|
+
expect(yield* store.listSchedules({ group: "svc-a" })).toEqual([])
|
|
891
|
+
})
|
|
892
|
+
))
|
|
893
|
+
|
|
853
894
|
it.effect("tickSchedule fires a slot exactly once and advances atomically", () =>
|
|
854
895
|
withStore((store) =>
|
|
855
896
|
Effect.gen(function*() {
|
|
@@ -1226,6 +1267,7 @@ export const jobStoreConformance = (
|
|
|
1226
1267
|
backoff: undefined,
|
|
1227
1268
|
keep: undefined,
|
|
1228
1269
|
timeoutMs: undefined,
|
|
1270
|
+
group: undefined,
|
|
1229
1271
|
nextRunAt: 60_000
|
|
1230
1272
|
}
|
|
1231
1273
|
yield* store.upsertSchedule(base)
|
|
@@ -1261,6 +1303,7 @@ export const jobStoreConformance = (
|
|
|
1261
1303
|
backoff: undefined,
|
|
1262
1304
|
keep: undefined,
|
|
1263
1305
|
timeoutMs: undefined,
|
|
1306
|
+
group: undefined,
|
|
1264
1307
|
nextRunAt: 90_000
|
|
1265
1308
|
}
|
|
1266
1309
|
const cronSchedule: JobStore.ScheduleRecord = {
|
|
@@ -1352,6 +1395,7 @@ export const jobStoreConformance = (
|
|
|
1352
1395
|
backoff: undefined,
|
|
1353
1396
|
keep: undefined,
|
|
1354
1397
|
timeoutMs: undefined,
|
|
1398
|
+
group: undefined,
|
|
1355
1399
|
nextRunAt: 60_000
|
|
1356
1400
|
}
|
|
1357
1401
|
yield* store.upsertSchedule(schedule)
|