@abide/abide 0.48.0 → 0.50.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/AGENTS.md +85 -59
- package/CHANGELOG.md +216 -0
- package/README.md +21 -10
- package/package.json +15 -4
- package/src/abideLsp.ts +5 -6
- package/src/abideResolverPlugin.ts +197 -169
- package/src/build.ts +79 -56
- package/src/buildCli.ts +3 -5
- package/src/buildDisconnected.ts +2 -5
- package/src/bundleApp.ts +2 -3
- package/src/checkAbide.ts +12 -2
- package/src/compile.ts +2 -4
- package/src/devEntry.ts +113 -28
- package/src/discoveryEntry.ts +3 -2
- package/src/lib/bundle/disconnected.abide +69 -73
- package/src/lib/bundle/infoPlist.ts +13 -7
- package/src/lib/bundle/installDownloads.ts +13 -3
- package/src/lib/bundle/installMacMenu.ts +13 -3
- package/src/lib/bundle/spawnEmbeddedServer.ts +13 -4
- package/src/lib/bundle/waitForServer.ts +6 -1
- package/src/lib/cli/parseArgvForRpc.ts +36 -9
- package/src/lib/cli/tokenizeArgvFlags.ts +4 -2
- package/src/lib/mcp/createMcpResourceServer.ts +13 -2
- package/src/lib/mcp/mcpTools.ts +15 -6
- package/src/lib/mcp/toolResultFromResponse.ts +40 -12
- package/src/lib/server/error.ts +6 -6
- package/src/lib/server/json.ts +17 -3
- package/src/lib/server/rpc/defineRpc.ts +58 -24
- package/src/lib/server/rpc/parseArgs.ts +113 -14
- package/src/lib/server/rpc/resolveRpcJsonSchema.ts +28 -0
- package/src/lib/server/rpc/runWithRpcTimeout.ts +12 -1
- package/src/lib/server/rpc/types/RpcHelper.ts +75 -105
- package/src/lib/server/rpc/types/RpcRegistryEntry.ts +24 -9
- package/src/lib/server/rpc/validationError.ts +1 -1
- package/src/lib/server/runtime/DEV_RELOAD_CLIENT_SCRIPT.ts +0 -15
- package/src/lib/server/runtime/buildCacheSnapshot.ts +10 -9
- package/src/lib/server/runtime/buildInspectorSurface.ts +6 -4
- package/src/lib/server/runtime/buildOpenApiSpec.ts +55 -11
- package/src/lib/server/runtime/buildPreloadManifest.ts +12 -10
- package/src/lib/server/runtime/createAppAssetServer.ts +18 -15
- package/src/lib/server/runtime/createAppRouteResolver.ts +145 -0
- package/src/lib/server/runtime/createPlumbingRouter.ts +212 -0
- package/src/lib/server/runtime/createRouteDispatcher.ts +4 -10
- package/src/lib/server/runtime/createServer.ts +120 -324
- package/src/lib/server/runtime/createUiPageRenderer.ts +137 -26
- package/src/lib/server/runtime/devClientFingerprint.ts +19 -34
- package/src/lib/server/runtime/finalizeResponse.ts +11 -1
- package/src/lib/server/runtime/installAmbientScopeStore.ts +30 -9
- package/src/lib/server/runtime/logExposedSurfaces.ts +8 -7
- package/src/lib/server/runtime/pathStore.ts +15 -0
- package/src/lib/server/runtime/registryManifests.ts +1 -1
- package/src/lib/server/runtime/renderCellBarrierStore.ts +15 -0
- package/src/lib/server/runtime/runWithRequestScope.ts +3 -0
- package/src/lib/server/runtime/serializeCacheSnapshot.ts +6 -4
- package/src/lib/server/runtime/snapshotEntryFromCache.ts +24 -16
- package/src/lib/server/runtime/streamCacheResolutions.ts +14 -7
- package/src/lib/server/runtime/streamFromIterator.ts +30 -2
- package/src/lib/server/runtime/textResponse.ts +23 -0
- package/src/lib/server/runtime/types/DevReloadStamp.ts +6 -10
- package/src/lib/server/runtime/types/InspectorCacheEntry.ts +1 -1
- package/src/lib/server/runtime/types/RequestStore.ts +27 -0
- package/src/lib/server/runtime/warnUnguardedMcp.ts +15 -5
- package/src/lib/server/sockets/createSocketDispatcher.ts +9 -11
- package/src/lib/server/sockets/defineSocket.ts +5 -4
- package/src/lib/server/sse.ts +5 -1
- package/src/lib/shared/ASYNC_CELL.ts +5 -0
- package/src/lib/shared/DEV_REBUILD_PATH.ts +6 -0
- package/src/lib/shared/HTTP_METHODS.ts +6 -0
- package/src/lib/shared/HttpError.ts +1 -5
- package/src/lib/shared/MCP_PATH.ts +6 -0
- package/src/lib/shared/PROXIED_SERVER_SUBDIRS.ts +15 -0
- package/src/lib/shared/REF_JSON_TAGS.ts +13 -1
- package/src/lib/shared/RPC_SHIM_GLOBALS.ts +9 -0
- package/src/lib/shared/activeCacheStore.ts +1 -0
- package/src/lib/shared/activePage.ts +1 -0
- package/src/lib/shared/buildArtifact.ts +20 -0
- package/src/lib/shared/buildRpcRequest.ts +6 -2
- package/src/lib/shared/buildSocketOverChannel.ts +4 -3
- package/src/lib/shared/bundleGraphFromMetafile.ts +68 -0
- package/src/lib/shared/cache.ts +156 -131
- package/src/lib/shared/canonicalJson.ts +24 -1
- package/src/lib/shared/changeAffectsClient.ts +12 -7
- package/src/lib/shared/createCacheStore.ts +31 -8
- package/src/lib/shared/createChannelLog.ts +24 -0
- package/src/lib/shared/createLifecycleChannel.ts +7 -1
- package/src/lib/shared/createReachable.ts +47 -78
- package/src/lib/shared/createRemoteFunction.ts +52 -30
- package/src/lib/shared/createRpcServerProgram.ts +820 -0
- package/src/lib/shared/decodeRefJson.ts +4 -4
- package/src/lib/shared/decodeResponse.ts +2 -2
- package/src/lib/shared/decodeWireBody.ts +35 -0
- package/src/lib/shared/detectRpcMethod.ts +8 -1
- package/src/lib/shared/done.ts +8 -2
- package/src/lib/shared/encodeRefJson.ts +4 -4
- package/src/lib/shared/encodeWireBody.ts +18 -0
- package/src/lib/shared/exitOnBuildFailure.ts +4 -3
- package/src/lib/{server/rpc → shared}/fieldErrorsFromIssues.ts +5 -1
- package/src/lib/shared/generateDeclarations.ts +72 -0
- package/src/lib/shared/hasSeedableRequest.ts +25 -0
- package/src/lib/shared/hydrationWindow.ts +53 -0
- package/src/lib/shared/isAsyncCell.ts +11 -0
- package/src/lib/shared/isAsyncIterable.ts +8 -0
- package/src/lib/shared/isSubscribable.ts +3 -3
- package/src/lib/shared/isThenable.ts +9 -0
- package/src/lib/shared/jsonSchemaForType.ts +258 -0
- package/src/lib/shared/lenientDecode.ts +15 -0
- package/src/lib/shared/loadProjectTsConfig.ts +28 -0
- package/src/lib/shared/markFrameworkSourcesIgnored.ts +1 -1
- package/src/lib/shared/matchRoute.ts +4 -14
- package/src/lib/shared/parseEnv.ts +17 -6
- package/src/lib/shared/peek.ts +14 -0
- package/src/lib/shared/pending.ts +9 -6
- package/src/lib/shared/pendingAsyncCellsSlot.ts +13 -0
- package/src/lib/shared/prepareRpcModule.ts +91 -93
- package/src/lib/shared/prepareSocketModule.ts +3 -2
- package/src/lib/shared/probeRegistries.ts +5 -18
- package/src/lib/shared/reachable.ts +7 -10
- package/src/lib/shared/refresh.ts +12 -2
- package/src/lib/shared/refreshing.ts +8 -2
- package/src/lib/shared/resolvedCellsSlot.ts +13 -0
- package/src/lib/shared/reviveWireField.ts +49 -0
- package/src/lib/shared/reviveWireOutput.ts +36 -0
- package/src/lib/shared/rpcServerForRoot.ts +25 -0
- package/src/lib/shared/scanPages.ts +25 -0
- package/src/lib/shared/serializeEnv.ts +18 -6
- package/src/lib/shared/snapshotShippable.ts +8 -7
- package/src/lib/shared/snippet.ts +11 -6
- package/src/lib/shared/streamedCellsSlot.ts +14 -0
- package/src/lib/shared/subscribableFromResponse.ts +4 -4
- package/src/lib/shared/subscribableProbes.ts +1 -1
- package/src/lib/shared/tailProbeSlot.ts +1 -1
- package/src/lib/shared/types/AsyncComputed.ts +20 -0
- package/src/lib/shared/types/AsyncState.ts +13 -0
- package/src/lib/shared/types/CacheEntry.ts +7 -7
- package/src/lib/shared/types/CacheOptions.ts +23 -37
- package/src/lib/shared/types/CachePolicy.ts +25 -0
- package/src/lib/shared/types/CacheSnapshotEntry.ts +6 -5
- package/src/lib/shared/types/ErrorJsonSchemas.ts +8 -0
- package/src/lib/shared/types/HttpMethod.ts +3 -1
- package/src/lib/shared/types/InputCoercion.ts +17 -0
- package/src/lib/shared/types/{Subscribable.ts → NamedAsyncIterable.ts} +1 -1
- package/src/lib/shared/types/OutputWirePlan.ts +17 -0
- package/src/lib/shared/types/PagesScan.ts +7 -0
- package/src/lib/shared/types/PendingAsyncCells.ts +10 -0
- package/src/lib/shared/types/RawRemoteFunction.ts +6 -0
- package/src/lib/shared/types/RemoteCallable.ts +8 -7
- package/src/lib/shared/types/RemoteFunction.ts +16 -15
- package/src/lib/shared/types/ResolvedCells.ts +11 -0
- package/src/lib/shared/types/ReturnBody.ts +15 -0
- package/src/lib/shared/types/RpcBuildStamps.ts +23 -0
- package/src/lib/shared/types/RpcErrorGuard.ts +3 -8
- package/src/lib/shared/types/Socket.ts +4 -4
- package/src/lib/shared/types/SsrPayload.ts +5 -1
- package/src/lib/shared/types/StreamPolicy.ts +11 -0
- package/src/lib/shared/types/StreamedCells.ts +19 -0
- package/src/lib/shared/types/StreamedResolution.ts +24 -6
- package/src/lib/shared/types/TailHooks.ts +1 -1
- package/src/lib/shared/types/WireKind.ts +11 -0
- package/src/lib/shared/url.ts +5 -0
- package/src/lib/shared/validationHttpError.ts +33 -0
- package/src/lib/shared/warmSeedKey.ts +16 -0
- package/src/lib/shared/wireJsonReplacer.ts +30 -0
- package/src/lib/shared/writeRpcDts.ts +11 -1
- package/src/lib/shared/writeTestSocketsDts.ts +1 -1
- package/src/lib/test/createTestApp.ts +19 -1
- package/src/lib/ui/README.md +1 -1
- package/src/lib/ui/activePendingCells.ts +14 -0
- package/src/lib/ui/compile/BLOCK_KEYWORDS.ts +21 -0
- package/src/lib/ui/compile/SSR_ESCAPE.ts +4 -1
- package/src/lib/ui/compile/UI_RUNTIME_IMPORTS.ts +35 -7
- package/src/lib/ui/compile/abideUiPlugin.ts +19 -2
- package/src/lib/ui/compile/analyzeComponent.ts +89 -6
- package/src/lib/ui/compile/assignmentTargetNames.ts +54 -0
- package/src/lib/ui/compile/asyncInterpolationFields.ts +152 -0
- package/src/lib/ui/compile/asyncValuePositionError.ts +21 -0
- package/src/lib/ui/compile/asyncValuePositionInterpolations.ts +64 -0
- package/src/lib/ui/compile/attrLiftPosition.ts +18 -0
- package/src/lib/ui/compile/bindListenEvent.ts +5 -6
- package/src/lib/ui/compile/cachedSourceFile.ts +40 -0
- package/src/lib/ui/compile/catchBinding.ts +7 -5
- package/src/lib/ui/compile/classifyInterpolationType.ts +46 -0
- package/src/lib/ui/compile/collectAbideDiagnostics.ts +96 -0
- package/src/lib/ui/compile/compileComponent.ts +19 -3
- package/src/lib/ui/compile/compileModule.ts +27 -58
- package/src/lib/ui/compile/compileSSR.ts +52 -13
- package/src/lib/ui/compile/compileShadow.ts +265 -42
- package/src/lib/ui/compile/composeProps.ts +15 -4
- package/src/lib/ui/compile/createShadowLanguageService.ts +116 -68
- package/src/lib/ui/compile/createShadowProgram.ts +35 -6
- package/src/lib/ui/compile/declaredNames.ts +36 -0
- package/src/lib/ui/compile/desugarSignals.ts +419 -37
- package/src/lib/ui/compile/expressionIsPrefixEvaluable.ts +19 -0
- package/src/lib/ui/compile/generateBuild.ts +74 -17
- package/src/lib/ui/compile/generateSSR.ts +286 -75
- package/src/lib/ui/compile/hoistableAwaits.ts +193 -0
- package/src/lib/ui/compile/hoistableChildRenders.ts +112 -0
- package/src/lib/ui/compile/interpolatedTemplateLiteral.ts +3 -1
- package/src/lib/ui/compile/interpolationClassifierForRoot.ts +37 -0
- package/src/lib/ui/compile/isSpuriousAsyncReadDiagnostic.ts +174 -0
- package/src/lib/ui/compile/isWhitespaceText.ts +10 -2
- package/src/lib/ui/compile/liftAsyncSubExpressions.ts +166 -0
- package/src/lib/ui/compile/lowerAsyncInterpolations.ts +92 -0
- package/src/lib/ui/compile/lowerContext.ts +10 -0
- package/src/lib/ui/compile/lowerDocAccess.ts +51 -10
- package/src/lib/ui/compile/lowerScript.ts +40 -4
- package/src/lib/ui/compile/nodeAtShadowOffset.ts +28 -0
- package/src/lib/ui/compile/parseTemplate.ts +18 -1090
- package/src/lib/ui/compile/parseTemplateRecovering.ts +1385 -0
- package/src/lib/ui/compile/referencedIdentifiers.ts +35 -0
- package/src/lib/ui/compile/renameSignalRefs.ts +26 -40
- package/src/lib/ui/compile/resolveReactiveExport.ts +4 -7
- package/src/lib/ui/compile/scopeCss.ts +27 -4
- package/src/lib/ui/compile/seedTypeClassifierForRoot.ts +65 -0
- package/src/lib/ui/compile/shadowInterpolationClassifier.ts +47 -0
- package/src/lib/ui/compile/sourceFileOptionsSignature.ts +20 -0
- package/src/lib/ui/compile/structuralHeadTokens.ts +107 -0
- package/src/lib/ui/compile/templateSemanticTokens.ts +21 -0
- package/src/lib/ui/compile/templateStartOffset.ts +15 -0
- package/src/lib/ui/compile/tryPlan.ts +4 -3
- package/src/lib/ui/compile/types/AnalyzedComponent.ts +4 -0
- package/src/lib/ui/compile/types/AsyncInterpolationField.ts +19 -0
- package/src/lib/ui/compile/types/InterpolationClassifier.ts +12 -0
- package/src/lib/ui/compile/types/InterpolationKind.ts +7 -0
- package/src/lib/ui/compile/types/ParseDiagnostic.ts +8 -0
- package/src/lib/ui/compile/types/SeedTypeClassifier.ts +15 -0
- package/src/lib/ui/compile/types/TemplateNode.ts +36 -4
- package/src/lib/ui/compile/types/ValuePositionInterpolation.ts +13 -0
- package/src/lib/ui/compile/writtenTemplateNames.ts +84 -0
- package/src/lib/ui/computed.ts +28 -1
- package/src/lib/ui/createScope.ts +35 -68
- package/src/lib/ui/dom/anchoredBranch.ts +142 -0
- package/src/lib/ui/dom/appendText.ts +8 -3
- package/src/lib/ui/dom/awaitBlock.ts +62 -75
- package/src/lib/ui/dom/bindProp.ts +22 -0
- package/src/lib/ui/dom/bindableProp.ts +47 -0
- package/src/lib/ui/dom/cellPending.ts +24 -0
- package/src/lib/ui/dom/discardBoundary.ts +24 -6
- package/src/lib/ui/dom/disposeRange.ts +2 -1
- package/src/lib/ui/dom/each.ts +41 -12
- package/src/lib/ui/dom/eachAsync.ts +39 -3
- package/src/lib/ui/dom/fillBefore.ts +6 -7
- package/src/lib/ui/dom/fillBoundary.ts +2 -3
- package/src/lib/ui/dom/fillRange.ts +4 -4
- package/src/lib/ui/dom/hydrate.ts +6 -12
- package/src/lib/ui/dom/isComment.ts +1 -1
- package/src/lib/ui/dom/matchingRangeClose.ts +29 -0
- package/src/lib/ui/dom/mergeProps.ts +1 -1
- package/src/lib/ui/dom/mount.ts +1 -2
- package/src/lib/ui/dom/mountChild.ts +9 -40
- package/src/lib/ui/dom/mountRange.ts +2 -3
- package/src/lib/ui/dom/mountSlot.ts +1 -1
- package/src/lib/ui/dom/mountStreamedChild.ts +84 -0
- package/src/lib/ui/dom/mountSwappableRange.ts +46 -4
- package/src/lib/ui/dom/mutateDocContainer.ts +65 -0
- package/src/lib/ui/dom/on.ts +2 -2
- package/src/lib/ui/dom/readCell.ts +40 -0
- package/src/lib/ui/dom/restProps.ts +2 -2
- package/src/lib/ui/dom/spreadProps.ts +3 -4
- package/src/lib/ui/dom/switchBlock.ts +30 -7
- package/src/lib/ui/dom/tryBlock.ts +233 -70
- package/src/lib/ui/dom/types/SwitchCase.ts +5 -1
- package/src/lib/ui/dom/when.ts +12 -2
- package/src/lib/ui/dom/withScope.ts +9 -2
- package/src/lib/ui/finalizeStreamedChildren.ts +89 -0
- package/src/lib/ui/flight.ts +56 -0
- package/src/lib/ui/html.ts +12 -1
- package/src/lib/ui/isolateCellBarrier.ts +17 -0
- package/src/lib/ui/linked.ts +48 -2
- package/src/lib/ui/props.ts +17 -0
- package/src/lib/ui/remoteProxy.ts +84 -159
- package/src/lib/ui/renderChain.ts +53 -13
- package/src/lib/ui/renderToStream.ts +22 -18
- package/src/lib/ui/resumeSeedScript.ts +1 -1
- package/src/lib/ui/router.ts +86 -53
- package/src/lib/ui/runtime/AsyncCellError.ts +20 -0
- package/src/lib/ui/runtime/CELL_SEED.ts +14 -0
- package/src/lib/ui/runtime/CHILD_PRESENT.ts +2 -2
- package/src/lib/ui/runtime/CURRENT_BOUNDARY.ts +11 -0
- package/src/lib/ui/runtime/CURRENT_PATH.ts +29 -0
- package/src/lib/ui/runtime/RENDER.ts +10 -7
- package/src/lib/ui/runtime/RESUME.ts +4 -4
- package/src/lib/ui/runtime/STREAMED_CELLS.ts +57 -0
- package/src/lib/ui/runtime/ambientPathBacking.ts +32 -0
- package/src/lib/ui/runtime/applyPatchToTree.ts +17 -4
- package/src/lib/ui/runtime/blockId.ts +31 -0
- package/src/lib/ui/runtime/boundaryFor.ts +11 -0
- package/src/lib/ui/runtime/cellBarrierBacking.ts +30 -0
- package/src/lib/ui/runtime/createAsyncCell.ts +300 -0
- package/src/lib/ui/runtime/createDoc.ts +31 -54
- package/src/lib/ui/runtime/createEffectNode.ts +9 -0
- package/src/lib/ui/runtime/enterRenderPass.ts +5 -4
- package/src/lib/ui/runtime/flushEffects.ts +33 -1
- package/src/lib/ui/runtime/isAsyncFunction.ts +14 -0
- package/src/lib/ui/runtime/nextBlockId.ts +8 -7
- package/src/lib/ui/runtime/renderPath.ts +16 -0
- package/src/lib/ui/runtime/scope.ts +11 -0
- package/src/lib/ui/runtime/toTeardown.ts +10 -3
- package/src/lib/ui/runtime/types/Boundary.ts +9 -0
- package/src/lib/ui/runtime/types/RenderContext.ts +9 -7
- package/src/lib/ui/runtime/types/SsrRender.ts +9 -2
- package/src/lib/ui/runtime/types/UiComponent.ts +1 -5
- package/src/lib/ui/runtime/types/UiProps.ts +6 -5
- package/src/lib/ui/runtime/withOptionalPath.ts +8 -0
- package/src/lib/ui/runtime/withPath.ts +16 -0
- package/src/lib/ui/runtime/withPathFrom.ts +20 -0
- package/src/lib/ui/runtime/withoutHydration.ts +22 -0
- package/src/lib/ui/seedStreamedResolution.ts +31 -6
- package/src/lib/ui/settleAsyncCells.ts +24 -0
- package/src/lib/ui/socketProxy.ts +1 -1
- package/src/lib/ui/startClient.ts +16 -31
- package/src/lib/ui/state.ts +9 -3
- package/src/lib/ui/trackedComputed.ts +68 -0
- package/src/lib/ui/types/Scope.ts +8 -24
- package/src/lib/ui/watch.ts +3 -3
- package/src/serverEntry.ts +14 -0
- package/template/src/server/rpc/getHello.ts +15 -13
- package/template/test/app.test.ts +1 -1
- package/src/lib/server/runtime/devHotModuleResponse.ts +0 -41
- package/src/lib/shared/DEV_HOT_PREFIX.ts +0 -7
- package/src/lib/shared/UNREACHABLE_STATUSES.ts +0 -13
- package/src/lib/shared/hasReplayableRequest.ts +0 -17
- package/src/lib/shared/hydratingSlot.ts +0 -12
- package/src/lib/shared/outboxProbeSlot.ts +0 -20
- package/src/lib/shared/types/Outbox.ts +0 -9
- package/src/lib/shared/types/OutboxEntry.ts +0 -27
- package/src/lib/shared/types/SmartReadOptions.ts +0 -36
- package/src/lib/shared/wakeHydrationPeeks.ts +0 -20
- package/src/lib/ui/COMPONENT_WRAPPER_PREFIX.ts +0 -5
- package/src/lib/ui/compile/REACTIVE_CALLEES.ts +0 -11
- package/src/lib/ui/compile/assertRuntimeHelpersBound.ts +0 -80
- package/src/lib/ui/compile/markupTokens.ts +0 -313
- package/src/lib/ui/compile/structuralBlockTokens.ts +0 -100
- package/src/lib/ui/dom/applyResolved.ts +0 -87
- package/src/lib/ui/dom/scopeLabel.ts +0 -21
- package/src/lib/ui/dom/text.ts +0 -20
- package/src/lib/ui/history.ts +0 -101
- package/src/lib/ui/installHotBridge.ts +0 -93
- package/src/lib/ui/installInspectorBridge.ts +0 -140
- package/src/lib/ui/outbox.ts +0 -35
- package/src/lib/ui/persist.ts +0 -115
- package/src/lib/ui/rpcOutbox/createOutboxQueue.ts +0 -281
- package/src/lib/ui/rpcOutbox/outboxRegistry.ts +0 -69
- package/src/lib/ui/runtime/PATCH_BUS.ts +0 -28
- package/src/lib/ui/runtime/captureModelDoc.ts +0 -28
- package/src/lib/ui/runtime/hotInstances.ts +0 -10
- package/src/lib/ui/runtime/hotReloadEnabled.ts +0 -8
- package/src/lib/ui/runtime/hotReplace.ts +0 -38
- package/src/lib/ui/runtime/liveScopes.ts +0 -15
- package/src/lib/ui/runtime/localStoragePersistence.ts +0 -47
- package/src/lib/ui/runtime/registerHotInstance.ts +0 -23
- package/src/lib/ui/runtime/seedModelDoc.ts +0 -26
- package/src/lib/ui/runtime/types/HotInstance.ts +0 -22
- package/src/lib/ui/runtime/types/PatchEvent.ts +0 -16
- package/src/lib/ui/seedResolved.ts +0 -28
- package/src/lib/ui/sync.ts +0 -48
- package/src/lib/ui/types/History.ts +0 -14
- package/src/lib/ui/types/PersistHandle.ts +0 -11
- package/src/lib/ui/types/PersistenceStore.ts +0 -12
- package/src/lib/ui/types/ResolvedFrame.ts +0 -15
- package/src/lib/ui/types/SyncTransport.ts +0 -13
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { Doc } from './types/Doc.ts'
|
|
2
|
-
|
|
3
|
-
/*
|
|
4
|
-
Loads a `saved` snapshot (from the pre-swap instance) into a freshly-built `model`,
|
|
5
|
-
restoring the user's in-progress state across a hot swap. A shallow per-top-level-key
|
|
6
|
-
merge, not a wholesale root replace: a key present in both is restored from `saved`;
|
|
7
|
-
a key the edit ADDED keeps its fresh default; a key the edit REMOVED is not re-added.
|
|
8
|
-
So editing a component's state shape still loads cleanly instead of resurrecting a
|
|
9
|
-
stale tree. Each restored key is one patch, so only the changed slots re-render.
|
|
10
|
-
*/
|
|
11
|
-
export function seedModelDoc(model: Doc, saved: unknown): void {
|
|
12
|
-
const current = model.snapshot()
|
|
13
|
-
if (
|
|
14
|
-
saved === null ||
|
|
15
|
-
typeof saved !== 'object' ||
|
|
16
|
-
current === null ||
|
|
17
|
-
typeof current !== 'object'
|
|
18
|
-
) {
|
|
19
|
-
return
|
|
20
|
-
}
|
|
21
|
-
for (const key of Object.keys(saved)) {
|
|
22
|
-
if (key in current) {
|
|
23
|
-
model.replace(key, (saved as Record<string, unknown>)[key])
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { Doc } from './Doc.ts'
|
|
2
|
-
import type { UiComponent } from './UiComponent.ts'
|
|
3
|
-
|
|
4
|
-
/*
|
|
5
|
-
A live component instance the hot-reload registry tracks: the `start`/`end` markers
|
|
6
|
-
bounding its DOM range (the wrapper-free mount, see `mountRange`), its `label` (the
|
|
7
|
-
scope name), the factory that built it, the props (thunks re-read on a swap so the
|
|
8
|
-
parent's live state still flows through), the disposer for its current scope + DOM,
|
|
9
|
-
and its own `model` document (`undefined` when the component has no `state`) —
|
|
10
|
-
snapshotted before a swap and re-seeded after, so the user's in-progress state
|
|
11
|
-
survives the edit. A swap re-fills the SAME range and mutates `factory`/`dispose`/
|
|
12
|
-
`model` in place (see `hotReplace`).
|
|
13
|
-
*/
|
|
14
|
-
export type HotInstance = {
|
|
15
|
-
start: Comment
|
|
16
|
-
end: Comment
|
|
17
|
-
label: string | undefined
|
|
18
|
-
factory: UiComponent
|
|
19
|
-
props: Parameters<UiComponent>[1]
|
|
20
|
-
dispose: () => void
|
|
21
|
-
model: Doc | undefined
|
|
22
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Doc } from './Doc.ts'
|
|
2
|
-
import type { Patch } from './Patch.ts'
|
|
3
|
-
|
|
4
|
-
/*
|
|
5
|
-
A single applied change announced on the `PATCH_BUS`: the `doc` it hit (reference
|
|
6
|
-
identity within the process — a serialization-stable id arrives with sync), the
|
|
7
|
-
forward `patch`, and its `inverse` — the patch that exactly undoes it, or
|
|
8
|
-
`undefined` for a no-op (e.g. removing an absent key). Consumers — undo history,
|
|
9
|
-
persistence, sync — read this one shape; the inverse is what makes a journal
|
|
10
|
-
reversible at O(size of the change), never a retained tree snapshot.
|
|
11
|
-
*/
|
|
12
|
-
export type PatchEvent = {
|
|
13
|
-
doc: Doc
|
|
14
|
-
patch: Patch
|
|
15
|
-
inverse: Patch | undefined
|
|
16
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { RESUME } from './runtime/RESUME.ts'
|
|
2
|
-
import { seedStreamedResolution } from './seedStreamedResolution.ts'
|
|
3
|
-
import type { ResolvedFrame } from './types/ResolvedFrame.ts'
|
|
4
|
-
|
|
5
|
-
/*
|
|
6
|
-
The single client intake seam for SSR warm-state seeding. Both warm-seed channels —
|
|
7
|
-
the cache-snapshot channel (a settled `cache()` value, keyed by cache key) and the
|
|
8
|
-
await-resume channel (an `await`-block resolved value, keyed by boundary id) — answer
|
|
9
|
-
the same "ship a server-settled value so hydration doesn't re-fetch" question, but land
|
|
10
|
-
in two distinct stores: the cache STORE (read by `cache()`) and the RESUME MANIFEST
|
|
11
|
-
(read by `awaitBlock` on adopt). This routes a discriminated `ResolvedFrame` to the
|
|
12
|
-
matching store so every consumer — startClient's boot drain, the live `__abideResolve`,
|
|
13
|
-
applyResolved's stream swap — registers through ONE call instead of poking each store
|
|
14
|
-
inline. The codecs stay split by source: the cache value is an HTTP body capped at plain
|
|
15
|
-
JSON (it must agree with the live `decodeResponse` read), the resume value is an in-process
|
|
16
|
-
graph carried as ref-json text and decoded lazily at the read site.
|
|
17
|
-
*/
|
|
18
|
-
// @documentation plumbing
|
|
19
|
-
export function seedResolved(frame: ResolvedFrame): void {
|
|
20
|
-
if (frame.kind === 'cache') {
|
|
21
|
-
seedStreamedResolution(frame.resolution)
|
|
22
|
-
return
|
|
23
|
-
}
|
|
24
|
-
/* The resume value rides as raw ref-json text; store it unparsed so the inline
|
|
25
|
-
stream-swap script (vanilla, runs before the bundle's codec loads) can register
|
|
26
|
-
through this same seam. `awaitBlock` decodes it at the read. */
|
|
27
|
-
RESUME[frame.id] = frame.resume
|
|
28
|
-
}
|
package/src/lib/ui/sync.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { PATCH_BUS } from './runtime/PATCH_BUS.ts'
|
|
2
|
-
import type { Doc } from './runtime/types/Doc.ts'
|
|
3
|
-
import type { Patch } from './runtime/types/Patch.ts'
|
|
4
|
-
import type { SyncTransport } from './types/SyncTransport.ts'
|
|
5
|
-
|
|
6
|
-
/*
|
|
7
|
-
Shares a document's state across peers in real time. Two directions over one
|
|
8
|
-
`transport`, both riding the patch bus:
|
|
9
|
-
- OUTBOUND: every local patch to `doc` is published (`transport.send`);
|
|
10
|
-
- INBOUND: every peer patch is applied to `doc`.
|
|
11
|
-
An inbound apply emits on the bus like any change, so an `applying` guard stops it
|
|
12
|
-
being echoed straight back — the thing that would otherwise ping-pong forever. The
|
|
13
|
-
transport itself should not deliver a sender its own patch either; together the two
|
|
14
|
-
guards keep a write to a path from looping. Last-write-wins by arrival order;
|
|
15
|
-
edits to *different* paths never conflict, by construction of the doc's wake. A
|
|
16
|
-
late joiner needs a snapshot seed before live patches (a transport concern, out of
|
|
17
|
-
this core). Returns a disposer.
|
|
18
|
-
*/
|
|
19
|
-
// @documentation plumbing
|
|
20
|
-
export function sync(doc: Doc, transport: SyncTransport): () => void {
|
|
21
|
-
/* The specific inbound patches currently being applied — their own bus echo must not be
|
|
22
|
-
re-sent. Tracked by IDENTITY (not a blanket `applying` flag): `doc.apply` emits the
|
|
23
|
-
patch on the bus inside its batch, then flushes effects on batch exit while still
|
|
24
|
-
synchronously inside this apply. A local effect that writes the doc in reaction emits
|
|
25
|
-
a DIFFERENT patch during that flush — a genuine new local change peers need — which a
|
|
26
|
-
blanket flag would wrongly suppress, diverging peers permanently. */
|
|
27
|
-
const applyingPatches = new Set<Patch>()
|
|
28
|
-
|
|
29
|
-
const unsubscribeInbound = transport.subscribe((patch) => {
|
|
30
|
-
applyingPatches.add(patch)
|
|
31
|
-
try {
|
|
32
|
-
doc.apply(patch)
|
|
33
|
-
} finally {
|
|
34
|
-
applyingPatches.delete(patch)
|
|
35
|
-
}
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
const unsubscribeBus = PATCH_BUS.subscribe((event) => {
|
|
39
|
-
if (event.doc === doc && !applyingPatches.has(event.patch)) {
|
|
40
|
-
transport.send(event.patch)
|
|
41
|
-
}
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
return () => {
|
|
45
|
-
unsubscribeBus()
|
|
46
|
-
unsubscribeInbound()
|
|
47
|
-
}
|
|
48
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
The undo/redo handle returned by `history(doc)`. `undo`/`redo` step the journal
|
|
3
|
-
of inverse patches; `canUndo`/`canRedo` report availability; `transaction` groups
|
|
4
|
-
a burst of patches into one reversible step (one user action = one undo); `dispose`
|
|
5
|
-
detaches from the `PATCH_BUS` and drops the journal.
|
|
6
|
-
*/
|
|
7
|
-
export type History = {
|
|
8
|
-
undo: () => void
|
|
9
|
-
redo: () => void
|
|
10
|
-
canUndo: () => boolean
|
|
11
|
-
canRedo: () => boolean
|
|
12
|
-
transaction: (run: () => void) => void
|
|
13
|
-
dispose: () => void
|
|
14
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
The handle returned by `persist(doc, key)`. `flush` writes the pending snapshot
|
|
3
|
-
immediately (the debounced writer otherwise coalesces a burst); `clear` removes
|
|
4
|
-
the stored snapshot; `dispose` stops persisting (unsubscribes, drops listeners).
|
|
5
|
-
On the server or a store-less browser, every method is a no-op.
|
|
6
|
-
*/
|
|
7
|
-
export type PersistHandle = {
|
|
8
|
-
flush: () => void
|
|
9
|
-
clear: () => void
|
|
10
|
-
dispose: () => void
|
|
11
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
The durable backend `persist` writes a document snapshot to. Deliberately tiny
|
|
3
|
-
and synchronous — `load` must return the saved value in time to seed the doc
|
|
4
|
-
before first render, which a sync store (localStorage) gives for free. Inject a
|
|
5
|
-
custom one for a different backend (a test memory store; a server data-dir store);
|
|
6
|
-
an async backend (IndexedDB) needs an async-boot wrapper, out of this contract.
|
|
7
|
-
*/
|
|
8
|
-
export type PersistenceStore = {
|
|
9
|
-
load: (key: string) => unknown
|
|
10
|
-
save: (key: string, snapshot: unknown) => void
|
|
11
|
-
remove: (key: string) => void
|
|
12
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { StreamedResolution } from '../../shared/types/StreamedResolution.ts'
|
|
2
|
-
|
|
3
|
-
/*
|
|
4
|
-
A warm-state-seed frame for the single client intake (`seedResolved`), discriminated by
|
|
5
|
-
`kind`. Both kinds ship a server-settled value so hydration adopts without a re-fetch,
|
|
6
|
-
but route to distinct stores:
|
|
7
|
-
- `cache` — a `StreamedResolution` for the cache store, read by a warm `cache()` call.
|
|
8
|
-
- `resume` — an `await`-block boundary id plus its ref-json-encoded value STRING for the
|
|
9
|
-
RESUME manifest, decoded lazily by `awaitBlock` when it adopts the branch.
|
|
10
|
-
The payloads stay distinct (cache snapshot vs boundary-keyed value); the unified thing is
|
|
11
|
-
the intake seam, not the payload.
|
|
12
|
-
*/
|
|
13
|
-
export type ResolvedFrame =
|
|
14
|
-
| { kind: 'cache'; resolution: StreamedResolution }
|
|
15
|
-
| { kind: 'resume'; id: number; resume: string }
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Patch } from '../runtime/types/Patch.ts'
|
|
2
|
-
|
|
3
|
-
/*
|
|
4
|
-
The bidirectional channel `sync` rides: `send` publishes a local patch to peers,
|
|
5
|
-
`subscribe` delivers patches from peers (returning an unsubscribe). Deliberately
|
|
6
|
-
minimal and patch-shaped — an app adapts it to a `socket` (publish ⇒ `send`, the
|
|
7
|
-
socket's frames ⇒ `subscribe`), and a test adapts it to an in-memory hub. A patch
|
|
8
|
-
is already the serializable wire unit, so nothing else is needed.
|
|
9
|
-
*/
|
|
10
|
-
export type SyncTransport = {
|
|
11
|
-
send: (patch: Patch) => void
|
|
12
|
-
subscribe: (onPatch: (patch: Patch) => void) => () => void
|
|
13
|
-
}
|