@dxos/plugin-automation 0.8.4-staging.60fe92afc8 → 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.
Files changed (131) hide show
  1. package/dist/lib/neutral/{AutomationArticle-GN36NUX2.mjs → AutomationArticle-CG4ZML3C.mjs} +3 -2
  2. package/dist/lib/neutral/{AutomationCompanion-M26WR6VP.mjs → AutomationCompanion-67LW2WZS.mjs} +12 -13
  3. package/dist/lib/neutral/AutomationCompanion-67LW2WZS.mjs.map +7 -0
  4. package/dist/lib/neutral/AutomationPlugin.mjs +1 -1
  5. package/dist/lib/neutral/AutomationPlugin.node.mjs +4 -4
  6. package/dist/lib/neutral/AutomationPlugin.node.mjs.map +3 -3
  7. package/dist/lib/neutral/{AutomationSettings-YXUJDRQA.mjs → AutomationSettings-2XCCFX6X.mjs} +5 -5
  8. package/dist/lib/neutral/{AutomationSettings-YXUJDRQA.mjs.map → AutomationSettings-2XCCFX6X.mjs.map} +3 -3
  9. package/dist/lib/neutral/{TriggerSettings-XCHIZPOR.mjs → TriggerSettings-ABOTKRUA.mjs} +2 -2
  10. package/dist/lib/neutral/{app-graph-builder-BTTHS4VK.mjs → app-graph-builder-VX54SXD6.mjs} +6 -6
  11. package/dist/lib/neutral/app-graph-builder-VX54SXD6.mjs.map +7 -0
  12. package/dist/lib/neutral/capabilities/index.mjs +3 -3
  13. package/dist/lib/neutral/capabilities/node.mjs +1 -1
  14. package/dist/lib/neutral/{chunk-2JP77CMN.mjs → chunk-73DGSL37.mjs} +2 -2
  15. package/dist/lib/neutral/chunk-73DGSL37.mjs.map +7 -0
  16. package/dist/lib/neutral/{chunk-HPUHQ3L6.mjs → chunk-77QU5RSC.mjs} +3 -3
  17. package/dist/lib/neutral/chunk-77QU5RSC.mjs.map +7 -0
  18. package/dist/lib/neutral/chunk-D4RCXOP4.mjs +13 -0
  19. package/dist/lib/neutral/chunk-D4RCXOP4.mjs.map +7 -0
  20. package/dist/lib/neutral/{chunk-SONGOJRB.mjs → chunk-EJ5J22XS.mjs} +2 -2
  21. package/dist/lib/neutral/chunk-HHIFH3N3.mjs +45 -0
  22. package/dist/lib/neutral/chunk-HHIFH3N3.mjs.map +7 -0
  23. package/dist/lib/neutral/chunk-HQU5QWF4.mjs +349 -0
  24. package/dist/lib/neutral/chunk-HQU5QWF4.mjs.map +7 -0
  25. package/dist/lib/neutral/{chunk-FE7YFBX7.mjs → chunk-LVUL7GIN.mjs} +151 -60
  26. package/dist/lib/neutral/chunk-LVUL7GIN.mjs.map +7 -0
  27. package/dist/lib/neutral/{chunk-GARB7S5R.mjs → chunk-YHK7FWGV.mjs} +5 -3
  28. package/dist/lib/neutral/chunk-YHK7FWGV.mjs.map +7 -0
  29. package/dist/lib/neutral/components/index.mjs +36 -2
  30. package/dist/lib/neutral/components/index.mjs.map +3 -3
  31. package/dist/lib/neutral/containers/index.mjs +4 -4
  32. package/dist/lib/neutral/{create-automation-OE3TNXYE.mjs → create-automation-AGYTF62E.mjs} +5 -9
  33. package/dist/lib/neutral/create-automation-AGYTF62E.mjs.map +7 -0
  34. package/dist/lib/neutral/{create-trigger-from-template-TERHKWJM.mjs → create-trigger-from-template-TYGCSR3Z.mjs} +5 -5
  35. package/dist/lib/neutral/create-trigger-from-template-TYGCSR3Z.mjs.map +7 -0
  36. package/dist/lib/neutral/index.mjs +10 -2
  37. package/dist/lib/neutral/meta.json +1 -1
  38. package/dist/lib/neutral/meta.mjs +1 -1
  39. package/dist/lib/neutral/{navigation-resolver-I3L5FHJO.mjs → navigation-resolver-FSJNF3DQ.mjs} +3 -3
  40. package/dist/lib/neutral/navigation-resolver-FSJNF3DQ.mjs.map +7 -0
  41. package/dist/lib/neutral/operations/index.mjs +1 -1
  42. package/dist/lib/neutral/plugin.mjs +2 -2
  43. package/dist/lib/neutral/{react-surface-IBRWUKPC.mjs → react-surface-W3J3CDHA.mjs} +2 -2
  44. package/dist/lib/neutral/{react-surface-IBRWUKPC.mjs.map → react-surface-W3J3CDHA.mjs.map} +3 -3
  45. package/dist/lib/neutral/testing.mjs +1 -1
  46. package/dist/lib/neutral/translations.mjs +6 -2
  47. package/dist/lib/neutral/translations.mjs.map +3 -3
  48. package/dist/lib/neutral/types/index.mjs +1 -1
  49. package/dist/types/dx.config.d.ts +28 -0
  50. package/dist/types/dx.config.d.ts.map +1 -0
  51. package/dist/types/src/capabilities/index.d.ts +8 -13
  52. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  53. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -1
  54. package/dist/types/src/capabilities/node.d.ts +5 -5
  55. package/dist/types/src/capabilities/node.d.ts.map +1 -1
  56. package/dist/types/src/capabilities/react-surface.d.ts +2 -2
  57. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  58. package/dist/types/src/components/CronBuilder/CronBuilder.d.ts +16 -0
  59. package/dist/types/src/components/CronBuilder/CronBuilder.d.ts.map +1 -0
  60. package/dist/types/src/components/CronBuilder/CronBuilder.stories.d.ts +194 -0
  61. package/dist/types/src/components/CronBuilder/CronBuilder.stories.d.ts.map +1 -0
  62. package/dist/types/src/components/CronBuilder/cron.d.ts +17 -0
  63. package/dist/types/src/components/CronBuilder/cron.d.ts.map +1 -0
  64. package/dist/types/src/components/CronBuilder/cron.test.d.ts +2 -0
  65. package/dist/types/src/components/CronBuilder/cron.test.d.ts.map +1 -0
  66. package/dist/types/src/components/CronBuilder/index.d.ts +4 -0
  67. package/dist/types/src/components/CronBuilder/index.d.ts.map +1 -0
  68. package/dist/types/src/components/CronBuilder/schema.d.ts +96 -0
  69. package/dist/types/src/components/CronBuilder/schema.d.ts.map +1 -0
  70. package/dist/types/src/components/index.d.ts +1 -0
  71. package/dist/types/src/components/index.d.ts.map +1 -1
  72. package/dist/types/src/containers/AutomationArticle/AutomationArticle.d.ts +6 -0
  73. package/dist/types/src/containers/AutomationArticle/AutomationArticle.d.ts.map +1 -1
  74. package/dist/types/src/containers/AutomationArticle/AutomationArticle.stories.d.ts +120 -0
  75. package/dist/types/src/containers/AutomationArticle/AutomationArticle.stories.d.ts.map +1 -0
  76. package/dist/types/src/containers/AutomationCompanion/AutomationCompanion.d.ts.map +1 -1
  77. package/dist/types/src/index.d.ts +1 -0
  78. package/dist/types/src/index.d.ts.map +1 -1
  79. package/dist/types/src/meta.d.ts +28 -2
  80. package/dist/types/src/meta.d.ts.map +1 -1
  81. package/dist/types/src/paths.d.ts +2 -0
  82. package/dist/types/src/paths.d.ts.map +1 -1
  83. package/dist/types/src/translations.d.ts +9 -1
  84. package/dist/types/src/translations.d.ts.map +1 -1
  85. package/dist/types/src/types/AutomationCapabilities.d.ts +6 -1
  86. package/dist/types/src/types/AutomationCapabilities.d.ts.map +1 -1
  87. package/dist/types/tsconfig.tsbuildinfo +1 -1
  88. package/dx.config.ts +34 -0
  89. package/package.json +40 -38
  90. package/src/AutomationPlugin.test.ts +1 -1
  91. package/src/AutomationPlugin.tsx +1 -1
  92. package/src/capabilities/app-graph-builder.ts +5 -5
  93. package/src/capabilities/navigation-resolver.ts +2 -2
  94. package/src/capabilities/react-surface.tsx +1 -1
  95. package/src/commands/trigger/create/queue.ts +2 -2
  96. package/src/commands/trigger/update/queue.ts +2 -2
  97. package/src/components/CreateAutomationPanel/CreateAutomationPanel.tsx +1 -1
  98. package/src/components/CronBuilder/CronBuilder.stories.tsx +72 -0
  99. package/src/components/CronBuilder/CronBuilder.tsx +94 -0
  100. package/src/components/CronBuilder/cron.test.ts +131 -0
  101. package/src/components/CronBuilder/cron.ts +138 -0
  102. package/src/components/CronBuilder/index.ts +7 -0
  103. package/src/components/CronBuilder/schema.ts +119 -0
  104. package/src/components/index.ts +1 -0
  105. package/src/containers/AutomationArticle/AutomationArticle.stories.tsx +73 -0
  106. package/src/containers/AutomationArticle/AutomationArticle.tsx +186 -56
  107. package/src/containers/AutomationCompanion/AutomationCompanion.tsx +79 -72
  108. package/src/containers/AutomationSettings/AutomationSettings.tsx +3 -3
  109. package/src/containers/TriggerSettings/TriggerSettings.tsx +1 -1
  110. package/src/index.ts +1 -0
  111. package/src/meta.ts +2 -26
  112. package/src/operations/create-trigger-from-template.ts +3 -3
  113. package/src/paths.ts +7 -2
  114. package/src/translations.ts +7 -2
  115. package/src/types/AutomationCapabilities.ts +9 -1
  116. package/src/types/AutomationOperation.ts +1 -1
  117. package/src/types/schema.ts +1 -1
  118. package/dist/lib/neutral/AutomationCompanion-M26WR6VP.mjs.map +0 -7
  119. package/dist/lib/neutral/app-graph-builder-BTTHS4VK.mjs.map +0 -7
  120. package/dist/lib/neutral/chunk-2JP77CMN.mjs.map +0 -7
  121. package/dist/lib/neutral/chunk-DUGOIM7G.mjs +0 -36
  122. package/dist/lib/neutral/chunk-DUGOIM7G.mjs.map +0 -7
  123. package/dist/lib/neutral/chunk-FE7YFBX7.mjs.map +0 -7
  124. package/dist/lib/neutral/chunk-GARB7S5R.mjs.map +0 -7
  125. package/dist/lib/neutral/chunk-HPUHQ3L6.mjs.map +0 -7
  126. package/dist/lib/neutral/create-automation-OE3TNXYE.mjs.map +0 -7
  127. package/dist/lib/neutral/create-trigger-from-template-TERHKWJM.mjs.map +0 -7
  128. package/dist/lib/neutral/navigation-resolver-I3L5FHJO.mjs.map +0 -7
  129. /package/dist/lib/neutral/{AutomationArticle-GN36NUX2.mjs.map → AutomationArticle-CG4ZML3C.mjs.map} +0 -0
  130. /package/dist/lib/neutral/{TriggerSettings-XCHIZPOR.mjs.map → TriggerSettings-ABOTKRUA.mjs.map} +0 -0
  131. /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
+ }