@elaraai/e3-ui 1.0.86 → 1.0.88
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/bind/data-indexed.d.ts +159 -0
- package/dist/src/bind/data-indexed.d.ts.map +1 -0
- package/dist/src/bind/data-indexed.js +105 -0
- package/dist/src/bind/data-indexed.js.map +1 -0
- package/dist/src/bind/data.d.ts +5 -3
- package/dist/src/bind/data.d.ts.map +1 -1
- package/dist/src/bind/data.js +6 -0
- package/dist/src/bind/data.js.map +1 -1
- package/dist/src/bind/record.d.ts +34 -23
- package/dist/src/bind/record.d.ts.map +1 -1
- package/dist/src/bind/record.js +46 -19
- package/dist/src/bind/record.js.map +1 -1
- package/dist/src/calendar/index.d.ts +2923 -0
- package/dist/src/calendar/index.d.ts.map +1 -0
- package/dist/src/calendar/index.js +135 -0
- package/dist/src/calendar/index.js.map +1 -0
- package/dist/src/decision/queue.d.ts +3 -3
- package/dist/src/decision/queue.d.ts.map +1 -1
- package/dist/src/decision/queue.js +2 -2
- package/dist/src/decision/queue.js.map +1 -1
- package/dist/src/decision/types.d.ts +4 -0
- package/dist/src/decision/types.d.ts.map +1 -1
- package/dist/src/decision/types.js +4 -0
- package/dist/src/decision/types.js.map +1 -1
- package/dist/src/flowchart/canvas.d.ts +114 -0
- package/dist/src/flowchart/canvas.d.ts.map +1 -0
- package/dist/src/flowchart/canvas.js +84 -0
- package/dist/src/flowchart/canvas.js.map +1 -0
- package/dist/src/flowchart/flowchart.d.ts +79 -0
- package/dist/src/flowchart/flowchart.d.ts.map +1 -0
- package/dist/src/flowchart/flowchart.js +9 -0
- package/dist/src/flowchart/flowchart.js.map +1 -0
- package/dist/src/flowchart/index.d.ts +305 -0
- package/dist/src/flowchart/index.d.ts.map +1 -0
- package/dist/src/flowchart/index.js +267 -0
- package/dist/src/flowchart/index.js.map +1 -0
- package/dist/src/flowchart/library.d.ts +720 -0
- package/dist/src/flowchart/library.d.ts.map +1 -0
- package/dist/src/flowchart/library.js +611 -0
- package/dist/src/flowchart/library.js.map +1 -0
- package/dist/src/flowchart/over.d.ts +234 -0
- package/dist/src/flowchart/over.d.ts.map +1 -0
- package/dist/src/flowchart/over.js +220 -0
- package/dist/src/flowchart/over.js.map +1 -0
- package/dist/src/flowchart/patch.d.ts +64 -0
- package/dist/src/flowchart/patch.d.ts.map +1 -0
- package/dist/src/flowchart/patch.js +67 -0
- package/dist/src/flowchart/patch.js.map +1 -0
- package/dist/src/flowchart/payload.d.ts +8220 -0
- package/dist/src/flowchart/payload.d.ts.map +1 -0
- package/dist/src/flowchart/payload.js +521 -0
- package/dist/src/flowchart/payload.js.map +1 -0
- package/dist/src/flowchart/types.d.ts +393 -0
- package/dist/src/flowchart/types.d.ts.map +1 -0
- package/dist/src/flowchart/types.js +216 -0
- package/dist/src/flowchart/types.js.map +1 -0
- package/dist/src/flowchart/values.d.ts +267 -0
- package/dist/src/flowchart/values.d.ts.map +1 -0
- package/dist/src/flowchart/values.js +216 -0
- package/dist/src/flowchart/values.js.map +1 -0
- package/dist/src/flowchart/window.d.ts +521 -0
- package/dist/src/flowchart/window.d.ts.map +1 -0
- package/dist/src/flowchart/window.js +69 -0
- package/dist/src/flowchart/window.js.map +1 -0
- package/dist/src/index.d.ts +25 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +48 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal.d.ts +35 -3
- package/dist/src/internal.d.ts.map +1 -1
- package/dist/src/internal.js +72 -3
- package/dist/src/internal.js.map +1 -1
- package/dist/src/plan/assemble.d.ts +2224 -0
- package/dist/src/plan/assemble.d.ts.map +1 -0
- package/dist/src/plan/assemble.js +210 -0
- package/dist/src/plan/assemble.js.map +1 -0
- package/dist/src/plan/builders.d.ts +790 -0
- package/dist/src/plan/builders.d.ts.map +1 -0
- package/dist/src/plan/builders.js +749 -0
- package/dist/src/plan/builders.js.map +1 -0
- package/dist/src/plan/event-rows.d.ts +2565 -0
- package/dist/src/plan/event-rows.d.ts.map +1 -0
- package/dist/src/plan/event-rows.js +689 -0
- package/dist/src/plan/event-rows.js.map +1 -0
- package/dist/src/plan/factories.d.ts +458 -0
- package/dist/src/plan/factories.d.ts.map +1 -0
- package/dist/src/plan/factories.js +484 -0
- package/dist/src/plan/factories.js.map +1 -0
- package/dist/src/plan/index.d.ts +672 -0
- package/dist/src/plan/index.d.ts.map +1 -0
- package/dist/src/plan/index.js +532 -0
- package/dist/src/plan/index.js.map +1 -0
- package/dist/src/plan/ir.d.ts +2594 -0
- package/dist/src/plan/ir.d.ts.map +1 -0
- package/dist/src/plan/ir.js +78 -0
- package/dist/src/plan/ir.js.map +1 -0
- package/dist/src/plan/library.d.ts +772 -0
- package/dist/src/plan/library.d.ts.map +1 -0
- package/dist/src/plan/library.js +424 -0
- package/dist/src/plan/library.js.map +1 -0
- package/dist/src/plan/ordered-source.d.ts +27 -0
- package/dist/src/plan/ordered-source.d.ts.map +1 -0
- package/dist/src/plan/ordered-source.js +48 -0
- package/dist/src/plan/ordered-source.js.map +1 -0
- package/dist/src/plan/over.d.ts +247 -0
- package/dist/src/plan/over.d.ts.map +1 -0
- package/dist/src/plan/over.js +266 -0
- package/dist/src/plan/over.js.map +1 -0
- package/dist/src/plan/pick.d.ts +78 -0
- package/dist/src/plan/pick.d.ts.map +1 -0
- package/dist/src/plan/pick.js +146 -0
- package/dist/src/plan/pick.js.map +1 -0
- package/dist/src/plan/plan.d.ts +11611 -0
- package/dist/src/plan/plan.d.ts.map +1 -0
- package/dist/src/plan/plan.js +428 -0
- package/dist/src/plan/plan.js.map +1 -0
- package/dist/src/plan/refs.d.ts +218 -0
- package/dist/src/plan/refs.d.ts.map +1 -0
- package/dist/src/plan/refs.js +226 -0
- package/dist/src/plan/refs.js.map +1 -0
- package/dist/src/plan/root.d.ts +290 -0
- package/dist/src/plan/root.d.ts.map +1 -0
- package/dist/src/plan/root.js +463 -0
- package/dist/src/plan/root.js.map +1 -0
- package/dist/src/plan/series.d.ts +13554 -0
- package/dist/src/plan/series.d.ts.map +1 -0
- package/dist/src/plan/series.js +1921 -0
- package/dist/src/plan/series.js.map +1 -0
- package/dist/src/plan/types.d.ts +12400 -0
- package/dist/src/plan/types.d.ts.map +1 -0
- package/dist/src/plan/types.js +1335 -0
- package/dist/src/plan/types.js.map +1 -0
- package/dist/src/roster/coverage.d.ts +240 -0
- package/dist/src/roster/coverage.d.ts.map +1 -0
- package/dist/src/roster/coverage.js +109 -0
- package/dist/src/roster/coverage.js.map +1 -0
- package/dist/src/roster/index.d.ts +4028 -0
- package/dist/src/roster/index.d.ts.map +1 -0
- package/dist/src/roster/index.js +115 -0
- package/dist/src/roster/index.js.map +1 -0
- package/dist/src/roster/library.d.ts +106 -0
- package/dist/src/roster/library.d.ts.map +1 -0
- package/dist/src/roster/library.js +78 -0
- package/dist/src/roster/library.js.map +1 -0
- package/dist/src/roster/people.d.ts +50 -0
- package/dist/src/roster/people.d.ts.map +1 -0
- package/dist/src/roster/people.js +32 -0
- package/dist/src/roster/people.js.map +1 -0
- package/dist/src/roster/rules.d.ts +275 -0
- package/dist/src/roster/rules.d.ts.map +1 -0
- package/dist/src/roster/rules.js +162 -0
- package/dist/src/roster/rules.js.map +1 -0
- package/dist/src/roster/types.d.ts +672 -0
- package/dist/src/roster/types.d.ts.map +1 -0
- package/dist/src/roster/types.js +248 -0
- package/dist/src/roster/types.js.map +1 -0
- package/dist/src/roster/visibility.d.ts +66 -0
- package/dist/src/roster/visibility.d.ts.map +1 -0
- package/dist/src/roster/visibility.js +25 -0
- package/dist/src/roster/visibility.js.map +1 -0
- package/dist/src/schedule/days.d.ts +54 -0
- package/dist/src/schedule/days.d.ts.map +1 -0
- package/dist/src/schedule/days.js +68 -0
- package/dist/src/schedule/days.js.map +1 -0
- package/dist/src/schedule/events.d.ts +433 -0
- package/dist/src/schedule/events.d.ts.map +1 -0
- package/dist/src/schedule/events.js +851 -0
- package/dist/src/schedule/events.js.map +1 -0
- package/dist/src/schedule/index.d.ts +150 -0
- package/dist/src/schedule/index.d.ts.map +1 -0
- package/dist/src/schedule/index.js +132 -0
- package/dist/src/schedule/index.js.map +1 -0
- package/dist/src/schedule/library.d.ts +70 -0
- package/dist/src/schedule/library.d.ts.map +1 -0
- package/dist/src/schedule/library.js +102 -0
- package/dist/src/schedule/library.js.map +1 -0
- package/dist/src/schedule/patch.d.ts +74 -0
- package/dist/src/schedule/patch.d.ts.map +1 -0
- package/dist/src/schedule/patch.js +68 -0
- package/dist/src/schedule/patch.js.map +1 -0
- package/dist/src/schedule/record-window.d.ts +189 -0
- package/dist/src/schedule/record-window.d.ts.map +1 -0
- package/dist/src/schedule/record-window.js +95 -0
- package/dist/src/schedule/record-window.js.map +1 -0
- package/dist/src/schedule/resources.d.ts +165 -0
- package/dist/src/schedule/resources.d.ts.map +1 -0
- package/dist/src/schedule/resources.js +234 -0
- package/dist/src/schedule/resources.js.map +1 -0
- package/dist/src/schedule/templates.d.ts +47 -0
- package/dist/src/schedule/templates.d.ts.map +1 -0
- package/dist/src/schedule/templates.js +61 -0
- package/dist/src/schedule/templates.js.map +1 -0
- package/dist/src/schedule/types.d.ts +1677 -0
- package/dist/src/schedule/types.d.ts.map +1 -0
- package/dist/src/schedule/types.js +374 -0
- package/dist/src/schedule/types.js.map +1 -0
- package/dist/src/schedule/window.d.ts +154 -0
- package/dist/src/schedule/window.d.ts.map +1 -0
- package/dist/src/schedule/window.js +363 -0
- package/dist/src/schedule/window.js.map +1 -0
- package/dist/src/sheet/bridge.d.ts +385 -0
- package/dist/src/sheet/bridge.d.ts.map +1 -0
- package/dist/src/sheet/bridge.js +809 -0
- package/dist/src/sheet/bridge.js.map +1 -0
- package/dist/src/sheet/columns.d.ts +410 -0
- package/dist/src/sheet/columns.d.ts.map +1 -0
- package/dist/src/sheet/columns.js +99 -0
- package/dist/src/sheet/columns.js.map +1 -0
- package/dist/src/sheet/context-bridge.d.ts +48 -0
- package/dist/src/sheet/context-bridge.d.ts.map +1 -0
- package/dist/src/sheet/context-bridge.js +216 -0
- package/dist/src/sheet/context-bridge.js.map +1 -0
- package/dist/src/sheet/draft-bridge.d.ts +37 -0
- package/dist/src/sheet/draft-bridge.d.ts.map +1 -0
- package/dist/src/sheet/draft-bridge.js +153 -0
- package/dist/src/sheet/draft-bridge.js.map +1 -0
- package/dist/src/sheet/drafts.d.ts +14 -0
- package/dist/src/sheet/drafts.d.ts.map +1 -0
- package/dist/src/sheet/drafts.js +14 -0
- package/dist/src/sheet/drafts.js.map +1 -0
- package/dist/src/sheet/editing-bridge.d.ts +40 -0
- package/dist/src/sheet/editing-bridge.d.ts.map +1 -0
- package/dist/src/sheet/editing-bridge.js +231 -0
- package/dist/src/sheet/editing-bridge.js.map +1 -0
- package/dist/src/sheet/editing-types.d.ts +268 -0
- package/dist/src/sheet/editing-types.d.ts.map +1 -0
- package/dist/src/sheet/editing-types.js +34 -0
- package/dist/src/sheet/editing-types.js.map +1 -0
- package/dist/src/sheet/edits.d.ts +37 -0
- package/dist/src/sheet/edits.d.ts.map +1 -0
- package/dist/src/sheet/edits.js +31 -0
- package/dist/src/sheet/edits.js.map +1 -0
- package/dist/src/sheet/fields.d.ts +693 -0
- package/dist/src/sheet/fields.d.ts.map +1 -0
- package/dist/src/sheet/fields.js +280 -0
- package/dist/src/sheet/fields.js.map +1 -0
- package/dist/src/sheet/group.d.ts +165 -0
- package/dist/src/sheet/group.d.ts.map +1 -0
- package/dist/src/sheet/group.js +52 -0
- package/dist/src/sheet/group.js.map +1 -0
- package/dist/src/sheet/index.d.ts +542 -0
- package/dist/src/sheet/index.d.ts.map +1 -0
- package/dist/src/sheet/index.js +387 -0
- package/dist/src/sheet/index.js.map +1 -0
- package/dist/src/sheet/library.d.ts +284 -0
- package/dist/src/sheet/library.d.ts.map +1 -0
- package/dist/src/sheet/library.js +259 -0
- package/dist/src/sheet/library.js.map +1 -0
- package/dist/src/sheet/link.d.ts +398 -0
- package/dist/src/sheet/link.d.ts.map +1 -0
- package/dist/src/sheet/link.js +228 -0
- package/dist/src/sheet/link.js.map +1 -0
- package/dist/src/sheet/record.d.ts +75 -0
- package/dist/src/sheet/record.d.ts.map +1 -0
- package/dist/src/sheet/record.js +128 -0
- package/dist/src/sheet/record.js.map +1 -0
- package/dist/src/sheet/registers.d.ts +681 -0
- package/dist/src/sheet/registers.d.ts.map +1 -0
- package/dist/src/sheet/registers.js +671 -0
- package/dist/src/sheet/registers.js.map +1 -0
- package/dist/src/sheet/root.d.ts +329 -0
- package/dist/src/sheet/root.d.ts.map +1 -0
- package/dist/src/sheet/root.js +511 -0
- package/dist/src/sheet/root.js.map +1 -0
- package/dist/src/sheet/seed-bridge.d.ts +14 -0
- package/dist/src/sheet/seed-bridge.d.ts.map +1 -0
- package/dist/src/sheet/seed-bridge.js +51 -0
- package/dist/src/sheet/seed-bridge.js.map +1 -0
- package/dist/src/sheet/sheet.d.ts +11819 -0
- package/dist/src/sheet/sheet.d.ts.map +1 -0
- package/dist/src/sheet/sheet.js +236 -0
- package/dist/src/sheet/sheet.js.map +1 -0
- package/dist/src/sheet/sub-rows.d.ts +299 -0
- package/dist/src/sheet/sub-rows.d.ts.map +1 -0
- package/dist/src/sheet/sub-rows.js +272 -0
- package/dist/src/sheet/sub-rows.js.map +1 -0
- package/dist/src/sheet/templates.d.ts +161 -0
- package/dist/src/sheet/templates.d.ts.map +1 -0
- package/dist/src/sheet/templates.js +122 -0
- package/dist/src/sheet/templates.js.map +1 -0
- package/dist/src/sheet/transactions.d.ts +76 -0
- package/dist/src/sheet/transactions.d.ts.map +1 -0
- package/dist/src/sheet/transactions.js +40 -0
- package/dist/src/sheet/transactions.js.map +1 -0
- package/dist/src/sheet/types.d.ts +15226 -0
- package/dist/src/sheet/types.d.ts.map +1 -0
- package/dist/src/sheet/types.js +1070 -0
- package/dist/src/sheet/types.js.map +1 -0
- package/dist/src/sheet/views.d.ts +29 -0
- package/dist/src/sheet/views.d.ts.map +1 -0
- package/dist/src/sheet/views.js +43 -0
- package/dist/src/sheet/views.js.map +1 -0
- package/dist/src/studio/component.d.ts.map +1 -1
- package/dist/src/studio/component.js +11 -8
- package/dist/src/studio/component.js.map +1 -1
- package/dist/src/utils/derive.d.ts +134 -8
- package/dist/src/utils/derive.d.ts.map +1 -1
- package/dist/src/utils/derive.js +409 -7
- package/dist/src/utils/derive.js.map +1 -1
- package/dist/src/utils/ordered-source.d.ts +38 -0
- package/dist/src/utils/ordered-source.d.ts.map +1 -0
- package/dist/src/utils/ordered-source.js +45 -0
- package/dist/src/utils/ordered-source.js.map +1 -0
- package/dist/src/utils/row-inspector.d.ts +36 -0
- package/dist/src/utils/row-inspector.d.ts.map +1 -0
- package/dist/src/utils/row-inspector.js +49 -0
- package/dist/src/utils/row-inspector.js.map +1 -0
- package/dist/test/bind/data/data.examples.d.ts +21 -19
- package/dist/test/bind/data/data.examples.d.ts.map +1 -1
- package/dist/test/bind/data/data.examples.js +122 -122
- package/dist/test/bind/data/data.examples.js.map +1 -1
- package/dist/test/bind/record/record.examples.d.ts.map +1 -1
- package/dist/test/bind/record/record.examples.js +9 -9
- package/dist/test/bind/record/record.examples.js.map +1 -1
- package/dist/test/calendar/calendar-records.examples.d.ts +228 -0
- package/dist/test/calendar/calendar-records.examples.d.ts.map +1 -0
- package/dist/test/calendar/calendar-records.examples.js +91 -0
- package/dist/test/calendar/calendar-records.examples.js.map +1 -0
- package/dist/test/calendar/calendar.examples.d.ts +776 -0
- package/dist/test/calendar/calendar.examples.d.ts.map +1 -0
- package/dist/test/calendar/calendar.examples.js +336 -0
- package/dist/test/calendar/calendar.examples.js.map +1 -0
- package/dist/test/decision/journal.examples.d.ts +28 -28
- package/dist/test/decision/journal.examples.d.ts.map +1 -1
- package/dist/test/decision/journal.examples.js +4 -4
- package/dist/test/decision/journal.examples.js.map +1 -1
- package/dist/test/decision/queue.examples.d.ts.map +1 -1
- package/dist/test/decision/queue.examples.js +5 -7
- package/dist/test/decision/queue.examples.js.map +1 -1
- package/dist/test/flowchart/flowchart.examples.d.ts +3713 -0
- package/dist/test/flowchart/flowchart.examples.d.ts.map +1 -0
- package/dist/test/flowchart/flowchart.examples.js +465 -0
- package/dist/test/flowchart/flowchart.examples.js.map +1 -0
- package/dist/test/plan/plan-events.examples.d.ts +3666 -0
- package/dist/test/plan/plan-events.examples.d.ts.map +1 -0
- package/dist/test/plan/plan-events.examples.js +773 -0
- package/dist/test/plan/plan-events.examples.js.map +1 -0
- package/dist/test/plan/plan-records.examples.d.ts +3 -0
- package/dist/test/plan/plan-records.examples.d.ts.map +1 -0
- package/dist/test/plan/plan-records.examples.js +45 -0
- package/dist/test/plan/plan-records.examples.js.map +1 -0
- package/dist/test/plan/plan-windows.examples.d.ts +588 -0
- package/dist/test/plan/plan-windows.examples.d.ts.map +1 -0
- package/dist/test/plan/plan-windows.examples.js +170 -0
- package/dist/test/plan/plan-windows.examples.js.map +1 -0
- package/dist/test/plan/plan.examples.d.ts +8095 -0
- package/dist/test/plan/plan.examples.d.ts.map +1 -0
- package/dist/test/plan/plan.examples.js +2500 -0
- package/dist/test/plan/plan.examples.js.map +1 -0
- package/dist/test/roster/domain.examples.d.ts +367 -0
- package/dist/test/roster/domain.examples.d.ts.map +1 -0
- package/dist/test/roster/domain.examples.js +72 -0
- package/dist/test/roster/domain.examples.js.map +1 -0
- package/dist/test/roster/roster-records.examples.d.ts +729 -0
- package/dist/test/roster/roster-records.examples.d.ts.map +1 -0
- package/dist/test/roster/roster-records.examples.js +86 -0
- package/dist/test/roster/roster-records.examples.js.map +1 -0
- package/dist/test/roster/roster.examples.d.ts +750 -0
- package/dist/test/roster/roster.examples.d.ts.map +1 -0
- package/dist/test/roster/roster.examples.js +198 -0
- package/dist/test/roster/roster.examples.js.map +1 -0
- package/dist/test/roster/warehouse.d.ts +87 -0
- package/dist/test/roster/warehouse.d.ts.map +1 -0
- package/dist/test/roster/warehouse.js +883 -0
- package/dist/test/roster/warehouse.js.map +1 -0
- package/dist/test/sheet/sheet-link.examples.d.ts +7 -0
- package/dist/test/sheet/sheet-link.examples.d.ts.map +1 -0
- package/dist/test/sheet/sheet-link.examples.js +41 -0
- package/dist/test/sheet/sheet-link.examples.js.map +1 -0
- package/dist/test/sheet/sheet-records.examples.d.ts +421 -0
- package/dist/test/sheet/sheet-records.examples.d.ts.map +1 -0
- package/dist/test/sheet/sheet-records.examples.js +79 -0
- package/dist/test/sheet/sheet-records.examples.js.map +1 -0
- package/dist/test/sheet/sheet-transactions.examples.d.ts +7 -0
- package/dist/test/sheet/sheet-transactions.examples.d.ts.map +1 -0
- package/dist/test/sheet/sheet-transactions.examples.js +58 -0
- package/dist/test/sheet/sheet-transactions.examples.js.map +1 -0
- package/dist/test/sheet/sheet.examples.d.ts +5562 -0
- package/dist/test/sheet/sheet.examples.d.ts.map +1 -0
- package/dist/test/sheet/sheet.examples.js +1178 -0
- package/dist/test/sheet/sheet.examples.js.map +1 -0
- package/dist/test/studio/studio.examples.d.ts.map +1 -1
- package/dist/test/studio/studio.examples.js +11 -11
- package/dist/test/studio/studio.examples.js.map +1 -1
- package/package.json +12 -9
|
@@ -0,0 +1,363 @@
|
|
|
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 window reader (#1199, `Calendar Spec.md` decision 9 and §3.4, `Plan
|
|
7
|
+
* Builder Spec.md` §9.11, PB54): an event kind's large record read a window
|
|
8
|
+
* at a time, through its record indexes, never whole — the days in view
|
|
9
|
+
* through an index on the days each event touches (`Schedule.days`), and the
|
|
10
|
+
* backlog through an index on the rows with no start (`Schedule.unscheduled`).
|
|
11
|
+
* The Calendar's windowed reads (#1156) and the Plan's are this one reader: a
|
|
12
|
+
* kind's seams read through it when the kind is given `window` or
|
|
13
|
+
* `backlogWindow`, and the record whole otherwise.
|
|
14
|
+
*
|
|
15
|
+
* - **A window** is a `Data.bindPaged(record, { index, join: true })` handle:
|
|
16
|
+
* its pages are the index's entries in the index's own order, each
|
|
17
|
+
* `{ ik, key, value, row }`, its `seek` the index's key search, and its
|
|
18
|
+
* revision the record's state, so a Save that moves the record moves the
|
|
19
|
+
* window, which reads again. Its type is checked at build
|
|
20
|
+
* ({@link checkIndexWindow}). Whether it joins each entry to its row can't
|
|
21
|
+
* be told from its type, so a read that meets an entry with no row refuses,
|
|
22
|
+
* naming `join: true`.
|
|
23
|
+
* - **The days of `[from, to)`**: the midnight of the first day is sought in
|
|
24
|
+
* the index (a `range` from it), and the pages are read from the one holding
|
|
25
|
+
* that row — each page from its start to the next page's, at the reader's
|
|
26
|
+
* own page size, so the pages a pan read before are the runtime's again —
|
|
27
|
+
* until an entry filed under a day the window does not reach, or the
|
|
28
|
+
* index's end. An event filed under several of the days is kept once, by
|
|
29
|
+
* its key.
|
|
30
|
+
* - **The backlog**: every page of the backlog index, from its start.
|
|
31
|
+
* - **One event by its key** — the inspector's, a draft's original, a Save's
|
|
32
|
+
* entries read back and a conflict's — through a paged read of the record's
|
|
33
|
+
* own entries (`entries`, `Data.bindPaged(record)`): its key sought, then a
|
|
34
|
+
* one-row page at the row the search found ({@link scheduleEntryByKey}).
|
|
35
|
+
* The index windows can't be sought by the record's key, as their key leads
|
|
36
|
+
* with the index's, and a kind can't open a read of the record's own entries
|
|
37
|
+
* itself: a paged read is declared where it is bound, which is what lets a
|
|
38
|
+
* `ui()` task read it at all.
|
|
39
|
+
* - **In flight**, the search or a page answers `none`, and so does the read:
|
|
40
|
+
* the reader keeps nothing between reads, and the read that asked is asked
|
|
41
|
+
* again when it lands.
|
|
42
|
+
*
|
|
43
|
+
* @packageDocumentation
|
|
44
|
+
*/
|
|
45
|
+
import { DateTimeType, DictType, East, Expr, IntegerType, NullType, OptionType, StringType, VariantType, isTypeEqual, none, printType, some, variant, } from "@elaraai/east";
|
|
46
|
+
import { SeekQueryType, SeekRangeType } from "@elaraai/east-ui";
|
|
47
|
+
import { resolveRowSource } from "@elaraai/east-ui/internal";
|
|
48
|
+
/**
|
|
49
|
+
* How many index entries the reader asks for at a time: each read starts at a
|
|
50
|
+
* whole multiple of it and ends at the next, so two windows that share a page
|
|
51
|
+
* share its read.
|
|
52
|
+
*/
|
|
53
|
+
export const SCHEDULE_INDEX_PAGE = 256n;
|
|
54
|
+
/** Whether a type is an Option, and of what. */
|
|
55
|
+
function optionOf(type) {
|
|
56
|
+
if (type.type !== "Variant")
|
|
57
|
+
return undefined;
|
|
58
|
+
const some = type.cases["some"];
|
|
59
|
+
return some !== undefined && isTypeEqual(type, OptionType(some)) ? some : undefined;
|
|
60
|
+
}
|
|
61
|
+
/** A type as a refusal names it: an Option as an Option of what it holds. */
|
|
62
|
+
function typeText(type) {
|
|
63
|
+
const inner = optionOf(type);
|
|
64
|
+
return inner === undefined ? printType(type) : `an Option of ${printType(inner)}`;
|
|
65
|
+
}
|
|
66
|
+
/** The index a window reads through, as its refusals name it. */
|
|
67
|
+
function indexWords(prop) {
|
|
68
|
+
return prop === "window" ? "a day index keyed by Schedule.days" : "a backlog index keyed by Schedule.unscheduled";
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Checks a kind's `window` or `backlogWindow` at build: a paged read of an
|
|
72
|
+
* index over the kind's own record, whose pages serve the index's entries —
|
|
73
|
+
* `Array<{ ik, key, value, row: Option<R> }>`, `ik` the index's key (a
|
|
74
|
+
* `DateTime` day for `window`, an `Option<DateTime>` due date for
|
|
75
|
+
* `backlogWindow`), `key` the record's key and `row` its row.
|
|
76
|
+
*
|
|
77
|
+
* @param window - The window, as the author gave it
|
|
78
|
+
* @param prop - Which window it is
|
|
79
|
+
* @param keyType - The record's key type
|
|
80
|
+
* @param rowType - The record's row type
|
|
81
|
+
* @param ik - The index key the window's entries are filed under
|
|
82
|
+
* @param where - The kind, as a refusal names it
|
|
83
|
+
* @returns The window, as an East expression
|
|
84
|
+
* @throws {Error} Naming the window, the index it reads through and what it serves instead
|
|
85
|
+
*/
|
|
86
|
+
export function checkIndexWindow(window, prop, keyType, rowType, ik, where) {
|
|
87
|
+
const value = East.value(window);
|
|
88
|
+
const type = Expr.type(value);
|
|
89
|
+
const page = type.type === "Struct" ? type.fields["page"] : undefined;
|
|
90
|
+
const served = page !== undefined && page.type === "Function" ? optionOf(page.output) : undefined;
|
|
91
|
+
const element = served !== undefined && served.type === "Array" ? served.value : undefined;
|
|
92
|
+
const fields = element !== undefined && element.type === "Struct" ? element.fields : undefined;
|
|
93
|
+
const fits = fields !== undefined
|
|
94
|
+
&& fields["ik"] !== undefined && isTypeEqual(fields["ik"], ik)
|
|
95
|
+
&& fields["key"] !== undefined && isTypeEqual(fields["key"], keyType)
|
|
96
|
+
&& fields["value"] !== undefined
|
|
97
|
+
&& fields["row"] !== undefined && isTypeEqual(fields["row"], OptionType(rowType));
|
|
98
|
+
if (!fits) {
|
|
99
|
+
throw new Error(`${where}: \`${prop}\` reads the record through ${indexWords(prop)} — ` +
|
|
100
|
+
`Data.bindPaged(record, { index, join: true }), each window an Array of { ik: ${typeText(ik)}, key, value, row: Option<${typeText(rowType)}> } — ` +
|
|
101
|
+
`and this one serves ${served === undefined ? "no window of entries" : typeText(served)}`);
|
|
102
|
+
}
|
|
103
|
+
return value;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The words a read refuses a window in when it meets an entry with no row:
|
|
107
|
+
* the window reads the index alone, not each entry's row.
|
|
108
|
+
*
|
|
109
|
+
* @param where - The kind, as a refusal names it
|
|
110
|
+
* @param prop - Which window it is
|
|
111
|
+
* @returns The refusal
|
|
112
|
+
*/
|
|
113
|
+
export function joinRefusal(where, prop) {
|
|
114
|
+
return `${where}: \`${prop}\` reads each event's row from the record through ${indexWords(prop)} — ` +
|
|
115
|
+
"Data.bindPaged(record, { index, join: true }) — and this one reads the index alone: give it `join: true`";
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Reads the days of `[from, to)` through a kind's day index (see the module
|
|
119
|
+
* docs): the rows filed under them, each once, by the record's key.
|
|
120
|
+
*
|
|
121
|
+
* @param window - The kind's `window`, checked ({@link checkIndexWindow})
|
|
122
|
+
* @param keyType - The record's key type
|
|
123
|
+
* @param rowType - The record's row type
|
|
124
|
+
* @param where - The kind, as a refusal names it
|
|
125
|
+
* @returns `(from, to)` → the rows, by key; `none` while the search or a page is in flight
|
|
126
|
+
*/
|
|
127
|
+
export function scheduleDayWindow(window, keyType, rowType, where) {
|
|
128
|
+
const Held = DictType(keyType, rowType);
|
|
129
|
+
const noRows = joinRefusal(where, "window");
|
|
130
|
+
const noSeek = `${where}: \`window\` finds the first day in view by its index's key search — ` +
|
|
131
|
+
"a paged read of the record's day index, Data.bindPaged(record, { index, join: true }) — and this one has none";
|
|
132
|
+
return East.function([DateTimeType, DateTimeType], OptionType(Held), ($, from, to) => {
|
|
133
|
+
const src = $.const(window);
|
|
134
|
+
const size = $.const(SCHEDULE_INDEX_PAGE, IntegerType);
|
|
135
|
+
const result = $.let(East.value(none, OptionType(Held)), OptionType(Held));
|
|
136
|
+
// The midnight the first day in view is filed under.
|
|
137
|
+
const first = $.let(East.DateTime.roundDownDay(from, 1n));
|
|
138
|
+
$.match(src.seek, {
|
|
139
|
+
none: ($2) => { $2.error(noSeek); },
|
|
140
|
+
some: ($2, seek) => {
|
|
141
|
+
// The rows from the first day's midnight on: a range open at its end.
|
|
142
|
+
const query = $2.let(variant("range", { from: [East.print(first)], to: [] }), SeekQueryType);
|
|
143
|
+
$2.match(seek(query), {
|
|
144
|
+
some: ($3, found) => {
|
|
145
|
+
const held = $3.let(new Map(), Held);
|
|
146
|
+
// From the start of the page the first day's first entry is in.
|
|
147
|
+
const offset = $3.let(found.row.subtract(found.row.remainder(size)), IntegerType);
|
|
148
|
+
const reading = $3.let(true);
|
|
149
|
+
const landed = $3.let(true);
|
|
150
|
+
$3.while(reading, ($4) => {
|
|
151
|
+
// To the next page's start: a page cut short is read on from where it stopped.
|
|
152
|
+
const limit = $4.let(size.subtract(offset.remainder(size)), IntegerType);
|
|
153
|
+
$4.match(src.page(offset, limit), {
|
|
154
|
+
none: ($5) => {
|
|
155
|
+
$5.assign(landed, false);
|
|
156
|
+
$5.assign(reading, false);
|
|
157
|
+
},
|
|
158
|
+
some: ($5, entries) => {
|
|
159
|
+
// The index's end.
|
|
160
|
+
$5.if(entries.size().equal(0n), ($6) => { $6.assign(reading, false); });
|
|
161
|
+
$5.for(entries, ($6, entry, _i, label) => {
|
|
162
|
+
// The day the entry is filed under.
|
|
163
|
+
const day = $6.let(entry.ik);
|
|
164
|
+
// Past the last day in view: the window is read.
|
|
165
|
+
$6.if(East.greaterEqual(day, to), ($7) => {
|
|
166
|
+
$7.assign(reading, false);
|
|
167
|
+
$7.break(label);
|
|
168
|
+
});
|
|
169
|
+
// An entry of the page before the first day is not in view.
|
|
170
|
+
$6.if(East.greaterEqual(day, first), ($7) => {
|
|
171
|
+
$7.match(entry.row, {
|
|
172
|
+
none: ($8) => { $8.error(noRows); },
|
|
173
|
+
// An event filed under several days, once.
|
|
174
|
+
some: ($8, row) => {
|
|
175
|
+
$8.if(held.has(entry.key).not(), ($9) => { $9(held.insert(entry.key, row)); });
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
$5.assign(offset, offset.add(entries.size()));
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
$3.if(landed, ($4) => { $4.assign(result, some(held)); });
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
return result;
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Reads a kind's backlog through its backlog index (see the module docs):
|
|
194
|
+
* the rows the index files, each once, by the record's key.
|
|
195
|
+
*
|
|
196
|
+
* @param window - The kind's `backlogWindow`, checked ({@link checkIndexWindow})
|
|
197
|
+
* @param keyType - The record's key type
|
|
198
|
+
* @param rowType - The record's row type
|
|
199
|
+
* @param where - The kind, as a refusal names it
|
|
200
|
+
* @returns `()` → the rows, by key; `none` while a page is in flight
|
|
201
|
+
*/
|
|
202
|
+
export function scheduleBacklogWindow(window, keyType, rowType, where) {
|
|
203
|
+
const Held = DictType(keyType, rowType);
|
|
204
|
+
const noRows = joinRefusal(where, "backlogWindow");
|
|
205
|
+
return East.function([], OptionType(Held), ($) => {
|
|
206
|
+
const src = $.const(window);
|
|
207
|
+
const size = $.const(SCHEDULE_INDEX_PAGE, IntegerType);
|
|
208
|
+
const result = $.let(East.value(none, OptionType(Held)), OptionType(Held));
|
|
209
|
+
const held = $.let(new Map(), Held);
|
|
210
|
+
const offset = $.let(0n, IntegerType);
|
|
211
|
+
const reading = $.let(true);
|
|
212
|
+
const landed = $.let(true);
|
|
213
|
+
$.while(reading, ($2) => {
|
|
214
|
+
const limit = $2.let(size.subtract(offset.remainder(size)), IntegerType);
|
|
215
|
+
$2.match(src.page(offset, limit), {
|
|
216
|
+
none: ($3) => {
|
|
217
|
+
$3.assign(landed, false);
|
|
218
|
+
$3.assign(reading, false);
|
|
219
|
+
},
|
|
220
|
+
some: ($3, entries) => {
|
|
221
|
+
$3.if(entries.size().equal(0n), ($4) => { $4.assign(reading, false); });
|
|
222
|
+
$3.for(entries, ($4, entry) => {
|
|
223
|
+
$4.match(entry.row, {
|
|
224
|
+
none: ($5) => { $5.error(noRows); },
|
|
225
|
+
some: ($5, row) => {
|
|
226
|
+
$5.if(held.has(entry.key).not(), ($6) => { $6(held.insert(entry.key, row)); });
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
$3.assign(offset, offset.add(entries.size()));
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
$.if(landed, ($2) => { $2.assign(result, some(held)); });
|
|
235
|
+
return result;
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Checks a paged read of a record's own entries at build (#1199): the record's
|
|
240
|
+
* entries by key, `Data.bindPaged(record)`, which names the snapshot its reads
|
|
241
|
+
* are at — what a kind given `window` reads one event by, and a paged resource
|
|
242
|
+
* kind its resources.
|
|
243
|
+
*
|
|
244
|
+
* @param entries - The read, as the author gave it
|
|
245
|
+
* @param keyType - The record's key type
|
|
246
|
+
* @param rowType - The record's row type
|
|
247
|
+
* @param where - What reads it, as a refusal names it: the option and its kind
|
|
248
|
+
* @returns The read, as an East expression
|
|
249
|
+
* @throws {Error} Naming what it serves instead: the entries whole, an index's window, another collection, or a read that names no snapshot
|
|
250
|
+
*/
|
|
251
|
+
export function checkEntries(entries, keyType, rowType, where) {
|
|
252
|
+
const resolved = resolveRowSource(entries, where);
|
|
253
|
+
const wanted = DictType(keyType, rowType);
|
|
254
|
+
if (resolved.kind !== "paged" || !isTypeEqual(resolved.collectionType, wanted)) {
|
|
255
|
+
const serves = resolved.kind === "inline" ? `${typeText(resolved.collectionType)} whole`
|
|
256
|
+
: resolved.kind === "ordered" ? `an index's window, ${typeText(resolved.collectionType)}`
|
|
257
|
+
: typeText(resolved.collectionType);
|
|
258
|
+
throw new Error(`${where} reads the record's own entries by key — Data.bindPaged(record), a window at a time of ${typeText(wanted)} — and this one serves ${serves}`);
|
|
259
|
+
}
|
|
260
|
+
if (!resolved.pinned) {
|
|
261
|
+
throw new Error(`${where} reads the record's own entries at the snapshot every read of it is at — Data.bindPaged(record)'s handle, with its revision and refresh — and this one names no snapshot`);
|
|
262
|
+
}
|
|
263
|
+
return resolved.source;
|
|
264
|
+
}
|
|
265
|
+
/** A key's text: a String key as it is, any other key as East prints it. */
|
|
266
|
+
function keyTextOf(keyType) {
|
|
267
|
+
return (keyType.type === "String"
|
|
268
|
+
? East.function([StringType], StringType, (_$, key) => key)
|
|
269
|
+
: East.function([keyType], StringType, (_$, key) => East.print(key)));
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* One entry of a record read by its key (#1199): its read still in flight, the
|
|
273
|
+
* key the record does not hold, or the entry held — its row.
|
|
274
|
+
*
|
|
275
|
+
* @param rowType - The record's row type
|
|
276
|
+
* @returns The variant
|
|
277
|
+
*/
|
|
278
|
+
export function ScheduleKeyReadType(rowType) {
|
|
279
|
+
return VariantType({ reading: NullType, absent: NullType, held: rowType });
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Reads one entry of a record by its key through a paged read of the record's
|
|
283
|
+
* own entries (#1199): the key sought — the `.east` literal of the key its text
|
|
284
|
+
* names — then a one-row page at the row the search found.
|
|
285
|
+
*
|
|
286
|
+
* @param entries - The read, checked ({@link checkEntries})
|
|
287
|
+
* @param keyType - The record's key type
|
|
288
|
+
* @param rowType - The record's row type
|
|
289
|
+
* @returns `(id)` → the entry's row, held; `absent` for a key the record does not hold; `reading` while the search or the page is in flight
|
|
290
|
+
*/
|
|
291
|
+
export function scheduleEntryByKey(entries, keyType, rowType) {
|
|
292
|
+
const Read = ScheduleKeyReadType(rowType);
|
|
293
|
+
// A key from its text: a String key is its own text, any other key its `.east` printing, read back.
|
|
294
|
+
const keyOf = (keyType.type === "String"
|
|
295
|
+
? East.function([StringType], StringType, (_$, id) => id)
|
|
296
|
+
: East.function([StringType], keyType, (_$, id) => id.parse(keyType)));
|
|
297
|
+
// The `.east` literal a seek takes: a String key's is its text quoted; any other key's text is its literal already.
|
|
298
|
+
const literalOf = keyType.type === "String"
|
|
299
|
+
? East.function([StringType], StringType, (_$, id) => East.print(id))
|
|
300
|
+
: East.function([StringType], StringType, (_$, id) => id);
|
|
301
|
+
return East.function([StringType], Read, ($, id) => {
|
|
302
|
+
const handle = entries;
|
|
303
|
+
const src = $.const(handle);
|
|
304
|
+
const parse = $.const(keyOf);
|
|
305
|
+
const literal = $.const(literalOf);
|
|
306
|
+
const result = $.let(variant("reading", null), Read);
|
|
307
|
+
$.match(src.seek, {
|
|
308
|
+
some: ($2, seek) => {
|
|
309
|
+
const query = $2.let(variant("key", literal(id)), SeekQueryType);
|
|
310
|
+
$2.match(seek(query), {
|
|
311
|
+
some: ($3, found) => {
|
|
312
|
+
$3.if(found.found, ($4) => {
|
|
313
|
+
$4.match(src.page(found.row, 1n), {
|
|
314
|
+
some: ($5, page) => {
|
|
315
|
+
$5.match(page.tryGet(parse(id)), {
|
|
316
|
+
some: ($6, row) => { $6.assign(result, variant("held", row)); },
|
|
317
|
+
none: ($6) => { $6.assign(result, variant("absent", null)); },
|
|
318
|
+
});
|
|
319
|
+
},
|
|
320
|
+
});
|
|
321
|
+
}).else(($4) => { $4.assign(result, variant("absent", null)); });
|
|
322
|
+
},
|
|
323
|
+
});
|
|
324
|
+
},
|
|
325
|
+
});
|
|
326
|
+
return result;
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Reads the largest key of a record through a paged read of its own entries
|
|
331
|
+
* (#1199) — the last entry, as the read serves them in key order: how a new
|
|
332
|
+
* Integer key is made past every key the record holds, which no window of it
|
|
333
|
+
* says.
|
|
334
|
+
*
|
|
335
|
+
* @param entries - The read, checked ({@link checkEntries})
|
|
336
|
+
* @param keyType - The record's key type
|
|
337
|
+
* @returns `()` → `some(some(text))`, the largest key's text; `some(none)` for an empty record; `none` while a read is in flight
|
|
338
|
+
*/
|
|
339
|
+
export function scheduleLastKey(entries, keyType) {
|
|
340
|
+
const Found = OptionType(OptionType(StringType));
|
|
341
|
+
const textOf = keyTextOf(keyType);
|
|
342
|
+
return East.function([], Found, ($) => {
|
|
343
|
+
const handle = entries;
|
|
344
|
+
const src = $.const(handle);
|
|
345
|
+
const text = $.const(textOf);
|
|
346
|
+
const result = $.let(none, Found);
|
|
347
|
+
$.match(src.total(), {
|
|
348
|
+
// The size is learned from a window: the first one's, read.
|
|
349
|
+
none: ($2) => { $2(src.page(0n, 1n)); },
|
|
350
|
+
some: ($2, total) => {
|
|
351
|
+
$2.if(total.equal(0n), ($3) => { $3.assign(result, some(none)); }).else(($3) => {
|
|
352
|
+
$3.match(src.page(total.subtract(1n), 1n), {
|
|
353
|
+
some: ($4, page) => {
|
|
354
|
+
$4.for(page, ($5, _row, key) => { $5.assign(result, some(some(text(key)))); });
|
|
355
|
+
},
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
},
|
|
359
|
+
});
|
|
360
|
+
return result;
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
//# sourceMappingURL=window.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window.js","sourceRoot":"","sources":["../../../src/schedule/window.ts"],"names":[],"mappings":"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"}
|