@warlock.js/scheduler 4.0.174 → 4.1.2
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 +60 -1
- package/cjs/index.cjs +1132 -0
- package/cjs/index.cjs.map +1 -0
- package/esm/cron-parser.d.mts +129 -0
- package/esm/cron-parser.d.mts.map +1 -0
- package/esm/cron-parser.mjs +210 -0
- package/esm/cron-parser.mjs.map +1 -0
- package/esm/index.d.mts +5 -0
- package/esm/index.mjs +5 -0
- package/esm/job.d.mts +386 -0
- package/esm/job.d.mts.map +1 -0
- package/esm/job.mjs +633 -0
- package/esm/job.mjs.map +1 -0
- package/esm/scheduler.d.mts +193 -0
- package/esm/scheduler.d.mts.map +1 -0
- package/esm/scheduler.mjs +261 -0
- package/esm/scheduler.mjs.map +1 -0
- package/esm/types.d.mts +70 -0
- package/esm/types.d.mts.map +1 -0
- package/llms-full.txt +888 -0
- package/llms.txt +15 -0
- package/package.json +40 -28
- package/skills/configure-retry-and-overlap/SKILL.md +137 -0
- package/skills/observe-scheduler/SKILL.md +153 -0
- package/skills/overview/SKILL.md +92 -0
- package/skills/pin-schedule-timezone/SKILL.md +114 -0
- package/skills/schedule-fluently/SKILL.md +141 -0
- package/skills/schedule-with-cron/SKILL.md +123 -0
- package/skills/scheduler-basics/SKILL.md +94 -0
- package/cjs/cron-parser.d.ts +0 -98
- package/cjs/cron-parser.d.ts.map +0 -1
- package/cjs/cron-parser.js +0 -193
- package/cjs/cron-parser.js.map +0 -1
- package/cjs/index.d.ts +0 -44
- package/cjs/index.d.ts.map +0 -1
- package/cjs/index.js +0 -1
- package/cjs/index.js.map +0 -1
- package/cjs/job.d.ts +0 -332
- package/cjs/job.d.ts.map +0 -1
- package/cjs/job.js +0 -616
- package/cjs/job.js.map +0 -1
- package/cjs/scheduler.d.ts +0 -182
- package/cjs/scheduler.d.ts.map +0 -1
- package/cjs/scheduler.js +0 -316
- package/cjs/scheduler.js.map +0 -1
- package/cjs/types.d.ts +0 -63
- package/cjs/types.d.ts.map +0 -1
- package/cjs/utils.d.ts +0 -3
- package/cjs/utils.d.ts.map +0 -1
- package/esm/cron-parser.d.ts +0 -98
- package/esm/cron-parser.d.ts.map +0 -1
- package/esm/cron-parser.js +0 -193
- package/esm/cron-parser.js.map +0 -1
- package/esm/index.d.ts +0 -44
- package/esm/index.d.ts.map +0 -1
- package/esm/index.js +0 -1
- package/esm/index.js.map +0 -1
- package/esm/job.d.ts +0 -332
- package/esm/job.d.ts.map +0 -1
- package/esm/job.js +0 -616
- package/esm/job.js.map +0 -1
- package/esm/scheduler.d.ts +0 -182
- package/esm/scheduler.d.ts.map +0 -1
- package/esm/scheduler.js +0 -316
- package/esm/scheduler.js.map +0 -1
- package/esm/types.d.ts +0 -63
- package/esm/types.d.ts.map +0 -1
- package/esm/utils.d.ts +0 -3
- package/esm/utils.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -1 +1,60 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @warlock.js/scheduler
|
|
2
|
+
|
|
3
|
+
In-process recurring job scheduler. Fluent and cron-style scheduling, typed events, per-job timezones, retry with optional exponential backoff, and graceful shutdown.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install @warlock.js/scheduler
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## What it gives you
|
|
10
|
+
|
|
11
|
+
- **Fluent API** — `daily()`, `weekly()`, `monthly()`, `at()`, `on()`, `beginOf()`, `endOf()`, `every(N, unit)`
|
|
12
|
+
- **Cron expressions** — standard 5-field syntax, Vixie OR semantics for day-of-month + day-of-week
|
|
13
|
+
- **Retry** — fixed delay or exponential backoff, per-attempt count surfaced in `JobResult`
|
|
14
|
+
- **Overlap prevention** — skip a tick if the job is already running (defensive for jobs with external invocation paths)
|
|
15
|
+
- **Per-job timezone** — pin a job to an IANA timezone; DST handled automatically
|
|
16
|
+
- **Typed events** — `job:start` / `job:complete` / `job:error` / `job:skip` / `scheduler:tick` / `scheduler:started` / `scheduler:stopped`
|
|
17
|
+
- **Graceful shutdown** — wait for in-flight jobs with a configurable timeout
|
|
18
|
+
- **Drift-compensated ticks** — the cadence between tick *starts* stays close to the configured interval, not `interval + work-time`
|
|
19
|
+
|
|
20
|
+
## 30-line example
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
import { scheduler, job } from "@warlock.js/scheduler";
|
|
24
|
+
|
|
25
|
+
scheduler.on("job:complete", (name, result) => {
|
|
26
|
+
console.log(`${name} finished in ${result.duration}ms`);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
scheduler.on("job:error", (name, error) => {
|
|
30
|
+
console.error(`${name} failed permanently`, error);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
scheduler.addJob(
|
|
34
|
+
job("nightly-cleanup", async () => {
|
|
35
|
+
await db.deleteExpiredTokens();
|
|
36
|
+
})
|
|
37
|
+
.daily()
|
|
38
|
+
.at("03:00")
|
|
39
|
+
.inTimezone("America/New_York")
|
|
40
|
+
.preventOverlap()
|
|
41
|
+
.retry(3, 1000),
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
scheduler.addJob(
|
|
45
|
+
job("heartbeat", pingExternalService).everyMinutes(5),
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
scheduler.start();
|
|
49
|
+
|
|
50
|
+
process.on("SIGTERM", async () => {
|
|
51
|
+
await scheduler.shutdown(30_000);
|
|
52
|
+
process.exit(0);
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Documentation
|
|
57
|
+
|
|
58
|
+
- **User docs** — [`domains/scheduler/docs/`](../../domains/scheduler/docs/) — concepts, recipes, full API reference
|
|
59
|
+
- **Backlog** — [`domains/scheduler/backlog.md`](../../domains/scheduler/backlog.md) — what's planned next (distributed locking, per-job timeout, `runAt`, jitter, cron shortcuts, …)
|
|
60
|
+
- **Assistant skill** — [`skills/SKILL.md`](./skills/SKILL.md) — loaded by Claude Code when it sees imports from this package
|