@abide/abide 0.58.0 → 0.101.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/CHANGELOG.md +11 -1774
- package/bin/abide.ts +793 -204
- package/package.json +35 -152
- package/scaffold/src/server/app.ts +6 -0
- package/scaffold/src/shared/.gitkeep +0 -0
- package/scaffold/src/ui/app.html +8 -0
- package/scaffold/src/ui/pages/page.abide +13 -0
- package/src/compiler/CHARACTER_REFERENCES.ts +2242 -0
- package/src/compiler/CheckerAnswer.ts +62 -0
- package/src/compiler/Cursor.ts +367 -0
- package/src/compiler/Finding.ts +2 -0
- package/src/compiler/Lowering.ts +648 -0
- package/src/compiler/PositionTable.ts +125 -0
- package/src/compiler/REACTIVE_MEMBERS.ts +36 -0
- package/src/compiler/SHARED_NAMES.ts +45 -0
- package/src/compiler/SPECIFIERS.ts +16 -0
- package/src/compiler/ShadowMap.ts +144 -0
- package/src/compiler/TemplateNode.ts +176 -0
- package/src/compiler/TypeSession.ts +1079 -0
- package/src/compiler/VOID_ELEMENTS.ts +22 -0
- package/src/compiler/aliasedSymbol.ts +15 -0
- package/src/compiler/ambientReadsIn.ts +152 -0
- package/src/compiler/argsDefaultsIn.ts +173 -0
- package/src/compiler/argsSchemaOf.ts +230 -0
- package/src/compiler/checkApp.ts +117 -0
- package/src/compiler/checkedShadow.ts +182 -0
- package/src/compiler/classifyRead.ts +577 -0
- package/src/compiler/classifyTemplate.ts +501 -0
- package/src/compiler/compileApp.ts +559 -0
- package/src/compiler/compiledEntry.ts +141 -0
- package/src/compiler/componentGraph.ts +139 -0
- package/src/compiler/declaredExports.ts +645 -0
- package/src/compiler/decodeCharacterReferences.ts +111 -0
- package/src/compiler/emitClient.ts +1343 -0
- package/src/compiler/emitComponent.ts +162 -0
- package/src/compiler/emitSource.ts +91 -0
- package/src/compiler/formatDiagnosis.ts +19 -0
- package/src/compiler/handlersUnder.ts +112 -0
- package/src/compiler/index.ts +15 -0
- package/src/compiler/invocationProps.ts +67 -0
- package/src/compiler/isNamedAlone.ts +9 -0
- package/src/compiler/lineOf.ts +38 -0
- package/src/compiler/parseAbide.ts +1341 -0
- package/src/compiler/projectShadow.ts +643 -0
- package/src/compiler/reactiveOptions.ts +82 -0
- package/src/compiler/reactiveTypes.ts +222 -0
- package/src/compiler/readSources.ts +100 -0
- package/src/compiler/readsIn.ts +1023 -0
- package/src/compiler/renderMarkup.ts +781 -0
- package/src/compiler/scaffold.ts +105 -0
- package/src/compiler/scopeStyles.ts +309 -0
- package/src/compiler/serveLanguage.ts +405 -0
- package/src/compiler/shareScope.ts +51 -0
- package/src/compiler/sharedModuleWrites.ts +88 -0
- package/src/compiler/splitImports.ts +387 -0
- package/src/compiler/templateWarnings.ts +128 -0
- package/src/compiler/tokenize.ts +317 -0
- package/src/compiler/trackingWarnings.ts +279 -0
- package/src/compiler/writeDefaultProject.ts +42 -0
- package/src/server/BRIDGE_VERSION.ts +3 -0
- package/src/server/CLIENT_BUILD.ts +56 -0
- package/src/server/DEFAULT_PORT.ts +6 -0
- package/src/server/DOCUMENT_HEADERS.ts +11 -0
- package/src/server/Inbox.ts +36 -0
- package/src/server/LogPanel.ts +239 -0
- package/src/server/MCP_PROTOCOL_VERSION.ts +3 -0
- package/src/server/SETTLE_MILLISECONDS.ts +7 -0
- package/src/server/VIRTUAL_DIRECTORY.ts +6 -0
- package/src/server/answerFailure.ts +91 -0
- package/src/server/answerRequest.ts +560 -0
- package/src/server/answerRpc.ts +550 -0
- package/src/server/answerSocket.ts +585 -0
- package/src/server/answerValue.ts +375 -0
- package/src/server/appDirectories.ts +9 -0
- package/src/server/appKit.ts +204 -0
- package/src/server/appPlugins.ts +26 -0
- package/src/server/argsFor.ts +40 -0
- package/src/server/assistant.ts +163 -0
- package/src/server/banner.ts +43 -0
- package/src/server/bridgeRelay.ts +249 -0
- package/src/server/buildDirectory.ts +10 -0
- package/src/server/callerOf.ts +60 -0
- package/src/server/claudeApi.ts +224 -0
- package/src/server/claudeCode.ts +187 -0
- package/src/server/clientBuildOptions.ts +49 -0
- package/src/server/coerceArgs.ts +110 -0
- package/src/server/commands.ts +442 -0
- package/src/server/componentImports.ts +56 -0
- package/src/server/componentModules.d.ts +9 -0
- package/src/server/compressAnswer.ts +100 -0
- package/src/server/config.ts +192 -0
- package/src/server/configFields.ts +92 -0
- package/src/server/createApp.ts +428 -0
- package/src/server/crossingOrigin.ts +49 -0
- package/src/server/csp.ts +77 -0
- package/src/server/devWorker.ts +641 -0
- package/src/server/faultPolicy.ts +59 -0
- package/src/server/fenceServer.ts +48 -0
- package/src/server/generatedSurfaces.ts +430 -0
- package/src/server/hooks.ts +190 -0
- package/src/server/index.ts +87 -0
- package/src/server/installServer.ts +47 -0
- package/src/server/launcherOptions.ts +62 -0
- package/src/server/launcherPage.ts +156 -0
- package/src/server/manifestOf.ts +114 -0
- package/src/server/muxUpgrade.ts +72 -0
- package/src/server/namesUnder.ts +15 -0
- package/src/server/nativeMenu.ts +296 -0
- package/src/server/negotiateEncoding.ts +39 -0
- package/src/server/plainAnswer.ts +19 -0
- package/src/server/prefers.ts +25 -0
- package/src/server/principal.ts +261 -0
- package/src/server/qualitiesOf.ts +22 -0
- package/src/server/randomToken.ts +9 -0
- package/src/server/reachable.ts +31 -0
- package/src/server/refuseAddressCollision.ts +30 -0
- package/src/server/remote.ts +242 -0
- package/src/server/render.ts +464 -0
- package/src/server/renderComponent.ts +33 -0
- package/src/server/reportHealth.ts +46 -0
- package/src/server/requestScope.ts +435 -0
- package/src/server/responseHelpers.ts +75 -0
- package/src/server/runCompiled.ts +44 -0
- package/src/server/runDesktop.ts +572 -0
- package/src/server/seedBuffer.ts +293 -0
- package/src/server/serveBuild.ts +198 -0
- package/src/server/serveDev.ts +505 -0
- package/src/server/shell.ts +506 -0
- package/src/server/surfaceOf.ts +47 -0
- package/src/server/testBuild.ts +237 -0
- package/src/server/trace.ts +151 -0
- package/src/server/versionOf.ts +109 -0
- package/src/server/withoutTrailingSlash.ts +4 -0
- package/src/shared/ADDRESSES.ts +69 -0
- package/src/shared/ANCHORS.ts +54 -0
- package/src/shared/Attributes.ts +339 -0
- package/src/shared/BOOLEAN_ATTRIBUTES.ts +41 -0
- package/src/shared/CHILDREN.ts +11 -0
- package/src/shared/CURRENT_ROUTER.ts +25 -0
- package/src/shared/CopyOptions.ts +19 -0
- package/src/shared/DEBUG_META.ts +6 -0
- package/src/shared/EARLY_CALLS.ts +8 -0
- package/src/shared/FAILURE_STATUS_TEXT.ts +48 -0
- package/src/shared/Failed.ts +146 -0
- package/src/shared/GLOBAL_GETS.ts +13 -0
- package/src/shared/Issues.ts +49 -0
- package/src/shared/JsonValue.ts +18 -0
- package/src/shared/LOAD_SIGNAL.ts +10 -0
- package/src/shared/MOUNT_META.ts +6 -0
- package/src/shared/Middleware.ts +34 -0
- package/src/shared/NAVIGATION_HEADER.ts +7 -0
- package/src/shared/PRINCIPAL_HEADER.ts +6 -0
- package/src/shared/RPC_SERVER.ts +67 -0
- package/src/shared/Raw.ts +90 -0
- package/src/shared/Schema.ts +229 -0
- package/src/shared/UNEXPECTED.ts +11 -0
- package/src/shared/URL_ATTRIBUTES.ts +19 -0
- package/src/shared/VERSION_HEADER.ts +6 -0
- package/src/shared/WORK.ts +37 -0
- package/src/shared/anchorMarkup.ts +15 -0
- package/src/shared/answerOf.ts +141 -0
- package/src/shared/applyPatch.ts +173 -0
- package/src/shared/armAnchor.ts +17 -0
- package/src/shared/attributeText.ts +50 -0
- package/src/shared/boundValue.ts +58 -0
- package/src/shared/cookies.ts +271 -0
- package/src/shared/csp.ts +55 -0
- package/src/shared/decodedOrKept.ts +14 -0
- package/src/shared/escapeText.ts +103 -0
- package/src/shared/framing.ts +131 -0
- package/src/shared/headKeyOf.ts +34 -0
- package/src/shared/health.ts +51 -0
- package/src/shared/index.ts +117 -0
- package/src/shared/isEventName.ts +10 -0
- package/src/shared/isRecord.ts +4 -0
- package/src/shared/issuesOf.ts +18 -0
- package/src/shared/jsonSchema.ts +50 -0
- package/src/shared/listOf.ts +20 -0
- package/src/shared/log.ts +284 -0
- package/src/shared/matchRoute.ts +99 -0
- package/src/shared/menuItem.ts +80 -0
- package/src/shared/mount.ts +45 -0
- package/src/shared/muxFrames.ts +35 -0
- package/src/shared/navigate.ts +26 -0
- package/src/shared/note.ts +24 -0
- package/src/shared/numberFromText.ts +10 -0
- package/src/shared/online.ts +19 -0
- package/src/shared/paint.ts +4 -0
- package/src/shared/principal.ts +145 -0
- package/src/shared/principalRotated.ts +47 -0
- package/src/shared/propCell.ts +99 -0
- package/src/shared/props.ts +24 -0
- package/src/shared/putOwn.ts +24 -0
- package/src/shared/queryText.ts +18 -0
- package/src/shared/reactive/CELL.ts +8 -0
- package/src/shared/reactive/Cursor.ts +217 -0
- package/src/shared/reactive/ENTRY_LIVES.ts +7 -0
- package/src/shared/reactive/Expiry.ts +103 -0
- package/src/shared/reactive/FOLLOWED.ts +8 -0
- package/src/shared/reactive/KEYED_BRAND.ts +8 -0
- package/src/shared/reactive/Keyed.ts +424 -0
- package/src/shared/reactive/MUTATION.ts +5 -0
- package/src/shared/reactive/NO_INITIAL.ts +6 -0
- package/src/shared/reactive/NotLanded.ts +21 -0
- package/src/shared/reactive/PATCHES.ts +11 -0
- package/src/shared/reactive/PATCH_SINKS.ts +26 -0
- package/src/shared/reactive/REACTIVE_BRAND.ts +9 -0
- package/src/shared/reactive/RESHAPING.ts +13 -0
- package/src/shared/reactive/Reactive.ts +4501 -0
- package/src/shared/reactive/SELECTION_MEMBERS.ts +12 -0
- package/src/shared/reactive/STREAMING.ts +5 -0
- package/src/shared/reactive/argsContract.ts +97 -0
- package/src/shared/reactive/byOf.ts +18 -0
- package/src/shared/reactive/callLoad.ts +200 -0
- package/src/shared/reactive/canonicalKey.ts +95 -0
- package/src/shared/reactive/chunksOfStream.ts +51 -0
- package/src/shared/reactive/index.ts +542 -0
- package/src/shared/reactive/isReactive.ts +19 -0
- package/src/shared/reactive/isThenable.ts +14 -0
- package/src/shared/reactive/matchesPattern.ts +16 -0
- package/src/shared/reactive/pairReactive.ts +41 -0
- package/src/shared/reactive/parameterDefaults.ts +356 -0
- package/src/shared/reactive/recordWrites.ts +472 -0
- package/src/shared/reactive/scoped.ts +157 -0
- package/src/shared/reactive/scoping.ts +64 -0
- package/src/shared/reactive/share.ts +91 -0
- package/src/shared/reactive/structural.ts +62 -0
- package/src/shared/reactive/tracking.ts +552 -0
- package/src/shared/reactive/watch.ts +314 -0
- package/src/shared/refuse.ts +224 -0
- package/src/shared/route.ts +29 -0
- package/src/shared/routePattern.ts +146 -0
- package/src/shared/rpc.ts +501 -0
- package/src/shared/rpcRequest.ts +73 -0
- package/src/shared/safeUrl.ts +68 -0
- package/src/shared/seededDocument.ts +36 -0
- package/src/shared/setUpLevels.ts +53 -0
- package/src/shared/slotValue.ts +34 -0
- package/src/shared/spread.ts +79 -0
- package/src/shared/takeEarlyCall.ts +86 -0
- package/src/shared/url.ts +140 -0
- package/src/shared/validateJson.ts +578 -0
- package/src/shared/versionInEtag.ts +14 -0
- package/src/shared/writePath.ts +95 -0
- package/src/ui/ArmRegion.ts +185 -0
- package/src/ui/LAYER_NAMES.ts +30 -0
- package/src/ui/List.ts +273 -0
- package/src/ui/Mismatch.ts +32 -0
- package/src/ui/RawRun.ts +99 -0
- package/src/ui/Router.ts +698 -0
- package/src/ui/Scope.ts +115 -0
- package/src/ui/TryRegion.ts +278 -0
- package/src/ui/adoptWalk.ts +126 -0
- package/src/ui/applyHead.ts +146 -0
- package/src/ui/bindElement.ts +44 -0
- package/src/ui/bindProperty.ts +79 -0
- package/src/ui/bindSpread.ts +44 -0
- package/src/ui/escapeless.ts +14 -0
- package/src/ui/index.ts +64 -0
- package/src/ui/leave.ts +35 -0
- package/src/ui/listenForRoutes.ts +92 -0
- package/src/ui/measureLayer.ts +34 -0
- package/src/ui/menuBridge.ts +19 -0
- package/src/ui/moveNode.ts +34 -0
- package/src/ui/parseMarkup.ts +35 -0
- package/src/ui/reconcile.ts +368 -0
- package/src/ui/regions.ts +137 -0
- package/src/ui/reportMenu.ts +57 -0
- package/src/ui/routing.ts +18 -0
- package/src/ui/rowKeyOf.ts +19 -0
- package/src/ui/rows.ts +99 -0
- package/src/ui/setAttribute.ts +37 -0
- package/src/ui/setClass.ts +27 -0
- package/src/ui/setMarkup.ts +20 -0
- package/src/ui/setStyleProperty.ts +30 -0
- package/src/ui/setText.ts +28 -0
- package/src/ui/socketWire.ts +258 -0
- package/src/ui/wire.ts +141 -0
- package/AGENTS.md +0 -446
- package/README.md +0 -249
- package/src/abideLsp.ts +0 -251
- package/src/abideModules.d.ts +0 -8
- package/src/abideResolverPlugin.ts +0 -1101
- package/src/appEntry.ts +0 -161
- package/src/assets/app.html +0 -12
- package/src/build.ts +0 -189
- package/src/buildCli.ts +0 -125
- package/src/buildDisconnected.ts +0 -117
- package/src/bundleApp.ts +0 -146
- package/src/bundleDisconnectedEntry.ts +0 -14
- package/src/checkAbide.ts +0 -145
- package/src/cliEntry.ts +0 -25
- package/src/clientBuildPlugins.ts +0 -33
- package/src/clientEntry.ts +0 -17
- package/src/compile.ts +0 -61
- package/src/controlServerWorker.ts +0 -433
- package/src/devEntry.ts +0 -381
- package/src/discoveryEntry.ts +0 -82
- package/src/initAgent.ts +0 -50
- package/src/lib/bundle/BundleMenu.ts +0 -12
- package/src/lib/bundle/BundleMenuItem.ts +0 -25
- package/src/lib/bundle/BundleWindow.ts +0 -37
- package/src/lib/bundle/WEBVIEW_BUILD_REVISION.ts +0 -9
- package/src/lib/bundle/WEBVIEW_VERSION.ts +0 -7
- package/src/lib/bundle/bindConnectedFlag.ts +0 -29
- package/src/lib/bundle/bindRequestNavigate.ts +0 -34
- package/src/lib/bundle/buildWebviewLib.ts +0 -111
- package/src/lib/bundle/bundled.ts +0 -35
- package/src/lib/bundle/disconnected.abide +0 -265
- package/src/lib/bundle/disconnected.css +0 -9
- package/src/lib/bundle/ensureWebviewLib.ts +0 -20
- package/src/lib/bundle/exitWithParent.ts +0 -30
- package/src/lib/bundle/infoPlist.ts +0 -52
- package/src/lib/bundle/installDownloads.ts +0 -34
- package/src/lib/bundle/installMacMenu.ts +0 -49
- package/src/lib/bundle/listenLocalControlServer.ts +0 -19
- package/src/lib/bundle/native/abideMenu.mm +0 -422
- package/src/lib/bundle/native/webview.h +0 -4557
- package/src/lib/bundle/onMenu.ts +0 -42
- package/src/lib/bundle/openWebview.ts +0 -104
- package/src/lib/bundle/pngToIcns.ts +0 -47
- package/src/lib/bundle/probeAbideServer.ts +0 -57
- package/src/lib/bundle/resolveServerBinary.ts +0 -12
- package/src/lib/bundle/resolveWebviewLib.ts +0 -53
- package/src/lib/bundle/serverBinaryFilename.ts +0 -8
- package/src/lib/bundle/signMacApp.ts +0 -37
- package/src/lib/bundle/spawnEmbeddedServer.ts +0 -73
- package/src/lib/bundle/stableLocalPort.ts +0 -19
- package/src/lib/bundle/waitForServer.ts +0 -28
- package/src/lib/bundle/webviewCachePath.ts +0 -23
- package/src/lib/bundle/webviewLibName.ts +0 -11
- package/src/lib/cli/completeCli.ts +0 -38
- package/src/lib/cli/connectToServer.ts +0 -23
- package/src/lib/cli/createClient.ts +0 -108
- package/src/lib/cli/dispatchCommand.ts +0 -72
- package/src/lib/cli/loadEnvFromBinaryDir.ts +0 -15
- package/src/lib/cli/parseArgvForRpc.ts +0 -131
- package/src/lib/cli/printCommandHelp.ts +0 -43
- package/src/lib/cli/printSessionHelp.ts +0 -28
- package/src/lib/cli/printSessionStatus.ts +0 -21
- package/src/lib/cli/printTopLevelHelp.ts +0 -83
- package/src/lib/cli/printTrimmed.ts +0 -8
- package/src/lib/cli/printValue.ts +0 -10
- package/src/lib/cli/renderCliCompletions.ts +0 -56
- package/src/lib/cli/resolveCliTarget.ts +0 -47
- package/src/lib/cli/runCli.ts +0 -188
- package/src/lib/cli/runSession.ts +0 -107
- package/src/lib/cli/startLocalInstance.ts +0 -14
- package/src/lib/cli/tokenizeArgvFlags.ts +0 -86
- package/src/lib/cli/tokenizeLine.ts +0 -51
- package/src/lib/cli/types/CliManifest.ts +0 -11
- package/src/lib/cli/types/CliManifestEntry.ts +0 -17
- package/src/lib/cli/types/CliTarget.ts +0 -13
- package/src/lib/mcp/annotationsForMethod.ts +0 -29
- package/src/lib/mcp/buildPrompts.ts +0 -25
- package/src/lib/mcp/createMcpResourceServer.ts +0 -113
- package/src/lib/mcp/createMcpServer.ts +0 -56
- package/src/lib/mcp/dispatchMcpRequest.ts +0 -159
- package/src/lib/mcp/mcpResourceServerSlot.ts +0 -13
- package/src/lib/mcp/mcpSurface.ts +0 -57
- package/src/lib/mcp/mcpTools.ts +0 -196
- package/src/lib/mcp/renderPrompt.ts +0 -25
- package/src/lib/mcp/toolResultFromResponse.ts +0 -100
- package/src/lib/mcp/types/JsonRpcRequest.ts +0 -12
- package/src/lib/mcp/types/JsonRpcResponse.ts +0 -20
- package/src/lib/mcp/types/McpResourceContents.ts +0 -10
- package/src/lib/mcp/types/McpResourceDescriptor.ts +0 -6
- package/src/lib/mcp/types/McpResourceServer.ts +0 -12
- package/src/lib/mcp/types/McpServer.ts +0 -9
- package/src/lib/mcp/types/McpServerOptions.ts +0 -16
- package/src/lib/mcp/types/McpSurface.ts +0 -15
- package/src/lib/mcp/types/PromptDescriptor.ts +0 -5
- package/src/lib/mcp/types/PromptMessage.ts +0 -2
- package/src/lib/mcp/types/ToolDescriptor.ts +0 -7
- package/src/lib/mcp/types/ToolResult.ts +0 -2
- package/src/lib/server/AppModule.ts +0 -47
- package/src/lib/server/DELETE.ts +0 -10
- package/src/lib/server/GET.ts +0 -10
- package/src/lib/server/HEAD.ts +0 -10
- package/src/lib/server/PATCH.ts +0 -10
- package/src/lib/server/POST.ts +0 -10
- package/src/lib/server/PUT.ts +0 -10
- package/src/lib/server/agent.ts +0 -86
- package/src/lib/server/appDataDir.ts +0 -16
- package/src/lib/server/cli/buildEnvContent.ts +0 -19
- package/src/lib/server/cli/createTarGz.ts +0 -77
- package/src/lib/server/cli/handleCliDownload.ts +0 -152
- package/src/lib/server/cli/handleCliInstall.ts +0 -37
- package/src/lib/server/cli/installScript.ts +0 -31
- package/src/lib/server/cli/maxSourceMtime.ts +0 -26
- package/src/lib/server/cookies.ts +0 -30
- package/src/lib/server/env.ts +0 -51
- package/src/lib/server/error.ts +0 -110
- package/src/lib/server/json.ts +0 -57
- package/src/lib/server/jsonl.ts +0 -47
- package/src/lib/server/prompts/definePrompt.ts +0 -21
- package/src/lib/server/prompts/promptRegistry.ts +0 -9
- package/src/lib/server/prompts/registerPrompt.ts +0 -6
- package/src/lib/server/prompts/renderPromptTemplate.ts +0 -17
- package/src/lib/server/prompts/types/Prompt.ts +0 -14
- package/src/lib/server/prompts/types/PromptOptions.ts +0 -12
- package/src/lib/server/prompts/types/PromptRegistryEntry.ts +0 -13
- package/src/lib/server/prompts/types/PromptRoutes.ts +0 -10
- package/src/lib/server/redirect.ts +0 -43
- package/src/lib/server/render.ts +0 -70
- package/src/lib/server/request.ts +0 -19
- package/src/lib/server/rpc/defineRpc.ts +0 -271
- package/src/lib/server/rpc/dispatchRpcInProcess.ts +0 -46
- package/src/lib/server/rpc/findRpcByCommandName.ts +0 -18
- package/src/lib/server/rpc/parseArgs.ts +0 -244
- package/src/lib/server/rpc/readBodyWithinLimit.ts +0 -47
- package/src/lib/server/rpc/registerRpc.ts +0 -6
- package/src/lib/server/rpc/resolveRpcJsonSchema.ts +0 -28
- package/src/lib/server/rpc/rpcRegistry.ts +0 -11
- package/src/lib/server/rpc/runWithRpcTimeout.ts +0 -58
- package/src/lib/server/rpc/types/RemoteHandler.ts +0 -31
- package/src/lib/server/rpc/types/RemoteRoutes.ts +0 -13
- package/src/lib/server/rpc/types/RpcHelper.ts +0 -185
- package/src/lib/server/rpc/types/RpcRegistryEntry.ts +0 -50
- package/src/lib/server/rpc/types/TypedError.ts +0 -18
- package/src/lib/server/rpc/types/TypedResponse.ts +0 -18
- package/src/lib/server/rpc/unprocessed.ts +0 -13
- package/src/lib/server/rpc/validationError.ts +0 -17
- package/src/lib/server/runtime/DEFAULT_PORT.ts +0 -6
- package/src/lib/server/runtime/DEV_READY_MESSAGE.ts +0 -6
- package/src/lib/server/runtime/DEV_REBUILD_MESSAGE.ts +0 -4
- package/src/lib/server/runtime/DEV_RELOAD_CLIENT_SCRIPT.ts +0 -92
- package/src/lib/server/runtime/SSR_SWAP_SCRIPT.ts +0 -19
- package/src/lib/server/runtime/STATUS_TEXT.ts +0 -22
- package/src/lib/server/runtime/STREAMED_HTML_HEADER.ts +0 -13
- package/src/lib/server/runtime/acceptsGzip.ts +0 -33
- package/src/lib/server/runtime/amendBroadcaster.ts +0 -53
- package/src/lib/server/runtime/buildCacheSnapshot.ts +0 -63
- package/src/lib/server/runtime/buildHealthPayload.ts +0 -34
- package/src/lib/server/runtime/buildInFlightSnapshot.ts +0 -35
- package/src/lib/server/runtime/buildInspectorSurface.ts +0 -47
- package/src/lib/server/runtime/buildOpenApiSpec.ts +0 -150
- package/src/lib/server/runtime/buildPreloadManifest.ts +0 -153
- package/src/lib/server/runtime/cacheControlForAsset.ts +0 -22
- package/src/lib/server/runtime/cacheStalenessBroadcaster.ts +0 -33
- package/src/lib/server/runtime/containsTraversal.ts +0 -41
- package/src/lib/server/runtime/createAppAssetServer.ts +0 -100
- package/src/lib/server/runtime/createAppRouteResolver.ts +0 -145
- package/src/lib/server/runtime/createAssetHeaderCache.ts +0 -31
- package/src/lib/server/runtime/createPlumbingRouter.ts +0 -212
- package/src/lib/server/runtime/createPublicAssetServer.ts +0 -76
- package/src/lib/server/runtime/createRouteDispatcher.ts +0 -121
- package/src/lib/server/runtime/createServer.ts +0 -605
- package/src/lib/server/runtime/createUiPageRenderer.ts +0 -489
- package/src/lib/server/runtime/crossOriginForbidden.ts +0 -17
- package/src/lib/server/runtime/crossOriginGate.ts +0 -29
- package/src/lib/server/runtime/devClientFingerprint.ts +0 -103
- package/src/lib/server/runtime/devReloadResponse.ts +0 -41
- package/src/lib/server/runtime/disableIdleTimeoutForStream.ts +0 -27
- package/src/lib/server/runtime/envSchemaStore.ts +0 -15
- package/src/lib/server/runtime/finalizeResponse.ts +0 -42
- package/src/lib/server/runtime/findOpenPort.ts +0 -21
- package/src/lib/server/runtime/flushingGzipStream.ts +0 -62
- package/src/lib/server/runtime/getActiveServer.ts +0 -6
- package/src/lib/server/runtime/globToPathSet.ts +0 -29
- package/src/lib/server/runtime/gzipResponse.ts +0 -57
- package/src/lib/server/runtime/inFlightRequests.ts +0 -13
- package/src/lib/server/runtime/inProcessServer.ts +0 -20
- package/src/lib/server/runtime/installAmbientScopeStore.ts +0 -54
- package/src/lib/server/runtime/internalErrorResponse.ts +0 -28
- package/src/lib/server/runtime/isCrossOriginRequest.ts +0 -23
- package/src/lib/server/runtime/listenOnOpenPort.ts +0 -36
- package/src/lib/server/runtime/logExposedSurfaces.ts +0 -156
- package/src/lib/server/runtime/maybeMountInspector.ts +0 -104
- package/src/lib/server/runtime/mimeForExtension.ts +0 -14
- package/src/lib/server/runtime/pageRenderSlot.ts +0 -15
- package/src/lib/server/runtime/pageUrlFromStore.ts +0 -15
- package/src/lib/server/runtime/parseIdleTimeout.ts +0 -10
- package/src/lib/server/runtime/parsePort.ts +0 -11
- package/src/lib/server/runtime/pathStore.ts +0 -15
- package/src/lib/server/runtime/registryManifests.ts +0 -66
- package/src/lib/server/runtime/renderCellBarrierStore.ts +0 -15
- package/src/lib/server/runtime/requestContext.ts +0 -5
- package/src/lib/server/runtime/resolvePageSnapshot.ts +0 -25
- package/src/lib/server/runtime/respondWithEmbeddedAsset.ts +0 -18
- package/src/lib/server/runtime/runWithRequestScope.ts +0 -165
- package/src/lib/server/runtime/serializeCacheSnapshot.ts +0 -31
- package/src/lib/server/runtime/serverSlot.ts +0 -13
- package/src/lib/server/runtime/setActiveServer.ts +0 -6
- package/src/lib/server/runtime/snapshotEntryFromCache.ts +0 -121
- package/src/lib/server/runtime/streamCacheResolutions.ts +0 -44
- package/src/lib/server/runtime/streamFromIterator.ts +0 -124
- package/src/lib/server/runtime/textResponse.ts +0 -23
- package/src/lib/server/runtime/typedErrorResponse.ts +0 -26
- package/src/lib/server/runtime/types/Assets.ts +0 -6
- package/src/lib/server/runtime/types/DevReloadStamp.ts +0 -14
- package/src/lib/server/runtime/types/InspectorCacheEntry.ts +0 -24
- package/src/lib/server/runtime/types/InspectorCacheSnapshot.ts +0 -11
- package/src/lib/server/runtime/types/InspectorContext.ts +0 -34
- package/src/lib/server/runtime/types/InspectorInFlightRequest.ts +0 -20
- package/src/lib/server/runtime/types/InspectorInFlightSnapshot.ts +0 -10
- package/src/lib/server/runtime/types/InspectorPrompt.ts +0 -15
- package/src/lib/server/runtime/types/InspectorRpc.ts +0 -27
- package/src/lib/server/runtime/types/InspectorSocket.ts +0 -17
- package/src/lib/server/runtime/types/InspectorSurface.ts +0 -16
- package/src/lib/server/runtime/types/RequestStore.ts +0 -125
- package/src/lib/server/runtime/warnUnguardedMcp.ts +0 -43
- package/src/lib/server/runtime/withResponseDefaults.ts +0 -29
- package/src/lib/server/server.ts +0 -33
- package/src/lib/server/socket.ts +0 -32
- package/src/lib/server/sockets/amendFamilyEntry.ts +0 -39
- package/src/lib/server/sockets/createSocketDispatcher.ts +0 -397
- package/src/lib/server/sockets/defineSocket.ts +0 -225
- package/src/lib/server/sockets/lookupSocket.ts +0 -6
- package/src/lib/server/sockets/registerSocket.ts +0 -18
- package/src/lib/server/sockets/socketOperations.ts +0 -36
- package/src/lib/server/sockets/socketRegistry.ts +0 -9
- package/src/lib/server/sockets/types/SocketOperation.ts +0 -22
- package/src/lib/server/sockets/types/SocketOptions.ts +0 -26
- package/src/lib/server/sockets/types/SocketRegistryEntry.ts +0 -19
- package/src/lib/server/sockets/types/SocketRoutes.ts +0 -10
- package/src/lib/server/sse.ts +0 -58
- package/src/lib/shared/ABIDE_PACKAGE_NAME.ts +0 -7
- package/src/lib/shared/ABIDE_VERSION.ts +0 -9
- package/src/lib/shared/AMEND_TOPIC_PREFIX.ts +0 -9
- package/src/lib/shared/ASYNC_CELL.ts +0 -5
- package/src/lib/shared/CACHE_CONTROL_VALUES.ts +0 -16
- package/src/lib/shared/CACHE_STALENESS_SOCKET.ts +0 -8
- package/src/lib/shared/CLI_PATH.ts +0 -7
- package/src/lib/shared/DEFER.ts +0 -8
- package/src/lib/shared/DEV_REBUILD_PATH.ts +0 -6
- package/src/lib/shared/DEV_RELOAD_PATH.ts +0 -6
- package/src/lib/shared/HEALTH_PATH.ts +0 -7
- package/src/lib/shared/HTTP_METHODS.ts +0 -6
- package/src/lib/shared/HttpError.ts +0 -30
- package/src/lib/shared/IDENTITY_PATH.ts +0 -6
- package/src/lib/shared/INSPECTOR_PATH.ts +0 -7
- package/src/lib/shared/MCP_PATH.ts +0 -6
- package/src/lib/shared/NAV_HEADER.ts +0 -8
- package/src/lib/shared/OFFLINE_HEADER.ts +0 -8
- package/src/lib/shared/PROXIED_SERVER_SUBDIRS.ts +0 -15
- package/src/lib/shared/REF_JSON_HEADER.ts +0 -9
- package/src/lib/shared/REF_JSON_TAGS.ts +0 -43
- package/src/lib/shared/REMOTE_FUNCTION.ts +0 -8
- package/src/lib/shared/REPLAYABLE_METHODS.ts +0 -12
- package/src/lib/shared/RESERVED_SOCKET_PREFIX.ts +0 -8
- package/src/lib/shared/RPC_ARGS_TYPE.ts +0 -7
- package/src/lib/shared/RPC_SHIM_GLOBALS.ts +0 -9
- package/src/lib/shared/SEEDS.ts +0 -33
- package/src/lib/shared/SOCKETS_PATH.ts +0 -7
- package/src/lib/shared/SOCKET_SEED.ts +0 -12
- package/src/lib/shared/SSR_SCRIPT_ID.ts +0 -11
- package/src/lib/shared/STREAMING_CONTENT_TYPES.ts +0 -12
- package/src/lib/shared/SocketDisconnectedError.ts +0 -13
- package/src/lib/shared/TEXT_PLAIN.ts +0 -7
- package/src/lib/shared/abideImportName.ts +0 -44
- package/src/lib/shared/abideLog.ts +0 -38
- package/src/lib/shared/activeCacheStore.ts +0 -12
- package/src/lib/shared/activePage.ts +0 -12
- package/src/lib/shared/amend.ts +0 -48
- package/src/lib/shared/amendBroadcastSlot.ts +0 -19
- package/src/lib/shared/appDataDir.ts +0 -34
- package/src/lib/shared/appNameSlot.ts +0 -10
- package/src/lib/shared/applyAmendLocally.ts +0 -20
- package/src/lib/shared/applyCacheStalenessLocally.ts +0 -18
- package/src/lib/shared/assertExhaustive.ts +0 -14
- package/src/lib/shared/attachRpcSelectorMethods.ts +0 -44
- package/src/lib/shared/attachSocketSelectorMethods.ts +0 -34
- package/src/lib/shared/augmentModule.ts +0 -18
- package/src/lib/shared/basePath.ts +0 -11
- package/src/lib/shared/basePathFromAppUrl.ts +0 -20
- package/src/lib/shared/baseSlot.ts +0 -9
- package/src/lib/shared/binaryDirEnvPath.ts +0 -12
- package/src/lib/shared/bodyValueForKind.ts +0 -34
- package/src/lib/shared/browserClientFlags.ts +0 -10
- package/src/lib/shared/buildArtifact.ts +0 -20
- package/src/lib/shared/buildRpcProxy.ts +0 -39
- package/src/lib/shared/buildRpcRequest.ts +0 -81
- package/src/lib/shared/buildSocketOverChannel.ts +0 -102
- package/src/lib/shared/bundleGraphFromMetafile.ts +0 -68
- package/src/lib/shared/bundleLayout.ts +0 -36
- package/src/lib/shared/cache.ts +0 -1584
- package/src/lib/shared/cacheEntryFromSnapshot.ts +0 -77
- package/src/lib/shared/cacheManagedSlot.ts +0 -10
- package/src/lib/shared/cacheReaderSocketSlot.ts +0 -11
- package/src/lib/shared/cacheStalenessSlot.ts +0 -21
- package/src/lib/shared/cacheStoreSlot.ts +0 -12
- package/src/lib/shared/cacheStores.ts +0 -10
- package/src/lib/shared/canonicalJson.ts +0 -86
- package/src/lib/shared/carriesBodyArgs.ts +0 -13
- package/src/lib/shared/changeAffectsClient.ts +0 -40
- package/src/lib/shared/clearLastConnection.ts +0 -7
- package/src/lib/shared/commandNameForUrl.ts +0 -17
- package/src/lib/shared/contentBodyKind.ts +0 -27
- package/src/lib/shared/contentTypeOf.ts +0 -6
- package/src/lib/shared/createCacheStore.ts +0 -147
- package/src/lib/shared/createChannelLog.ts +0 -146
- package/src/lib/shared/createLifecycleChannel.ts +0 -62
- package/src/lib/shared/createLivenessWatch.ts +0 -118
- package/src/lib/shared/createPushIterator.ts +0 -132
- package/src/lib/shared/createReachable.ts +0 -78
- package/src/lib/shared/createRemoteFunction.ts +0 -210
- package/src/lib/shared/createResolverSlot.ts +0 -30
- package/src/lib/shared/createRpcServerProgram.ts +0 -1007
- package/src/lib/shared/createSocketSubRegistry.ts +0 -112
- package/src/lib/shared/createSubscriber.ts +0 -55
- package/src/lib/shared/createTraceContext.ts +0 -21
- package/src/lib/shared/dataDirEnvPath.ts +0 -12
- package/src/lib/shared/debugGate.ts +0 -90
- package/src/lib/shared/decodeRefJson.ts +0 -112
- package/src/lib/shared/decodeResponse.ts +0 -54
- package/src/lib/shared/decodeWireBody.ts +0 -35
- package/src/lib/shared/detectRpcMethod.ts +0 -24
- package/src/lib/shared/detectTarget.ts +0 -27
- package/src/lib/shared/docSnapshotsSlot.ts +0 -13
- package/src/lib/shared/done.ts +0 -20
- package/src/lib/shared/emitLogRecord.ts +0 -217
- package/src/lib/shared/encodeRefJson.ts +0 -108
- package/src/lib/shared/encodeSeedValue.ts +0 -24
- package/src/lib/shared/encodeWireBody.ts +0 -18
- package/src/lib/shared/escapeHtml.ts +0 -15
- package/src/lib/shared/escapeRegex.ts +0 -9
- package/src/lib/shared/exeSuffix.ts +0 -9
- package/src/lib/shared/exitOnBuildFailure.ts +0 -18
- package/src/lib/shared/extraForwardHeaders.ts +0 -16
- package/src/lib/shared/fieldErrorsFromIssues.ts +0 -27
- package/src/lib/shared/fileName.ts +0 -9
- package/src/lib/shared/fileStem.ts +0 -11
- package/src/lib/shared/findExportCallSite.ts +0 -233
- package/src/lib/shared/formatTraceparent.ts +0 -6
- package/src/lib/shared/forwardHeaders.ts +0 -44
- package/src/lib/shared/generateDeclarations.ts +0 -72
- package/src/lib/shared/getRemoteMeta.ts +0 -5
- package/src/lib/shared/hasSeedableRequest.ts +0 -25
- package/src/lib/shared/health.ts +0 -179
- package/src/lib/shared/healthReadSlot.ts +0 -11
- package/src/lib/shared/healthSeedSlot.ts +0 -12
- package/src/lib/shared/html.ts +0 -19
- package/src/lib/shared/httpErrorFor.ts +0 -26
- package/src/lib/shared/hydrationWindow.ts +0 -53
- package/src/lib/shared/importNamesToStrip.ts +0 -13
- package/src/lib/shared/invalidate.ts +0 -39
- package/src/lib/shared/invalidateEvent.ts +0 -11
- package/src/lib/shared/invalidateTripwire.ts +0 -40
- package/src/lib/shared/isAbideHealthPayload.ts +0 -11
- package/src/lib/shared/isAsciiWhitespace.ts +0 -5
- package/src/lib/shared/isAsyncCell.ts +0 -11
- package/src/lib/shared/isAsyncIterable.ts +0 -8
- package/src/lib/shared/isCompileTarget.ts +0 -21
- package/src/lib/shared/isDebugEnabled.ts +0 -19
- package/src/lib/shared/isDebugNegated.ts +0 -17
- package/src/lib/shared/isIdentPart.ts +0 -9
- package/src/lib/shared/isIdentStart.ts +0 -8
- package/src/lib/shared/isLayoutFile.ts +0 -12
- package/src/lib/shared/isModuleNotFound.ts +0 -18
- package/src/lib/shared/isReadOnlyMethod.ts +0 -14
- package/src/lib/shared/isReplayableMethod.ts +0 -7
- package/src/lib/shared/isStreamingResponse.ts +0 -12
- package/src/lib/shared/isSubscribable.ts +0 -15
- package/src/lib/shared/isThenable.ts +0 -9
- package/src/lib/shared/jsonSchemaForPromptArguments.ts +0 -29
- package/src/lib/shared/jsonSchemaForSchema.ts +0 -39
- package/src/lib/shared/jsonSchemaForType.ts +0 -245
- package/src/lib/shared/jsonlErrorFrame.ts +0 -24
- package/src/lib/shared/keyForRemoteCall.ts +0 -30
- package/src/lib/shared/keyMatchesPrefix.ts +0 -9
- package/src/lib/shared/keyPrefixForRemote.ts +0 -12
- package/src/lib/shared/lastConnectionPath.ts +0 -7
- package/src/lib/shared/layoutChainForRoute.ts +0 -22
- package/src/lib/shared/lenientDecode.ts +0 -15
- package/src/lib/shared/loadEnvFile.ts +0 -17
- package/src/lib/shared/loadEnvFromDataDir.ts +0 -14
- package/src/lib/shared/loadProjectTsConfig.ts +0 -28
- package/src/lib/shared/log.ts +0 -24
- package/src/lib/shared/logClosingRecord.ts +0 -28
- package/src/lib/shared/logTapSlot.ts +0 -13
- package/src/lib/shared/manifestModule.ts +0 -39
- package/src/lib/shared/markFrameworkSourcesIgnored.ts +0 -47
- package/src/lib/shared/matchRoute.ts +0 -165
- package/src/lib/shared/matcherFromEnvelope.ts +0 -31
- package/src/lib/shared/memoizeByKey.ts +0 -32
- package/src/lib/shared/messageFromError.ts +0 -6
- package/src/lib/shared/normalizePathname.ts +0 -11
- package/src/lib/shared/normalizeTarget.ts +0 -10
- package/src/lib/shared/online.ts +0 -51
- package/src/lib/shared/page.ts +0 -30
- package/src/lib/shared/pageSlot.ts +0 -17
- package/src/lib/shared/pageUrlForFile.ts +0 -14
- package/src/lib/shared/parseBoundedEnvInt.ts +0 -20
- package/src/lib/shared/parseEnv.ts +0 -41
- package/src/lib/shared/parsePromptMarkdown.ts +0 -35
- package/src/lib/shared/parseRouteSegments.ts +0 -31
- package/src/lib/shared/parseTraceparent.ts +0 -26
- package/src/lib/shared/peek.ts +0 -46
- package/src/lib/shared/pending.ts +0 -36
- package/src/lib/shared/pendingAsyncCellsSlot.ts +0 -13
- package/src/lib/shared/prepareRemoteExport.ts +0 -40
- package/src/lib/shared/prepareRpcModule.ts +0 -240
- package/src/lib/shared/prepareSocketModule.ts +0 -46
- package/src/lib/shared/probeRegistries.ts +0 -68
- package/src/lib/shared/producerKey.ts +0 -32
- package/src/lib/shared/programNameForPackage.ts +0 -16
- package/src/lib/shared/promptNameForFile.ts +0 -10
- package/src/lib/shared/queryStringFromArgs.ts +0 -38
- package/src/lib/shared/randomHexId.ts +0 -14
- package/src/lib/shared/reachable.ts +0 -99
- package/src/lib/shared/readEnvFile.ts +0 -15
- package/src/lib/shared/readLastConnection.ts +0 -18
- package/src/lib/shared/readPackageJson.ts +0 -9
- package/src/lib/shared/recordRemoteMeta.ts +0 -5
- package/src/lib/shared/refresh.ts +0 -39
- package/src/lib/shared/refreshing.ts +0 -37
- package/src/lib/shared/remoteMetaStore.ts +0 -16
- package/src/lib/shared/requestScopeSlot.ts +0 -13
- package/src/lib/shared/resolveClientFlags.ts +0 -20
- package/src/lib/shared/resolvedCellsSlot.ts +0 -13
- package/src/lib/shared/responseBodyKind.ts +0 -35
- package/src/lib/shared/responseErrorText.ts +0 -9
- package/src/lib/shared/reviveWireField.ts +0 -49
- package/src/lib/shared/reviveWireOutput.ts +0 -36
- package/src/lib/shared/routeParamsShape.ts +0 -20
- package/src/lib/shared/rpcErrorRegistry.ts +0 -69
- package/src/lib/shared/rpcServerForRoot.ts +0 -25
- package/src/lib/shared/rpcTimeoutSlot.ts +0 -9
- package/src/lib/shared/rpcUrlForFile.ts +0 -19
- package/src/lib/shared/runningAsStandaloneBinary.ts +0 -13
- package/src/lib/shared/safeJsonForScript.ts +0 -17
- package/src/lib/shared/scanPages.ts +0 -25
- package/src/lib/shared/selectorMatcher.ts +0 -55
- package/src/lib/shared/selectorPrefix.ts +0 -32
- package/src/lib/shared/serializeEnv.ts +0 -30
- package/src/lib/shared/serializeSelector.ts +0 -69
- package/src/lib/shared/setAppName.ts +0 -5
- package/src/lib/shared/setOwnProperty.ts +0 -19
- package/src/lib/shared/setsIntersect.ts +0 -15
- package/src/lib/shared/sharedCacheStore.ts +0 -14
- package/src/lib/shared/sharedCacheStoreSlot.ts +0 -10
- package/src/lib/shared/skipNonCode.ts +0 -230
- package/src/lib/shared/snapshotShippable.ts +0 -23
- package/src/lib/shared/snippet.ts +0 -30
- package/src/lib/shared/socketNameForFile.ts +0 -11
- package/src/lib/shared/socketTailsSlot.ts +0 -13
- package/src/lib/shared/socketTapSlot.ts +0 -12
- package/src/lib/shared/sseErrorFrame.ts +0 -29
- package/src/lib/shared/streamResponse.ts +0 -180
- package/src/lib/shared/streamedCellsSlot.ts +0 -14
- package/src/lib/shared/stripImport.ts +0 -29
- package/src/lib/shared/subscribableFromResponse.ts +0 -51
- package/src/lib/shared/subscribableProbes.ts +0 -111
- package/src/lib/shared/tailProbeSlot.ts +0 -23
- package/src/lib/shared/toTagSet.ts +0 -4
- package/src/lib/shared/trace.ts +0 -16
- package/src/lib/shared/types/AmendApply.ts +0 -15
- package/src/lib/shared/types/AsyncComputed.ts +0 -20
- package/src/lib/shared/types/AsyncState.ts +0 -13
- package/src/lib/shared/types/CacheEntry.ts +0 -100
- package/src/lib/shared/types/CacheInvalidation.ts +0 -9
- package/src/lib/shared/types/CacheOnContext.ts +0 -15
- package/src/lib/shared/types/CacheOptions.ts +0 -53
- package/src/lib/shared/types/CachePolicy.ts +0 -31
- package/src/lib/shared/types/CacheReaderHook.ts +0 -11
- package/src/lib/shared/types/CacheSelector.ts +0 -17
- package/src/lib/shared/types/CacheSnapshotEntry.ts +0 -32
- package/src/lib/shared/types/CacheStalenessApply.ts +0 -13
- package/src/lib/shared/types/CacheStalenessFrame.ts +0 -24
- package/src/lib/shared/types/CacheStats.ts +0 -13
- package/src/lib/shared/types/CacheStore.ts +0 -45
- package/src/lib/shared/types/ChannelLog.ts +0 -13
- package/src/lib/shared/types/ClientFlags.ts +0 -13
- package/src/lib/shared/types/CompileTarget.ts +0 -6
- package/src/lib/shared/types/DebugGate.ts +0 -10
- package/src/lib/shared/types/DocSnapshots.ts +0 -12
- package/src/lib/shared/types/ErrorJsonSchemas.ts +0 -8
- package/src/lib/shared/types/ErrorSpec.ts +0 -11
- package/src/lib/shared/types/FrameworkLog.ts +0 -13
- package/src/lib/shared/types/HttpMethod.ts +0 -3
- package/src/lib/shared/types/InputCoercion.ts +0 -17
- package/src/lib/shared/types/LastConnection.ts +0 -9
- package/src/lib/shared/types/Log.ts +0 -13
- package/src/lib/shared/types/LogRecord.ts +0 -42
- package/src/lib/shared/types/LogVoice.ts +0 -7
- package/src/lib/shared/types/NamedAsyncIterable.ts +0 -26
- package/src/lib/shared/types/OutputWirePlan.ts +0 -17
- package/src/lib/shared/types/PageSnapshot.ts +0 -14
- package/src/lib/shared/types/PagesScan.ts +0 -7
- package/src/lib/shared/types/PendingAsyncCells.ts +0 -10
- package/src/lib/shared/types/PromptArgument.ts +0 -12
- package/src/lib/shared/types/RawRemoteFunction.ts +0 -20
- package/src/lib/shared/types/RemoteCallable.ts +0 -40
- package/src/lib/shared/types/RemoteFunction.ts +0 -116
- package/src/lib/shared/types/ReplayableMethod.ts +0 -7
- package/src/lib/shared/types/RequestScopeInfo.ts +0 -16
- package/src/lib/shared/types/ResolvedCells.ts +0 -11
- package/src/lib/shared/types/ResolverSlot.ts +0 -13
- package/src/lib/shared/types/ReturnBody.ts +0 -15
- package/src/lib/shared/types/RpcBuildStamps.ts +0 -32
- package/src/lib/shared/types/RpcError.ts +0 -26
- package/src/lib/shared/types/RpcErrorGuard.ts +0 -35
- package/src/lib/shared/types/RpcInvoker.ts +0 -6
- package/src/lib/shared/types/RpcOptions.ts +0 -22
- package/src/lib/shared/types/Socket.ts +0 -54
- package/src/lib/shared/types/SocketChannel.ts +0 -17
- package/src/lib/shared/types/SocketClientFrame.ts +0 -19
- package/src/lib/shared/types/SocketServerFrame.ts +0 -24
- package/src/lib/shared/types/SocketSubCallbacks.ts +0 -13
- package/src/lib/shared/types/SocketTails.ts +0 -13
- package/src/lib/shared/types/SourceMap.ts +0 -14
- package/src/lib/shared/types/SsrBootState.ts +0 -27
- package/src/lib/shared/types/SsrPayload.ts +0 -36
- package/src/lib/shared/types/StandardSchemaV1.ts +0 -56
- package/src/lib/shared/types/StreamPolicy.ts +0 -11
- package/src/lib/shared/types/StreamedCells.ts +0 -19
- package/src/lib/shared/types/StreamedResolution.ts +0 -28
- package/src/lib/shared/types/TailHooks.ts +0 -13
- package/src/lib/shared/types/TraceContext.ts +0 -17
- package/src/lib/shared/types/ValidationErrorData.ts +0 -20
- package/src/lib/shared/types/WireKind.ts +0 -11
- package/src/lib/shared/url.ts +0 -141
- package/src/lib/shared/validationHttpError.ts +0 -33
- package/src/lib/shared/warmSeedKey.ts +0 -16
- package/src/lib/shared/wireJsonReplacer.ts +0 -30
- package/src/lib/shared/withBase.ts +0 -10
- package/src/lib/shared/withBaseUrl.ts +0 -17
- package/src/lib/shared/withCacheManaged.ts +0 -18
- package/src/lib/shared/withJsonSchema.ts +0 -21
- package/src/lib/shared/writeDts.ts +0 -19
- package/src/lib/shared/writeHealthDts.ts +0 -36
- package/src/lib/shared/writeLastConnection.ts +0 -13
- package/src/lib/shared/writePublicAssetsDts.ts +0 -27
- package/src/lib/shared/writeRoutesDts.ts +0 -41
- package/src/lib/shared/writeRpcDts.ts +0 -60
- package/src/lib/shared/writeTestRpcDts.ts +0 -45
- package/src/lib/shared/writeTestSocketsDts.ts +0 -34
- package/src/lib/test/assertAgentFrameConformance.ts +0 -73
- package/src/lib/test/createScriptedSurface.ts +0 -45
- package/src/lib/test/createTestApp.ts +0 -242
- package/src/lib/test/createTestSocketChannel.ts +0 -85
- package/src/lib/ui/README.md +0 -86
- package/src/lib/ui/activePendingCells.ts +0 -14
- package/src/lib/ui/amendReaderHook.ts +0 -125
- package/src/lib/ui/compile/ABIDE_SEMANTIC_TOKENS_LEGEND.ts +0 -79
- package/src/lib/ui/compile/AbideCompileError.ts +0 -16
- package/src/lib/ui/compile/BLOCK_KEYWORDS.ts +0 -21
- package/src/lib/ui/compile/SSR_ESCAPE.ts +0 -40
- package/src/lib/ui/compile/TS_PRINTER.ts +0 -7
- package/src/lib/ui/compile/UI_RUNTIME_IMPORTS.ts +0 -86
- package/src/lib/ui/compile/VOID_TAGS.ts +0 -22
- package/src/lib/ui/compile/abideUiPlugin.ts +0 -109
- package/src/lib/ui/compile/analyzeComponent.ts +0 -222
- package/src/lib/ui/compile/asOutlet.ts +0 -30
- package/src/lib/ui/compile/assertTranspiles.ts +0 -19
- package/src/lib/ui/compile/assetModulesFile.ts +0 -32
- package/src/lib/ui/compile/assignmentTargetNames.ts +0 -54
- package/src/lib/ui/compile/asyncInterpolationFields.ts +0 -152
- package/src/lib/ui/compile/asyncValuePositionError.ts +0 -21
- package/src/lib/ui/compile/asyncValuePositionInterpolations.ts +0 -64
- package/src/lib/ui/compile/attrLiftPosition.ts +0 -18
- package/src/lib/ui/compile/awaitPlan.ts +0 -60
- package/src/lib/ui/compile/awaitSubjectExpr.ts +0 -23
- package/src/lib/ui/compile/bindListenEvent.ts +0 -18
- package/src/lib/ui/compile/cachedShadowProgram.ts +0 -39
- package/src/lib/ui/compile/cachedSourceFile.ts +0 -40
- package/src/lib/ui/compile/catchBinding.ts +0 -10
- package/src/lib/ui/compile/classStyleMergePlan.ts +0 -108
- package/src/lib/ui/compile/classifyInterpolationType.ts +0 -46
- package/src/lib/ui/compile/collectAbideDiagnostics.ts +0 -166
- package/src/lib/ui/compile/compileComponent.ts +0 -46
- package/src/lib/ui/compile/compileModule.ts +0 -306
- package/src/lib/ui/compile/compileSSR.ts +0 -119
- package/src/lib/ui/compile/compileShadow.ts +0 -1326
- package/src/lib/ui/compile/componentOrdinals.ts +0 -39
- package/src/lib/ui/compile/composeProps.ts +0 -64
- package/src/lib/ui/compile/createShadowLanguageService.ts +0 -348
- package/src/lib/ui/compile/createShadowProgram.ts +0 -127
- package/src/lib/ui/compile/createShadowScope.ts +0 -42
- package/src/lib/ui/compile/declaredNames.ts +0 -36
- package/src/lib/ui/compile/decodeHtmlEntities.ts +0 -53
- package/src/lib/ui/compile/destructureBindingNames.ts +0 -38
- package/src/lib/ui/compile/desugarSignals.ts +0 -1113
- package/src/lib/ui/compile/eachPlan.ts +0 -61
- package/src/lib/ui/compile/elementPlan.ts +0 -55
- package/src/lib/ui/compile/encodeSemanticTokens.ts +0 -60
- package/src/lib/ui/compile/expressionIsPrefixEvaluable.ts +0 -19
- package/src/lib/ui/compile/generateBuild.ts +0 -903
- package/src/lib/ui/compile/generateSSR.ts +0 -973
- package/src/lib/ui/compile/groupBindParts.ts +0 -28
- package/src/lib/ui/compile/hasTopLevelAwait.ts +0 -28
- package/src/lib/ui/compile/hoistCells.ts +0 -120
- package/src/lib/ui/compile/hoistableAwaits.ts +0 -183
- package/src/lib/ui/compile/hoistableChildRenders.ts +0 -112
- package/src/lib/ui/compile/identifierReferencePattern.ts +0 -13
- package/src/lib/ui/compile/ifPlan.ts +0 -36
- package/src/lib/ui/compile/interpolatedTemplateLiteral.ts +0 -27
- package/src/lib/ui/compile/interpolationClassifierForRoot.ts +0 -32
- package/src/lib/ui/compile/isAnchorPositioned.ts +0 -19
- package/src/lib/ui/compile/isControlFlow.ts +0 -20
- package/src/lib/ui/compile/isFunctionScopeBoundary.ts +0 -20
- package/src/lib/ui/compile/isPlainIdentifier.ts +0 -7
- package/src/lib/ui/compile/isSpuriousAsyncReadDiagnostic.ts +0 -215
- package/src/lib/ui/compile/isTextLeaf.ts +0 -16
- package/src/lib/ui/compile/isWhitespaceText.ts +0 -19
- package/src/lib/ui/compile/liftAsyncSubExpressions.ts +0 -166
- package/src/lib/ui/compile/liftScriptSeed.ts +0 -47
- package/src/lib/ui/compile/loadShadowTsConfig.ts +0 -31
- package/src/lib/ui/compile/lowerAsyncInterpolations.ts +0 -92
- package/src/lib/ui/compile/lowerCompoundAssignment.ts +0 -49
- package/src/lib/ui/compile/lowerContext.ts +0 -167
- package/src/lib/ui/compile/lowerDocAccess.ts +0 -302
- package/src/lib/ui/compile/lowerScript.ts +0 -190
- package/src/lib/ui/compile/lowerUpdateExpression.ts +0 -32
- package/src/lib/ui/compile/makeVarNamer.ts +0 -10
- package/src/lib/ui/compile/nearestProjectRoot.ts +0 -16
- package/src/lib/ui/compile/nodeAtShadowOffset.ts +0 -28
- package/src/lib/ui/compile/offsetToLineColumn.ts +0 -16
- package/src/lib/ui/compile/offsetToPosition.ts +0 -9
- package/src/lib/ui/compile/pagePropsType.ts +0 -23
- package/src/lib/ui/compile/parseTemplate.ts +0 -25
- package/src/lib/ui/compile/parseTemplateRecovering.ts +0 -1385
- package/src/lib/ui/compile/prepareNestedScript.ts +0 -62
- package/src/lib/ui/compile/reactiveBinding.ts +0 -47
- package/src/lib/ui/compile/referencedIdentifiers.ts +0 -35
- package/src/lib/ui/compile/remapShadowDiagnostic.ts +0 -30
- package/src/lib/ui/compile/renameSignalRefs.ts +0 -425
- package/src/lib/ui/compile/resolveAbideImports.ts +0 -29
- package/src/lib/ui/compile/resolveBranches.ts +0 -21
- package/src/lib/ui/compile/resolveReactiveExport.ts +0 -92
- package/src/lib/ui/compile/scopeAttr.ts +0 -9
- package/src/lib/ui/compile/scopeCss.ts +0 -138
- package/src/lib/ui/compile/seedTypeClassifierForRoot.ts +0 -60
- package/src/lib/ui/compile/shadowInterpolationClassifier.ts +0 -47
- package/src/lib/ui/compile/shadowNaming.ts +0 -11
- package/src/lib/ui/compile/signalCallee.ts +0 -24
- package/src/lib/ui/compile/skeletonContext.ts +0 -133
- package/src/lib/ui/compile/skeletonable.ts +0 -68
- package/src/lib/ui/compile/snippetPlan.ts +0 -28
- package/src/lib/ui/compile/sourceFileOptionsSignature.ts +0 -20
- package/src/lib/ui/compile/sourceToShadowOffset.ts +0 -24
- package/src/lib/ui/compile/spreadExcludedNames.ts +0 -27
- package/src/lib/ui/compile/staticAttr.ts +0 -11
- package/src/lib/ui/compile/staticAttrValue.ts +0 -13
- package/src/lib/ui/compile/staticTextPart.ts +0 -12
- package/src/lib/ui/compile/stripEffects.ts +0 -48
- package/src/lib/ui/compile/structuralHeadTokens.ts +0 -107
- package/src/lib/ui/compile/switchPlan.ts +0 -28
- package/src/lib/ui/compile/templateAnchorAdapter.ts +0 -61
- package/src/lib/ui/compile/templateElementAdapter.ts +0 -44
- package/src/lib/ui/compile/templateSemanticTokens.ts +0 -21
- package/src/lib/ui/compile/templateStartOffset.ts +0 -15
- package/src/lib/ui/compile/tryPlan.ts +0 -37
- package/src/lib/ui/compile/types/AbideDiagnostic.ts +0 -14
- package/src/lib/ui/compile/types/AnalyzedComponent.ts +0 -42
- package/src/lib/ui/compile/types/AsyncInterpolationField.ts +0 -19
- package/src/lib/ui/compile/types/Binding.ts +0 -24
- package/src/lib/ui/compile/types/CompiledShadow.ts +0 -27
- package/src/lib/ui/compile/types/ElementPlan.ts +0 -43
- package/src/lib/ui/compile/types/InterpolationClassifier.ts +0 -12
- package/src/lib/ui/compile/types/InterpolationKind.ts +0 -7
- package/src/lib/ui/compile/types/ParseDiagnostic.ts +0 -8
- package/src/lib/ui/compile/types/SeedTypeClassifier.ts +0 -15
- package/src/lib/ui/compile/types/SemanticToken.ts +0 -11
- package/src/lib/ui/compile/types/ShadowKind.ts +0 -9
- package/src/lib/ui/compile/types/ShadowScope.ts +0 -19
- package/src/lib/ui/compile/types/SkeletonContext.ts +0 -21
- package/src/lib/ui/compile/types/TemplateAttr.ts +0 -34
- package/src/lib/ui/compile/types/TemplateNode.ts +0 -137
- package/src/lib/ui/compile/types/TextPart.ts +0 -8
- package/src/lib/ui/compile/types/ValuePositionInterpolation.ts +0 -13
- package/src/lib/ui/compile/unwrapParens.ts +0 -10
- package/src/lib/ui/compile/walkAnchorOrder.ts +0 -57
- package/src/lib/ui/compile/walkElementOrder.ts +0 -60
- package/src/lib/ui/compile/withBindings.ts +0 -45
- package/src/lib/ui/compile/wrapReactionCellSources.ts +0 -121
- package/src/lib/ui/compile/wrapReactiveSeeds.ts +0 -44
- package/src/lib/ui/compile/wrapSeed.ts +0 -28
- package/src/lib/ui/compile/writtenTemplateNames.ts +0 -84
- package/src/lib/ui/computed.ts +0 -75
- package/src/lib/ui/createScope.ts +0 -157
- package/src/lib/ui/dom/MATHML_NAMESPACE.ts +0 -6
- package/src/lib/ui/dom/SVG_NAMESPACE.ts +0 -8
- package/src/lib/ui/dom/adoptRange.ts +0 -27
- package/src/lib/ui/dom/anchorCursor.ts +0 -25
- package/src/lib/ui/dom/anchoredBranch.ts +0 -153
- package/src/lib/ui/dom/appendSnippet.ts +0 -75
- package/src/lib/ui/dom/appendStatic.ts +0 -26
- package/src/lib/ui/dom/appendText.ts +0 -160
- package/src/lib/ui/dom/appendTextAt.ts +0 -39
- package/src/lib/ui/dom/assertClaimedText.ts +0 -30
- package/src/lib/ui/dom/attach.ts +0 -25
- package/src/lib/ui/dom/attr.ts +0 -57
- package/src/lib/ui/dom/awaitBlock.ts +0 -314
- package/src/lib/ui/dom/awaitSubject.ts +0 -118
- package/src/lib/ui/dom/bindProp.ts +0 -22
- package/src/lib/ui/dom/bindSelectValue.ts +0 -48
- package/src/lib/ui/dom/bindableProp.ts +0 -47
- package/src/lib/ui/dom/buildDetachedRange.ts +0 -31
- package/src/lib/ui/dom/cellPending.ts +0 -24
- package/src/lib/ui/dom/claimText.ts +0 -38
- package/src/lib/ui/dom/clearBetween.ts +0 -16
- package/src/lib/ui/dom/cloneStatic.ts +0 -69
- package/src/lib/ui/dom/commentData.ts +0 -14
- package/src/lib/ui/dom/depthZeroNodes.ts +0 -34
- package/src/lib/ui/dom/discardAndRebuild.ts +0 -23
- package/src/lib/ui/dom/discardBoundary.ts +0 -46
- package/src/lib/ui/dom/disposeRange.ts +0 -18
- package/src/lib/ui/dom/domAnchorAdapter.ts +0 -29
- package/src/lib/ui/dom/domElementAdapter.ts +0 -20
- package/src/lib/ui/dom/each.ts +0 -253
- package/src/lib/ui/dom/eachAsync.ts +0 -188
- package/src/lib/ui/dom/effectiveChildNamespace.ts +0 -13
- package/src/lib/ui/dom/enterNamespace.ts +0 -20
- package/src/lib/ui/dom/fillBefore.ts +0 -42
- package/src/lib/ui/dom/fillBoundary.ts +0 -38
- package/src/lib/ui/dom/fillRange.ts +0 -30
- package/src/lib/ui/dom/foreignWrapperTag.ts +0 -22
- package/src/lib/ui/dom/hydrate.ts +0 -34
- package/src/lib/ui/dom/inheritedNamespace.ts +0 -19
- package/src/lib/ui/dom/isComment.ts +0 -6
- package/src/lib/ui/dom/isElement.ts +0 -6
- package/src/lib/ui/dom/markerDepthDelta.ts +0 -19
- package/src/lib/ui/dom/matchingRangeClose.ts +0 -29
- package/src/lib/ui/dom/mergeProps.ts +0 -32
- package/src/lib/ui/dom/mount.ts +0 -30
- package/src/lib/ui/dom/mountChild.ts +0 -129
- package/src/lib/ui/dom/mountRange.ts +0 -48
- package/src/lib/ui/dom/mountSlot.ts +0 -38
- package/src/lib/ui/dom/mountSwappableRange.ts +0 -122
- package/src/lib/ui/dom/moveRange.ts +0 -19
- package/src/lib/ui/dom/mutateDocContainer.ts +0 -65
- package/src/lib/ui/dom/on.ts +0 -33
- package/src/lib/ui/dom/openMarker.ts +0 -22
- package/src/lib/ui/dom/outlet.ts +0 -63
- package/src/lib/ui/dom/parseRawNodes.ts +0 -17
- package/src/lib/ui/dom/readCall.ts +0 -29
- package/src/lib/ui/dom/readCell.ts +0 -55
- package/src/lib/ui/dom/readTextOrSuspend.ts +0 -21
- package/src/lib/ui/dom/removeRange.ts +0 -18
- package/src/lib/ui/dom/replaceRange.ts +0 -24
- package/src/lib/ui/dom/restProps.ts +0 -32
- package/src/lib/ui/dom/skeleton.ts +0 -153
- package/src/lib/ui/dom/spreadAttrs.ts +0 -95
- package/src/lib/ui/dom/spreadProps.ts +0 -31
- package/src/lib/ui/dom/switchBlock.ts +0 -80
- package/src/lib/ui/dom/templateFor.ts +0 -28
- package/src/lib/ui/dom/tryBlock.ts +0 -263
- package/src/lib/ui/dom/types/EachRow.ts +0 -21
- package/src/lib/ui/dom/types/SkeletonHoles.ts +0 -10
- package/src/lib/ui/dom/types/SwitchCase.ts +0 -11
- package/src/lib/ui/dom/when.ts +0 -58
- package/src/lib/ui/dom/withScope.ts +0 -37
- package/src/lib/ui/dom/withSuspense.ts +0 -22
- package/src/lib/ui/dom/writeCell.ts +0 -22
- package/src/lib/ui/effect.ts +0 -24
- package/src/lib/ui/enterScope.ts +0 -18
- package/src/lib/ui/exitScope.ts +0 -8
- package/src/lib/ui/finalizeStreamedChildren.ts +0 -88
- package/src/lib/ui/flight.ts +0 -56
- package/src/lib/ui/html.ts +0 -39
- package/src/lib/ui/isolateCellBarrier.ts +0 -17
- package/src/lib/ui/linked.ts +0 -125
- package/src/lib/ui/navigate.ts +0 -77
- package/src/lib/ui/probeNavigation.ts +0 -33
- package/src/lib/ui/props.ts +0 -17
- package/src/lib/ui/remoteProxy.ts +0 -256
- package/src/lib/ui/renderChain.ts +0 -113
- package/src/lib/ui/renderToStream.ts +0 -128
- package/src/lib/ui/resumeSeedScript.ts +0 -27
- package/src/lib/ui/router.ts +0 -649
- package/src/lib/ui/runtime/AsyncCellError.ts +0 -21
- package/src/lib/ui/runtime/BRANCH_SEGMENT.ts +0 -24
- package/src/lib/ui/runtime/CELL_SEED.ts +0 -12
- package/src/lib/ui/runtime/CHILD_PRESENT.ts +0 -8
- package/src/lib/ui/runtime/CURRENT_BOUNDARY.ts +0 -11
- package/src/lib/ui/runtime/CURRENT_PATH.ts +0 -29
- package/src/lib/ui/runtime/CURRENT_SCOPE.ts +0 -23
- package/src/lib/ui/runtime/DOC_SEED.ts +0 -10
- package/src/lib/ui/runtime/HOLE_ATTRIBUTE.ts +0 -9
- package/src/lib/ui/runtime/NODE_STATE.ts +0 -22
- package/src/lib/ui/runtime/OUTLET_MARKER.ts +0 -10
- package/src/lib/ui/runtime/OUTLET_TAG.ts +0 -7
- package/src/lib/ui/runtime/OWNER.ts +0 -8
- package/src/lib/ui/runtime/PENDING_OUTLET.ts +0 -8
- package/src/lib/ui/runtime/RANGE_MARKER.ts +0 -18
- package/src/lib/ui/runtime/REACTIVE_CONTEXT.ts +0 -20
- package/src/lib/ui/runtime/RENDER.ts +0 -35
- package/src/lib/ui/runtime/REQUEST_SUPERSEDED.ts +0 -8
- package/src/lib/ui/runtime/RESUME.ts +0 -21
- package/src/lib/ui/runtime/SEED_MARKS.ts +0 -14
- package/src/lib/ui/runtime/STREAMED_CELLS.ts +0 -57
- package/src/lib/ui/runtime/SuspenseSignal.ts +0 -24
- package/src/lib/ui/runtime/abortNode.ts +0 -22
- package/src/lib/ui/runtime/ambientPathBacking.ts +0 -32
- package/src/lib/ui/runtime/ambientScopeBacking.ts +0 -26
- package/src/lib/ui/runtime/applyPatchToTree.ts +0 -54
- package/src/lib/ui/runtime/batch.ts +0 -22
- package/src/lib/ui/runtime/blockId.ts +0 -31
- package/src/lib/ui/runtime/boundaryFor.ts +0 -11
- package/src/lib/ui/runtime/cellBarrierBacking.ts +0 -30
- package/src/lib/ui/runtime/claimChild.ts +0 -8
- package/src/lib/ui/runtime/claimExpected.ts +0 -27
- package/src/lib/ui/runtime/claimMarker.ts +0 -13
- package/src/lib/ui/runtime/claimRun.ts +0 -22
- package/src/lib/ui/runtime/clientPage.ts +0 -116
- package/src/lib/ui/runtime/consumeSeed.ts +0 -38
- package/src/lib/ui/runtime/createAsyncCell.ts +0 -358
- package/src/lib/ui/runtime/createComputedNode.ts +0 -19
- package/src/lib/ui/runtime/createDoc.ts +0 -334
- package/src/lib/ui/runtime/createEffectNode.ts +0 -81
- package/src/lib/ui/runtime/createSignalNode.ts +0 -19
- package/src/lib/ui/runtime/currentAbortSignal.ts +0 -26
- package/src/lib/ui/runtime/detachLink.ts +0 -21
- package/src/lib/ui/runtime/endTracking.ts +0 -24
- package/src/lib/ui/runtime/enterRenderPass.ts +0 -13
- package/src/lib/ui/runtime/escapeKey.ts +0 -19
- package/src/lib/ui/runtime/exitRenderPass.ts +0 -7
- package/src/lib/ui/runtime/flushEffects.ts +0 -91
- package/src/lib/ui/runtime/generationGuard.ts +0 -40
- package/src/lib/ui/runtime/historyEntries.ts +0 -151
- package/src/lib/ui/runtime/inScope.ts +0 -19
- package/src/lib/ui/runtime/isAsyncFunction.ts +0 -14
- package/src/lib/ui/runtime/nextBlockId.ts +0 -12
- package/src/lib/ui/runtime/parkCursor.ts +0 -10
- package/src/lib/ui/runtime/pathSegments.ts +0 -10
- package/src/lib/ui/runtime/reactiveAbortState.ts +0 -15
- package/src/lib/ui/runtime/readNode.ts +0 -38
- package/src/lib/ui/runtime/renderPath.ts +0 -16
- package/src/lib/ui/runtime/reportHydrationDivergence.ts +0 -30
- package/src/lib/ui/runtime/routeBareSeed.ts +0 -28
- package/src/lib/ui/runtime/runHydrationPass.ts +0 -69
- package/src/lib/ui/runtime/runNode.ts +0 -75
- package/src/lib/ui/runtime/runtimePath.ts +0 -9
- package/src/lib/ui/runtime/scope.ts +0 -46
- package/src/lib/ui/runtime/scopeGroup.ts +0 -40
- package/src/lib/ui/runtime/toTeardown.ts +0 -38
- package/src/lib/ui/runtime/track.ts +0 -60
- package/src/lib/ui/runtime/trigger.ts +0 -74
- package/src/lib/ui/runtime/types/AbideHistoryState.ts +0 -9
- package/src/lib/ui/runtime/types/Boundary.ts +0 -9
- package/src/lib/ui/runtime/types/Cell.ts +0 -7
- package/src/lib/ui/runtime/types/Computed.ts +0 -3
- package/src/lib/ui/runtime/types/Doc.ts +0 -24
- package/src/lib/ui/runtime/types/EffectResult.ts +0 -10
- package/src/lib/ui/runtime/types/HydrationCursor.ts +0 -8
- package/src/lib/ui/runtime/types/NavVerdict.ts +0 -9
- package/src/lib/ui/runtime/types/Patch.ts +0 -11
- package/src/lib/ui/runtime/types/PathWalk.ts +0 -10
- package/src/lib/ui/runtime/types/ReactiveLink.ts +0 -21
- package/src/lib/ui/runtime/types/ReactiveNode.ts +0 -33
- package/src/lib/ui/runtime/types/RenderContext.ts +0 -10
- package/src/lib/ui/runtime/types/Route.ts +0 -9
- package/src/lib/ui/runtime/types/RouteLoader.ts +0 -7
- package/src/lib/ui/runtime/types/SsrRender.ts +0 -34
- package/src/lib/ui/runtime/types/State.ts +0 -3
- package/src/lib/ui/runtime/types/Teardown.ts +0 -5
- package/src/lib/ui/runtime/types/UiComponent.ts +0 -24
- package/src/lib/ui/runtime/types/UiProps.ts +0 -12
- package/src/lib/ui/runtime/unescapeKey.ts +0 -12
- package/src/lib/ui/runtime/unlinkDeps.ts +0 -28
- package/src/lib/ui/runtime/untrack.ts +0 -20
- package/src/lib/ui/runtime/updateIfNecessary.ts +0 -40
- package/src/lib/ui/runtime/walkPath.ts +0 -41
- package/src/lib/ui/runtime/withOptionalPath.ts +0 -8
- package/src/lib/ui/runtime/withPath.ts +0 -16
- package/src/lib/ui/runtime/withPathFrom.ts +0 -20
- package/src/lib/ui/runtime/withoutHydration.ts +0 -22
- package/src/lib/ui/runtime/writeNode.ts +0 -16
- package/src/lib/ui/scope.ts +0 -20
- package/src/lib/ui/seedBootState.ts +0 -53
- package/src/lib/ui/seedStreamedResolution.ts +0 -56
- package/src/lib/ui/settleAsyncCells.ts +0 -51
- package/src/lib/ui/socketChannel.ts +0 -156
- package/src/lib/ui/socketProxy.ts +0 -47
- package/src/lib/ui/startClient.ts +0 -156
- package/src/lib/ui/state.ts +0 -77
- package/src/lib/ui/subscribeCacheStaleness.ts +0 -85
- package/src/lib/ui/trackedComputed.ts +0 -68
- package/src/lib/ui/tryEncodeResume.ts +0 -11
- package/src/lib/ui/types/Layouts.ts +0 -9
- package/src/lib/ui/types/Pages.ts +0 -8
- package/src/lib/ui/types/Scope.ts +0 -68
- package/src/lib/ui/watch.ts +0 -150
- package/src/preload.ts +0 -19
- package/src/scaffold.ts +0 -153
- package/src/serverBuildPlugins.ts +0 -25
- package/src/serverEntry.ts +0 -138
- package/src/zodCjsPlugin.ts +0 -51
- package/template/.zed/settings.json +0 -10
- package/template/CLAUDE.md +0 -22
- package/template/bunfig.toml +0 -4
- package/template/package.json +0 -21
- package/template/src/app.ts +0 -28
- package/template/src/bundle/icon.png +0 -0
- package/template/src/cli/banner.txt +0 -3
- package/template/src/cli/footer.txt +0 -1
- package/template/src/server/config.ts +0 -17
- package/template/src/server/rpc/getHello.ts +0 -38
- package/template/src/ui/app.css +0 -21
- package/template/src/ui/app.html +0 -24
- package/template/src/ui/pages/about/page.abide +0 -7
- package/template/src/ui/pages/layout.abide +0 -19
- package/template/src/ui/pages/page.abide +0 -19
- package/template/test/app.test.ts +0 -30
- package/template/tsconfig.json +0 -18
- package/tsconfig.app.json +0 -17
|
@@ -1,973 +0,0 @@
|
|
|
1
|
-
import { assertExhaustive } from '../../shared/assertExhaustive.ts'
|
|
2
|
-
import { escapeRegex } from '../../shared/escapeRegex.ts'
|
|
3
|
-
import { caseSegment, ELSE_SEGMENT, THEN_SEGMENT } from '../runtime/BRANCH_SEGMENT.ts'
|
|
4
|
-
import { OUTLET_CLOSE, OUTLET_OPEN } from '../runtime/OUTLET_MARKER.ts'
|
|
5
|
-
import { OUTLET_TAG } from '../runtime/OUTLET_TAG.ts'
|
|
6
|
-
import {
|
|
7
|
-
ANCHOR,
|
|
8
|
-
RANGE_CLOSE as RANGE_CLOSE_DATA,
|
|
9
|
-
RANGE_OPEN as RANGE_OPEN_DATA,
|
|
10
|
-
} from '../runtime/RANGE_MARKER.ts'
|
|
11
|
-
import { asOutlet } from './asOutlet.ts'
|
|
12
|
-
import { awaitPlan } from './awaitPlan.ts'
|
|
13
|
-
import { awaitSubjectExpr } from './awaitSubjectExpr.ts'
|
|
14
|
-
import { componentOrdinals } from './componentOrdinals.ts'
|
|
15
|
-
import { composeProps } from './composeProps.ts'
|
|
16
|
-
import { eachPlan } from './eachPlan.ts'
|
|
17
|
-
import { elementPlan } from './elementPlan.ts'
|
|
18
|
-
import { groupBindParts } from './groupBindParts.ts'
|
|
19
|
-
import { hoistableAwaits } from './hoistableAwaits.ts'
|
|
20
|
-
import { hoistableChildRenders } from './hoistableChildRenders.ts'
|
|
21
|
-
import { ifPlan } from './ifPlan.ts'
|
|
22
|
-
import { interpolatedTemplateLiteral } from './interpolatedTemplateLiteral.ts'
|
|
23
|
-
import { isAnchorPositioned } from './isAnchorPositioned.ts'
|
|
24
|
-
import { lowerContext } from './lowerContext.ts'
|
|
25
|
-
import { makeVarNamer } from './makeVarNamer.ts'
|
|
26
|
-
import { scopeAttr } from './scopeAttr.ts'
|
|
27
|
-
import { skeletonContext } from './skeletonContext.ts'
|
|
28
|
-
import { snippetPlan } from './snippetPlan.ts'
|
|
29
|
-
import { spreadExcludedNames } from './spreadExcludedNames.ts'
|
|
30
|
-
import { staticAttr } from './staticAttr.ts'
|
|
31
|
-
import { staticAttrValue } from './staticAttrValue.ts'
|
|
32
|
-
import { staticTextPart } from './staticTextPart.ts'
|
|
33
|
-
import { stripEffects } from './stripEffects.ts'
|
|
34
|
-
import { switchPlan } from './switchPlan.ts'
|
|
35
|
-
import { tryPlan } from './tryPlan.ts'
|
|
36
|
-
import type { Binding } from './types/Binding.ts'
|
|
37
|
-
import type { ShadowKind } from './types/ShadowKind.ts'
|
|
38
|
-
import type { TemplateNode } from './types/TemplateNode.ts'
|
|
39
|
-
import { withBindings } from './withBindings.ts'
|
|
40
|
-
|
|
41
|
-
/* The range boundary comments a control-flow block emits around its content. Sourced
|
|
42
|
-
from the SAME wire-alphabet constants the client's `document.createComment` markers
|
|
43
|
-
use (`RANGE_MARKER`), wrapped in comment syntax — so a server-emitted boundary and the
|
|
44
|
-
client `[ … ]` boundary it claims can never drift on a literal. */
|
|
45
|
-
const RANGE_OPEN = `<!--${RANGE_OPEN_DATA}-->`
|
|
46
|
-
const RANGE_CLOSE = `<!--${RANGE_CLOSE_DATA}-->`
|
|
47
|
-
|
|
48
|
-
/* The skeleton positioning anchor a control-flow block / slot / outlet emits, sourced
|
|
49
|
-
from the same `ANCHOR` constant the client's anchor scan matches. */
|
|
50
|
-
const ANCHOR_COMMENT = `<!--${ANCHOR}-->`
|
|
51
|
-
|
|
52
|
-
/*
|
|
53
|
-
Server code generator: turns the parsed template into statements that push HTML
|
|
54
|
-
fragments onto an output array, reading the document synchronously (no DOM, no
|
|
55
|
-
listeners). Same expression lowering as the client back-end, so server and client
|
|
56
|
-
render the same markup. Dynamic values go through `$esc`; `if` is a plain `if`,
|
|
57
|
-
`each` a `for…of`.
|
|
58
|
-
|
|
59
|
-
An `await` block emits boundary comments (`<!--abide:await:N-->…<!--/abide:await:N-->`).
|
|
60
|
-
A streaming block (no `then` on the tag) puts its pending branch between the markers and
|
|
61
|
-
registers the promise + async resolved/error renderers on `$awaits`; `renderToStream`
|
|
62
|
-
flushes each resolved fragment out of order — the await-block-streams half of the cache
|
|
63
|
-
rule. A blocking block (`then` on the tag) is `await`ed INLINE at its structural position
|
|
64
|
-
and its resolved branch rendered between the markers, so the render body is async and its
|
|
65
|
-
id (`$ctx.next++`) allocates depth-first like the client; the resolved value lands in
|
|
66
|
-
`$resume`. Block ids draw from the request-local `$ctx`, shared with inlined child renders.
|
|
67
|
-
*/
|
|
68
|
-
export function generateSSR(
|
|
69
|
-
nodes: TemplateNode[],
|
|
70
|
-
stateNames: ReadonlySet<string>,
|
|
71
|
-
derivedNames: ReadonlySet<string>,
|
|
72
|
-
computedNames: ReadonlySet<string>,
|
|
73
|
-
isLayout = false,
|
|
74
|
-
/* `linked` / async `computed` names, lowered to `$$readCell(name)` in template exprs. */
|
|
75
|
-
cellReadNames: ReadonlySet<string> = new Set(),
|
|
76
|
-
): { body: string; flightDecls: string; hasStagedChildren: boolean } {
|
|
77
|
-
/* Unique temp var names (child render results); runtime block ids are
|
|
78
|
-
allocated separately at runtime via `$ctx.next++`. */
|
|
79
|
-
const nextVar = makeVarNamer()
|
|
80
|
-
|
|
81
|
-
/* The enclosing `<select bind:value>`s, innermost last: each carries the JS var holding
|
|
82
|
-
its bound value and whether it's a `multiple` (array) select, so an `<option>` rendered
|
|
83
|
-
within can emit `selected` by comparing its own value against the bound one. Pushed when
|
|
84
|
-
a bound select opens, popped after its children. */
|
|
85
|
-
const selectBinds: { variable: string; multiple: boolean }[] = []
|
|
86
|
-
|
|
87
|
-
/* The shared signal→`model` lowering + branch-scoped nested-script deref scope. */
|
|
88
|
-
const {
|
|
89
|
-
expression: lowerExpression,
|
|
90
|
-
script,
|
|
91
|
-
withNestedScripts,
|
|
92
|
-
withShadow,
|
|
93
|
-
isShadowed,
|
|
94
|
-
bindRead,
|
|
95
|
-
bindWrite,
|
|
96
|
-
} = lowerContext(stateNames, derivedNames, computedNames, cellReadNames)
|
|
97
|
-
|
|
98
|
-
/* SSR has no cells, so every plan `Binding` — `reactive` or `plain` — renders as a `plain`
|
|
99
|
-
shadow (a real JS local / loop var / arrow param, read as the bare identifier). The one
|
|
100
|
-
mapping `withBindings` registers every binding through on this back-end. */
|
|
101
|
-
const ssrBindingKind = (_binding: Binding): ShadowKind => 'plain'
|
|
102
|
-
|
|
103
|
-
/* A scoped-script body for SSR: the shared lowering, then strip effects
|
|
104
|
-
(client-only lifecycle that emits no HTML) — the one SSR-side asymmetry. */
|
|
105
|
-
const lowerScript = (code: string): string => stripEffects(script(code))
|
|
106
|
-
|
|
107
|
-
function push(target: string, literal: string): string {
|
|
108
|
-
return `${target}.push(${JSON.stringify(literal)});\n`
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/* The JS expression for an `<option>`'s value, to compare against an enclosing bound
|
|
112
|
-
`<select>`: the `value` attribute (static/expression/interpolated), else the option's
|
|
113
|
-
static text content (the browser's own fallback, whitespace-trimmed). Returns undefined
|
|
114
|
-
when the value can't be known at compile time (a dynamic-text option with no `value`
|
|
115
|
-
attr) — the client selects it on hydrate. */
|
|
116
|
-
function optionValueForSSR(
|
|
117
|
-
node: Extract<TemplateNode, { kind: 'element' }>,
|
|
118
|
-
): string | undefined {
|
|
119
|
-
const valueAttr = node.attrs.find(
|
|
120
|
-
(attr) =>
|
|
121
|
-
(attr.kind === 'static' ||
|
|
122
|
-
attr.kind === 'expression' ||
|
|
123
|
-
attr.kind === 'interpolated') &&
|
|
124
|
-
attr.name === 'value',
|
|
125
|
-
)
|
|
126
|
-
if (valueAttr !== undefined) {
|
|
127
|
-
if (valueAttr.kind === 'static') {
|
|
128
|
-
return JSON.stringify(valueAttr.value)
|
|
129
|
-
}
|
|
130
|
-
if (valueAttr.kind === 'expression') {
|
|
131
|
-
return lowerExpression(valueAttr.code)
|
|
132
|
-
}
|
|
133
|
-
if (valueAttr.kind === 'interpolated') {
|
|
134
|
-
return lowerExpression(interpolatedTemplateLiteral(valueAttr.parts))
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
let staticText = ''
|
|
138
|
-
for (const child of node.children) {
|
|
139
|
-
if (child.kind !== 'text') {
|
|
140
|
-
return undefined
|
|
141
|
-
}
|
|
142
|
-
for (const part of child.parts) {
|
|
143
|
-
if (part.kind !== 'static') {
|
|
144
|
-
return undefined
|
|
145
|
-
}
|
|
146
|
-
staticText += part.value
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
return JSON.stringify(staticText.trim())
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
function generateInto(children: TemplateNode[], target: string): string {
|
|
153
|
-
return children.map((child) => generate(child, target)).join('')
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/* In a layout, rewrite `<slot/>` outlets to `OUTLET_TAG` elements up front (the same shared
|
|
157
|
-
`asOutlet` the client back-end runs), then drive both the skeleton context and the
|
|
158
|
-
traversal from this tree — one decision site for the outlet, and the outlet emitted bare
|
|
159
|
-
through the generic element path exactly as the client clones it. */
|
|
160
|
-
const rootNodes = isLayout ? nodes.map(asOutlet) : nodes
|
|
161
|
-
|
|
162
|
-
/* Each `<Child/>` render site's render-path ordinal, from the ONE shared document-order
|
|
163
|
-
walk the client back-end also reads (`componentOrdinals`) — so both compose the same
|
|
164
|
-
cell scope ids and streamed-boundary ids regardless of either back-end's emission
|
|
165
|
-
order. The returned lookup throws on a miss (a structural divergence from the shared
|
|
166
|
-
walk), surfaced loudly at compile time. */
|
|
167
|
-
const childOrdinal = componentOrdinals(rootNodes)
|
|
168
|
-
|
|
169
|
-
/* ADR-0034: the await blocks whose promise-start hoists to the synchronous render prefix so
|
|
170
|
-
independent flights overlap instead of serializing. Server-only — this rewires only the SSR
|
|
171
|
-
promise SOURCE (a blocking `await $flightN`, a streaming `promise: () => $flightN`); the
|
|
172
|
-
block's markers, `$ctx.next++` id, RESUME wire, and the whole client build stay byte-identical.
|
|
173
|
-
The `flightDecls` are emitted by compileSSR after the lowered script and BEFORE the barrier, so
|
|
174
|
-
a hoisted flight is already in-flight while the barrier awaits any unrelated blocking cell. */
|
|
175
|
-
const flightNameByNode = new Map<Extract<TemplateNode, { kind: 'await' }>, string>()
|
|
176
|
-
for (const flight of hoistableAwaits(rootNodes, cellReadNames)) {
|
|
177
|
-
flightNameByNode.set(flight.node, flight.name)
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/* ADR-0037 Phase 2: the top-level-spine `<Child/>` renders whose start hoists to the prefix so
|
|
181
|
-
sibling renders overlap instead of serializing behind each other's `await`. The component walk
|
|
182
|
-
below emits each hoisted child's flight decl into `childFlightDecls` (with its childOrdinal and
|
|
183
|
-
lowered props computed at the SAME site as the body's `await`, so the two can't drift) and
|
|
184
|
-
awaits the flight const at the structural position. Each hoisted render starts under
|
|
185
|
-
`$$isolateCellBarrier` so its async cells drain in their own list, not a concurrent sibling's
|
|
186
|
-
(the request-scoped barrier is `splice(0)`-drained). */
|
|
187
|
-
const hoistableChildSet = hoistableChildRenders(rootNodes, cellReadNames)
|
|
188
|
-
const childFlightDecls: string[] = []
|
|
189
|
-
let childFlightCounter = 0
|
|
190
|
-
|
|
191
|
-
/* A snippet name (any identifier, `$` included) interpolated into a RegExp must have its
|
|
192
|
-
regex metacharacters escaped, or e.g. a trailing `$` would read as an end-anchor and the
|
|
193
|
-
call site would never match — leaving an un-awaited Promise stringified as `[object
|
|
194
|
-
Promise]`. */
|
|
195
|
-
/* A leading boundary that, unlike `\b`, also fires before a `$`-leading name: `\b$row`
|
|
196
|
-
never matches (`$` is a non-word char, so there is no word boundary before it), which
|
|
197
|
-
would silently miss every `$row(...)` call. A negative lookbehind for word-or-`$`
|
|
198
|
-
matches the same call sites as `\b` for word-leading names while also catching them. */
|
|
199
|
-
/* Memoised per name: the pattern is a pure function of the name but tested across the
|
|
200
|
-
fixpoint loop below (per snippet × per text part × per iteration), so recompiling the
|
|
201
|
-
RegExp each test — far costlier than the test itself — dominated the snippet scan. */
|
|
202
|
-
const callPatternCache = new Map<string, RegExp>()
|
|
203
|
-
const callPattern = (name: string): RegExp => {
|
|
204
|
-
let pattern = callPatternCache.get(name)
|
|
205
|
-
if (pattern === undefined) {
|
|
206
|
-
pattern = new RegExp(`(?<![$\\w])${escapeRegex(name)}\\s*\\(`)
|
|
207
|
-
callPatternCache.set(name, pattern)
|
|
208
|
-
}
|
|
209
|
-
return pattern
|
|
210
|
-
}
|
|
211
|
-
/* A subtree call to any of `names` from a TEXT interpolation (`name()` / `name(args)`). */
|
|
212
|
-
const subtreeCalls = (children: TemplateNode[], names: ReadonlySet<string>): boolean =>
|
|
213
|
-
children.some((child) => {
|
|
214
|
-
if (child.kind === 'text') {
|
|
215
|
-
return child.parts.some(
|
|
216
|
-
(part) =>
|
|
217
|
-
part.kind !== 'static' &&
|
|
218
|
-
[...names].some((name) => callPattern(name).test(part.code)),
|
|
219
|
-
)
|
|
220
|
-
}
|
|
221
|
-
return 'children' in child && subtreeCalls(child.children, names)
|
|
222
|
-
})
|
|
223
|
-
|
|
224
|
-
/* Snippet names whose body produces an `await`, so the snippet must be an `async function`
|
|
225
|
-
and its `{name(...)}` call sites awaited: it inlines a child component, holds an await
|
|
226
|
-
block, or emits a `{children()}` slot fill (all `await $props.$children()` in SSR) — a
|
|
227
|
-
structural scan — OR it text-calls another async snippet. The latter is a dependency
|
|
228
|
-
between snippets, so resolve it to a fixpoint — seed with the structural set, then keep
|
|
229
|
-
adding any snippet that calls an already-async one until nothing changes. */
|
|
230
|
-
const subtreeAwaits = (children: TemplateNode[]): boolean =>
|
|
231
|
-
children.some(
|
|
232
|
-
(child) =>
|
|
233
|
-
child.kind === 'component' ||
|
|
234
|
-
child.kind === 'await' ||
|
|
235
|
-
(child.kind === 'element' && child.tag === 'slot') ||
|
|
236
|
-
('children' in child && subtreeAwaits(child.children)),
|
|
237
|
-
)
|
|
238
|
-
const snippetDefs = new Map<string, TemplateNode[]>()
|
|
239
|
-
const collectSnippetDefs = (children: TemplateNode[]): void => {
|
|
240
|
-
for (const child of children) {
|
|
241
|
-
if (child.kind === 'snippet') {
|
|
242
|
-
snippetDefs.set(child.name, child.children)
|
|
243
|
-
}
|
|
244
|
-
if ('children' in child) {
|
|
245
|
-
collectSnippetDefs(child.children)
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
collectSnippetDefs(rootNodes)
|
|
250
|
-
const asyncSnippets = new Set<string>()
|
|
251
|
-
for (const [name, children] of snippetDefs) {
|
|
252
|
-
if (subtreeAwaits(children)) {
|
|
253
|
-
asyncSnippets.add(name)
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
let grew = true
|
|
257
|
-
while (grew) {
|
|
258
|
-
grew = false
|
|
259
|
-
for (const [name, children] of snippetDefs) {
|
|
260
|
-
if (!asyncSnippets.has(name) && subtreeCalls(children, asyncSnippets)) {
|
|
261
|
-
asyncSnippets.add(name)
|
|
262
|
-
grew = true
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
/* A text-part expression whose value may be a Promise, so `$text` must `await` it:
|
|
267
|
-
either it calls an async snippet declared HERE, or it CALLS a computed-backed
|
|
268
|
-
binding. The latter covers a snippet handed down as a prop and called by its prop
|
|
269
|
-
name (`{item(label)}`) — that prop lowers to a computed, so it never appears in this
|
|
270
|
-
component's own `asyncSnippets`, yet the parent's snippet body may be async and the
|
|
271
|
-
call returns a Promise (the `[object Promise]` bug). A computed READ (`{full}`) is not
|
|
272
|
-
a call, so plain interpolation stays sync; only `name(...)` on a computed is awaited. */
|
|
273
|
-
const awaitableCallNames = new Set<string>([...asyncSnippets, ...computedNames])
|
|
274
|
-
const callsAwaitable = (code: string): boolean => {
|
|
275
|
-
// The common component with no async snippet and no computed pays zero regex work.
|
|
276
|
-
if (awaitableCallNames.size === 0) {
|
|
277
|
-
return false
|
|
278
|
-
}
|
|
279
|
-
for (const name of awaitableCallNames) {
|
|
280
|
-
if (callPattern(name).test(code)) {
|
|
281
|
-
return true
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
return false
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
/* Per-node skeleton position, computed once. Both back-ends read this single source of
|
|
288
|
-
truth so their `<!--a-->` anchor placement cannot drift — the fresh-context boundaries
|
|
289
|
-
(control-flow branches, component/slot/snippet content) are enumerated there, not
|
|
290
|
-
re-tracked here as mutable state that a forgotten reset could leak past. */
|
|
291
|
-
const { inSkeleton, markText } = skeletonContext(rootNodes)
|
|
292
|
-
|
|
293
|
-
/* A control-flow branch's content, generated exactly like a normal child list so
|
|
294
|
-
a branch holds ANY content (components, text, nested blocks). `generate` emits
|
|
295
|
-
nested `<script>`s in document order; `withNestedScripts` puts their bindings in
|
|
296
|
-
scope — matching the client build, so hydration stays aligned. The caller wraps
|
|
297
|
-
it in the `[ … ]` range markers the runtime tracks (unconditionally per block,
|
|
298
|
-
so an empty/false branch still emits the boundary the client claims). The branch's
|
|
299
|
-
fresh build context is already recorded by `skeletonContext`, so its children read
|
|
300
|
-
their own (reset) position — no flag juggling here. */
|
|
301
|
-
function branchContent(children: TemplateNode[], target: string): string {
|
|
302
|
-
return withNestedScripts(children, () => generateInto(children, target))
|
|
303
|
-
}
|
|
304
|
-
const openRange = (target: string): string => push(target, RANGE_OPEN)
|
|
305
|
-
const closeRange = (target: string): string => push(target, RANGE_CLOSE)
|
|
306
|
-
|
|
307
|
-
/* Wrap a control-flow branch/row body in the render-path segment the CLIENT pushes for it (the
|
|
308
|
-
`withPathFrom`/`withPath` call the `each`/`when`/`switchBlock` dom runtimes make), so a scope
|
|
309
|
-
created inside — a nested `<Child/>`, always an inline `await` in SSR — composes the SAME
|
|
310
|
-
serialization-stable id on both sides (the warm-seed key). Emitted ONLY when the subtree can
|
|
311
|
-
create such a scope: a component render is the sole scope-creating construct in a branch/row
|
|
312
|
-
and always lowers to an inline `await`, so `subtreeAwaits` is the gate. A purely-synchronous
|
|
313
|
-
branch creates no scope, so its segment is inert — skipping the wrap keeps the static render
|
|
314
|
-
synchronous (no per-row closure/await, matching today's output byte-for-byte). `segment` is a
|
|
315
|
-
JS expression (a literal branch key, or the each row's key/index); `$$withPath` escapes it,
|
|
316
|
-
exactly like the client. The row/branch RANGE markers stay OUTSIDE this call (they create no
|
|
317
|
-
scope), so only the content composes the path — mirroring the client, where the markers are
|
|
318
|
-
built outside `withPathFrom`. */
|
|
319
|
-
const withPathBranch = (segment: string, children: TemplateNode[], target: string): string => {
|
|
320
|
-
const content = branchContent(children, target)
|
|
321
|
-
if (!subtreeAwaits(children)) {
|
|
322
|
-
return content
|
|
323
|
-
}
|
|
324
|
-
return `await $$withPath(${segment}, async () => {\n${content}});\n`
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
/* In a skeleton, a control-flow block or slot is positioned by an `<!--a-->` anchor
|
|
328
|
-
(cloned into the located parent), so it can sit anywhere among static siblings.
|
|
329
|
-
Emitted both sides in document order — the client's anchor scan lines up with it.
|
|
330
|
-
Outside a skeleton (top-level / inside a branch) blocks mount on the host directly,
|
|
331
|
-
so no anchor. */
|
|
332
|
-
const anchorMark = (node: TemplateNode, target: string): string =>
|
|
333
|
-
inSkeleton.get(node) ? push(target, ANCHOR_COMMENT) : ''
|
|
334
|
-
|
|
335
|
-
function generate(node: TemplateNode, target: string): string {
|
|
336
|
-
/* Every kind that mounts as a marker range is positioned by an `<!--a-->` anchor when
|
|
337
|
-
in a skeleton context: control-flow blocks, child components, and a layout's outlet /
|
|
338
|
-
a component's `<slot>` (both elements). `isAnchorPositioned` is the ONE decision site
|
|
339
|
-
(mirrored by the client's `skeletonMarkup`); `anchorMark` no-ops outside a skeleton,
|
|
340
|
-
so non-anchored nodes ignore the precomputed `anchor`. */
|
|
341
|
-
const anchor = isAnchorPositioned(node) ? anchorMark(node, target) : ''
|
|
342
|
-
if (node.kind === 'text') {
|
|
343
|
-
return node.parts
|
|
344
|
-
.map((part) => {
|
|
345
|
-
if (part.kind === 'static') {
|
|
346
|
-
const markup = staticTextPart(part.value)
|
|
347
|
-
return markup === '' ? '' : push(target, markup)
|
|
348
|
-
}
|
|
349
|
-
/* A call to an async snippet returns a Promise — `await` it before `$text`.
|
|
350
|
-
(The enclosing context is async: the render body and async-snippet bodies.)
|
|
351
|
-
Plain expressions stay sync, so a component with only interpolation keeps a
|
|
352
|
-
sync render. */
|
|
353
|
-
const lowered = lowerExpression(part.code)
|
|
354
|
-
const value = callsAwaitable(part.code)
|
|
355
|
-
? `$text(await (${lowered}))`
|
|
356
|
-
: `$text(${lowered})`
|
|
357
|
-
return markText.get(node)
|
|
358
|
-
? `${target}.push('${ANCHOR_COMMENT}' + ${value});\n`
|
|
359
|
-
: `${target}.push(${value});\n`
|
|
360
|
-
})
|
|
361
|
-
.join('')
|
|
362
|
-
}
|
|
363
|
-
if (node.kind === 'if') {
|
|
364
|
-
/* `case` children are the `elseif`/`else` branches in source order; the rest are the
|
|
365
|
-
`then` content. The whole `if`/`elseif`/`else` chain desugars to a run of `if` /
|
|
366
|
-
`else if` clauses. A branch whose condition is a bare async subject contributes TWO
|
|
367
|
-
clauses in order — an empty `$$cellPending` guard (renders nothing, and stops the
|
|
368
|
-
chain: a still-loading branch holds, so nothing later renders on its unknown value)
|
|
369
|
-
then the `$$readCell` truthy test — so sync and async branches interleave and each
|
|
370
|
-
resolves at render time, mirroring the client `switchBlock` cond-chain. */
|
|
371
|
-
const plan = ifPlan(node)
|
|
372
|
-
/* The client build lowers a simple `if`/`else` through `when` and an `if` with any
|
|
373
|
-
`elseif` through `switchBlock` over `[then, ...branches]`. Segments come from the
|
|
374
|
-
SAME alphabet those runtimes key their branches with (`BRANCH_SEGMENT`), so a
|
|
375
|
-
nested `<Child/>`'s scope id composes identically — no literal to drift. */
|
|
376
|
-
const clauses: string[] = []
|
|
377
|
-
const conditional = (
|
|
378
|
-
condition: string,
|
|
379
|
-
asyncSubject: boolean | undefined,
|
|
380
|
-
children: TemplateNode[],
|
|
381
|
-
segment: string,
|
|
382
|
-
): void => {
|
|
383
|
-
if (asyncSubject === true) {
|
|
384
|
-
const cell = condition.trim()
|
|
385
|
-
clauses.push(`($$cellPending(${cell})) {\n}`)
|
|
386
|
-
clauses.push(
|
|
387
|
-
`($$readCell(${cell})) {\n${withPathBranch(segment, children, target)}}`,
|
|
388
|
-
)
|
|
389
|
-
} else {
|
|
390
|
-
clauses.push(
|
|
391
|
-
`(${lowerExpression(condition)}) {\n${withPathBranch(segment, children, target)}}`,
|
|
392
|
-
)
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
/* `then` is the `when` then-branch, or the `switchBlock` case at index 0. */
|
|
396
|
-
conditional(
|
|
397
|
-
node.condition,
|
|
398
|
-
node.asyncSubject,
|
|
399
|
-
plan.thenChildren,
|
|
400
|
-
JSON.stringify(plan.hasElseif ? caseSegment(0) : THEN_SEGMENT),
|
|
401
|
-
)
|
|
402
|
-
for (let index = 0; index < plan.branches.length; index += 1) {
|
|
403
|
-
const branch = plan.branches[index] as Extract<TemplateNode, { kind: 'case' }>
|
|
404
|
-
if (branch.condition !== undefined) {
|
|
405
|
-
/* An `elseif` is the `switchBlock` case at `[then, ...branches]` index `index + 1`
|
|
406
|
-
(a chain with any condition always lowers to `switchBlock`). */
|
|
407
|
-
conditional(
|
|
408
|
-
branch.condition,
|
|
409
|
-
branch.asyncSubject,
|
|
410
|
-
branch.children,
|
|
411
|
-
JSON.stringify(caseSegment(index + 1)),
|
|
412
|
-
)
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
let code = clauses
|
|
416
|
-
.map((clause, index) => `${index === 0 ? 'if' : ' else if'} ${clause}`)
|
|
417
|
-
.join('')
|
|
418
|
-
if (plan.elseBranch !== undefined) {
|
|
419
|
-
/* `else` is the `when` else-branch, or (for a cond-chain) the `switchBlock`
|
|
420
|
-
default at its own `[then, ...branches]` index. */
|
|
421
|
-
const elseSegment = plan.hasElseif
|
|
422
|
-
? caseSegment(plan.branches.indexOf(plan.elseBranch) + 1)
|
|
423
|
-
: ELSE_SEGMENT
|
|
424
|
-
code += ` else {\n${withPathBranch(JSON.stringify(elseSegment), plan.elseBranch.children, target)}}`
|
|
425
|
-
}
|
|
426
|
-
return `${anchor}${openRange(target)}${code}\n${closeRange(target)}`
|
|
427
|
-
}
|
|
428
|
-
if (node.kind === 'switch') {
|
|
429
|
-
const plan = switchPlan(node)
|
|
430
|
-
/* A bare async subject: read the peek, but only match once the cell has settled —
|
|
431
|
-
a pending subject renders no case (matching the client's `switchBlock`). */
|
|
432
|
-
const subjectExpr =
|
|
433
|
-
node.asyncSubject === true
|
|
434
|
-
? `$$readCell(${node.subject.trim()})`
|
|
435
|
-
: `(${lowerExpression(node.subject)})`
|
|
436
|
-
let code = `{ const $s = ${subjectExpr};\n`
|
|
437
|
-
if (node.asyncSubject === true) {
|
|
438
|
-
code += `if (!$$cellPending(${node.subject.trim()})) {\n`
|
|
439
|
-
}
|
|
440
|
-
let started = false
|
|
441
|
-
/* The client `switchBlock` keys each branch by its index in `plan.cases` (source order,
|
|
442
|
-
the default at its own position); mirror that index so a nested `<Child/>` matches. */
|
|
443
|
-
for (let index = 0; index < plan.cases.length; index += 1) {
|
|
444
|
-
const branch = plan.cases[index] as Extract<TemplateNode, { kind: 'case' }>
|
|
445
|
-
if (branch.match !== undefined) {
|
|
446
|
-
code += `${started ? 'else ' : ''}if ($s === (${lowerExpression(branch.match)})) {\n${withPathBranch(JSON.stringify(caseSegment(index)), branch.children, target)}}\n`
|
|
447
|
-
started = true
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
if (plan.fallback !== undefined) {
|
|
451
|
-
const fallbackSegment = caseSegment(plan.cases.indexOf(plan.fallback))
|
|
452
|
-
code += `${started ? 'else ' : ''}{\n${withPathBranch(JSON.stringify(fallbackSegment), plan.fallback.children, target)}}\n`
|
|
453
|
-
}
|
|
454
|
-
if (node.asyncSubject === true) {
|
|
455
|
-
code += `}\n`
|
|
456
|
-
}
|
|
457
|
-
return `${anchor}${openRange(target)}${code}}\n${closeRange(target)}`
|
|
458
|
-
}
|
|
459
|
-
if (node.kind === 'case') {
|
|
460
|
-
return ''
|
|
461
|
-
}
|
|
462
|
-
if (node.kind === 'snippet') {
|
|
463
|
-
const plan = snippetPlan(node)
|
|
464
|
-
/* A hoisted function returning the snippet's `$snip`-branded HTML string;
|
|
465
|
-
`{name(args)}` pushes it via `$text`, which wraps it in markers. `args` are plain
|
|
466
|
-
call parameters — `withBindings` registers the plan's `plain` bindings so the body
|
|
467
|
-
reads the bare local, shadowing a same-named component signal rather than reading it. */
|
|
468
|
-
const body = withBindings(withShadow, plan.bindings, ssrBindingKind, () =>
|
|
469
|
-
generateInto(plan.children, '$o'),
|
|
470
|
-
)
|
|
471
|
-
/* `async` only when the body produces an `await` (it inlines a child component) — then
|
|
472
|
-
call sites `await` it (`$text(await frag())`). A sync snippet stays a plain function
|
|
473
|
-
called inline, preserving the sync render contract. */
|
|
474
|
-
const keyword = asyncSnippets.has(plan.name) ? 'async function' : 'function'
|
|
475
|
-
return `${keyword} ${plan.name}(${plan.params ?? ''}) {\nconst $o = [];\n${body}return $snip($o.join(''));\n}\n`
|
|
476
|
-
}
|
|
477
|
-
if (node.kind === 'script') {
|
|
478
|
-
/* A scoped reactive block: re-seed its local signals (lowered, in scope)
|
|
479
|
-
so SSR renders the same values the client build will. */
|
|
480
|
-
return `${lowerScript(node.code)}\n`
|
|
481
|
-
}
|
|
482
|
-
/* A `<style>` emits no markup — its scope attribute is already on the elements
|
|
483
|
-
it covers (above) and its CSS is bundled, not inlined. */
|
|
484
|
-
if (node.kind === 'style') {
|
|
485
|
-
return ''
|
|
486
|
-
}
|
|
487
|
-
if (node.kind === 'each') {
|
|
488
|
-
const plan = eachPlan(node)
|
|
489
|
-
/* Async each (`await`) is drained on the client — render no rows on the
|
|
490
|
-
server (an infinite stream would hang SSR); the client inserts its anchor
|
|
491
|
-
before the next sibling during hydration, like an empty sync each. In a
|
|
492
|
-
skeleton the `<!--a-->` anchor still marks its position (the client mounts
|
|
493
|
-
there); no range markers, since there are no server rows to claim. */
|
|
494
|
-
if (plan.async) {
|
|
495
|
-
return anchor
|
|
496
|
-
}
|
|
497
|
-
/* The client `each` pushes a render-path segment per row (keyed → the `by` key evaluated
|
|
498
|
-
on the raw item, exactly like its `keyOf`; keyless → the row position), so a nested
|
|
499
|
-
`<Child/>`'s scope id composes identically. Mirror it only when the row can create a
|
|
500
|
-
scope (`subtreeAwaits` — it holds a component); a static row needs no segment and stays
|
|
501
|
-
synchronous. A keyless row that needs its position reuses a bound `index`, else a
|
|
502
|
-
synthesized loop index — the same 0-based `entries()` position the client's row cell
|
|
503
|
-
carries, so the segments agree. */
|
|
504
|
-
const rowSegments = subtreeAwaits(plan.children)
|
|
505
|
-
const keylessIndex =
|
|
506
|
-
plan.key === undefined && plan.index === undefined && rowSegments
|
|
507
|
-
? nextVar('$i')
|
|
508
|
-
: undefined
|
|
509
|
-
const indexBinding = plan.index ?? keylessIndex
|
|
510
|
-
/* The row item (and index) are real `for`-loop locals, so the body must lower
|
|
511
|
-
references to them as the bare identifier — `withBindings` registers the plan's
|
|
512
|
-
row bindings (under `plain`, SSR's only kind) so a row binding that shadows a
|
|
513
|
-
same-named component signal reads the loop value, not the (whole-list) signal it
|
|
514
|
-
shadows. The names come straight from `plan.bindings` (the single source the
|
|
515
|
-
client also reads); the items expression stays outside the shadow. */
|
|
516
|
-
const rowBody = withBindings(withShadow, plan.bindings, ssrBindingKind, () => {
|
|
517
|
-
/* The row's render-path segment, lowered inside the row's plain shadow so a keyed
|
|
518
|
-
`by` reads the raw loop item exactly like the client `keyOf` (a keyless row uses
|
|
519
|
-
its position). Unused when `rowSegments` is false — `withPathBranch` then skips it. */
|
|
520
|
-
const segment =
|
|
521
|
-
plan.key === undefined
|
|
522
|
-
? (indexBinding ?? '0')
|
|
523
|
-
: `(${lowerExpression(plan.key)})`
|
|
524
|
-
return `${openRange(target)}${withPathBranch(segment, plan.children, target)}${closeRange(target)}`
|
|
525
|
-
})
|
|
526
|
-
/* `index="i"` binds the row position. SSR reads it as a plain number from
|
|
527
|
-
`entries()` over a materialized array; the client reads the same number from a
|
|
528
|
-
cell, so first paint is congruent. No index → a plain `for…of` over the items. */
|
|
529
|
-
/* An undefined source renders no rows, not a throw — a `{#for x in promise}`
|
|
530
|
-
whose lifted source peeks undefined while pending (ADR-0032 D3). Mirrors the
|
|
531
|
-
client `each`'s undefined-as-empty guard. */
|
|
532
|
-
const header =
|
|
533
|
-
indexBinding === undefined
|
|
534
|
-
? `for (const ${plan.as} of ((${lowerExpression(plan.items)}) ?? []))`
|
|
535
|
-
: `for (const [${indexBinding}, ${plan.as}] of [...((${lowerExpression(plan.items)}) ?? [])].entries())`
|
|
536
|
-
return `${anchor}${header} {\n${rowBody}}\n`
|
|
537
|
-
}
|
|
538
|
-
if (node.kind === 'await') {
|
|
539
|
-
return `${anchor}${generateAwait(node, target)}`
|
|
540
|
-
}
|
|
541
|
-
if (node.kind === 'try') {
|
|
542
|
-
return `${anchor}${generateTry(node, target)}`
|
|
543
|
-
}
|
|
544
|
-
if (node.kind === 'branch') {
|
|
545
|
-
return ''
|
|
546
|
-
}
|
|
547
|
-
if (node.kind === 'component') {
|
|
548
|
-
/* Server-render the child via its `render` and inline the HTML inside the same
|
|
549
|
-
`[ … ]` marker range the client mounts into (`mountRange`) — no wrapper element,
|
|
550
|
-
so SSR and client agree and the child's root lays out as a direct child. Props
|
|
551
|
-
pass as thunks; slot content passes as a string-returning `children` the child
|
|
552
|
-
invokes from its <slot>. */
|
|
553
|
-
/* Slot content is a fresh build context — the child's `<slot>` mounts it via
|
|
554
|
-
`mountSlot`, not the parent skeleton clone, and the client builds it through
|
|
555
|
-
`propsArg`/`generateChildren` (never the skeleton path). `skeletonContext`
|
|
556
|
-
records it reset, so its children emit no enclosing-skeleton anchors the client
|
|
557
|
-
slot builder would lack. */
|
|
558
|
-
const slotCode = generateInto(node.children, '$slot')
|
|
559
|
-
/* Slot content rides the `children` prop key as a `Snippet`: a zero-arg callable
|
|
560
|
-
returning an ASYNC builder the child `await`s at its `{children()}` position
|
|
561
|
-
(`generateSlot`), whose resolved value is a `$snip`-branded string — so it renders
|
|
562
|
-
through the same `$text` snippet-marker path as any `{snippet(args)}` and unifies
|
|
563
|
-
with a passed `children={snippet}`. It is NOT pre-resolved: pre-resolving here would
|
|
564
|
-
run the slot's `$ctx.next++` block ids BEFORE the child render's own, but the client
|
|
565
|
-
builds slot content lazily at the `{children()}` site — so a child with an await/try
|
|
566
|
-
before its slot would allocate ids in the opposite order and desync hydration.
|
|
567
|
-
Keeping the slot lazy draws its ids at the `{children()}` site on both sides. The
|
|
568
|
-
builder shares the enclosing render's `$ctx`/`$awaits`/`$resume` (a closure), so
|
|
569
|
-
nested awaits register and number correctly during the child render. A child with a
|
|
570
|
-
slot fill is therefore always an async render. */
|
|
571
|
-
const slotPart =
|
|
572
|
-
slotCode.trim() === ''
|
|
573
|
-
? undefined
|
|
574
|
-
: `"children": () => (async () => { const $slot = []; ${slotCode}return $snip($slot.join('')); })`
|
|
575
|
-
/* The same last-wins layering the client build emits (`composeProps`), so SSR
|
|
576
|
-
and hydration read the same prop bag. */
|
|
577
|
-
const propsExpr = composeProps(
|
|
578
|
-
node.props,
|
|
579
|
-
lowerExpression,
|
|
580
|
-
slotPart,
|
|
581
|
-
bindRead,
|
|
582
|
-
bindWrite,
|
|
583
|
-
)
|
|
584
|
-
/* Render the child (awaited — render is async) sharing this render's `$ctx`,
|
|
585
|
-
so its `await`/`try` block ids draw from the same depth-first counter,
|
|
586
|
-
unique across page + children, and the streamed fragments resolve into the
|
|
587
|
-
right boundaries. MERGE its streaming awaits into `$awaits` and its inline
|
|
588
|
-
blocking values into `$resume`. ($awaits/$resume are captured from the
|
|
589
|
-
enclosing render body, including from branch closures.) */
|
|
590
|
-
/* The tag lowers like any reference (see generateBuild): a static import is left bare, a
|
|
591
|
-
reactive/loop/await binding derefs — SSR registers such a binding as `plain`, so it
|
|
592
|
-
reads the bare local holding the resolved component, keeping SSR and client congruent.
|
|
593
|
-
Root the child's render-path at this mount site's shared-walk ordinal — the same
|
|
594
|
-
segment the client's `mountChild` pushes — so the child's cells and block ids (ADR-0037)
|
|
595
|
-
get an id matching the client's. `$$withPath` sets the path across the child's awaits. */
|
|
596
|
-
const ordinal = childOrdinal(node)
|
|
597
|
-
const renderExpr = `$$withPath(${ordinal}, () => ${lowerExpression(node.name)}.render(${propsExpr}, $ctx))`
|
|
598
|
-
if (hoistableChildSet.has(node)) {
|
|
599
|
-
/* Hoistable (ADR-0037/0039): start the render as an isolated flight in the prefix, and
|
|
600
|
-
RESERVE its output position rather than awaiting inline. After the walk,
|
|
601
|
-
`finalizeStreamedChildren` fills the slot — inline `<!--[-->html<!--]-->` if the
|
|
602
|
-
flight already settled (byte-identical to the old inline await), or a streaming
|
|
603
|
-
`abide:await:CHILDPATH` boundary + html-only await if it is still pending. The
|
|
604
|
-
boundary id is the child's render-path (`$$renderPath(ordinal)`), congruent with the
|
|
605
|
-
client's dual-mode `mountChild`. */
|
|
606
|
-
const flightName = `$cf${childFlightCounter++}`
|
|
607
|
-
childFlightDecls.push(
|
|
608
|
-
`const ${flightName} = $$flight(() => $$isolateCellBarrier(() => ${renderExpr}));`,
|
|
609
|
-
)
|
|
610
|
-
const slotVar = nextVar('$slot')
|
|
611
|
-
return (
|
|
612
|
-
anchor +
|
|
613
|
-
`${target}.push('');\n` +
|
|
614
|
-
`const ${slotVar} = ${target}.length - 1;\n` +
|
|
615
|
-
`$childSlots.push({ slot: ${slotVar}, out: ${target}, id: $$renderPath(${ordinal}), flight: ${flightName} });\n`
|
|
616
|
-
)
|
|
617
|
-
}
|
|
618
|
-
/* Non-hoistable child (off the top-level spine): await inline at its structural position,
|
|
619
|
-
sequential, as before — never streams. Bracket its html in the ADDRESSED boundary
|
|
620
|
-
(ADR-0049) `abide:c:CHILDPATH` in place of the anonymous `[`/`]` — CHILDPATH is the
|
|
621
|
-
child's render-path (`$$renderPath(ordinal)`), the same id the client's `mountChild`
|
|
622
|
-
composes — so a hydration desync inside the child recovers AT this boundary instead of
|
|
623
|
-
reaching the router and discarding the whole page. */
|
|
624
|
-
const result = nextVar('$child')
|
|
625
|
-
const childPath = nextVar('$cpath')
|
|
626
|
-
return (
|
|
627
|
-
anchor +
|
|
628
|
-
`const ${childPath} = $$renderPath(${ordinal});\n` +
|
|
629
|
-
`${target}.push('<!--abide:c:' + ${childPath} + '-->');\n` +
|
|
630
|
-
`const ${result} = await ${renderExpr};\n` +
|
|
631
|
-
`${target}.push(${result}.html);\n` +
|
|
632
|
-
`for (const $a of ${result}.awaits) { $awaits.push($a); }\n` +
|
|
633
|
-
`Object.assign($resume, ${result}.resume);\n` +
|
|
634
|
-
`${target}.push('<!--/abide:c:' + ${childPath} + '-->');\n`
|
|
635
|
-
)
|
|
636
|
-
}
|
|
637
|
-
if (node.kind === 'element' && node.tag === OUTLET_TAG) {
|
|
638
|
-
/* A layout's router fill point (`asOutlet` rewrote its `<slot/>`): an `<!--a-->`
|
|
639
|
-
anchor (in a skeleton) + an empty `<!--abide:outlet-->`…`<!--/abide:outlet-->`
|
|
640
|
-
boundary the chain composer folds the child layer into (`renderChain`) and the
|
|
641
|
-
client router fills/hydrates (`outlet`/`fillBoundary`) — no wrapper element. */
|
|
642
|
-
return anchor + push(target, `<!--${OUTLET_OPEN}--><!--${OUTLET_CLOSE}-->`)
|
|
643
|
-
}
|
|
644
|
-
if (node.kind === 'element' && node.tag === 'slot') {
|
|
645
|
-
/* `asOutlet` already rewrote a layout's top-level/element-nested `<slot/>` to an
|
|
646
|
-
`OUTLET_TAG` element (handled above), so a `slot` node reaching here in a layout
|
|
647
|
-
is control-flow-nested — emit the same empty outlet boundary the client's
|
|
648
|
-
control-flow-nested path builds, which the chain composer folds the child into. */
|
|
649
|
-
if (isLayout) {
|
|
650
|
-
return push(target, `<!--${OUTLET_OPEN}--><!--${OUTLET_CLOSE}-->`)
|
|
651
|
-
}
|
|
652
|
-
return generateSlot(node, target, anchor)
|
|
653
|
-
}
|
|
654
|
-
/* Every non-element kind returned above; a kind reaching the element builder
|
|
655
|
-
that isn't an element is a compiler gap — fail loud rather than emit it as a
|
|
656
|
-
bogus `<undefined>` tag. (`node` narrows to `never` in this branch.) */
|
|
657
|
-
if (node.kind !== 'element') {
|
|
658
|
-
return assertExhaustive(node, 'template node kind')
|
|
659
|
-
}
|
|
660
|
-
let code = push(target, `<${node.tag}`)
|
|
661
|
-
/* Every `<style>` active at this element (own siblings + ancestors) — same set
|
|
662
|
-
the client stamps, so server and client markup carry identical attributes. */
|
|
663
|
-
for (const scope of node.scopes ?? []) {
|
|
664
|
-
code += push(target, scopeAttr(scope))
|
|
665
|
-
}
|
|
666
|
-
/* The shared per-element emission DECISION (one site, consulted by the build back-end
|
|
667
|
-
too): each attribute classified + tagged with its merge status, the class/style/
|
|
668
|
-
directive merge folded in, and void-tag status. `class:`/`style:` directives collapse
|
|
669
|
-
with any static/interpolated `class`/`style` base into a SINGLE merged attribute (a
|
|
670
|
-
duplicate attribute would be invalid and ignored). SSR must always emit one attribute
|
|
671
|
-
string, so it merges whenever a directive exists (`mergeClass`/`mergeStyle`); those
|
|
672
|
-
attrs are tagged `mergedSSR` and skipped below. The client's classList.toggle /
|
|
673
|
-
style.setProperty effects re-apply the same values on hydrate, so the merged SSR value
|
|
674
|
-
already matches the post-mount DOM — no flash, no desync. SSR RENDERS each kind below
|
|
675
|
-
as an escaped string. */
|
|
676
|
-
const plan = elementPlan(node, lowerExpression)
|
|
677
|
-
const merge = plan.merge
|
|
678
|
-
for (const { attr, mergedSSR } of plan.attrs) {
|
|
679
|
-
/* Skip attrs folded into the merged class/style string below. */
|
|
680
|
-
if (mergedSSR) {
|
|
681
|
-
continue
|
|
682
|
-
}
|
|
683
|
-
if (attr.kind === 'static') {
|
|
684
|
-
code += push(target, staticAttr(attr.name, attr.value))
|
|
685
|
-
} else if (attr.kind === 'expression') {
|
|
686
|
-
/* present/absent semantics matching the client `attr` binding:
|
|
687
|
-
false/null/undefined drops it, true emits the bare attribute. */
|
|
688
|
-
code += `${target}.push($attr(${JSON.stringify(attr.name)}, ${lowerExpression(attr.code)}));\n`
|
|
689
|
-
} else if (attr.kind === 'interpolated') {
|
|
690
|
-
/* A string-valued attribute, always present (a merged class/style was skipped
|
|
691
|
-
above). */
|
|
692
|
-
code += `${target}.push($attr(${JSON.stringify(attr.name)}, ${lowerExpression(interpolatedTemplateLiteral(attr.parts))}));\n`
|
|
693
|
-
} else if (attr.kind === 'spread') {
|
|
694
|
-
/* `{...expr}` element spread: each key as an attribute, functions (event
|
|
695
|
-
handlers) skipped — the client `spreadAttrs` wires those on hydrate. Keys
|
|
696
|
-
explicitly named on the element are skipped (the explicit attr wins), so
|
|
697
|
-
no duplicate attribute is emitted and the client DOM agrees. */
|
|
698
|
-
code += `${target}.push($spread(${lowerExpression(attr.code)}, ${JSON.stringify(spreadExcludedNames(node.attrs))}));\n`
|
|
699
|
-
} else if (attr.kind === 'bind' && attr.property === 'group') {
|
|
700
|
-
/* Render the checked state as a boolean attribute: present when the
|
|
701
|
-
path holds (radio) or contains (checkbox) this control's value. */
|
|
702
|
-
const { valueCode, isRadio } = groupBindParts(node)
|
|
703
|
-
const present = isRadio
|
|
704
|
-
? `(${lowerExpression(attr.code)}) === (${lowerExpression(valueCode)})`
|
|
705
|
-
: `(${lowerExpression(attr.code)}).includes(${lowerExpression(valueCode)})`
|
|
706
|
-
code += `${target}.push((${present}) ? ' checked' : '');\n`
|
|
707
|
-
} else if (attr.kind === 'bind' && attr.property === 'checked') {
|
|
708
|
-
/* A boolean property — its mere presence means checked, so emit the
|
|
709
|
-
attribute only when truthy (a string `checked="false"` still checks). */
|
|
710
|
-
code += `${target}.push((${bindRead(attr.code)}) ? ' checked' : '');\n`
|
|
711
|
-
} else if (attr.kind === 'bind' && attr.property === 'open') {
|
|
712
|
-
/* `<details open>` — `open` is a boolean attribute, so `open="false"` would
|
|
713
|
-
still render open. Emit the bare attribute only when truthy, like checked. */
|
|
714
|
-
code += `${target}.push((${bindRead(attr.code)}) ? ' open' : '');\n`
|
|
715
|
-
} else if (attr.kind === 'bind' && attr.property === 'value' && node.tag === 'select') {
|
|
716
|
-
/* `<select bind:value>` selects via `selected` on the matching option (a
|
|
717
|
-
`value="…"` on the select is ignored by browsers), wired below. Emit nothing
|
|
718
|
-
here. */
|
|
719
|
-
} else if (attr.kind === 'bind') {
|
|
720
|
-
code += `${target}.push(${JSON.stringify(` ${attr.property}="`)} + $esc(${bindRead(attr.code)}) + '"');\n`
|
|
721
|
-
}
|
|
722
|
-
}
|
|
723
|
-
/* Merged class/style: the same composed parts the build effect uses (from the plan),
|
|
724
|
-
joined and escaped into one attribute string. */
|
|
725
|
-
if (merge.mergeClass) {
|
|
726
|
-
code += `${target}.push(' class="' + $esc([${merge.classParts.join(', ')}].filter(Boolean).join(' ')) + '"');\n`
|
|
727
|
-
}
|
|
728
|
-
if (merge.mergeStyle) {
|
|
729
|
-
code += `${target}.push(' style="' + $esc([${merge.styleParts.join(', ')}].filter(Boolean).join(';')) + '"');\n`
|
|
730
|
-
}
|
|
731
|
-
/* An `<option>` inside a bound `<select>`: emit `selected` when its value equals the
|
|
732
|
-
bound value (single) or is a member of it (multiple). */
|
|
733
|
-
if (node.tag === 'option' && selectBinds.length > 0) {
|
|
734
|
-
const optionValue = optionValueForSSR(node)
|
|
735
|
-
const bind = selectBinds[selectBinds.length - 1]
|
|
736
|
-
if (optionValue !== undefined && bind !== undefined) {
|
|
737
|
-
const present = bind.multiple
|
|
738
|
-
? `Array.isArray(${bind.variable}) && ${bind.variable}.includes(${optionValue})`
|
|
739
|
-
: `(${optionValue}) === (${bind.variable})`
|
|
740
|
-
code += `${target}.push((${present}) ? ' selected' : '');\n`
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
code += push(target, '>')
|
|
744
|
-
/* A bound `<select>` publishes its current value to a local so the options rendered
|
|
745
|
-
as its children can compare against it; popped once past those children. */
|
|
746
|
-
const selectValueBind =
|
|
747
|
-
node.tag === 'select'
|
|
748
|
-
? node.attrs.find((attr) => attr.kind === 'bind' && attr.property === 'value')
|
|
749
|
-
: undefined
|
|
750
|
-
if (selectValueBind !== undefined && selectValueBind.kind === 'bind') {
|
|
751
|
-
const variable = nextVar('$sel')
|
|
752
|
-
code += `const ${variable} = ${bindRead(selectValueBind.code)};\n`
|
|
753
|
-
selectBinds.push({
|
|
754
|
-
variable,
|
|
755
|
-
multiple: staticAttrValue(node, 'multiple') !== undefined,
|
|
756
|
-
})
|
|
757
|
-
}
|
|
758
|
-
if (!plan.isVoid) {
|
|
759
|
-
/* Each child's skeleton position (whether its reactive text interleaves into an
|
|
760
|
-
anchor, whether a nested block anchors) is already recorded by `skeletonContext`
|
|
761
|
-
— read per node, not tracked here. A `<script>` child scopes its bindings to
|
|
762
|
-
this element's subtree. */
|
|
763
|
-
code += withNestedScripts(node.children, () => generateInto(node.children, target))
|
|
764
|
-
code += push(target, `</${node.tag}>`)
|
|
765
|
-
}
|
|
766
|
-
if (selectValueBind !== undefined) {
|
|
767
|
-
selectBinds.pop()
|
|
768
|
-
}
|
|
769
|
-
return code
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
/* A component `{children()}` fill point: render the `children` prop (a `Snippet`) as a
|
|
773
|
-
snippet text part. `children()()` reads the destructured `children` computed and calls
|
|
774
|
-
it → a Promise of a `$snip`-branded string; `await` it and push through `$text`, which
|
|
775
|
-
wraps the branded string in `<!--abide:snippet-->` markers — the same range the client's
|
|
776
|
-
appendText→appendSnippet emits and claims, so hydration stays congruent. Inside a skeleton
|
|
777
|
-
the slot is positioned by an `<!--a-->` anchor and bounded by a `[ … ]` range (matching the
|
|
778
|
-
client's `mountSlot`); outside one it emits just the snippet markers (matching the client's
|
|
779
|
-
direct `appendText`). The `await` makes a component with a slot an async render (its caller
|
|
780
|
-
already `await`s `render()`). A fallback is now an authored `{#if children}…{:else}…{/if}`,
|
|
781
|
-
so the slot node carries no children. */
|
|
782
|
-
function generateSlot(
|
|
783
|
-
node: Extract<TemplateNode, { kind: 'element' }>,
|
|
784
|
-
target: string,
|
|
785
|
-
anchor: string,
|
|
786
|
-
): string {
|
|
787
|
-
const wrap = inSkeleton.get(node)
|
|
788
|
-
const body = `${target}.push($text(await (${lowerExpression('children()')})));\n`
|
|
789
|
-
if (!wrap) {
|
|
790
|
-
return body
|
|
791
|
-
}
|
|
792
|
-
return `${anchor}${openRange(target)}${body}${closeRange(target)}`
|
|
793
|
-
}
|
|
794
|
-
|
|
795
|
-
/* A blocking await (`then` on the tag) renders INLINE during the async render pass;
|
|
796
|
-
a streaming await defers its resolved branch to `renderToStream`. */
|
|
797
|
-
function generateAwait(node: Extract<TemplateNode, { kind: 'await' }>, target: string): string {
|
|
798
|
-
return node.blocking
|
|
799
|
-
? generateBlockingAwait(node, target)
|
|
800
|
-
: generateStreamingAwait(node, target)
|
|
801
|
-
}
|
|
802
|
-
|
|
803
|
-
/* The lowered `{#await X}` subject (ADR-0047) — the ONE shared decision site, so the
|
|
804
|
-
bare-cell classification can't drift from the client back-end's. Used by the
|
|
805
|
-
blocking, streaming, and flight-hoist emit sites. */
|
|
806
|
-
const subjectExprFor = (promiseCode: string): string =>
|
|
807
|
-
awaitSubjectExpr(promiseCode, cellReadNames, isShadowed, lowerExpression)
|
|
808
|
-
|
|
809
|
-
/*
|
|
810
|
-
A blocking await — `await`ed at its structural position in the async render pass and
|
|
811
|
-
its resolved branch rendered INLINE into `target`, between the boundary markers. This
|
|
812
|
-
matches the client (which runs `then` inline during adopt): one render pass, so the
|
|
813
|
-
block id (`$ctx.next++`) and any nested await's id are allocated depth-first in the
|
|
814
|
-
same order the client hydrates them, and the resolved value is captured into `$resume`
|
|
815
|
-
for the manifest. The resolved children bind `node.as`; `finally` appends after, matching
|
|
816
|
-
the client's concatenated node range. With no catch/finally branch a rejection propagates
|
|
817
|
-
(renderToStream / the 500 surfaces it); otherwise the catch branch renders and seeds an
|
|
818
|
-
error resume. The value `const` is block-scoped to its `try`, so sibling blocking awaits
|
|
819
|
-
that bind the same name don't collide.
|
|
820
|
-
*/
|
|
821
|
-
function generateBlockingAwait(
|
|
822
|
-
node: Extract<TemplateNode, { kind: 'await' }>,
|
|
823
|
-
target: string,
|
|
824
|
-
): string {
|
|
825
|
-
const plan = awaitPlan(node)
|
|
826
|
-
const id = nextVar('$aid')
|
|
827
|
-
/* The resolved value lands in a synthetic var FIRST, then the author binding is
|
|
828
|
-
declared from it inside a nested block. Two reasons: the promise expression is
|
|
829
|
-
lowered in the outer scope where the binding name is not yet declared, so
|
|
830
|
-
`{#await foo then foo}` reads the outer `foo` (no temporal-dead-zone crash on a
|
|
831
|
-
same-named binding); and the nested block is the lexical scope the branch's
|
|
832
|
-
`withBindings` shadow models, so a reference to the binding reads the plain
|
|
833
|
-
local rather than the (unresolved) component signal it shadows. */
|
|
834
|
-
const resolved = nextVar('$av')
|
|
835
|
-
/* ADR-0034: a hoisted block awaits the prefix flight const (already in-flight); a
|
|
836
|
-
non-hoisted block evaluates + awaits its promise inline as before. */
|
|
837
|
-
const hoistedPromise = flightNameByNode.get(node)
|
|
838
|
-
let code = `const ${id} = $$blockId($ctx);\n`
|
|
839
|
-
code += `${target}.push("<!--abide:await:" + ${id} + "-->");\n`
|
|
840
|
-
code += `try {\n`
|
|
841
|
-
code += `const ${resolved} = await (${hoistedPromise ?? subjectExprFor(node.promise)});\n`
|
|
842
|
-
code += `{\n`
|
|
843
|
-
code += `const ${plan.resolvedAs} = ${resolved};\n`
|
|
844
|
-
code += withBindings(withShadow, plan.resolvedBindings, ssrBindingKind, () =>
|
|
845
|
-
branchContent(plan.resolvedChildren, target),
|
|
846
|
-
)
|
|
847
|
-
/* `finally` does not bind the resolved value, so it is lowered OUTSIDE the `then`
|
|
848
|
-
shadow — matching the catch branch below, so a finally expression naming the
|
|
849
|
-
same identifier as the `then` binding reads the component signal, not the local. */
|
|
850
|
-
code += branchContent(plan.finallyChildren, target)
|
|
851
|
-
/* Seed the resolved value into the resume manifest so hydration adopts the server
|
|
852
|
-
branch warm (no round-trip) and wires it live on the first frame. Seed the
|
|
853
|
-
resolved temp, NOT `plan.resolvedAs` — the latter is the author's binding
|
|
854
|
-
PATTERN (e.g. `{name}` or `{name = 'anon'}`), which as an expression rebuilds a
|
|
855
|
-
partial object or is a CoverInitializedName syntax error. */
|
|
856
|
-
code += `$resume[${id}] = { ok: true, value: ${resolved} };\n`
|
|
857
|
-
code += `}\n`
|
|
858
|
-
if (plan.surfaceRejection) {
|
|
859
|
-
/* No catch/finally → let the rejection surface instead of an empty branch. */
|
|
860
|
-
code += `} catch (_error) { throw _error; }\n`
|
|
861
|
-
} else {
|
|
862
|
-
code += `} catch (${plan.catchAs}) {\n`
|
|
863
|
-
code += withBindings(withShadow, plan.catchBindings, ssrBindingKind, () =>
|
|
864
|
-
branchContent(plan.catchChildren, target),
|
|
865
|
-
)
|
|
866
|
-
code += branchContent(plan.finallyChildren, target)
|
|
867
|
-
code += `$resume[${id}] = { ok: false, error: String(${plan.catchAs}) };\n`
|
|
868
|
-
code += `}\n`
|
|
869
|
-
}
|
|
870
|
-
code += `${target}.push("<!--/abide:await:" + ${id} + "-->");\n`
|
|
871
|
-
return code
|
|
872
|
-
}
|
|
873
|
-
|
|
874
|
-
/* A streaming await — emits the pending branch between the markers (flushed now) and
|
|
875
|
-
registers the promise + async string-renderers on `$awaits`; `renderToStream`
|
|
876
|
-
flushes the resolved fragment out of order. The renderers are async so a nested
|
|
877
|
-
`await` block inside the branch composes. `finally` appends after the outcome,
|
|
878
|
-
matching the client's concatenated node range. Neither catch nor finally → omit
|
|
879
|
-
`catch` so a rejection surfaces (renderToStream re-throws); a finally-only block
|
|
880
|
-
keeps a catch renderer that renders just finally. */
|
|
881
|
-
function generateStreamingAwait(
|
|
882
|
-
node: Extract<TemplateNode, { kind: 'await' }>,
|
|
883
|
-
target: string,
|
|
884
|
-
): string {
|
|
885
|
-
const plan = awaitPlan(node)
|
|
886
|
-
const id = nextVar('$aid')
|
|
887
|
-
let code = `const ${id} = $$blockId($ctx);\n`
|
|
888
|
-
code += `${target}.push("<!--abide:await:" + ${id} + "-->");\n`
|
|
889
|
-
code += branchContent(plan.pending, target)
|
|
890
|
-
code += `${target}.push("<!--/abide:await:" + ${id} + "-->");\n`
|
|
891
|
-
/* The settled renderer takes the resolved/error value as a real arrow parameter
|
|
892
|
-
(`async (foo) => …`), so its body must lower references to that name as the plain
|
|
893
|
-
local — `withBindings` registers the plan's bindings (under `plain`, SSR's only kind)
|
|
894
|
-
so a binding that shadows a same-named component signal reads the value, not the
|
|
895
|
-
signal. The arrow param is the binding's author name; the names enter scope from the
|
|
896
|
-
same `plan.*Bindings` the client reads. */
|
|
897
|
-
const settled = (param: string, bindings: Binding[], children: TemplateNode[]) =>
|
|
898
|
-
`async (${param}) => { const $o = []; ${withBindings(
|
|
899
|
-
withShadow,
|
|
900
|
-
bindings,
|
|
901
|
-
ssrBindingKind,
|
|
902
|
-
() => branchContent(children, '$o'),
|
|
903
|
-
)}${branchContent(plan.finallyChildren, '$o')}return $o.join(''); }`
|
|
904
|
-
const catchProp = plan.surfaceRejection
|
|
905
|
-
? ''
|
|
906
|
-
: `catch: ${settled(plan.catchAs, plan.catchBindings, plan.catchChildren)} `
|
|
907
|
-
/* ADR-0034: a hoisted streaming block's thunk returns the prefix flight const (started
|
|
908
|
-
in the prefix, so it overlaps a preceding blocking await); non-hoisted evaluates lazily
|
|
909
|
-
at drain time as before. */
|
|
910
|
-
const hoistedPromise = flightNameByNode.get(node)
|
|
911
|
-
code +=
|
|
912
|
-
`$awaits.push({ id: ${id}, ` +
|
|
913
|
-
`promise: () => (${hoistedPromise ?? subjectExprFor(node.promise)}), ` +
|
|
914
|
-
`then: ${settled(plan.resolvedAs, plan.resolvedBindings, plan.resolvedChildren)}, ` +
|
|
915
|
-
`${catchProp}});\n`
|
|
916
|
-
return code
|
|
917
|
-
}
|
|
918
|
-
|
|
919
|
-
/* A reactive error boundary: push the guarded markup (++ finally) inside a real
|
|
920
|
-
try/catch; on a throw, truncate the output back to the range start and push the
|
|
921
|
-
catch markup (++ finally) instead — so even mid-stream a render throw becomes catch
|
|
922
|
-
markup, not a broken response. No catch re-throws (propagates to an enclosing boundary
|
|
923
|
-
/ the 500 / the stream). The `abide:try:N` boundary comments let hydration discard the
|
|
924
|
-
server content if the client adoption fails; the inner `[ … ]` range markers are the
|
|
925
|
-
live range the render-many client (`tryBlock`) tracks — emitted here so a FRESH client
|
|
926
|
-
mount (which brackets its branch) and the SSR markup stay congruent. */
|
|
927
|
-
function generateTry(node: Extract<TemplateNode, { kind: 'try' }>, target: string): string {
|
|
928
|
-
const plan = tryPlan(node)
|
|
929
|
-
const id = nextVar('$tid')
|
|
930
|
-
const mark = nextVar('$trim')
|
|
931
|
-
let code = `const ${id} = $$blockId($ctx);\n`
|
|
932
|
-
code += `${target}.push("<!--abide:try:" + ${id} + "-->");\n`
|
|
933
|
-
code += openRange(target)
|
|
934
|
-
/* Truncate back to just after the range-open marker on a catch, so `[` survives. */
|
|
935
|
-
code += `const ${mark} = ${target}.length;\n`
|
|
936
|
-
code += `try {\n`
|
|
937
|
-
code += branchContent(plan.guarded, target)
|
|
938
|
-
code += branchContent(plan.finallyChildren, target)
|
|
939
|
-
code += `} catch (${plan.catchAs}) {\n${target}.length = ${mark};\n`
|
|
940
|
-
if (plan.hasCatch) {
|
|
941
|
-
code += withBindings(withShadow, plan.catchBindings, ssrBindingKind, () =>
|
|
942
|
-
branchContent(plan.catchChildren, target),
|
|
943
|
-
)
|
|
944
|
-
code += branchContent(plan.finallyChildren, target)
|
|
945
|
-
} else {
|
|
946
|
-
code += `throw ${plan.catchAs};\n`
|
|
947
|
-
}
|
|
948
|
-
code += `}\n`
|
|
949
|
-
code += closeRange(target)
|
|
950
|
-
code += `${target}.push("<!--/abide:try:" + ${id} + "-->");\n`
|
|
951
|
-
return code
|
|
952
|
-
}
|
|
953
|
-
|
|
954
|
-
/* The body walk emits `await $flightN` / `promise: () => $flightN` for hoisted nodes; the
|
|
955
|
-
matching prefix declarations (lowered at component scope — hoisted promises reference only
|
|
956
|
-
component-scope names, never a branch shadow, so this lowering matches the body's) are
|
|
957
|
-
returned for compileSSR to place after the lowered script and before the barrier. */
|
|
958
|
-
const body = generateInto(rootNodes, '$out')
|
|
959
|
-
let flightDecls = ''
|
|
960
|
-
for (const [node, name] of flightNameByNode) {
|
|
961
|
-
flightDecls += `const ${name} = $$flight(() => (${subjectExprFor(node.promise)}));\n`
|
|
962
|
-
}
|
|
963
|
-
/* Child-render flights emitted during the body walk above (ADR-0037 Phase 2) — appended after
|
|
964
|
-
the await flights; both are independent prefix promise-starts, so order between them is free. */
|
|
965
|
-
for (const decl of childFlightDecls) {
|
|
966
|
-
flightDecls += `${decl}\n`
|
|
967
|
-
}
|
|
968
|
-
/* `hasStagedChildren` tells compileSSR to declare `$childSlots` and emit the post-walk
|
|
969
|
-
`$$finalizeStreamedChildren` await (ADR-0039); a component with no hoistable child stays
|
|
970
|
-
synchronous. Each hoistable child pushed one `childFlightDecls` entry, so its length is the
|
|
971
|
-
staged-child count. */
|
|
972
|
-
return { body, flightDecls, hasStagedChildren: childFlightDecls.length > 0 }
|
|
973
|
-
}
|