@smthrs/triggers 0.0.0-stage → 1.0.0-rc.3
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 +219 -0
- package/LICENSE +21 -0
- package/README.md +109 -2
- package/dist/cjs/CatchUp.d.ts +25 -0
- package/dist/cjs/CatchUp.d.ts.map +1 -0
- package/dist/cjs/CatchUp.js +72 -0
- package/dist/cjs/CatchUp.js.map +7 -0
- package/dist/cjs/Channel.d.ts +108 -0
- package/dist/cjs/Channel.d.ts.map +1 -0
- package/dist/cjs/Channel.js +25 -0
- package/dist/cjs/Channel.js.map +7 -0
- package/dist/cjs/ClaimDecision.d.ts +183 -0
- package/dist/cjs/ClaimDecision.d.ts.map +1 -0
- package/dist/cjs/ClaimDecision.js +144 -0
- package/dist/cjs/ClaimDecision.js.map +7 -0
- package/dist/cjs/Cron.d.ts +91 -0
- package/dist/cjs/Cron.d.ts.map +1 -0
- package/dist/cjs/Cron.js +108 -0
- package/dist/cjs/Cron.js.map +7 -0
- package/dist/cjs/DispatchReader.d.ts +77 -0
- package/dist/cjs/DispatchReader.d.ts.map +1 -0
- package/dist/cjs/DispatchReader.js +121 -0
- package/dist/cjs/DispatchReader.js.map +7 -0
- package/dist/cjs/Overlap.d.ts +40 -0
- package/dist/cjs/Overlap.d.ts.map +1 -0
- package/dist/cjs/Overlap.js +37 -0
- package/dist/cjs/Overlap.js.map +7 -0
- package/dist/cjs/Schedule.d.ts +96 -0
- package/dist/cjs/Schedule.d.ts.map +1 -0
- package/dist/cjs/Schedule.js +61 -0
- package/dist/cjs/Schedule.js.map +7 -0
- package/dist/cjs/Scheduler.d.ts +248 -0
- package/dist/cjs/Scheduler.d.ts.map +1 -0
- package/dist/cjs/Scheduler.js +647 -0
- package/dist/cjs/Scheduler.js.map +7 -0
- package/dist/cjs/SqlTriggerStore.d.ts +29 -0
- package/dist/cjs/SqlTriggerStore.d.ts.map +1 -0
- package/dist/cjs/SqlTriggerStore.js +483 -0
- package/dist/cjs/SqlTriggerStore.js.map +7 -0
- package/dist/cjs/Trigger.d.ts +81 -0
- package/dist/cjs/Trigger.d.ts.map +1 -0
- package/dist/cjs/Trigger.js +54 -0
- package/dist/cjs/Trigger.js.map +7 -0
- package/dist/cjs/TriggerError.d.ts +58 -0
- package/dist/cjs/TriggerError.d.ts.map +1 -0
- package/dist/cjs/TriggerError.js +83 -0
- package/dist/cjs/TriggerError.js.map +7 -0
- package/dist/cjs/TriggerStore.d.ts +411 -0
- package/dist/cjs/TriggerStore.d.ts.map +1 -0
- package/dist/cjs/TriggerStore.js +127 -0
- package/dist/cjs/TriggerStore.js.map +7 -0
- package/dist/cjs/Webhook.d.ts +118 -0
- package/dist/cjs/Webhook.d.ts.map +1 -0
- package/dist/cjs/Webhook.js +153 -0
- package/dist/cjs/Webhook.js.map +7 -0
- package/dist/cjs/index.d.ts +30 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +57 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/internal/ActiveRuns.d.ts +51 -0
- package/dist/cjs/internal/ActiveRuns.d.ts.map +1 -0
- package/dist/cjs/internal/ActiveRuns.js +56 -0
- package/dist/cjs/internal/ActiveRuns.js.map +7 -0
- package/dist/cjs/internal/DueOccurrences.d.ts +32 -0
- package/dist/cjs/internal/DueOccurrences.d.ts.map +1 -0
- package/dist/cjs/internal/DueOccurrences.js +80 -0
- package/dist/cjs/internal/DueOccurrences.js.map +7 -0
- package/dist/cjs/internal/WallClock.d.ts +59 -0
- package/dist/cjs/internal/WallClock.d.ts.map +1 -0
- package/dist/cjs/internal/WallClock.js +132 -0
- package/dist/cjs/internal/WallClock.js.map +7 -0
- package/dist/cjs/migrations/0001_triggers.d.ts +15 -0
- package/dist/cjs/migrations/0001_triggers.d.ts.map +1 -0
- package/dist/cjs/migrations/0001_triggers.js +64 -0
- package/dist/cjs/migrations/0001_triggers.js.map +7 -0
- package/dist/cjs/migrations/0002_reservation_lease.d.ts +15 -0
- package/dist/cjs/migrations/0002_reservation_lease.d.ts.map +1 -0
- package/dist/cjs/migrations/0002_reservation_lease.js +41 -0
- package/dist/cjs/migrations/0002_reservation_lease.js.map +7 -0
- package/dist/cjs/migrations/0003_heartbeat.d.ts +16 -0
- package/dist/cjs/migrations/0003_heartbeat.d.ts.map +1 -0
- package/dist/cjs/migrations/0003_heartbeat.js +44 -0
- package/dist/cjs/migrations/0003_heartbeat.js.map +7 -0
- package/dist/cjs/migrations/0004_fire_run_index.d.ts +17 -0
- package/dist/cjs/migrations/0004_fire_run_index.d.ts.map +1 -0
- package/dist/cjs/migrations/0004_fire_run_index.js +40 -0
- package/dist/cjs/migrations/0004_fire_run_index.js.map +7 -0
- package/dist/cjs/migrations/index.d.ts +33 -0
- package/dist/cjs/migrations/index.d.ts.map +1 -0
- package/dist/cjs/migrations/index.js +50 -0
- package/dist/cjs/migrations/index.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/test/TestTriggers.d.ts +12 -0
- package/dist/cjs/test/TestTriggers.d.ts.map +1 -0
- package/dist/cjs/test/TestTriggers.js +421 -0
- package/dist/cjs/test/TestTriggers.js.map +7 -0
- package/dist/esm/CatchUp.d.ts +25 -0
- package/dist/esm/CatchUp.d.ts.map +1 -0
- package/dist/esm/CatchUp.js +52 -0
- package/dist/esm/CatchUp.js.map +1 -0
- package/dist/esm/Channel.d.ts +108 -0
- package/dist/esm/Channel.d.ts.map +1 -0
- package/dist/esm/Channel.js +19 -0
- package/dist/esm/Channel.js.map +1 -0
- package/dist/esm/ClaimDecision.d.ts +183 -0
- package/dist/esm/ClaimDecision.d.ts.map +1 -0
- package/dist/esm/ClaimDecision.js +172 -0
- package/dist/esm/ClaimDecision.js.map +1 -0
- package/dist/esm/Cron.d.ts +91 -0
- package/dist/esm/Cron.d.ts.map +1 -0
- package/dist/esm/Cron.js +132 -0
- package/dist/esm/Cron.js.map +1 -0
- package/dist/esm/DispatchReader.d.ts +77 -0
- package/dist/esm/DispatchReader.d.ts.map +1 -0
- package/dist/esm/DispatchReader.js +152 -0
- package/dist/esm/DispatchReader.js.map +1 -0
- package/dist/esm/Overlap.d.ts +40 -0
- package/dist/esm/Overlap.d.ts.map +1 -0
- package/dist/esm/Overlap.js +31 -0
- package/dist/esm/Overlap.js.map +1 -0
- package/dist/esm/Schedule.d.ts +96 -0
- package/dist/esm/Schedule.d.ts.map +1 -0
- package/dist/esm/Schedule.js +73 -0
- package/dist/esm/Schedule.js.map +1 -0
- package/dist/esm/Scheduler.d.ts +248 -0
- package/dist/esm/Scheduler.d.ts.map +1 -0
- package/dist/esm/Scheduler.js +734 -0
- package/dist/esm/Scheduler.js.map +1 -0
- package/dist/esm/SqlTriggerStore.d.ts +29 -0
- package/dist/esm/SqlTriggerStore.d.ts.map +1 -0
- package/dist/esm/SqlTriggerStore.js +483 -0
- package/dist/esm/SqlTriggerStore.js.map +1 -0
- package/dist/esm/Trigger.d.ts +81 -0
- package/dist/esm/Trigger.d.ts.map +1 -0
- package/dist/esm/Trigger.js +56 -0
- package/dist/esm/Trigger.js.map +1 -0
- package/dist/esm/TriggerError.d.ts +58 -0
- package/dist/esm/TriggerError.d.ts.map +1 -0
- package/dist/esm/TriggerError.js +110 -0
- package/dist/esm/TriggerError.js.map +1 -0
- package/dist/esm/TriggerStore.d.ts +411 -0
- package/dist/esm/TriggerStore.d.ts.map +1 -0
- package/dist/esm/TriggerStore.js +209 -0
- package/dist/esm/TriggerStore.js.map +1 -0
- package/dist/esm/Webhook.d.ts +118 -0
- package/dist/esm/Webhook.d.ts.map +1 -0
- package/dist/esm/Webhook.js +186 -0
- package/dist/esm/Webhook.js.map +1 -0
- package/dist/esm/index.d.ts +30 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +30 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/ActiveRuns.d.ts +51 -0
- package/dist/esm/internal/ActiveRuns.d.ts.map +1 -0
- package/dist/esm/internal/ActiveRuns.js +34 -0
- package/dist/esm/internal/ActiveRuns.js.map +1 -0
- package/dist/esm/internal/DueOccurrences.d.ts +32 -0
- package/dist/esm/internal/DueOccurrences.d.ts.map +1 -0
- package/dist/esm/internal/DueOccurrences.js +55 -0
- package/dist/esm/internal/DueOccurrences.js.map +1 -0
- package/dist/esm/internal/WallClock.d.ts +59 -0
- package/dist/esm/internal/WallClock.d.ts.map +1 -0
- package/dist/esm/internal/WallClock.js +155 -0
- package/dist/esm/internal/WallClock.js.map +1 -0
- package/dist/esm/migrations/0001_triggers.d.ts +15 -0
- package/dist/esm/migrations/0001_triggers.d.ts.map +1 -0
- package/dist/esm/migrations/0001_triggers.js +42 -0
- package/dist/esm/migrations/0001_triggers.js.map +1 -0
- package/dist/esm/migrations/0002_reservation_lease.d.ts +15 -0
- package/dist/esm/migrations/0002_reservation_lease.d.ts.map +1 -0
- package/dist/esm/migrations/0002_reservation_lease.js +19 -0
- package/dist/esm/migrations/0002_reservation_lease.js.map +1 -0
- package/dist/esm/migrations/0003_heartbeat.d.ts +16 -0
- package/dist/esm/migrations/0003_heartbeat.d.ts.map +1 -0
- package/dist/esm/migrations/0003_heartbeat.js +23 -0
- package/dist/esm/migrations/0003_heartbeat.js.map +1 -0
- package/dist/esm/migrations/0004_fire_run_index.d.ts +17 -0
- package/dist/esm/migrations/0004_fire_run_index.d.ts.map +1 -0
- package/dist/esm/migrations/0004_fire_run_index.js +20 -0
- package/dist/esm/migrations/0004_fire_run_index.js.map +1 -0
- package/dist/esm/migrations/index.d.ts +33 -0
- package/dist/esm/migrations/index.d.ts.map +1 -0
- package/dist/esm/migrations/index.js +37 -0
- package/dist/esm/migrations/index.js.map +1 -0
- package/dist/esm/test/TestTriggers.d.ts +12 -0
- package/dist/esm/test/TestTriggers.d.ts.map +1 -0
- package/dist/esm/test/TestTriggers.js +439 -0
- package/dist/esm/test/TestTriggers.js.map +1 -0
- package/docs/README.md +140 -0
- package/docs/api.md +1186 -0
- package/docs/concepts/channels.md +103 -0
- package/docs/concepts/claim-protocol.md +229 -0
- package/docs/concepts/policies.md +124 -0
- package/docs/concepts/schedules.md +134 -0
- package/docs/guides/choose-a-policy.md +113 -0
- package/docs/guides/declare-a-trigger.md +136 -0
- package/docs/guides/ingest-a-webhook.md +164 -0
- package/docs/guides/run-the-scheduler.md +173 -0
- package/docs/guides/testing.md +157 -0
- package/docs/installation.md +81 -0
- package/docs/quickstart.md +163 -0
- package/docs/troubleshooting.md +281 -0
- package/package.json +241 -3
- package/src/CatchUp.ts +73 -0
- package/src/Channel.ts +121 -0
- package/src/ClaimDecision.ts +303 -0
- package/src/Cron.ts +173 -0
- package/src/DispatchReader.ts +179 -0
- package/src/Overlap.ts +53 -0
- package/src/Schedule.ts +112 -0
- package/src/Scheduler.ts +1154 -0
- package/src/SqlTriggerStore.ts +638 -0
- package/src/Trigger.ts +84 -0
- package/src/TriggerError.ts +129 -0
- package/src/TriggerStore.ts +514 -0
- package/src/Webhook.ts +270 -0
- package/src/index.ts +30 -0
- package/src/internal/ActiveRuns.ts +83 -0
- package/src/internal/DueOccurrences.ts +101 -0
- package/src/internal/WallClock.ts +172 -0
- package/src/migrations/0001_triggers.ts +43 -0
- package/src/migrations/0002_reservation_lease.ts +20 -0
- package/src/migrations/0003_heartbeat.ts +24 -0
- package/src/migrations/0004_fire_run_index.ts +21 -0
- package/src/migrations/index.ts +40 -0
- package/src/test/TestTriggers.ts +563 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable trigger declarations.
|
|
3
|
+
*
|
|
4
|
+
* @see packages/smithers/agent/triggers/docs/api.md
|
|
5
|
+
*
|
|
6
|
+
* @since 0.1.0
|
|
7
|
+
*/
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import * as Schema from "effect/Schema";
|
|
10
|
+
import * as Schedule from "./Schedule.ts";
|
|
11
|
+
import { type TriggerError } from "./TriggerError.ts";
|
|
12
|
+
/**
|
|
13
|
+
* How a trigger behaves when an occurrence arrives while its previous run
|
|
14
|
+
* is still going.
|
|
15
|
+
*
|
|
16
|
+
* @category schemas
|
|
17
|
+
* @since 0.1.0
|
|
18
|
+
*/
|
|
19
|
+
export declare const Overlap: Schema.Literals<readonly ["skip", "buffer-one", "supersede"]>;
|
|
20
|
+
/**
|
|
21
|
+
* The decoded form of {@link Overlap}.
|
|
22
|
+
*
|
|
23
|
+
* @category models
|
|
24
|
+
* @since 0.1.0
|
|
25
|
+
*/
|
|
26
|
+
export type Overlap = Schedule.Overlap;
|
|
27
|
+
/**
|
|
28
|
+
* How many missed occurrences a trigger owes after downtime.
|
|
29
|
+
*
|
|
30
|
+
* @category schemas
|
|
31
|
+
* @since 0.1.0
|
|
32
|
+
*/
|
|
33
|
+
export declare const CatchUp: Schema.Literals<readonly ["none", "one", "all"]>;
|
|
34
|
+
/**
|
|
35
|
+
* The decoded form of {@link CatchUp}.
|
|
36
|
+
*
|
|
37
|
+
* @category models
|
|
38
|
+
* @since 0.1.0
|
|
39
|
+
*/
|
|
40
|
+
export type CatchUp = Schedule.CatchUp;
|
|
41
|
+
/**
|
|
42
|
+
* A trigger declaration: which flow to run, with what input, on what
|
|
43
|
+
* schedule.
|
|
44
|
+
*
|
|
45
|
+
* `input` is JSON rather than `unknown` because the store persists it with
|
|
46
|
+
* `JSON.stringify` into a `NOT NULL` column. The schema refuses `undefined`,
|
|
47
|
+
* `NaN`, a `Date`, and functions at the declaration boundary.
|
|
48
|
+
* Enumerable getters are accepted when their values are JSON. They are
|
|
49
|
+
* evaluated during decoding and again during SQL serialization. Every store
|
|
50
|
+
* takes an eager serialized snapshot before returning its Effect; use plain
|
|
51
|
+
* JSON values for stable input across reads.
|
|
52
|
+
*
|
|
53
|
+
* @category schemas
|
|
54
|
+
* @since 0.1.0
|
|
55
|
+
*/
|
|
56
|
+
export declare const Trigger: Schema.Struct<{
|
|
57
|
+
readonly enabled: Schema.Boolean;
|
|
58
|
+
readonly cron: Schema.NonEmptyString;
|
|
59
|
+
readonly timezone: Schema.optional<Schema.NonEmptyString>;
|
|
60
|
+
readonly overlap: Schema.withDecodingDefault<Schema.Literals<readonly ["skip", "buffer-one", "supersede"]>, never>;
|
|
61
|
+
readonly catchUp: Schema.withDecodingDefault<Schema.Literals<readonly ["none", "one", "all"]>, never>;
|
|
62
|
+
readonly maxCatchUp: Schema.withDecodingDefault<Schema.Int, never>;
|
|
63
|
+
readonly id: Schema.NonEmptyString;
|
|
64
|
+
readonly flowId: Schema.NonEmptyString;
|
|
65
|
+
readonly input: Schema.Codec<Schema.Json, Schema.Json, never, never>;
|
|
66
|
+
}>;
|
|
67
|
+
/**
|
|
68
|
+
* The decoded form of {@link Trigger}.
|
|
69
|
+
*
|
|
70
|
+
* @category models
|
|
71
|
+
* @since 0.1.0
|
|
72
|
+
*/
|
|
73
|
+
export type Trigger = typeof Trigger.Type;
|
|
74
|
+
/**
|
|
75
|
+
* Decodes and validates a trigger declaration.
|
|
76
|
+
*
|
|
77
|
+
* @category constructors
|
|
78
|
+
* @since 0.1.0
|
|
79
|
+
*/
|
|
80
|
+
export declare const make: (input: unknown) => Effect.Effect<Trigger, TriggerError>;
|
|
81
|
+
//# sourceMappingURL=Trigger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Trigger.d.ts","sourceRoot":"","sources":["../../src/Trigger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEtE;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,+DAAmB,CAAA;AACvC;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAA;AACtC;;;;;GAKG;AACH,eAAO,MAAM,OAAO,kDAAmB,CAAA;AACvC;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAA;AAEtC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;EAMlB,CAAA;AACF;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,OAAO,OAAO,KAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAItE,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var Trigger_exports = {};
|
|
30
|
+
__export(Trigger_exports, {
|
|
31
|
+
CatchUp: () => CatchUp,
|
|
32
|
+
Overlap: () => Overlap,
|
|
33
|
+
Trigger: () => Trigger,
|
|
34
|
+
make: () => make
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(Trigger_exports);
|
|
37
|
+
var Effect = __toESM(require("effect/Effect"), 1);
|
|
38
|
+
var Schema = __toESM(require("effect/Schema"), 1);
|
|
39
|
+
var Schedule = __toESM(require("./Schedule.js"), 1);
|
|
40
|
+
var import_TriggerError = require("./TriggerError.js");
|
|
41
|
+
const Overlap = Schedule.Overlap;
|
|
42
|
+
const CatchUp = Schedule.CatchUp;
|
|
43
|
+
const Trigger = Schema.Struct({
|
|
44
|
+
id: Schema.NonEmptyString,
|
|
45
|
+
flowId: Schema.NonEmptyString,
|
|
46
|
+
input: Schema.Json,
|
|
47
|
+
...Schedule.Schedule.fields,
|
|
48
|
+
enabled: Schema.Boolean
|
|
49
|
+
});
|
|
50
|
+
const make = (input) => Schema.decodeUnknownEffect(Trigger)(input).pipe(
|
|
51
|
+
Effect.mapError((cause) => (0, import_TriggerError.fromSchemaError)("invalid_trigger", "Trigger declaration is invalid", cause)),
|
|
52
|
+
Effect.flatMap(Schedule.validate)
|
|
53
|
+
);
|
|
54
|
+
//# sourceMappingURL=Trigger.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/Trigger.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Durable trigger declarations.\n *\n * @see packages/smithers/agent/triggers/docs/api.md\n *\n * @since 0.1.0\n */\n\nimport * as Effect from \"effect/Effect\"\nimport * as Schema from \"effect/Schema\"\nimport * as Schedule from \"./Schedule.ts\"\nimport { fromSchemaError, type TriggerError } from \"./TriggerError.ts\"\n\n/**\n * How a trigger behaves when an occurrence arrives while its previous run\n * is still going.\n *\n * @category schemas\n * @since 0.1.0\n */\nexport const Overlap = Schedule.Overlap\n/**\n * The decoded form of {@link Overlap}.\n *\n * @category models\n * @since 0.1.0\n */\nexport type Overlap = Schedule.Overlap\n/**\n * How many missed occurrences a trigger owes after downtime.\n *\n * @category schemas\n * @since 0.1.0\n */\nexport const CatchUp = Schedule.CatchUp\n/**\n * The decoded form of {@link CatchUp}.\n *\n * @category models\n * @since 0.1.0\n */\nexport type CatchUp = Schedule.CatchUp\n\n/**\n * A trigger declaration: which flow to run, with what input, on what\n * schedule.\n *\n * `input` is JSON rather than `unknown` because the store persists it with\n * `JSON.stringify` into a `NOT NULL` column. The schema refuses `undefined`,\n * `NaN`, a `Date`, and functions at the declaration boundary.\n * Enumerable getters are accepted when their values are JSON. They are\n * evaluated during decoding and again during SQL serialization. Every store\n * takes an eager serialized snapshot before returning its Effect; use plain\n * JSON values for stable input across reads.\n *\n * @category schemas\n * @since 0.1.0\n */\nexport const Trigger = Schema.Struct({\n id: Schema.NonEmptyString,\n flowId: Schema.NonEmptyString,\n input: Schema.Json,\n ...Schedule.Schedule.fields,\n enabled: Schema.Boolean\n})\n/**\n * The decoded form of {@link Trigger}.\n *\n * @category models\n * @since 0.1.0\n */\nexport type Trigger = typeof Trigger.Type\n\n/**\n * Decodes and validates a trigger declaration.\n *\n * @category constructors\n * @since 0.1.0\n */\nexport const make = (input: unknown): Effect.Effect<Trigger, TriggerError> =>\n Schema.decodeUnknownEffect(Trigger)(input).pipe(\n Effect.mapError((cause) => fromSchemaError(\"invalid_trigger\", \"Trigger declaration is invalid\", cause)),\n Effect.flatMap(Schedule.validate)\n )\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,aAAwB;AACxB,aAAwB;AACxB,eAA0B;AAC1B,0BAAmD;AAS5C,MAAM,UAAU,SAAS;AAczB,MAAM,UAAU,SAAS;AAwBzB,MAAM,UAAU,OAAO,OAAO;AAAA,EACnC,IAAI,OAAO;AAAA,EACX,QAAQ,OAAO;AAAA,EACf,OAAO,OAAO;AAAA,EACd,GAAG,SAAS,SAAS;AAAA,EACrB,SAAS,OAAO;AAClB,CAAC;AAeM,MAAM,OAAO,CAAC,UACnB,OAAO,oBAAoB,OAAO,EAAE,KAAK,EAAE;AAAA,EACzC,OAAO,SAAS,CAAC,cAAU,qCAAgB,mBAAmB,kCAAkC,KAAK,CAAC;AAAA,EACtG,OAAO,QAAQ,SAAS,QAAQ;AAClC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stable trigger failures.
|
|
3
|
+
*
|
|
4
|
+
* @see packages/smithers/agent/triggers/docs/api.md
|
|
5
|
+
*
|
|
6
|
+
* @since 0.1.0
|
|
7
|
+
*/
|
|
8
|
+
import * as Schema from "effect/Schema";
|
|
9
|
+
/**
|
|
10
|
+
* Stable trigger failure codes.
|
|
11
|
+
*
|
|
12
|
+
* Each code names one refusal a caller can branch on. `store` covers only a
|
|
13
|
+
* persistence failure the store itself raised; a Control or runner failure is
|
|
14
|
+
* `runner`, a malformed scheduler option is `invalid_options`, and a claim
|
|
15
|
+
* refused by the durable declaration is `unknown_trigger`, `trigger_disabled`,
|
|
16
|
+
* or `revision_mismatch`.
|
|
17
|
+
*
|
|
18
|
+
* @category models
|
|
19
|
+
* @since 0.1.0
|
|
20
|
+
*/
|
|
21
|
+
export declare const TriggerErrorCode: Schema.Literals<readonly ["unknown_trigger", "trigger_disabled", "revision_mismatch", "stale_owner", "invalid_schedule", "invalid_trigger", "invalid_options", "invalid_cron", "unsatisfiable_cron", "verification_failed", "catch_up_bound_exceeded", "runner", "runner_timeout", "store"]>;
|
|
22
|
+
/**
|
|
23
|
+
* Stable trigger failure code.
|
|
24
|
+
*
|
|
25
|
+
* @category models
|
|
26
|
+
* @since 0.1.0
|
|
27
|
+
*/
|
|
28
|
+
export type TriggerErrorCode = typeof TriggerErrorCode.Type;
|
|
29
|
+
declare const TriggerError_base: Schema.Class<TriggerError, Schema.TaggedStruct<"flows/triggers/TriggerError", {
|
|
30
|
+
readonly code: Schema.Literals<readonly ["unknown_trigger", "trigger_disabled", "revision_mismatch", "stale_owner", "invalid_schedule", "invalid_trigger", "invalid_options", "invalid_cron", "unsatisfiable_cron", "verification_failed", "catch_up_bound_exceeded", "runner", "runner_timeout", "store"]>;
|
|
31
|
+
readonly message: Schema.String;
|
|
32
|
+
readonly path: Schema.optional<Schema.String>;
|
|
33
|
+
readonly cause: Schema.optional<Schema.Defect>;
|
|
34
|
+
}>, import("effect/Cause").YieldableError>;
|
|
35
|
+
/**
|
|
36
|
+
* A typed schedule, verification, or persistence failure.
|
|
37
|
+
*
|
|
38
|
+
* `path` is the dotted field path a declaration failure belongs to, so a
|
|
39
|
+
* caller reads the offending field structurally instead of parsing `message`.
|
|
40
|
+
*
|
|
41
|
+
* @category errors
|
|
42
|
+
* @since 0.1.0
|
|
43
|
+
*/
|
|
44
|
+
export declare class TriggerError extends TriggerError_base {
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Builds a declaration failure that names the offending field.
|
|
48
|
+
*
|
|
49
|
+
* The whole `SchemaError` is deliberately not kept as the cause: serializing
|
|
50
|
+
* one costs about five kilobytes of schema AST per failure, and every byte of
|
|
51
|
+
* it past the rendered issue tree repeats what the tree already says.
|
|
52
|
+
*
|
|
53
|
+
* @category constructors
|
|
54
|
+
* @since 0.1.0
|
|
55
|
+
*/
|
|
56
|
+
export declare const fromSchemaError: (code: TriggerErrorCode, summary: string, error: unknown) => TriggerError;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=TriggerError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerError.d.ts","sourceRoot":"","sources":["../../src/TriggerError.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,8RAe3B,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;;;;;;;AAE3D;;;;;;;;GAQG;AACH,qBAAa,YAAa,SAAQ,iBAKhC;CAAG;AA2CL;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,gBAAgB,EACtB,SAAS,MAAM,EACf,OAAO,OAAO,KACb,YAUF,CAAA"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var TriggerError_exports = {};
|
|
30
|
+
__export(TriggerError_exports, {
|
|
31
|
+
TriggerError: () => TriggerError,
|
|
32
|
+
TriggerErrorCode: () => TriggerErrorCode,
|
|
33
|
+
fromSchemaError: () => fromSchemaError
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(TriggerError_exports);
|
|
36
|
+
var Schema = __toESM(require("effect/Schema"), 1);
|
|
37
|
+
const TriggerErrorCode = Schema.Literals([
|
|
38
|
+
"unknown_trigger",
|
|
39
|
+
"trigger_disabled",
|
|
40
|
+
"revision_mismatch",
|
|
41
|
+
"stale_owner",
|
|
42
|
+
"invalid_schedule",
|
|
43
|
+
"invalid_trigger",
|
|
44
|
+
"invalid_options",
|
|
45
|
+
"invalid_cron",
|
|
46
|
+
"unsatisfiable_cron",
|
|
47
|
+
"verification_failed",
|
|
48
|
+
"catch_up_bound_exceeded",
|
|
49
|
+
"runner",
|
|
50
|
+
"runner_timeout",
|
|
51
|
+
"store"
|
|
52
|
+
]);
|
|
53
|
+
class TriggerError extends Schema.TaggedError()("flows/triggers/TriggerError", {
|
|
54
|
+
code: TriggerErrorCode,
|
|
55
|
+
message: Schema.String,
|
|
56
|
+
path: Schema.optional(Schema.String),
|
|
57
|
+
cause: Schema.optional(Schema.Defect())
|
|
58
|
+
}) {
|
|
59
|
+
}
|
|
60
|
+
const issuePath = (issue) => {
|
|
61
|
+
if (typeof issue !== "object" || issue === null) return void 0;
|
|
62
|
+
const node = issue;
|
|
63
|
+
const segments = Array.isArray(node.path) ? node.path.map((segment) => String(segment)) : [];
|
|
64
|
+
const children = Array.isArray(node.issues) ? node.issues : node.issue === void 0 ? [] : [node.issue];
|
|
65
|
+
for (const child of children) {
|
|
66
|
+
const nested = issuePath(child);
|
|
67
|
+
if (nested !== void 0) return [...segments, ...nested];
|
|
68
|
+
}
|
|
69
|
+
return segments.length === 0 ? void 0 : segments;
|
|
70
|
+
};
|
|
71
|
+
const summarize = (error) => String(error).replace(/^SchemaError\(/, "").replace(/\)$/, "").replace(/\s*\n\s*/g, " ").trim();
|
|
72
|
+
const fromSchemaError = (code, summary, error) => {
|
|
73
|
+
const path = issuePath(error?.issue);
|
|
74
|
+
const detail = summarize(error);
|
|
75
|
+
const field = path === void 0 ? void 0 : path.join(".");
|
|
76
|
+
return new TriggerError({
|
|
77
|
+
code,
|
|
78
|
+
message: field === void 0 ? `${summary}: ${detail}` : `${summary} at ${field}: ${detail}`,
|
|
79
|
+
...field === void 0 ? {} : { path: field },
|
|
80
|
+
cause: detail
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=TriggerError.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/TriggerError.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Stable trigger failures.\n *\n * @see packages/smithers/agent/triggers/docs/api.md\n *\n * @since 0.1.0\n */\n\nimport * as Schema from \"effect/Schema\"\n\n/**\n * Stable trigger failure codes.\n *\n * Each code names one refusal a caller can branch on. `store` covers only a\n * persistence failure the store itself raised; a Control or runner failure is\n * `runner`, a malformed scheduler option is `invalid_options`, and a claim\n * refused by the durable declaration is `unknown_trigger`, `trigger_disabled`,\n * or `revision_mismatch`.\n *\n * @category models\n * @since 0.1.0\n */\nexport const TriggerErrorCode = Schema.Literals([\n \"unknown_trigger\",\n \"trigger_disabled\",\n \"revision_mismatch\",\n \"stale_owner\",\n \"invalid_schedule\",\n \"invalid_trigger\",\n \"invalid_options\",\n \"invalid_cron\",\n \"unsatisfiable_cron\",\n \"verification_failed\",\n \"catch_up_bound_exceeded\",\n \"runner\",\n \"runner_timeout\",\n \"store\"\n])\n\n/**\n * Stable trigger failure code.\n *\n * @category models\n * @since 0.1.0\n */\nexport type TriggerErrorCode = typeof TriggerErrorCode.Type\n\n/**\n * A typed schedule, verification, or persistence failure.\n *\n * `path` is the dotted field path a declaration failure belongs to, so a\n * caller reads the offending field structurally instead of parsing `message`.\n *\n * @category errors\n * @since 0.1.0\n */\nexport class TriggerError extends Schema.TaggedError<TriggerError>()(\"flows/triggers/TriggerError\", {\n code: TriggerErrorCode,\n message: Schema.String,\n path: Schema.optional(Schema.String),\n cause: Schema.optional(Schema.Defect())\n}) {}\n\n/**\n * Walks a schema issue tree for the path of the first offending value.\n *\n * The tree is read defensively: only `path`, `issue`, and `issues` are\n * consulted, so an issue shape this function does not recognize degrades to\n * \"no path\" rather than throwing inside an error constructor.\n */\nconst issuePath = (issue: unknown): ReadonlyArray<string> | undefined => {\n if (typeof issue !== \"object\" || issue === null) return undefined\n const node = issue as {\n readonly path?: unknown\n readonly issue?: unknown\n readonly issues?: unknown\n }\n const segments = Array.isArray(node.path) ? node.path.map((segment) => String(segment)) : []\n const children = Array.isArray(node.issues)\n ? node.issues\n : node.issue === undefined\n ? []\n : [node.issue]\n for (const child of children) {\n const nested = issuePath(child)\n if (nested !== undefined) return [...segments, ...nested]\n }\n return segments.length === 0 ? undefined : segments\n}\n\n/**\n * Renders a schema decode failure as one line, without the offending value.\n *\n * The rendered issue tree names the expectation and the path only, which is\n * what makes it safe to keep in `message` and in `cause`: a secret submitted\n * in the declaration never reaches either.\n */\nconst summarize = (error: unknown): string =>\n String(error)\n .replace(/^SchemaError\\(/, \"\")\n .replace(/\\)$/, \"\")\n .replace(/\\s*\\n\\s*/g, \" \")\n .trim()\n\n/**\n * Builds a declaration failure that names the offending field.\n *\n * The whole `SchemaError` is deliberately not kept as the cause: serializing\n * one costs about five kilobytes of schema AST per failure, and every byte of\n * it past the rendered issue tree repeats what the tree already says.\n *\n * @category constructors\n * @since 0.1.0\n */\nexport const fromSchemaError = (\n code: TriggerErrorCode,\n summary: string,\n error: unknown\n): TriggerError => {\n const path = issuePath((error as { readonly issue?: unknown } | null)?.issue)\n const detail = summarize(error)\n const field = path === undefined ? undefined : path.join(\".\")\n return new TriggerError({\n code,\n message: field === undefined ? `${summary}: ${detail}` : `${summary} at ${field}: ${detail}`,\n ...(field === undefined ? {} : { path: field }),\n cause: detail\n })\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,aAAwB;AAcjB,MAAM,mBAAmB,OAAO,SAAS;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAmBM,MAAM,qBAAqB,OAAO,YAA0B,EAAE,+BAA+B;AAAA,EAClG,MAAM;AAAA,EACN,SAAS,OAAO;AAAA,EAChB,MAAM,OAAO,SAAS,OAAO,MAAM;AAAA,EACnC,OAAO,OAAO,SAAS,OAAO,OAAO,CAAC;AACxC,CAAC,EAAE;AAAC;AASJ,MAAM,YAAY,CAAC,UAAsD;AACvE,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,QAAM,OAAO;AAKb,QAAM,WAAW,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,YAAY,OAAO,OAAO,CAAC,IAAI,CAAC;AAC3F,QAAM,WAAW,MAAM,QAAQ,KAAK,MAAM,IACtC,KAAK,SACL,KAAK,UAAU,SACf,CAAC,IACD,CAAC,KAAK,KAAK;AACf,aAAW,SAAS,UAAU;AAC5B,UAAM,SAAS,UAAU,KAAK;AAC9B,QAAI,WAAW,OAAW,QAAO,CAAC,GAAG,UAAU,GAAG,MAAM;AAAA,EAC1D;AACA,SAAO,SAAS,WAAW,IAAI,SAAY;AAC7C;AASA,MAAM,YAAY,CAAC,UACjB,OAAO,KAAK,EACT,QAAQ,kBAAkB,EAAE,EAC5B,QAAQ,OAAO,EAAE,EACjB,QAAQ,aAAa,GAAG,EACxB,KAAK;AAYH,MAAM,kBAAkB,CAC7B,MACA,SACA,UACiB;AACjB,QAAM,OAAO,UAAW,OAA+C,KAAK;AAC5E,QAAM,SAAS,UAAU,KAAK;AAC9B,QAAM,QAAQ,SAAS,SAAY,SAAY,KAAK,KAAK,GAAG;AAC5D,SAAO,IAAI,aAAa;AAAA,IACtB;AAAA,IACA,SAAS,UAAU,SAAY,GAAG,OAAO,KAAK,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,KAAK,MAAM;AAAA,IAC1F,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM,MAAM;AAAA,IAC7C,OAAO;AAAA,EACT,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|