@usine/config 0.2.1 → 0.4.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/LICENSE +661 -21
- package/README.md +32 -18
- package/dist/agent.d.ts +2 -3
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +2 -3
- package/dist/agent.js.map +1 -1
- package/dist/board.d.ts +11 -6
- package/dist/board.d.ts.map +1 -1
- package/dist/board.js +11 -6
- package/dist/board.js.map +1 -1
- package/dist/checks.d.ts +3 -0
- package/dist/checks.d.ts.map +1 -1
- package/dist/checks.js +3 -0
- package/dist/checks.js.map +1 -1
- package/dist/factory.d.ts +258 -22
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +270 -30
- package/dist/factory.js.map +1 -1
- package/dist/file.d.ts +3 -3
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +3 -3
- package/dist/file.js.map +1 -1
- package/dist/frontmatter.d.ts +1 -1
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/frontmatter.js +1 -1
- package/dist/frontmatter.js.map +1 -1
- package/dist/instance/diagnostics.d.ts +1 -1
- package/dist/instance/diagnostics.d.ts.map +1 -1
- package/dist/instance/diagnostics.js +1 -1
- package/dist/instance/diagnostics.js.map +1 -1
- package/dist/instance/instance.d.ts +1 -1
- package/dist/instance/instance.d.ts.map +1 -1
- package/dist/instance/instance.js +2 -2
- package/dist/instance/instance.js.map +1 -1
- package/dist/instance/references.d.ts +5 -6
- package/dist/instance/references.d.ts.map +1 -1
- package/dist/instance/references.js +9 -9
- package/dist/instance/references.js.map +1 -1
- package/dist/instance-folder.d.ts +1 -1
- package/dist/instance-folder.d.ts.map +1 -1
- package/dist/instance-folder.js +13 -1
- package/dist/instance-folder.js.map +1 -1
- package/dist/label.d.ts +5 -5
- package/dist/label.d.ts.map +1 -1
- package/dist/label.js +5 -5
- package/dist/label.js.map +1 -1
- package/dist/loop.d.ts +12 -3
- package/dist/loop.d.ts.map +1 -1
- package/dist/loop.js +14 -6
- package/dist/loop.js.map +1 -1
- package/dist/parser.d.ts +6 -6
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +30 -11
- package/dist/parser.js.map +1 -1
- package/dist/payload-slices.d.ts +4 -7
- package/dist/payload-slices.d.ts.map +1 -1
- package/dist/payload-slices.js +30 -25
- package/dist/payload-slices.js.map +1 -1
- package/dist/selector.d.ts +6 -3
- package/dist/selector.d.ts.map +1 -1
- package/dist/selector.js +10 -6
- package/dist/selector.js.map +1 -1
- package/dist/trigger.d.ts +4 -7
- package/dist/trigger.d.ts.map +1 -1
- package/dist/trigger.js +6 -9
- package/dist/trigger.js.map +1 -1
- package/dist/yaml/document.d.ts +2 -2
- package/dist/yaml/document.js +3 -3
- package/dist/yaml/document.js.map +1 -1
- package/dist/yaml/writer.d.ts +4 -4
- package/dist/yaml/writer.d.ts.map +1 -1
- package/dist/yaml/writer.js +5 -6
- package/dist/yaml/writer.js.map +1 -1
- package/package.json +12 -11
package/dist/payload-slices.js
CHANGED
|
@@ -4,7 +4,11 @@ import { Schema } from "effect";
|
|
|
4
4
|
const reference = Schema.decodeUnknownSync(TypeReference);
|
|
5
5
|
const objectType = (name, fields) => new ObjectType({
|
|
6
6
|
name,
|
|
7
|
-
fields: fields.map(([fieldName, fieldType]) => new ObjectField({
|
|
7
|
+
fields: fields.map(([fieldName, fieldType, nullability]) => new ObjectField({
|
|
8
|
+
name: fieldName,
|
|
9
|
+
type: reference(fieldType),
|
|
10
|
+
nullable: nullability === "nullable",
|
|
11
|
+
})),
|
|
8
12
|
});
|
|
9
13
|
const actor = objectType("Actor", [["login", "string"]]);
|
|
10
14
|
const label = objectType("Label", [["name", "string"]]);
|
|
@@ -25,7 +29,7 @@ const assignees = objectType("Assignees", [
|
|
|
25
29
|
["nodes", "list<Actor>"],
|
|
26
30
|
]);
|
|
27
31
|
const issueComment = objectType("IssueComment", [
|
|
28
|
-
["author", "Actor"],
|
|
32
|
+
["author", "Actor", "nullable"],
|
|
29
33
|
["body", "string"],
|
|
30
34
|
["createdAt", "string"],
|
|
31
35
|
]);
|
|
@@ -49,37 +53,39 @@ const issue = objectType("IssuePayload", [
|
|
|
49
53
|
["body", "string"],
|
|
50
54
|
["url", "string"],
|
|
51
55
|
["state", "string"],
|
|
52
|
-
["stateReason", "string"],
|
|
56
|
+
["stateReason", "string", "nullable"],
|
|
53
57
|
["createdAt", "string"],
|
|
54
58
|
["updatedAt", "string"],
|
|
55
|
-
["closedAt", "string"],
|
|
56
|
-
["author", "Actor"],
|
|
57
|
-
["issueType", "IssueType"],
|
|
58
|
-
["milestone", "Milestone"],
|
|
59
|
+
["closedAt", "string", "nullable"],
|
|
60
|
+
["author", "Actor", "nullable"],
|
|
61
|
+
["issueType", "IssueType", "nullable"],
|
|
62
|
+
["milestone", "Milestone", "nullable"],
|
|
59
63
|
["labels", "Labels"],
|
|
60
64
|
["assignees", "Assignees"],
|
|
61
65
|
["comments", "IssueComments"],
|
|
62
66
|
["closedByPullRequestsReferences", "PullRequestReferences"],
|
|
63
67
|
]);
|
|
64
|
-
const requestedReviewer = objectType("RequestedReviewer", [["login", "string"]]);
|
|
65
|
-
const reviewRequest = objectType("ReviewRequest", [
|
|
68
|
+
const requestedReviewer = objectType("RequestedReviewer", [["login", "string", "nullable"]]);
|
|
69
|
+
const reviewRequest = objectType("ReviewRequest", [
|
|
70
|
+
["requestedReviewer", "RequestedReviewer", "nullable"],
|
|
71
|
+
]);
|
|
66
72
|
const reviewRequests = objectType("ReviewRequests", [
|
|
67
73
|
["totalCount", "int"],
|
|
68
74
|
["nodes", "list<ReviewRequest>"],
|
|
69
75
|
]);
|
|
70
76
|
const review = objectType("Review", [
|
|
71
|
-
["author", "Actor"],
|
|
77
|
+
["author", "Actor", "nullable"],
|
|
72
78
|
["state", "string"],
|
|
73
79
|
["body", "string"],
|
|
74
|
-
["submittedAt", "string"],
|
|
75
|
-
["commit", "Commit"],
|
|
80
|
+
["submittedAt", "string", "nullable"],
|
|
81
|
+
["commit", "Commit", "nullable"],
|
|
76
82
|
]);
|
|
77
83
|
const reviews = objectType("Reviews", [
|
|
78
84
|
["totalCount", "int"],
|
|
79
85
|
["nodes", "list<Review>"],
|
|
80
86
|
]);
|
|
81
87
|
const reviewThreadComment = objectType("ReviewThreadComment", [
|
|
82
|
-
["author", "Actor"],
|
|
88
|
+
["author", "Actor", "nullable"],
|
|
83
89
|
["body", "string"],
|
|
84
90
|
]);
|
|
85
91
|
const reviewThreadComments = objectType("ReviewThreadComments", [
|
|
@@ -97,7 +103,7 @@ const reviewThreads = objectType("ReviewThreads", [
|
|
|
97
103
|
["nodes", "list<ReviewThread>"],
|
|
98
104
|
]);
|
|
99
105
|
const pullRequestComment = objectType("PullRequestComment", [
|
|
100
|
-
["author", "Actor"],
|
|
106
|
+
["author", "Actor", "nullable"],
|
|
101
107
|
["body", "string"],
|
|
102
108
|
["createdAt", "string"],
|
|
103
109
|
]);
|
|
@@ -124,16 +130,18 @@ const pullRequest = objectType("PullRequestPayload", [
|
|
|
124
130
|
["merged", "bool"],
|
|
125
131
|
["createdAt", "string"],
|
|
126
132
|
["updatedAt", "string"],
|
|
127
|
-
["mergedAt", "string"],
|
|
128
|
-
["author", "Actor"],
|
|
133
|
+
["mergedAt", "string", "nullable"],
|
|
134
|
+
["author", "Actor", "nullable"],
|
|
129
135
|
["baseRefName", "string"],
|
|
130
136
|
["headRefName", "string"],
|
|
131
137
|
["headRefOid", "string"],
|
|
132
138
|
["additions", "int"],
|
|
133
139
|
["deletions", "int"],
|
|
134
140
|
["changedFiles", "int"],
|
|
135
|
-
["reviewDecision", "string"],
|
|
136
|
-
["
|
|
141
|
+
["reviewDecision", "string", "nullable"],
|
|
142
|
+
["mergeable", "string"],
|
|
143
|
+
["mergeStateStatus", "string"],
|
|
144
|
+
["statusCheckRollup", "StatusCheckRollup", "nullable"],
|
|
137
145
|
["labels", "Labels"],
|
|
138
146
|
["reviewRequests", "ReviewRequests"],
|
|
139
147
|
["reviews", "Reviews"],
|
|
@@ -155,7 +163,7 @@ const environment = (types, itemType) => new Environment({
|
|
|
155
163
|
new Variable({ name: "item", type: reference(itemType) }),
|
|
156
164
|
],
|
|
157
165
|
});
|
|
158
|
-
/** The CEL environment for issue triggers
|
|
166
|
+
/** The CEL environment for issue triggers, with the issue payload slice as `item`. */
|
|
159
167
|
export const issueEnvironment = environment([
|
|
160
168
|
actor,
|
|
161
169
|
label,
|
|
@@ -169,7 +177,7 @@ export const issueEnvironment = environment([
|
|
|
169
177
|
pullRequestReferences,
|
|
170
178
|
issue,
|
|
171
179
|
], "IssuePayload");
|
|
172
|
-
/** The CEL environment for pull-request triggers
|
|
180
|
+
/** The CEL environment for pull-request triggers, with the pull-request payload slice as `item`. */
|
|
173
181
|
export const pullRequestEnvironment = environment([
|
|
174
182
|
actor,
|
|
175
183
|
label,
|
|
@@ -191,7 +199,7 @@ export const pullRequestEnvironment = environment([
|
|
|
191
199
|
statusCheckRollup,
|
|
192
200
|
pullRequest,
|
|
193
201
|
], "PullRequestPayload");
|
|
194
|
-
/** The CEL environment for schedule triggers
|
|
202
|
+
/** The CEL environment for schedule triggers; `item.tick` has `scheduledAt`, `scheduledAtLocal`, `cron`, and `tz`. */
|
|
195
203
|
export const scheduleEnvironment = environment([tick, schedule], "SchedulePayload");
|
|
196
204
|
export const environmentFor = (stream) => {
|
|
197
205
|
switch (stream) {
|
|
@@ -203,10 +211,7 @@ export const environmentFor = (stream) => {
|
|
|
203
211
|
return scheduleEnvironment;
|
|
204
212
|
}
|
|
205
213
|
};
|
|
206
|
-
/**
|
|
207
|
-
* The value of the CEL `repo` variable. A field added here must also be added
|
|
208
|
-
* to the `RepoContext` type, and the reverse.
|
|
209
|
-
*/
|
|
214
|
+
/** Returns the value of the CEL `repo` variable; its fields must match the `RepoContext` type. */
|
|
210
215
|
export const repositoryContext = (repository) => {
|
|
211
216
|
const { owner } = splitRepositoryName(repository.name);
|
|
212
217
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload-slices.js","sourceRoot":"","sources":["../src/payload-slices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACb,QAAQ,GACT,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"payload-slices.js","sourceRoot":"","sources":["../src/payload-slices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACb,QAAQ,GACT,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;AAK1D,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,MAAuC,EAAc,EAAE,CACvF,IAAI,UAAU,CAAC;IACb,IAAI;IACJ,MAAM,EAAE,MAAM,CAAC,GAAG,CAChB,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE,CACtC,IAAI,WAAW,CAAC;QACd,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC;QAC1B,QAAQ,EAAE,WAAW,KAAK,UAAU;KACrC,CAAC,CACL;CACF,CAAC,CAAC;AAEL,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACzD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxD,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACjE,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChE,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACzD,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,EAAE;IACrC,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnB,CAAC,KAAK,EAAE,QAAQ,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE;IAClC,CAAC,YAAY,EAAE,KAAK,CAAC;IACrB,CAAC,OAAO,EAAE,aAAa,CAAC;CACzB,CAAC,CAAC;AACH,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE;IACxC,CAAC,YAAY,EAAE,KAAK,CAAC;IACrB,CAAC,OAAO,EAAE,aAAa,CAAC;CACzB,CAAC,CAAC;AACH,MAAM,YAAY,GAAG,UAAU,CAAC,cAAc,EAAE;IAC9C,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;IAC/B,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,WAAW,EAAE,QAAQ,CAAC;CACxB,CAAC,CAAC;AACH,MAAM,aAAa,GAAG,UAAU,CAAC,eAAe,EAAE;IAChD,CAAC,YAAY,EAAE,KAAK,CAAC;IACrB,CAAC,OAAO,EAAE,oBAAoB,CAAC;CAChC,CAAC,CAAC;AACH,MAAM,oBAAoB,GAAG,UAAU,CAAC,sBAAsB,EAAE;IAC9D,CAAC,QAAQ,EAAE,KAAK,CAAC;IACjB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnB,CAAC,SAAS,EAAE,MAAM,CAAC;IACnB,CAAC,KAAK,EAAE,QAAQ,CAAC;CAClB,CAAC,CAAC;AACH,MAAM,qBAAqB,GAAG,UAAU,CAAC,uBAAuB,EAAE;IAChE,CAAC,YAAY,EAAE,KAAK,CAAC;IACrB,CAAC,OAAO,EAAE,4BAA4B,CAAC;CACxC,CAAC,CAAC;AACH,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,EAAE;IACvC,CAAC,QAAQ,EAAE,KAAK,CAAC;IACjB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnB,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,KAAK,EAAE,QAAQ,CAAC;IACjB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnB,CAAC,aAAa,EAAE,QAAQ,EAAE,UAAU,CAAC;IACrC,CAAC,WAAW,EAAE,QAAQ,CAAC;IACvB,CAAC,WAAW,EAAE,QAAQ,CAAC;IACvB,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;IAClC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;IAC/B,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC;IACtC,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC;IACtC,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,UAAU,EAAE,eAAe,CAAC;IAC7B,CAAC,gCAAgC,EAAE,uBAAuB,CAAC;CAC5D,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7F,MAAM,aAAa,GAAG,UAAU,CAAC,eAAe,EAAE;IAChD,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,UAAU,CAAC;CACvD,CAAC,CAAC;AACH,MAAM,cAAc,GAAG,UAAU,CAAC,gBAAgB,EAAE;IAClD,CAAC,YAAY,EAAE,KAAK,CAAC;IACrB,CAAC,OAAO,EAAE,qBAAqB,CAAC;CACjC,CAAC,CAAC;AACH,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE;IAClC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;IAC/B,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnB,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,aAAa,EAAE,QAAQ,EAAE,UAAU,CAAC;IACrC,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC;CACjC,CAAC,CAAC;AACH,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE;IACpC,CAAC,YAAY,EAAE,KAAK,CAAC;IACrB,CAAC,OAAO,EAAE,cAAc,CAAC;CAC1B,CAAC,CAAC;AACH,MAAM,mBAAmB,GAAG,UAAU,CAAC,qBAAqB,EAAE;IAC5D,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;IAC/B,CAAC,MAAM,EAAE,QAAQ,CAAC;CACnB,CAAC,CAAC;AACH,MAAM,oBAAoB,GAAG,UAAU,CAAC,sBAAsB,EAAE;IAC9D,CAAC,YAAY,EAAE,KAAK,CAAC;IACrB,CAAC,OAAO,EAAE,2BAA2B,CAAC;CACvC,CAAC,CAAC;AACH,MAAM,YAAY,GAAG,UAAU,CAAC,cAAc,EAAE;IAC9C,CAAC,YAAY,EAAE,MAAM,CAAC;IACtB,CAAC,YAAY,EAAE,MAAM,CAAC;IACtB,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,UAAU,EAAE,sBAAsB,CAAC;CACrC,CAAC,CAAC;AACH,MAAM,aAAa,GAAG,UAAU,CAAC,eAAe,EAAE;IAChD,CAAC,YAAY,EAAE,KAAK,CAAC;IACrB,CAAC,OAAO,EAAE,oBAAoB,CAAC;CAChC,CAAC,CAAC;AACH,MAAM,kBAAkB,GAAG,UAAU,CAAC,oBAAoB,EAAE;IAC1D,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;IAC/B,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,WAAW,EAAE,QAAQ,CAAC;CACxB,CAAC,CAAC;AACH,MAAM,mBAAmB,GAAG,UAAU,CAAC,qBAAqB,EAAE;IAC5D,CAAC,YAAY,EAAE,KAAK,CAAC;IACrB,CAAC,OAAO,EAAE,0BAA0B,CAAC;CACtC,CAAC,CAAC;AACH,MAAM,qBAAqB,GAAG,UAAU,CAAC,uBAAuB,EAAE;IAChE,CAAC,QAAQ,EAAE,KAAK,CAAC;IACjB,CAAC,OAAO,EAAE,QAAQ,CAAC;CACpB,CAAC,CAAC;AACH,MAAM,sBAAsB,GAAG,UAAU,CAAC,wBAAwB,EAAE;IAClE,CAAC,YAAY,EAAE,KAAK,CAAC;IACrB,CAAC,OAAO,EAAE,6BAA6B,CAAC;CACzC,CAAC,CAAC;AACH,MAAM,iBAAiB,GAAG,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACjF,MAAM,WAAW,GAAG,UAAU,CAAC,oBAAoB,EAAE;IACnD,CAAC,QAAQ,EAAE,KAAK,CAAC;IACjB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnB,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,KAAK,EAAE,QAAQ,CAAC;IACjB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnB,CAAC,SAAS,EAAE,MAAM,CAAC;IACnB,CAAC,QAAQ,EAAE,MAAM,CAAC;IAClB,CAAC,WAAW,EAAE,QAAQ,CAAC;IACvB,CAAC,WAAW,EAAE,QAAQ,CAAC;IACvB,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;IAClC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;IAC/B,CAAC,aAAa,EAAE,QAAQ,CAAC;IACzB,CAAC,aAAa,EAAE,QAAQ,CAAC;IACzB,CAAC,YAAY,EAAE,QAAQ,CAAC;IACxB,CAAC,WAAW,EAAE,KAAK,CAAC;IACpB,CAAC,WAAW,EAAE,KAAK,CAAC;IACpB,CAAC,cAAc,EAAE,KAAK,CAAC;IACvB,CAAC,gBAAgB,EAAE,QAAQ,EAAE,UAAU,CAAC;IACxC,CAAC,WAAW,EAAE,QAAQ,CAAC;IACvB,CAAC,kBAAkB,EAAE,QAAQ,CAAC;IAC9B,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,UAAU,CAAC;IACtD,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,eAAe,EAAE,eAAe,CAAC;IAClC,CAAC,UAAU,EAAE,qBAAqB,CAAC;IACnC,CAAC,yBAAyB,EAAE,wBAAwB,CAAC;CACtD,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE;IAC9B,CAAC,aAAa,EAAE,QAAQ,CAAC;IACzB,CAAC,kBAAkB,EAAE,QAAQ,CAAC;IAC9B,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,IAAI,EAAE,QAAQ,CAAC;CACjB,CAAC,CAAC;AACH,MAAM,QAAQ,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAEnE,MAAM,WAAW,GAAG,CAAC,KAAgC,EAAE,QAAgB,EAAe,EAAE,CACtF,IAAI,WAAW,CAAC;IACd,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC;IACvB,SAAS,EAAE;QACT,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9D,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;KAC1D;CACF,CAAC,CAAC;AAEL,sFAAsF;AACtF,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CACzC;IACE,KAAK;IACL,KAAK;IACL,SAAS;IACT,SAAS;IACT,MAAM;IACN,SAAS;IACT,YAAY;IACZ,aAAa;IACb,oBAAoB;IACpB,qBAAqB;IACrB,KAAK;CACN,EACD,cAAc,CACf,CAAC;AAEF,oGAAoG;AACpG,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,CAC/C;IACE,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,iBAAiB;IACjB,aAAa;IACb,cAAc;IACd,MAAM;IACN,OAAO;IACP,mBAAmB;IACnB,oBAAoB;IACpB,YAAY;IACZ,aAAa;IACb,kBAAkB;IAClB,mBAAmB;IACnB,qBAAqB;IACrB,sBAAsB;IACtB,iBAAiB;IACjB,WAAW;CACZ,EACD,oBAAoB,CACrB,CAAC;AAEF,sHAAsH;AACtH,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAEpF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAe,EAAE;IAC5D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,gBAAgB,CAAC;QAC1B,KAAK,IAAI;YACP,OAAO,sBAAsB,CAAC;QAChC,KAAK,UAAU;YACb,OAAO,mBAAmB,CAAC;IAC/B,CAAC;AACH,CAAC,CAAC;AAEF,kGAAkG;AAClG,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,UAAuB,EAAqB,EAAE;IAC9E,MAAM,EAAE,KAAK,EAAE,GAAG,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO;QACL,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,KAAK;QACL,GAAG,EAAE,sBAAsB,UAAU,CAAC,IAAI,EAAE;KAC7C,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/selector.d.ts
CHANGED
|
@@ -4,10 +4,10 @@ declare const Selector_base: Schema.Class<Selector, Schema.Struct<{
|
|
|
4
4
|
readonly repos: Schema.OptionFromOptionalKey<Schema.$Array<Schema.brand<Schema.String, "RepositoryName">>>;
|
|
5
5
|
readonly tags: Schema.OptionFromOptionalKey<Schema.$Array<Schema.brand<Schema.String, "RegistryTag">>>;
|
|
6
6
|
}>, {}>;
|
|
7
|
-
/**
|
|
7
|
+
/** A filter that limits a Loop to registry repositories by name, by any listed tag, or both. */
|
|
8
8
|
export declare class Selector extends Selector_base {
|
|
9
9
|
}
|
|
10
|
-
/**
|
|
10
|
+
/** A selector with `repos` or `tags`; to include every repository, omit the selector. */
|
|
11
11
|
export declare const ValidSelector: Schema.decodeTo<Schema.declareConstructor<Selector, {
|
|
12
12
|
readonly repos?: readonly string[];
|
|
13
13
|
readonly tags?: readonly string[];
|
|
@@ -21,7 +21,10 @@ export declare const ValidSelector: Schema.decodeTo<Schema.declareConstructor<Se
|
|
|
21
21
|
readonly repos: Schema.OptionFromOptionalKey<Schema.$Array<Schema.brand<Schema.String, "RepositoryName">>>;
|
|
22
22
|
readonly tags: Schema.OptionFromOptionalKey<Schema.$Array<Schema.brand<Schema.String, "RegistryTag">>>;
|
|
23
23
|
}>, never, never>;
|
|
24
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Returns whether `repo` passes `selector`, matching repository names case-insensitively. If both
|
|
26
|
+
* `repos` and `tags` are set, both must match; `None` matches every repo.
|
|
27
|
+
*/
|
|
25
28
|
export declare const matchesSelector: (selector: Option.Option<Selector>, repo: ManagedRepo) => boolean;
|
|
26
29
|
export {};
|
|
27
30
|
//# sourceMappingURL=selector.d.ts.map
|
package/dist/selector.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../src/selector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../src/selector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;;;;;AAE7D,gGAAgG;AAChG,qBAAa,QAAS,SAAQ,aAU5B;CAAG;AAEL,yFAAyF;AACzF,eAAO,MAAM,aAAa;;;;;;;;;;;;iBAIzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,aAAc,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,WAAW,KAAG,OAiBnF,CAAC"}
|
package/dist/selector.js
CHANGED
|
@@ -1,23 +1,27 @@
|
|
|
1
|
-
import { RepositoryName } from "@usine/core/repository";
|
|
1
|
+
import { canonicalRepositoryName, RepositoryName } from "@usine/core/repository";
|
|
2
2
|
import { Option, Schema } from "effect";
|
|
3
|
+
import { uniqueRepositoryNames } from "./checks.js";
|
|
3
4
|
import { RegistryTag } from "./factory.js";
|
|
4
|
-
/**
|
|
5
|
+
/** A filter that limits a Loop to registry repositories by name, by any listed tag, or both. */
|
|
5
6
|
export class Selector extends Schema.Class("@usine/config/Selector")({
|
|
6
|
-
repos: Schema.OptionFromOptionalKey(Schema.Array(RepositoryName).check(Schema.isNonEmpty(),
|
|
7
|
+
repos: Schema.OptionFromOptionalKey(Schema.Array(RepositoryName).check(Schema.isNonEmpty(), uniqueRepositoryNames((name) => name))),
|
|
7
8
|
tags: Schema.OptionFromOptionalKey(Schema.Array(RegistryTag).check(Schema.isNonEmpty(), Schema.isUnique())),
|
|
8
9
|
}) {
|
|
9
10
|
}
|
|
10
|
-
/**
|
|
11
|
+
/** A selector with `repos` or `tags`; to include every repository, omit the selector. */
|
|
11
12
|
export const ValidSelector = Selector.check(Schema.makeFilter((selector) => Option.isSome(selector.repos) || Option.isSome(selector.tags), {
|
|
12
13
|
message: "Expected selector.repos, selector.tags, or both",
|
|
13
14
|
}));
|
|
14
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Returns whether `repo` passes `selector`, matching repository names case-insensitively. If both
|
|
17
|
+
* `repos` and `tags` are set, both must match; `None` matches every repo.
|
|
18
|
+
*/
|
|
15
19
|
export const matchesSelector = (selector, repo) => Option.match(selector, {
|
|
16
20
|
onNone: () => true,
|
|
17
21
|
onSome: (value) => {
|
|
18
22
|
const matchesRepo = Option.match(value.repos, {
|
|
19
23
|
onNone: () => true,
|
|
20
|
-
onSome: (repos) => repos.
|
|
24
|
+
onSome: (repos) => repos.some((name) => canonicalRepositoryName(name) === canonicalRepositoryName(repo.name)),
|
|
21
25
|
});
|
|
22
26
|
const matchesTag = Option.match(value.tags, {
|
|
23
27
|
onNone: () => true,
|
package/dist/selector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selector.js","sourceRoot":"","sources":["../src/selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"selector.js","sourceRoot":"","sources":["../src/selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,WAAW,EAAoB,MAAM,cAAc,CAAC;AAE7D,gGAAgG;AAChG,MAAM,OAAO,QAAS,SAAQ,MAAM,CAAC,KAAK,CAAW,wBAAwB,CAAC,CAAC;IAC7E,KAAK,EAAE,MAAM,CAAC,qBAAqB,CACjC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,CAChC,MAAM,CAAC,UAAU,EAAE,EACnB,qBAAqB,CAAC,CAAC,IAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,CACtD,CACF;IACD,IAAI,EAAE,MAAM,CAAC,qBAAqB,CAChC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CACxE;CACF,CAAC;CAAG;AAEL,yFAAyF;AACzF,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CACzC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC7F,OAAO,EAAE,iDAAiD;CAC3D,CAAC,CACH,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAiC,EAAE,IAAiB,EAAW,EAAE,CAC/F,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;IACrB,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI;IAClB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QAChB,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE;YAC5C,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI;YAClB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,KAAK,CAAC,IAAI,CACR,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/E;SACJ,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;YAC1C,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI;YAClB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO,WAAW,IAAI,UAAU,CAAC;IACnC,CAAC;CACF,CAAC,CAAC"}
|
package/dist/trigger.d.ts
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
|
-
/** A five-field
|
|
2
|
+
/** A five-field cron expression, evaluated in the trigger's time zone. */
|
|
3
3
|
export declare const Cron: Schema.brand<Schema.String, "Cron">;
|
|
4
4
|
export type Cron = typeof Cron.Type;
|
|
5
|
-
/** The IANA time zone whose local clock defines a schedule's firing times. */
|
|
6
5
|
export declare const TimeZone: Schema.brand<Schema.String, "TimeZone">;
|
|
7
6
|
export type TimeZone = typeof TimeZone.Type;
|
|
8
7
|
declare const IssueTrigger_base: Schema.Class<IssueTrigger, Schema.Struct<{
|
|
9
8
|
readonly on: Schema.Literal<"issue">;
|
|
10
9
|
readonly if: Schema.brand<Schema.String, "ExpressionSource">;
|
|
11
10
|
}>, {}>;
|
|
12
|
-
/**
|
|
11
|
+
/** A trigger that selects issues matching the Loop's `if` expression. */
|
|
13
12
|
export declare class IssueTrigger extends IssueTrigger_base {
|
|
14
13
|
}
|
|
15
14
|
declare const PullRequestTrigger_base: Schema.Class<PullRequestTrigger, Schema.Struct<{
|
|
16
15
|
readonly on: Schema.Literal<"pr">;
|
|
17
16
|
readonly if: Schema.brand<Schema.String, "ExpressionSource">;
|
|
18
17
|
}>, {}>;
|
|
19
|
-
/**
|
|
18
|
+
/** A trigger that selects pull requests matching the Loop's `if` expression. */
|
|
20
19
|
export declare class PullRequestTrigger extends PullRequestTrigger_base {
|
|
21
20
|
}
|
|
22
21
|
declare const ScheduleTrigger_base: Schema.Class<ScheduleTrigger, Schema.Struct<{
|
|
@@ -25,13 +24,11 @@ declare const ScheduleTrigger_base: Schema.Class<ScheduleTrigger, Schema.Struct<
|
|
|
25
24
|
readonly cron: Schema.brand<Schema.String, "Cron">;
|
|
26
25
|
readonly tz: Schema.withDecodingDefaultKey<Schema.brand<Schema.String, "TimeZone">, never>;
|
|
27
26
|
}>, {}>;
|
|
28
|
-
/**
|
|
27
|
+
/** A trigger that produces one Event per selected repository at each cron time. After downtime, produces only the latest missed Tick. */
|
|
29
28
|
export declare class ScheduleTrigger extends ScheduleTrigger_base {
|
|
30
29
|
}
|
|
31
|
-
/** The standing Item condition or schedule that produces Events for a Loop. */
|
|
32
30
|
export declare const Trigger: Schema.Union<readonly [typeof IssueTrigger, typeof PullRequestTrigger, typeof ScheduleTrigger]>;
|
|
33
31
|
export type Trigger = typeof Trigger.Type;
|
|
34
|
-
/** The class of state a Loop watches: issues, pull requests, or scheduled Ticks. */
|
|
35
32
|
export type Stream = Trigger["on"];
|
|
36
33
|
export {};
|
|
37
34
|
//# sourceMappingURL=trigger.d.ts.map
|
package/dist/trigger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../src/trigger.ts"],"names":[],"mappings":"AACA,OAAO,EAAwD,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../src/trigger.ts"],"names":[],"mappings":"AACA,OAAO,EAAwD,MAAM,EAAE,MAAM,QAAQ,CAAC;AAOtF,0EAA0E;AAC1E,eAAO,MAAM,IAAI,qCAEW,CAAC;AAE7B,MAAM,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC;AAIpC,eAAO,MAAM,QAAQ,yCAEW,CAAC;AAEjC,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC;;;;;AAE5C,yEAAyE;AACzE,qBAAa,YAAa,SAAQ,iBAGhC;CAAG;;;;;AAEL,gFAAgF;AAChF,qBAAa,kBAAmB,SAAQ,uBAKtC;CAAG;;;;;;;AAEL,yIAAyI;AACzI,qBAAa,eAAgB,SAAQ,oBAOpC;CAAG;AAEJ,eAAO,MAAM,OAAO,iGAAoE,CAAC;AAEzF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC;AAE1C,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/trigger.js
CHANGED
|
@@ -1,27 +1,25 @@
|
|
|
1
1
|
import { Source } from "@usine/expression/expression-engine";
|
|
2
2
|
import { Cron as EffectCron, DateTime, Effect, Option, Result, Schema } from "effect";
|
|
3
|
-
// Uses the
|
|
4
|
-
//
|
|
5
|
-
// DST gap; the scheduler isolates that per schedule.
|
|
3
|
+
// Uses the scheduler's Cron parser. `Cron.prev` and `Cron.next` can still fail in a DST gap; the
|
|
4
|
+
// scheduler handles that per schedule.
|
|
6
5
|
const isFiveFieldCron = (value) => value.trim().split(/\s+/u).length === 5 && Result.isSuccess(EffectCron.parse(value));
|
|
7
|
-
/** A five-field
|
|
6
|
+
/** A five-field cron expression, evaluated in the trigger's time zone. */
|
|
8
7
|
export const Cron = Schema.String.check(Schema.makeFilter(isFiveFieldCron, { message: "Expected a valid five-field cron expression" })).pipe(Schema.brand("Cron"));
|
|
9
8
|
const isTimeZone = (value) => Option.isSome(DateTime.zoneMakeNamed(value));
|
|
10
|
-
/** The IANA time zone whose local clock defines a schedule's firing times. */
|
|
11
9
|
export const TimeZone = Schema.String.check(Schema.makeFilter(isTimeZone, { message: "Expected an IANA time-zone name" })).pipe(Schema.brand("TimeZone"));
|
|
12
|
-
/**
|
|
10
|
+
/** A trigger that selects issues matching the Loop's `if` expression. */
|
|
13
11
|
export class IssueTrigger extends Schema.Class("@usine/config/IssueTrigger")({
|
|
14
12
|
on: Schema.Literal("issue"),
|
|
15
13
|
if: Source,
|
|
16
14
|
}) {
|
|
17
15
|
}
|
|
18
|
-
/**
|
|
16
|
+
/** A trigger that selects pull requests matching the Loop's `if` expression. */
|
|
19
17
|
export class PullRequestTrigger extends Schema.Class("@usine/config/PullRequestTrigger")({
|
|
20
18
|
on: Schema.Literal("pr"),
|
|
21
19
|
if: Source,
|
|
22
20
|
}) {
|
|
23
21
|
}
|
|
24
|
-
/**
|
|
22
|
+
/** A trigger that produces one Event per selected repository at each cron time. After downtime, produces only the latest missed Tick. */
|
|
25
23
|
export class ScheduleTrigger extends Schema.Class("@usine/config/ScheduleTrigger")({
|
|
26
24
|
on: Schema.Literal("schedule"),
|
|
27
25
|
if: Source,
|
|
@@ -29,6 +27,5 @@ export class ScheduleTrigger extends Schema.Class("@usine/config/ScheduleTrigger
|
|
|
29
27
|
tz: TimeZone.pipe(Schema.withDecodingDefaultKey(Effect.succeed("UTC"))),
|
|
30
28
|
}) {
|
|
31
29
|
}
|
|
32
|
-
/** The standing Item condition or schedule that produces Events for a Loop. */
|
|
33
30
|
export const Trigger = Schema.Union([IssueTrigger, PullRequestTrigger, ScheduleTrigger]);
|
|
34
31
|
//# sourceMappingURL=trigger.js.map
|
package/dist/trigger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger.js","sourceRoot":"","sources":["../src/trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEtF,
|
|
1
|
+
{"version":3,"file":"trigger.js","sourceRoot":"","sources":["../src/trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEtF,iGAAiG;AACjG,uCAAuC;AACvC,MAAM,eAAe,GAAG,CAAC,KAAa,EAAW,EAAE,CACjD,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAEvF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CACrC,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,6CAA6C,EAAE,CAAC,CAC/F,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAI7B,MAAM,UAAU,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAE5F,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CACzC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC,CAC9E,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AAIjC,yEAAyE;AACzE,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,KAAK,CAAe,4BAA4B,CAAC,CAAC;IACzF,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IAC3B,EAAE,EAAE,MAAM;CACX,CAAC;CAAG;AAEL,gFAAgF;AAChF,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,KAAK,CAClD,kCAAkC,CACnC,CAAC;IACA,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IACxB,EAAE,EAAE,MAAM;CACX,CAAC;CAAG;AAEL,yIAAyI;AACzI,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,KAAK,CAAkB,+BAA+B,CAAC,CACjG;IACE,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;IAC9B,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,IAAI;IACV,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;CACxE,CACF;CAAG;AAEJ,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC,CAAC"}
|
package/dist/yaml/document.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import { Effect } from "effect";
|
|
|
2
2
|
import { type Document } from "yaml";
|
|
3
3
|
import { ConfigFileError, type InstancePath } from "../file.ts";
|
|
4
4
|
/**
|
|
5
|
-
* Parses YAML into a Document
|
|
6
|
-
*
|
|
5
|
+
* Parses YAML into a Document that keeps source tokens, so edits preserve formatting. Fails on
|
|
6
|
+
* duplicate keys and parser warnings.
|
|
7
7
|
*/
|
|
8
8
|
export declare const parseYamlDocument: (file: InstancePath, source: string) => Effect.Effect<Document.Parsed, ConfigFileError>;
|
|
9
9
|
//# sourceMappingURL=document.d.ts.map
|
package/dist/yaml/document.js
CHANGED
|
@@ -2,12 +2,12 @@ import { Effect, Option, Schema } from "effect";
|
|
|
2
2
|
import { parseDocument } from "yaml";
|
|
3
3
|
import { ConfigFileError } from "../file.js";
|
|
4
4
|
const causeMessage = (cause) => Option.match(Schema.decodeUnknownOption(Schema.Struct({ message: Schema.NonEmptyString }))(cause), {
|
|
5
|
-
onNone: () => "
|
|
5
|
+
onNone: () => "The YAML parser failed without an error message",
|
|
6
6
|
onSome: ({ message }) => message,
|
|
7
7
|
});
|
|
8
8
|
/**
|
|
9
|
-
* Parses YAML into a Document
|
|
10
|
-
*
|
|
9
|
+
* Parses YAML into a Document that keeps source tokens, so edits preserve formatting. Fails on
|
|
10
|
+
* duplicate keys and parser warnings.
|
|
11
11
|
*/
|
|
12
12
|
export const parseYamlDocument = (file, source) => Effect.gen(function* () {
|
|
13
13
|
const document = yield* Effect.try({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/yaml/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAiB,aAAa,EAAE,MAAM,MAAM,CAAC;AACpD,OAAO,EAAE,eAAe,EAAqB,MAAM,YAAY,CAAC;AAEhE,MAAM,YAAY,GAAG,CAAC,KAAc,EAAU,EAAE,CAC9C,MAAM,CAAC,KAAK,CACV,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EACpF;IACE,MAAM,EAAE,GAAG,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/yaml/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAiB,aAAa,EAAE,MAAM,MAAM,CAAC;AACpD,OAAO,EAAE,eAAe,EAAqB,MAAM,YAAY,CAAC;AAEhE,MAAM,YAAY,GAAG,CAAC,KAAc,EAAU,EAAE,CAC9C,MAAM,CAAC,KAAK,CACV,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EACpF;IACE,MAAM,EAAE,GAAG,EAAE,CAAC,iDAAiD;IAC/D,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO;CACjC,CACF,CAAC;AAEJ;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAAkB,EAClB,MAAc,EACmC,EAAE,CACnD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QACjC,GAAG,EAAE,GAAG,EAAE,CACR,aAAa,CAAC,MAAM,EAAE;YACpB,gBAAgB,EAAE,IAAI;YACtB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,IAAI;SACjB,CAAC;QACJ,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,eAAe,CAAC;YAClB,IAAI;YACJ,KAAK,EAAE,MAAM;YACb,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE;YACzB,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC;SAC7B,CAAC;KACL,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,CAAC,IAAI,eAAe,CAAC;YAChC,IAAI;YACJ,KAAK,EAAE,MAAM;YACb,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE;YACzB,OAAO,EAAE,WAAW,CAAC,OAAO;SAC7B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/yaml/writer.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
2
|
import type { ConfigFileError } from "../file.ts";
|
|
3
3
|
declare const YamlEdit_base: Schema.Class<YamlEdit, Schema.Struct<{
|
|
4
|
-
/**
|
|
4
|
+
/** The keys as written in the file, for example `["settings", "max_children"]`. */
|
|
5
5
|
readonly path: Schema.$Array<Schema.NonEmptyString>;
|
|
6
6
|
readonly value: Schema.Codec<Schema.Json, Schema.Json, never, never>;
|
|
7
7
|
}>, {}>;
|
|
8
|
-
/**
|
|
8
|
+
/** A replacement of one value in a YAML file. */
|
|
9
9
|
export declare class YamlEdit extends YamlEdit_base {
|
|
10
10
|
}
|
|
11
|
-
/**
|
|
11
|
+
/** Returns `source` with `edit` applied, keeping comments, key order, and newline style. */
|
|
12
12
|
export declare const updateYaml: (file: string & import("effect/Brand").Brand<"InstancePath">, source: string, edit: YamlEdit) => Effect.Effect<string, ConfigFileError, never>;
|
|
13
|
-
/**
|
|
13
|
+
/** Applies `edit` to the frontmatter of a Markdown config file and returns the whole file. */
|
|
14
14
|
export declare const updateFrontmatter: (file: string & import("effect/Brand").Brand<"InstancePath">, source: string, edit: YamlEdit) => Effect.Effect<string, ConfigFileError, never>;
|
|
15
15
|
export {};
|
|
16
16
|
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/yaml/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,YAAY,CAAC;;IAM9D,
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/yaml/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,YAAY,CAAC;;IAM9D,mFAAmF;;;;AAFrF,iDAAiD;AACjD,qBAAa,QAAS,SAAQ,aAI5B;CAAG;AAOL,4FAA4F;AAC5F,eAAO,MAAM,UAAU,gJAQtB,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,iBAAiB,gJAc7B,CAAC"}
|
package/dist/yaml/writer.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
2
|
import { splitMarkdown } from "../frontmatter.js";
|
|
3
3
|
import { parseYamlDocument } from "./document.js";
|
|
4
|
-
/**
|
|
4
|
+
/** A replacement of one value in a YAML file. */
|
|
5
5
|
export class YamlEdit extends Schema.Class("@usine/config/YamlEdit")({
|
|
6
|
-
/**
|
|
6
|
+
/** The keys as written in the file, for example `["settings", "max_children"]`. */
|
|
7
7
|
path: Schema.Array(Schema.NonEmptyString).check(Schema.isNonEmpty()),
|
|
8
8
|
value: Schema.Json,
|
|
9
9
|
}) {
|
|
@@ -12,18 +12,17 @@ const restoreNewlines = (text, newline) => {
|
|
|
12
12
|
const normalized = text.replaceAll("\r\n", "\n");
|
|
13
13
|
return newline === "\r\n" ? normalized.replaceAll("\n", "\r\n") : normalized;
|
|
14
14
|
};
|
|
15
|
-
/**
|
|
15
|
+
/** Returns `source` with `edit` applied, keeping comments, key order, and newline style. */
|
|
16
16
|
export const updateYaml = Effect.fn("YamlWriter.updateYaml")((file, source, edit) => Effect.gen(function* () {
|
|
17
17
|
const document = yield* parseYamlDocument(file, source);
|
|
18
18
|
document.setIn(edit.path, edit.value);
|
|
19
19
|
// The stringifier always emits LF.
|
|
20
20
|
return restoreNewlines(document.toString(), source.includes("\r\n") ? "\r\n" : "\n");
|
|
21
21
|
}));
|
|
22
|
-
/**
|
|
22
|
+
/** Applies `edit` to the frontmatter of a Markdown config file and returns the whole file. */
|
|
23
23
|
export const updateFrontmatter = Effect.fn("YamlWriter.updateFrontmatter")((file, source, edit) => Effect.gen(function* () {
|
|
24
24
|
const markdown = yield* splitMarkdown(file, source);
|
|
25
|
-
//
|
|
26
|
-
// delimiter decides.
|
|
25
|
+
// Takes the newline style from the whole file, because one-line frontmatter has no newline.
|
|
27
26
|
const updated = restoreNewlines(yield* updateYaml(file, markdown.yaml, edit), markdown.newline);
|
|
28
27
|
const yaml = updated.endsWith(markdown.newline)
|
|
29
28
|
? updated.slice(0, -markdown.newline.length)
|
package/dist/yaml/writer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/yaml/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/yaml/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,iDAAiD;AACjD,MAAM,OAAO,QAAS,SAAQ,MAAM,CAAC,KAAK,CAAW,wBAAwB,CAAC,CAAC;IAC7E,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IACpE,KAAK,EAAE,MAAM,CAAC,IAAI;CACnB,CAAC;CAAG;AAEL,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,OAAsB,EAAU,EAAE;IACvE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,OAAO,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAC/E,CAAC,CAAC;AAEF,4FAA4F;AAC5F,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAC1D,CAAC,IAAkB,EAAE,MAAc,EAAE,IAAc,EAA0C,EAAE,CAC7F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxD,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,mCAAmC;IACnC,OAAO,eAAe,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACvF,CAAC,CAAC,CACL,CAAC;AAEF,8FAA8F;AAC9F,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,8BAA8B,CAAC,CACxE,CAAC,IAAkB,EAAE,MAAc,EAAE,IAAc,EAA0C,EAAE,CAC7F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpD,4FAA4F;IAC5F,MAAM,OAAO,GAAG,eAAe,CAC7B,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAC5C,QAAQ,CAAC,OAAO,CACjB,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC7C,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5C,CAAC,CAAC,OAAO,CAAC;IACZ,OAAO,MAAM,QAAQ,CAAC,OAAO,GAAG,IAAI,GAAG,QAAQ,CAAC,OAAO,MAAM,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;AAClG,CAAC,CAAC,CACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@usine/config",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Config file machinery for usine: parse, validate, and surgically rewrite the instance repo's files — usine.yaml, loop files, agent files.",
|
|
5
|
-
"license": "
|
|
5
|
+
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "git+https://github.com/basaltbytes/usine.git",
|
|
9
9
|
"directory": "packages/config"
|
|
10
10
|
},
|
|
11
11
|
"files": [
|
|
12
|
-
"dist"
|
|
12
|
+
"dist",
|
|
13
|
+
"!dist/tsconfig.tsbuildinfo"
|
|
13
14
|
],
|
|
14
15
|
"type": "module",
|
|
15
16
|
"sideEffects": false,
|
|
@@ -71,20 +72,20 @@
|
|
|
71
72
|
"access": "public"
|
|
72
73
|
},
|
|
73
74
|
"dependencies": {
|
|
74
|
-
"yaml": "2.
|
|
75
|
-
"@usine/
|
|
76
|
-
"@usine/
|
|
75
|
+
"yaml": "2.9.1",
|
|
76
|
+
"@usine/expression": "0.4.0",
|
|
77
|
+
"@usine/core": "0.5.0"
|
|
77
78
|
},
|
|
78
79
|
"devDependencies": {
|
|
79
|
-
"@effect/platform-node": "4.0.
|
|
80
|
-
"@effect/vitest": "4.0.
|
|
81
|
-
"effect": "4.0.
|
|
80
|
+
"@effect/platform-node": "4.0.6",
|
|
81
|
+
"@effect/vitest": "4.0.6",
|
|
82
|
+
"effect": "4.0.6",
|
|
82
83
|
"typescript": "7.0.2",
|
|
83
|
-
"vitest": "
|
|
84
|
+
"vitest": "5.0.5",
|
|
84
85
|
"@usine/tsconfig": "0.0.0"
|
|
85
86
|
},
|
|
86
87
|
"peerDependencies": {
|
|
87
|
-
"effect": "4.0.
|
|
88
|
+
"effect": "4.0.6"
|
|
88
89
|
},
|
|
89
90
|
"engines": {
|
|
90
91
|
"node": ">=22"
|