camox 0.43.0 → 0.45.0
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/bin/camox.mjs +9 -1
- package/dist/components/AuthGate.js +0 -6
- package/dist/components/DeviceSelector.js +96 -0
- package/dist/components/PlatformLabel.js +20 -24
- package/dist/core/components/lexical/HighlightNode.js +1 -1
- package/dist/core/components/lexical/InlineContentEditable.js +15 -19
- package/dist/core/components/lexical/InlineLexicalEditor.js +54 -74
- package/dist/core/components/lexical/InlineStylesPlugin.js +57 -41
- package/dist/core/components/lexical/MaxLengthPlugin.js +59 -0
- package/dist/core/components/lexical/SelectionBroadcaster.js +55 -56
- package/dist/core/components/lexical/SidebarLexicalEditor.js +327 -234
- package/dist/core/components/lexical/SummaryToggleGuard.js +42 -0
- package/dist/core/components/lexical/TextLinkPopover.js +169 -180
- package/dist/core/createApp.d.ts +254 -299
- package/dist/core/createApp.js +123 -29
- package/dist/core/createBlock.d.ts +5 -5
- package/dist/core/createBlock.js +399 -152
- package/dist/core/createCollection.d.ts +55 -0
- package/dist/core/createCollection.js +93 -0
- package/dist/core/createLayout.d.ts +197 -61
- package/dist/core/createLayout.js +114 -56
- package/dist/core/defineDocument.d.ts +3 -5
- package/dist/core/derivedRoutes.js +49 -1
- package/dist/core/dom.d.ts +13 -4
- package/dist/core/dom.js +44 -1
- package/dist/core/editing/BlockEditingRuntime.d.ts +16 -0
- package/dist/core/editing/BlockEditingRuntime.js +6 -15
- package/dist/core/editing/CompleteBlockEditingRuntime.js +28 -23
- package/dist/core/editing/createEditableBlock.d.ts +820 -565
- package/dist/core/editing/createEditableBlock.js +2153 -971
- package/dist/core/editing/referenceWrites.js +51 -0
- package/dist/core/editing/useLatestRecord.js +90 -0
- package/dist/core/hooks/useArtifactHost.js +139 -0
- package/dist/core/hooks/useFieldSelection.js +43 -18
- package/dist/core/hooks/useIsEditable.js +12 -10
- package/dist/core/hooks/useOverlayMessage.js +15 -19
- package/dist/core/lib/artifact.d.ts +21 -0
- package/dist/core/lib/artifact.js +154 -0
- package/dist/core/lib/artifactColors.js +123 -0
- package/dist/core/lib/artifactData.d.ts +1 -0
- package/dist/core/lib/artifactData.js +131 -0
- package/dist/core/lib/artifactHost.js +205 -0
- package/dist/core/lib/artifactRuntime.js +36 -0
- package/dist/core/lib/artifactTheme.js +57 -0
- package/dist/core/lib/contentType.d.ts +304 -103
- package/dist/core/lib/contentType.js +207 -168
- package/dist/core/lib/fieldTypes.js +4 -0
- package/dist/core/lib/iconTypes.d.ts +13 -0
- package/dist/core/lib/icons.d.ts +6 -0
- package/dist/core/lib/icons.js +126 -0
- package/dist/core/lib/imagePlaceholder.js +177 -0
- package/dist/core/lib/imageTransform.js +1 -1
- package/dist/core/lib/lexicalReact.d.ts +3 -1
- package/dist/core/lib/lexicalState.js +7 -7
- package/dist/core/lib/modifierFormats.js +1 -1
- package/dist/core/lib/previewPaused.js +9 -0
- package/dist/core/lib/recordScope.js +316 -0
- package/dist/core/lib/reference.d.ts +81 -0
- package/dist/core/lib/reference.js +29 -0
- package/dist/core/lib/textLinks.js +7 -5
- package/dist/core/lib/textStyles.d.ts +6 -8
- package/dist/core/lib/textStyles.js +5 -5
- package/dist/core/notFound.d.ts +7 -0
- package/dist/core/notFound.js +11 -0
- package/dist/core/pageDestinations.js +6 -3
- package/dist/core/recordItem.js +34 -0
- package/dist/core/requestContext.d.ts +26 -0
- package/dist/core/requestContext.js +20 -0
- package/dist/features/canvas/CamoxCanvas.js +1734 -0
- package/dist/features/canvas/CanvasBlockFrame.js +353 -0
- package/dist/features/canvas/CanvasBlockHeader.js +55 -0
- package/dist/features/canvas/CanvasLoadingScreen.js +35 -0
- package/dist/features/canvas/CanvasOverlays.js +254 -0
- package/dist/features/canvas/CanvasPageEdge.js +87 -0
- package/dist/features/canvas/CanvasPageFrame.js +335 -0
- package/dist/features/canvas/CanvasPageHeader.js +125 -0
- package/dist/features/canvas/CanvasPreviewPageSlot.js +103 -0
- package/dist/features/canvas/CanvasShelfMarker.js +255 -0
- package/dist/features/canvas/DerivedPagePathInput.js +238 -0
- package/dist/features/canvas/canvasCamera.js +229 -0
- package/dist/features/canvas/canvasFlight.js +104 -0
- package/dist/features/canvas/canvasFrameCapture.js +364 -0
- package/dist/features/canvas/canvasFrameDocument.js +317 -0
- package/dist/features/canvas/canvasFrameMode.js +53 -0
- package/dist/features/canvas/canvasInsertionSeams.js +44 -0
- package/dist/features/canvas/canvasItems.js +120 -0
- package/dist/features/canvas/canvasOverlayGeometry.js +240 -0
- package/dist/features/canvas/canvasPages.js +79 -0
- package/dist/features/canvas/canvasScreenSpace.js +26 -0
- package/dist/features/canvas/canvasSelection.js +18 -0
- package/dist/features/canvas/canvasStore.js +149 -0
- package/dist/features/canvas/canvasThumbnails.js +304 -0
- package/dist/features/canvas/canvasZoom.js +10 -0
- package/dist/features/canvas/sidebar/CanvasInspector.js +202 -0
- package/dist/features/canvas/sidebar/CanvasNavigator.js +226 -0
- package/dist/features/canvas/sidebar/CanvasSidebar.js +60 -0
- package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
- package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
- package/dist/features/canvas/sidebar/CatalogBlockInspector.js +189 -0
- package/dist/features/canvas/sidebar/CuratedPageInspector.js +69 -0
- package/dist/features/canvas/sidebar/DerivedPageInspector.js +37 -0
- package/dist/features/canvas/sidebar/LayoutPageBlocks.js +78 -0
- package/dist/features/canvas/sidebar/LayoutPageOverview.js +71 -0
- package/dist/features/canvas/sidebar/PageInspector.js +157 -0
- package/dist/features/canvas/sidebar/PageInspectorSkeleton.js +90 -0
- package/dist/features/canvas/sidebar/PageOverview.js +27 -0
- package/dist/features/canvas/sidebar/SingletonPageInspector.js +31 -0
- package/dist/features/canvas/useCanvasCamera.js +803 -0
- package/dist/features/canvas/useCanvasFrame.js +149 -0
- package/dist/features/canvas/useCanvasFrameInput.js +97 -0
- package/dist/features/canvas/useCanvasNearness.js +57 -0
- package/dist/features/canvas/useDiscoveredPreviewPaths.js +62 -0
- package/dist/features/content/CamoxContent.d.ts +2 -5
- package/dist/features/content/CamoxContent.js +174 -271
- package/dist/features/content/CollectionItemSheetContext.js +106 -0
- package/dist/features/content/ContentAssets.js +315 -0
- package/dist/features/content/ContentCollection.js +663 -0
- package/dist/features/content/collection-form.js +58 -0
- package/dist/features/content/components/AssetCard.js +101 -69
- package/dist/features/content/components/AssetCardSkeleton.js +4 -8
- package/dist/features/content/components/ContentSidebar.js +129 -18
- package/dist/features/content/components/ContentSidebarGroup.js +37 -0
- package/dist/features/content/components/DeleteCollectionItemButton.js +202 -0
- package/dist/features/content/components/MissingFromLocale.js +282 -0
- package/dist/features/content/components/UploadDropZone.js +27 -31
- package/dist/features/content/components/UploadProgressDrawer.js +90 -98
- package/dist/features/navigation/navigation.d.ts +66 -20
- package/dist/features/navigation/navigation.js +257 -90
- package/dist/features/og/defaultFonts.js +8 -8
- package/dist/features/og/geist-variable-ttf-base64.js +1 -1
- package/dist/features/og/imageResponse.d.ts +8 -0
- package/dist/features/og/imageResponse.js +26 -0
- package/dist/features/page/CuratedPageContent.js +167 -0
- package/dist/features/page/DerivedPageContent.js +26 -30
- package/dist/features/page/SharedLayoutContent.js +25 -27
- package/dist/features/preview/CamoxPreview.d.ts +23 -61
- package/dist/features/preview/CamoxPreview.js +811 -507
- package/dist/features/preview/EditablePageContent.js +1 -1
- package/dist/features/preview/EditablePageExperience.js +16 -22
- package/dist/features/preview/components/AddBlockDialog.js +270 -0
- package/dist/features/preview/components/AssetFieldEditor.js +173 -154
- package/dist/features/preview/components/AssetLightbox.js +194 -136
- package/dist/features/preview/components/AssetPickerModal.js +153 -170
- package/dist/features/preview/components/BlockActionsPopover.js +150 -149
- package/dist/features/preview/components/BlockErrorBoundary.js +8 -12
- package/dist/features/preview/components/BlockThumbnail.js +176 -100
- package/dist/features/preview/components/CanvasPreview.js +243 -0
- package/dist/features/preview/components/CreatePageModal.js +128 -137
- package/dist/features/preview/components/DebouncedFieldEditor.js +29 -33
- package/dist/features/preview/components/DerivedLayoutDialog.js +46 -29
- package/dist/features/preview/components/DrillRow.js +150 -0
- package/dist/features/preview/components/FieldOverlayStyles.js +33 -10
- package/dist/features/preview/components/FieldToolbar.js +166 -116
- package/dist/features/preview/components/Frame.js +108 -20
- package/dist/features/preview/components/IconFieldEditor.js +227 -0
- package/dist/features/preview/components/ItemFieldsEditor.js +238 -205
- package/dist/features/preview/components/LinkFieldEditor.js +135 -139
- package/dist/features/preview/components/Metadata.js +22 -30
- package/dist/features/preview/components/MobilePreviewDrawer.js +89 -108
- package/dist/features/preview/components/MultipleAssetFieldEditor.js +334 -246
- package/dist/features/preview/components/OverlayTracker.js +10 -42
- package/dist/features/preview/components/Overlays.js +81 -69
- package/dist/features/preview/components/PageInfo.js +1748 -0
- package/dist/features/preview/components/PageInfoSkeleton.js +51 -0
- package/dist/features/preview/components/PageLocationFieldset.js +112 -116
- package/dist/features/preview/components/PageNavigatorHeader.js +24 -0
- package/dist/features/preview/components/PageNicknameField.js +22 -26
- package/dist/features/preview/components/PagePicker.js +145 -147
- package/dist/features/preview/components/PageTree.js +525 -532
- package/dist/features/preview/components/PreviewActivation.js +28 -32
- package/dist/features/preview/components/PreviewPanel.js +620 -319
- package/dist/features/preview/components/PreviewToolbar.js +111 -340
- package/dist/features/preview/components/RecordCard.js +80 -0
- package/dist/features/preview/components/RecordCombobox.js +178 -0
- package/dist/features/preview/components/ReferenceFieldEditor.js +149 -0
- package/dist/features/preview/components/ReferenceListFieldEditor.js +432 -0
- package/dist/features/preview/components/RemovedBlockPlaceholder.js +95 -0
- package/dist/features/preview/components/RepeatableItemsList.js +125 -138
- package/dist/features/preview/components/SelectionEditor.js +993 -0
- package/dist/features/preview/components/ShikiMarkdown.js +14 -18
- package/dist/features/preview/components/SidebarSection.js +52 -64
- package/dist/features/preview/components/StudioEditingFallback.js +56 -0
- package/dist/features/preview/components/UnlinkAssetButton.js +104 -107
- package/dist/features/preview/components/blockGridNavigation.js +15 -0
- package/dist/features/preview/components/contentFieldSchema.js +8 -0
- package/dist/features/preview/components/useFieldWriter.js +200 -0
- package/dist/features/preview/components/useRecordView.js +383 -0
- package/dist/features/preview/components/useRepeatableItemActions.js +35 -37
- package/dist/features/preview/components/useUpdateBlockPosition.js +37 -37
- package/dist/features/preview/editingFrame.js +197 -0
- package/dist/features/preview/overlayHighlights.js +27 -0
- package/dist/features/preview/overlayMessages.js +72 -1
- package/dist/features/preview/pageRecord.js +189 -0
- package/dist/features/preview/previewConstants.js +6 -2
- package/dist/features/preview/previewPageFrame.js +95 -0
- package/dist/features/preview/previewPreparation.js +7 -0
- package/dist/features/preview/previewSelection.js +33 -59
- package/dist/features/preview/previewStore.js +225 -123
- package/dist/features/preview/referencePickerFocus.js +29 -0
- package/dist/features/preview/repeatableItemTargets.js +56 -0
- package/dist/features/preview/selectionReveal.js +21 -0
- package/dist/features/preview/usePreviewViewportActions.js +114 -0
- package/dist/features/preview/viewportContinuity.js +109 -0
- package/dist/features/provider/AuthenticatedCamoxProvider.js +69 -44
- package/dist/features/provider/CamoxProvider.d.ts +3 -6
- package/dist/features/provider/CamoxProvider.js +38 -50
- package/dist/features/provider/CoreCamoxProvider.js +71 -23
- package/dist/features/provider/LocalhostPreviewProvider.js +73 -73
- package/dist/features/provider/PreviewSignInPage.js +54 -0
- package/dist/features/provider/components/CamoxAppContext.js +11 -11
- package/dist/features/provider/components/CommandPalette.js +87 -143
- package/dist/features/provider/useAdminShortcuts.js +7 -11
- package/dist/features/routes/pageRuntime.d.ts +44 -4
- package/dist/features/routes/pageRuntime.js +244 -137
- package/dist/features/runtime/RuntimeChrome.js +117 -115
- package/dist/features/runtime/alternates.js +64 -0
- package/dist/features/runtime/analytics.d.ts +7 -0
- package/dist/features/runtime/analytics.js +66 -0
- package/dist/features/runtime/artifactSources.js +87 -0
- package/dist/features/runtime/editingFallback.js +20 -0
- package/dist/features/runtime/linkPrefetch.js +97 -0
- package/dist/features/runtime/livePages.js +62 -0
- package/dist/features/runtime/llmsTxt.js +40 -0
- package/dist/features/runtime/loopbackFetch.js +18 -0
- package/dist/features/runtime/navigationAccessibility.js +51 -0
- package/dist/features/runtime/navigationTarget.js +23 -2
- package/dist/features/runtime/pageApp.js +216 -141
- package/dist/features/runtime/pageBlockTypes.js +20 -0
- package/dist/features/runtime/pageClient.d.ts +2 -4
- package/dist/features/runtime/pageClient.js +18 -3
- package/dist/features/runtime/pageNavigation.js +254 -32
- package/dist/features/runtime/pageServer.d.ts +2 -4
- package/dist/features/runtime/pageServer.js +8 -1
- package/dist/features/runtime/pageViewport.js +7 -0
- package/dist/features/runtime/runtime.d.ts +60 -23
- package/dist/features/runtime/runtime.js +779 -166
- package/dist/features/runtime/runtimeChromeLoader.js +58 -0
- package/dist/features/runtime/runtimeRoutes.d.ts +19 -0
- package/dist/features/runtime/runtimeRoutes.js +25 -0
- package/dist/features/runtime/scrollRestoration.js +133 -0
- package/dist/features/runtime/studioApp.d.ts +4 -3
- package/dist/features/runtime/studioApp.js +5 -9
- package/dist/features/runtime/studioClient.d.ts +2 -4
- package/dist/features/runtime/studioClient.js +12 -3
- package/dist/features/runtime/studioServer.d.ts +2 -4
- package/dist/features/runtime/studioServer.js +6 -1
- package/dist/features/runtime/worker.d.ts +6 -0
- package/dist/features/runtime/worker.js +23 -0
- package/dist/features/runtime/workerRequest.js +44 -0
- package/dist/features/studio/CamoxStudio.d.ts +2 -6
- package/dist/features/studio/CamoxStudio.js +34 -49
- package/dist/features/studio/FollowAgentProvider.js +338 -0
- package/dist/features/studio/components/ChatSidebar.js +356 -0
- package/dist/features/studio/components/DraftsControl.js +676 -0
- package/dist/features/studio/components/FaviconDialog.js +318 -0
- package/dist/features/studio/components/LocalePicker.js +785 -0
- package/dist/features/studio/components/Navbar.js +123 -103
- package/dist/features/studio/components/ProjectMenu.js +239 -260
- package/dist/features/studio/components/RenameDraftDialog.js +206 -0
- package/dist/features/studio/components/ReviewDraftSheet.js +1472 -0
- package/dist/features/studio/components/ThreadComposer.js +157 -0
- package/dist/features/studio/components/ThreadMarkdown.js +113 -0
- package/dist/features/studio/components/ThreadMessages.js +270 -0
- package/dist/features/studio/components/UserButton.js +34 -23
- package/dist/features/studio/draftLabel.js +33 -0
- package/dist/features/studio/draftNotice.js +13 -0
- package/dist/features/studio/followAgent.js +250 -0
- package/dist/features/studio/followAgentContext.js +7 -0
- package/dist/features/studio/localeOptions.js +118 -0
- package/dist/features/studio/localeSwitch.js +19 -0
- package/dist/features/studio/routes.js +48 -1
- package/dist/features/studio/studioStore.js +64 -1
- package/dist/features/studio/useTheme.js +24 -27
- package/dist/features/vite/artifactRuntimeMinification.js +36 -0
- package/dist/features/vite/auth.js +1 -50
- package/dist/features/vite/blockBoilerplate.js +6 -5
- package/dist/features/vite/blockChunks.js +31 -0
- package/dist/features/vite/bundlerLogs.js +17 -0
- package/dist/features/vite/definitionsSync.js +158 -226
- package/dist/features/vite/devAuthentication.js +4 -16
- package/dist/features/vite/devSignIn.js +87 -0
- package/dist/features/vite/iconGeneration.js +16 -0
- package/dist/features/vite/layoutGeneration.js +11 -1
- package/dist/features/vite/publishSeededContent.js +30 -0
- package/dist/features/vite/routeGeneration.js +6 -7
- package/dist/features/vite/runtimeDev.js +80 -99
- package/dist/features/vite/vite.d.ts +53 -31
- package/dist/features/vite/vite.js +230 -116
- package/dist/features/vite/workerBuild.js +39 -0
- package/dist/hooks/use-debounced-field.js +116 -47
- package/dist/hooks/use-file-upload.js +114 -67
- package/dist/hooks/use-marquee-selection.js +32 -36
- package/dist/hooks/use-page-destinations.js +69 -37
- package/dist/lib/api-client-server.d.ts +5 -0
- package/dist/lib/api-client-server.js +10 -4
- package/dist/lib/api-client.d.ts +6 -0
- package/dist/lib/api-client.js +51 -16
- package/dist/lib/api-socket.js +17 -0
- package/dist/lib/auth-page-styles.js +39 -0
- package/dist/lib/auth.js +139 -60
- package/dist/lib/collection-cache.js +23 -0
- package/dist/lib/draft-scope.d.ts +4 -0
- package/dist/lib/draft-scope.js +222 -0
- package/dist/lib/html.js +12 -0
- package/dist/lib/link-pages.js +154 -0
- package/dist/lib/locale-path.d.ts +22 -0
- package/dist/lib/locale-path.js +57 -0
- package/dist/lib/normalized-data.js +252 -152
- package/dist/lib/preview-handoff.js +13 -0
- package/dist/lib/queries.d.ts +11 -0
- package/dist/lib/queries.js +71 -131
- package/dist/lib/studio-reads.d.ts +14 -0
- package/dist/lib/studio-reads.js +574 -0
- package/dist/lib/use-project-room.js +50 -47
- package/dist/lib/use-thread.js +310 -0
- package/dist/lib/utils.js +25 -29
- package/dist/lib/view-locale-context.js +22 -0
- package/dist/lib/view-locale.js +46 -0
- package/dist/package.js +5 -0
- package/dist/studio-overlays.css +41 -147
- package/dist/studio.css +2 -2
- package/package.json +70 -72
- package/skills/camox/SKILL.md +16 -5
- package/skills/camox/references/artifacts.md +179 -0
- package/skills/camox/references/block-definitions.md +98 -55
- package/skills/camox/references/cli-common.md +18 -6
- package/skills/camox/references/cli-content.md +92 -58
- package/skills/camox/references/cli-publishing.md +26 -0
- package/skills/camox/references/dom-integrations.md +27 -0
- package/skills/camox/references/field-styling.md +7 -7
- package/skills/camox/references/layout-definitions.md +16 -14
- package/skills/camox/references/localization.md +56 -0
- package/skills/camox/references/routed-layouts.md +133 -15
- package/skills/camox-expand/SKILL.md +69 -0
- package/skills/camox-expand/references/jobs.md +39 -0
- package/skills/camoxify/SKILL.md +38 -2
- package/dist/core/components/AddBlockControlBar.js +0 -78
- package/dist/core/hooks/useRequireDraftSource.js +0 -23
- package/dist/features/metadata/sitemap.d.ts +0 -8
- package/dist/features/metadata/sitemap.js +0 -17
- package/dist/features/og/imageResponse.node.d.ts +0 -12
- package/dist/features/og/imageResponse.node.js +0 -49
- package/dist/features/og/imageResponse.workerd.d.ts +0 -12
- package/dist/features/og/imageResponse.workerd.js +0 -40
- package/dist/features/page/PublishedPageContent.js +0 -205
- package/dist/features/page/PublishedPageExperience.js +0 -23
- package/dist/features/preview/DerivedPreview.js +0 -134
- package/dist/features/preview/commentsEnabled.js +0 -8
- package/dist/features/preview/components/AddBlockSidebar.js +0 -381
- package/dist/features/preview/components/AttachedComments.js +0 -194
- package/dist/features/preview/components/CommentHeader.js +0 -122
- package/dist/features/preview/components/CommentSidebar.js +0 -29
- package/dist/features/preview/components/CommentTargetQuote.js +0 -166
- package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +0 -5
- package/dist/features/preview/components/DerivedLayoutSidebar.js +0 -179
- package/dist/features/preview/components/DerivedPageInfoSidebar.js +0 -69
- package/dist/features/preview/components/LeftSidebar.js +0 -68
- package/dist/features/preview/components/PageEditorSidebar.js +0 -563
- package/dist/features/preview/components/PageInfoSidebar.js +0 -1551
- package/dist/features/preview/components/PageNavigatorSidebar.js +0 -78
- package/dist/features/preview/components/PageStatusBadge.js +0 -97
- package/dist/features/preview/components/PeekedBlock.js +0 -217
- package/dist/features/preview/components/PreviewComments.js +0 -56
- package/dist/features/preview/components/PreviewToolbarSpacer.js +0 -43
- package/dist/features/preview/components/PublicationRow.js +0 -422
- package/dist/features/preview/components/PublishDialog.js +0 -194
- package/dist/features/preview/components/RightSidebar.js +0 -59
- package/dist/features/preview/previewCommentsStore.js +0 -115
- package/dist/features/preview/publication.js +0 -81
- package/dist/features/runtime/SharedChromeContext.js +0 -7
- package/dist/features/studio/components/EnvironmentMenu.js +0 -413
- package/dist/features/vite/appGeneration.js +0 -89
- package/dist/lib/view-queries.js +0 -28
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts +0 -114
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts +0 -25
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/config.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/defer.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts +0 -20
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/global.d.ts +0 -8
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/hash-scroll.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/index.d.ts +0 -18
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/link.d.ts +0 -161
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts +0 -6
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/location.d.ts +0 -54
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts +0 -8
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts +0 -32
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.d.ts +0 -115
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/not-found.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts +0 -49
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/rewrite.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/root.d.ts +0 -6
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/route.d.ts +0 -343
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts +0 -48
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/router.d.ts +0 -695
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchMiddleware.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts +0 -5
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/RawStream.d.ts +0 -38
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/seroval-plugins.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/transformer.d.ts +0 -65
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/stores.d.ts +0 -69
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/typePrimitives.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts +0 -10
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/utils.d.ts +0 -28
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/validators.d.ts +0 -49
- package/skills/camox/references/cli-environments.md +0 -37
|
@@ -1,11 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createServerApiClient } from "../../lib/api-client-server.js";
|
|
2
|
+
import { transformArtifactRuntime } from "./artifactRuntimeMinification.js";
|
|
2
3
|
import { readAuthTokenForUrl } from "./auth.js";
|
|
3
4
|
import { watchNewBlockFiles } from "./blockBoilerplate.js";
|
|
5
|
+
import { collectBlockChunks } from "./blockChunks.js";
|
|
6
|
+
import { withoutExpectedCamoxLogs } from "./bundlerLogs.js";
|
|
4
7
|
import { installDevAuthenticationMiddleware } from "./devAuthentication.js";
|
|
5
|
-
import {
|
|
8
|
+
import { installDevSignInLink } from "./devSignIn.js";
|
|
9
|
+
import { generateIconTypes } from "./iconGeneration.js";
|
|
10
|
+
import { generateLayoutFiles, watchLayoutFiles } from "./layoutGeneration.js";
|
|
11
|
+
import { buildClientThenWorker } from "./workerBuild.js";
|
|
12
|
+
import { VIRTUAL_CAMOX_APP, syncDefinitions, syncDefinitionsToApi } from "./definitionsSync.js";
|
|
13
|
+
import { publishSeededContent } from "./publishSeededContent.js";
|
|
6
14
|
import { cleanupGeneratedRouteFiles } from "./routeGeneration.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
15
|
+
import { RESOLVED_VIRTUAL_DEV_HTML, createRuntimeRegistryPlugin, loadRuntimeDevModule, resolveRuntimeDevId } from "./runtimeDev.js";
|
|
16
|
+
import { projectIdSchema } from "@camox/api-contract/ids";
|
|
17
|
+
import { DEVELOPMENT_DRAFT } from "@camox/api-contract/drafts";
|
|
18
|
+
import { createHash } from "node:crypto";
|
|
19
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
9
20
|
import { dirname, join, resolve } from "node:path";
|
|
10
21
|
import { fileURLToPath } from "node:url";
|
|
11
22
|
import { createServer } from "vite-plus";
|
|
@@ -22,24 +33,136 @@ const VIRTUAL_PAGE_CLIENT = "virtual:camox/page-client";
|
|
|
22
33
|
const RESOLVED_VIRTUAL_PAGE_CLIENT_URL = "\0virtual:camox/page-client-url";
|
|
23
34
|
const VIRTUAL_STUDIO_CLIENT = "virtual:camox/studio-client";
|
|
24
35
|
const RESOLVED_VIRTUAL_STUDIO_CLIENT_URL = "\0virtual:camox/studio-client-url";
|
|
36
|
+
const RESOLVED_VIRTUAL_BLOCK_CHUNKS = "\0virtual:camox/block-chunks";
|
|
25
37
|
const PRODUCTION_API_URL = "https://api.camox.dev";
|
|
26
38
|
/** Authentication URL to use for Camox authentication (production Camox Dashboard) */
|
|
27
39
|
const DEFAULT_AUTHENTICATION_URL = "https://app.camox.dev";
|
|
40
|
+
/** What Vite injects into HTML in dev, which the Worker can't ask Vite for itself. */
|
|
41
|
+
async function getDevHtml(server) {
|
|
42
|
+
const html = await server.transformIndexHtml("/", "<html><head></head><body></body></html>");
|
|
43
|
+
return {
|
|
44
|
+
head: /<head[^>]*>([\s\S]*)<\/head>/i.exec(html)?.[1] ?? "",
|
|
45
|
+
body: /<body[^>]*>([\s\S]*)<\/body>/i.exec(html)?.[1] ?? ""
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** The `onLog` the app set for its client build, which Camox wraps rather than replaces. */
|
|
49
|
+
function findClientOnLog(config) {
|
|
50
|
+
const clientBuild = config.environments?.client?.build;
|
|
51
|
+
return clientBuild?.rolldownOptions?.onLog ?? clientBuild?.rollupOptions?.onLog ?? config.build?.rolldownOptions?.onLog ?? config.build?.rollupOptions?.onLog;
|
|
52
|
+
}
|
|
28
53
|
/**
|
|
29
54
|
* Drop a sidecar at `<root>/node_modules/.camox/runtime.json` so the `camox`
|
|
30
|
-
* CLI can pick up the same
|
|
55
|
+
* CLI can pick up the same Project ID / apiUrl / authenticationUrl the
|
|
31
56
|
* plugin actually used. The CLI treats the vite config as the source of
|
|
32
57
|
* truth for those values — there is no other reliable way to recover them
|
|
33
|
-
* from outside vite.
|
|
34
|
-
*
|
|
35
|
-
* so a stale build sidecar can't silently route writes to production.
|
|
58
|
+
* from outside vite. No draft is written here: the CLI always works in the
|
|
59
|
+
* developer's development draft (ADR 0010).
|
|
36
60
|
*/
|
|
37
61
|
function writeRuntimeSidecar(root, data) {
|
|
38
62
|
const dir = join(root, "node_modules", ".camox");
|
|
39
63
|
mkdirSync(dir, { recursive: true });
|
|
40
64
|
writeFileSync(join(dir, "runtime.json"), `${JSON.stringify(data, null, 2)}\n`);
|
|
41
65
|
}
|
|
66
|
+
const CAMOX_OPTIMIZED_DEPS = [
|
|
67
|
+
"react",
|
|
68
|
+
"react-dom",
|
|
69
|
+
"react-dom/client",
|
|
70
|
+
"react/jsx-runtime",
|
|
71
|
+
"react/jsx-dev-runtime",
|
|
72
|
+
"camox > @base-ui/react/accordion",
|
|
73
|
+
"camox > @base-ui/react/alert-dialog",
|
|
74
|
+
"camox > @base-ui/react/avatar",
|
|
75
|
+
"camox > @base-ui/react/button",
|
|
76
|
+
"camox > @base-ui/react/checkbox",
|
|
77
|
+
"camox > @base-ui/react/combobox",
|
|
78
|
+
"camox > @base-ui/react/dialog",
|
|
79
|
+
"camox > @base-ui/react/input",
|
|
80
|
+
"camox > @base-ui/react/menu",
|
|
81
|
+
"camox > @base-ui/react/merge-props",
|
|
82
|
+
"camox > @base-ui/react/popover",
|
|
83
|
+
"camox > @base-ui/react/select",
|
|
84
|
+
"camox > @base-ui/react/separator",
|
|
85
|
+
"camox > @base-ui/react/switch",
|
|
86
|
+
"camox > @base-ui/react/tabs",
|
|
87
|
+
"camox > @base-ui/react/toggle",
|
|
88
|
+
"camox > @base-ui/react/tooltip",
|
|
89
|
+
"camox > @base-ui/react/use-render",
|
|
90
|
+
"camox > @camox/ui > class-variance-authority",
|
|
91
|
+
"camox > @camox/ui > clsx",
|
|
92
|
+
"camox > @camox/ui > cmdk",
|
|
93
|
+
"camox > @camox/ui > lucide-react",
|
|
94
|
+
"camox > @camox/ui > @shadcn/react/message-scroller",
|
|
95
|
+
"camox > @camox/ui > sonner",
|
|
96
|
+
"camox > @camox/ui > tailwind-merge",
|
|
97
|
+
"camox > @dnd-kit/core",
|
|
98
|
+
"camox > @dnd-kit/modifiers",
|
|
99
|
+
"camox > @dnd-kit/sortable",
|
|
100
|
+
"camox > @dnd-kit/utilities",
|
|
101
|
+
"camox > @lexical/react/LexicalComposer",
|
|
102
|
+
"camox > @lexical/react/LexicalComposerContext",
|
|
103
|
+
"camox > @lexical/react/LexicalContentEditable",
|
|
104
|
+
"camox > @lexical/react/LexicalHistoryPlugin",
|
|
105
|
+
"camox > @lexical/react/LexicalLinkPlugin",
|
|
106
|
+
"camox > @lexical/react/LexicalOnChangePlugin",
|
|
107
|
+
"camox > @lexical/react/LexicalRichTextPlugin",
|
|
108
|
+
"camox > @lexical/link",
|
|
109
|
+
"camox > @lexical/utils",
|
|
110
|
+
"camox > @orpc/client",
|
|
111
|
+
"camox > @orpc/client/fetch",
|
|
112
|
+
"camox > @orpc/tanstack-query",
|
|
113
|
+
"camox > @shikijs/core",
|
|
114
|
+
"camox > @shikijs/engine-javascript",
|
|
115
|
+
"camox > @shikijs/langs/markdown",
|
|
116
|
+
"camox > @shikijs/themes/github-dark-high-contrast",
|
|
117
|
+
"camox > @shikijs/themes/github-light",
|
|
118
|
+
"camox > @sinclair/typebox",
|
|
119
|
+
"camox > @takumi-rs/image-response",
|
|
120
|
+
"camox > @tanstack/react-form",
|
|
121
|
+
"camox > @tanstack/react-query",
|
|
122
|
+
"camox > @tanstack/react-router",
|
|
123
|
+
"camox > @tanstack/react-virtual",
|
|
124
|
+
"camox > @unhead/react/client",
|
|
125
|
+
"camox > @unhead/react/server",
|
|
126
|
+
"camox > @xstate/store",
|
|
127
|
+
"camox > @xstate/store-react",
|
|
128
|
+
"camox > better-auth/client/plugins",
|
|
129
|
+
"camox > better-auth/react",
|
|
130
|
+
"camox > better-auth > @better-auth/core/env",
|
|
131
|
+
"camox > better-auth > @better-auth/core/error",
|
|
132
|
+
"camox > better-auth > @better-auth/core/utils/error-codes",
|
|
133
|
+
"camox > better-auth > @better-auth/core/utils/string",
|
|
134
|
+
"camox > better-auth > @better-fetch/fetch",
|
|
135
|
+
"camox > better-auth > defu",
|
|
136
|
+
"camox > better-auth > nanostores",
|
|
137
|
+
"camox > fractional-indexing",
|
|
138
|
+
"camox > lexical",
|
|
139
|
+
"camox > lucide-react",
|
|
140
|
+
"camox > marked",
|
|
141
|
+
"camox > @tanstack/react-query-devtools/production",
|
|
142
|
+
"camox > partysocket/react",
|
|
143
|
+
"camox > zod"
|
|
144
|
+
];
|
|
145
|
+
/**
|
|
146
|
+
* The Worker runs in workerd, so its dependencies are pre-bundled too. Discovering them one
|
|
147
|
+
* request at a time would reload the Worker for each, so start from the browser's list.
|
|
148
|
+
*/
|
|
149
|
+
const CAMOX_WORKER_OPTIMIZED_DEPS = [
|
|
150
|
+
...CAMOX_OPTIMIZED_DEPS,
|
|
151
|
+
"react-dom/server",
|
|
152
|
+
"react/compiler-runtime",
|
|
153
|
+
"camox > @unhead/react/server"
|
|
154
|
+
];
|
|
155
|
+
/**
|
|
156
|
+
* The Project ID a config names, refused on startup when it is missing or malformed, or when the
|
|
157
|
+
* config still names its project by its Project Slug.
|
|
158
|
+
*/
|
|
159
|
+
function projectIdOf(options) {
|
|
160
|
+
if ("projectSlug" in options) throw new Error("Camox: `projectSlug` was replaced by `projectId`. Replace it in your camox() config with the Project ID shown in the Camox dashboard, on your project's page.");
|
|
161
|
+
if (!projectIdSchema.safeParse(options.projectId).success) throw new Error(`Camox: ${JSON.stringify(options.projectId)} is not a Project ID. Copy your project's Project ID, a lowercase UUIDv7, from the Camox dashboard into your camox() config.`);
|
|
162
|
+
return options.projectId;
|
|
163
|
+
}
|
|
42
164
|
function camox(options) {
|
|
165
|
+
const projectUuid = projectIdOf(options);
|
|
43
166
|
const apiUrl = options._internal?.apiUrl ?? PRODUCTION_API_URL;
|
|
44
167
|
const authenticationUrl = options._internal?.authenticationUrl ?? DEFAULT_AUTHENTICATION_URL;
|
|
45
168
|
const enableTanstackDevtools = options._internal?.enableTanstackDevtools ?? false;
|
|
@@ -47,9 +170,12 @@ function camox(options) {
|
|
|
47
170
|
const runtimeBasePath = options._internal?.runtimeBasePath;
|
|
48
171
|
let isBuild = false;
|
|
49
172
|
let isRelease = false;
|
|
173
|
+
/** A release's build, without syncing to Live: what the upgrade job checks a project with. */
|
|
174
|
+
let isDryRun = false;
|
|
50
175
|
let resolvedConfig;
|
|
51
|
-
let environmentName;
|
|
52
176
|
let localAuth = null;
|
|
177
|
+
let blockChunks = {};
|
|
178
|
+
let devServer;
|
|
53
179
|
return {
|
|
54
180
|
name: "camox",
|
|
55
181
|
enforce: "pre",
|
|
@@ -59,63 +185,72 @@ function camox(options) {
|
|
|
59
185
|
if (id === VIRTUAL_STUDIO_CSS) return RESOLVED_VIRTUAL_STUDIO_CSS;
|
|
60
186
|
if (id === VIRTUAL_OVERLAY_CSS) return RESOLVED_VIRTUAL_OVERLAY_CSS;
|
|
61
187
|
},
|
|
62
|
-
load(id) {
|
|
188
|
+
async load(id, loadOptions) {
|
|
63
189
|
const stylesDir = resolve(sdkRoot, !isBuild && isSdkSource ? ".dev" : "dist");
|
|
64
190
|
if (id === RESOLVED_VIRTUAL_STUDIO_CSS) {
|
|
65
191
|
const cssPath = resolve(stylesDir, "studio.css");
|
|
66
192
|
if (isBuild) {
|
|
67
193
|
const css = readFileSync(cssPath, "utf-8");
|
|
68
|
-
const
|
|
69
|
-
|
|
194
|
+
const fileName = `assets/camox-studio-${createHash("sha256").update(css).digest("hex").slice(0, 8)}.css`;
|
|
195
|
+
this.emitFile({
|
|
196
|
+
type: "asset",
|
|
197
|
+
fileName,
|
|
198
|
+
source: css
|
|
199
|
+
});
|
|
200
|
+
return `export default ${JSON.stringify(`/${fileName}`)};`;
|
|
70
201
|
}
|
|
71
202
|
const cssUrl = `/@fs/${cssPath.replaceAll("\\", "/").replace(/^\/+/, "")}`;
|
|
72
203
|
return `export default ${JSON.stringify(cssUrl)};`;
|
|
73
204
|
}
|
|
74
205
|
if (id === RESOLVED_VIRTUAL_OVERLAY_CSS) {
|
|
75
|
-
const
|
|
206
|
+
const cssPath = resolve(stylesDir, "studio-overlays.css");
|
|
207
|
+
const css = readFileSync(cssPath, "utf-8");
|
|
76
208
|
return `export default ${JSON.stringify(css)};`;
|
|
77
209
|
}
|
|
78
210
|
if (id === RESOLVED_VIRTUAL_PAGE_CLIENT_URL && isBuild) return "export default \"/_chunks/camox-page-client.mjs\";";
|
|
79
211
|
if (id === RESOLVED_VIRTUAL_STUDIO_CLIENT_URL && isBuild) return "export default \"/_chunks/camox-studio-client.mjs\";";
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
const noExternals = Array.isArray(nitro.options.noExternals) ? nitro.options.noExternals : [];
|
|
85
|
-
nitro.options.noExternals = [
|
|
86
|
-
...noExternals,
|
|
87
|
-
"camox",
|
|
88
|
-
"tslib"
|
|
89
|
-
];
|
|
212
|
+
if (id === RESOLVED_VIRTUAL_BLOCK_CHUNKS && isBuild) return `export default ${JSON.stringify(blockChunks)};`;
|
|
213
|
+
if (id === "\0virtual:camox/dev-html") {
|
|
214
|
+
if (!devServer) return "export default null;";
|
|
215
|
+
return `export default ${JSON.stringify(await getDevHtml(devServer))};`;
|
|
90
216
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (!existsSync(serverAssets)) return;
|
|
95
|
-
cpSync(serverAssets, join(options.output.publicDir, "assets"), { recursive: true });
|
|
217
|
+
return loadRuntimeDevModule(id, {
|
|
218
|
+
runtimeBasePath,
|
|
219
|
+
ssr: loadOptions?.ssr
|
|
96
220
|
});
|
|
97
|
-
}
|
|
98
|
-
|
|
221
|
+
},
|
|
222
|
+
transform(code, id) {
|
|
223
|
+
return transformArtifactRuntime(code, id);
|
|
224
|
+
},
|
|
225
|
+
generateBundle(_outputOptions, bundle) {
|
|
226
|
+
if (this.environment.name !== "client") return;
|
|
227
|
+
blockChunks = collectBlockChunks(bundle, resolvedConfig.root);
|
|
228
|
+
},
|
|
229
|
+
async config(_config, env) {
|
|
230
|
+
const iconIds = await generateIconTypes(resolve(_config.root ?? process.cwd()), options.icons);
|
|
99
231
|
isBuild = env.command === "build";
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
232
|
+
const release = process.env.CAMOX_INTERNAL_RELEASE;
|
|
233
|
+
isRelease = isBuild && (release === "1" || release === "dry-run");
|
|
234
|
+
isDryRun = isRelease && release === "dry-run";
|
|
235
|
+
if (!isRelease) {
|
|
103
236
|
localAuth = readAuthTokenForUrl(authenticationUrl);
|
|
104
237
|
if (isBuild && !localAuth) throw new Error("Camox: not authenticated. Run `npx camox login` before building the site.");
|
|
105
|
-
environmentName = localAuth ? `dev:${localAuth.email}` : "dev:unauthenticated";
|
|
106
238
|
}
|
|
107
239
|
return {
|
|
108
240
|
build: { emitAssets: true },
|
|
241
|
+
..._config.builder?.buildApp ? {} : { builder: { buildApp: buildClientThenWorker } },
|
|
109
242
|
define: {
|
|
243
|
+
__CAMOX_ICON_IDS__: JSON.stringify(iconIds),
|
|
110
244
|
__CAMOX_TELEMETRY_DISABLED__: JSON.stringify(!!options.disableTelemetry),
|
|
111
245
|
__ENABLE_TANSTACK_DEVTOOLS__: JSON.stringify(enableTanstackDevtools),
|
|
112
|
-
|
|
113
|
-
|
|
246
|
+
__CAMOX_ENABLE_EXPERIMENTAL_FEATURES__: JSON.stringify(options._internal?.enableExperimentalFeatures ?? false),
|
|
247
|
+
__CAMOX_DEVELOPMENT_DRAFT__: JSON.stringify(!isRelease),
|
|
114
248
|
__CAMOX_API_URL__: JSON.stringify(apiUrl),
|
|
115
249
|
__CAMOX_AUTHENTICATION_URL__: JSON.stringify(authenticationUrl),
|
|
116
|
-
|
|
250
|
+
__CAMOX_PROJECT_ID__: JSON.stringify(projectUuid)
|
|
117
251
|
},
|
|
118
252
|
environments: { client: { build: { rollupOptions: {
|
|
253
|
+
onLog: withoutExpectedCamoxLogs(findClientOnLog(_config)),
|
|
119
254
|
input: {
|
|
120
255
|
"camox-page-client": VIRTUAL_PAGE_CLIENT,
|
|
121
256
|
"camox-studio-client": VIRTUAL_STUDIO_CLIENT
|
|
@@ -130,133 +265,112 @@ function camox(options) {
|
|
|
130
265
|
find: /^tslib$/,
|
|
131
266
|
replacement: "tslib/tslib.es6.mjs"
|
|
132
267
|
}] },
|
|
133
|
-
optimizeDeps: {
|
|
134
|
-
|
|
135
|
-
"
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
"camox
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
"camox > @base-ui/react/switch",
|
|
150
|
-
"camox > @base-ui/react/tabs",
|
|
151
|
-
"camox > @base-ui/react/toggle",
|
|
152
|
-
"camox > @base-ui/react/tooltip",
|
|
153
|
-
"camox > @base-ui/react/use-render",
|
|
154
|
-
"camox > @camox/api-contract",
|
|
155
|
-
"camox > @camox/api-contract/query-keys",
|
|
156
|
-
"camox > @camox/ui > cmdk",
|
|
157
|
-
"camox > @camox/ui > lucide-react",
|
|
158
|
-
"camox > @camox/ui > sonner",
|
|
159
|
-
"camox > @dnd-kit/core",
|
|
160
|
-
"camox > @dnd-kit/modifiers",
|
|
161
|
-
"camox > @dnd-kit/sortable",
|
|
162
|
-
"camox > @dnd-kit/utilities",
|
|
163
|
-
"camox > @lexical/react/LexicalComposer",
|
|
164
|
-
"camox > @lexical/react/LexicalComposerContext",
|
|
165
|
-
"camox > @lexical/react/LexicalContentEditable",
|
|
166
|
-
"camox > @lexical/react/LexicalHistoryPlugin",
|
|
167
|
-
"camox > @lexical/react/LexicalLinkPlugin",
|
|
168
|
-
"camox > @lexical/react/LexicalOnChangePlugin",
|
|
169
|
-
"camox > @lexical/react/LexicalRichTextPlugin",
|
|
170
|
-
"camox > @lexical/link",
|
|
171
|
-
"camox > @orpc/client",
|
|
172
|
-
"camox > @orpc/client/fetch",
|
|
173
|
-
"camox > @orpc/tanstack-query",
|
|
174
|
-
"camox > @shikijs/core",
|
|
175
|
-
"camox > @shikijs/engine-javascript",
|
|
176
|
-
"camox > @shikijs/langs/markdown",
|
|
177
|
-
"camox > @shikijs/themes/github-dark-high-contrast",
|
|
178
|
-
"camox > @shikijs/themes/github-light",
|
|
179
|
-
"camox > @sinclair/typebox",
|
|
180
|
-
"camox > @takumi-rs/image-response",
|
|
181
|
-
"camox > @tanstack/react-form",
|
|
182
|
-
"camox > @xstate/store-react",
|
|
183
|
-
"camox > better-auth > @better-auth/core/env",
|
|
184
|
-
"camox > better-auth > @better-auth/core/error",
|
|
185
|
-
"camox > better-auth > @better-auth/core/utils/error-codes",
|
|
186
|
-
"camox > better-auth > @better-auth/core/utils/string",
|
|
187
|
-
"camox > better-auth > @better-fetch/fetch",
|
|
188
|
-
"camox > better-auth > defu",
|
|
189
|
-
"camox > better-auth > nanostores",
|
|
190
|
-
"camox > fractional-indexing",
|
|
191
|
-
"camox > lexical",
|
|
192
|
-
"camox > lucide-react",
|
|
193
|
-
"camox > @tanstack/react-query-devtools/production",
|
|
194
|
-
"camox > partysocket/react"
|
|
195
|
-
] }
|
|
268
|
+
optimizeDeps: {
|
|
269
|
+
include: CAMOX_OPTIMIZED_DEPS,
|
|
270
|
+
exclude: ["@camox/api-contract", "@camox/api-contract/query-keys"]
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
},
|
|
274
|
+
configEnvironment(name, config) {
|
|
275
|
+
if (name === "client") return;
|
|
276
|
+
const build = config.build;
|
|
277
|
+
return {
|
|
278
|
+
optimizeDeps: {
|
|
279
|
+
entries: ["src/**/*.{ts,tsx}"],
|
|
280
|
+
include: CAMOX_WORKER_OPTIMIZED_DEPS,
|
|
281
|
+
exclude: ["camox"]
|
|
282
|
+
},
|
|
283
|
+
build: { rollupOptions: { onLog: withoutExpectedCamoxLogs(build?.rolldownOptions?.onLog ?? build?.rollupOptions?.onLog) } }
|
|
196
284
|
};
|
|
197
285
|
},
|
|
198
286
|
configResolved(config) {
|
|
199
287
|
resolvedConfig = config;
|
|
288
|
+
if (!config.plugins.some((plugin) => plugin.name.startsWith("vite-plugin-cloudflare"))) throw new Error("Camox: Camox apps run on Cloudflare Workers. Add `cloudflare()` from `@cloudflare/vite-plugin` to your Vite plugins, and point `main` in `wrangler.jsonc` at `camox/worker`.");
|
|
200
289
|
const routesDir = resolve(config.root, "src/routes");
|
|
201
290
|
writeRuntimeSidecar(config.root, {
|
|
202
|
-
|
|
291
|
+
projectId: projectUuid,
|
|
203
292
|
apiUrl,
|
|
204
293
|
authenticationUrl,
|
|
205
294
|
disableTelemetry: !!options.disableTelemetry
|
|
206
295
|
});
|
|
207
296
|
if (!disableCodeGen) {
|
|
208
|
-
|
|
297
|
+
generateLayoutFiles(config.root);
|
|
209
298
|
cleanupGeneratedRouteFiles(routesDir);
|
|
210
299
|
}
|
|
211
300
|
if (disableCodeGen) config.logger.warn("⚠️ Code generation is disabled (_internal.disableCodeGen). This option is only meant for momentary debugging — do not deploy or commit your app with it enabled.", { timestamp: true });
|
|
212
301
|
const mode = config.command === "serve" ? "Running" : "Building";
|
|
213
|
-
|
|
214
|
-
|
|
302
|
+
let target = "your development draft";
|
|
303
|
+
if (isDryRun) target = "Live, dry run";
|
|
304
|
+
else if (isRelease) target = "Live";
|
|
305
|
+
else if (!localAuth) target = "authentication required";
|
|
306
|
+
config.logger.info(`${mode} Camox app (${target})`, { timestamp: true });
|
|
215
307
|
},
|
|
216
308
|
configureServer(server) {
|
|
309
|
+
devServer = server;
|
|
217
310
|
const routesDir = resolve(server.config.root, "src/routes");
|
|
218
311
|
installDevAuthenticationMiddleware(server, {
|
|
219
312
|
apiUrl,
|
|
220
313
|
authenticationUrl,
|
|
221
314
|
isAuthenticated: localAuth !== null
|
|
222
315
|
});
|
|
316
|
+
if (localAuth?.email) installDevSignInLink(server, {
|
|
317
|
+
projectUuid,
|
|
318
|
+
apiUrl,
|
|
319
|
+
authToken: localAuth.token,
|
|
320
|
+
open: options._internal?.devSignIn?.open,
|
|
321
|
+
openOnceFile: options._internal?.devSignIn?.openOnceFile
|
|
322
|
+
});
|
|
223
323
|
if (!disableCodeGen) {
|
|
224
|
-
|
|
324
|
+
watchLayoutFiles(server, server.config.root);
|
|
225
325
|
cleanupGeneratedRouteFiles(routesDir);
|
|
226
326
|
watchNewBlockFiles(server);
|
|
227
327
|
}
|
|
228
328
|
server.httpServer?.once("listening", () => {
|
|
229
329
|
if (!localAuth) return;
|
|
330
|
+
const authToken = localAuth.token;
|
|
230
331
|
syncDefinitions(server, {
|
|
231
|
-
|
|
332
|
+
projectUuid,
|
|
232
333
|
apiUrl,
|
|
233
|
-
environmentName,
|
|
234
334
|
autoCreate: true,
|
|
235
|
-
authToken
|
|
335
|
+
authToken,
|
|
336
|
+
releaseToEmptyLive: options._internal?.seedLiveDeployToken
|
|
337
|
+
}).then(async ({ synced, releasedToLive }) => {
|
|
338
|
+
if (!synced) return;
|
|
339
|
+
const context = {
|
|
340
|
+
client: createServerApiClient(apiUrl, authToken, DEVELOPMENT_DRAFT),
|
|
341
|
+
projectUuid,
|
|
342
|
+
logger: server.config.logger
|
|
343
|
+
};
|
|
344
|
+
const afterSync = options._internal?.afterSync;
|
|
345
|
+
if (afterSync) try {
|
|
346
|
+
await afterSync(context);
|
|
347
|
+
} catch (error) {
|
|
348
|
+
context.logger.warn(`[camox] afterSync failed: ${String(error)}`, { timestamp: true });
|
|
349
|
+
}
|
|
350
|
+
if (releasedToLive) await publishSeededContent(context);
|
|
236
351
|
});
|
|
237
352
|
});
|
|
238
353
|
},
|
|
239
354
|
async closeBundle() {
|
|
240
|
-
if (!isRelease) return;
|
|
355
|
+
if (!isRelease || isDryRun) return;
|
|
241
356
|
const deployToken = process.env.CAMOX_DEPLOY_TOKEN;
|
|
242
357
|
if (!deployToken) throw new Error("Camox: CAMOX_DEPLOY_TOKEN is required to release to production.");
|
|
243
|
-
const camoxAppPath = "./src/camox/app.ts";
|
|
244
358
|
const tempServer = await createServer({
|
|
245
359
|
configFile: false,
|
|
246
360
|
root: resolvedConfig.root,
|
|
247
361
|
cacheDir: resolve(resolvedConfig.root, "node_modules", ".vite-camox-temp"),
|
|
248
362
|
resolve: resolvedConfig.resolve,
|
|
363
|
+
define: resolvedConfig.define,
|
|
364
|
+
plugins: [createRuntimeRegistryPlugin({ runtimeBasePath })],
|
|
249
365
|
server: { middlewareMode: true },
|
|
250
366
|
logLevel: "silent"
|
|
251
367
|
});
|
|
252
368
|
try {
|
|
253
|
-
const camoxModule = await tempServer.ssrLoadModule(
|
|
254
|
-
if (!camoxModule.camoxApp) throw new Error(`No camoxApp export found in ${camoxAppPath}`);
|
|
369
|
+
const camoxModule = await tempServer.ssrLoadModule(VIRTUAL_CAMOX_APP);
|
|
255
370
|
await syncDefinitionsToApi({
|
|
256
|
-
|
|
257
|
-
|
|
371
|
+
definitionSet: await camoxModule.camoxApp.getDefinitionSet(),
|
|
372
|
+
projectUuid,
|
|
258
373
|
apiUrl,
|
|
259
|
-
environmentName,
|
|
260
374
|
autoCreate: false,
|
|
261
375
|
deployToken,
|
|
262
376
|
logger: resolvedConfig.logger
|
|
@@ -269,4 +383,4 @@ function camox(options) {
|
|
|
269
383
|
}
|
|
270
384
|
|
|
271
385
|
//#endregion
|
|
272
|
-
export { camox };
|
|
386
|
+
export { CAMOX_OPTIMIZED_DEPS, CAMOX_WORKER_OPTIMIZED_DEPS, camox };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, rmSync } from "node:fs";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
|
|
4
|
+
//#region src/features/vite/workerBuild.ts
|
|
5
|
+
/**
|
|
6
|
+
* Builds the client first: the Worker's build reads where each block's chunk ended up.
|
|
7
|
+
* This replaces the Cloudflare plugin's order, which builds the Worker first.
|
|
8
|
+
*/
|
|
9
|
+
async function buildClientThenWorker(builder) {
|
|
10
|
+
const { client, ...servers } = builder.environments;
|
|
11
|
+
await builder.build(client);
|
|
12
|
+
const clientDir = resolve(builder.config.root, client.config.build.outDir);
|
|
13
|
+
for (const server of Object.values(servers)) {
|
|
14
|
+
await builder.build(server);
|
|
15
|
+
moveImportedAssets(resolve(builder.config.root, server.config.build.outDir), clientDir);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Moves the files the Worker imports as URLs, such as stylesheets, to the client's
|
|
20
|
+
* static assets, which serve them. The Cloudflare plugin's own build does the same.
|
|
21
|
+
*/
|
|
22
|
+
function moveImportedAssets(serverDir, clientDir) {
|
|
23
|
+
const manifestPath = join(serverDir, ".vite", "manifest.json");
|
|
24
|
+
if (!existsSync(manifestPath)) return;
|
|
25
|
+
const manifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
|
|
26
|
+
for (const asset of new Set(Object.values(manifest).flatMap((chunk) => chunk.assets ?? []))) {
|
|
27
|
+
const from = join(serverDir, asset);
|
|
28
|
+
const to = join(clientDir, asset);
|
|
29
|
+
if (!existsSync(from)) continue;
|
|
30
|
+
if (existsSync(to)) rmSync(from);
|
|
31
|
+
else {
|
|
32
|
+
mkdirSync(dirname(to), { recursive: true });
|
|
33
|
+
renameSync(from, to);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
export { buildClientThenWorker };
|