@dxos/plugin-automation 0.9.0 → 0.9.1-main.c7dcc2e112
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/dist/lib/neutral/{AutomationArticle-GN36NUX2.mjs → AutomationArticle-CG4ZML3C.mjs} +3 -2
- package/dist/lib/neutral/{AutomationCompanion-M26WR6VP.mjs → AutomationCompanion-67LW2WZS.mjs} +12 -13
- package/dist/lib/neutral/AutomationCompanion-67LW2WZS.mjs.map +7 -0
- package/dist/lib/neutral/AutomationPlugin.mjs +1 -1
- package/dist/lib/neutral/AutomationPlugin.node.mjs +4 -4
- package/dist/lib/neutral/AutomationPlugin.node.mjs.map +3 -3
- package/dist/lib/neutral/{AutomationSettings-YXUJDRQA.mjs → AutomationSettings-2XCCFX6X.mjs} +5 -5
- package/dist/lib/neutral/{AutomationSettings-YXUJDRQA.mjs.map → AutomationSettings-2XCCFX6X.mjs.map} +3 -3
- package/dist/lib/neutral/{TriggerSettings-XCHIZPOR.mjs → TriggerSettings-ABOTKRUA.mjs} +2 -2
- package/dist/lib/neutral/{app-graph-builder-BTTHS4VK.mjs → app-graph-builder-VX54SXD6.mjs} +6 -6
- package/dist/lib/neutral/app-graph-builder-VX54SXD6.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +3 -3
- package/dist/lib/neutral/capabilities/node.mjs +1 -1
- package/dist/lib/neutral/{chunk-2JP77CMN.mjs → chunk-73DGSL37.mjs} +2 -2
- package/dist/lib/neutral/chunk-73DGSL37.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-HPUHQ3L6.mjs → chunk-77QU5RSC.mjs} +3 -3
- package/dist/lib/neutral/chunk-77QU5RSC.mjs.map +7 -0
- package/dist/lib/neutral/chunk-D4RCXOP4.mjs +13 -0
- package/dist/lib/neutral/chunk-D4RCXOP4.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-SONGOJRB.mjs → chunk-EJ5J22XS.mjs} +2 -2
- package/dist/lib/neutral/chunk-HHIFH3N3.mjs +45 -0
- package/dist/lib/neutral/chunk-HHIFH3N3.mjs.map +7 -0
- package/dist/lib/neutral/chunk-HQU5QWF4.mjs +349 -0
- package/dist/lib/neutral/chunk-HQU5QWF4.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-FE7YFBX7.mjs → chunk-LVUL7GIN.mjs} +151 -60
- package/dist/lib/neutral/chunk-LVUL7GIN.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-GARB7S5R.mjs → chunk-YHK7FWGV.mjs} +5 -3
- package/dist/lib/neutral/chunk-YHK7FWGV.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +36 -2
- package/dist/lib/neutral/components/index.mjs.map +3 -3
- package/dist/lib/neutral/containers/index.mjs +4 -4
- package/dist/lib/neutral/{create-automation-OE3TNXYE.mjs → create-automation-AGYTF62E.mjs} +5 -9
- package/dist/lib/neutral/create-automation-AGYTF62E.mjs.map +7 -0
- package/dist/lib/neutral/{create-trigger-from-template-TERHKWJM.mjs → create-trigger-from-template-TYGCSR3Z.mjs} +5 -5
- package/dist/lib/neutral/create-trigger-from-template-TYGCSR3Z.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +10 -2
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/meta.mjs +1 -1
- package/dist/lib/neutral/{navigation-resolver-I3L5FHJO.mjs → navigation-resolver-FSJNF3DQ.mjs} +3 -3
- package/dist/lib/neutral/navigation-resolver-FSJNF3DQ.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +1 -1
- package/dist/lib/neutral/plugin.mjs +2 -2
- package/dist/lib/neutral/{react-surface-IBRWUKPC.mjs → react-surface-W3J3CDHA.mjs} +2 -2
- package/dist/lib/neutral/{react-surface-IBRWUKPC.mjs.map → react-surface-W3J3CDHA.mjs.map} +3 -3
- package/dist/lib/neutral/testing.mjs +1 -1
- package/dist/lib/neutral/translations.mjs +6 -2
- package/dist/lib/neutral/translations.mjs.map +3 -3
- package/dist/lib/neutral/types/index.mjs +1 -1
- package/dist/types/dx.config.d.ts +28 -0
- package/dist/types/dx.config.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +8 -13
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/node.d.ts +5 -5
- package/dist/types/src/capabilities/node.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/CronBuilder/CronBuilder.d.ts +16 -0
- package/dist/types/src/components/CronBuilder/CronBuilder.d.ts.map +1 -0
- package/dist/types/src/components/CronBuilder/CronBuilder.stories.d.ts +194 -0
- package/dist/types/src/components/CronBuilder/CronBuilder.stories.d.ts.map +1 -0
- package/dist/types/src/components/CronBuilder/cron.d.ts +17 -0
- package/dist/types/src/components/CronBuilder/cron.d.ts.map +1 -0
- package/dist/types/src/components/CronBuilder/cron.test.d.ts +2 -0
- package/dist/types/src/components/CronBuilder/cron.test.d.ts.map +1 -0
- package/dist/types/src/components/CronBuilder/index.d.ts +4 -0
- package/dist/types/src/components/CronBuilder/index.d.ts.map +1 -0
- package/dist/types/src/components/CronBuilder/schema.d.ts +96 -0
- package/dist/types/src/components/CronBuilder/schema.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/AutomationArticle/AutomationArticle.d.ts +6 -0
- package/dist/types/src/containers/AutomationArticle/AutomationArticle.d.ts.map +1 -1
- package/dist/types/src/containers/AutomationArticle/AutomationArticle.stories.d.ts +120 -0
- package/dist/types/src/containers/AutomationArticle/AutomationArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/AutomationCompanion/AutomationCompanion.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +28 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/paths.d.ts +2 -0
- package/dist/types/src/paths.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +9 -1
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/AutomationCapabilities.d.ts +6 -1
- package/dist/types/src/types/AutomationCapabilities.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dx.config.ts +34 -0
- package/package.json +40 -38
- package/src/AutomationPlugin.test.ts +1 -1
- package/src/AutomationPlugin.tsx +1 -1
- package/src/capabilities/app-graph-builder.ts +5 -5
- package/src/capabilities/navigation-resolver.ts +2 -2
- package/src/capabilities/react-surface.tsx +1 -1
- package/src/commands/trigger/create/queue.ts +2 -2
- package/src/commands/trigger/update/queue.ts +2 -2
- package/src/components/CreateAutomationPanel/CreateAutomationPanel.tsx +1 -1
- package/src/components/CronBuilder/CronBuilder.stories.tsx +72 -0
- package/src/components/CronBuilder/CronBuilder.tsx +94 -0
- package/src/components/CronBuilder/cron.test.ts +131 -0
- package/src/components/CronBuilder/cron.ts +138 -0
- package/src/components/CronBuilder/index.ts +7 -0
- package/src/components/CronBuilder/schema.ts +119 -0
- package/src/components/index.ts +1 -0
- package/src/containers/AutomationArticle/AutomationArticle.stories.tsx +73 -0
- package/src/containers/AutomationArticle/AutomationArticle.tsx +186 -56
- package/src/containers/AutomationCompanion/AutomationCompanion.tsx +79 -72
- package/src/containers/AutomationSettings/AutomationSettings.tsx +3 -3
- package/src/containers/TriggerSettings/TriggerSettings.tsx +1 -1
- package/src/index.ts +1 -0
- package/src/meta.ts +2 -26
- package/src/operations/create-trigger-from-template.ts +3 -3
- package/src/paths.ts +7 -2
- package/src/translations.ts +7 -2
- package/src/types/AutomationCapabilities.ts +9 -1
- package/src/types/AutomationOperation.ts +1 -1
- package/src/types/schema.ts +1 -1
- package/dist/lib/neutral/AutomationCompanion-M26WR6VP.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-builder-BTTHS4VK.mjs.map +0 -7
- package/dist/lib/neutral/chunk-2JP77CMN.mjs.map +0 -7
- package/dist/lib/neutral/chunk-DUGOIM7G.mjs +0 -36
- package/dist/lib/neutral/chunk-DUGOIM7G.mjs.map +0 -7
- package/dist/lib/neutral/chunk-FE7YFBX7.mjs.map +0 -7
- package/dist/lib/neutral/chunk-GARB7S5R.mjs.map +0 -7
- package/dist/lib/neutral/chunk-HPUHQ3L6.mjs.map +0 -7
- package/dist/lib/neutral/create-automation-OE3TNXYE.mjs.map +0 -7
- package/dist/lib/neutral/create-trigger-from-template-TERHKWJM.mjs.map +0 -7
- package/dist/lib/neutral/navigation-resolver-I3L5FHJO.mjs.map +0 -7
- /package/dist/lib/neutral/{AutomationArticle-GN36NUX2.mjs.map → AutomationArticle-CG4ZML3C.mjs.map} +0 -0
- /package/dist/lib/neutral/{TriggerSettings-XCHIZPOR.mjs.map → TriggerSettings-ABOTKRUA.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-SONGOJRB.mjs.map → chunk-EJ5J22XS.mjs.map} +0 -0
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
// src/components/CronBuilder/cron.ts
|
|
2
|
+
import cronstrue from "cronstrue";
|
|
3
|
+
var DOW_MAP = {
|
|
4
|
+
sun: 0,
|
|
5
|
+
mon: 1,
|
|
6
|
+
tue: 2,
|
|
7
|
+
wed: 3,
|
|
8
|
+
thu: 4,
|
|
9
|
+
fri: 5,
|
|
10
|
+
sat: 6
|
|
11
|
+
};
|
|
12
|
+
var toCron = (value) => {
|
|
13
|
+
switch (value.frequency) {
|
|
14
|
+
case "minutely":
|
|
15
|
+
return `*/${value.interval} * * * *`;
|
|
16
|
+
case "hourly":
|
|
17
|
+
return `${value.minute} */${value.interval} * * *`;
|
|
18
|
+
case "daily":
|
|
19
|
+
return `${value.minute} ${value.hour} * * *`;
|
|
20
|
+
case "weekly": {
|
|
21
|
+
const dow = value.daysOfWeek.length > 0 ? value.daysOfWeek.map((d) => DOW_MAP[d]).join(",") : "*";
|
|
22
|
+
return `${value.minute} ${value.hour} * * ${dow}`;
|
|
23
|
+
}
|
|
24
|
+
case "monthly": {
|
|
25
|
+
const dom = value.daysOfMonth.length > 0 ? value.daysOfMonth.join(",") : "*";
|
|
26
|
+
return `${value.minute} ${value.hour} ${dom} * *`;
|
|
27
|
+
}
|
|
28
|
+
case "custom":
|
|
29
|
+
return value.cronExpression || "* * * * *";
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
var DOW_REVERSE = {
|
|
33
|
+
"0": "sun",
|
|
34
|
+
"1": "mon",
|
|
35
|
+
"2": "tue",
|
|
36
|
+
"3": "wed",
|
|
37
|
+
"4": "thu",
|
|
38
|
+
"5": "fri",
|
|
39
|
+
"6": "sat",
|
|
40
|
+
// Both 0 and 7 represent Sunday in standard cron.
|
|
41
|
+
"7": "sun"
|
|
42
|
+
};
|
|
43
|
+
var parseUInt = (token) => /^\d+$/.test(token) ? Number(token) : void 0;
|
|
44
|
+
var parseBoundedUInt = (token, min, max) => {
|
|
45
|
+
const value = parseUInt(token);
|
|
46
|
+
return value !== void 0 && value >= min && value <= max ? value : void 0;
|
|
47
|
+
};
|
|
48
|
+
var fromCron = (cron) => {
|
|
49
|
+
const parts = cron.trim().split(/\s+/);
|
|
50
|
+
if (parts.length !== 5) {
|
|
51
|
+
return {
|
|
52
|
+
frequency: "custom",
|
|
53
|
+
cronExpression: cron
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const [minute, hour, dom, month, dow] = parts;
|
|
57
|
+
const minutelyMatch = minute.match(/^\*\/(\d+)$/);
|
|
58
|
+
if (minutelyMatch && hour === "*" && dom === "*" && month === "*" && dow === "*") {
|
|
59
|
+
return {
|
|
60
|
+
frequency: "minutely",
|
|
61
|
+
interval: parseInt(minutelyMatch[1])
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const hourlyMatch = hour.match(/^\*\/(\d+)$/);
|
|
65
|
+
const minuteNum = parseBoundedUInt(minute, 0, 59);
|
|
66
|
+
if (hourlyMatch && dom === "*" && month === "*" && dow === "*" && minuteNum !== void 0) {
|
|
67
|
+
return {
|
|
68
|
+
frequency: "hourly",
|
|
69
|
+
interval: parseInt(hourlyMatch[1]),
|
|
70
|
+
minute: minuteNum
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const hourNum = parseBoundedUInt(hour, 0, 23);
|
|
74
|
+
if (minuteNum === void 0 || hourNum === void 0) {
|
|
75
|
+
return {
|
|
76
|
+
frequency: "custom",
|
|
77
|
+
cronExpression: cron
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
if (dom === "*" && month === "*" && dow !== "*") {
|
|
81
|
+
const tokens = dow.split(",");
|
|
82
|
+
const days = tokens.map((d) => DOW_REVERSE[d]).filter((d) => d != null);
|
|
83
|
+
if (days.length === tokens.length && days.length > 0) {
|
|
84
|
+
return {
|
|
85
|
+
frequency: "weekly",
|
|
86
|
+
daysOfWeek: days,
|
|
87
|
+
hour: hourNum,
|
|
88
|
+
minute: minuteNum
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
frequency: "custom",
|
|
93
|
+
cronExpression: cron
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
if (dom !== "*" && month === "*" && dow === "*") {
|
|
97
|
+
const tokens = dom.split(",");
|
|
98
|
+
const days = tokens.map((d) => parseBoundedUInt(d, 1, 31)).filter((d) => d !== void 0);
|
|
99
|
+
if (days.length === tokens.length && days.length > 0) {
|
|
100
|
+
return {
|
|
101
|
+
frequency: "monthly",
|
|
102
|
+
daysOfMonth: days,
|
|
103
|
+
hour: hourNum,
|
|
104
|
+
minute: minuteNum
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
frequency: "custom",
|
|
109
|
+
cronExpression: cron
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
if (dom === "*" && month === "*" && dow === "*") {
|
|
113
|
+
return {
|
|
114
|
+
frequency: "daily",
|
|
115
|
+
hour: hourNum,
|
|
116
|
+
minute: minuteNum
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
frequency: "custom",
|
|
121
|
+
cronExpression: cron
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
var describeCron = (cron) => {
|
|
125
|
+
try {
|
|
126
|
+
return cronstrue.toString(cron, {
|
|
127
|
+
throwExceptionOnParseError: true
|
|
128
|
+
});
|
|
129
|
+
} catch {
|
|
130
|
+
return cron;
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// src/components/CronBuilder/schema.ts
|
|
135
|
+
import * as Schema from "effect/Schema";
|
|
136
|
+
var MinutelySpec = Schema.Struct({
|
|
137
|
+
frequency: Schema.Literal("minutely").annotations({
|
|
138
|
+
title: "Frequency"
|
|
139
|
+
}),
|
|
140
|
+
interval: Schema.Number.pipe(Schema.between(1, 59)).annotations({
|
|
141
|
+
title: "Every (minutes)",
|
|
142
|
+
description: "1\u201359"
|
|
143
|
+
})
|
|
144
|
+
});
|
|
145
|
+
var HourlySpec = Schema.Struct({
|
|
146
|
+
frequency: Schema.Literal("hourly").annotations({
|
|
147
|
+
title: "Frequency"
|
|
148
|
+
}),
|
|
149
|
+
interval: Schema.Number.pipe(Schema.between(1, 23)).annotations({
|
|
150
|
+
title: "Every (hours)",
|
|
151
|
+
description: "1\u201323"
|
|
152
|
+
}),
|
|
153
|
+
minute: Schema.Number.pipe(Schema.between(0, 59)).annotations({
|
|
154
|
+
title: "At minute",
|
|
155
|
+
description: "0\u201359"
|
|
156
|
+
})
|
|
157
|
+
});
|
|
158
|
+
var DailySpec = Schema.Struct({
|
|
159
|
+
frequency: Schema.Literal("daily").annotations({
|
|
160
|
+
title: "Frequency"
|
|
161
|
+
}),
|
|
162
|
+
hour: Schema.Number.pipe(Schema.between(0, 23)).annotations({
|
|
163
|
+
title: "Hour",
|
|
164
|
+
description: "0\u201323"
|
|
165
|
+
}),
|
|
166
|
+
minute: Schema.Number.pipe(Schema.between(0, 59)).annotations({
|
|
167
|
+
title: "Minute",
|
|
168
|
+
description: "0\u201359"
|
|
169
|
+
})
|
|
170
|
+
});
|
|
171
|
+
var DayOfWeek = Schema.Literal("sun", "mon", "tue", "wed", "thu", "fri", "sat");
|
|
172
|
+
var WeeklySpec = Schema.Struct({
|
|
173
|
+
frequency: Schema.Literal("weekly").annotations({
|
|
174
|
+
title: "Frequency"
|
|
175
|
+
}),
|
|
176
|
+
daysOfWeek: Schema.Array(DayOfWeek.annotations({
|
|
177
|
+
title: "Day"
|
|
178
|
+
})).annotations({
|
|
179
|
+
title: "Days of week"
|
|
180
|
+
}),
|
|
181
|
+
hour: Schema.Number.pipe(Schema.between(0, 23)).annotations({
|
|
182
|
+
title: "Hour",
|
|
183
|
+
description: "0\u201323"
|
|
184
|
+
}),
|
|
185
|
+
minute: Schema.Number.pipe(Schema.between(0, 59)).annotations({
|
|
186
|
+
title: "Minute",
|
|
187
|
+
description: "0\u201359"
|
|
188
|
+
})
|
|
189
|
+
});
|
|
190
|
+
var MonthlySpec = Schema.Struct({
|
|
191
|
+
frequency: Schema.Literal("monthly").annotations({
|
|
192
|
+
title: "Frequency"
|
|
193
|
+
}),
|
|
194
|
+
daysOfMonth: Schema.Array(Schema.Number.pipe(Schema.between(1, 31)).annotations({
|
|
195
|
+
title: "Day"
|
|
196
|
+
})).annotations({
|
|
197
|
+
title: "Days of month"
|
|
198
|
+
}),
|
|
199
|
+
hour: Schema.Number.pipe(Schema.between(0, 23)).annotations({
|
|
200
|
+
title: "Hour",
|
|
201
|
+
description: "0\u201323"
|
|
202
|
+
}),
|
|
203
|
+
minute: Schema.Number.pipe(Schema.between(0, 59)).annotations({
|
|
204
|
+
title: "Minute",
|
|
205
|
+
description: "0\u201359"
|
|
206
|
+
})
|
|
207
|
+
});
|
|
208
|
+
var CustomSpec = Schema.Struct({
|
|
209
|
+
frequency: Schema.Literal("custom").annotations({
|
|
210
|
+
title: "Frequency"
|
|
211
|
+
}),
|
|
212
|
+
cronExpression: Schema.String.annotations({
|
|
213
|
+
title: "Cron expression",
|
|
214
|
+
description: "e.g. 0 9 * * MON-FRI"
|
|
215
|
+
})
|
|
216
|
+
});
|
|
217
|
+
var CronSpec = Schema.Union(MinutelySpec, HourlySpec, DailySpec, WeeklySpec, MonthlySpec, CustomSpec).annotations({
|
|
218
|
+
title: ""
|
|
219
|
+
});
|
|
220
|
+
var Frequencies = [
|
|
221
|
+
"minutely",
|
|
222
|
+
"hourly",
|
|
223
|
+
"daily",
|
|
224
|
+
"weekly",
|
|
225
|
+
"monthly",
|
|
226
|
+
"custom"
|
|
227
|
+
];
|
|
228
|
+
var FrequencyLabels = {
|
|
229
|
+
minutely: "Every N minutes",
|
|
230
|
+
hourly: "Hourly",
|
|
231
|
+
daily: "Daily",
|
|
232
|
+
weekly: "Weekly",
|
|
233
|
+
monthly: "Monthly",
|
|
234
|
+
custom: "Custom (cron)"
|
|
235
|
+
};
|
|
236
|
+
var FrequencyDefaults = {
|
|
237
|
+
minutely: {
|
|
238
|
+
frequency: "minutely",
|
|
239
|
+
interval: 15
|
|
240
|
+
},
|
|
241
|
+
hourly: {
|
|
242
|
+
frequency: "hourly",
|
|
243
|
+
interval: 1,
|
|
244
|
+
minute: 0
|
|
245
|
+
},
|
|
246
|
+
daily: {
|
|
247
|
+
frequency: "daily",
|
|
248
|
+
hour: 9,
|
|
249
|
+
minute: 0
|
|
250
|
+
},
|
|
251
|
+
weekly: {
|
|
252
|
+
frequency: "weekly",
|
|
253
|
+
daysOfWeek: [
|
|
254
|
+
"mon"
|
|
255
|
+
],
|
|
256
|
+
hour: 9,
|
|
257
|
+
minute: 0
|
|
258
|
+
},
|
|
259
|
+
monthly: {
|
|
260
|
+
frequency: "monthly",
|
|
261
|
+
daysOfMonth: [
|
|
262
|
+
1
|
|
263
|
+
],
|
|
264
|
+
hour: 9,
|
|
265
|
+
minute: 0
|
|
266
|
+
},
|
|
267
|
+
custom: {
|
|
268
|
+
frequency: "custom",
|
|
269
|
+
cronExpression: "* * * * *"
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
var CronBuilderSchema = Schema.Struct({
|
|
273
|
+
spec: CronSpec
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
// src/components/CronBuilder/CronBuilder.tsx
|
|
277
|
+
import React, { useCallback, useMemo } from "react";
|
|
278
|
+
import { Form, SelectField, useFormFieldState } from "@dxos/react-ui-form";
|
|
279
|
+
var CronBuilder = ({ value, onChange, readonly }) => {
|
|
280
|
+
const fieldMap = useFrequencyFieldMap();
|
|
281
|
+
const defaultValues = useMemo(() => ({
|
|
282
|
+
spec: value ?? FrequencyDefaults.daily
|
|
283
|
+
}), []);
|
|
284
|
+
const handleValuesChanged = useCallback((values) => {
|
|
285
|
+
if (values.spec) {
|
|
286
|
+
onChange?.(values.spec, toCron(values.spec));
|
|
287
|
+
}
|
|
288
|
+
}, [
|
|
289
|
+
onChange
|
|
290
|
+
]);
|
|
291
|
+
return /* @__PURE__ */ React.createElement(Form.Root, {
|
|
292
|
+
schema: CronBuilderSchema,
|
|
293
|
+
defaultValues,
|
|
294
|
+
readonly,
|
|
295
|
+
fieldMap,
|
|
296
|
+
onValuesChanged: handleValuesChanged
|
|
297
|
+
}, /* @__PURE__ */ React.createElement(Form.Viewport, null, /* @__PURE__ */ React.createElement(Form.Content, null, /* @__PURE__ */ React.createElement(Form.FieldSet, null))));
|
|
298
|
+
};
|
|
299
|
+
CronBuilder.displayName = "CronBuilder";
|
|
300
|
+
var useFrequencyFieldMap = () => {
|
|
301
|
+
return useMemo(() => ({
|
|
302
|
+
"spec.frequency": (props) => /* @__PURE__ */ React.createElement(FrequencySelector, props)
|
|
303
|
+
}), []);
|
|
304
|
+
};
|
|
305
|
+
var FrequencySelector = (props) => {
|
|
306
|
+
const specState = useFormFieldState(FrequencySelector.displayName, [
|
|
307
|
+
"spec"
|
|
308
|
+
]);
|
|
309
|
+
const handleChange = useCallback((_type, newFrequency) => {
|
|
310
|
+
const freq = Frequencies.find((f) => f === newFrequency);
|
|
311
|
+
if (!freq) {
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
specState.onValueChange(props.type, FrequencyDefaults[freq]);
|
|
315
|
+
}, [
|
|
316
|
+
props.type,
|
|
317
|
+
specState
|
|
318
|
+
]);
|
|
319
|
+
const options = useMemo(() => Frequencies.map((freq) => ({
|
|
320
|
+
value: freq,
|
|
321
|
+
label: FrequencyLabels[freq]
|
|
322
|
+
})), []);
|
|
323
|
+
return /* @__PURE__ */ React.createElement(SelectField, {
|
|
324
|
+
...props,
|
|
325
|
+
options,
|
|
326
|
+
onValueChange: handleChange
|
|
327
|
+
});
|
|
328
|
+
};
|
|
329
|
+
FrequencySelector.displayName = "Form.FrequencySelector";
|
|
330
|
+
|
|
331
|
+
export {
|
|
332
|
+
toCron,
|
|
333
|
+
fromCron,
|
|
334
|
+
describeCron,
|
|
335
|
+
MinutelySpec,
|
|
336
|
+
HourlySpec,
|
|
337
|
+
DailySpec,
|
|
338
|
+
DayOfWeek,
|
|
339
|
+
WeeklySpec,
|
|
340
|
+
MonthlySpec,
|
|
341
|
+
CustomSpec,
|
|
342
|
+
CronSpec,
|
|
343
|
+
Frequencies,
|
|
344
|
+
FrequencyLabels,
|
|
345
|
+
FrequencyDefaults,
|
|
346
|
+
CronBuilderSchema,
|
|
347
|
+
CronBuilder
|
|
348
|
+
};
|
|
349
|
+
//# sourceMappingURL=chunk-HQU5QWF4.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/CronBuilder/cron.ts", "../../../src/components/CronBuilder/schema.ts", "../../../src/components/CronBuilder/CronBuilder.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport cronstrue from 'cronstrue';\n\nimport type { CronSpecType, DayOfWeek } from './schema';\n\nconst DOW_MAP: Record<DayOfWeek, number> = {\n sun: 0,\n mon: 1,\n tue: 2,\n wed: 3,\n thu: 4,\n fri: 5,\n sat: 6,\n};\n\n/**\n * Derives a 5-field standard cron expression from a decomposed CronSpec value.\n * Fields: minute hour day-of-month month day-of-week\n */\nexport const toCron = (value: CronSpecType): string => {\n switch (value.frequency) {\n case 'minutely':\n return `*/${value.interval} * * * *`;\n\n case 'hourly':\n return `${value.minute} */${value.interval} * * *`;\n\n case 'daily':\n return `${value.minute} ${value.hour} * * *`;\n\n case 'weekly': {\n const dow = value.daysOfWeek.length > 0 ? value.daysOfWeek.map((d) => DOW_MAP[d]).join(',') : '*';\n return `${value.minute} ${value.hour} * * ${dow}`;\n }\n\n case 'monthly': {\n const dom = value.daysOfMonth.length > 0 ? value.daysOfMonth.join(',') : '*';\n return `${value.minute} ${value.hour} ${dom} * *`;\n }\n\n case 'custom':\n return value.cronExpression || '* * * * *';\n }\n};\n\nconst DOW_REVERSE: Partial<Record<string, DayOfWeek>> = {\n '0': 'sun',\n '1': 'mon',\n '2': 'tue',\n '3': 'wed',\n '4': 'thu',\n '5': 'fri',\n '6': 'sat',\n // Both 0 and 7 represent Sunday in standard cron.\n '7': 'sun',\n};\n\n/** Returns a non-negative integer if the token is a valid decimal integer, otherwise undefined. */\nconst parseUInt = (token: string): number | undefined => (/^\\d+$/.test(token) ? Number(token) : undefined);\n\n/** Returns the parsed integer if it falls within [min, max], otherwise undefined. */\nconst parseBoundedUInt = (token: string, min: number, max: number): number | undefined => {\n const value = parseUInt(token);\n return value !== undefined && value >= min && value <= max ? value : undefined;\n};\n\n/**\n * Parses a 5-field cron expression into a CronSpec value.\n * Recognises common patterns (minutely, hourly, daily, weekly, monthly) and falls back to `custom`.\n */\nexport const fromCron = (cron: string): CronSpecType => {\n const parts = cron.trim().split(/\\s+/);\n if (parts.length !== 5) {\n return { frequency: 'custom', cronExpression: cron };\n }\n\n const [minute, hour, dom, month, dow] = parts;\n\n // minutely: */N * * * *\n const minutelyMatch = minute.match(/^\\*\\/(\\d+)$/);\n if (minutelyMatch && hour === '*' && dom === '*' && month === '*' && dow === '*') {\n return { frequency: 'minutely', interval: parseInt(minutelyMatch[1]) };\n }\n\n // hourly: M */N * * *\n const hourlyMatch = hour.match(/^\\*\\/(\\d+)$/);\n const minuteNum = parseBoundedUInt(minute, 0, 59);\n if (hourlyMatch && dom === '*' && month === '*' && dow === '*' && minuteNum !== undefined) {\n return { frequency: 'hourly', interval: parseInt(hourlyMatch[1]), minute: minuteNum };\n }\n\n const hourNum = parseBoundedUInt(hour, 0, 23);\n if (minuteNum === undefined || hourNum === undefined) {\n return { frequency: 'custom', cronExpression: cron };\n }\n\n // weekly: M H * * DOW[,DOW...] (numeric DOW values only; all tokens must be valid)\n if (dom === '*' && month === '*' && dow !== '*') {\n const tokens = dow.split(',');\n const days = tokens.map((d) => DOW_REVERSE[d]).filter((d): d is DayOfWeek => d != null);\n if (days.length === tokens.length && days.length > 0) {\n return { frequency: 'weekly', daysOfWeek: days, hour: hourNum, minute: minuteNum };\n }\n return { frequency: 'custom', cronExpression: cron };\n }\n\n // monthly: M H DOM[,DOM...] * * (all tokens must be valid integers in 1-31)\n if (dom !== '*' && month === '*' && dow === '*') {\n const tokens = dom.split(',');\n const days = tokens.map((d) => parseBoundedUInt(d, 1, 31)).filter((d): d is number => d !== undefined);\n if (days.length === tokens.length && days.length > 0) {\n return { frequency: 'monthly', daysOfMonth: days, hour: hourNum, minute: minuteNum };\n }\n return { frequency: 'custom', cronExpression: cron };\n }\n\n // daily: M H * * *\n if (dom === '*' && month === '*' && dow === '*') {\n return { frequency: 'daily', hour: hourNum, minute: minuteNum };\n }\n\n return { frequency: 'custom', cronExpression: cron };\n};\n\n/**\n * Returns a human-readable description of a cron expression, e.g. \"At 09:00 on Monday\".\n * Falls back to the raw expression string on parse errors.\n */\nexport const describeCron = (cron: string): string => {\n try {\n return cronstrue.toString(cron, { throwExceptionOnParseError: true });\n } catch {\n return cron;\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nexport const MinutelySpec = Schema.Struct({\n frequency: Schema.Literal('minutely').annotations({ title: 'Frequency' }),\n interval: Schema.Number.pipe(Schema.between(1, 59)).annotations({\n title: 'Every (minutes)',\n description: '1–59',\n }),\n});\n\nexport const HourlySpec = Schema.Struct({\n frequency: Schema.Literal('hourly').annotations({ title: 'Frequency' }),\n interval: Schema.Number.pipe(Schema.between(1, 23)).annotations({\n title: 'Every (hours)',\n description: '1–23',\n }),\n minute: Schema.Number.pipe(Schema.between(0, 59)).annotations({\n title: 'At minute',\n description: '0–59',\n }),\n});\n\nexport const DailySpec = Schema.Struct({\n frequency: Schema.Literal('daily').annotations({ title: 'Frequency' }),\n hour: Schema.Number.pipe(Schema.between(0, 23)).annotations({\n title: 'Hour',\n description: '0–23',\n }),\n minute: Schema.Number.pipe(Schema.between(0, 59)).annotations({\n title: 'Minute',\n description: '0–59',\n }),\n});\n\n// Named day-of-week literals for UX clarity; cron.ts maps them to numeric DOW values.\nexport const DayOfWeek = Schema.Literal('sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat');\nexport type DayOfWeek = Schema.Schema.Type<typeof DayOfWeek>;\n\nexport const WeeklySpec = Schema.Struct({\n frequency: Schema.Literal('weekly').annotations({ title: 'Frequency' }),\n daysOfWeek: Schema.Array(DayOfWeek.annotations({ title: 'Day' })).annotations({ title: 'Days of week' }),\n hour: Schema.Number.pipe(Schema.between(0, 23)).annotations({\n title: 'Hour',\n description: '0–23',\n }),\n minute: Schema.Number.pipe(Schema.between(0, 59)).annotations({\n title: 'Minute',\n description: '0–59',\n }),\n});\n\nexport const MonthlySpec = Schema.Struct({\n frequency: Schema.Literal('monthly').annotations({ title: 'Frequency' }),\n daysOfMonth: Schema.Array(Schema.Number.pipe(Schema.between(1, 31)).annotations({ title: 'Day' })).annotations({\n title: 'Days of month',\n }),\n hour: Schema.Number.pipe(Schema.between(0, 23)).annotations({\n title: 'Hour',\n description: '0–23',\n }),\n minute: Schema.Number.pipe(Schema.between(0, 59)).annotations({\n title: 'Minute',\n description: '0–59',\n }),\n});\n\nexport const CustomSpec = Schema.Struct({\n frequency: Schema.Literal('custom').annotations({ title: 'Frequency' }),\n cronExpression: Schema.String.annotations({\n title: 'Cron expression',\n description: 'e.g. 0 9 * * MON-FRI',\n }),\n});\n\nexport const CronSpec = Schema.Union(\n MinutelySpec,\n HourlySpec,\n DailySpec,\n WeeklySpec,\n MonthlySpec,\n CustomSpec,\n).annotations({ title: '' });\n\nexport type CronSpecType = Schema.Schema.Type<typeof CronSpec>;\nexport type Frequency = CronSpecType['frequency'];\n\nexport const Frequencies = [\n 'minutely',\n 'hourly',\n 'daily',\n 'weekly',\n 'monthly',\n 'custom',\n] as const satisfies readonly Frequency[];\n\nexport const FrequencyLabels: Record<Frequency, string> = {\n minutely: 'Every N minutes',\n hourly: 'Hourly',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n custom: 'Custom (cron)',\n};\n\nexport const FrequencyDefaults: { [K in Frequency]: Extract<CronSpecType, { frequency: K }> } = {\n minutely: { frequency: 'minutely', interval: 15 },\n hourly: { frequency: 'hourly', interval: 1, minute: 0 },\n daily: { frequency: 'daily', hour: 9, minute: 0 },\n weekly: { frequency: 'weekly', daysOfWeek: ['mon'], hour: 9, minute: 0 },\n monthly: { frequency: 'monthly', daysOfMonth: [1], hour: 9, minute: 0 },\n custom: { frequency: 'custom', cronExpression: '* * * * *' },\n};\n\nexport const CronBuilderSchema = Schema.Struct({ spec: CronSpec });\nexport type CronBuilderSchemaType = Schema.Schema.Type<typeof CronBuilderSchema>;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as SchemaAST from 'effect/SchemaAST';\nimport React, { useCallback, useMemo } from 'react';\n\nimport {\n Form,\n type FormFieldRendererProps,\n type FormFieldMap,\n type FormRootProps,\n SelectField,\n useFormFieldState,\n} from '@dxos/react-ui-form';\n\nimport { toCron } from './cron';\nimport {\n CronBuilderSchema,\n type CronBuilderSchemaType,\n type CronSpecType,\n FrequencyDefaults,\n FrequencyLabels,\n Frequencies,\n} from './schema';\n\nexport type CronBuilderProps = {\n value?: CronSpecType;\n onChange?: (value: CronSpecType, cron: string) => void;\n} & Pick<FormRootProps, 'readonly'>;\n\nexport const CronBuilder = ({ value, onChange, readonly }: CronBuilderProps) => {\n const fieldMap = useFrequencyFieldMap();\n\n const defaultValues = useMemo<CronBuilderSchemaType>(() => ({ spec: value ?? FrequencyDefaults.daily }), []);\n\n const handleValuesChanged = useCallback(\n (values: Partial<CronBuilderSchemaType>) => {\n if (values.spec) {\n onChange?.(values.spec, toCron(values.spec));\n }\n },\n [onChange],\n );\n\n return (\n <Form.Root<CronBuilderSchemaType>\n schema={CronBuilderSchema}\n defaultValues={defaultValues}\n readonly={readonly}\n fieldMap={fieldMap}\n onValuesChanged={handleValuesChanged}\n >\n <Form.Viewport>\n <Form.Content>\n <Form.FieldSet />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n\nCronBuilder.displayName = 'CronBuilder';\n\nconst useFrequencyFieldMap = (): FormFieldMap => {\n return useMemo(\n (): FormFieldMap => ({\n 'spec.frequency': (props) => <FrequencySelector {...props} />,\n }),\n [],\n );\n};\n\nconst FrequencySelector = (props: FormFieldRendererProps) => {\n // Access the parent `spec` field so switching frequency replaces the entire variant object.\n const specState = useFormFieldState(FrequencySelector.displayName, ['spec']);\n\n const handleChange = useCallback(\n (_type: SchemaAST.AST, newFrequency: string) => {\n const freq = Frequencies.find((f) => f === newFrequency);\n if (!freq) {\n return;\n }\n specState.onValueChange(props.type, FrequencyDefaults[freq]);\n },\n [props.type, specState],\n );\n\n const options = useMemo(() => Frequencies.map((freq) => ({ value: freq, label: FrequencyLabels[freq] })), []);\n\n return <SelectField {...props} options={options} onValueChange={handleChange} />;\n};\n\nFrequencySelector.displayName = 'Form.FrequencySelector';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["cronstrue", "DOW_MAP", "sun", "mon", "tue", "wed", "thu", "fri", "sat", "toCron", "value", "frequency", "interval", "minute", "hour", "dow", "daysOfWeek", "length", "map", "d", "join", "dom", "daysOfMonth", "cronExpression", "DOW_REVERSE", "parseUInt", "token", "test", "Number", "undefined", "parseBoundedUInt", "min", "max", "fromCron", "cron", "parts", "trim", "split", "month", "minutelyMatch", "match", "parseInt", "hourlyMatch", "minuteNum", "hourNum", "tokens", "days", "filter", "describeCron", "toString", "throwExceptionOnParseError", "Schema", "MinutelySpec", "Struct", "frequency", "Literal", "annotations", "title", "interval", "Number", "pipe", "between", "description", "HourlySpec", "minute", "DailySpec", "hour", "DayOfWeek", "WeeklySpec", "daysOfWeek", "Array", "MonthlySpec", "daysOfMonth", "CustomSpec", "cronExpression", "String", "CronSpec", "Union", "Frequencies", "FrequencyLabels", "minutely", "hourly", "daily", "weekly", "monthly", "custom", "FrequencyDefaults", "CronBuilderSchema", "spec", "React", "useCallback", "useMemo", "Form", "SelectField", "useFormFieldState", "CronBuilder", "value", "onChange", "readonly", "fieldMap", "useFrequencyFieldMap", "defaultValues", "useMemo", "spec", "FrequencyDefaults", "daily", "handleValuesChanged", "useCallback", "values", "toCron", "Form", "Root", "schema", "CronBuilderSchema", "onValuesChanged", "Viewport", "Content", "FieldSet", "displayName", "props", "FrequencySelector", "specState", "useFormFieldState", "handleChange", "_type", "newFrequency", "freq", "Frequencies", "find", "f", "onValueChange", "type", "options", "map", "label", "FrequencyLabels", "SelectField"]
|
|
7
|
+
}
|