@elaraai/e3-ui 1.0.97 → 1.0.99
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/README.md +0 -2
- package/dist/src/allocation/adapters.d.ts +1 -1
- package/dist/src/allocation/adapters.js +1 -1
- package/dist/src/allocation/index.d.ts +232 -25
- package/dist/src/allocation/index.d.ts.map +1 -1
- package/dist/src/allocation/index.js +35 -6
- package/dist/src/allocation/index.js.map +1 -1
- package/dist/src/allocation/types.d.ts +41 -0
- package/dist/src/allocation/types.d.ts.map +1 -1
- package/dist/src/allocation/types.js +35 -0
- package/dist/src/allocation/types.js.map +1 -1
- package/dist/src/bind/data-indexed.d.ts +286 -37
- package/dist/src/bind/data-indexed.d.ts.map +1 -1
- package/dist/src/bind/data-indexed.js +259 -38
- package/dist/src/bind/data-indexed.js.map +1 -1
- package/dist/src/bind/data.d.ts +48 -9
- package/dist/src/bind/data.d.ts.map +1 -1
- package/dist/src/bind/data.js +48 -3
- package/dist/src/bind/data.js.map +1 -1
- package/dist/src/bind/record.d.ts +61 -24
- package/dist/src/bind/record.d.ts.map +1 -1
- package/dist/src/bind/record.js +17 -57
- package/dist/src/bind/record.js.map +1 -1
- package/dist/src/calendar/index.d.ts +522 -36
- package/dist/src/calendar/index.d.ts.map +1 -1
- package/dist/src/calendar/index.js +53 -13
- package/dist/src/calendar/index.js.map +1 -1
- package/dist/src/calendar/paged.d.ts +89 -0
- package/dist/src/calendar/paged.d.ts.map +1 -0
- package/dist/src/calendar/paged.js +148 -0
- package/dist/src/calendar/paged.js.map +1 -0
- package/dist/src/flowchart/index.d.ts +35 -31
- package/dist/src/flowchart/index.d.ts.map +1 -1
- package/dist/src/flowchart/index.js +35 -31
- package/dist/src/flowchart/index.js.map +1 -1
- package/dist/src/flowchart/library.d.ts +108 -84
- package/dist/src/flowchart/library.d.ts.map +1 -1
- package/dist/src/flowchart/library.js +108 -84
- package/dist/src/flowchart/library.js.map +1 -1
- package/dist/src/flowchart/payload.d.ts +105 -17
- package/dist/src/flowchart/payload.d.ts.map +1 -1
- package/dist/src/flowchart/payload.js +3 -3
- package/dist/src/flowchart/payload.js.map +1 -1
- package/dist/src/flowchart/values.d.ts +35 -31
- package/dist/src/flowchart/values.d.ts.map +1 -1
- package/dist/src/flowchart/values.js +35 -31
- package/dist/src/flowchart/values.js.map +1 -1
- package/dist/src/flowchart/window.d.ts.map +1 -1
- package/dist/src/flowchart/window.js +3 -2
- package/dist/src/flowchart/window.js.map +1 -1
- package/dist/src/index.d.ts +13 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +20 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal.d.ts +18 -8
- package/dist/src/internal.d.ts.map +1 -1
- package/dist/src/internal.js +40 -10
- package/dist/src/internal.js.map +1 -1
- package/dist/src/plan/assemble.d.ts +8 -0
- package/dist/src/plan/assemble.d.ts.map +1 -1
- package/dist/src/plan/assemble.js +1 -1
- package/dist/src/plan/assemble.js.map +1 -1
- package/dist/src/plan/builders.d.ts +1530 -10
- package/dist/src/plan/builders.d.ts.map +1 -1
- package/dist/src/plan/builders.js +260 -122
- package/dist/src/plan/builders.js.map +1 -1
- package/dist/src/plan/event-rows.d.ts +224 -157
- package/dist/src/plan/event-rows.d.ts.map +1 -1
- package/dist/src/plan/event-rows.js +201 -56
- package/dist/src/plan/event-rows.js.map +1 -1
- package/dist/src/plan/factories.d.ts +72 -4
- package/dist/src/plan/factories.d.ts.map +1 -1
- package/dist/src/plan/factories.js +147 -1
- package/dist/src/plan/factories.js.map +1 -1
- package/dist/src/plan/index.d.ts +152 -125
- package/dist/src/plan/index.d.ts.map +1 -1
- package/dist/src/plan/index.js +138 -122
- package/dist/src/plan/index.js.map +1 -1
- package/dist/src/plan/ir.d.ts +1139 -8
- package/dist/src/plan/ir.d.ts.map +1 -1
- package/dist/src/plan/ir.js +5 -0
- package/dist/src/plan/ir.js.map +1 -1
- package/dist/src/plan/library.d.ts +65 -42
- package/dist/src/plan/library.d.ts.map +1 -1
- package/dist/src/plan/library.js +65 -42
- package/dist/src/plan/library.js.map +1 -1
- package/dist/src/plan/nested-checks.d.ts +146 -0
- package/dist/src/plan/nested-checks.d.ts.map +1 -0
- package/dist/src/plan/nested-checks.js +468 -0
- package/dist/src/plan/nested-checks.js.map +1 -0
- package/dist/src/plan/nested-patch.d.ts +35 -0
- package/dist/src/plan/nested-patch.d.ts.map +1 -0
- package/dist/src/plan/nested-patch.js +143 -0
- package/dist/src/plan/nested-patch.js.map +1 -0
- package/dist/src/plan/nested-read.d.ts +3250 -0
- package/dist/src/plan/nested-read.d.ts.map +1 -0
- package/dist/src/plan/nested-read.js +163 -0
- package/dist/src/plan/nested-read.js.map +1 -0
- package/dist/src/plan/nested.d.ts +280 -0
- package/dist/src/plan/nested.d.ts.map +1 -0
- package/dist/src/plan/nested.js +6 -0
- package/dist/src/plan/nested.js.map +1 -0
- package/dist/src/plan/ordered-source.d.ts +3067 -1
- package/dist/src/plan/ordered-source.d.ts.map +1 -1
- package/dist/src/plan/ordered-source.js +67 -17
- package/dist/src/plan/ordered-source.js.map +1 -1
- package/dist/src/plan/over.d.ts +111 -75
- package/dist/src/plan/over.d.ts.map +1 -1
- package/dist/src/plan/over.js +111 -75
- package/dist/src/plan/over.js.map +1 -1
- package/dist/src/plan/pick.d.ts +15 -3
- package/dist/src/plan/pick.d.ts.map +1 -1
- package/dist/src/plan/pick.js +75 -36
- package/dist/src/plan/pick.js.map +1 -1
- package/dist/src/plan/plan.d.ts +3143 -501
- package/dist/src/plan/plan.d.ts.map +1 -1
- package/dist/src/plan/plan.js +133 -34
- package/dist/src/plan/plan.js.map +1 -1
- package/dist/src/plan/reads.d.ts +421 -0
- package/dist/src/plan/reads.d.ts.map +1 -0
- package/dist/src/plan/reads.js +143 -0
- package/dist/src/plan/reads.js.map +1 -0
- package/dist/src/plan/refs.d.ts +111 -75
- package/dist/src/plan/refs.d.ts.map +1 -1
- package/dist/src/plan/refs.js +111 -75
- package/dist/src/plan/refs.js.map +1 -1
- package/dist/src/plan/root.d.ts +14 -7
- package/dist/src/plan/root.d.ts.map +1 -1
- package/dist/src/plan/root.js +82 -17
- package/dist/src/plan/root.js.map +1 -1
- package/dist/src/plan/series.d.ts +5153 -4331
- package/dist/src/plan/series.d.ts.map +1 -1
- package/dist/src/plan/series.js +1082 -266
- package/dist/src/plan/series.js.map +1 -1
- package/dist/src/plan/shade.d.ts +981 -0
- package/dist/src/plan/shade.d.ts.map +1 -0
- package/dist/src/plan/shade.js +60 -0
- package/dist/src/plan/shade.js.map +1 -0
- package/dist/src/plan/types.d.ts +192 -18
- package/dist/src/plan/types.d.ts.map +1 -1
- package/dist/src/plan/types.js +77 -19
- package/dist/src/plan/types.js.map +1 -1
- package/dist/src/query/builder.d.ts +3 -3
- package/dist/src/query/builder.d.ts.map +1 -1
- package/dist/src/query/builder.js +1 -1
- package/dist/src/query/library.d.ts +3 -3
- package/dist/src/query/library.d.ts.map +1 -1
- package/dist/src/query/library.js +1 -1
- package/dist/src/query/queries.d.ts +2 -2
- package/dist/src/query/queries.js +1 -1
- package/dist/src/query/saved.d.ts +8 -4
- package/dist/src/query/saved.d.ts.map +1 -1
- package/dist/src/query/saved.js +8 -4
- package/dist/src/query/saved.js.map +1 -1
- package/dist/src/query/types.d.ts +8 -3
- package/dist/src/query/types.d.ts.map +1 -1
- package/dist/src/query/types.js +8 -3
- package/dist/src/query/types.js.map +1 -1
- package/dist/src/roster/index.d.ts +583 -39
- package/dist/src/roster/index.d.ts.map +1 -1
- package/dist/src/roster/index.js +109 -35
- package/dist/src/roster/index.js.map +1 -1
- package/dist/src/roster/library.d.ts +12 -2
- package/dist/src/roster/library.d.ts.map +1 -1
- package/dist/src/roster/library.js +8 -0
- package/dist/src/roster/library.js.map +1 -1
- package/dist/src/roster/lists.d.ts +59 -12
- package/dist/src/roster/lists.d.ts.map +1 -1
- package/dist/src/roster/lists.js +51 -58
- package/dist/src/roster/lists.js.map +1 -1
- package/dist/src/roster/targets.d.ts +8 -4
- package/dist/src/roster/targets.d.ts.map +1 -1
- package/dist/src/roster/targets.js +9 -5
- package/dist/src/roster/targets.js.map +1 -1
- package/dist/src/roster/times.d.ts +402 -0
- package/dist/src/roster/times.d.ts.map +1 -1
- package/dist/src/roster/types.d.ts +913 -1
- package/dist/src/roster/types.d.ts.map +1 -1
- package/dist/src/roster/types.js +43 -3
- package/dist/src/roster/types.js.map +1 -1
- package/dist/src/schedule/cell-checks.d.ts +85 -0
- package/dist/src/schedule/cell-checks.d.ts.map +1 -0
- package/dist/src/schedule/cell-checks.js +211 -0
- package/dist/src/schedule/cell-checks.js.map +1 -0
- package/dist/src/schedule/days.d.ts +1 -1
- package/dist/src/schedule/days.js +1 -1
- package/dist/src/schedule/events.d.ts +52 -16
- package/dist/src/schedule/events.d.ts.map +1 -1
- package/dist/src/schedule/events.js +574 -356
- package/dist/src/schedule/events.js.map +1 -1
- package/dist/src/schedule/fields.d.ts +134 -0
- package/dist/src/schedule/fields.d.ts.map +1 -0
- package/dist/src/schedule/fields.js +207 -0
- package/dist/src/schedule/fields.js.map +1 -0
- package/dist/src/schedule/library.d.ts +11 -3
- package/dist/src/schedule/library.d.ts.map +1 -1
- package/dist/src/schedule/library.js +9 -6
- package/dist/src/schedule/library.js.map +1 -1
- package/dist/src/schedule/optimise.d.ts +124 -0
- package/dist/src/schedule/optimise.d.ts.map +1 -0
- package/dist/src/schedule/optimise.js +140 -0
- package/dist/src/schedule/optimise.js.map +1 -0
- package/dist/src/schedule/pages.d.ts +76 -0
- package/dist/src/schedule/pages.d.ts.map +1 -0
- package/dist/src/schedule/pages.js +86 -0
- package/dist/src/schedule/pages.js.map +1 -0
- package/dist/src/schedule/patch.d.ts +1 -1
- package/dist/src/schedule/patch.js +1 -1
- package/dist/src/schedule/periods.d.ts +8 -4
- package/dist/src/schedule/periods.d.ts.map +1 -1
- package/dist/src/schedule/periods.js +1 -1
- package/dist/src/schedule/periods.js.map +1 -1
- package/dist/src/schedule/record-window.d.ts +115 -22
- package/dist/src/schedule/record-window.d.ts.map +1 -1
- package/dist/src/schedule/record-window.js +140 -62
- package/dist/src/schedule/record-window.js.map +1 -1
- package/dist/src/schedule/resources.d.ts +9 -5
- package/dist/src/schedule/resources.d.ts.map +1 -1
- package/dist/src/schedule/resources.js +35 -15
- package/dist/src/schedule/resources.js.map +1 -1
- package/dist/src/schedule/session.d.ts +15 -1
- package/dist/src/schedule/session.d.ts.map +1 -1
- package/dist/src/schedule/session.js +30 -18
- package/dist/src/schedule/session.js.map +1 -1
- package/dist/src/schedule/types.d.ts +455 -37
- package/dist/src/schedule/types.d.ts.map +1 -1
- package/dist/src/schedule/types.js +79 -18
- package/dist/src/schedule/types.js.map +1 -1
- package/dist/src/schedule/window.d.ts +30 -9
- package/dist/src/schedule/window.d.ts.map +1 -1
- package/dist/src/schedule/window.js +101 -49
- package/dist/src/schedule/window.js.map +1 -1
- package/dist/src/schematic/index.d.ts +287 -0
- package/dist/src/schematic/index.d.ts.map +1 -0
- package/dist/src/schematic/index.js +216 -0
- package/dist/src/schematic/index.js.map +1 -0
- package/dist/src/schematic/kinds.d.ts +501 -0
- package/dist/src/schematic/kinds.d.ts.map +1 -0
- package/dist/src/schematic/kinds.js +1027 -0
- package/dist/src/schematic/kinds.js.map +1 -0
- package/dist/src/schematic/layers.d.ts +74 -0
- package/dist/src/schematic/layers.d.ts.map +1 -0
- package/dist/src/schematic/layers.js +99 -0
- package/dist/src/schematic/layers.js.map +1 -0
- package/dist/src/schematic/library.d.ts +202 -0
- package/dist/src/schematic/library.d.ts.map +1 -0
- package/dist/src/schematic/library.js +244 -0
- package/dist/src/schematic/library.js.map +1 -0
- package/dist/src/schematic/payload.d.ts +8310 -0
- package/dist/src/schematic/payload.d.ts.map +1 -0
- package/dist/src/schematic/payload.js +446 -0
- package/dist/src/schematic/payload.js.map +1 -0
- package/dist/src/schematic/schematic.d.ts +27 -0
- package/dist/src/schematic/schematic.d.ts.map +1 -0
- package/dist/src/schematic/schematic.js +17 -0
- package/dist/src/schematic/schematic.js.map +1 -0
- package/dist/src/schematic/shapes.d.ts +150 -0
- package/dist/src/schematic/shapes.d.ts.map +1 -0
- package/dist/src/schematic/shapes.js +171 -0
- package/dist/src/schematic/shapes.js.map +1 -0
- package/dist/src/schematic/templates.d.ts +96 -0
- package/dist/src/schematic/templates.d.ts.map +1 -0
- package/dist/src/schematic/templates.js +91 -0
- package/dist/src/schematic/templates.js.map +1 -0
- package/dist/src/schematic/types.d.ts +5766 -0
- package/dist/src/schematic/types.d.ts.map +1 -0
- package/dist/src/schematic/types.js +688 -0
- package/dist/src/schematic/types.js.map +1 -0
- package/dist/src/schematic/window.d.ts +213 -0
- package/dist/src/schematic/window.d.ts.map +1 -0
- package/dist/src/schematic/window.js +340 -0
- package/dist/src/schematic/window.js.map +1 -0
- package/dist/src/sheet/bridge.d.ts +19 -0
- package/dist/src/sheet/bridge.d.ts.map +1 -1
- package/dist/src/sheet/bridge.js +28 -21
- package/dist/src/sheet/bridge.js.map +1 -1
- package/dist/src/sheet/editing-bridge.d.ts +4 -2
- package/dist/src/sheet/editing-bridge.d.ts.map +1 -1
- package/dist/src/sheet/editing-bridge.js +8 -2
- package/dist/src/sheet/editing-bridge.js.map +1 -1
- package/dist/src/sheet/editing-types.d.ts +9 -5
- package/dist/src/sheet/editing-types.d.ts.map +1 -1
- package/dist/src/sheet/editing-types.js +9 -5
- package/dist/src/sheet/editing-types.js.map +1 -1
- package/dist/src/sheet/index.d.ts +84 -54
- package/dist/src/sheet/index.d.ts.map +1 -1
- package/dist/src/sheet/index.js +81 -53
- package/dist/src/sheet/index.js.map +1 -1
- package/dist/src/sheet/library.d.ts +13 -8
- package/dist/src/sheet/library.d.ts.map +1 -1
- package/dist/src/sheet/library.js +13 -8
- package/dist/src/sheet/library.js.map +1 -1
- package/dist/src/sheet/optimise.d.ts +69 -0
- package/dist/src/sheet/optimise.d.ts.map +1 -0
- package/dist/src/sheet/optimise.js +81 -0
- package/dist/src/sheet/optimise.js.map +1 -0
- package/dist/src/sheet/record.d.ts +1 -1
- package/dist/src/sheet/record.js +2 -2
- package/dist/src/sheet/record.js.map +1 -1
- package/dist/src/sheet/registers.d.ts +157 -133
- package/dist/src/sheet/registers.d.ts.map +1 -1
- package/dist/src/sheet/registers.js +157 -133
- package/dist/src/sheet/registers.js.map +1 -1
- package/dist/src/sheet/root.d.ts +6 -1
- package/dist/src/sheet/root.d.ts.map +1 -1
- package/dist/src/sheet/root.js +17 -5
- package/dist/src/sheet/root.js.map +1 -1
- package/dist/src/sheet/sheet.d.ts +696 -590
- package/dist/src/sheet/sheet.d.ts.map +1 -1
- package/dist/src/sheet/sheet.js +49 -15
- package/dist/src/sheet/sheet.js.map +1 -1
- package/dist/src/sheet/sub-rows.d.ts +106 -76
- package/dist/src/sheet/sub-rows.d.ts.map +1 -1
- package/dist/src/sheet/sub-rows.js +106 -76
- package/dist/src/sheet/sub-rows.js.map +1 -1
- package/dist/src/sheet/types.d.ts +57 -20
- package/dist/src/sheet/types.d.ts.map +1 -1
- package/dist/src/sheet/types.js +4 -8
- package/dist/src/sheet/types.js.map +1 -1
- package/dist/src/studio/builder.d.ts +3 -153
- package/dist/src/studio/builder.d.ts.map +1 -1
- package/dist/src/studio/builder.js +1 -1
- package/dist/src/studio/canvas.d.ts +5 -4
- package/dist/src/studio/canvas.d.ts.map +1 -1
- package/dist/src/studio/canvas.js +8 -7
- package/dist/src/studio/canvas.js.map +1 -1
- package/dist/src/studio/component.d.ts +30 -20
- package/dist/src/studio/component.d.ts.map +1 -1
- package/dist/src/studio/component.js +26 -61
- package/dist/src/studio/component.js.map +1 -1
- package/dist/src/studio/index.d.ts +2 -2
- package/dist/src/studio/index.d.ts.map +1 -1
- package/dist/src/studio/index.js +1 -1
- package/dist/src/studio/index.js.map +1 -1
- package/dist/src/studio/inspector.d.ts +10 -39
- package/dist/src/studio/inspector.d.ts.map +1 -1
- package/dist/src/studio/inspector.js +11 -31
- package/dist/src/studio/inspector.js.map +1 -1
- package/dist/src/studio/library.d.ts +3 -169
- package/dist/src/studio/library.d.ts.map +1 -1
- package/dist/src/studio/library.js +1 -1
- package/dist/src/studio/page.d.ts +0 -8
- package/dist/src/studio/page.d.ts.map +1 -1
- package/dist/src/studio/pages.d.ts +17 -591
- package/dist/src/studio/pages.d.ts.map +1 -1
- package/dist/src/studio/pages.js +17 -44
- package/dist/src/studio/pages.js.map +1 -1
- package/dist/src/studio/palette.d.ts +2 -7
- package/dist/src/studio/palette.d.ts.map +1 -1
- package/dist/src/studio/palette.js +4 -5
- package/dist/src/studio/palette.js.map +1 -1
- package/dist/src/studio/publish.d.ts +8 -18
- package/dist/src/studio/publish.d.ts.map +1 -1
- package/dist/src/studio/publish.js +10 -36
- package/dist/src/studio/publish.js.map +1 -1
- package/dist/src/utils/derive.d.ts +12 -12
- package/dist/src/utils/derive.d.ts.map +1 -1
- package/dist/src/utils/derive.js +5 -2
- package/dist/src/utils/derive.js.map +1 -1
- package/dist/src/utils/keyed-rows.d.ts +41 -0
- package/dist/src/utils/keyed-rows.d.ts.map +1 -0
- package/dist/src/utils/keyed-rows.js +64 -0
- package/dist/src/utils/keyed-rows.js.map +1 -0
- package/dist/src/utils/optimise.d.ts +79 -0
- package/dist/src/utils/optimise.d.ts.map +1 -0
- package/dist/src/utils/optimise.js +46 -0
- package/dist/src/utils/optimise.js.map +1 -0
- package/dist/src/utils/ordered-source.d.ts.map +1 -1
- package/dist/src/utils/ordered-source.js +14 -5
- package/dist/src/utils/ordered-source.js.map +1 -1
- package/dist/test/allocation/allocation.examples.d.ts +1900 -1610
- package/dist/test/allocation/allocation.examples.d.ts.map +1 -1
- package/dist/test/allocation/allocation.examples.js +179 -89
- package/dist/test/allocation/allocation.examples.js.map +1 -1
- package/dist/test/allocation/optimise.examples.d.ts +109 -0
- package/dist/test/allocation/optimise.examples.d.ts.map +1 -0
- package/dist/test/allocation/optimise.examples.js +223 -0
- package/dist/test/allocation/optimise.examples.js.map +1 -0
- package/dist/test/bind/data/data.examples.d.ts +1172 -514
- package/dist/test/bind/data/data.examples.d.ts.map +1 -1
- package/dist/test/bind/data/data.examples.js +284 -164
- package/dist/test/bind/data/data.examples.js.map +1 -1
- package/dist/test/bind/record/record.examples.d.ts +457 -428
- package/dist/test/bind/record/record.examples.d.ts.map +1 -1
- package/dist/test/bind/record/record.examples.js +41 -21
- package/dist/test/bind/record/record.examples.js.map +1 -1
- package/dist/test/calendar/calendar-records.examples.d.ts +162 -170
- package/dist/test/calendar/calendar-records.examples.d.ts.map +1 -1
- package/dist/test/calendar/calendar-records.examples.js +20 -12
- package/dist/test/calendar/calendar-records.examples.js.map +1 -1
- package/dist/test/calendar/calendar-windows.examples.d.ts +9 -0
- package/dist/test/calendar/calendar-windows.examples.d.ts.map +1 -0
- package/dist/test/calendar/calendar-windows.examples.js +111 -0
- package/dist/test/calendar/calendar-windows.examples.js.map +1 -0
- package/dist/test/calendar/calendar.examples.d.ts +1172 -915
- package/dist/test/calendar/calendar.examples.d.ts.map +1 -1
- package/dist/test/calendar/calendar.examples.js +211 -124
- package/dist/test/calendar/calendar.examples.js.map +1 -1
- package/dist/test/calendar/optimise.examples.d.ts +132 -0
- package/dist/test/calendar/optimise.examples.d.ts.map +1 -0
- package/dist/test/calendar/optimise.examples.js +75 -0
- package/dist/test/calendar/optimise.examples.js.map +1 -0
- package/dist/test/examples-package.d.ts +49 -16
- package/dist/test/examples-package.d.ts.map +1 -1
- package/dist/test/examples-package.js +138 -49
- package/dist/test/examples-package.js.map +1 -1
- package/dist/test/flowchart/flowchart.examples.d.ts +3841 -2840
- package/dist/test/flowchart/flowchart.examples.d.ts.map +1 -1
- package/dist/test/flowchart/flowchart.examples.js +211 -121
- package/dist/test/flowchart/flowchart.examples.js.map +1 -1
- package/dist/test/plan/optimise.examples.d.ts +207 -0
- package/dist/test/plan/optimise.examples.d.ts.map +1 -0
- package/dist/test/plan/optimise.examples.js +98 -0
- package/dist/test/plan/optimise.examples.js.map +1 -0
- package/dist/test/plan/plan-events.examples.d.ts +4055 -3279
- package/dist/test/plan/plan-events.examples.d.ts.map +1 -1
- package/dist/test/plan/plan-events.examples.js +492 -319
- package/dist/test/plan/plan-events.examples.js.map +1 -1
- package/dist/test/plan/plan-nested.examples.d.ts +1829 -0
- package/dist/test/plan/plan-nested.examples.d.ts.map +1 -0
- package/dist/test/plan/plan-nested.examples.js +321 -0
- package/dist/test/plan/plan-nested.examples.js.map +1 -0
- package/dist/test/plan/plan-records.examples.d.ts +391 -244
- package/dist/test/plan/plan-records.examples.d.ts.map +1 -1
- package/dist/test/plan/plan-records.examples.js +186 -65
- package/dist/test/plan/plan-records.examples.js.map +1 -1
- package/dist/test/plan/plan-windows.examples.d.ts +1978 -803
- package/dist/test/plan/plan-windows.examples.d.ts.map +1 -1
- package/dist/test/plan/plan-windows.examples.js +269 -99
- package/dist/test/plan/plan-windows.examples.js.map +1 -1
- package/dist/test/plan/plan.examples.d.ts +2238 -5726
- package/dist/test/plan/plan.examples.d.ts.map +1 -1
- package/dist/test/plan/plan.examples.js +846 -973
- package/dist/test/plan/plan.examples.js.map +1 -1
- package/dist/test/query/query.examples.d.ts +5221 -3005
- package/dist/test/query/query.examples.d.ts.map +1 -1
- package/dist/test/query/query.examples.js +169 -118
- package/dist/test/query/query.examples.js.map +1 -1
- package/dist/test/roster/domain.examples.d.ts +804 -0
- package/dist/test/roster/domain.examples.d.ts.map +1 -1
- package/dist/test/roster/domain.examples.js +3 -3
- package/dist/test/roster/domain.examples.js.map +1 -1
- package/dist/test/roster/optimise.examples.d.ts +485 -0
- package/dist/test/roster/optimise.examples.d.ts.map +1 -0
- package/dist/test/roster/optimise.examples.js +155 -0
- package/dist/test/roster/optimise.examples.js.map +1 -0
- package/dist/test/roster/roster-records.examples.d.ts +364 -404
- package/dist/test/roster/roster-records.examples.d.ts.map +1 -1
- package/dist/test/roster/roster-records.examples.js +40 -26
- package/dist/test/roster/roster-records.examples.js.map +1 -1
- package/dist/test/roster/roster.examples.d.ts +5091 -1424
- package/dist/test/roster/roster.examples.d.ts.map +1 -1
- package/dist/test/roster/roster.examples.js +255 -109
- package/dist/test/roster/roster.examples.js.map +1 -1
- package/dist/test/roster/warehouse.d.ts +150 -7
- package/dist/test/roster/warehouse.d.ts.map +1 -1
- package/dist/test/roster/warehouse.js +36 -11
- package/dist/test/roster/warehouse.js.map +1 -1
- package/dist/test/schedule/schedule.examples.d.ts +2646 -2473
- package/dist/test/schedule/schedule.examples.d.ts.map +1 -1
- package/dist/test/schedule/schedule.examples.js +144 -88
- package/dist/test/schedule/schedule.examples.js.map +1 -1
- package/dist/test/schematic/schematic-records.examples.d.ts +454 -0
- package/dist/test/schematic/schematic-records.examples.d.ts.map +1 -0
- package/dist/test/schematic/schematic-records.examples.js +219 -0
- package/dist/test/schematic/schematic-records.examples.js.map +1 -0
- package/dist/test/schematic/schematic.examples.d.ts +2640 -0
- package/dist/test/schematic/schematic.examples.d.ts.map +1 -0
- package/dist/test/schematic/schematic.examples.js +559 -0
- package/dist/test/schematic/schematic.examples.js.map +1 -0
- package/dist/test/sheet/optimise.examples.d.ts +184 -0
- package/dist/test/sheet/optimise.examples.d.ts.map +1 -0
- package/dist/test/sheet/optimise.examples.js +79 -0
- package/dist/test/sheet/optimise.examples.js.map +1 -0
- package/dist/test/sheet/sheet-records.examples.d.ts +208 -356
- package/dist/test/sheet/sheet-records.examples.d.ts.map +1 -1
- package/dist/test/sheet/sheet-records.examples.js +66 -29
- package/dist/test/sheet/sheet-records.examples.js.map +1 -1
- package/dist/test/sheet/sheet.examples.d.ts +3650 -3377
- package/dist/test/sheet/sheet.examples.d.ts.map +1 -1
- package/dist/test/sheet/sheet.examples.js +406 -296
- package/dist/test/sheet/sheet.examples.js.map +1 -1
- package/dist/test/studio/component.examples.js +2 -2
- package/dist/test/studio/component.examples.js.map +1 -1
- package/dist/test/studio/page.examples.js +6 -6
- package/dist/test/studio/page.examples.js.map +1 -1
- package/dist/test/studio/studio.examples.d.ts +2329 -873
- package/dist/test/studio/studio.examples.d.ts.map +1 -1
- package/dist/test/studio/studio.examples.js +155 -107
- package/dist/test/studio/studio.examples.js.map +1 -1
- package/package.json +15 -11
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* A row's fields, read by name (#1367, #1386): the field types an option may
|
|
7
|
+
* name, a field read as an East expression, and a field holding the key of a
|
|
8
|
+
* keyed entity of a builder — one of Schedule's resources, one of the
|
|
9
|
+
* Schematic's items — by one kind's key, or a kind per case. Such a field is
|
|
10
|
+
* read as a reference to the entity, its kind's slot and its key, and written
|
|
11
|
+
* back from one.
|
|
12
|
+
*
|
|
13
|
+
* Schedule's event kinds (`events.ts`, a resource field) and the Schematic's
|
|
14
|
+
* links (a link's ends) check and read such a field through these, each
|
|
15
|
+
* naming the option and what the keys are of in its own words.
|
|
16
|
+
*
|
|
17
|
+
* A row's fields are written by name too ({@link fieldSetters}): a setter for
|
|
18
|
+
* every field at any depth, which an inspector's edit of a Schedule kind's
|
|
19
|
+
* field writes through, and an author's card dropped on a Schematic entity
|
|
20
|
+
* (#1390).
|
|
21
|
+
*
|
|
22
|
+
* @packageDocumentation
|
|
23
|
+
*/
|
|
24
|
+
import { BlobType, East, OptionType, StringType, isTypeEqual, none, some, variant, } from "@elaraai/east";
|
|
25
|
+
import { ScheduleResourceRefType } from "./types.js";
|
|
26
|
+
import { optionOf, typeText } from "./window.js";
|
|
27
|
+
/**
|
|
28
|
+
* A field of a struct as an East expression, by name.
|
|
29
|
+
*
|
|
30
|
+
* @param row - The struct, as an East expression
|
|
31
|
+
* @param name - The field's name
|
|
32
|
+
* @returns The field
|
|
33
|
+
*/
|
|
34
|
+
export function fieldOf(row, name) {
|
|
35
|
+
return row[name];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A setter for every field of a row, at any depth: what an inspector's edit of
|
|
39
|
+
* one field writes through — a Schedule kind's `field` gesture — and an
|
|
40
|
+
* author's card's patch dropped on a Schematic entity, a field at a time
|
|
41
|
+
* (#1390). Each takes the field's value as bytes at the field's type, and
|
|
42
|
+
* rebuilds the structs down its path from the leaf up, every other field as it
|
|
43
|
+
* was.
|
|
44
|
+
*
|
|
45
|
+
* @param rowType - The row type
|
|
46
|
+
* @returns Each field's setter: a field, then the fields of a struct it holds, in the row's order
|
|
47
|
+
*/
|
|
48
|
+
export function fieldSetters(rowType) {
|
|
49
|
+
const setters = [];
|
|
50
|
+
const setterOf = (prefix, name, type) => East.function([rowType, BlobType], rowType, (_$, row, bytes) => {
|
|
51
|
+
const value = bytes.decodeBeast(type, "v2");
|
|
52
|
+
// The structs down the path, each with the field below it replaced, rebuilt from the leaf up.
|
|
53
|
+
const chain = [];
|
|
54
|
+
let at = row;
|
|
55
|
+
let struct = rowType;
|
|
56
|
+
for (const step of prefix) {
|
|
57
|
+
chain.push({ struct, field: step, at });
|
|
58
|
+
at = fieldOf(at, step);
|
|
59
|
+
struct = struct.fields[step];
|
|
60
|
+
}
|
|
61
|
+
const leaf = struct;
|
|
62
|
+
const leafAt = at;
|
|
63
|
+
let next = East.value(Object.fromEntries(Object.keys(leaf.fields).map((f) => [f, f === name ? value : fieldOf(leafAt, f)])), leaf);
|
|
64
|
+
for (let i = chain.length - 1; i >= 0; i--) {
|
|
65
|
+
const link = chain[i];
|
|
66
|
+
const inner = next;
|
|
67
|
+
next = East.value(Object.fromEntries(Object.keys(link.struct.fields).map((f) => [f, f === link.field ? inner : fieldOf(link.at, f)])), link.struct);
|
|
68
|
+
}
|
|
69
|
+
return next;
|
|
70
|
+
});
|
|
71
|
+
const collect = (struct, prefix) => {
|
|
72
|
+
for (const [name, type] of Object.entries(struct.fields)) {
|
|
73
|
+
setters.push({ path: [...prefix, name], set: setterOf(prefix, name, type) });
|
|
74
|
+
if (type.type === "Struct")
|
|
75
|
+
collect(type, [...prefix, name]);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
collect(rowType, []);
|
|
79
|
+
return setters;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* A variant's cases, when every one of them holds a String.
|
|
83
|
+
*
|
|
84
|
+
* @param type - The type
|
|
85
|
+
* @returns Its cases, in order; `undefined` for a type that is no such variant, or an Option
|
|
86
|
+
*/
|
|
87
|
+
export function stringCases(type) {
|
|
88
|
+
if (type.type !== "Variant" || optionOf(type) !== undefined)
|
|
89
|
+
return undefined;
|
|
90
|
+
const cases = Object.entries(type.cases);
|
|
91
|
+
return cases.length > 0 && cases.every(([, t]) => isTypeEqual(t, StringType)) ? cases.map(([c]) => c) : undefined;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Checks a key field (see {@link KeyField}).
|
|
95
|
+
*
|
|
96
|
+
* @param field - The field's name
|
|
97
|
+
* @param type - The field's type
|
|
98
|
+
* @param of - What its option's `of` names: a slot, or a slot per case
|
|
99
|
+
* @param words - How the refusals name it
|
|
100
|
+
* @returns The field, checked
|
|
101
|
+
* @throws {Error} Naming the option: a String field whose `of` names no slot;
|
|
102
|
+
* a variant whose `of` does not name a slot for each of its cases, or names
|
|
103
|
+
* one slot twice; a field holding neither a String nor a variant of String
|
|
104
|
+
* cases, nor an Option of either
|
|
105
|
+
*/
|
|
106
|
+
export function checkKeyField(field, type, of, words) {
|
|
107
|
+
const { where, prop, noun } = words;
|
|
108
|
+
const inner = optionOf(type) ?? type;
|
|
109
|
+
const optional = optionOf(type) !== undefined;
|
|
110
|
+
const cases = stringCases(inner);
|
|
111
|
+
if (isTypeEqual(inner, StringType)) {
|
|
112
|
+
if (typeof of !== "string" || of === "") {
|
|
113
|
+
throw new Error(`${where}: \`${prop}.of\` names the ${noun} slot "${field}" holds keys of — a String field holds one kind's keys`);
|
|
114
|
+
}
|
|
115
|
+
return { field, shape: "key", of, optional };
|
|
116
|
+
}
|
|
117
|
+
if (cases !== undefined) {
|
|
118
|
+
if (typeof of !== "object" || of === null) {
|
|
119
|
+
throw new Error(`${where}: "${field}" is a variant — \`${prop}.of\` names a ${noun} slot per case: { ${cases.map((c) => `${c}: "…"`).join(", ")} }`);
|
|
120
|
+
}
|
|
121
|
+
const slots = of;
|
|
122
|
+
const named = Object.keys(slots);
|
|
123
|
+
if (named.length !== cases.length || !named.every((c) => cases.includes(c))) {
|
|
124
|
+
throw new Error(`${where}: \`${prop}.of\` names a ${noun} slot for each of "${field}"'s cases (${cases.join(", ")}) — and it names ${named.join(", ") || "none"}`);
|
|
125
|
+
}
|
|
126
|
+
const kinds = Object.values(slots);
|
|
127
|
+
if (new Set(kinds).size !== kinds.length) {
|
|
128
|
+
throw new Error(`${where}: \`${prop}.of\` names each ${noun} slot once — a case per kind of ${noun} — and it names ${kinds.join(", ")}`);
|
|
129
|
+
}
|
|
130
|
+
return { field, shape: "cases", of: slots, cases, optional, variant: inner };
|
|
131
|
+
}
|
|
132
|
+
throw new Error(`${where}: \`${prop}.field\` names a field holding a ${noun}'s key — a String, a variant of String cases, or an Option of either — and "${field}" holds ${typeText(type)}`);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* The slots a key field's keys are of, in order.
|
|
136
|
+
*
|
|
137
|
+
* @param field - The field, checked
|
|
138
|
+
* @returns Its one slot, or a slot per case
|
|
139
|
+
*/
|
|
140
|
+
export function keyFieldSlots(field) {
|
|
141
|
+
return field.shape === "key" ? [field.of] : Object.values(field.of);
|
|
142
|
+
}
|
|
143
|
+
/** A reference to a keyed entity, as an Option: none for an Option field holding none. */
|
|
144
|
+
const RefOption = OptionType(ScheduleResourceRefType);
|
|
145
|
+
/**
|
|
146
|
+
* Reads a key field as a reference to the entity it names: its kind's slot
|
|
147
|
+
* and its key — `none` for an Option field holding none, or for a row of a
|
|
148
|
+
* builder whose kind has no such field.
|
|
149
|
+
*
|
|
150
|
+
* @param field - The field, checked; `undefined`, the kind has none
|
|
151
|
+
* @param rowType - The row type
|
|
152
|
+
* @returns `(row)` → the reference, if any
|
|
153
|
+
*/
|
|
154
|
+
export function keyFieldRef(field, rowType) {
|
|
155
|
+
return East.function([rowType], RefOption, (_$, row) => {
|
|
156
|
+
if (field === undefined)
|
|
157
|
+
return East.value(none, RefOption);
|
|
158
|
+
const value = fieldOf(row, field.field);
|
|
159
|
+
if (field.shape === "key") {
|
|
160
|
+
const kind = field.of;
|
|
161
|
+
const ref = (key) => East.value(some(East.value({ kind, key }, ScheduleResourceRefType)), RefOption);
|
|
162
|
+
return field.optional
|
|
163
|
+
? value.match({ none: (_$2) => East.value(none, RefOption), some: (_$2, key) => ref(key) })
|
|
164
|
+
: ref(value);
|
|
165
|
+
}
|
|
166
|
+
const of = field.of;
|
|
167
|
+
const byCase = (v) => v.match(Object.fromEntries(field.cases.map((c) => [c, (_$2, key) => East.value(some(East.value({ kind: of[c], key }, ScheduleResourceRefType)), RefOption)])));
|
|
168
|
+
return field.optional
|
|
169
|
+
? value.match({ none: (_$2) => East.value(none, RefOption), some: (_$2, v) => byCase(v) })
|
|
170
|
+
: byCase(value);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* The value a key field takes for a reference: `none` where the field
|
|
175
|
+
* refuses it — a reference to a kind it does not hold keys of, or no
|
|
176
|
+
* reference for a field that must hold one.
|
|
177
|
+
*
|
|
178
|
+
* @param field - The field, checked
|
|
179
|
+
* @param valueType - The field's type
|
|
180
|
+
* @returns `(ref)` → the field's value, if it takes the reference
|
|
181
|
+
*/
|
|
182
|
+
export function keyFieldValue(field, valueType) {
|
|
183
|
+
return East.function([RefOption], OptionType(valueType), ($, ref) => {
|
|
184
|
+
const result = $.let(East.value(none, OptionType(valueType)), OptionType(valueType));
|
|
185
|
+
$.match(ref, {
|
|
186
|
+
none: ($2) => {
|
|
187
|
+
if (field.optional)
|
|
188
|
+
$2.assign(result, East.value(some(East.value(none, valueType)), OptionType(valueType)));
|
|
189
|
+
},
|
|
190
|
+
some: ($2, r) => {
|
|
191
|
+
if (field.shape === "key") {
|
|
192
|
+
const key = field.optional ? East.value(some(r.key), valueType) : r.key;
|
|
193
|
+
$2.if(East.equal(r.kind, field.of), ($3) => { $3.assign(result, East.value(some(key), OptionType(valueType))); });
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
for (const c of field.cases) {
|
|
197
|
+
const caseValue = East.value(variant(c, r.key), field.variant);
|
|
198
|
+
const held = field.optional ? East.value(some(caseValue), valueType) : caseValue;
|
|
199
|
+
$2.if(East.equal(r.kind, field.of[c]), ($3) => { $3.assign(result, East.value(some(held), OptionType(valueType))); });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
return result;
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../src/schedule/fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,13 @@ export interface ScheduleLibraryTabConfig<K extends EastType, R extends EastType
|
|
|
58
58
|
*/
|
|
59
59
|
source?: string;
|
|
60
60
|
}
|
|
61
|
+
/** How an author's tab's refusals name what its cards land on, by builder. */
|
|
62
|
+
export interface ScheduleTabWords {
|
|
63
|
+
/** One kind its cards land on, as a refusal names it (`event kind`). */
|
|
64
|
+
readonly kind: string;
|
|
65
|
+
/** The patch a drop is built with (`Schedule.patch`). */
|
|
66
|
+
readonly patch: string;
|
|
67
|
+
}
|
|
61
68
|
/** An author's declared tab, before its accessors are reified. */
|
|
62
69
|
export interface ScheduleTabDeclaration {
|
|
63
70
|
/** Identifies an author-defined tab. */
|
|
@@ -68,13 +75,14 @@ export interface ScheduleTabDeclaration {
|
|
|
68
75
|
readonly config: ScheduleLibraryTabConfig<EastType, EastType>;
|
|
69
76
|
}
|
|
70
77
|
/**
|
|
71
|
-
* Resolves author cards and checks the patch type against the
|
|
78
|
+
* Resolves author cards and checks the patch type against the kinds its cards land on.
|
|
72
79
|
* @param tab - The declared tab
|
|
73
|
-
* @param events -
|
|
80
|
+
* @param events - The kinds a card may land on, by slot: a Schedule builder's event kinds, a Schematic's kinds
|
|
74
81
|
* @param owner - The builder's name for diagnostics
|
|
75
82
|
* @param sources - The builder's Slice sources, which the tab's `source` must be one of
|
|
83
|
+
* @param words - How the refusals name those kinds and the patch a drop is built with; a Schedule builder's by default
|
|
76
84
|
* @returns The closed author tab
|
|
77
85
|
* @throws {Error} When rows are not keyed, a drop matches zero or several kinds, or the tab names a source the slice lacks
|
|
78
86
|
*/
|
|
79
|
-
export declare function buildScheduleTab(tab: ScheduleTabDeclaration, events: readonly (readonly [string, ScheduleEventKind<EastType, EastType>])[], owner: string, sources: readonly string[]): ExprType<typeof ScheduleAuthorTabType>;
|
|
87
|
+
export declare function buildScheduleTab(tab: ScheduleTabDeclaration, events: readonly (readonly [string, Pick<ScheduleEventKind<EastType, EastType>, "rowType">])[], owner: string, sources: readonly string[], words?: ScheduleTabWords): ExprType<typeof ScheduleAuthorTabType>;
|
|
80
88
|
//# sourceMappingURL=library.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../../src/schedule/library.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sEAAsE;AACtE,OAAO,EACH,SAAS,EAAwB,UAAU,EAAE,UAAU,EAAE,UAAU,EACnE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAqB,KAAK,kBAAkB,EAC3E,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD,gEAAgE;AAChE,eAAO,MAAM,uBAAuB;;;;;;;;;EAMlC,CAAC;AAEH,yDAAyD;AACzD,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;EAEhC,CAAC;AAEH,kEAAkE;AAClE,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,GAAG,QAAQ;IAC3G,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,KAAK,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC9E,uDAAuD;IACvD,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1F,2CAA2C;IAC3C,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC/E,2HAA2H;IAC3H,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3D;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,kEAAkE;AAClE,MAAM,WAAW,sBAAsB;IACnC,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,sBAAsB;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;CACjE;AAED
|
|
1
|
+
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../../src/schedule/library.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sEAAsE;AACtE,OAAO,EACH,SAAS,EAAwB,UAAU,EAAE,UAAU,EAAE,UAAU,EACnE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAqB,KAAK,kBAAkB,EAC3E,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD,gEAAgE;AAChE,eAAO,MAAM,uBAAuB;;;;;;;;;EAMlC,CAAC;AAEH,yDAAyD;AACzD,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;EAEhC,CAAC;AAEH,kEAAkE;AAClE,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,GAAG,QAAQ;IAC3G,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,KAAK,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC9E,uDAAuD;IACvD,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1F,2CAA2C;IAC3C,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC/E,2HAA2H;IAC3H,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3D;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC7B,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AAKD,kEAAkE;AAClE,MAAM,WAAW,sBAAsB;IACnC,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,sBAAsB;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;CACjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,sBAAsB,EAAE,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EACxJ,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,GAAE,gBAAiC,GAAG,QAAQ,CAAC,OAAO,qBAAqB,CAAC,CA4E/H"}
|
|
@@ -22,16 +22,19 @@ export const ScheduleLibraryCardType = StructType({
|
|
|
22
22
|
export const ScheduleAuthorTabType = StructType({
|
|
23
23
|
name: StringType, icon: OptionType(StringType), drop: OptionType(StringType), cards: ArrayType(ScheduleLibraryCardType), source: OptionType(StringType),
|
|
24
24
|
});
|
|
25
|
+
/** The words of a Schedule builder's tab: its cards land on event kinds, their drops built with `Schedule.patch`. */
|
|
26
|
+
const SCHEDULE_WORDS = { kind: "event kind", patch: "Schedule.patch" };
|
|
25
27
|
/**
|
|
26
|
-
* Resolves author cards and checks the patch type against the
|
|
28
|
+
* Resolves author cards and checks the patch type against the kinds its cards land on.
|
|
27
29
|
* @param tab - The declared tab
|
|
28
|
-
* @param events -
|
|
30
|
+
* @param events - The kinds a card may land on, by slot: a Schedule builder's event kinds, a Schematic's kinds
|
|
29
31
|
* @param owner - The builder's name for diagnostics
|
|
30
32
|
* @param sources - The builder's Slice sources, which the tab's `source` must be one of
|
|
33
|
+
* @param words - How the refusals name those kinds and the patch a drop is built with; a Schedule builder's by default
|
|
31
34
|
* @returns The closed author tab
|
|
32
35
|
* @throws {Error} When rows are not keyed, a drop matches zero or several kinds, or the tab names a source the slice lacks
|
|
33
36
|
*/
|
|
34
|
-
export function buildScheduleTab(tab, events, owner, sources) {
|
|
37
|
+
export function buildScheduleTab(tab, events, owner, sources, words = SCHEDULE_WORDS) {
|
|
35
38
|
const cfg = tab.config;
|
|
36
39
|
const named = tabSource(owner, cfg.name, cfg.source, sources);
|
|
37
40
|
const where = owner + ': the "' + cfg.name + '" tab';
|
|
@@ -53,11 +56,11 @@ export function buildScheduleTab(tab, events, owner, sources) {
|
|
|
53
56
|
&& isTypeEqual(patchType, SchedulePatchTypeFor(kind.rowType)));
|
|
54
57
|
if (takers.length === 0) {
|
|
55
58
|
const kinds = events.map(([slot]) => slot).join(", ");
|
|
56
|
-
throw new Error(`${where}'s \`drop\` returns a patch over no
|
|
57
|
-
`over the row type of the kind its cards land on (${kinds === "" ? "this " + owner + " has no
|
|
59
|
+
throw new Error(`${where}'s \`drop\` returns a patch over no ${words.kind}'s row type — build it with ${words.patch}(RowType, { … }) ` +
|
|
60
|
+
`over the row type of the kind its cards land on (${kinds === "" ? "this " + owner + " has no " + words.kind + "s" : kinds})`);
|
|
58
61
|
}
|
|
59
62
|
if (takers.length > 1) {
|
|
60
|
-
throw new Error(`${where}'s \`drop\` returns a patch over a row type ${takers.length}
|
|
63
|
+
throw new Error(`${where}'s \`drop\` returns a patch over a row type ${takers.length} ${words.kind}s share ` +
|
|
61
64
|
`(${takers.map(([slot]) => slot).join(", ")}) — a card lands on one kind, so give each kind a row type of its own`);
|
|
62
65
|
}
|
|
63
66
|
lands = takers[0][0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../../src/schedule/library.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sEAAsE;AACtE,OAAO,EACH,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAE1G,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,gEAAgE;AAChE,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC;IAC9C,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC;IAC5B,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,SAAS,CAAC,sBAAsB,CAAC;CAC1C,CAAC,CAAC;AAKH;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;IAC5C,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,uBAAuB,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC;CAC1J,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../../src/schedule/library.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The optimiser's request and answer over a builder's event kinds (#1409,
|
|
7
|
+
* `Optimise Spec.md` §5.1): what a Calendar's and a Plan's `optimise` asks and
|
|
8
|
+
* answers — the window in view, the run number, every event kind's rows in the
|
|
9
|
+
* window and its backlog by slot and by key, and every resource kind's rows as
|
|
10
|
+
* context; the answer the events, complete. The types are constructors over
|
|
11
|
+
* the kinds' rows by slot: the same kinds give the same East type, which the
|
|
12
|
+
* tag holds the bound function to.
|
|
13
|
+
*
|
|
14
|
+
* @packageDocumentation
|
|
15
|
+
*/
|
|
16
|
+
import { DateTimeType, DictType, IntegerType, StringType, StructType, type EastType, type ExprType } from "@elaraai/east";
|
|
17
|
+
import { FuncBindingType } from "../bind/func.js";
|
|
18
|
+
/**
|
|
19
|
+
* The kinds' rows by slot, as an app writes them: each slot's row type, for a
|
|
20
|
+
* kind whose record is keyed by String, or its record type `DictType(K, R)`,
|
|
21
|
+
* for one keyed otherwise.
|
|
22
|
+
*/
|
|
23
|
+
export type ScheduleOptimiseRows = Readonly<Record<string, EastType>>;
|
|
24
|
+
/**
|
|
25
|
+
* The kinds' records by slot, as the East types the rows given make them: a
|
|
26
|
+
* row type's slot a String-keyed record of it, a Dict type's slot the record
|
|
27
|
+
* as it is.
|
|
28
|
+
*
|
|
29
|
+
* @typeParam Rows - The kinds' rows by slot
|
|
30
|
+
*/
|
|
31
|
+
export type ScheduleOptimiseRecordsOf<Rows extends ScheduleOptimiseRows> = StructType<{
|
|
32
|
+
[S in keyof Rows & string]: Rows[S] extends DictType<infer K, infer V> ? DictType<K, V> : DictType<StringType, Rows[S]>;
|
|
33
|
+
}>;
|
|
34
|
+
/** The kinds' records by slot on the wire: `{ [slot]: DictType(K, R) }`, the slots in name order. */
|
|
35
|
+
export type ScheduleOptimiseRecordsType = ScheduleOptimiseRecordsOf<ScheduleOptimiseRows>;
|
|
36
|
+
/**
|
|
37
|
+
* An optimiser's request over event kinds `E` and resource kinds `S` — what
|
|
38
|
+
* {@link ScheduleOptimiseRequestTypeFor} constructs.
|
|
39
|
+
*
|
|
40
|
+
* @typeParam E - The event kinds' rows by slot
|
|
41
|
+
* @typeParam S - The resource kinds' rows by slot
|
|
42
|
+
*/
|
|
43
|
+
export type ScheduleOptimiseRequestType<E extends ScheduleOptimiseRows = ScheduleOptimiseRows, S extends ScheduleOptimiseRows = ScheduleOptimiseRows> = StructType<{
|
|
44
|
+
from: DateTimeType;
|
|
45
|
+
to: DateTimeType;
|
|
46
|
+
run: IntegerType;
|
|
47
|
+
events: ScheduleOptimiseRecordsOf<E>;
|
|
48
|
+
resources: ScheduleOptimiseRecordsOf<S>;
|
|
49
|
+
}>;
|
|
50
|
+
/**
|
|
51
|
+
* An optimiser's answer over event kinds `E` — what
|
|
52
|
+
* {@link ScheduleOptimiseResultTypeFor} constructs.
|
|
53
|
+
*
|
|
54
|
+
* @typeParam E - The event kinds' rows by slot
|
|
55
|
+
*/
|
|
56
|
+
export type ScheduleOptimiseResultType<E extends ScheduleOptimiseRows = ScheduleOptimiseRows> = StructType<{
|
|
57
|
+
events: ScheduleOptimiseRecordsOf<E>;
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* One request to the app's optimiser (#1409): the window in view and the
|
|
61
|
+
* kinds' rows, as drafted, for the optimiser to schedule or improve — the
|
|
62
|
+
* Elara eye's one call.
|
|
63
|
+
*
|
|
64
|
+
* @typeParam E - The event kinds' rows by slot
|
|
65
|
+
* @typeParam S - The resource kinds' rows by slot
|
|
66
|
+
* @param events - The event kinds' rows by slot: each slot's row type (a String-keyed kind's), or its record type `DictType(K, R)`
|
|
67
|
+
* @param resources - The resource kinds' rows by slot, the same way; none by default
|
|
68
|
+
* @returns `StructType({ from, to, run, events, resources })`
|
|
69
|
+
*
|
|
70
|
+
* @property from - The window's start
|
|
71
|
+
* @property to - The window's end, exclusive
|
|
72
|
+
* @property run - The run's number, from 1 per builder per browser
|
|
73
|
+
* @property events - Each event kind's rows by slot, by key: the kind's rows in the window and its backlog's, the app's own rows as the session holds them — the base with every unapplied draft in place, every row whatever the rail shows
|
|
74
|
+
* @property resources - Each resource kind's rows by slot, by key, as context
|
|
75
|
+
*/
|
|
76
|
+
export declare function ScheduleOptimiseRequestTypeFor<E extends ScheduleOptimiseRows, S extends ScheduleOptimiseRows = Record<never, never>>(events: E, resources?: S): ScheduleOptimiseRequestType<E, S>;
|
|
77
|
+
/**
|
|
78
|
+
* The app's optimiser's answer (#1409): every event kind's rows, complete, by
|
|
79
|
+
* slot and by key. The builder diffs it against the request by key — a key the
|
|
80
|
+
* request did not hold is an event added, one it held with another row an
|
|
81
|
+
* event changed, one missing an event removed — and records the diff as one
|
|
82
|
+
* step of its history.
|
|
83
|
+
*
|
|
84
|
+
* @typeParam E - The event kinds' rows by slot
|
|
85
|
+
* @param events - The event kinds' rows by slot, as the request took them
|
|
86
|
+
* @returns `StructType({ events })`
|
|
87
|
+
*
|
|
88
|
+
* @property events - Each event kind's rows by slot, by key, complete; a new event's key the optimiser's own
|
|
89
|
+
*/
|
|
90
|
+
export declare function ScheduleOptimiseResultTypeFor<E extends ScheduleOptimiseRows>(events: E): ScheduleOptimiseResultType<E>;
|
|
91
|
+
/** A kind's key and row types: what `Schedule.events` and `Schedule.resources` hold of their records. */
|
|
92
|
+
interface ScheduleKeyed {
|
|
93
|
+
/** The kind's key type. */
|
|
94
|
+
readonly keyType: EastType;
|
|
95
|
+
/** The kind's row type. */
|
|
96
|
+
readonly rowType: EastType;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The kinds' records by slot, from the kinds themselves: what a builder's
|
|
100
|
+
* request and answer are built over, and the renderer builds a run's request
|
|
101
|
+
* type from.
|
|
102
|
+
*
|
|
103
|
+
* @param kinds - The kinds, by slot
|
|
104
|
+
* @returns Each slot's record type, `DictType(K, R)`
|
|
105
|
+
* @internal
|
|
106
|
+
*/
|
|
107
|
+
export declare function scheduleOptimiseRows(kinds: readonly (readonly [string, ScheduleKeyed])[]): ScheduleOptimiseRows;
|
|
108
|
+
/**
|
|
109
|
+
* A Calendar's or a Plan's `optimise` binding, checked (#1409): `Func.bind` of
|
|
110
|
+
* an `e3.function` from `OptimiseRequest(E, S)` to `OptimiseResult(E)` over the
|
|
111
|
+
* builder's kinds' rows by slot.
|
|
112
|
+
*
|
|
113
|
+
* @param builder - The builder, as the refusals name it
|
|
114
|
+
* @param optimise - What the app passed as `optimise`
|
|
115
|
+
* @param events - The event kinds, by slot
|
|
116
|
+
* @param resources - The resource kinds, by slot
|
|
117
|
+
* @returns The binding's descriptor, which names the function
|
|
118
|
+
* @throws {Error} When it is not a `Func.bind` handle, or its function asks or answers another type, naming it — one bound
|
|
119
|
+
* over the same slots' other rows naming both
|
|
120
|
+
* @internal
|
|
121
|
+
*/
|
|
122
|
+
export declare function scheduleOptimiseBinding(builder: "Calendar" | "Plan", optimise: unknown, events: readonly (readonly [string, ScheduleKeyed])[], resources: readonly (readonly [string, ScheduleKeyed])[]): ExprType<typeof FuncBindingType>;
|
|
123
|
+
export {};
|
|
124
|
+
//# sourceMappingURL=optimise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimise.d.ts","sourceRoot":"","sources":["../../../src/schedule/optimise.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAA0B,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAClJ,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEtE;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,CAAC,IAAI,SAAS,oBAAoB,IAAI,UAAU,CAAC;KACjF,CAAC,IAAI,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CAC1H,CAAC,CAAC;AAEH,qGAAqG;AACrG,MAAM,MAAM,2BAA2B,GAAG,yBAAyB,CAAC,oBAAoB,CAAC,CAAC;AAE1F;;;;;;GAMG;AACH,MAAM,MAAM,2BAA2B,CAAC,CAAC,SAAS,oBAAoB,GAAG,oBAAoB,EAAE,CAAC,SAAS,oBAAoB,GAAG,oBAAoB,IAAI,UAAU,CAAC;IAC/J,IAAI,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC;CACzI,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,oBAAoB,GAAG,oBAAoB,IAAI,UAAU,CAAC;IAAE,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,CAAC;AAkBrJ;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,oBAAoB,EAAE,CAAC,SAAS,oBAAoB,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAChI,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,GACzB,2BAA2B,CAAC,CAAC,EAAE,CAAC,CAAC,CAInC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,oBAAoB,EAAE,MAAM,EAAE,CAAC,GAAG,0BAA0B,CAAC,CAAC,CAAC,CAEtH;AAED,yGAAyG;AACzG,UAAU,aAAa;IACnB,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,oBAAoB,CAE/G;AAcD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACnC,OAAO,EAAE,UAAU,GAAG,MAAM,EAC5B,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,EACrD,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,GACzD,QAAQ,CAAC,OAAO,eAAe,CAAC,CA0BlC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The optimiser's request and answer over a builder's event kinds (#1409,
|
|
7
|
+
* `Optimise Spec.md` §5.1): what a Calendar's and a Plan's `optimise` asks and
|
|
8
|
+
* answers — the window in view, the run number, every event kind's rows in the
|
|
9
|
+
* window and its backlog by slot and by key, and every resource kind's rows as
|
|
10
|
+
* context; the answer the events, complete. The types are constructors over
|
|
11
|
+
* the kinds' rows by slot: the same kinds give the same East type, which the
|
|
12
|
+
* tag holds the bound function to.
|
|
13
|
+
*
|
|
14
|
+
* @packageDocumentation
|
|
15
|
+
*/
|
|
16
|
+
import { DateTimeType, DictType, IntegerType, StringType, StructType, isTypeEqual, printType } from "@elaraai/east";
|
|
17
|
+
import { FuncBindingType } from "../bind/func.js";
|
|
18
|
+
import { optimiseBinding } from "../utils/optimise.js";
|
|
19
|
+
/**
|
|
20
|
+
* The kinds' records by slot: each a `Dict` of the kind's rows by its key — a
|
|
21
|
+
* row type given stands for a String-keyed kind's record, a Dict type for the
|
|
22
|
+
* kind's record as it is — the slots in name order, so the same kinds give the
|
|
23
|
+
* same type however they are listed.
|
|
24
|
+
*
|
|
25
|
+
* @param rows - The kinds' rows by slot
|
|
26
|
+
* @returns The records by slot
|
|
27
|
+
*/
|
|
28
|
+
function recordsOf(rows) {
|
|
29
|
+
return StructType(Object.fromEntries(Object.keys(rows).sort().map((slot) => {
|
|
30
|
+
const given = rows[slot];
|
|
31
|
+
return [slot, given.type === "Dict" ? given : DictType(StringType, given)];
|
|
32
|
+
})));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* One request to the app's optimiser (#1409): the window in view and the
|
|
36
|
+
* kinds' rows, as drafted, for the optimiser to schedule or improve — the
|
|
37
|
+
* Elara eye's one call.
|
|
38
|
+
*
|
|
39
|
+
* @typeParam E - The event kinds' rows by slot
|
|
40
|
+
* @typeParam S - The resource kinds' rows by slot
|
|
41
|
+
* @param events - The event kinds' rows by slot: each slot's row type (a String-keyed kind's), or its record type `DictType(K, R)`
|
|
42
|
+
* @param resources - The resource kinds' rows by slot, the same way; none by default
|
|
43
|
+
* @returns `StructType({ from, to, run, events, resources })`
|
|
44
|
+
*
|
|
45
|
+
* @property from - The window's start
|
|
46
|
+
* @property to - The window's end, exclusive
|
|
47
|
+
* @property run - The run's number, from 1 per builder per browser
|
|
48
|
+
* @property events - Each event kind's rows by slot, by key: the kind's rows in the window and its backlog's, the app's own rows as the session holds them — the base with every unapplied draft in place, every row whatever the rail shows
|
|
49
|
+
* @property resources - Each resource kind's rows by slot, by key, as context
|
|
50
|
+
*/
|
|
51
|
+
export function ScheduleOptimiseRequestTypeFor(events, resources) {
|
|
52
|
+
return StructType({
|
|
53
|
+
from: DateTimeType, to: DateTimeType, run: IntegerType, events: recordsOf(events), resources: recordsOf(resources ?? {}),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The app's optimiser's answer (#1409): every event kind's rows, complete, by
|
|
58
|
+
* slot and by key. The builder diffs it against the request by key — a key the
|
|
59
|
+
* request did not hold is an event added, one it held with another row an
|
|
60
|
+
* event changed, one missing an event removed — and records the diff as one
|
|
61
|
+
* step of its history.
|
|
62
|
+
*
|
|
63
|
+
* @typeParam E - The event kinds' rows by slot
|
|
64
|
+
* @param events - The event kinds' rows by slot, as the request took them
|
|
65
|
+
* @returns `StructType({ events })`
|
|
66
|
+
*
|
|
67
|
+
* @property events - Each event kind's rows by slot, by key, complete; a new event's key the optimiser's own
|
|
68
|
+
*/
|
|
69
|
+
export function ScheduleOptimiseResultTypeFor(events) {
|
|
70
|
+
return StructType({ events: recordsOf(events) });
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The kinds' records by slot, from the kinds themselves: what a builder's
|
|
74
|
+
* request and answer are built over, and the renderer builds a run's request
|
|
75
|
+
* type from.
|
|
76
|
+
*
|
|
77
|
+
* @param kinds - The kinds, by slot
|
|
78
|
+
* @returns Each slot's record type, `DictType(K, R)`
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
export function scheduleOptimiseRows(kinds) {
|
|
82
|
+
return Object.fromEntries(kinds.map(([slot, kind]) => [slot, DictType(kind.keyType, kind.rowType)]));
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The kinds' rows by slot, printed as an app writes them: a String-keyed
|
|
86
|
+
* kind's row type, another kind's record type.
|
|
87
|
+
*
|
|
88
|
+
* @param records - The records by slot
|
|
89
|
+
* @returns `{ job: .Struct […], … }`
|
|
90
|
+
*/
|
|
91
|
+
function printRows(records) {
|
|
92
|
+
const fields = records.fields;
|
|
93
|
+
return `{ ${Object.entries(fields).map(([slot, record]) => `${slot}: ${printType(record.key.type === "String" ? record.value : record)}`).join(", ")} }`;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* A Calendar's or a Plan's `optimise` binding, checked (#1409): `Func.bind` of
|
|
97
|
+
* an `e3.function` from `OptimiseRequest(E, S)` to `OptimiseResult(E)` over the
|
|
98
|
+
* builder's kinds' rows by slot.
|
|
99
|
+
*
|
|
100
|
+
* @param builder - The builder, as the refusals name it
|
|
101
|
+
* @param optimise - What the app passed as `optimise`
|
|
102
|
+
* @param events - The event kinds, by slot
|
|
103
|
+
* @param resources - The resource kinds, by slot
|
|
104
|
+
* @returns The binding's descriptor, which names the function
|
|
105
|
+
* @throws {Error} When it is not a `Func.bind` handle, or its function asks or answers another type, naming it — one bound
|
|
106
|
+
* over the same slots' other rows naming both
|
|
107
|
+
* @internal
|
|
108
|
+
*/
|
|
109
|
+
export function scheduleOptimiseBinding(builder, optimise, events, resources) {
|
|
110
|
+
const eventRows = scheduleOptimiseRows(events);
|
|
111
|
+
const resourceRows = scheduleOptimiseRows(resources);
|
|
112
|
+
const request = ScheduleOptimiseRequestTypeFor(eventRows, resourceRows);
|
|
113
|
+
const result = ScheduleOptimiseResultTypeFor(eventRows);
|
|
114
|
+
const slotsOf = (s) => Object.keys(s.fields).sort().join("\u0000");
|
|
115
|
+
const records = (s) => Object.values(s.fields).every((f) => f.type === "Dict");
|
|
116
|
+
return optimiseBinding(optimise, {
|
|
117
|
+
builder, request, result,
|
|
118
|
+
signature: `from ${builder}.Types.OptimiseRequest(E, S) to ${builder}.Types.OptimiseResult(E), E the event kinds' row types by slot and S the resource kinds'`,
|
|
119
|
+
names: { request: `${builder}.Types.OptimiseRequest`, result: `${builder}.Types.OptimiseResult` },
|
|
120
|
+
rows: { request: `${printRows(request.fields.events)}, ${printRows(request.fields.resources)}`, result: printRows(result.fields.events) },
|
|
121
|
+
noun: { theirs: "event rows", ours: "the kinds' rows" }, of: "the kinds' row types by slot",
|
|
122
|
+
otherRows: (asked) => {
|
|
123
|
+
// A request of this shape over other rows: the same slots, each a record, another row type in one of them.
|
|
124
|
+
if (asked.type !== "Struct")
|
|
125
|
+
return undefined;
|
|
126
|
+
const theirEvents = asked.fields["events"], theirResources = asked.fields["resources"];
|
|
127
|
+
if (theirEvents?.type !== "Struct" || theirResources?.type !== "Struct")
|
|
128
|
+
return undefined;
|
|
129
|
+
if (slotsOf(theirEvents) !== slotsOf(request.fields.events) || slotsOf(theirResources) !== slotsOf(request.fields.resources))
|
|
130
|
+
return undefined;
|
|
131
|
+
if (!records(theirEvents) || !records(theirResources))
|
|
132
|
+
return undefined;
|
|
133
|
+
const rebuilt = ScheduleOptimiseRequestTypeFor(theirEvents.fields, theirResources.fields);
|
|
134
|
+
return isTypeEqual(asked, rebuilt)
|
|
135
|
+
? `${printRows(theirEvents)}, ${printRows(theirResources)}`
|
|
136
|
+
: undefined;
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=optimise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimise.js","sourceRoot":"","sources":["../../../src/schedule/optimise.ts"],"names":[],"mappings":"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"}
|