alinea 2.0.0-preview.9 → 2.0.0-rc2
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/.init/.mcp.json +11 -0
- package/dist/.init/AGENTS.md +17 -0
- package/dist/.init/CLAUDE.md +1 -0
- package/dist/.init/content/pages/welcome.json +1 -1
- package/dist/.init/package.json +1 -1
- package/dist/.init/src/cms.ts +4 -2
- package/dist/.init-pm/bun.lock +0 -0
- package/dist/.mcp/later/dev.json +1 -0
- package/dist/.mcp/lock/dev.json +1 -0
- package/dist/.mcp/online/dev.json +1 -0
- package/dist/LICENSES.md +2239 -294
- package/dist/adapter/next/cms.d.ts +2 -2
- package/dist/adapter/next/cms.js +66 -32
- package/dist/adapter/next/context.js +5 -6
- package/dist/adapter/next/dashboardUrl.d.ts +6 -0
- package/dist/adapter/next/dashboardUrl.js +13 -0
- package/dist/adapter/next/devCache.d.ts +16 -0
- package/dist/adapter/next/devCache.js +32 -0
- package/dist/adapter/next/handler.js +18 -4
- package/dist/adapter/next/syncCheck.d.ts +15 -2
- package/dist/adapter/next/syncCheck.js +26 -9
- package/dist/adapter/next/with-alinea.js +27 -20
- package/dist/backend/CommitEntries.d.ts +17 -0
- package/dist/backend/CommitEntries.js +39 -0
- package/dist/backend/Handler.d.ts +15 -1
- package/dist/backend/Handler.js +106 -32
- package/dist/backend/api/BasicAuth.js +5 -1
- package/dist/backend/api/BlobStore.d.ts +21 -0
- package/dist/backend/api/BlobStore.js +63 -0
- package/dist/backend/api/CreateBackend.js +10 -8
- package/dist/backend/api/DatabaseApi.d.ts +4 -1
- package/dist/backend/api/DatabaseApi.js +104 -7
- package/dist/backend/api/GithubApi.d.ts +13 -0
- package/dist/backend/api/GithubApi.js +217 -54
- package/dist/backend/api/OAuth2.js +21 -26
- package/dist/backend/api/ProxyMedia.js +3 -0
- package/dist/backend/api/database.js +6 -6
- package/dist/backend/store/GeneratedDatabase.js +4 -2
- package/dist/backend/store/GeneratedDatabaseNode.d.ts +5 -1
- package/dist/backend/store/GeneratedDatabaseNode.js +9 -19
- package/dist/backend/store/GeneratedRelease.d.ts +1 -1
- package/dist/backend/store/GeneratedRelease.js +3 -4
- package/dist/backend/util/JWKS.d.ts +4 -0
- package/dist/backend/util/JWKS.js +40 -0
- package/dist/backend/util/Syncable.d.ts +6 -0
- package/dist/backend/util/Syncable.js +3 -1
- package/dist/bundled.d.ts +7124 -1459
- package/dist/chunks/{node-sqlite-XVNTNMCY.js → bun-sqlite-RI6BYU5S.js} +3 -3
- package/dist/chunks/ccitt-Y7TDCCPM.js +90 -0
- package/dist/chunks/{chunk-ASYKC6IE.js → chunk-2PP7WJUJ.js} +2 -12
- package/dist/chunks/{chunk-DWR5A5KL.js → chunk-4VKHBA57.js} +25 -6
- package/dist/chunks/{chunk-QJGGYF6E.js → chunk-4ZA6KZHS.js} +5 -5
- package/dist/chunks/{chunk-OFEKTDRF.js → chunk-7DDPSWRY.js} +8383 -5156
- package/dist/chunks/{chunk-ETWOY4AL.js → chunk-A2I6MCCS.js} +1 -1
- package/dist/chunks/chunk-CYVOGRSD.js +218 -0
- package/dist/chunks/{chunk-TIJTT5ZI.js → chunk-G43W7AME.js} +1 -0
- package/dist/chunks/{chunk-KMLLLZ6X.js → chunk-NP4M2257.js} +1 -0
- package/dist/chunks/{chunk-D6RGFNUW.js → chunk-PMGIIYDD.js} +14215 -8950
- package/dist/chunks/{chunk-IYAQC63Y.js → chunk-PSSMQKAH.js} +1607 -744
- package/dist/chunks/{chunk-AIU6CMVT.js → chunk-PTYZMV5G.js} +1 -1
- package/dist/chunks/{chunk-66YZ47TY.js → chunk-RAR44T5O.js} +1 -1
- package/dist/chunks/chunk-RE6CDK2M.js +254 -0
- package/dist/chunks/{chunk-UPY2RUZF.js → chunk-TWBREZWC.js} +30 -0
- package/dist/chunks/{chunk-QSN6RH6X.js → chunk-VA6NC3MI.js} +1 -1
- package/dist/chunks/dist-IDG44KDI.js +7499 -0
- package/dist/chunks/jpeg-OJTBZV3C.js +292 -0
- package/dist/chunks/jpx-4VRYG2JB.js +667 -0
- package/dist/chunks/{bun-sqlite-5SHXN3AT.js → node-sqlite-C7VJ2NSN.js} +3 -3
- package/dist/cli/Generate.d.ts +2 -1
- package/dist/cli/Generate.js +55 -24
- package/dist/cli/Init.d.ts +43 -2
- package/dist/cli/Init.js +144 -28
- package/dist/cli/Mcp.d.ts +25 -0
- package/dist/cli/Mcp.js +106 -0
- package/dist/cli/Serve.d.ts +1 -1
- package/dist/cli/Serve.js +14 -6
- package/dist/cli/bin.js +33 -11
- package/dist/cli/build/BuildEmitter.d.ts +5 -1
- package/dist/cli/build/BuildEmitter.js +8 -3
- package/dist/cli/generate/CompileConfig.js +10 -6
- package/dist/cli/generate/CopyStaticFiles.d.ts +1 -1
- package/dist/cli/generate/CopyStaticFiles.js +27 -14
- package/dist/cli/generate/DevDB.d.ts +4 -1
- package/dist/cli/generate/DevDB.js +15 -7
- package/dist/cli/generate/GenerateContext.d.ts +3 -0
- package/dist/cli/generate/GenerateDashboard.d.ts +1 -1
- package/dist/cli/generate/GenerateDashboard.js +20 -6
- package/dist/cli/generate/GeneratedPaths.d.ts +21 -0
- package/dist/cli/generate/GeneratedPaths.js +33 -0
- package/dist/cli/generate/LinkMediaFiles.d.ts +7 -0
- package/dist/cli/generate/LinkMediaFiles.js +52 -0
- package/dist/cli/generate/MediaLocations.d.ts +18 -0
- package/dist/cli/generate/MediaLocations.js +69 -0
- package/dist/cli/serve/CreateLocalServer.d.ts +2 -1
- package/dist/cli/serve/CreateLocalServer.js +41 -11
- package/dist/cli/serve/DevLock.d.ts +11 -0
- package/dist/cli/serve/DevLock.js +42 -0
- package/dist/cli/serve/DevServer.d.ts +3 -2
- package/dist/cli/serve/DevServer.js +18 -6
- package/dist/cli/serve/LiveReload.d.ts +1 -1
- package/dist/cli/serve/LiveReload.js +3 -2
- package/dist/cli/serve/ServeContext.d.ts +0 -1
- package/dist/cli/serve/StartServer.d.ts +2 -1
- package/dist/cli/serve/StartServer.js +4 -2
- package/dist/cli/serve/mcp/DevMcp.d.ts +16 -0
- package/dist/cli/serve/mcp/DevMcp.js +50 -0
- package/dist/cli/serve/mcp/McpGraph.d.ts +35 -0
- package/dist/cli/serve/mcp/McpGraph.js +64 -0
- package/dist/cli/serve/mcp/McpInput.d.ts +11 -0
- package/dist/cli/serve/mcp/McpInput.js +254 -0
- package/dist/cli/serve/mcp/McpInstructions.d.ts +1 -0
- package/dist/cli/serve/mcp/McpInstructions.js +16 -0
- package/dist/cli/serve/mcp/McpSchema.d.ts +31 -0
- package/dist/cli/serve/mcp/McpSchema.js +184 -0
- package/dist/cli/serve/mcp/McpServer.d.ts +47 -0
- package/dist/cli/serve/mcp/McpServer.js +112 -0
- package/dist/cli/serve/mcp/McpTools.d.ts +25 -0
- package/dist/cli/serve/mcp/McpTools.js +618 -0
- package/dist/cli/static/dashboard/entry.js +2 -1
- package/dist/cli/static/init/agents.md +13 -0
- package/dist/cli/static/init/cms.js +4 -2
- package/dist/cli/util/ForwardCommand.js +4 -12
- package/dist/cli/util/PublicDefines.d.ts +1 -0
- package/dist/cli/util/PublicDefines.js +2 -1
- package/dist/cli/util/RunForwarded.d.ts +13 -0
- package/dist/cli/util/RunForwarded.js +166 -0
- package/dist/cli/util/WarnPublicEnv.js +2 -0
- package/dist/cloud/CloudHandshake.js +9 -46
- package/dist/cloud/CloudRemote.js +21 -7
- package/dist/cms.d.ts +21 -0
- package/dist/cms.js +49 -0
- package/dist/components/Alert.d.ts +29 -0
- package/dist/components/Alert.js +86 -0
- package/dist/components/AppShell.d.ts +15 -0
- package/dist/components/AppShell.js +38 -0
- package/dist/components/AsyncList.d.ts +52 -0
- package/dist/components/AsyncList.js +69 -0
- package/dist/components/Badge.d.ts +13 -0
- package/dist/components/Badge.js +53 -0
- package/dist/components/Blockquote.d.ts +7 -0
- package/dist/components/Blockquote.js +26 -0
- package/dist/components/Breadcrumbs.d.ts +39 -3
- package/dist/components/Breadcrumbs.js +103 -22
- package/dist/components/Button.d.ts +33 -8
- package/dist/components/Button.js +73 -23
- package/dist/components/Calendar.d.ts +28 -3
- package/dist/components/Calendar.js +163 -54
- package/dist/components/Checkbox.d.ts +18 -7
- package/dist/components/Checkbox.js +84 -38
- package/dist/components/CheckboxGroup.d.ts +11 -5
- package/dist/components/CheckboxGroup.js +55 -19
- package/dist/components/Code.d.ts +10 -0
- package/dist/components/Code.js +49 -0
- package/dist/components/Collapsible.d.ts +25 -0
- package/dist/components/Collapsible.js +146 -0
- package/dist/components/ColorSwatch.d.ts +9 -2
- package/dist/components/ColorSwatch.js +20 -20
- package/dist/components/ColorSwatchPicker.d.ts +18 -3
- package/dist/components/ColorSwatchPicker.js +31 -27
- package/dist/components/ComboBox.d.ts +46 -10
- package/dist/components/ComboBox.js +223 -94
- package/dist/components/Command.d.ts +66 -0
- package/dist/components/Command.js +237 -0
- package/dist/components/ContentCard.d.ts +32 -0
- package/dist/components/ContentCard.js +221 -0
- package/dist/components/ContentGrid.d.ts +58 -0
- package/dist/components/ContentGrid.js +220 -0
- package/dist/components/DataList.d.ts +27 -0
- package/dist/components/DataList.js +68 -0
- package/dist/components/DateField.d.ts +19 -4
- package/dist/components/DateField.js +51 -44
- package/dist/components/DatePicker.d.ts +17 -4
- package/dist/components/DatePicker.js +61 -68
- package/dist/components/DateRangePicker.d.ts +19 -4
- package/dist/components/DateRangePicker.js +69 -80
- package/dist/components/Dialog.d.ts +64 -3
- package/dist/components/Dialog.js +215 -20
- package/dist/components/DropZone.d.ts +25 -3
- package/dist/components/DropZone.js +99 -18
- package/dist/components/DropdownMenu.d.ts +78 -0
- package/dist/components/DropdownMenu.js +318 -0
- package/dist/components/Empty.d.ts +46 -0
- package/dist/components/Empty.js +93 -0
- package/dist/components/Field.d.ts +34 -0
- package/dist/components/Field.js +166 -0
- package/dist/components/FileTrigger.d.ts +21 -0
- package/dist/components/FileTrigger.js +53 -0
- package/dist/components/FoldIcon.js +2 -1
- package/dist/components/Form.d.ts +23 -0
- package/dist/components/Form.js +64 -0
- package/dist/components/Heading.d.ts +13 -0
- package/dist/components/Heading.js +48 -0
- package/dist/components/Icon.d.ts +1 -1
- package/dist/components/Icon.js +3 -3
- package/dist/components/Kbd.d.ts +8 -0
- package/dist/components/Kbd.js +27 -0
- package/dist/components/Link.d.ts +21 -4
- package/dist/components/Link.js +22 -20
- package/dist/components/List.d.ts +23 -63
- package/dist/components/List.js +131 -251
- package/dist/components/MediaPreview.d.ts +35 -0
- package/dist/components/MediaPreview.js +227 -0
- package/dist/components/MultipleSelect.d.ts +27 -20
- package/dist/components/MultipleSelect.js +234 -216
- package/dist/components/NavRail.d.ts +41 -0
- package/dist/components/NavRail.js +121 -0
- package/dist/components/NumberField.d.ts +23 -5
- package/dist/components/NumberField.js +103 -60
- package/dist/components/Page.d.ts +57 -0
- package/dist/components/Page.js +130 -0
- package/dist/components/Popover.d.ts +39 -5
- package/dist/components/Popover.js +146 -22
- package/dist/components/PreviewFrame.d.ts +46 -0
- package/dist/components/PreviewFrame.js +182 -0
- package/dist/components/RadioGroup.d.ts +20 -7
- package/dist/components/RadioGroup.js +121 -31
- package/dist/components/Resizable.d.ts +51 -0
- package/dist/components/Resizable.js +1349 -0
- package/dist/components/SearchField.d.ts +42 -6
- package/dist/components/SearchField.js +117 -56
- package/dist/components/Select.d.ts +38 -10
- package/dist/components/Select.js +179 -101
- package/dist/components/Sheet.d.ts +52 -0
- package/dist/components/Sheet.js +216 -0
- package/dist/components/Sidebar.d.ts +56 -0
- package/dist/components/Sidebar.js +136 -0
- package/dist/components/SortableList.d.ts +84 -0
- package/dist/components/SortableList.js +368 -0
- package/dist/components/Spinner.d.ts +8 -0
- package/dist/components/Spinner.js +86 -0
- package/dist/components/Stack.d.ts +20 -0
- package/dist/components/Stack.js +45 -0
- package/dist/components/Surface.js +13 -3
- package/dist/components/Switch.d.ts +15 -4
- package/dist/components/Switch.js +30 -18
- package/dist/components/Table.d.ts +121 -14
- package/dist/components/Table.js +537 -96
- package/dist/components/Tabs.d.ts +33 -12
- package/dist/components/Tabs.js +68 -51
- package/dist/components/TagGroup.d.ts +26 -9
- package/dist/components/TagGroup.js +97 -31
- package/dist/components/Text.d.ts +16 -0
- package/dist/components/Text.js +44 -0
- package/dist/components/TextField.d.ts +33 -9
- package/dist/components/TextField.js +152 -47
- package/dist/components/TimeField.d.ts +25 -4
- package/dist/components/TimeField.js +82 -42
- package/dist/components/Timestamp.d.ts +17 -0
- package/dist/components/Timestamp.js +131 -0
- package/dist/components/Toggle.d.ts +15 -7
- package/dist/components/Toggle.js +4 -54
- package/dist/components/ToggleGroup.d.ts +33 -0
- package/dist/components/ToggleGroup.js +90 -0
- package/dist/components/Toolbar.d.ts +27 -8
- package/dist/components/Toolbar.js +51 -40
- package/dist/components/Tooltip.d.ts +22 -4
- package/dist/components/Tooltip.js +78 -34
- package/dist/components/Tree.d.ts +47 -20
- package/dist/components/Tree.js +230 -98
- package/dist/components/internal/Accept.d.ts +5 -0
- package/dist/components/internal/Accept.js +17 -0
- package/dist/components/internal/DateControl.d.ts +18 -0
- package/dist/components/internal/DateControl.js +92 -0
- package/dist/components/internal/DateValue.d.ts +16 -0
- package/dist/components/internal/DateValue.js +40 -0
- package/dist/components/internal/FormScope.d.ts +2 -0
- package/dist/components/internal/FormScope.js +8 -0
- package/dist/components/internal/ListBoxGroup.d.ts +12 -0
- package/dist/components/internal/ListBoxGroup.js +46 -0
- package/dist/components/internal/ListBoxOption.d.ts +20 -0
- package/dist/components/internal/ListBoxOption.js +111 -0
- package/dist/components/internal/Locale.d.ts +7 -0
- package/dist/components/internal/Locale.js +18 -0
- package/dist/components/internal/Placement.d.ts +3 -0
- package/dist/components/internal/Placement.js +13 -0
- package/dist/components/internal/PopoverSurface.d.ts +21 -0
- package/dist/components/internal/PopoverSurface.js +67 -0
- package/dist/components/internal/SelectionCheckbox.d.ts +8 -0
- package/dist/components/internal/SelectionCheckbox.js +57 -0
- package/dist/components/internal/Slot.d.ts +7 -0
- package/dist/components/internal/Slot.js +26 -0
- package/dist/components/internal/ToggleButton.d.ts +26 -0
- package/dist/components/internal/ToggleButton.js +68 -0
- package/dist/components/internal/Trigger.d.ts +16 -0
- package/dist/components/internal/Trigger.js +34 -0
- package/dist/components/internal/sortableDrag.d.ts +19 -0
- package/dist/components/internal/sortableDrag.js +175 -0
- package/dist/components/internal/useDragDrop.d.ts +22 -0
- package/dist/components/internal/useDragDrop.js +110 -0
- package/dist/components/types.d.ts +110 -0
- package/dist/components/types.js +0 -0
- package/dist/components.d.ts +33 -5
- package/dist/components.js +32 -5
- package/dist/config.d.ts +2 -0
- package/dist/config.js +12 -0
- package/dist/core/Client.js +12 -1
- package/dist/core/Config.d.ts +60 -2
- package/dist/core/Config.js +162 -9
- package/dist/core/Connection.d.ts +13 -1
- package/dist/core/Connection.js +9 -1
- package/dist/core/DashboardEntry.d.ts +19 -0
- package/dist/core/DashboardEntry.js +0 -0
- package/dist/core/Document.d.ts +12 -2
- package/dist/core/Document.js +39 -7
- package/dist/core/EntryFields.d.ts +11 -0
- package/dist/core/EntrySeed.d.ts +5 -1
- package/dist/core/EntrySeed.js +5 -6
- package/dist/core/Expr.d.ts +11 -0
- package/dist/core/Field.d.ts +39 -3
- package/dist/core/Field.js +25 -2
- package/dist/core/Filter.d.ts +31 -1
- package/dist/core/Filter.js +5 -0
- package/dist/core/Graph.d.ts +36 -8
- package/dist/core/Infer.d.ts +17 -0
- package/dist/core/Internal.d.ts +3 -0
- package/dist/core/Internal.js +4 -0
- package/dist/core/Overview.d.ts +315 -0
- package/dist/core/Overview.js +48 -0
- package/dist/core/Role.d.ts +6 -1
- package/dist/core/Role.js +55 -53
- package/dist/core/Root.d.ts +32 -3
- package/dist/core/Root.js +17 -7
- package/dist/core/Schema.js +7 -2
- package/dist/core/Scope.d.ts +14 -0
- package/dist/core/Scope.js +88 -10
- package/dist/core/TextDoc.d.ts +14 -1
- package/dist/core/Type.d.ts +71 -11
- package/dist/core/Type.js +67 -17
- package/dist/core/Validation.d.ts +60 -0
- package/dist/core/Validation.js +116 -0
- package/dist/core/Workspace.d.ts +1 -0
- package/dist/core/Workspace.js +5 -1
- package/dist/core/db/EntryReference.d.ts +8 -1
- package/dist/core/db/LinkResolver.d.ts +3 -0
- package/dist/core/db/LocalStore.d.ts +19 -0
- package/dist/core/db/Operation.d.ts +28 -1
- package/dist/core/db/Operation.js +161 -25
- package/dist/core/db/SyncStats.d.ts +16 -0
- package/dist/core/db/SyncStats.js +56 -0
- package/dist/core/db/WriteableGraph.d.ts +6 -14
- package/dist/core/db/WriteableGraph.js +5 -3
- package/dist/core/field/CreateField.d.ts +2 -3
- package/dist/core/field/ListField.js +29 -10
- package/dist/core/field/RecordField.js +12 -4
- package/dist/core/field/RichTextField.js +81 -24
- package/dist/core/field/ScalarField.d.ts +2 -2
- package/dist/core/field/UnionField.js +27 -4
- package/dist/core/media/CompressPdf.browser.d.ts +5 -0
- package/dist/core/media/CompressPdf.browser.js +13 -0
- package/dist/core/media/CompressPdf.d.ts +6 -0
- package/dist/core/media/CompressPdf.js +45 -0
- package/dist/core/media/CreatePreview.browser.d.ts +5 -1
- package/dist/core/media/CreatePreview.browser.js +16 -0
- package/dist/core/media/CreatePreview.d.ts +2 -1
- package/dist/core/media/CreatePreview.js +2 -0
- package/dist/core/media/FileAccept.d.ts +7 -0
- package/dist/core/media/FileAccept.js +29 -0
- package/dist/core/media/FileKinds.d.ts +10 -0
- package/dist/core/media/FileKinds.js +25 -0
- package/dist/core/media/ImageTransform.d.ts +78 -0
- package/dist/core/media/ImageTransform.js +108 -0
- package/dist/core/media/MediaRoot.js +4 -4
- package/dist/core/media/MediaTypes.d.ts +137 -9
- package/dist/core/media/MediaTypes.js +277 -51
- package/dist/core/media/Pdf.d.ts +15 -0
- package/dist/core/media/Pdf.js +31 -0
- package/dist/core/media/Summary.d.ts +9 -9
- package/dist/core/media/Summary.js +10 -10
- package/dist/core/media/TransformImage.browser.d.ts +7 -0
- package/dist/core/media/TransformImage.browser.js +38 -0
- package/dist/core/media/TransformImage.d.ts +7 -0
- package/dist/core/media/TransformImage.js +38 -0
- package/dist/core/source/GithubSource.d.ts +4 -0
- package/dist/core/source/GithubSource.js +127 -25
- package/dist/core/source/GithubUsage.d.ts +21 -0
- package/dist/core/source/GithubUsage.js +47 -0
- package/dist/core/source/Source.d.ts +2 -0
- package/dist/core/source/Source.js +11 -0
- package/dist/core/text/MarkdownToTextDoc.d.ts +29 -0
- package/dist/core/text/MarkdownToTextDoc.js +524 -0
- package/dist/core/text/TextDocToMarkdown.d.ts +20 -0
- package/dist/core/text/TextDocToMarkdown.js +316 -0
- package/dist/core/util/Async.d.ts +2 -0
- package/dist/core/util/Async.js +12 -1
- package/dist/core/util/Checks.js +1 -1
- package/dist/core/util/JWT.d.ts +1 -1
- package/dist/core/util/Objects.d.ts +2 -0
- package/dist/core/util/Objects.js +7 -0
- package/dist/core/util/OrderKeys.d.ts +11 -0
- package/dist/core/util/OrderKeys.js +64 -0
- package/dist/core/util/Slugs.js +4 -3
- package/dist/core.d.ts +3 -0
- package/dist/core.js +8 -1
- package/dist/dashboard/App.css +56 -86
- package/dist/dashboard/App.d.ts +6 -2
- package/dist/dashboard/App.js +41 -20
- package/dist/dashboard/Href.d.ts +37 -0
- package/dist/dashboard/Href.js +46 -0
- package/dist/dashboard/ViewKeys.d.ts +2 -0
- package/dist/dashboard/ViewKeys.js +2 -0
- package/dist/dashboard/app/AccessDenied.js +26 -18
- package/dist/dashboard/app/ActivityStatus.d.ts +5 -4
- package/dist/dashboard/app/ActivityStatus.js +138 -153
- package/dist/dashboard/app/AppearanceToggle.js +31 -12
- package/dist/dashboard/app/AuthView.js +75 -63
- package/dist/dashboard/app/BlockSheet.d.ts +50 -0
- package/dist/dashboard/app/BlockSheet.js +207 -0
- package/dist/dashboard/app/BlockSheetStoryFrame.d.ts +6 -0
- package/dist/dashboard/app/BlockSheetStoryFrame.js +29 -0
- package/dist/dashboard/app/BlockTabs.d.ts +12 -0
- package/dist/dashboard/app/BlockTabs.js +26 -0
- package/dist/dashboard/app/CompactField.d.ts +19 -6
- package/dist/dashboard/app/CompactField.js +177 -50
- package/dist/dashboard/app/CroppedImage.d.ts +17 -0
- package/dist/dashboard/app/CroppedImage.js +73 -0
- package/dist/dashboard/app/DashboardErrorBoundary.js +27 -15
- package/dist/dashboard/app/DashboardLayout.d.ts +5 -3
- package/dist/dashboard/app/DashboardLayout.js +59 -37
- package/dist/dashboard/app/EntryActions.d.ts +11 -0
- package/dist/dashboard/app/EntryActions.js +30 -0
- package/dist/dashboard/app/EntryFields.d.ts +26 -13
- package/dist/dashboard/app/EntryFields.js +19 -9
- package/dist/dashboard/app/EntryForm.d.ts +6 -0
- package/dist/dashboard/app/EntryForm.js +28 -0
- package/dist/dashboard/app/EntryHeader.d.ts +2 -2
- package/dist/dashboard/app/EntryHeader.js +226 -144
- package/dist/dashboard/app/EntryHeaderActions.d.ts +4 -1
- package/dist/dashboard/app/EntryHeaderActions.js +8 -12
- package/dist/dashboard/app/EntryReferences.d.ts +13 -1
- package/dist/dashboard/app/EntryReferences.js +62 -55
- package/dist/dashboard/app/EntrySidebar.d.ts +7 -5
- package/dist/dashboard/app/EntrySidebar.js +104 -98
- package/dist/dashboard/app/EntrySidebarPreview.d.ts +4 -1
- package/dist/dashboard/app/EntrySidebarPreview.js +37 -106
- package/dist/dashboard/app/EntrySidebarToggle.js +5 -6
- package/dist/dashboard/app/EntryStatusIcon.d.ts +23 -0
- package/dist/dashboard/app/EntryStatusIcon.js +58 -0
- package/dist/dashboard/app/EntryTranslationBanner.js +37 -45
- package/dist/dashboard/app/EntryValidationModal.d.ts +13 -0
- package/dist/dashboard/app/EntryValidationModal.js +77 -0
- package/dist/dashboard/app/Explorer.d.ts +15 -6
- package/dist/dashboard/app/Explorer.js +276 -520
- package/dist/dashboard/app/ExplorerBatchActions.d.ts +19 -0
- package/dist/dashboard/app/ExplorerBatchActions.js +183 -0
- package/dist/dashboard/app/ExplorerBreadcrumbs.d.ts +13 -0
- package/dist/dashboard/app/ExplorerBreadcrumbs.js +119 -0
- package/dist/dashboard/app/ExplorerCards.d.ts +8 -3
- package/dist/dashboard/app/ExplorerCards.js +91 -289
- package/dist/dashboard/app/ExplorerControls.d.ts +20 -0
- package/dist/dashboard/app/ExplorerControls.js +170 -0
- package/dist/dashboard/app/ExplorerList.d.ts +7 -4
- package/dist/dashboard/app/ExplorerList.js +160 -95
- package/dist/dashboard/app/ExplorerModal.d.ts +2 -5
- package/dist/dashboard/app/ExplorerModal.js +7 -19
- package/dist/dashboard/app/ExplorerOverviewHeader.d.ts +6 -0
- package/dist/dashboard/app/ExplorerOverviewHeader.js +28 -0
- package/dist/dashboard/app/ExplorerPickerContent.d.ts +19 -3
- package/dist/dashboard/app/ExplorerPickerContent.js +87 -5
- package/dist/dashboard/app/ExplorerScope.d.ts +7 -0
- package/dist/dashboard/app/ExplorerScope.js +159 -0
- package/dist/dashboard/app/ExplorerTable.d.ts +8 -4
- package/dist/dashboard/app/ExplorerTable.js +150 -359
- package/dist/dashboard/app/ExplorerTabs.d.ts +12 -0
- package/dist/dashboard/app/ExplorerTabs.js +42 -0
- package/dist/dashboard/app/ExternalLinkPicker.js +45 -55
- package/dist/dashboard/app/FileKind.d.ts +8 -0
- package/dist/dashboard/app/FileKind.js +40 -0
- package/dist/dashboard/app/ImageEditor.d.ts +13 -0
- package/dist/dashboard/app/ImageEditor.js +302 -0
- package/dist/dashboard/app/ImageEditorCrop.d.ts +19 -0
- package/dist/dashboard/app/ImageEditorCrop.js +90 -0
- package/dist/dashboard/app/ImagePicker.d.ts +1 -1
- package/dist/dashboard/app/ImagePicker.js +30 -89
- package/dist/dashboard/app/LinkPicker.d.ts +1 -1
- package/dist/dashboard/app/LinkPicker.js +108 -126
- package/dist/dashboard/app/LocaleMenu.d.ts +4 -2
- package/dist/dashboard/app/LocaleMenu.js +59 -48
- package/dist/dashboard/app/MediaPreviewCell.d.ts +8 -0
- package/dist/dashboard/app/MediaPreviewCell.js +50 -0
- package/dist/dashboard/app/MoveConfirmDialog.d.ts +5 -0
- package/dist/dashboard/app/MoveConfirmDialog.js +79 -0
- package/dist/dashboard/app/MoveDialog.d.ts +10 -0
- package/dist/dashboard/app/MoveDialog.js +161 -0
- package/dist/dashboard/app/NodeEditor.d.ts +11 -0
- package/dist/dashboard/app/NodeEditor.js +13 -0
- package/dist/dashboard/app/OverviewCell.d.ts +15 -0
- package/dist/dashboard/app/OverviewCell.js +249 -0
- package/dist/dashboard/app/PendingUploadsDialog.d.ts +2 -0
- package/dist/dashboard/app/PendingUploadsDialog.js +49 -0
- package/dist/dashboard/app/PendingUploadsView.d.ts +20 -0
- package/dist/dashboard/app/PendingUploadsView.js +233 -0
- package/dist/dashboard/app/ReadOnlyBadge.d.ts +1 -1
- package/dist/dashboard/app/ReadOnlyBadge.js +1 -1
- package/dist/dashboard/app/RemoveDialog.d.ts +17 -0
- package/dist/dashboard/app/RemoveDialog.js +294 -0
- package/dist/dashboard/app/RemoveRedirect.d.ts +7 -0
- package/dist/dashboard/app/RemoveRedirect.js +123 -0
- package/dist/dashboard/app/SearchBar.d.ts +9 -0
- package/dist/dashboard/app/SearchBar.js +31 -0
- package/dist/dashboard/app/SidebarLayout.d.ts +2 -1
- package/dist/dashboard/app/SidebarLayout.js +28 -1133
- package/dist/dashboard/app/SidebarTree.d.ts +12 -6
- package/dist/dashboard/app/SidebarTree.js +220 -295
- package/dist/dashboard/app/ViewToggle.d.ts +1 -1
- package/dist/dashboard/app/ViewToggle.js +17 -10
- package/dist/dashboard/app/WorkspaceMenu.d.ts +5 -6
- package/dist/dashboard/app/WorkspaceMenu.js +76 -111
- package/dist/dashboard/app/WorkspaceRoots.d.ts +2 -4
- package/dist/dashboard/app/WorkspaceRoots.js +144 -172
- package/dist/dashboard/app/editor/FileEditor.js +161 -125
- package/dist/dashboard/app/editor/FilePreview.d.ts +8 -6
- package/dist/dashboard/app/editor/FilePreview.js +16 -143
- package/dist/dashboard/app/editor/MediaAltField.view.js +5 -5
- package/dist/dashboard/app/modals/CreateEntry.js +98 -106
- package/dist/dashboard/app/pages/EntryPage.d.ts +2 -1
- package/dist/dashboard/app/pages/EntryPage.js +139 -97
- package/dist/dashboard/app/pages/RootPage.js +4 -6
- package/dist/dashboard/app/pages/SplashPage.d.ts +19 -0
- package/dist/dashboard/app/pages/SplashPage.js +208 -193
- package/dist/dashboard/app/pages/UsersPage.d.ts +20 -1
- package/dist/dashboard/app/pages/UsersPage.js +182 -255
- package/dist/dashboard/app/ui/DashboardModal.d.ts +18 -12
- package/dist/dashboard/app/ui/DashboardModal.js +54 -69
- package/dist/dashboard/atoms/ReactiveNode.js +58 -19
- package/dist/dashboard/atoms/activity.d.ts +1 -0
- package/dist/dashboard/atoms/activity.js +8 -5
- package/dist/dashboard/atoms/auth.js +2 -2
- package/dist/dashboard/atoms/config.d.ts +5 -1
- package/dist/dashboard/atoms/core.d.ts +16 -2
- package/dist/dashboard/atoms/core.js +19 -7
- package/dist/dashboard/atoms/create.js +15 -14
- package/dist/dashboard/atoms/dashboard.d.ts +16 -0
- package/dist/dashboard/atoms/dashboard.js +11 -1
- package/dist/dashboard/atoms/editor.d.ts +7 -1
- package/dist/dashboard/atoms/editor.js +29 -42
- package/dist/dashboard/atoms/entry.d.ts +32 -42
- package/dist/dashboard/atoms/entry.js +240 -182
- package/dist/dashboard/atoms/entryTable.d.ts +10 -0
- package/dist/dashboard/atoms/entryTable.js +43 -0
- package/dist/dashboard/atoms/explorer.d.ts +212 -36
- package/dist/dashboard/atoms/explorer.js +597 -259
- package/dist/dashboard/atoms/graph.d.ts +5 -0
- package/dist/dashboard/atoms/graph.js +27 -2
- package/dist/dashboard/atoms/link.d.ts +2 -0
- package/dist/dashboard/atoms/link.js +11 -5
- package/dist/dashboard/atoms/move.d.ts +64 -0
- package/dist/dashboard/atoms/move.js +128 -0
- package/dist/dashboard/atoms/moveConfirmation.d.ts +34 -0
- package/dist/dashboard/atoms/moveConfirmation.js +95 -0
- package/dist/dashboard/atoms/nav.d.ts +36 -12
- package/dist/dashboard/atoms/nav.js +280 -53
- package/dist/dashboard/atoms/overview.d.ts +228 -0
- package/dist/dashboard/atoms/overview.js +519 -0
- package/dist/dashboard/atoms/remove.d.ts +112 -0
- package/dist/dashboard/atoms/remove.js +268 -0
- package/dist/dashboard/atoms/root.d.ts +44 -22
- package/dist/dashboard/atoms/root.js +294 -164
- package/dist/dashboard/atoms/upload.d.ts +105 -3
- package/dist/dashboard/atoms/upload.js +266 -11
- package/dist/dashboard/atoms/user.js +1 -1
- package/dist/dashboard/atoms/utils.d.ts +12 -4
- package/dist/dashboard/atoms/utils.js +35 -2
- package/dist/dashboard/boot/ActivityEvent.d.ts +1 -1
- package/dist/dashboard/boot/Boot.d.ts +2 -0
- package/dist/dashboard/boot/Boot.js +33 -18
- package/dist/dashboard/boot/BootDev.js +13 -10
- package/dist/dashboard/boot/BootProd.d.ts +6 -1
- package/dist/dashboard/boot/BootProd.js +3 -2
- package/dist/dashboard/boot/DashboardWorker.d.ts +7 -0
- package/dist/dashboard/boot/DashboardWorker.js +108 -24
- package/dist/dashboard/boot/LoadWorker.js +21 -11
- package/dist/dashboard/boot/SyncEvent.d.ts +7 -0
- package/dist/dashboard/boot/SyncEvent.js +14 -0
- package/dist/dashboard/boot/WorkerDB.d.ts +1 -0
- package/dist/dashboard/boot/WorkerDB.js +3 -0
- package/dist/dashboard/cms/EntryTable.d.ts +56 -0
- package/dist/dashboard/cms/EntryTable.js +273 -0
- package/dist/dashboard/cms/FieldChrome.d.ts +21 -0
- package/dist/dashboard/cms/FieldChrome.js +26 -0
- package/dist/dashboard/cms/ViewProps.d.ts +42 -0
- package/dist/dashboard/cms/ViewProps.js +0 -0
- package/dist/dashboard/cms/hooks.d.ts +120 -0
- package/dist/dashboard/cms/hooks.js +132 -0
- package/dist/dashboard/contexts.d.ts +59 -0
- package/dist/dashboard/contexts.js +43 -0
- package/dist/dashboard/editor/UseField.d.ts +29 -6
- package/dist/dashboard/fixture/cms.d.ts +2 -2
- package/dist/dashboard/hook/UseEntryEditor.d.ts +4 -1
- package/dist/dashboard/hook/UseEntryEditor.js +7 -3
- package/dist/dashboard/hook/UseGraph.d.ts +3 -1
- package/dist/dashboard/hook/UseLocale.d.ts +3 -1
- package/dist/dashboard/hook/UseRoot.d.ts +3 -1
- package/dist/dashboard/hook/UseSearchShortcut.d.ts +11 -0
- package/dist/dashboard/hook/UseSearchShortcut.js +32 -0
- package/dist/dashboard/hook/UseWorkspace.d.ts +3 -1
- package/dist/dashboard/hooks.d.ts +16 -98
- package/dist/dashboard/hooks.js +15 -90
- package/dist/dashboard/icons.d.ts +11 -0
- package/dist/dashboard/icons.js +125 -0
- package/dist/dashboard.d.ts +23 -1
- package/dist/dashboard.js +5 -2
- package/dist/database/BrowserEntryStore.d.ts +17 -24
- package/dist/database/BrowserEntryStore.js +139 -137
- package/dist/database/DatabaseTables.js +2 -2
- package/dist/database/EntryDatabase.d.ts +15 -1
- package/dist/database/EntryDatabase.js +61 -10
- package/dist/database/EntryStore.js +32 -20
- package/dist/database/EntryTransaction.d.ts +0 -5
- package/dist/database/EntryTransaction.js +173 -58
- package/dist/database/EntryUrlAliases.d.ts +4 -0
- package/dist/database/EntryUrlAliases.js +16 -10
- package/dist/database/Version.d.ts +2 -2
- package/dist/database/Version.js +1 -1
- package/dist/database/driver/RuntimeDatabase.js +3 -3
- package/dist/database/driver/WasmDatabase.d.ts +5 -18
- package/dist/database/driver/WasmDatabase.js +16 -15
- package/dist/database/entry/EntryTable.d.ts +5 -3
- package/dist/database/entry/EntryTable.js +34 -10
- package/dist/database/query/Condition.d.ts +9 -1
- package/dist/database/query/Condition.js +25 -6
- package/dist/database/query/EntryQuery.d.ts +4 -0
- package/dist/database/query/EntryQuery.js +148 -25
- package/dist/database/query/EntryReferences.d.ts +1 -1
- package/dist/database/query/EntryReferences.js +3 -2
- package/dist/database/query/Relation.d.ts +13 -1
- package/dist/database/query/Relation.js +33 -5
- package/dist/database/query/ResolveQuery.d.ts +1 -1
- package/dist/database/query/ResolveQuery.js +27 -18
- package/dist/database/query/Search.d.ts +10 -1
- package/dist/database/query/Search.js +83 -10
- package/dist/database/sync/Derive.d.ts +2 -1
- package/dist/database/sync/Derive.js +15 -10
- package/dist/database/sync/EntryParser.js +8 -7
- package/dist/database/sync/EntrySyncer.d.ts +3 -0
- package/dist/database/sync/EntrySyncer.js +10 -7
- package/dist/database/sync/Ingest.d.ts +2 -1
- package/dist/database/sync/Ingest.js +79 -49
- package/dist/database/sync/SyncQueries.d.ts +3 -2
- package/dist/database/sync/SyncQueries.js +19 -19
- package/dist/field/check/CheckField.js +3 -1
- package/dist/field/check/CheckField.view.js +13 -11
- package/dist/field/code/CodeField.d.ts +9 -0
- package/dist/field/code/CodeField.view.d.ts +3 -1
- package/dist/field/code/CodeField.view.js +30 -20
- package/dist/field/code/SimpleCodeEditor.js +0 -18
- package/dist/field/date/DateField.view.js +9 -25
- package/dist/field/link/EntryLink.d.ts +8 -9
- package/dist/field/link/FileLink.d.ts +11 -8
- package/dist/field/link/FileLink.js +7 -6
- package/dist/field/link/ImageLink.d.ts +16 -16
- package/dist/field/link/ImageLink.js +14 -23
- package/dist/field/link/Link.d.ts +1 -1
- package/dist/field/link/Link.js +2 -2
- package/dist/field/link/LinkField.d.ts +10 -5
- package/dist/field/link/LinkField.js +2 -0
- package/dist/field/link/LinkField.view.js +501 -684
- package/dist/field/link/UrlLink.d.ts +5 -4
- package/dist/field/link.d.ts +1 -0
- package/dist/field/list/ListField.d.ts +9 -5
- package/dist/field/list/ListField.js +10 -5
- package/dist/field/list/ListField.view.d.ts +15 -0
- package/dist/field/list/ListField.view.js +525 -645
- package/dist/field/localiser/LocalisedField.view.js +37 -88
- package/dist/field/localiser/LocalisedFieldTab.d.ts +7 -0
- package/dist/field/localiser/LocalisedFieldTab.js +30 -0
- package/dist/field/localiser/LocalisedFieldTabs.js +5 -5
- package/dist/field/localiser/Localiser.d.ts +17 -1
- package/dist/field/localiser/Localiser.js +152 -7
- package/dist/field/localiser/SelectLocale.d.ts +5 -0
- package/dist/field/localiser/SelectLocale.js +12 -0
- package/dist/field/metadata/MetadataAudit.d.ts +39 -0
- package/dist/field/metadata/MetadataAudit.js +124 -0
- package/dist/field/metadata/MetadataField.d.ts +20 -30
- package/dist/field/metadata/MetadataField.js +24 -107
- package/dist/field/metadata/MetadataField.view.d.ts +1 -0
- package/dist/field/metadata/MetadataField.view.js +36 -38
- package/dist/field/number/NumberField.view.js +9 -9
- package/dist/field/object/ObjectField.d.ts +3 -1
- package/dist/field/object/ObjectField.view.js +35 -25
- package/dist/field/path/PathField.view.js +3 -3
- package/dist/field/path/SlugField.d.ts +1 -2
- package/dist/field/path/SlugField.js +5 -7
- package/dist/field/richtext/PickTextAnchor.js +10 -10
- package/dist/field/richtext/PickTextLink.js +28 -41
- package/dist/field/richtext/RichTextBlock.d.ts +3 -1
- package/dist/field/richtext/RichTextBlock.js +190 -78
- package/dist/field/richtext/RichTextBlockHost.js +1 -1
- package/dist/field/richtext/RichTextExtensions.js +26 -20
- package/dist/field/richtext/RichTextField.story.d.ts +1 -0
- package/dist/field/richtext/RichTextField.view.js +13 -6
- package/dist/field/richtext/RichTextInsertMenu.js +59 -36
- package/dist/field/richtext/RichTextToolbar.js +82 -34
- package/dist/field/richtext/Toolbar.d.ts +9 -1
- package/dist/field/richtext/Toolbar.js +12 -2
- package/dist/field/richtext.d.ts +2 -0
- package/dist/field/richtext.js +2 -0
- package/dist/field/select/SelectField.view.js +15 -79
- package/dist/field/tabs/Tabs.d.ts +12 -3
- package/dist/field/tabs/Tabs.js +11 -2
- package/dist/field/tabs/Tabs.view.js +8 -8
- package/dist/field/text/TextField.view.js +9 -8
- package/dist/field/time/TimeField.view.js +10 -18
- package/dist/field/views.js +4 -0
- package/dist/field.d.ts +2 -2
- package/dist/field.js +3 -2
- package/dist/index.css +5408 -5223
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/dist/next.cjs +27 -20
- package/dist/next.d.ts +2 -0
- package/dist/next.edge.d.ts +2 -0
- package/dist/picker/entry/EntryPicker.d.ts +11 -4
- package/dist/picker/entry/EntryPicker.js +15 -1
- package/dist/picker/url/UrlPicker.js +1 -0
- package/dist/preview/react.js +3 -0
- package/dist/preview/widget.d.ts +3 -0
- package/dist/preview/widget.js +26 -8
- package/dist/query.d.ts +41 -266
- package/dist/query.js +4 -0
- package/dist/types.d.ts +12 -5
- package/dist/ui/RichText.js +31 -1
- package/dist/ui/Stack.d.ts +4 -2
- package/docs/ai-agents.md +316 -0
- package/docs/ai-setup.md +297 -0
- package/docs/cli.md +96 -0
- package/docs/components/alert.md +122 -0
- package/docs/components/app-shell.md +77 -0
- package/docs/components/badge.md +89 -0
- package/docs/components/blockquote.md +24 -0
- package/docs/components/breadcrumb.md +83 -0
- package/docs/components/button.md +142 -0
- package/docs/components/calendar.md +32 -0
- package/docs/components/checkbox-group.md +38 -0
- package/docs/components/checkbox.md +61 -0
- package/docs/components/code.md +37 -0
- package/docs/components/collapsible.md +53 -0
- package/docs/components/color-swatch-picker.md +47 -0
- package/docs/components/combo-box.md +146 -0
- package/docs/components/command.md +101 -0
- package/docs/components/content-card.md +64 -0
- package/docs/components/content-grid.md +71 -0
- package/docs/components/data-list.md +64 -0
- package/docs/components/date-field.md +34 -0
- package/docs/components/date-picker.md +35 -0
- package/docs/components/date-range-picker.md +34 -0
- package/docs/components/dialog.md +233 -0
- package/docs/components/drop-zone.md +45 -0
- package/docs/components/dropdown-menu.md +223 -0
- package/docs/components/empty.md +81 -0
- package/docs/components/field.md +66 -0
- package/docs/components/file-trigger.md +33 -0
- package/docs/components/fold-icon.md +34 -0
- package/docs/components/form.md +67 -0
- package/docs/components/heading.md +33 -0
- package/docs/components/icon.md +43 -0
- package/docs/components/kbd.md +29 -0
- package/docs/components/link.md +45 -0
- package/docs/components/list.md +105 -0
- package/docs/components/media-preview.md +43 -0
- package/docs/components/multiple-select.md +48 -0
- package/docs/components/nav-rail.md +79 -0
- package/docs/components/number-field.md +53 -0
- package/docs/components/page.md +97 -0
- package/docs/components/popover.md +71 -0
- package/docs/components/preview-frame.md +63 -0
- package/docs/components/radio-group.md +47 -0
- package/docs/components/resizable-panel-group.md +63 -0
- package/docs/components/search-field.md +54 -0
- package/docs/components/select.md +127 -0
- package/docs/components/sidebar.md +104 -0
- package/docs/components/sortable-list.md +110 -0
- package/docs/components/spinner.md +29 -0
- package/docs/components/stack.md +42 -0
- package/docs/components/surface.md +54 -0
- package/docs/components/switch.md +52 -0
- package/docs/components/table.md +262 -0
- package/docs/components/tabs.md +120 -0
- package/docs/components/tag-group.md +56 -0
- package/docs/components/text-field.md +142 -0
- package/docs/components/text.md +44 -0
- package/docs/components/time-field.md +41 -0
- package/docs/components/timestamp.md +45 -0
- package/docs/components/toggle-group.md +46 -0
- package/docs/components/toggle.md +37 -0
- package/docs/components/toolbar.md +96 -0
- package/docs/components/tooltip.md +78 -0
- package/docs/components/tree.md +67 -0
- package/docs/components.md +169 -0
- package/docs/configuration.md +177 -0
- package/docs/content-model.md +87 -0
- package/docs/custom-fields.md +359 -0
- package/docs/dashboard-ui.md +3 -0
- package/docs/deploy/alinea-cloud.md +26 -0
- package/docs/deploy/self-host.md +195 -0
- package/docs/deploy.md +127 -0
- package/docs/editing-content.md +195 -0
- package/docs/fields/check.md +40 -0
- package/docs/fields/code.md +35 -0
- package/docs/fields/date.md +90 -0
- package/docs/fields/entry.md +179 -0
- package/docs/fields/file.md +60 -0
- package/docs/fields/image.md +138 -0
- package/docs/fields/link.md +121 -0
- package/docs/fields/list.md +149 -0
- package/docs/fields/number.md +58 -0
- package/docs/fields/object.md +93 -0
- package/docs/fields/path.md +105 -0
- package/docs/fields/rich-text.md +267 -0
- package/docs/fields/select.md +99 -0
- package/docs/fields/tabs.md +111 -0
- package/docs/fields/text.md +46 -0
- package/docs/fields/url.md +51 -0
- package/docs/fields.md +231 -0
- package/docs/get-started.md +3 -0
- package/docs/guides.md +3 -0
- package/docs/index.md +140 -0
- package/docs/instant-publishing.md +61 -0
- package/docs/internationalization.md +218 -0
- package/docs/introduction.md +5 -0
- package/docs/live-previews.md +151 -0
- package/docs/mcp.md +500 -0
- package/docs/overviews.md +580 -0
- package/docs/query/advanced.md +123 -0
- package/docs/query/examples.md +231 -0
- package/docs/query/filtering.md +162 -0
- package/docs/query/related.md +178 -0
- package/docs/query/structural.md +165 -0
- package/docs/query.md +190 -0
- package/docs/quickstart.md +203 -0
- package/docs/reference.md +3 -0
- package/docs/roles-permissions.md +234 -0
- package/docs/schema/document.md +100 -0
- package/docs/schema/type.md +133 -0
- package/docs/schema.md +66 -0
- package/docs/tutorial/step-1-landing-page.md +244 -0
- package/docs/tutorial/step-2-block-list.md +364 -0
- package/docs/tutorial/step-3-layout-root.md +200 -0
- package/docs/tutorial/step-4-blog.md +384 -0
- package/docs/tutorial/step-5-catch-all.md +222 -0
- package/docs/tutorial.md +21 -0
- package/docs/typescript.md +115 -0
- package/docs/upgrading.md +368 -0
- package/docs/workspaces/media.md +134 -0
- package/docs/workspaces/root.md +127 -0
- package/docs/workspaces.md +98 -0
- package/llms-full.txt +13007 -3217
- package/package.json +25 -6
- package/readme.md +136 -55
- package/dist/adapter/next/previews.spec.d.ts +0 -1
- package/dist/chunks/chunk-AC4U3IMS.js +0 -205
- package/dist/chunks/chunk-DNJX6CRV.js +0 -129
- package/dist/chunks/chunk-NIVGVRDS.js +0 -6363
- package/dist/chunks/chunk-S4AU6SRS.js +0 -5503
- package/dist/chunks/chunk-SJBZFMQ2.js +0 -2966
- package/dist/components/Disclosure.d.ts +0 -5
- package/dist/components/Disclosure.js +0 -106
- package/dist/components/Label.d.ts +0 -48
- package/dist/components/Label.js +0 -210
- package/dist/components/Menu.d.ts +0 -16
- package/dist/components/Menu.js +0 -95
- package/dist/components/Modal.d.ts +0 -7
- package/dist/components/Modal.js +0 -58
- package/dist/components/ProgressCircle.d.ts +0 -6
- package/dist/components/ProgressCircle.js +0 -96
- package/dist/dashboard/app/AppShell.d.ts +0 -4
- package/dist/dashboard/app/AppShell.js +0 -29
- package/dist/dashboard/app/Badge.d.ts +0 -8
- package/dist/dashboard/app/Badge.js +0 -42
- package/dist/dashboard/app/EditorBackButton.d.ts +0 -5
- package/dist/dashboard/app/EditorBackButton.js +0 -33
- package/dist/dashboard/app/EntrySidebarPreview.spec.d.ts +0 -1
- package/dist/dashboard/app/ExplorerFileCard.d.ts +0 -10
- package/dist/dashboard/app/ExplorerFileCard.js +0 -115
- package/dist/dashboard/app/StatusBadge.d.ts +0 -6
- package/dist/dashboard/app/StatusBadge.js +0 -26
- package/dist/dashboard/app/WorkspaceMenu.spec.d.ts +0 -1
- package/dist/dashboard/app/WorkspaceMenu.stories.d.ts +0 -7
- package/dist/dashboard/app/ui/Rail.d.ts +0 -18
- package/dist/dashboard/app/ui/Rail.js +0 -41
- package/dist/dashboard/app/ui/Sidebar.d.ts +0 -15
- package/dist/dashboard/app/ui/Sidebar.js +0 -55
- package/dist/field/link/LinkField.spec.d.ts +0 -1
- package/dist/field/link/LinkField.stories.d.ts +0 -15
- package/dist/field/list/ListField.spec.d.ts +0 -1
- package/dist/field/list/ListField.stories.d.ts +0 -7
- package/dist/field/richtext/RichTextField.spec.d.ts +0 -1
- package/dist/chunks/{chunk-MOWR65LM.js → chunk-PYDOMKJZ.js} +71 -71
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CMS } from 'alinea/core/CMS';
|
|
2
2
|
import { Config } from 'alinea/core/Config';
|
|
3
|
-
import type
|
|
3
|
+
import { type UploadMetadata, type UploadResponse } from 'alinea/core/Connection';
|
|
4
4
|
import type { LocalStore } from 'alinea/core/db/LocalStore';
|
|
5
5
|
import type { Mutation } from 'alinea/core/db/Mutation';
|
|
6
6
|
import type { GraphQuery } from 'alinea/core/Graph';
|
|
@@ -35,7 +35,7 @@ export declare class NextCMS<Definition extends Config = Config> extends CMS<Def
|
|
|
35
35
|
mutate(mutations: Array<Mutation>): Promise<{
|
|
36
36
|
sha: string;
|
|
37
37
|
}>;
|
|
38
|
-
prepareUpload(file: string): Promise<UploadResponse>;
|
|
38
|
+
prepareUpload(file: string, metadata?: UploadMetadata): Promise<UploadResponse>;
|
|
39
39
|
previews: ({ widget, stats: showStats, workspace, root }: PreviewProps) => Promise<import("react").JSX.Element | null>;
|
|
40
40
|
}
|
|
41
41
|
export declare function createCMS<Definition extends Config>(config: Definition): NextCMS<Definition>;
|
package/dist/adapter/next/cms.js
CHANGED
|
@@ -8,18 +8,25 @@ import {
|
|
|
8
8
|
applyPreview as applyPreviewUpdate,
|
|
9
9
|
decodePreviewRequest
|
|
10
10
|
} from "alinea/backend/resolver/ParsePreview";
|
|
11
|
-
import {
|
|
11
|
+
import { dashboardUrl } from "./dashboardUrl.js";
|
|
12
|
+
import { createThrottledSync, syncWait } from "alinea/backend/util/Syncable";
|
|
12
13
|
import { Client } from "alinea/core/Client";
|
|
13
14
|
import { CMS } from "alinea/core/CMS";
|
|
14
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
withDevelopmentKey
|
|
17
|
+
} from "alinea/core/Connection";
|
|
18
|
+
import { loggedSync, syncStats } from "alinea/core/db/SyncStats";
|
|
15
19
|
import { outcome } from "alinea/core/Outcome";
|
|
20
|
+
import { getScope } from "alinea/core/Scope";
|
|
16
21
|
import { trace } from "alinea/core/Trace";
|
|
22
|
+
import { within } from "alinea/core/util/Async";
|
|
17
23
|
import { getPreviewPayloadFromCookies } from "alinea/preview/PreviewCookies";
|
|
18
24
|
import { Headers } from "@alinea/iso";
|
|
19
25
|
import { cache } from "react";
|
|
20
26
|
import { requestContext } from "./context.js";
|
|
27
|
+
import { cachedResolve, developmentRevision } from "./devCache.js";
|
|
21
28
|
import { RenderStats, summarizeQuery, timed } from "./renderStats.js";
|
|
22
|
-
import { syncIfStale } from "./syncCheck.js";
|
|
29
|
+
import { contentShaWindow, syncIfStale, tagContentSha } from "./syncCheck.js";
|
|
23
30
|
import { jsx } from "react/jsx-runtime";
|
|
24
31
|
var preValidatedRemote = { validate: false };
|
|
25
32
|
var NextCMS = class extends CMS {
|
|
@@ -61,9 +68,16 @@ var NextCMS = class extends CMS {
|
|
|
61
68
|
* returns a fresh holder, so nothing is recorded there.
|
|
62
69
|
*/
|
|
63
70
|
#render = cache(() => ({}));
|
|
71
|
+
/** Build renders join the content sha tag once, see `tagContentSha`. */
|
|
72
|
+
#tagContent = cache(
|
|
73
|
+
() => tagContentSha(contentShaWindow(this.config.syncInterval))
|
|
74
|
+
);
|
|
75
|
+
/** One content revision per render, see `developmentRevision`. */
|
|
76
|
+
#devRevision = cache(() => developmentRevision());
|
|
64
77
|
#isDraft = cache(async () => {
|
|
65
|
-
const { draftMode } = await import("next/headers.js");
|
|
78
|
+
const { cookies, draftMode } = await import("next/headers.js");
|
|
66
79
|
const [isDraft] = await outcome(async () => (await draftMode()).isEnabled);
|
|
80
|
+
if (isDraft) await outcome(cookies);
|
|
67
81
|
return Boolean(isDraft);
|
|
68
82
|
});
|
|
69
83
|
/** Draft renders collect their queries and syncs for the preview widget. */
|
|
@@ -80,22 +94,27 @@ var NextCMS = class extends CMS {
|
|
|
80
94
|
return { isBuild, useLocalDb: !isEdge && (!context.isDev || isBuild) };
|
|
81
95
|
}
|
|
82
96
|
/** Renders keep serving the current content when the handler is unreachable. */
|
|
83
|
-
async #syncDb(db, client,
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
97
|
+
async #syncDb(db, client, reason, render) {
|
|
98
|
+
const stats = syncStats();
|
|
99
|
+
const sync = async () => {
|
|
100
|
+
try {
|
|
101
|
+
const options = { ...preValidatedRemote, stats };
|
|
102
|
+
const synced = process.env.NODE_ENV === "production" ? loggedSync(db, client, reason, options) : db.syncWith(client, options);
|
|
103
|
+
const sha = await within(synced, syncWait);
|
|
104
|
+
this.#syncedAt = Date.now();
|
|
105
|
+
return sha;
|
|
106
|
+
} catch (error) {
|
|
107
|
+
console.warn(
|
|
108
|
+
`Alinea could not sync with the handler, serving current content: ${error instanceof Error ? error.message : String(error)}`
|
|
109
|
+
);
|
|
110
|
+
return db.sha;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
if (!render) return sync();
|
|
114
|
+
return render.track(
|
|
115
|
+
{ kind: "sync", summary: `sync (${reason})`, sync: stats },
|
|
116
|
+
(row) => timed(row, sync)
|
|
117
|
+
);
|
|
99
118
|
}
|
|
100
119
|
#applyPreview = cache(async () => {
|
|
101
120
|
const context = await requestContext(this.config);
|
|
@@ -137,6 +156,7 @@ var NextCMS = class extends CMS {
|
|
|
137
156
|
await this.#syncDb(
|
|
138
157
|
db,
|
|
139
158
|
createClient(this.config, context),
|
|
159
|
+
`preview at ${decoded.contentHash.slice(0, 7)}`,
|
|
140
160
|
this.#render().stats
|
|
141
161
|
);
|
|
142
162
|
return applyPreviewUpdate(db, decoded);
|
|
@@ -168,13 +188,18 @@ var NextCMS = class extends CMS {
|
|
|
168
188
|
async #resolve(query, row) {
|
|
169
189
|
let status = query.status;
|
|
170
190
|
const { context, hasPreview, isDraft, isBuild, preview, useLocalDb } = await this.#applyPreview();
|
|
171
|
-
if (isDraft && !status) status = "
|
|
191
|
+
if (isDraft && !status) status = "preview";
|
|
172
192
|
const request = { ...query, preview, status };
|
|
173
193
|
const client = createClient(this.config, context);
|
|
174
194
|
if (row) row.source = useLocalDb ? "database" : "handler";
|
|
175
195
|
if (!useLocalDb) {
|
|
176
196
|
const span = trace(this.config, "alinea.cms.resolve.client");
|
|
177
|
-
|
|
197
|
+
const answer2 = () => client.resolve(request);
|
|
198
|
+
const revision = context.isDev && !isDraft && this.#devRevision();
|
|
199
|
+
if (!revision) return timed(row, () => span(answer2));
|
|
200
|
+
const key = [context.handlerUrl.href, revision];
|
|
201
|
+
const body = getScope(this.config).stringify(request);
|
|
202
|
+
return span(() => cachedResolve(key, body, answer2));
|
|
178
203
|
}
|
|
179
204
|
const db = await this.bundledDb;
|
|
180
205
|
const stats = this.#render().stats;
|
|
@@ -188,14 +213,24 @@ var NextCMS = class extends CMS {
|
|
|
188
213
|
const answer = () => stats && row ? stats.executed(row, () => db.resolve(request)) : db.resolve(request);
|
|
189
214
|
const syncInterval = request.disableSync ? Number.POSITIVE_INFINITY : request.syncInterval ?? this.config.syncInterval;
|
|
190
215
|
if (hasPreview) return answer();
|
|
191
|
-
if (
|
|
216
|
+
if (isBuild) {
|
|
217
|
+
await this.#tagContent();
|
|
218
|
+
} else {
|
|
192
219
|
const tracked = {
|
|
193
220
|
sha: db.sha,
|
|
194
|
-
syncWith: () => this.#syncDb(db, client, stats)
|
|
221
|
+
syncWith: () => this.#syncDb(db, client, "stale", stats)
|
|
195
222
|
};
|
|
196
|
-
const settled = !isDraft && await syncIfStale(
|
|
223
|
+
const settled = !isDraft && await syncIfStale(
|
|
224
|
+
tracked,
|
|
225
|
+
client,
|
|
226
|
+
syncInterval,
|
|
227
|
+
contentShaWindow(this.config.syncInterval)
|
|
228
|
+
);
|
|
197
229
|
if (!settled)
|
|
198
|
-
await this.throttle(
|
|
230
|
+
await this.throttle(
|
|
231
|
+
() => this.#syncDb(db, client, "interval", stats),
|
|
232
|
+
syncInterval
|
|
233
|
+
);
|
|
199
234
|
}
|
|
200
235
|
return answer();
|
|
201
236
|
}
|
|
@@ -235,9 +270,11 @@ var NextCMS = class extends CMS {
|
|
|
235
270
|
const client = await this.#authenticatedClient();
|
|
236
271
|
return client.mutate(mutations);
|
|
237
272
|
}
|
|
238
|
-
async prepareUpload(file) {
|
|
273
|
+
async prepareUpload(file, metadata) {
|
|
274
|
+
const context = await requestContext(this.config);
|
|
239
275
|
const client = await this.#authenticatedClient();
|
|
240
|
-
|
|
276
|
+
const upload = await client.prepareUpload(file, metadata);
|
|
277
|
+
return context.isDev ? withDevelopmentKey(upload, context.apiKey) : upload;
|
|
241
278
|
}
|
|
242
279
|
previews = async ({
|
|
243
280
|
widget,
|
|
@@ -249,16 +286,13 @@ var NextCMS = class extends CMS {
|
|
|
249
286
|
if (!stats) return null;
|
|
250
287
|
const { default: dynamic } = await import("next/dynamic.js");
|
|
251
288
|
const { isDev, handlerUrl } = await requestContext(this.config);
|
|
252
|
-
let file = `${Config.adminPath(this.config)}.html`;
|
|
253
|
-
if (!file.startsWith("/")) file = `/${file}`;
|
|
254
|
-
const dashboardUrl = isDev ? new URL("/", handlerUrl) : new URL(file, handlerUrl);
|
|
255
289
|
const NextPreviews = dynamic(() => import("./previews.js"), {
|
|
256
290
|
ssr: false
|
|
257
291
|
});
|
|
258
292
|
return /* @__PURE__ */ jsx(
|
|
259
293
|
NextPreviews,
|
|
260
294
|
{
|
|
261
|
-
dashboardUrl: dashboardUrl.
|
|
295
|
+
dashboardUrl: dashboardUrl(this.config, isDev, handlerUrl),
|
|
262
296
|
widget,
|
|
263
297
|
stats: widget && showStats ? stats.settled() : void 0,
|
|
264
298
|
workspace,
|
|
@@ -5,7 +5,7 @@ import { generatedRelease } from "alinea/backend/store/GeneratedRelease";
|
|
|
5
5
|
import { Config } from "alinea/core/Config";
|
|
6
6
|
import { forwardDevelopmentCredentials } from "./ForwardCredentials.js";
|
|
7
7
|
async function requestContext(config, request) {
|
|
8
|
-
const apiKey = process.env.ALINEA_API_KEY || (process.env.NODE_ENV === "development" ? "dev" : await generatedRelease);
|
|
8
|
+
const apiKey = process.env.ALINEA_API_KEY || (process.env.NODE_ENV === "development" ? "dev" : await generatedRelease());
|
|
9
9
|
const dev = process.env.ALINEA_DEV_SERVER;
|
|
10
10
|
if (dev) {
|
|
11
11
|
return {
|
|
@@ -15,13 +15,12 @@ async function requestContext(config, request) {
|
|
|
15
15
|
applyAuth: (init) => forwardDevelopmentCredentials(request, apiKey, init)
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
const
|
|
19
|
-
const baseUrl = Config.baseUrl(config, nodeEnv);
|
|
20
|
-
if (!baseUrl) throw new Error(`Missing baseUrl in config for ${nodeEnv}`);
|
|
18
|
+
const localOrigin = process.env.__NEXT_PRIVATE_ORIGIN;
|
|
21
19
|
return {
|
|
22
20
|
isDev: false,
|
|
23
|
-
handlerUrl:
|
|
24
|
-
apiKey
|
|
21
|
+
handlerUrl: Config.serverHandlerUrl(config),
|
|
22
|
+
apiKey,
|
|
23
|
+
publicUrl: localOrigin ? new URL(localOrigin) : void 0
|
|
25
24
|
};
|
|
26
25
|
}
|
|
27
26
|
export {
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Config } from 'alinea/core/Config';
|
|
2
|
+
/**
|
|
3
|
+
* The dashboard as the site serves it: in development the site proxies the
|
|
4
|
+
* admin path to the dev server, in production it serves the generated file.
|
|
5
|
+
*/
|
|
6
|
+
export declare function dashboardUrl(config: Config, isDev: boolean, handlerUrl: URL | string): string;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "../../chunks/chunk-CQ52GEHY.js";
|
|
2
|
+
|
|
3
|
+
// src/adapter/next/dashboardUrl.ts
|
|
4
|
+
import { Config } from "alinea/core/Config";
|
|
5
|
+
function dashboardUrl(config, isDev, handlerUrl) {
|
|
6
|
+
if (!isDev)
|
|
7
|
+
return new URL(`/${Config.dashboardFile(config)}`, handlerUrl).href;
|
|
8
|
+
const adminPath = Config.adminPath(config);
|
|
9
|
+
return adminPath.startsWith("/") ? adminPath : `/${adminPath}`;
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
dashboardUrl
|
|
13
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The revision of the database the Alinea dev server answers from: it
|
|
3
|
+
* commits every content change to this file, so its modification time and
|
|
4
|
+
* size change with the content. It is read synchronously, which keeps it out
|
|
5
|
+
* of the IO that Next.js tracks while it renders, and is undefined where the
|
|
6
|
+
* file cannot be read, such as in the Edge runtime.
|
|
7
|
+
*/
|
|
8
|
+
export declare function developmentRevision(file?: string | undefined): string | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Answer a query of a development render through the Next.js data cache,
|
|
11
|
+
* under a key that includes the content revision, so the dev server is asked
|
|
12
|
+
* once per revision. With Cache Components enabled Next.js then treats the
|
|
13
|
+
* answer as cached data, as it does the bundled database in production,
|
|
14
|
+
* instead of as uncached IO that has to be wrapped in `<Suspense>`.
|
|
15
|
+
*/
|
|
16
|
+
export declare function cachedResolve<T>(keyParts: Array<string>, query: string, resolve: () => Promise<T>): Promise<T>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import "../../chunks/chunk-CQ52GEHY.js";
|
|
2
|
+
|
|
3
|
+
// src/adapter/next/devCache.ts
|
|
4
|
+
function developmentRevision(file = process.env.ALINEA_GENERATED_DATABASE) {
|
|
5
|
+
if (!file) return void 0;
|
|
6
|
+
const fs = process.getBuiltinModule?.("node:fs");
|
|
7
|
+
if (!fs) return void 0;
|
|
8
|
+
try {
|
|
9
|
+
const { mtimeMs, size } = fs.statSync(file);
|
|
10
|
+
return `${mtimeMs}-${size}`;
|
|
11
|
+
} catch {
|
|
12
|
+
return void 0;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
async function cachedResolve(keyParts, query, resolve) {
|
|
16
|
+
let called = false;
|
|
17
|
+
const run = (_query) => {
|
|
18
|
+
called = true;
|
|
19
|
+
return resolve();
|
|
20
|
+
};
|
|
21
|
+
try {
|
|
22
|
+
const { unstable_cache } = await import("next/cache.js");
|
|
23
|
+
return await unstable_cache(run, ["alinea-resolve", ...keyParts])(query);
|
|
24
|
+
} catch (error) {
|
|
25
|
+
if (called) throw error;
|
|
26
|
+
return resolve();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
cachedResolve,
|
|
31
|
+
developmentRevision
|
|
32
|
+
};
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
createHandler as createCoreHandler
|
|
12
12
|
} from "alinea/backend/Handler";
|
|
13
|
+
import { committedEntries, removedEntries } from "alinea/backend/CommitEntries";
|
|
13
14
|
import { HandleAction } from "alinea/backend/HandleAction";
|
|
14
15
|
import { JWTPreviews } from "alinea/backend/util/JWTPreviews";
|
|
15
16
|
import { CloudRemote } from "alinea/cloud/CloudRemote";
|
|
@@ -51,6 +52,7 @@ function createHandlerWithDatabase(input, openGeneratedDatabase) {
|
|
|
51
52
|
...options,
|
|
52
53
|
remote,
|
|
53
54
|
db,
|
|
55
|
+
logSyncs: process.env.NODE_ENV === "production",
|
|
54
56
|
afterCommit
|
|
55
57
|
});
|
|
56
58
|
async function handleDevelopment(request, context) {
|
|
@@ -67,8 +69,6 @@ function createHandlerWithDatabase(input, openGeneratedDatabase) {
|
|
|
67
69
|
return failure(400, "Expected JSON");
|
|
68
70
|
}
|
|
69
71
|
if (!Array.isArray(mutations)) return failure(400, "Expected mutations");
|
|
70
|
-
const adjusted = await options.beforeCommit?.({ mutations });
|
|
71
|
-
if (adjusted) mutations = [...adjusted];
|
|
72
72
|
const devServer = new Client({
|
|
73
73
|
config,
|
|
74
74
|
url: context.handlerUrl.href,
|
|
@@ -80,15 +80,29 @@ function createHandlerWithDatabase(input, openGeneratedDatabase) {
|
|
|
80
80
|
}
|
|
81
81
|
});
|
|
82
82
|
let sha;
|
|
83
|
+
let user;
|
|
84
|
+
let before = [];
|
|
83
85
|
try {
|
|
84
|
-
;
|
|
86
|
+
user = await devServer.user();
|
|
87
|
+
if (!user) return failure(401, "Unauthorized");
|
|
88
|
+
const adjusted = await options.beforeCommit?.({ mutations, user });
|
|
89
|
+
if (adjusted) mutations = [...adjusted];
|
|
90
|
+
if (options.afterCommit)
|
|
91
|
+
before = await committedEntries(devServer, mutations).catch(() => []);
|
|
85
92
|
({ sha } = await devServer.mutate(mutations));
|
|
86
93
|
} catch (error) {
|
|
87
94
|
if (error instanceof HttpError) return failure(error.code, error.message);
|
|
88
95
|
throw error;
|
|
89
96
|
}
|
|
90
97
|
try {
|
|
91
|
-
await
|
|
98
|
+
const entries = options.afterCommit ? await committedEntries(devServer, mutations) : [];
|
|
99
|
+
await afterCommit({
|
|
100
|
+
mutations,
|
|
101
|
+
sha,
|
|
102
|
+
user,
|
|
103
|
+
entries,
|
|
104
|
+
removed: removedEntries(before, entries)
|
|
105
|
+
});
|
|
92
106
|
} catch (error) {
|
|
93
107
|
console.error("Alinea afterCommit hook failed", error);
|
|
94
108
|
}
|
|
@@ -6,13 +6,26 @@ interface SyncableDB {
|
|
|
6
6
|
syncWith(source: RemoteSource, options?: SyncOptions): Promise<string>;
|
|
7
7
|
}
|
|
8
8
|
export declare const CONTENT_SHA_TAG = "alinea-content-sha";
|
|
9
|
+
/**
|
|
10
|
+
* How long renders share the latest content sha. Configured through the
|
|
11
|
+
* config's `syncInterval`, never a query's: all renders share one entry.
|
|
12
|
+
*/
|
|
13
|
+
export declare function contentShaWindow(syncInterval?: number): number;
|
|
14
|
+
/**
|
|
15
|
+
* Tag a static render with the content sha without looking it up. Renders at
|
|
16
|
+
* build skip `syncIfStale`, so this is how their pages join the tag that
|
|
17
|
+
* commits revalidate, and get the same time-based safety net as pages
|
|
18
|
+
* rendered at runtime.
|
|
19
|
+
*/
|
|
20
|
+
export declare function tagContentSha(revalidate?: number): Promise<void>;
|
|
9
21
|
export declare function revalidateContentSha(): Promise<void>;
|
|
10
22
|
/**
|
|
11
23
|
* Sync the isolate-local db only when it is behind the shared content sha.
|
|
12
24
|
* Returns true when the freshness question is settled here (synced, forced,
|
|
13
25
|
* or explicitly disabled) and the caller can skip its throttled sync.
|
|
14
26
|
* Returns false when the sha could not be determined, so the caller falls
|
|
15
|
-
* back to its existing throttle behavior.
|
|
27
|
+
* back to its existing throttle behavior. `shaWindow` is how long renders
|
|
28
|
+
* share the latest sha, see `contentShaWindow`.
|
|
16
29
|
*/
|
|
17
|
-
export declare function syncIfStale(db: SyncableDB, client: Client, syncInterval?: number, options?: SyncOptions): Promise<boolean>;
|
|
30
|
+
export declare function syncIfStale(db: SyncableDB, client: Client, syncInterval?: number, shaWindow?: number, options?: SyncOptions): Promise<boolean>;
|
|
18
31
|
export {};
|
|
@@ -2,22 +2,27 @@ import "../../chunks/chunk-CQ52GEHY.js";
|
|
|
2
2
|
|
|
3
3
|
// src/adapter/next/syncCheck.ts
|
|
4
4
|
var CONTENT_SHA_TAG = "alinea-content-sha";
|
|
5
|
-
var SHA_REVALIDATE_SECONDS =
|
|
5
|
+
var SHA_REVALIDATE_SECONDS = 300;
|
|
6
|
+
function contentShaWindow(syncInterval) {
|
|
7
|
+
if (syncInterval !== void 0 && syncInterval > 0 && Number.isFinite(syncInterval))
|
|
8
|
+
return syncInterval;
|
|
9
|
+
return SHA_REVALIDATE_SECONDS;
|
|
10
|
+
}
|
|
6
11
|
var inflight;
|
|
7
|
-
function latestSha(client) {
|
|
12
|
+
function latestSha(client, revalidate) {
|
|
8
13
|
if (inflight) return inflight;
|
|
9
|
-
inflight = loadLatestSha(client).finally(() => {
|
|
14
|
+
inflight = loadLatestSha(client, revalidate).finally(() => {
|
|
10
15
|
inflight = void 0;
|
|
11
16
|
});
|
|
12
17
|
return inflight;
|
|
13
18
|
}
|
|
14
|
-
async function loadLatestSha(client) {
|
|
19
|
+
async function loadLatestSha(client, revalidate) {
|
|
15
20
|
try {
|
|
16
21
|
const { unstable_cache } = await import("next/cache.js");
|
|
17
22
|
const getSha = unstable_cache(
|
|
18
23
|
() => client.getSha(),
|
|
19
24
|
["alinea-content-sha"],
|
|
20
|
-
{ revalidate
|
|
25
|
+
{ revalidate, tags: [CONTENT_SHA_TAG] }
|
|
21
26
|
);
|
|
22
27
|
return await getSha();
|
|
23
28
|
} catch {
|
|
@@ -28,26 +33,38 @@ async function loadLatestSha(client) {
|
|
|
28
33
|
}
|
|
29
34
|
}
|
|
30
35
|
}
|
|
36
|
+
async function tagContentSha(revalidate = SHA_REVALIDATE_SECONDS) {
|
|
37
|
+
try {
|
|
38
|
+
const { unstable_cache } = await import("next/cache.js");
|
|
39
|
+
await unstable_cache(async () => true, ["alinea-content-sha-tag"], {
|
|
40
|
+
revalidate,
|
|
41
|
+
tags: [CONTENT_SHA_TAG]
|
|
42
|
+
})();
|
|
43
|
+
} catch {
|
|
44
|
+
}
|
|
45
|
+
}
|
|
31
46
|
async function revalidateContentSha() {
|
|
32
47
|
try {
|
|
33
48
|
const { revalidateTag } = await import("next/cache.js");
|
|
34
|
-
revalidateTag(CONTENT_SHA_TAG,
|
|
49
|
+
revalidateTag(CONTENT_SHA_TAG, "max");
|
|
35
50
|
} catch {
|
|
36
51
|
}
|
|
37
52
|
}
|
|
38
|
-
async function syncIfStale(db, client, syncInterval, options) {
|
|
53
|
+
async function syncIfStale(db, client, syncInterval, shaWindow = SHA_REVALIDATE_SECONDS, options) {
|
|
39
54
|
if (syncInterval === Number.POSITIVE_INFINITY) return true;
|
|
40
55
|
if (syncInterval === 0) {
|
|
41
56
|
await db.syncWith(client, options);
|
|
42
57
|
return true;
|
|
43
58
|
}
|
|
44
|
-
const expected = await latestSha(client);
|
|
59
|
+
const expected = await latestSha(client, shaWindow);
|
|
45
60
|
if (!expected) return false;
|
|
46
61
|
if (expected !== await db.sha) await db.syncWith(client, options);
|
|
47
62
|
return true;
|
|
48
63
|
}
|
|
49
64
|
export {
|
|
50
65
|
CONTENT_SHA_TAG,
|
|
66
|
+
contentShaWindow,
|
|
51
67
|
revalidateContentSha,
|
|
52
|
-
syncIfStale
|
|
68
|
+
syncIfStale,
|
|
69
|
+
tagContentSha
|
|
53
70
|
};
|
|
@@ -64,24 +64,18 @@ function withAlinea(config = {}) {
|
|
|
64
64
|
};
|
|
65
65
|
}
|
|
66
66
|
function createImages(config, adminPath) {
|
|
67
|
-
const filePattern = `${adminPath}/file
|
|
67
|
+
const filePattern = { pathname: `${adminPath}/file/**` };
|
|
68
68
|
const localPatterns = config.images?.localPatterns;
|
|
69
69
|
if (!localPatterns)
|
|
70
70
|
return {
|
|
71
71
|
...config.images,
|
|
72
|
-
localPatterns: [{ pathname:
|
|
72
|
+
localPatterns: [filePattern, { pathname: "**", search: "" }]
|
|
73
73
|
};
|
|
74
|
-
if (localPatterns.some(
|
|
74
|
+
if (localPatterns.some(
|
|
75
|
+
(pattern) => pattern.pathname === filePattern.pathname && pattern.search === void 0
|
|
76
|
+
))
|
|
75
77
|
return config.images;
|
|
76
|
-
return {
|
|
77
|
-
...config.images,
|
|
78
|
-
localPatterns: [
|
|
79
|
-
...localPatterns,
|
|
80
|
-
{
|
|
81
|
-
pathname: filePattern
|
|
82
|
-
}
|
|
83
|
-
]
|
|
84
|
-
};
|
|
78
|
+
return { ...config.images, localPatterns: [...localPatterns, filePattern] };
|
|
85
79
|
}
|
|
86
80
|
var emptyRewrites = {
|
|
87
81
|
beforeFiles: [],
|
|
@@ -122,16 +116,15 @@ function createRewrites(config, adminPath, handlerUrl) {
|
|
|
122
116
|
}
|
|
123
117
|
return {
|
|
124
118
|
...rewrites,
|
|
125
|
-
|
|
126
|
-
...rewrites.
|
|
119
|
+
afterFiles: [
|
|
120
|
+
...rewrites.afterFiles,
|
|
127
121
|
{
|
|
122
|
+
// The build links media files on disk into the public dir, so only
|
|
123
|
+
// files synced after it reach the handler.
|
|
128
124
|
source: `${adminPath}/file/:file*`,
|
|
129
125
|
// Next's internal image optimizer does not follow redirects.
|
|
130
126
|
destination: `${handlerUrl}?file=:file*&delivery=proxy`
|
|
131
|
-
}
|
|
132
|
-
],
|
|
133
|
-
afterFiles: [
|
|
134
|
-
...rewrites.afterFiles,
|
|
127
|
+
},
|
|
135
128
|
{
|
|
136
129
|
source: adminPath,
|
|
137
130
|
destination: `${adminPath}.html`
|
|
@@ -141,13 +134,27 @@ function createRewrites(config, adminPath, handlerUrl) {
|
|
|
141
134
|
};
|
|
142
135
|
}
|
|
143
136
|
function resolveSettings(config) {
|
|
144
|
-
const
|
|
137
|
+
const built = builtEnv(config);
|
|
138
|
+
const adminPath = config.env?.ALINEA_ADMIN_PATH ?? process.env.ALINEA_ADMIN_PATH ?? built?.ALINEA_ADMIN_PATH;
|
|
145
139
|
if (!adminPath) return;
|
|
146
140
|
return {
|
|
147
141
|
adminPath: normalizeBasePath(adminPath),
|
|
148
|
-
handlerUrl: config.env?.ALINEA_HANDLER_URL ?? process.env.ALINEA_HANDLER_URL ?? "/api/cms"
|
|
142
|
+
handlerUrl: config.env?.ALINEA_HANDLER_URL ?? process.env.ALINEA_HANDLER_URL ?? built?.ALINEA_HANDLER_URL ?? "/api/cms"
|
|
149
143
|
};
|
|
150
144
|
}
|
|
145
|
+
function builtEnv(config) {
|
|
146
|
+
if (process.env.NODE_ENV !== "production") return;
|
|
147
|
+
try {
|
|
148
|
+
const file = resolve(
|
|
149
|
+
config.distDir ?? ".next",
|
|
150
|
+
"required-server-files.json"
|
|
151
|
+
);
|
|
152
|
+
const built = JSON.parse(readFileSync(file, "utf-8"));
|
|
153
|
+
return built?.config?.env;
|
|
154
|
+
} catch {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
151
158
|
function normalizeBasePath(value) {
|
|
152
159
|
return join("/", value, ".");
|
|
153
160
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DashboardEntry } from 'alinea/core/DashboardEntry';
|
|
2
|
+
import type { Mutation } from 'alinea/core/db/Mutation';
|
|
3
|
+
import type { Resolver } from 'alinea/core/Resolver';
|
|
4
|
+
/** An entry that no longer exists after a commit */
|
|
5
|
+
export interface RemovedEntry {
|
|
6
|
+
id: string;
|
|
7
|
+
type: string;
|
|
8
|
+
locale: string | null;
|
|
9
|
+
/** The url the entry had before the commit */
|
|
10
|
+
url: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The latest version, in every locale, of the entries that mutations change
|
|
14
|
+
*/
|
|
15
|
+
export declare function committedEntries(resolver: Resolver, mutations: ReadonlyArray<Mutation>): Promise<Array<DashboardEntry>>;
|
|
16
|
+
/** The entries of `before` that are not in `after` */
|
|
17
|
+
export declare function removedEntries(before: Array<DashboardEntry>, after: Array<DashboardEntry>): Array<RemovedEntry>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import "../chunks/chunk-CQ52GEHY.js";
|
|
2
|
+
|
|
3
|
+
// src/backend/CommitEntries.ts
|
|
4
|
+
import { Entry } from "alinea/core/Entry";
|
|
5
|
+
var select = {
|
|
6
|
+
id: Entry.id,
|
|
7
|
+
type: Entry.type,
|
|
8
|
+
title: Entry.title,
|
|
9
|
+
path: Entry.path,
|
|
10
|
+
url: Entry.url,
|
|
11
|
+
locale: Entry.locale,
|
|
12
|
+
status: Entry.status,
|
|
13
|
+
workspace: Entry.workspace,
|
|
14
|
+
root: Entry.root,
|
|
15
|
+
parentId: Entry.parentId,
|
|
16
|
+
data: Entry.data
|
|
17
|
+
};
|
|
18
|
+
function entryIds(mutations) {
|
|
19
|
+
const ids = mutations.map((mutation) => "id" in mutation ? mutation.id : "");
|
|
20
|
+
return [...new Set(ids.filter(Boolean))];
|
|
21
|
+
}
|
|
22
|
+
async function committedEntries(resolver, mutations) {
|
|
23
|
+
const ids = entryIds(mutations);
|
|
24
|
+
if (ids.length === 0) return [];
|
|
25
|
+
return await resolver.resolve({
|
|
26
|
+
id: { in: ids },
|
|
27
|
+
status: "preferDraft",
|
|
28
|
+
select
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function removedEntries(before, after) {
|
|
32
|
+
const key = (entry) => `${entry.id}:${entry.locale}`;
|
|
33
|
+
const remaining = new Set(after.map(key));
|
|
34
|
+
return before.filter((entry) => !remaining.has(key(entry))).map(({ id, type, locale, url }) => ({ id, type, locale, url }));
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
committedEntries,
|
|
38
|
+
removedEntries
|
|
39
|
+
};
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
import type { CMS } from 'alinea/core/CMS';
|
|
2
2
|
import type { AuthedContext, RemoteConnection, RequestContext } from 'alinea/core/Connection';
|
|
3
3
|
import type { LocalStore } from 'alinea/core/db/LocalStore';
|
|
4
|
+
import type { DashboardEntry } from 'alinea/core/DashboardEntry';
|
|
5
|
+
import { type RemovedEntry } from './CommitEntries.js';
|
|
4
6
|
import type { Mutation } from 'alinea/core/db/Mutation';
|
|
7
|
+
import type { User } from 'alinea/core/User';
|
|
5
8
|
export interface Handler {
|
|
6
9
|
(request: Request, context: RequestContext): Promise<Response>;
|
|
7
10
|
}
|
|
8
11
|
export type HookResponse<T = void> = void | T | Promise<void | T>;
|
|
9
12
|
export interface BeforeCommitContext {
|
|
10
13
|
mutations: ReadonlyArray<Mutation>;
|
|
14
|
+
/** The user committing the mutations */
|
|
15
|
+
user: User;
|
|
11
16
|
}
|
|
12
17
|
export interface AfterCommitContext extends BeforeCommitContext {
|
|
13
18
|
sha: string;
|
|
19
|
+
/**
|
|
20
|
+
* The entries the mutations changed as they are after the commit: the
|
|
21
|
+
* latest version in each locale
|
|
22
|
+
*/
|
|
23
|
+
entries: Array<DashboardEntry>;
|
|
24
|
+
/** Entries that no longer exist after the commit, with the url they had */
|
|
25
|
+
removed: Array<RemovedEntry>;
|
|
14
26
|
}
|
|
15
27
|
export interface HandlerHooks {
|
|
16
28
|
beforeCommit?(context: BeforeCommitContext): HookResponse<ReadonlyArray<Mutation>>;
|
|
@@ -20,6 +32,8 @@ export interface HandlerOptions extends HandlerHooks {
|
|
|
20
32
|
cms: CMS;
|
|
21
33
|
db: LocalStore | Promise<LocalStore>;
|
|
22
34
|
remote?: (context: RequestContext) => RemoteConnection;
|
|
35
|
+
/** Log why and how long each sync took, for a deployed handler */
|
|
36
|
+
logSyncs?: boolean;
|
|
23
37
|
forwardMutations?(request: Request, context: AuthedContext): Promise<Response | undefined>;
|
|
24
38
|
}
|
|
25
|
-
export declare function createHandler({ cms, remote, db, forwardMutations, ...hooks }: HandlerOptions): Handler;
|
|
39
|
+
export declare function createHandler({ cms, remote, db, forwardMutations, logSyncs, ...hooks }: HandlerOptions): Handler;
|