@monotykamary/localterm-server 1.16.4 → 1.17.1

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 (47) hide show
  1. package/dist/automation-run-tracker.d.ts +9 -0
  2. package/dist/automation-run-tracker.d.ts.map +1 -0
  3. package/dist/automation-run-tracker.js +38 -0
  4. package/dist/automation-run-tracker.js.map +1 -0
  5. package/dist/automation-scheduler.d.ts +20 -0
  6. package/dist/automation-scheduler.d.ts.map +1 -0
  7. package/dist/automation-scheduler.js +62 -0
  8. package/dist/automation-scheduler.js.map +1 -0
  9. package/dist/automation-store.d.ts +16 -0
  10. package/dist/automation-store.d.ts.map +1 -0
  11. package/dist/automation-store.js +102 -0
  12. package/dist/automation-store.js.map +1 -0
  13. package/dist/constants.d.ts +12 -0
  14. package/dist/constants.d.ts.map +1 -1
  15. package/dist/constants.js +17 -0
  16. package/dist/constants.js.map +1 -1
  17. package/dist/cron-expression.d.ts +13 -0
  18. package/dist/cron-expression.d.ts.map +1 -0
  19. package/dist/cron-expression.js +176 -0
  20. package/dist/cron-expression.js.map +1 -0
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +173 -5
  24. package/dist/index.js.map +1 -1
  25. package/dist/protocol.d.ts +5 -3
  26. package/dist/protocol.d.ts.map +1 -1
  27. package/dist/protocol.js +3 -2
  28. package/dist/protocol.js.map +1 -1
  29. package/dist/schemas.d.ts +153 -0
  30. package/dist/schemas.d.ts.map +1 -1
  31. package/dist/schemas.js +65 -1
  32. package/dist/schemas.js.map +1 -1
  33. package/dist/session.d.ts +4 -0
  34. package/dist/session.d.ts.map +1 -1
  35. package/dist/session.js +45 -0
  36. package/dist/session.js.map +1 -1
  37. package/dist/types.d.ts +15 -1
  38. package/dist/types.d.ts.map +1 -1
  39. package/dist/utils/compute-next-automation-run-at.d.ts +3 -0
  40. package/dist/utils/compute-next-automation-run-at.d.ts.map +1 -0
  41. package/dist/utils/compute-next-automation-run-at.js +10 -0
  42. package/dist/utils/compute-next-automation-run-at.js.map +1 -0
  43. package/dist/utils/parse-osc-automation-exit.d.ts +2 -0
  44. package/dist/utils/parse-osc-automation-exit.d.ts.map +1 -0
  45. package/dist/utils/parse-osc-automation-exit.js +37 -0
  46. package/dist/utils/parse-osc-automation-exit.js.map +1 -0
  47. package/package.json +2 -1
@@ -0,0 +1,9 @@
1
+ import type { Automation, PendingAutomationRun } from "./types.js";
2
+ export declare class AutomationRunTracker {
3
+ private readonly pendingRuns;
4
+ create(automation: Automation, now?: number): PendingAutomationRun;
5
+ claim(runId: string): PendingAutomationRun | null;
6
+ sweepExpired(now?: number): PendingAutomationRun[];
7
+ size(): number;
8
+ }
9
+ //# sourceMappingURL=automation-run-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-run-tracker.d.ts","sourceRoot":"","sources":["../src/automation-run-tracker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEnE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2C;IAEvE,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,GAAE,MAAmB,GAAG,oBAAoB;IAY9E,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI;IAOjD,YAAY,CAAC,GAAG,GAAE,MAAmB,GAAG,oBAAoB,EAAE;IAW9D,IAAI,IAAI,MAAM;CAGf"}
@@ -0,0 +1,38 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { AUTOMATION_PENDING_RUN_EXPIRY_MS } from "./constants.js";
3
+ export class AutomationRunTracker {
4
+ pendingRuns = new Map();
5
+ create(automation, now = Date.now()) {
6
+ const run = {
7
+ runId: randomUUID(),
8
+ automationId: automation.id,
9
+ cwd: automation.cwd,
10
+ command: automation.command,
11
+ createdAt: now,
12
+ };
13
+ this.pendingRuns.set(run.runId, run);
14
+ return run;
15
+ }
16
+ claim(runId) {
17
+ const run = this.pendingRuns.get(runId);
18
+ if (!run)
19
+ return null;
20
+ this.pendingRuns.delete(runId);
21
+ return run;
22
+ }
23
+ sweepExpired(now = Date.now()) {
24
+ const expired = [];
25
+ for (const run of this.pendingRuns.values()) {
26
+ if (now - run.createdAt >= AUTOMATION_PENDING_RUN_EXPIRY_MS)
27
+ expired.push(run);
28
+ }
29
+ for (const run of expired) {
30
+ this.pendingRuns.delete(run.runId);
31
+ }
32
+ return expired;
33
+ }
34
+ size() {
35
+ return this.pendingRuns.size;
36
+ }
37
+ }
38
+ //# sourceMappingURL=automation-run-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-run-tracker.js","sourceRoot":"","sources":["../src/automation-run-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAGlE,MAAM,OAAO,oBAAoB;IACd,WAAW,GAAG,IAAI,GAAG,EAAgC,CAAC;IAEvE,MAAM,CAAC,UAAsB,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;QACrD,MAAM,GAAG,GAAyB;YAChC,KAAK,EAAE,UAAU,EAAE;YACnB,YAAY,EAAE,UAAU,CAAC,EAAE;YAC3B,GAAG,EAAE,UAAU,CAAC,GAAG;YACnB,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,SAAS,EAAE,GAAG;SACf,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACrC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,YAAY,CAAC,MAAc,IAAI,CAAC,GAAG,EAAE;QACnC,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,IAAI,GAAG,GAAG,GAAG,CAAC,SAAS,IAAI,gCAAgC;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjF,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import { EventEmitter } from "node:events";
2
+ import type { AutomationStore } from "./automation-store.js";
3
+ import type { Automation } from "./types.js";
4
+ interface AutomationSchedulerEvents {
5
+ due: [automation: Automation];
6
+ tick: [now: Date];
7
+ }
8
+ export declare class AutomationScheduler extends EventEmitter<AutomationSchedulerEvents> {
9
+ private readonly store;
10
+ private tickTimer;
11
+ private disposed;
12
+ private readonly lastFiredMinuteByAutomationId;
13
+ constructor(store: AutomationStore);
14
+ start(): void;
15
+ dispose(): void;
16
+ runTick(now?: Date): void;
17
+ private scheduleNextTick;
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=automation-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-scheduler.d.ts","sourceRoot":"","sources":["../src/automation-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,UAAU,yBAAyB;IACjC,GAAG,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;CACnB;AAED,qBAAa,mBAAoB,SAAQ,YAAY,CAAC,yBAAyB,CAAC;IAKlE,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJlC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAA6B;gBAE9C,KAAK,EAAE,eAAe;IAInD,KAAK,IAAI,IAAI;IAKb,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,GAAG,GAAE,IAAiB,GAAG,IAAI;IAmBrC,OAAO,CAAC,gBAAgB;CAWzB"}
@@ -0,0 +1,62 @@
1
+ import { EventEmitter } from "node:events";
2
+ import { AUTOMATION_TICK_ALIGNMENT_DELAY_MS, MS_PER_MINUTE } from "./constants.js";
3
+ import { cronMatchesDate, parseCronExpression } from "./cron-expression.js";
4
+ export class AutomationScheduler extends EventEmitter {
5
+ store;
6
+ tickTimer = null;
7
+ disposed = false;
8
+ lastFiredMinuteByAutomationId = new Map();
9
+ constructor(store) {
10
+ super();
11
+ this.store = store;
12
+ }
13
+ start() {
14
+ if (this.disposed || this.tickTimer !== null)
15
+ return;
16
+ this.scheduleNextTick();
17
+ }
18
+ dispose() {
19
+ this.disposed = true;
20
+ if (this.tickTimer !== null) {
21
+ clearTimeout(this.tickTimer);
22
+ this.tickTimer = null;
23
+ }
24
+ this.removeAllListeners();
25
+ }
26
+ runTick(now = new Date()) {
27
+ if (this.disposed)
28
+ return;
29
+ const minuteKey = Math.floor(now.getTime() / MS_PER_MINUTE);
30
+ const automations = this.store.list();
31
+ for (const automation of automations) {
32
+ if (!automation.enabled)
33
+ continue;
34
+ const parsed = parseCronExpression(automation.schedule);
35
+ if (!parsed || !cronMatchesDate(parsed, now))
36
+ continue;
37
+ if (this.lastFiredMinuteByAutomationId.get(automation.id) === minuteKey)
38
+ continue;
39
+ this.lastFiredMinuteByAutomationId.set(automation.id, minuteKey);
40
+ this.emit("due", automation);
41
+ }
42
+ const liveIds = new Set(automations.map((automation) => automation.id));
43
+ for (const trackedId of [...this.lastFiredMinuteByAutomationId.keys()]) {
44
+ if (!liveIds.has(trackedId))
45
+ this.lastFiredMinuteByAutomationId.delete(trackedId);
46
+ }
47
+ this.emit("tick", now);
48
+ }
49
+ scheduleNextTick() {
50
+ if (this.disposed)
51
+ return;
52
+ const now = Date.now();
53
+ const delayMs = MS_PER_MINUTE - (now % MS_PER_MINUTE) + AUTOMATION_TICK_ALIGNMENT_DELAY_MS;
54
+ this.tickTimer = setTimeout(() => {
55
+ this.tickTimer = null;
56
+ this.runTick();
57
+ this.scheduleNextTick();
58
+ }, delayMs);
59
+ this.tickTimer.unref?.();
60
+ }
61
+ }
62
+ //# sourceMappingURL=automation-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-scheduler.js","sourceRoot":"","sources":["../src/automation-scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Automation, AutomationLastRun, CreateAutomationInput, UpdateAutomationInput } from "./types.js";
2
+ export declare class AutomationStore {
3
+ private readonly filePath;
4
+ private automations;
5
+ constructor(filePath: string);
6
+ list(): Automation[];
7
+ get(id: string): Automation | null;
8
+ size(): number;
9
+ create(input: CreateAutomationInput): Automation;
10
+ update(id: string, patch: UpdateAutomationInput): Automation | null;
11
+ remove(id: string): boolean;
12
+ recordLastRun(id: string, lastRun: AutomationLastRun): Automation | null;
13
+ private load;
14
+ private persist;
15
+ }
16
+ //# sourceMappingURL=automation-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-store.d.ts","sourceRoot":"","sources":["../src/automation-store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAEpB,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,WAAW,CAAoB;gBAEV,QAAQ,EAAE,MAAM;IAI7C,IAAI,IAAI,UAAU,EAAE;IAIpB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIlC,IAAI,IAAI,MAAM;IAId,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,UAAU;IAkBhD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,UAAU,GAAG,IAAI;IAkBnE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAQ3B,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,UAAU,GAAG,IAAI;IASxE,OAAO,CAAC,IAAI;IAmBZ,OAAO,CAAC,OAAO;CAOhB"}
@@ -0,0 +1,102 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { AUTOMATIONS_FILE_VERSION } from "./constants.js";
5
+ import { automationsFileSchema } from "./schemas.js";
6
+ export class AutomationStore {
7
+ filePath;
8
+ automations = [];
9
+ constructor(filePath) {
10
+ this.filePath = filePath;
11
+ this.load();
12
+ }
13
+ list() {
14
+ return [...this.automations];
15
+ }
16
+ get(id) {
17
+ return this.automations.find((automation) => automation.id === id) ?? null;
18
+ }
19
+ size() {
20
+ return this.automations.length;
21
+ }
22
+ create(input) {
23
+ const now = Date.now();
24
+ const automation = {
25
+ id: randomUUID(),
26
+ name: input.name,
27
+ schedule: input.schedule,
28
+ cwd: input.cwd,
29
+ command: input.command,
30
+ enabled: input.enabled ?? true,
31
+ createdAt: now,
32
+ updatedAt: now,
33
+ lastRun: null,
34
+ };
35
+ this.automations.push(automation);
36
+ this.persist();
37
+ return automation;
38
+ }
39
+ update(id, patch) {
40
+ const index = this.automations.findIndex((automation) => automation.id === id);
41
+ if (index === -1)
42
+ return null;
43
+ const current = this.automations[index];
44
+ const updated = {
45
+ ...current,
46
+ ...(patch.name !== undefined ? { name: patch.name } : {}),
47
+ ...(patch.schedule !== undefined ? { schedule: patch.schedule } : {}),
48
+ ...(patch.cwd !== undefined ? { cwd: patch.cwd } : {}),
49
+ ...(patch.command !== undefined ? { command: patch.command } : {}),
50
+ ...(patch.enabled !== undefined ? { enabled: patch.enabled } : {}),
51
+ updatedAt: Date.now(),
52
+ };
53
+ this.automations[index] = updated;
54
+ this.persist();
55
+ return updated;
56
+ }
57
+ remove(id) {
58
+ const index = this.automations.findIndex((automation) => automation.id === id);
59
+ if (index === -1)
60
+ return false;
61
+ this.automations.splice(index, 1);
62
+ this.persist();
63
+ return true;
64
+ }
65
+ recordLastRun(id, lastRun) {
66
+ const index = this.automations.findIndex((automation) => automation.id === id);
67
+ if (index === -1)
68
+ return null;
69
+ const updated = { ...this.automations[index], lastRun };
70
+ this.automations[index] = updated;
71
+ this.persist();
72
+ return updated;
73
+ }
74
+ load() {
75
+ let raw;
76
+ try {
77
+ raw = fs.readFileSync(this.filePath, "utf8");
78
+ }
79
+ catch {
80
+ return;
81
+ }
82
+ try {
83
+ const parsed = automationsFileSchema.safeParse(JSON.parse(raw));
84
+ if (parsed.success) {
85
+ this.automations = parsed.data.automations;
86
+ return;
87
+ }
88
+ }
89
+ catch {
90
+ /* malformed JSON falls through to the warning below */
91
+ }
92
+ console.warn(`automations file invalid; starting with an empty list (${this.filePath})`);
93
+ }
94
+ persist() {
95
+ fs.mkdirSync(path.dirname(this.filePath), { recursive: true });
96
+ const payload = { version: AUTOMATIONS_FILE_VERSION, automations: this.automations };
97
+ const tmpPath = `${this.filePath}.tmp`;
98
+ fs.writeFileSync(tmpPath, `${JSON.stringify(payload, null, 2)}\n`, "utf8");
99
+ fs.renameSync(tmpPath, this.filePath);
100
+ }
101
+ }
102
+ //# sourceMappingURL=automation-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-store.js","sourceRoot":"","sources":["../src/automation-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAQrD,MAAM,OAAO,eAAe;IAGG;IAFrB,WAAW,GAAiB,EAAE,CAAC;IAEvC,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;QAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;IAC7E,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,KAA4B;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAe;YAC7B,EAAE,EAAE,UAAU,EAAE;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;YAC9B,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,OAAO,EAAE,IAAI;SACd,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,KAA4B;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/E,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAe;YAC1B,GAAG,OAAO;YACV,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,EAAU;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/E,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,EAAU,EAAE,OAA0B;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/E,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,OAAO,GAAe,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;QACpE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,IAAI;QACV,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC3C,OAAO;YACT,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;QACzD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,0DAA0D,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC3F,CAAC;IAEO,OAAO;QACb,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACrF,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,QAAQ,MAAM,CAAC;QACvC,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3E,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;CACF"}
@@ -1,5 +1,6 @@
1
1
  export declare const DEFAULT_PORT = 3417;
2
2
  export declare const DEFAULT_HOST = "127.0.0.1";
3
+ export declare const FRIENDLY_HOSTNAME = "localterm.localhost";
3
4
  export declare const DEFAULT_COLS = 120;
4
5
  export declare const DEFAULT_ROWS = 32;
5
6
  export declare const DEFAULT_SHELL_FALLBACK = "/bin/sh";
@@ -48,6 +49,17 @@ export declare const GIT_BINARY_SNIFF_BYTES = 8000;
48
49
  export declare const GIT_MAX_PATCH_BYTES_PER_FILE: number;
49
50
  export declare const GIT_MAX_TOTAL_PATCH_BYTES: number;
50
51
  export declare const GIT_DIRTY_THROTTLE_MS = 100;
52
+ export declare const HTTP_STATUS_CREATED = 201;
53
+ export declare const MS_PER_MINUTE = 60000;
54
+ export declare const MAX_AUTOMATIONS = 100;
55
+ export declare const MAX_AUTOMATION_NAME_LENGTH = 120;
56
+ export declare const MAX_AUTOMATION_COMMAND_LENGTH = 4096;
57
+ export declare const MAX_CRON_EXPRESSION_LENGTH = 256;
58
+ export declare const AUTOMATIONS_FILE_VERSION = 1;
59
+ export declare const AUTOMATION_TICK_ALIGNMENT_DELAY_MS = 50;
60
+ export declare const AUTOMATION_PENDING_RUN_EXPIRY_MS: number;
61
+ export declare const CRON_NEXT_OCCURRENCE_SCAN_LIMIT_DAYS = 1466;
62
+ export declare const MAX_AUTOMATION_EXIT_CODE_DIGITS = 4;
51
63
  export declare const WS_READY_STATE_OPEN = 1;
52
64
  export declare const WS_CLOSE_POLICY_VIOLATION = 1008;
53
65
  export declare const WS_CLOSE_BACKPRESSURE = 4429;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAEhD,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAC1C,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,UAgB5B,CAAC;AAEF,eAAO,MAAM,eAAe,QAAY,CAAC;AACzC,eAAO,MAAM,gBAAgB,QAAkB,CAAC;AAChD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,gBAAgB,QAAW,CAAC;AACzC,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAO1C,eAAO,MAAM,kCAAkC,QAAkB,CAAC;AAClE,eAAO,MAAM,kCAAkC,QAAkB,CAAC;AAClE,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,+BAA+B,QAAmB,CAAC;AAUhE,eAAO,MAAM,wBAAwB,QAAW,CAAC;AAajD,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAOxC,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAC/C,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAK/C,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAE1C,eAAO,MAAM,cAAc,aAAoE,CAAC;AAEhG,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAM3C,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAI7C,eAAO,MAAM,oBAAoB,QAAmB,CAAC;AAGrD,eAAO,MAAM,mBAAmB,6CAA6C,CAAC;AAK9E,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,4BAA4B,QAAkB,CAAC;AAG5D,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAI3C,eAAO,MAAM,4BAA4B,QAAkB,CAAC;AAC5D,eAAO,MAAM,yBAAyB,QAAmB,CAAC;AAC1D,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,eAAO,MAAM,yBAAyB,OAAO,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,iBAAiB,wBAAwB,CAAC;AACvD,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAEhD,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAC1C,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,UAgB5B,CAAC;AAEF,eAAO,MAAM,eAAe,QAAY,CAAC;AACzC,eAAO,MAAM,gBAAgB,QAAkB,CAAC;AAChD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,gBAAgB,QAAW,CAAC;AACzC,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAO1C,eAAO,MAAM,kCAAkC,QAAkB,CAAC;AAClE,eAAO,MAAM,kCAAkC,QAAkB,CAAC;AAClE,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,+BAA+B,QAAmB,CAAC;AAUhE,eAAO,MAAM,wBAAwB,QAAW,CAAC;AAajD,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAOxC,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAC/C,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAK/C,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAE1C,eAAO,MAAM,cAAc,aAAoE,CAAC;AAEhG,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAM3C,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAI7C,eAAO,MAAM,oBAAoB,QAAmB,CAAC;AAGrD,eAAO,MAAM,mBAAmB,6CAA6C,CAAC;AAK9E,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,4BAA4B,QAAkB,CAAC;AAG5D,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAI3C,eAAO,MAAM,4BAA4B,QAAkB,CAAC;AAC5D,eAAO,MAAM,yBAAyB,QAAmB,CAAC;AAC1D,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,eAAO,MAAM,aAAa,QAAS,CAAC;AAEpC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAClD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAG1C,eAAO,MAAM,kCAAkC,KAAK,CAAC;AAGrD,eAAO,MAAM,gCAAgC,QAAgB,CAAC;AAE9D,eAAO,MAAM,oCAAoC,OAAO,CAAC;AACzD,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,eAAO,MAAM,yBAAyB,OAAO,CAAC"}
package/dist/constants.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export const DEFAULT_PORT = 3417;
2
2
  export const DEFAULT_HOST = "127.0.0.1";
3
+ export const FRIENDLY_HOSTNAME = "localterm.localhost";
3
4
  export const DEFAULT_COLS = 120;
4
5
  export const DEFAULT_ROWS = 32;
5
6
  export const DEFAULT_SHELL_FALLBACK = "/bin/sh";
@@ -116,6 +117,22 @@ export const GIT_BINARY_SNIFF_BYTES = 8000;
116
117
  export const GIT_MAX_PATCH_BYTES_PER_FILE = 1 * 1024 * 1024;
117
118
  export const GIT_MAX_TOTAL_PATCH_BYTES = 10 * 1024 * 1024;
118
119
  export const GIT_DIRTY_THROTTLE_MS = 100;
120
+ export const HTTP_STATUS_CREATED = 201;
121
+ export const MS_PER_MINUTE = 60_000;
122
+ export const MAX_AUTOMATIONS = 100;
123
+ export const MAX_AUTOMATION_NAME_LENGTH = 120;
124
+ export const MAX_AUTOMATION_COMMAND_LENGTH = 4096;
125
+ export const MAX_CRON_EXPRESSION_LENGTH = 256;
126
+ export const AUTOMATIONS_FILE_VERSION = 1;
127
+ // Ticks land just past the minute boundary so a timer that fires marginally
128
+ // early can never evaluate the previous minute twice.
129
+ export const AUTOMATION_TICK_ALIGNMENT_DELAY_MS = 50;
130
+ // A launched run that no browser tab claims within this window is marked
131
+ // "missed" (browser closed, headless host, open() failed silently).
132
+ export const AUTOMATION_PENDING_RUN_EXPIRY_MS = 5 * 60 * 1000;
133
+ // Covers schedules that only fire on Feb 29 (the rarest valid cron target).
134
+ export const CRON_NEXT_OCCURRENCE_SCAN_LIMIT_DAYS = 1466;
135
+ export const MAX_AUTOMATION_EXIT_CODE_DIGITS = 4;
119
136
  export const WS_READY_STATE_OPEN = 1;
120
137
  export const WS_CLOSE_POLICY_VIOLATION = 1008;
121
138
  export const WS_CLOSE_BACKPRESSURE = 4429;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface ParsedCronExpression {
2
+ minutes: ReadonlySet<number>;
3
+ hours: ReadonlySet<number>;
4
+ daysOfMonth: ReadonlySet<number>;
5
+ months: ReadonlySet<number>;
6
+ daysOfWeek: ReadonlySet<number>;
7
+ isDayOfMonthRestricted: boolean;
8
+ isDayOfWeekRestricted: boolean;
9
+ }
10
+ export declare const parseCronExpression: (expression: string) => ParsedCronExpression | null;
11
+ export declare const cronMatchesDate: (parsed: ParsedCronExpression, date: Date) => boolean;
12
+ export declare const nextCronOccurrence: (parsed: ParsedCronExpression, from: Date) => Date | null;
13
+ //# sourceMappingURL=cron-expression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-expression.d.ts","sourceRoot":"","sources":["../src/cron-expression.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,sBAAsB,EAAE,OAAO,CAAC;IAChC,qBAAqB,EAAE,OAAO,CAAC;CAChC;AA6GD,eAAO,MAAM,mBAAmB,GAAI,YAAY,MAAM,KAAG,oBAAoB,GAAG,IAsB/E,CAAC;AAaF,eAAO,MAAM,eAAe,GAAI,QAAQ,oBAAoB,EAAE,MAAM,IAAI,KAAG,OAI7C,CAAC;AAE/B,eAAO,MAAM,kBAAkB,GAAI,QAAQ,oBAAoB,EAAE,MAAM,IAAI,KAAG,IAAI,GAAG,IAuBpF,CAAC"}
@@ -0,0 +1,176 @@
1
+ import { CRON_NEXT_OCCURRENCE_SCAN_LIMIT_DAYS } from "./constants.js";
2
+ const MINUTE_FIELD = { min: 0, max: 59 };
3
+ const HOUR_FIELD = { min: 0, max: 23 };
4
+ const DAY_OF_MONTH_FIELD = { min: 1, max: 31 };
5
+ const MONTH_FIELD = {
6
+ min: 1,
7
+ max: 12,
8
+ names: {
9
+ jan: 1,
10
+ feb: 2,
11
+ mar: 3,
12
+ apr: 4,
13
+ may: 5,
14
+ jun: 6,
15
+ jul: 7,
16
+ aug: 8,
17
+ sep: 9,
18
+ oct: 10,
19
+ nov: 11,
20
+ dec: 12,
21
+ },
22
+ };
23
+ const DAY_OF_WEEK_FIELD = {
24
+ min: 0,
25
+ max: 7,
26
+ names: { sun: 0, mon: 1, tue: 2, wed: 3, thu: 4, fri: 5, sat: 6 },
27
+ };
28
+ const SUNDAY_ALIAS = 7;
29
+ const SUNDAY = 0;
30
+ const CRON_FIELD_COUNT = 5;
31
+ const CRON_ALIASES = {
32
+ "@hourly": "0 * * * *",
33
+ "@daily": "0 0 * * *",
34
+ "@midnight": "0 0 * * *",
35
+ "@weekly": "0 0 * * 0",
36
+ "@monthly": "0 0 1 * *",
37
+ "@yearly": "0 0 1 1 *",
38
+ "@annually": "0 0 1 1 *",
39
+ };
40
+ const parseFieldValue = (text, definition) => {
41
+ if (definition.names) {
42
+ const named = definition.names[text.toLowerCase()];
43
+ if (named !== undefined)
44
+ return named;
45
+ }
46
+ if (!/^\d+$/.test(text))
47
+ return null;
48
+ const value = Number.parseInt(text, 10);
49
+ if (value < definition.min || value > definition.max)
50
+ return null;
51
+ return value;
52
+ };
53
+ const parseFieldPart = (part, definition) => {
54
+ const [rangeText, stepText, ...extraStepParts] = part.split("/");
55
+ if (extraStepParts.length > 0)
56
+ return null;
57
+ let step = 1;
58
+ if (stepText !== undefined) {
59
+ if (!/^\d+$/.test(stepText))
60
+ return null;
61
+ step = Number.parseInt(stepText, 10);
62
+ if (step < 1)
63
+ return null;
64
+ }
65
+ let start;
66
+ let end;
67
+ if (rangeText === "*") {
68
+ start = definition.min;
69
+ end = definition.max;
70
+ }
71
+ else {
72
+ const [startText, endText, ...extraRangeParts] = rangeText.split("-");
73
+ if (extraRangeParts.length > 0)
74
+ return null;
75
+ const startValue = parseFieldValue(startText, definition);
76
+ if (startValue === null)
77
+ return null;
78
+ start = startValue;
79
+ if (endText !== undefined) {
80
+ const endValue = parseFieldValue(endText, definition);
81
+ if (endValue === null)
82
+ return null;
83
+ end = endValue;
84
+ }
85
+ else {
86
+ // Vixie cron treats a bare value with a step ("5/15") as "5 to max".
87
+ end = stepText !== undefined ? definition.max : startValue;
88
+ }
89
+ }
90
+ if (start > end)
91
+ return null;
92
+ const values = [];
93
+ for (let value = start; value <= end; value += step) {
94
+ values.push(value);
95
+ }
96
+ return values;
97
+ };
98
+ const parseField = (fieldText, definition) => {
99
+ if (!fieldText)
100
+ return null;
101
+ const values = new Set();
102
+ for (const part of fieldText.split(",")) {
103
+ const partValues = parseFieldPart(part, definition);
104
+ if (partValues === null)
105
+ return null;
106
+ for (const value of partValues) {
107
+ values.add(value);
108
+ }
109
+ }
110
+ return values;
111
+ };
112
+ export const parseCronExpression = (expression) => {
113
+ const trimmed = expression.trim();
114
+ const resolved = CRON_ALIASES[trimmed.toLowerCase()] ?? trimmed;
115
+ const fieldTexts = resolved.split(/\s+/);
116
+ if (fieldTexts.length !== CRON_FIELD_COUNT)
117
+ return null;
118
+ const [minuteText, hourText, dayOfMonthText, monthText, dayOfWeekText] = fieldTexts;
119
+ const minutes = parseField(minuteText, MINUTE_FIELD);
120
+ const hours = parseField(hourText, HOUR_FIELD);
121
+ const daysOfMonth = parseField(dayOfMonthText, DAY_OF_MONTH_FIELD);
122
+ const months = parseField(monthText, MONTH_FIELD);
123
+ const daysOfWeek = parseField(dayOfWeekText, DAY_OF_WEEK_FIELD);
124
+ if (!minutes || !hours || !daysOfMonth || !months || !daysOfWeek)
125
+ return null;
126
+ if (daysOfWeek.has(SUNDAY_ALIAS))
127
+ daysOfWeek.add(SUNDAY);
128
+ return {
129
+ minutes,
130
+ hours,
131
+ daysOfMonth,
132
+ months,
133
+ daysOfWeek,
134
+ isDayOfMonthRestricted: !dayOfMonthText.startsWith("*"),
135
+ isDayOfWeekRestricted: !dayOfWeekText.startsWith("*"),
136
+ };
137
+ };
138
+ // Vixie cron day semantics: when both day fields are restricted the date
139
+ // matches if EITHER does; a wildcard field defers entirely to the other.
140
+ const cronMatchesDay = (parsed, date) => {
141
+ const dayOfMonthMatches = parsed.daysOfMonth.has(date.getDate());
142
+ const dayOfWeekMatches = parsed.daysOfWeek.has(date.getDay());
143
+ if (parsed.isDayOfMonthRestricted && parsed.isDayOfWeekRestricted) {
144
+ return dayOfMonthMatches || dayOfWeekMatches;
145
+ }
146
+ return dayOfMonthMatches && dayOfWeekMatches;
147
+ };
148
+ export const cronMatchesDate = (parsed, date) => parsed.minutes.has(date.getMinutes()) &&
149
+ parsed.hours.has(date.getHours()) &&
150
+ parsed.months.has(date.getMonth() + 1) &&
151
+ cronMatchesDay(parsed, date);
152
+ export const nextCronOccurrence = (parsed, from) => {
153
+ const candidate = new Date(from.getTime());
154
+ candidate.setSeconds(0, 0);
155
+ candidate.setMinutes(candidate.getMinutes() + 1);
156
+ const scanLimit = new Date(from.getTime());
157
+ scanLimit.setDate(scanLimit.getDate() + CRON_NEXT_OCCURRENCE_SCAN_LIMIT_DAYS);
158
+ while (candidate.getTime() <= scanLimit.getTime()) {
159
+ if (!parsed.months.has(candidate.getMonth() + 1) || !cronMatchesDay(parsed, candidate)) {
160
+ candidate.setDate(candidate.getDate() + 1);
161
+ candidate.setHours(0, 0, 0, 0);
162
+ continue;
163
+ }
164
+ if (!parsed.hours.has(candidate.getHours())) {
165
+ candidate.setHours(candidate.getHours() + 1, 0, 0, 0);
166
+ continue;
167
+ }
168
+ if (!parsed.minutes.has(candidate.getMinutes())) {
169
+ candidate.setMinutes(candidate.getMinutes() + 1);
170
+ continue;
171
+ }
172
+ return candidate;
173
+ }
174
+ return null;
175
+ };
176
+ //# sourceMappingURL=cron-expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-expression.js","sourceRoot":"","sources":["../src/cron-expression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oCAAoC,EAAE,MAAM,gBAAgB,CAAC;AAkBtE,MAAM,YAAY,GAAwB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AAC9D,MAAM,UAAU,GAAwB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AAC5D,MAAM,kBAAkB,GAAwB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AACpE,MAAM,WAAW,GAAwB;IACvC,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,EAAE;IACP,KAAK,EAAE;QACL,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,GAAG,EAAE,EAAE;QACP,GAAG,EAAE,EAAE;KACR;CACF,CAAC;AACF,MAAM,iBAAiB,GAAwB;IAC7C,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;CAClE,CAAC;AACF,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,MAAM,GAAG,CAAC,CAAC;AACjB,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,MAAM,YAAY,GAA2B;IAC3C,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,WAAW;IACxB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,WAAW;IACvB,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,WAAW;CACzB,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,UAA+B,EAAiB,EAAE;IACvF,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,UAA+B,EAAmB,EAAE;IACxF,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAC5B,CAAC;IACD,IAAI,KAAa,CAAC;IAClB,IAAI,GAAW,CAAC;IAChB,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACtB,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC;QACvB,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC1D,IAAI,UAAU,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACrC,KAAK,GAAG,UAAU,CAAC;QACnB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACtD,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACnC,GAAG,GAAG,QAAQ,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,qEAAqE;YACrE,GAAG,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,SAAiB,EAAE,UAA+B,EAAsB,EAAE;IAC5F,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACpD,IAAI,UAAU,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,UAAkB,EAA+B,EAAE;IACrF,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC;IAChE,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,UAAU,CAAC,MAAM,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,CAAC,GAAG,UAAU,CAAC;IACpF,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IAChE,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC9E,IAAI,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzD,OAAO;QACL,OAAO;QACP,KAAK;QACL,WAAW;QACX,MAAM;QACN,UAAU;QACV,sBAAsB,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;QACvD,qBAAqB,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC;KACtD,CAAC;AACJ,CAAC,CAAC;AAEF,yEAAyE;AACzE,yEAAyE;AACzE,MAAM,cAAc,GAAG,CAAC,MAA4B,EAAE,IAAU,EAAW,EAAE;IAC3E,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACjE,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,sBAAsB,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAClE,OAAO,iBAAiB,IAAI,gBAAgB,CAAC;IAC/C,CAAC;IACD,OAAO,iBAAiB,IAAI,gBAAgB,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAA4B,EAAE,IAAU,EAAW,EAAE,CACnF,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IACrC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAE/B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAA4B,EAAE,IAAU,EAAe,EAAE;IAC1F,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,oCAAoC,CAAC,CAAC;IAC9E,OAAO,SAAS,CAAC,OAAO,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;YACvF,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3C,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;YAC5C,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;YAChD,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;YACjD,SAAS;QACX,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -3,6 +3,8 @@ export interface ServerOptions {
3
3
  port?: number;
4
4
  host?: string;
5
5
  staticRoot?: string | null;
6
+ stateDirectory?: string;
7
+ openUrl?: (url: string) => Promise<void>;
6
8
  }
7
9
  export interface RunningServer {
8
10
  port: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIxD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AA+DD,eAAO,MAAM,YAAY,GAAU,UAAS,aAAkB,KAAG,OAAO,CAAC,aAAa,CAsZrF,CAAC;AAEF,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,mBAAmB,YAAY,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKxD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AA+DD,eAAO,MAAM,YAAY,GAAU,UAAS,aAAkB,KAAG,OAAO,CAAC,aAAa,CA4jBrF,CAAC;AAEF,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,mBAAmB,YAAY,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}