@procedures/schedule 0.4.0 → 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/CHANGELOG.md +26 -0
- package/README.md +55 -5
- package/dist/.tsbuildinfo +1 -1
- package/dist/cron.d.ts +36 -6
- package/dist/cron.d.ts.map +1 -1
- package/dist/cron.js +265 -41
- package/dist/cron.js.map +1 -1
- package/dist/errors.d.ts +4 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/module.d.ts +5 -0
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +8 -2
- package/dist/module.js.map +1 -1
- package/dist/procedures/schedule/add.d.ts +5 -2
- package/dist/procedures/schedule/add.d.ts.map +1 -1
- package/dist/procedures/schedule/add.js +15 -10
- package/dist/procedures/schedule/add.js.map +1 -1
- package/dist/procedures/schedule/list.js +1 -1
- package/dist/procedures/schedule/list.js.map +1 -1
- package/dist/procedures/schedule/next.d.ts +1 -1
- package/dist/procedures/schedule/next.d.ts.map +1 -1
- package/dist/procedures/schedule/next.js +2 -2
- package/dist/procedures/schedule/next.js.map +1 -1
- package/dist/programs.d.ts +3 -1
- package/dist/programs.d.ts.map +1 -1
- package/dist/programs.js.map +1 -1
- package/dist/scheduler.d.ts +9 -0
- package/dist/scheduler.d.ts.map +1 -1
- package/dist/scheduler.js +11 -6
- package/dist/scheduler.js.map +1 -1
- package/dist/store.d.ts +50 -5
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +161 -26
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +8 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/cron.ts +277 -48
- package/src/errors.ts +4 -0
- package/src/index.ts +10 -2
- package/src/module.ts +13 -2
- package/src/procedures/schedule/add.ts +15 -10
- package/src/procedures/schedule/list.ts +1 -1
- package/src/procedures/schedule/next.ts +3 -3
- package/src/programs.ts +3 -1
- package/src/scheduler.ts +16 -6
- package/src/store.ts +166 -24
- package/src/types.ts +8 -4
package/dist/store.js
CHANGED
|
@@ -4,13 +4,27 @@
|
|
|
4
4
|
* A host gives one store to the module of the procedures (`createScheduleModule({ store })`) and
|
|
5
5
|
* the same store to its `Scheduler`. `update()` changes one schedule in one step, so the record of
|
|
6
6
|
* a run does not lose a change of `schedule.add` that came at the same time.
|
|
7
|
+
*
|
|
8
|
+
* Two processes can share the file of a `FileScheduleStore`: a lock file next to it keeps their
|
|
9
|
+
* changes apart (see the comment of the class).
|
|
7
10
|
*/
|
|
8
|
-
import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
11
|
+
import { mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
9
12
|
import { dirname } from "node:path";
|
|
10
13
|
import { randomBytes } from "node:crypto";
|
|
14
|
+
import { checkTimeZone } from "./cron.js";
|
|
11
15
|
import { ScheduleError } from "./errors.js";
|
|
12
16
|
const byId = (a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0);
|
|
13
17
|
const isCount = (value) => typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
|
|
18
|
+
/** True for `utc`, `local` and an IANA name that `Intl` knows. */
|
|
19
|
+
function isTimeZone(timeZone) {
|
|
20
|
+
try {
|
|
21
|
+
checkTimeZone(timeZone);
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
14
28
|
/** The schedule of a record that came from a file: its shape is not trusted. */
|
|
15
29
|
export function checkSchedule(value) {
|
|
16
30
|
const record = value;
|
|
@@ -21,8 +35,9 @@ export function checkSchedule(value) {
|
|
|
21
35
|
if (typeof record.cron !== "string" || typeof record.program !== "string" || record.program === "") {
|
|
22
36
|
throw new ScheduleError("BAD_STORE", `The schedule ${record.id} needs a cron expression and a program`);
|
|
23
37
|
}
|
|
24
|
-
if (record.timeZone !== "
|
|
25
|
-
throw new ScheduleError("BAD_STORE", `The schedule ${record.id} needs the time zone utc or
|
|
38
|
+
if (typeof record.timeZone !== "string" || !isTimeZone(record.timeZone)) {
|
|
39
|
+
throw new ScheduleError("BAD_STORE", `The schedule ${record.id} needs the time zone utc, local or an IANA name that Intl knows`);
|
|
40
|
+
}
|
|
26
41
|
if (typeof record.createdAt !== "number" || !Number.isFinite(record.createdAt))
|
|
27
42
|
throw new ScheduleError("BAD_STORE", `The schedule ${record.id} needs createdAt`);
|
|
28
43
|
if (!isCount(record.runs) || !isCount(record.failures) || !isCount(record.skipped))
|
|
@@ -67,19 +82,52 @@ function isContention(error) {
|
|
|
67
82
|
return process.platform === "win32" && (code === "EPERM" || code === "EACCES" || code === "EBUSY");
|
|
68
83
|
}
|
|
69
84
|
const pause = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
85
|
+
/** This function starts `operation` again while Windows holds the file for a moment: at most 20 times. */
|
|
86
|
+
async function retried(operation) {
|
|
87
|
+
for (let attempt = 1;; attempt++) {
|
|
88
|
+
try {
|
|
89
|
+
return await operation();
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
if (attempt >= 20 || !isContention(error))
|
|
93
|
+
throw error;
|
|
94
|
+
await pause(10 * attempt);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/** This function removes a file. A file that does not exist is not an error. */
|
|
99
|
+
const removeFile = (path) => retried(() => rm(path, { force: true }));
|
|
100
|
+
/** The default age of a stale lock file: 30 seconds. */
|
|
101
|
+
export const DEFAULT_LOCK_STALE_MS = 30_000;
|
|
70
102
|
/**
|
|
71
103
|
* A store in one JSON file: `{ "schemaVersion": 1, "schedules": { "<id>": <Schedule> } }`. Each
|
|
72
104
|
* operation reads the file again. A write goes through a temporary file and a rename, so a reader
|
|
73
|
-
*
|
|
74
|
-
*
|
|
105
|
+
* does not see a part of a write. The changes of this process go one at a time.
|
|
106
|
+
*
|
|
107
|
+
* Two processes can share the file. Each change holds a lock file next to it (`lockPath`):
|
|
108
|
+
* - The store makes the lock file with the flag `wx`. Only one process can make it.
|
|
109
|
+
* - Under the lock, the store reads the file again, changes it, writes it, and then removes the lock.
|
|
110
|
+
* - A lock file older than `staleMs` (default 30 seconds) is stale, and the store takes it over.
|
|
111
|
+
* - A store that waits for twice `staleMs` gives up with `LOCKED`.
|
|
112
|
+
* - The store removes only its own lock: the lock file holds a token of the store.
|
|
75
113
|
*/
|
|
76
114
|
export class FileScheduleStore {
|
|
77
115
|
path;
|
|
78
116
|
kind = "file";
|
|
117
|
+
/** The lock file: the path of the store with `.lock`. */
|
|
118
|
+
lockPath;
|
|
119
|
+
staleMs;
|
|
79
120
|
queue = Promise.resolve();
|
|
80
|
-
/**
|
|
81
|
-
|
|
121
|
+
/**
|
|
122
|
+
* @param path - The JSON file. The store makes it, and its folder, at the first write.
|
|
123
|
+
* @param options - The age of a stale lock file.
|
|
124
|
+
*/
|
|
125
|
+
constructor(path, options = {}) {
|
|
82
126
|
this.path = path;
|
|
127
|
+
this.lockPath = `${path}.lock`;
|
|
128
|
+
this.staleMs = options.staleMs ?? DEFAULT_LOCK_STALE_MS;
|
|
129
|
+
if (!(this.staleMs > 0) || !Number.isFinite(this.staleMs))
|
|
130
|
+
throw new TypeError("FileScheduleStore: staleMs must be a number above 0");
|
|
83
131
|
}
|
|
84
132
|
async get(id) {
|
|
85
133
|
return (await this.read()).schedules[id];
|
|
@@ -128,7 +176,7 @@ export class FileScheduleStore {
|
|
|
128
176
|
async read() {
|
|
129
177
|
let text;
|
|
130
178
|
try {
|
|
131
|
-
text = await readFile(this.path, "utf8");
|
|
179
|
+
text = await retried(() => readFile(this.path, "utf8"));
|
|
132
180
|
}
|
|
133
181
|
catch (error) {
|
|
134
182
|
if (error.code === "ENOENT")
|
|
@@ -155,33 +203,120 @@ export class FileScheduleStore {
|
|
|
155
203
|
}
|
|
156
204
|
return { schemaVersion: 1, schedules };
|
|
157
205
|
}
|
|
158
|
-
/**
|
|
206
|
+
/**
|
|
207
|
+
* One change of the file, after the changes before it, under the lock file. The read under the
|
|
208
|
+
* lock gets the changes of the other processes. `edit` gives false for no change.
|
|
209
|
+
*/
|
|
159
210
|
change(edit) {
|
|
160
211
|
const run = this.queue.then(async () => {
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
const temporary = `${this.path}.${randomBytes(6).toString("hex")}.tmp`;
|
|
166
|
-
await writeFile(temporary, JSON.stringify(file, null, 2) + "\n", "utf8");
|
|
167
|
-
for (let attempt = 1;; attempt++) {
|
|
168
|
-
try {
|
|
169
|
-
await rename(temporary, this.path);
|
|
212
|
+
const token = await this.lock();
|
|
213
|
+
try {
|
|
214
|
+
const file = await this.read();
|
|
215
|
+
if (!edit(file))
|
|
170
216
|
return;
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
throw error;
|
|
176
|
-
}
|
|
177
|
-
await pause(10 * attempt);
|
|
178
|
-
}
|
|
217
|
+
await this.write(file);
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
await this.unlock(token);
|
|
179
221
|
}
|
|
180
222
|
});
|
|
181
223
|
// A failed change does not stop the next one
|
|
182
224
|
this.queue = run.catch(() => undefined);
|
|
183
225
|
return run;
|
|
184
226
|
}
|
|
227
|
+
/** This method writes the file through a temporary file and a rename. */
|
|
228
|
+
async write(file) {
|
|
229
|
+
const temporary = `${this.path}.${randomBytes(6).toString("hex")}.tmp`;
|
|
230
|
+
await writeFile(temporary, JSON.stringify(file, null, 2) + "\n", "utf8");
|
|
231
|
+
try {
|
|
232
|
+
await retried(() => rename(temporary, this.path));
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
await rm(temporary, { force: true });
|
|
236
|
+
throw error;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* This method makes the lock file and gives its token. It waits while another store holds the
|
|
241
|
+
* lock, and it takes over a stale lock. After twice `staleMs`, it throws `LOCKED`.
|
|
242
|
+
*/
|
|
243
|
+
async lock() {
|
|
244
|
+
const token = `${process.pid}:${randomBytes(8).toString("hex")}`;
|
|
245
|
+
const deadline = Date.now() + 2 * this.staleMs;
|
|
246
|
+
for (let attempt = 0;; attempt++) {
|
|
247
|
+
try {
|
|
248
|
+
await writeFile(this.lockPath, token, { encoding: "utf8", flag: "wx" });
|
|
249
|
+
return token;
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
const code = error.code;
|
|
253
|
+
if (code === "ENOENT" && attempt === 0) {
|
|
254
|
+
// The folder of the store does not exist yet
|
|
255
|
+
await mkdir(dirname(this.lockPath), { recursive: true });
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
if (code !== "EEXIST" && !isContention(error))
|
|
259
|
+
throw error;
|
|
260
|
+
}
|
|
261
|
+
if (await this.breakStale())
|
|
262
|
+
continue;
|
|
263
|
+
if (Date.now() >= deadline) {
|
|
264
|
+
throw new ScheduleError("LOCKED", `The lock file ${this.lockPath} stays held: another process holds it for more than ${2 * this.staleMs} ms`);
|
|
265
|
+
}
|
|
266
|
+
// A short wait with a random part: two waiting processes do not try again at the same time
|
|
267
|
+
await pause(Math.min(50, 2 + attempt) + Math.random() * 5);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/** This method removes the lock file when it holds the token of this store. A lock that another store took over stays. */
|
|
271
|
+
async unlock(token) {
|
|
272
|
+
let content;
|
|
273
|
+
try {
|
|
274
|
+
content = await retried(() => readFile(this.lockPath, "utf8"));
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
if (content === token)
|
|
280
|
+
await removeFile(this.lockPath);
|
|
281
|
+
}
|
|
282
|
+
/** True when the file exists and its last change is older than `staleMs`. */
|
|
283
|
+
async isStale(path) {
|
|
284
|
+
try {
|
|
285
|
+
return Date.now() - (await stat(path)).mtimeMs > this.staleMs;
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* This method removes a stale lock file, and gives true then. A second lock file (`.lock.break`)
|
|
293
|
+
* lets one store at a time examine and remove a stale lock. A second store thus finds the new
|
|
294
|
+
* lock of the first store, not the stale lock, and does not remove it.
|
|
295
|
+
*/
|
|
296
|
+
async breakStale() {
|
|
297
|
+
if (!(await this.isStale(this.lockPath)))
|
|
298
|
+
return false;
|
|
299
|
+
const breaker = `${this.lockPath}.break`;
|
|
300
|
+
try {
|
|
301
|
+
await writeFile(breaker, String(process.pid), { encoding: "utf8", flag: "wx" });
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
// Another store examines the lock now. The breaker of a process that stopped is stale too.
|
|
305
|
+
if (await this.isStale(breaker))
|
|
306
|
+
await removeFile(breaker).catch(() => undefined);
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
try {
|
|
310
|
+
// The examination again, under the breaker: another store can have taken over the lock
|
|
311
|
+
if (!(await this.isStale(this.lockPath)))
|
|
312
|
+
return false;
|
|
313
|
+
await removeFile(this.lockPath);
|
|
314
|
+
return true;
|
|
315
|
+
}
|
|
316
|
+
finally {
|
|
317
|
+
await removeFile(breaker).catch(() => undefined);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
185
320
|
}
|
|
186
321
|
/** The store of the default module and of a `Scheduler` without a store: in memory, one for the process. */
|
|
187
322
|
export const defaultScheduleStore = new MemoryScheduleStore();
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -5,8 +5,11 @@
|
|
|
5
5
|
* `module.ts`: an exported schema needs a written type (isolatedDeclarations).
|
|
6
6
|
*/
|
|
7
7
|
import type { PermittedEffects } from "@procedures/client";
|
|
8
|
-
/**
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* The time zone of a cron expression: `utc`, `local` (the time zone of the host), or an IANA name
|
|
10
|
+
* that `Intl` knows, for example `Europe/Berlin`.
|
|
11
|
+
*/
|
|
12
|
+
export type ScheduleTimeZone = "utc" | "local" | (string & {});
|
|
10
13
|
/** The last run of a schedule. */
|
|
11
14
|
export interface ScheduleRun {
|
|
12
15
|
/** The wall time of the start, in milliseconds since 1970. */
|
|
@@ -30,6 +33,7 @@ export interface Schedule {
|
|
|
30
33
|
program: string;
|
|
31
34
|
/** The input of the program. */
|
|
32
35
|
input?: unknown;
|
|
36
|
+
/** The time zone of the expression: `utc`, `local` or an IANA name. */
|
|
33
37
|
timeZone: ScheduleTimeZone;
|
|
34
38
|
/** When the schedule was added, in milliseconds since 1970. A schedule starts no run for a time before it. */
|
|
35
39
|
createdAt: number;
|
|
@@ -61,7 +65,7 @@ export interface ScheduleAddInput {
|
|
|
61
65
|
/** The dotted key of the stored program. */
|
|
62
66
|
program: string;
|
|
63
67
|
input?: unknown;
|
|
64
|
-
/** The time zone of the expression
|
|
68
|
+
/** The time zone of the expression: `utc`, `local` or an IANA name such as `Europe/Berlin`. The default is `local`. */
|
|
65
69
|
timeZone?: ScheduleTimeZone | undefined;
|
|
66
70
|
/** True: replace a schedule of the same name. The default is false: a second schedule of a name is an error. */
|
|
67
71
|
replace?: boolean | undefined;
|
|
@@ -90,7 +94,7 @@ export interface ScheduleNextInput {
|
|
|
90
94
|
count?: number | undefined;
|
|
91
95
|
/** The times come after this time: an ISO text. The default is now. */
|
|
92
96
|
after?: string | undefined;
|
|
93
|
-
/** The time zone of the expression
|
|
97
|
+
/** The time zone of the expression: `utc`, `local` or an IANA name such as `Europe/Berlin`. The default is `local`. */
|
|
94
98
|
timeZone?: ScheduleTimeZone | undefined;
|
|
95
99
|
}
|
|
96
100
|
export interface ScheduleNextOutput {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE/D,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,0EAA0E;IAC1E,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACpE;AAED,yFAAyF;AACzF,MAAM,WAAW,QAAQ;IACvB,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uEAAuE;IACvE,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,8GAA8G;IAC9G,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,gBAAgB,CAAA;KAAE,GAAG,SAAS,CAAC;IAC7E,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAClC,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,yGAAyG;IACzG,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gEAAgE;AAChE,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,oHAAoH;IACpH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAMD,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uHAAuH;IACvH,QAAQ,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACxC,gHAAgH;IAChH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,YAAY,CAAC;CACxB;AAMD,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAMD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,uHAAuH;IACvH,QAAQ,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IACjC,mJAAmJ;IACnJ,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package",
|
|
3
3
|
"name": "@procedures/schedule",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.0",
|
|
5
5
|
"description": "A cron for stored programs: schedules as procedures, and a scheduler that a host starts, with an injectable clock and no overlapping runs.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"procedures",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
],
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@mark1russell7/cue": "^1.0.0",
|
|
55
|
-
"@mark1russell7/service": "^0.4.
|
|
55
|
+
"@mark1russell7/service": "^0.4.1",
|
|
56
56
|
"typescript": "^7.0.2",
|
|
57
57
|
"vitest": "^5.0.3"
|
|
58
58
|
},
|
|
@@ -63,8 +63,8 @@
|
|
|
63
63
|
"procedures": "./dist/register.js"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@procedures/client": "0.
|
|
67
|
-
"@procedures/store": "0.
|
|
66
|
+
"@procedures/client": "0.5.0",
|
|
67
|
+
"@procedures/store": "0.5.0",
|
|
68
68
|
"zod": "^4.6.5"
|
|
69
69
|
},
|
|
70
70
|
"publishConfig": {
|