@abide/abide 0.58.0 → 0.100.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.
Files changed (1198) hide show
  1. package/CHANGELOG.md +3 -1781
  2. package/bin/abide.ts +788 -204
  3. package/package.json +30 -152
  4. package/scaffold/src/server/app.ts +6 -0
  5. package/scaffold/src/shared/.gitkeep +0 -0
  6. package/scaffold/src/ui/app.html +8 -0
  7. package/scaffold/src/ui/pages/page.abide +13 -0
  8. package/src/compiler/CHARACTER_REFERENCES.ts +2242 -0
  9. package/src/compiler/CheckerAnswer.ts +62 -0
  10. package/src/compiler/Cursor.ts +367 -0
  11. package/src/compiler/Finding.ts +2 -0
  12. package/src/compiler/Lowering.ts +648 -0
  13. package/src/compiler/PositionTable.ts +125 -0
  14. package/src/compiler/REACTIVE_MEMBERS.ts +36 -0
  15. package/src/compiler/SHARED_NAMES.ts +45 -0
  16. package/src/compiler/SPECIFIERS.ts +16 -0
  17. package/src/compiler/ShadowMap.ts +144 -0
  18. package/src/compiler/TemplateNode.ts +176 -0
  19. package/src/compiler/TypeSession.ts +1079 -0
  20. package/src/compiler/VOID_ELEMENTS.ts +22 -0
  21. package/src/compiler/aliasedSymbol.ts +15 -0
  22. package/src/compiler/ambientReadsIn.ts +152 -0
  23. package/src/compiler/argsDefaultsIn.ts +173 -0
  24. package/src/compiler/argsSchemaOf.ts +230 -0
  25. package/src/compiler/checkApp.ts +117 -0
  26. package/src/compiler/checkedShadow.ts +182 -0
  27. package/src/compiler/classifyRead.ts +577 -0
  28. package/src/compiler/classifyTemplate.ts +501 -0
  29. package/src/compiler/compileApp.ts +559 -0
  30. package/src/compiler/compiledEntry.ts +141 -0
  31. package/src/compiler/componentGraph.ts +139 -0
  32. package/src/compiler/declaredExports.ts +645 -0
  33. package/src/compiler/decodeCharacterReferences.ts +111 -0
  34. package/src/compiler/emitClient.ts +1343 -0
  35. package/src/compiler/emitComponent.ts +162 -0
  36. package/src/compiler/emitSource.ts +91 -0
  37. package/src/compiler/formatDiagnosis.ts +19 -0
  38. package/src/compiler/handlersUnder.ts +109 -0
  39. package/src/compiler/index.ts +15 -0
  40. package/src/compiler/invocationProps.ts +67 -0
  41. package/src/compiler/isNamedAlone.ts +9 -0
  42. package/src/compiler/lineOf.ts +38 -0
  43. package/src/compiler/parseAbide.ts +1341 -0
  44. package/src/compiler/projectShadow.ts +643 -0
  45. package/src/compiler/reactiveOptions.ts +82 -0
  46. package/src/compiler/reactiveTypes.ts +222 -0
  47. package/src/compiler/readSources.ts +100 -0
  48. package/src/compiler/readsIn.ts +1023 -0
  49. package/src/compiler/renderMarkup.ts +781 -0
  50. package/src/compiler/scaffold.ts +105 -0
  51. package/src/compiler/scopeStyles.ts +309 -0
  52. package/src/compiler/serveLanguage.ts +405 -0
  53. package/src/compiler/shareScope.ts +51 -0
  54. package/src/compiler/sharedModuleWrites.ts +88 -0
  55. package/src/compiler/splitImports.ts +387 -0
  56. package/src/compiler/templateWarnings.ts +128 -0
  57. package/src/compiler/tokenize.ts +317 -0
  58. package/src/compiler/trackingWarnings.ts +279 -0
  59. package/src/compiler/writeDefaultProject.ts +42 -0
  60. package/src/server/BRIDGE_VERSION.ts +3 -0
  61. package/src/server/CLIENT_BUILD.ts +56 -0
  62. package/src/server/DEFAULT_PORT.ts +6 -0
  63. package/src/server/DOCUMENT_HEADERS.ts +11 -0
  64. package/src/server/Inbox.ts +36 -0
  65. package/src/server/LogPanel.ts +239 -0
  66. package/src/server/MCP_PROTOCOL_VERSION.ts +3 -0
  67. package/src/server/SETTLE_MILLISECONDS.ts +7 -0
  68. package/src/server/VIRTUAL_DIRECTORY.ts +6 -0
  69. package/src/server/answerFailure.ts +91 -0
  70. package/src/server/answerRequest.ts +560 -0
  71. package/src/server/answerRpc.ts +537 -0
  72. package/src/server/answerSocket.ts +537 -0
  73. package/src/server/answerValue.ts +375 -0
  74. package/src/server/appDirectories.ts +9 -0
  75. package/src/server/appKit.ts +204 -0
  76. package/src/server/appPlugins.ts +26 -0
  77. package/src/server/argsFor.ts +40 -0
  78. package/src/server/assistant.ts +163 -0
  79. package/src/server/banner.ts +43 -0
  80. package/src/server/bridgeRelay.ts +249 -0
  81. package/src/server/buildDirectory.ts +10 -0
  82. package/src/server/callerOf.ts +60 -0
  83. package/src/server/claudeApi.ts +224 -0
  84. package/src/server/claudeCode.ts +187 -0
  85. package/src/server/clientBuildOptions.ts +49 -0
  86. package/src/server/coerceArgs.ts +110 -0
  87. package/src/server/commands.ts +442 -0
  88. package/src/server/componentImports.ts +56 -0
  89. package/src/server/componentModules.d.ts +9 -0
  90. package/src/server/compressAnswer.ts +66 -0
  91. package/src/server/config.ts +192 -0
  92. package/src/server/configFields.ts +92 -0
  93. package/src/server/createApp.ts +428 -0
  94. package/src/server/crossingOrigin.ts +49 -0
  95. package/src/server/csp.ts +77 -0
  96. package/src/server/devWorker.ts +613 -0
  97. package/src/server/faultPolicy.ts +59 -0
  98. package/src/server/fenceServer.ts +48 -0
  99. package/src/server/generatedSurfaces.ts +430 -0
  100. package/src/server/hooks.ts +190 -0
  101. package/src/server/index.ts +87 -0
  102. package/src/server/installServer.ts +47 -0
  103. package/src/server/launcherOptions.ts +62 -0
  104. package/src/server/launcherPage.ts +156 -0
  105. package/src/server/manifestOf.ts +114 -0
  106. package/src/server/muxUpgrade.ts +72 -0
  107. package/src/server/namesUnder.ts +15 -0
  108. package/src/server/nativeMenu.ts +296 -0
  109. package/src/server/negotiateEncoding.ts +39 -0
  110. package/src/server/plainAnswer.ts +19 -0
  111. package/src/server/prefers.ts +25 -0
  112. package/src/server/principal.ts +261 -0
  113. package/src/server/qualitiesOf.ts +22 -0
  114. package/src/server/randomToken.ts +9 -0
  115. package/src/server/reachable.ts +31 -0
  116. package/src/server/refuseAddressCollision.ts +30 -0
  117. package/src/server/remote.ts +242 -0
  118. package/src/server/render.ts +464 -0
  119. package/src/server/renderComponent.ts +33 -0
  120. package/src/server/reportHealth.ts +46 -0
  121. package/src/server/requestScope.ts +435 -0
  122. package/src/server/responseHelpers.ts +75 -0
  123. package/src/server/runCompiled.ts +44 -0
  124. package/src/server/runDesktop.ts +572 -0
  125. package/src/server/seedBuffer.ts +293 -0
  126. package/src/server/serveBuild.ts +198 -0
  127. package/src/server/serveDev.ts +499 -0
  128. package/src/server/shell.ts +506 -0
  129. package/src/server/surfaceOf.ts +47 -0
  130. package/src/server/testBuild.ts +237 -0
  131. package/src/server/trace.ts +151 -0
  132. package/src/server/versionOf.ts +109 -0
  133. package/src/server/withoutTrailingSlash.ts +4 -0
  134. package/src/shared/ADDRESSES.ts +69 -0
  135. package/src/shared/ANCHORS.ts +54 -0
  136. package/src/shared/Attributes.ts +339 -0
  137. package/src/shared/BOOLEAN_ATTRIBUTES.ts +41 -0
  138. package/src/shared/CHILDREN.ts +11 -0
  139. package/src/shared/CURRENT_ROUTER.ts +25 -0
  140. package/src/shared/CopyOptions.ts +19 -0
  141. package/src/shared/DEBUG_META.ts +6 -0
  142. package/src/shared/EARLY_CALLS.ts +8 -0
  143. package/src/shared/FAILURE_STATUS_TEXT.ts +48 -0
  144. package/src/shared/Failed.ts +146 -0
  145. package/src/shared/GLOBAL_GETS.ts +7 -0
  146. package/src/shared/Issues.ts +49 -0
  147. package/src/shared/JsonValue.ts +18 -0
  148. package/src/shared/LOAD_SIGNAL.ts +10 -0
  149. package/src/shared/MOUNT_META.ts +6 -0
  150. package/src/shared/Middleware.ts +34 -0
  151. package/src/shared/NAVIGATION_HEADER.ts +7 -0
  152. package/src/shared/PRINCIPAL_HEADER.ts +6 -0
  153. package/src/shared/RPC_SERVER.ts +67 -0
  154. package/src/shared/Raw.ts +90 -0
  155. package/src/shared/Schema.ts +229 -0
  156. package/src/shared/UNEXPECTED.ts +11 -0
  157. package/src/shared/URL_ATTRIBUTES.ts +19 -0
  158. package/src/shared/VERSION_HEADER.ts +6 -0
  159. package/src/shared/WORK.ts +37 -0
  160. package/src/shared/anchorMarkup.ts +15 -0
  161. package/src/shared/answerOf.ts +141 -0
  162. package/src/shared/applyPatch.ts +173 -0
  163. package/src/shared/armAnchor.ts +17 -0
  164. package/src/shared/attributeText.ts +50 -0
  165. package/src/shared/boundValue.ts +58 -0
  166. package/src/shared/cookies.ts +271 -0
  167. package/src/shared/csp.ts +55 -0
  168. package/src/shared/decodedOrKept.ts +14 -0
  169. package/src/shared/escapeText.ts +103 -0
  170. package/src/shared/framing.ts +131 -0
  171. package/src/shared/headKeyOf.ts +34 -0
  172. package/src/shared/health.ts +51 -0
  173. package/src/shared/index.ts +117 -0
  174. package/src/shared/isEventName.ts +10 -0
  175. package/src/shared/isRecord.ts +4 -0
  176. package/src/shared/issuesOf.ts +18 -0
  177. package/src/shared/jsonSchema.ts +50 -0
  178. package/src/shared/listOf.ts +20 -0
  179. package/src/shared/log.ts +284 -0
  180. package/src/shared/matchRoute.ts +99 -0
  181. package/src/shared/menuItem.ts +80 -0
  182. package/src/shared/mount.ts +45 -0
  183. package/src/shared/muxFrames.ts +35 -0
  184. package/src/shared/navigate.ts +26 -0
  185. package/src/shared/note.ts +24 -0
  186. package/src/shared/numberFromText.ts +10 -0
  187. package/src/shared/online.ts +19 -0
  188. package/src/shared/paint.ts +4 -0
  189. package/src/shared/principal.ts +145 -0
  190. package/src/shared/principalRotated.ts +47 -0
  191. package/src/shared/propCell.ts +99 -0
  192. package/src/shared/props.ts +24 -0
  193. package/src/shared/putOwn.ts +24 -0
  194. package/src/shared/queryText.ts +18 -0
  195. package/src/shared/reactive/CELL.ts +8 -0
  196. package/src/shared/reactive/Cursor.ts +223 -0
  197. package/src/shared/reactive/ENTRY_LIVES.ts +7 -0
  198. package/src/shared/reactive/Expiry.ts +103 -0
  199. package/src/shared/reactive/FOLLOWED.ts +8 -0
  200. package/src/shared/reactive/KEYED_BRAND.ts +8 -0
  201. package/src/shared/reactive/Keyed.ts +423 -0
  202. package/src/shared/reactive/MUTATION.ts +5 -0
  203. package/src/shared/reactive/NO_INITIAL.ts +6 -0
  204. package/src/shared/reactive/NotLanded.ts +21 -0
  205. package/src/shared/reactive/PATCHES.ts +11 -0
  206. package/src/shared/reactive/PATCH_SINKS.ts +26 -0
  207. package/src/shared/reactive/REACTIVE_BRAND.ts +9 -0
  208. package/src/shared/reactive/RESHAPING.ts +13 -0
  209. package/src/shared/reactive/Reactive.ts +4480 -0
  210. package/src/shared/reactive/SELECTION_MEMBERS.ts +12 -0
  211. package/src/shared/reactive/STREAMING.ts +5 -0
  212. package/src/shared/reactive/argsContract.ts +97 -0
  213. package/src/shared/reactive/byOf.ts +18 -0
  214. package/src/shared/reactive/callLoad.ts +200 -0
  215. package/src/shared/reactive/canonicalKey.ts +95 -0
  216. package/src/shared/reactive/chunksOfStream.ts +51 -0
  217. package/src/shared/reactive/index.ts +542 -0
  218. package/src/shared/reactive/isReactive.ts +19 -0
  219. package/src/shared/reactive/isThenable.ts +14 -0
  220. package/src/shared/reactive/matchesPattern.ts +16 -0
  221. package/src/shared/reactive/pairReactive.ts +41 -0
  222. package/src/shared/reactive/parameterDefaults.ts +356 -0
  223. package/src/shared/reactive/recordWrites.ts +472 -0
  224. package/src/shared/reactive/scoped.ts +157 -0
  225. package/src/shared/reactive/scoping.ts +64 -0
  226. package/src/shared/reactive/share.ts +91 -0
  227. package/src/shared/reactive/structural.ts +62 -0
  228. package/src/shared/reactive/tracking.ts +418 -0
  229. package/src/shared/reactive/watch.ts +310 -0
  230. package/src/shared/refuse.ts +224 -0
  231. package/src/shared/route.ts +29 -0
  232. package/src/shared/routePattern.ts +146 -0
  233. package/src/shared/rpc.ts +496 -0
  234. package/src/shared/rpcRequest.ts +73 -0
  235. package/src/shared/safeUrl.ts +68 -0
  236. package/src/shared/seededDocument.ts +36 -0
  237. package/src/shared/setUpLevels.ts +53 -0
  238. package/src/shared/slotValue.ts +34 -0
  239. package/src/shared/spread.ts +79 -0
  240. package/src/shared/takeEarlyCall.ts +86 -0
  241. package/src/shared/url.ts +140 -0
  242. package/src/shared/validateJson.ts +578 -0
  243. package/src/shared/versionInEtag.ts +14 -0
  244. package/src/shared/writePath.ts +95 -0
  245. package/src/ui/ArmRegion.ts +185 -0
  246. package/src/ui/LAYER_NAMES.ts +30 -0
  247. package/src/ui/List.ts +273 -0
  248. package/src/ui/Mismatch.ts +32 -0
  249. package/src/ui/RawRun.ts +99 -0
  250. package/src/ui/Router.ts +698 -0
  251. package/src/ui/Scope.ts +115 -0
  252. package/src/ui/TryRegion.ts +278 -0
  253. package/src/ui/adoptWalk.ts +126 -0
  254. package/src/ui/applyHead.ts +146 -0
  255. package/src/ui/bindElement.ts +44 -0
  256. package/src/ui/bindProperty.ts +79 -0
  257. package/src/ui/bindSpread.ts +44 -0
  258. package/src/ui/escapeless.ts +14 -0
  259. package/src/ui/index.ts +64 -0
  260. package/src/ui/leave.ts +35 -0
  261. package/src/ui/listenForRoutes.ts +92 -0
  262. package/src/ui/measureLayer.ts +34 -0
  263. package/src/ui/menuBridge.ts +19 -0
  264. package/src/ui/moveNode.ts +34 -0
  265. package/src/ui/parseMarkup.ts +35 -0
  266. package/src/ui/reconcile.ts +368 -0
  267. package/src/ui/regions.ts +137 -0
  268. package/src/ui/reportMenu.ts +57 -0
  269. package/src/ui/routing.ts +18 -0
  270. package/src/ui/rowKeyOf.ts +19 -0
  271. package/src/ui/rows.ts +99 -0
  272. package/src/ui/setAttribute.ts +37 -0
  273. package/src/ui/setClass.ts +27 -0
  274. package/src/ui/setMarkup.ts +20 -0
  275. package/src/ui/setStyleProperty.ts +30 -0
  276. package/src/ui/setText.ts +28 -0
  277. package/src/ui/socketWire.ts +258 -0
  278. package/src/ui/wire.ts +141 -0
  279. package/AGENTS.md +0 -446
  280. package/README.md +0 -249
  281. package/src/abideLsp.ts +0 -251
  282. package/src/abideModules.d.ts +0 -8
  283. package/src/abideResolverPlugin.ts +0 -1101
  284. package/src/appEntry.ts +0 -161
  285. package/src/assets/app.html +0 -12
  286. package/src/build.ts +0 -189
  287. package/src/buildCli.ts +0 -125
  288. package/src/buildDisconnected.ts +0 -117
  289. package/src/bundleApp.ts +0 -146
  290. package/src/bundleDisconnectedEntry.ts +0 -14
  291. package/src/checkAbide.ts +0 -145
  292. package/src/cliEntry.ts +0 -25
  293. package/src/clientBuildPlugins.ts +0 -33
  294. package/src/clientEntry.ts +0 -17
  295. package/src/compile.ts +0 -61
  296. package/src/controlServerWorker.ts +0 -433
  297. package/src/devEntry.ts +0 -381
  298. package/src/discoveryEntry.ts +0 -82
  299. package/src/initAgent.ts +0 -50
  300. package/src/lib/bundle/BundleMenu.ts +0 -12
  301. package/src/lib/bundle/BundleMenuItem.ts +0 -25
  302. package/src/lib/bundle/BundleWindow.ts +0 -37
  303. package/src/lib/bundle/WEBVIEW_BUILD_REVISION.ts +0 -9
  304. package/src/lib/bundle/WEBVIEW_VERSION.ts +0 -7
  305. package/src/lib/bundle/bindConnectedFlag.ts +0 -29
  306. package/src/lib/bundle/bindRequestNavigate.ts +0 -34
  307. package/src/lib/bundle/buildWebviewLib.ts +0 -111
  308. package/src/lib/bundle/bundled.ts +0 -35
  309. package/src/lib/bundle/disconnected.abide +0 -265
  310. package/src/lib/bundle/disconnected.css +0 -9
  311. package/src/lib/bundle/ensureWebviewLib.ts +0 -20
  312. package/src/lib/bundle/exitWithParent.ts +0 -30
  313. package/src/lib/bundle/infoPlist.ts +0 -52
  314. package/src/lib/bundle/installDownloads.ts +0 -34
  315. package/src/lib/bundle/installMacMenu.ts +0 -49
  316. package/src/lib/bundle/listenLocalControlServer.ts +0 -19
  317. package/src/lib/bundle/native/abideMenu.mm +0 -422
  318. package/src/lib/bundle/native/webview.h +0 -4557
  319. package/src/lib/bundle/onMenu.ts +0 -42
  320. package/src/lib/bundle/openWebview.ts +0 -104
  321. package/src/lib/bundle/pngToIcns.ts +0 -47
  322. package/src/lib/bundle/probeAbideServer.ts +0 -57
  323. package/src/lib/bundle/resolveServerBinary.ts +0 -12
  324. package/src/lib/bundle/resolveWebviewLib.ts +0 -53
  325. package/src/lib/bundle/serverBinaryFilename.ts +0 -8
  326. package/src/lib/bundle/signMacApp.ts +0 -37
  327. package/src/lib/bundle/spawnEmbeddedServer.ts +0 -73
  328. package/src/lib/bundle/stableLocalPort.ts +0 -19
  329. package/src/lib/bundle/waitForServer.ts +0 -28
  330. package/src/lib/bundle/webviewCachePath.ts +0 -23
  331. package/src/lib/bundle/webviewLibName.ts +0 -11
  332. package/src/lib/cli/completeCli.ts +0 -38
  333. package/src/lib/cli/connectToServer.ts +0 -23
  334. package/src/lib/cli/createClient.ts +0 -108
  335. package/src/lib/cli/dispatchCommand.ts +0 -72
  336. package/src/lib/cli/loadEnvFromBinaryDir.ts +0 -15
  337. package/src/lib/cli/parseArgvForRpc.ts +0 -131
  338. package/src/lib/cli/printCommandHelp.ts +0 -43
  339. package/src/lib/cli/printSessionHelp.ts +0 -28
  340. package/src/lib/cli/printSessionStatus.ts +0 -21
  341. package/src/lib/cli/printTopLevelHelp.ts +0 -83
  342. package/src/lib/cli/printTrimmed.ts +0 -8
  343. package/src/lib/cli/printValue.ts +0 -10
  344. package/src/lib/cli/renderCliCompletions.ts +0 -56
  345. package/src/lib/cli/resolveCliTarget.ts +0 -47
  346. package/src/lib/cli/runCli.ts +0 -188
  347. package/src/lib/cli/runSession.ts +0 -107
  348. package/src/lib/cli/startLocalInstance.ts +0 -14
  349. package/src/lib/cli/tokenizeArgvFlags.ts +0 -86
  350. package/src/lib/cli/tokenizeLine.ts +0 -51
  351. package/src/lib/cli/types/CliManifest.ts +0 -11
  352. package/src/lib/cli/types/CliManifestEntry.ts +0 -17
  353. package/src/lib/cli/types/CliTarget.ts +0 -13
  354. package/src/lib/mcp/annotationsForMethod.ts +0 -29
  355. package/src/lib/mcp/buildPrompts.ts +0 -25
  356. package/src/lib/mcp/createMcpResourceServer.ts +0 -113
  357. package/src/lib/mcp/createMcpServer.ts +0 -56
  358. package/src/lib/mcp/dispatchMcpRequest.ts +0 -159
  359. package/src/lib/mcp/mcpResourceServerSlot.ts +0 -13
  360. package/src/lib/mcp/mcpSurface.ts +0 -57
  361. package/src/lib/mcp/mcpTools.ts +0 -196
  362. package/src/lib/mcp/renderPrompt.ts +0 -25
  363. package/src/lib/mcp/toolResultFromResponse.ts +0 -100
  364. package/src/lib/mcp/types/JsonRpcRequest.ts +0 -12
  365. package/src/lib/mcp/types/JsonRpcResponse.ts +0 -20
  366. package/src/lib/mcp/types/McpResourceContents.ts +0 -10
  367. package/src/lib/mcp/types/McpResourceDescriptor.ts +0 -6
  368. package/src/lib/mcp/types/McpResourceServer.ts +0 -12
  369. package/src/lib/mcp/types/McpServer.ts +0 -9
  370. package/src/lib/mcp/types/McpServerOptions.ts +0 -16
  371. package/src/lib/mcp/types/McpSurface.ts +0 -15
  372. package/src/lib/mcp/types/PromptDescriptor.ts +0 -5
  373. package/src/lib/mcp/types/PromptMessage.ts +0 -2
  374. package/src/lib/mcp/types/ToolDescriptor.ts +0 -7
  375. package/src/lib/mcp/types/ToolResult.ts +0 -2
  376. package/src/lib/server/AppModule.ts +0 -47
  377. package/src/lib/server/DELETE.ts +0 -10
  378. package/src/lib/server/GET.ts +0 -10
  379. package/src/lib/server/HEAD.ts +0 -10
  380. package/src/lib/server/PATCH.ts +0 -10
  381. package/src/lib/server/POST.ts +0 -10
  382. package/src/lib/server/PUT.ts +0 -10
  383. package/src/lib/server/agent.ts +0 -86
  384. package/src/lib/server/appDataDir.ts +0 -16
  385. package/src/lib/server/cli/buildEnvContent.ts +0 -19
  386. package/src/lib/server/cli/createTarGz.ts +0 -77
  387. package/src/lib/server/cli/handleCliDownload.ts +0 -152
  388. package/src/lib/server/cli/handleCliInstall.ts +0 -37
  389. package/src/lib/server/cli/installScript.ts +0 -31
  390. package/src/lib/server/cli/maxSourceMtime.ts +0 -26
  391. package/src/lib/server/cookies.ts +0 -30
  392. package/src/lib/server/env.ts +0 -51
  393. package/src/lib/server/error.ts +0 -110
  394. package/src/lib/server/json.ts +0 -57
  395. package/src/lib/server/jsonl.ts +0 -47
  396. package/src/lib/server/prompts/definePrompt.ts +0 -21
  397. package/src/lib/server/prompts/promptRegistry.ts +0 -9
  398. package/src/lib/server/prompts/registerPrompt.ts +0 -6
  399. package/src/lib/server/prompts/renderPromptTemplate.ts +0 -17
  400. package/src/lib/server/prompts/types/Prompt.ts +0 -14
  401. package/src/lib/server/prompts/types/PromptOptions.ts +0 -12
  402. package/src/lib/server/prompts/types/PromptRegistryEntry.ts +0 -13
  403. package/src/lib/server/prompts/types/PromptRoutes.ts +0 -10
  404. package/src/lib/server/redirect.ts +0 -43
  405. package/src/lib/server/render.ts +0 -70
  406. package/src/lib/server/request.ts +0 -19
  407. package/src/lib/server/rpc/defineRpc.ts +0 -271
  408. package/src/lib/server/rpc/dispatchRpcInProcess.ts +0 -46
  409. package/src/lib/server/rpc/findRpcByCommandName.ts +0 -18
  410. package/src/lib/server/rpc/parseArgs.ts +0 -244
  411. package/src/lib/server/rpc/readBodyWithinLimit.ts +0 -47
  412. package/src/lib/server/rpc/registerRpc.ts +0 -6
  413. package/src/lib/server/rpc/resolveRpcJsonSchema.ts +0 -28
  414. package/src/lib/server/rpc/rpcRegistry.ts +0 -11
  415. package/src/lib/server/rpc/runWithRpcTimeout.ts +0 -58
  416. package/src/lib/server/rpc/types/RemoteHandler.ts +0 -31
  417. package/src/lib/server/rpc/types/RemoteRoutes.ts +0 -13
  418. package/src/lib/server/rpc/types/RpcHelper.ts +0 -185
  419. package/src/lib/server/rpc/types/RpcRegistryEntry.ts +0 -50
  420. package/src/lib/server/rpc/types/TypedError.ts +0 -18
  421. package/src/lib/server/rpc/types/TypedResponse.ts +0 -18
  422. package/src/lib/server/rpc/unprocessed.ts +0 -13
  423. package/src/lib/server/rpc/validationError.ts +0 -17
  424. package/src/lib/server/runtime/DEFAULT_PORT.ts +0 -6
  425. package/src/lib/server/runtime/DEV_READY_MESSAGE.ts +0 -6
  426. package/src/lib/server/runtime/DEV_REBUILD_MESSAGE.ts +0 -4
  427. package/src/lib/server/runtime/DEV_RELOAD_CLIENT_SCRIPT.ts +0 -92
  428. package/src/lib/server/runtime/SSR_SWAP_SCRIPT.ts +0 -19
  429. package/src/lib/server/runtime/STATUS_TEXT.ts +0 -22
  430. package/src/lib/server/runtime/STREAMED_HTML_HEADER.ts +0 -13
  431. package/src/lib/server/runtime/acceptsGzip.ts +0 -33
  432. package/src/lib/server/runtime/amendBroadcaster.ts +0 -53
  433. package/src/lib/server/runtime/buildCacheSnapshot.ts +0 -63
  434. package/src/lib/server/runtime/buildHealthPayload.ts +0 -34
  435. package/src/lib/server/runtime/buildInFlightSnapshot.ts +0 -35
  436. package/src/lib/server/runtime/buildInspectorSurface.ts +0 -47
  437. package/src/lib/server/runtime/buildOpenApiSpec.ts +0 -150
  438. package/src/lib/server/runtime/buildPreloadManifest.ts +0 -153
  439. package/src/lib/server/runtime/cacheControlForAsset.ts +0 -22
  440. package/src/lib/server/runtime/cacheStalenessBroadcaster.ts +0 -33
  441. package/src/lib/server/runtime/containsTraversal.ts +0 -41
  442. package/src/lib/server/runtime/createAppAssetServer.ts +0 -100
  443. package/src/lib/server/runtime/createAppRouteResolver.ts +0 -145
  444. package/src/lib/server/runtime/createAssetHeaderCache.ts +0 -31
  445. package/src/lib/server/runtime/createPlumbingRouter.ts +0 -212
  446. package/src/lib/server/runtime/createPublicAssetServer.ts +0 -76
  447. package/src/lib/server/runtime/createRouteDispatcher.ts +0 -121
  448. package/src/lib/server/runtime/createServer.ts +0 -605
  449. package/src/lib/server/runtime/createUiPageRenderer.ts +0 -489
  450. package/src/lib/server/runtime/crossOriginForbidden.ts +0 -17
  451. package/src/lib/server/runtime/crossOriginGate.ts +0 -29
  452. package/src/lib/server/runtime/devClientFingerprint.ts +0 -103
  453. package/src/lib/server/runtime/devReloadResponse.ts +0 -41
  454. package/src/lib/server/runtime/disableIdleTimeoutForStream.ts +0 -27
  455. package/src/lib/server/runtime/envSchemaStore.ts +0 -15
  456. package/src/lib/server/runtime/finalizeResponse.ts +0 -42
  457. package/src/lib/server/runtime/findOpenPort.ts +0 -21
  458. package/src/lib/server/runtime/flushingGzipStream.ts +0 -62
  459. package/src/lib/server/runtime/getActiveServer.ts +0 -6
  460. package/src/lib/server/runtime/globToPathSet.ts +0 -29
  461. package/src/lib/server/runtime/gzipResponse.ts +0 -57
  462. package/src/lib/server/runtime/inFlightRequests.ts +0 -13
  463. package/src/lib/server/runtime/inProcessServer.ts +0 -20
  464. package/src/lib/server/runtime/installAmbientScopeStore.ts +0 -54
  465. package/src/lib/server/runtime/internalErrorResponse.ts +0 -28
  466. package/src/lib/server/runtime/isCrossOriginRequest.ts +0 -23
  467. package/src/lib/server/runtime/listenOnOpenPort.ts +0 -36
  468. package/src/lib/server/runtime/logExposedSurfaces.ts +0 -156
  469. package/src/lib/server/runtime/maybeMountInspector.ts +0 -104
  470. package/src/lib/server/runtime/mimeForExtension.ts +0 -14
  471. package/src/lib/server/runtime/pageRenderSlot.ts +0 -15
  472. package/src/lib/server/runtime/pageUrlFromStore.ts +0 -15
  473. package/src/lib/server/runtime/parseIdleTimeout.ts +0 -10
  474. package/src/lib/server/runtime/parsePort.ts +0 -11
  475. package/src/lib/server/runtime/pathStore.ts +0 -15
  476. package/src/lib/server/runtime/registryManifests.ts +0 -66
  477. package/src/lib/server/runtime/renderCellBarrierStore.ts +0 -15
  478. package/src/lib/server/runtime/requestContext.ts +0 -5
  479. package/src/lib/server/runtime/resolvePageSnapshot.ts +0 -25
  480. package/src/lib/server/runtime/respondWithEmbeddedAsset.ts +0 -18
  481. package/src/lib/server/runtime/runWithRequestScope.ts +0 -165
  482. package/src/lib/server/runtime/serializeCacheSnapshot.ts +0 -31
  483. package/src/lib/server/runtime/serverSlot.ts +0 -13
  484. package/src/lib/server/runtime/setActiveServer.ts +0 -6
  485. package/src/lib/server/runtime/snapshotEntryFromCache.ts +0 -121
  486. package/src/lib/server/runtime/streamCacheResolutions.ts +0 -44
  487. package/src/lib/server/runtime/streamFromIterator.ts +0 -124
  488. package/src/lib/server/runtime/textResponse.ts +0 -23
  489. package/src/lib/server/runtime/typedErrorResponse.ts +0 -26
  490. package/src/lib/server/runtime/types/Assets.ts +0 -6
  491. package/src/lib/server/runtime/types/DevReloadStamp.ts +0 -14
  492. package/src/lib/server/runtime/types/InspectorCacheEntry.ts +0 -24
  493. package/src/lib/server/runtime/types/InspectorCacheSnapshot.ts +0 -11
  494. package/src/lib/server/runtime/types/InspectorContext.ts +0 -34
  495. package/src/lib/server/runtime/types/InspectorInFlightRequest.ts +0 -20
  496. package/src/lib/server/runtime/types/InspectorInFlightSnapshot.ts +0 -10
  497. package/src/lib/server/runtime/types/InspectorPrompt.ts +0 -15
  498. package/src/lib/server/runtime/types/InspectorRpc.ts +0 -27
  499. package/src/lib/server/runtime/types/InspectorSocket.ts +0 -17
  500. package/src/lib/server/runtime/types/InspectorSurface.ts +0 -16
  501. package/src/lib/server/runtime/types/RequestStore.ts +0 -125
  502. package/src/lib/server/runtime/warnUnguardedMcp.ts +0 -43
  503. package/src/lib/server/runtime/withResponseDefaults.ts +0 -29
  504. package/src/lib/server/server.ts +0 -33
  505. package/src/lib/server/socket.ts +0 -32
  506. package/src/lib/server/sockets/amendFamilyEntry.ts +0 -39
  507. package/src/lib/server/sockets/createSocketDispatcher.ts +0 -397
  508. package/src/lib/server/sockets/defineSocket.ts +0 -225
  509. package/src/lib/server/sockets/lookupSocket.ts +0 -6
  510. package/src/lib/server/sockets/registerSocket.ts +0 -18
  511. package/src/lib/server/sockets/socketOperations.ts +0 -36
  512. package/src/lib/server/sockets/socketRegistry.ts +0 -9
  513. package/src/lib/server/sockets/types/SocketOperation.ts +0 -22
  514. package/src/lib/server/sockets/types/SocketOptions.ts +0 -26
  515. package/src/lib/server/sockets/types/SocketRegistryEntry.ts +0 -19
  516. package/src/lib/server/sockets/types/SocketRoutes.ts +0 -10
  517. package/src/lib/server/sse.ts +0 -58
  518. package/src/lib/shared/ABIDE_PACKAGE_NAME.ts +0 -7
  519. package/src/lib/shared/ABIDE_VERSION.ts +0 -9
  520. package/src/lib/shared/AMEND_TOPIC_PREFIX.ts +0 -9
  521. package/src/lib/shared/ASYNC_CELL.ts +0 -5
  522. package/src/lib/shared/CACHE_CONTROL_VALUES.ts +0 -16
  523. package/src/lib/shared/CACHE_STALENESS_SOCKET.ts +0 -8
  524. package/src/lib/shared/CLI_PATH.ts +0 -7
  525. package/src/lib/shared/DEFER.ts +0 -8
  526. package/src/lib/shared/DEV_REBUILD_PATH.ts +0 -6
  527. package/src/lib/shared/DEV_RELOAD_PATH.ts +0 -6
  528. package/src/lib/shared/HEALTH_PATH.ts +0 -7
  529. package/src/lib/shared/HTTP_METHODS.ts +0 -6
  530. package/src/lib/shared/HttpError.ts +0 -30
  531. package/src/lib/shared/IDENTITY_PATH.ts +0 -6
  532. package/src/lib/shared/INSPECTOR_PATH.ts +0 -7
  533. package/src/lib/shared/MCP_PATH.ts +0 -6
  534. package/src/lib/shared/NAV_HEADER.ts +0 -8
  535. package/src/lib/shared/OFFLINE_HEADER.ts +0 -8
  536. package/src/lib/shared/PROXIED_SERVER_SUBDIRS.ts +0 -15
  537. package/src/lib/shared/REF_JSON_HEADER.ts +0 -9
  538. package/src/lib/shared/REF_JSON_TAGS.ts +0 -43
  539. package/src/lib/shared/REMOTE_FUNCTION.ts +0 -8
  540. package/src/lib/shared/REPLAYABLE_METHODS.ts +0 -12
  541. package/src/lib/shared/RESERVED_SOCKET_PREFIX.ts +0 -8
  542. package/src/lib/shared/RPC_ARGS_TYPE.ts +0 -7
  543. package/src/lib/shared/RPC_SHIM_GLOBALS.ts +0 -9
  544. package/src/lib/shared/SEEDS.ts +0 -33
  545. package/src/lib/shared/SOCKETS_PATH.ts +0 -7
  546. package/src/lib/shared/SOCKET_SEED.ts +0 -12
  547. package/src/lib/shared/SSR_SCRIPT_ID.ts +0 -11
  548. package/src/lib/shared/STREAMING_CONTENT_TYPES.ts +0 -12
  549. package/src/lib/shared/SocketDisconnectedError.ts +0 -13
  550. package/src/lib/shared/TEXT_PLAIN.ts +0 -7
  551. package/src/lib/shared/abideImportName.ts +0 -44
  552. package/src/lib/shared/abideLog.ts +0 -38
  553. package/src/lib/shared/activeCacheStore.ts +0 -12
  554. package/src/lib/shared/activePage.ts +0 -12
  555. package/src/lib/shared/amend.ts +0 -48
  556. package/src/lib/shared/amendBroadcastSlot.ts +0 -19
  557. package/src/lib/shared/appDataDir.ts +0 -34
  558. package/src/lib/shared/appNameSlot.ts +0 -10
  559. package/src/lib/shared/applyAmendLocally.ts +0 -20
  560. package/src/lib/shared/applyCacheStalenessLocally.ts +0 -18
  561. package/src/lib/shared/assertExhaustive.ts +0 -14
  562. package/src/lib/shared/attachRpcSelectorMethods.ts +0 -44
  563. package/src/lib/shared/attachSocketSelectorMethods.ts +0 -34
  564. package/src/lib/shared/augmentModule.ts +0 -18
  565. package/src/lib/shared/basePath.ts +0 -11
  566. package/src/lib/shared/basePathFromAppUrl.ts +0 -20
  567. package/src/lib/shared/baseSlot.ts +0 -9
  568. package/src/lib/shared/binaryDirEnvPath.ts +0 -12
  569. package/src/lib/shared/bodyValueForKind.ts +0 -34
  570. package/src/lib/shared/browserClientFlags.ts +0 -10
  571. package/src/lib/shared/buildArtifact.ts +0 -20
  572. package/src/lib/shared/buildRpcProxy.ts +0 -39
  573. package/src/lib/shared/buildRpcRequest.ts +0 -81
  574. package/src/lib/shared/buildSocketOverChannel.ts +0 -102
  575. package/src/lib/shared/bundleGraphFromMetafile.ts +0 -68
  576. package/src/lib/shared/bundleLayout.ts +0 -36
  577. package/src/lib/shared/cache.ts +0 -1584
  578. package/src/lib/shared/cacheEntryFromSnapshot.ts +0 -77
  579. package/src/lib/shared/cacheManagedSlot.ts +0 -10
  580. package/src/lib/shared/cacheReaderSocketSlot.ts +0 -11
  581. package/src/lib/shared/cacheStalenessSlot.ts +0 -21
  582. package/src/lib/shared/cacheStoreSlot.ts +0 -12
  583. package/src/lib/shared/cacheStores.ts +0 -10
  584. package/src/lib/shared/canonicalJson.ts +0 -86
  585. package/src/lib/shared/carriesBodyArgs.ts +0 -13
  586. package/src/lib/shared/changeAffectsClient.ts +0 -40
  587. package/src/lib/shared/clearLastConnection.ts +0 -7
  588. package/src/lib/shared/commandNameForUrl.ts +0 -17
  589. package/src/lib/shared/contentBodyKind.ts +0 -27
  590. package/src/lib/shared/contentTypeOf.ts +0 -6
  591. package/src/lib/shared/createCacheStore.ts +0 -147
  592. package/src/lib/shared/createChannelLog.ts +0 -146
  593. package/src/lib/shared/createLifecycleChannel.ts +0 -62
  594. package/src/lib/shared/createLivenessWatch.ts +0 -118
  595. package/src/lib/shared/createPushIterator.ts +0 -132
  596. package/src/lib/shared/createReachable.ts +0 -78
  597. package/src/lib/shared/createRemoteFunction.ts +0 -210
  598. package/src/lib/shared/createResolverSlot.ts +0 -30
  599. package/src/lib/shared/createRpcServerProgram.ts +0 -1007
  600. package/src/lib/shared/createSocketSubRegistry.ts +0 -112
  601. package/src/lib/shared/createSubscriber.ts +0 -55
  602. package/src/lib/shared/createTraceContext.ts +0 -21
  603. package/src/lib/shared/dataDirEnvPath.ts +0 -12
  604. package/src/lib/shared/debugGate.ts +0 -90
  605. package/src/lib/shared/decodeRefJson.ts +0 -112
  606. package/src/lib/shared/decodeResponse.ts +0 -54
  607. package/src/lib/shared/decodeWireBody.ts +0 -35
  608. package/src/lib/shared/detectRpcMethod.ts +0 -24
  609. package/src/lib/shared/detectTarget.ts +0 -27
  610. package/src/lib/shared/docSnapshotsSlot.ts +0 -13
  611. package/src/lib/shared/done.ts +0 -20
  612. package/src/lib/shared/emitLogRecord.ts +0 -217
  613. package/src/lib/shared/encodeRefJson.ts +0 -108
  614. package/src/lib/shared/encodeSeedValue.ts +0 -24
  615. package/src/lib/shared/encodeWireBody.ts +0 -18
  616. package/src/lib/shared/escapeHtml.ts +0 -15
  617. package/src/lib/shared/escapeRegex.ts +0 -9
  618. package/src/lib/shared/exeSuffix.ts +0 -9
  619. package/src/lib/shared/exitOnBuildFailure.ts +0 -18
  620. package/src/lib/shared/extraForwardHeaders.ts +0 -16
  621. package/src/lib/shared/fieldErrorsFromIssues.ts +0 -27
  622. package/src/lib/shared/fileName.ts +0 -9
  623. package/src/lib/shared/fileStem.ts +0 -11
  624. package/src/lib/shared/findExportCallSite.ts +0 -233
  625. package/src/lib/shared/formatTraceparent.ts +0 -6
  626. package/src/lib/shared/forwardHeaders.ts +0 -44
  627. package/src/lib/shared/generateDeclarations.ts +0 -72
  628. package/src/lib/shared/getRemoteMeta.ts +0 -5
  629. package/src/lib/shared/hasSeedableRequest.ts +0 -25
  630. package/src/lib/shared/health.ts +0 -179
  631. package/src/lib/shared/healthReadSlot.ts +0 -11
  632. package/src/lib/shared/healthSeedSlot.ts +0 -12
  633. package/src/lib/shared/html.ts +0 -19
  634. package/src/lib/shared/httpErrorFor.ts +0 -26
  635. package/src/lib/shared/hydrationWindow.ts +0 -53
  636. package/src/lib/shared/importNamesToStrip.ts +0 -13
  637. package/src/lib/shared/invalidate.ts +0 -39
  638. package/src/lib/shared/invalidateEvent.ts +0 -11
  639. package/src/lib/shared/invalidateTripwire.ts +0 -40
  640. package/src/lib/shared/isAbideHealthPayload.ts +0 -11
  641. package/src/lib/shared/isAsciiWhitespace.ts +0 -5
  642. package/src/lib/shared/isAsyncCell.ts +0 -11
  643. package/src/lib/shared/isAsyncIterable.ts +0 -8
  644. package/src/lib/shared/isCompileTarget.ts +0 -21
  645. package/src/lib/shared/isDebugEnabled.ts +0 -19
  646. package/src/lib/shared/isDebugNegated.ts +0 -17
  647. package/src/lib/shared/isIdentPart.ts +0 -9
  648. package/src/lib/shared/isIdentStart.ts +0 -8
  649. package/src/lib/shared/isLayoutFile.ts +0 -12
  650. package/src/lib/shared/isModuleNotFound.ts +0 -18
  651. package/src/lib/shared/isReadOnlyMethod.ts +0 -14
  652. package/src/lib/shared/isReplayableMethod.ts +0 -7
  653. package/src/lib/shared/isStreamingResponse.ts +0 -12
  654. package/src/lib/shared/isSubscribable.ts +0 -15
  655. package/src/lib/shared/isThenable.ts +0 -9
  656. package/src/lib/shared/jsonSchemaForPromptArguments.ts +0 -29
  657. package/src/lib/shared/jsonSchemaForSchema.ts +0 -39
  658. package/src/lib/shared/jsonSchemaForType.ts +0 -245
  659. package/src/lib/shared/jsonlErrorFrame.ts +0 -24
  660. package/src/lib/shared/keyForRemoteCall.ts +0 -30
  661. package/src/lib/shared/keyMatchesPrefix.ts +0 -9
  662. package/src/lib/shared/keyPrefixForRemote.ts +0 -12
  663. package/src/lib/shared/lastConnectionPath.ts +0 -7
  664. package/src/lib/shared/layoutChainForRoute.ts +0 -22
  665. package/src/lib/shared/lenientDecode.ts +0 -15
  666. package/src/lib/shared/loadEnvFile.ts +0 -17
  667. package/src/lib/shared/loadEnvFromDataDir.ts +0 -14
  668. package/src/lib/shared/loadProjectTsConfig.ts +0 -28
  669. package/src/lib/shared/log.ts +0 -24
  670. package/src/lib/shared/logClosingRecord.ts +0 -28
  671. package/src/lib/shared/logTapSlot.ts +0 -13
  672. package/src/lib/shared/manifestModule.ts +0 -39
  673. package/src/lib/shared/markFrameworkSourcesIgnored.ts +0 -47
  674. package/src/lib/shared/matchRoute.ts +0 -165
  675. package/src/lib/shared/matcherFromEnvelope.ts +0 -31
  676. package/src/lib/shared/memoizeByKey.ts +0 -32
  677. package/src/lib/shared/messageFromError.ts +0 -6
  678. package/src/lib/shared/normalizePathname.ts +0 -11
  679. package/src/lib/shared/normalizeTarget.ts +0 -10
  680. package/src/lib/shared/online.ts +0 -51
  681. package/src/lib/shared/page.ts +0 -30
  682. package/src/lib/shared/pageSlot.ts +0 -17
  683. package/src/lib/shared/pageUrlForFile.ts +0 -14
  684. package/src/lib/shared/parseBoundedEnvInt.ts +0 -20
  685. package/src/lib/shared/parseEnv.ts +0 -41
  686. package/src/lib/shared/parsePromptMarkdown.ts +0 -35
  687. package/src/lib/shared/parseRouteSegments.ts +0 -31
  688. package/src/lib/shared/parseTraceparent.ts +0 -26
  689. package/src/lib/shared/peek.ts +0 -46
  690. package/src/lib/shared/pending.ts +0 -36
  691. package/src/lib/shared/pendingAsyncCellsSlot.ts +0 -13
  692. package/src/lib/shared/prepareRemoteExport.ts +0 -40
  693. package/src/lib/shared/prepareRpcModule.ts +0 -240
  694. package/src/lib/shared/prepareSocketModule.ts +0 -46
  695. package/src/lib/shared/probeRegistries.ts +0 -68
  696. package/src/lib/shared/producerKey.ts +0 -32
  697. package/src/lib/shared/programNameForPackage.ts +0 -16
  698. package/src/lib/shared/promptNameForFile.ts +0 -10
  699. package/src/lib/shared/queryStringFromArgs.ts +0 -38
  700. package/src/lib/shared/randomHexId.ts +0 -14
  701. package/src/lib/shared/reachable.ts +0 -99
  702. package/src/lib/shared/readEnvFile.ts +0 -15
  703. package/src/lib/shared/readLastConnection.ts +0 -18
  704. package/src/lib/shared/readPackageJson.ts +0 -9
  705. package/src/lib/shared/recordRemoteMeta.ts +0 -5
  706. package/src/lib/shared/refresh.ts +0 -39
  707. package/src/lib/shared/refreshing.ts +0 -37
  708. package/src/lib/shared/remoteMetaStore.ts +0 -16
  709. package/src/lib/shared/requestScopeSlot.ts +0 -13
  710. package/src/lib/shared/resolveClientFlags.ts +0 -20
  711. package/src/lib/shared/resolvedCellsSlot.ts +0 -13
  712. package/src/lib/shared/responseBodyKind.ts +0 -35
  713. package/src/lib/shared/responseErrorText.ts +0 -9
  714. package/src/lib/shared/reviveWireField.ts +0 -49
  715. package/src/lib/shared/reviveWireOutput.ts +0 -36
  716. package/src/lib/shared/routeParamsShape.ts +0 -20
  717. package/src/lib/shared/rpcErrorRegistry.ts +0 -69
  718. package/src/lib/shared/rpcServerForRoot.ts +0 -25
  719. package/src/lib/shared/rpcTimeoutSlot.ts +0 -9
  720. package/src/lib/shared/rpcUrlForFile.ts +0 -19
  721. package/src/lib/shared/runningAsStandaloneBinary.ts +0 -13
  722. package/src/lib/shared/safeJsonForScript.ts +0 -17
  723. package/src/lib/shared/scanPages.ts +0 -25
  724. package/src/lib/shared/selectorMatcher.ts +0 -55
  725. package/src/lib/shared/selectorPrefix.ts +0 -32
  726. package/src/lib/shared/serializeEnv.ts +0 -30
  727. package/src/lib/shared/serializeSelector.ts +0 -69
  728. package/src/lib/shared/setAppName.ts +0 -5
  729. package/src/lib/shared/setOwnProperty.ts +0 -19
  730. package/src/lib/shared/setsIntersect.ts +0 -15
  731. package/src/lib/shared/sharedCacheStore.ts +0 -14
  732. package/src/lib/shared/sharedCacheStoreSlot.ts +0 -10
  733. package/src/lib/shared/skipNonCode.ts +0 -230
  734. package/src/lib/shared/snapshotShippable.ts +0 -23
  735. package/src/lib/shared/snippet.ts +0 -30
  736. package/src/lib/shared/socketNameForFile.ts +0 -11
  737. package/src/lib/shared/socketTailsSlot.ts +0 -13
  738. package/src/lib/shared/socketTapSlot.ts +0 -12
  739. package/src/lib/shared/sseErrorFrame.ts +0 -29
  740. package/src/lib/shared/streamResponse.ts +0 -180
  741. package/src/lib/shared/streamedCellsSlot.ts +0 -14
  742. package/src/lib/shared/stripImport.ts +0 -29
  743. package/src/lib/shared/subscribableFromResponse.ts +0 -51
  744. package/src/lib/shared/subscribableProbes.ts +0 -111
  745. package/src/lib/shared/tailProbeSlot.ts +0 -23
  746. package/src/lib/shared/toTagSet.ts +0 -4
  747. package/src/lib/shared/trace.ts +0 -16
  748. package/src/lib/shared/types/AmendApply.ts +0 -15
  749. package/src/lib/shared/types/AsyncComputed.ts +0 -20
  750. package/src/lib/shared/types/AsyncState.ts +0 -13
  751. package/src/lib/shared/types/CacheEntry.ts +0 -100
  752. package/src/lib/shared/types/CacheInvalidation.ts +0 -9
  753. package/src/lib/shared/types/CacheOnContext.ts +0 -15
  754. package/src/lib/shared/types/CacheOptions.ts +0 -53
  755. package/src/lib/shared/types/CachePolicy.ts +0 -31
  756. package/src/lib/shared/types/CacheReaderHook.ts +0 -11
  757. package/src/lib/shared/types/CacheSelector.ts +0 -17
  758. package/src/lib/shared/types/CacheSnapshotEntry.ts +0 -32
  759. package/src/lib/shared/types/CacheStalenessApply.ts +0 -13
  760. package/src/lib/shared/types/CacheStalenessFrame.ts +0 -24
  761. package/src/lib/shared/types/CacheStats.ts +0 -13
  762. package/src/lib/shared/types/CacheStore.ts +0 -45
  763. package/src/lib/shared/types/ChannelLog.ts +0 -13
  764. package/src/lib/shared/types/ClientFlags.ts +0 -13
  765. package/src/lib/shared/types/CompileTarget.ts +0 -6
  766. package/src/lib/shared/types/DebugGate.ts +0 -10
  767. package/src/lib/shared/types/DocSnapshots.ts +0 -12
  768. package/src/lib/shared/types/ErrorJsonSchemas.ts +0 -8
  769. package/src/lib/shared/types/ErrorSpec.ts +0 -11
  770. package/src/lib/shared/types/FrameworkLog.ts +0 -13
  771. package/src/lib/shared/types/HttpMethod.ts +0 -3
  772. package/src/lib/shared/types/InputCoercion.ts +0 -17
  773. package/src/lib/shared/types/LastConnection.ts +0 -9
  774. package/src/lib/shared/types/Log.ts +0 -13
  775. package/src/lib/shared/types/LogRecord.ts +0 -42
  776. package/src/lib/shared/types/LogVoice.ts +0 -7
  777. package/src/lib/shared/types/NamedAsyncIterable.ts +0 -26
  778. package/src/lib/shared/types/OutputWirePlan.ts +0 -17
  779. package/src/lib/shared/types/PageSnapshot.ts +0 -14
  780. package/src/lib/shared/types/PagesScan.ts +0 -7
  781. package/src/lib/shared/types/PendingAsyncCells.ts +0 -10
  782. package/src/lib/shared/types/PromptArgument.ts +0 -12
  783. package/src/lib/shared/types/RawRemoteFunction.ts +0 -20
  784. package/src/lib/shared/types/RemoteCallable.ts +0 -40
  785. package/src/lib/shared/types/RemoteFunction.ts +0 -116
  786. package/src/lib/shared/types/ReplayableMethod.ts +0 -7
  787. package/src/lib/shared/types/RequestScopeInfo.ts +0 -16
  788. package/src/lib/shared/types/ResolvedCells.ts +0 -11
  789. package/src/lib/shared/types/ResolverSlot.ts +0 -13
  790. package/src/lib/shared/types/ReturnBody.ts +0 -15
  791. package/src/lib/shared/types/RpcBuildStamps.ts +0 -32
  792. package/src/lib/shared/types/RpcError.ts +0 -26
  793. package/src/lib/shared/types/RpcErrorGuard.ts +0 -35
  794. package/src/lib/shared/types/RpcInvoker.ts +0 -6
  795. package/src/lib/shared/types/RpcOptions.ts +0 -22
  796. package/src/lib/shared/types/Socket.ts +0 -54
  797. package/src/lib/shared/types/SocketChannel.ts +0 -17
  798. package/src/lib/shared/types/SocketClientFrame.ts +0 -19
  799. package/src/lib/shared/types/SocketServerFrame.ts +0 -24
  800. package/src/lib/shared/types/SocketSubCallbacks.ts +0 -13
  801. package/src/lib/shared/types/SocketTails.ts +0 -13
  802. package/src/lib/shared/types/SourceMap.ts +0 -14
  803. package/src/lib/shared/types/SsrBootState.ts +0 -27
  804. package/src/lib/shared/types/SsrPayload.ts +0 -36
  805. package/src/lib/shared/types/StandardSchemaV1.ts +0 -56
  806. package/src/lib/shared/types/StreamPolicy.ts +0 -11
  807. package/src/lib/shared/types/StreamedCells.ts +0 -19
  808. package/src/lib/shared/types/StreamedResolution.ts +0 -28
  809. package/src/lib/shared/types/TailHooks.ts +0 -13
  810. package/src/lib/shared/types/TraceContext.ts +0 -17
  811. package/src/lib/shared/types/ValidationErrorData.ts +0 -20
  812. package/src/lib/shared/types/WireKind.ts +0 -11
  813. package/src/lib/shared/url.ts +0 -141
  814. package/src/lib/shared/validationHttpError.ts +0 -33
  815. package/src/lib/shared/warmSeedKey.ts +0 -16
  816. package/src/lib/shared/wireJsonReplacer.ts +0 -30
  817. package/src/lib/shared/withBase.ts +0 -10
  818. package/src/lib/shared/withBaseUrl.ts +0 -17
  819. package/src/lib/shared/withCacheManaged.ts +0 -18
  820. package/src/lib/shared/withJsonSchema.ts +0 -21
  821. package/src/lib/shared/writeDts.ts +0 -19
  822. package/src/lib/shared/writeHealthDts.ts +0 -36
  823. package/src/lib/shared/writeLastConnection.ts +0 -13
  824. package/src/lib/shared/writePublicAssetsDts.ts +0 -27
  825. package/src/lib/shared/writeRoutesDts.ts +0 -41
  826. package/src/lib/shared/writeRpcDts.ts +0 -60
  827. package/src/lib/shared/writeTestRpcDts.ts +0 -45
  828. package/src/lib/shared/writeTestSocketsDts.ts +0 -34
  829. package/src/lib/test/assertAgentFrameConformance.ts +0 -73
  830. package/src/lib/test/createScriptedSurface.ts +0 -45
  831. package/src/lib/test/createTestApp.ts +0 -242
  832. package/src/lib/test/createTestSocketChannel.ts +0 -85
  833. package/src/lib/ui/README.md +0 -86
  834. package/src/lib/ui/activePendingCells.ts +0 -14
  835. package/src/lib/ui/amendReaderHook.ts +0 -125
  836. package/src/lib/ui/compile/ABIDE_SEMANTIC_TOKENS_LEGEND.ts +0 -79
  837. package/src/lib/ui/compile/AbideCompileError.ts +0 -16
  838. package/src/lib/ui/compile/BLOCK_KEYWORDS.ts +0 -21
  839. package/src/lib/ui/compile/SSR_ESCAPE.ts +0 -40
  840. package/src/lib/ui/compile/TS_PRINTER.ts +0 -7
  841. package/src/lib/ui/compile/UI_RUNTIME_IMPORTS.ts +0 -86
  842. package/src/lib/ui/compile/VOID_TAGS.ts +0 -22
  843. package/src/lib/ui/compile/abideUiPlugin.ts +0 -109
  844. package/src/lib/ui/compile/analyzeComponent.ts +0 -222
  845. package/src/lib/ui/compile/asOutlet.ts +0 -30
  846. package/src/lib/ui/compile/assertTranspiles.ts +0 -19
  847. package/src/lib/ui/compile/assetModulesFile.ts +0 -32
  848. package/src/lib/ui/compile/assignmentTargetNames.ts +0 -54
  849. package/src/lib/ui/compile/asyncInterpolationFields.ts +0 -152
  850. package/src/lib/ui/compile/asyncValuePositionError.ts +0 -21
  851. package/src/lib/ui/compile/asyncValuePositionInterpolations.ts +0 -64
  852. package/src/lib/ui/compile/attrLiftPosition.ts +0 -18
  853. package/src/lib/ui/compile/awaitPlan.ts +0 -60
  854. package/src/lib/ui/compile/awaitSubjectExpr.ts +0 -23
  855. package/src/lib/ui/compile/bindListenEvent.ts +0 -18
  856. package/src/lib/ui/compile/cachedShadowProgram.ts +0 -39
  857. package/src/lib/ui/compile/cachedSourceFile.ts +0 -40
  858. package/src/lib/ui/compile/catchBinding.ts +0 -10
  859. package/src/lib/ui/compile/classStyleMergePlan.ts +0 -108
  860. package/src/lib/ui/compile/classifyInterpolationType.ts +0 -46
  861. package/src/lib/ui/compile/collectAbideDiagnostics.ts +0 -166
  862. package/src/lib/ui/compile/compileComponent.ts +0 -46
  863. package/src/lib/ui/compile/compileModule.ts +0 -306
  864. package/src/lib/ui/compile/compileSSR.ts +0 -119
  865. package/src/lib/ui/compile/compileShadow.ts +0 -1326
  866. package/src/lib/ui/compile/componentOrdinals.ts +0 -39
  867. package/src/lib/ui/compile/composeProps.ts +0 -64
  868. package/src/lib/ui/compile/createShadowLanguageService.ts +0 -348
  869. package/src/lib/ui/compile/createShadowProgram.ts +0 -127
  870. package/src/lib/ui/compile/createShadowScope.ts +0 -42
  871. package/src/lib/ui/compile/declaredNames.ts +0 -36
  872. package/src/lib/ui/compile/decodeHtmlEntities.ts +0 -53
  873. package/src/lib/ui/compile/destructureBindingNames.ts +0 -38
  874. package/src/lib/ui/compile/desugarSignals.ts +0 -1113
  875. package/src/lib/ui/compile/eachPlan.ts +0 -61
  876. package/src/lib/ui/compile/elementPlan.ts +0 -55
  877. package/src/lib/ui/compile/encodeSemanticTokens.ts +0 -60
  878. package/src/lib/ui/compile/expressionIsPrefixEvaluable.ts +0 -19
  879. package/src/lib/ui/compile/generateBuild.ts +0 -903
  880. package/src/lib/ui/compile/generateSSR.ts +0 -973
  881. package/src/lib/ui/compile/groupBindParts.ts +0 -28
  882. package/src/lib/ui/compile/hasTopLevelAwait.ts +0 -28
  883. package/src/lib/ui/compile/hoistCells.ts +0 -120
  884. package/src/lib/ui/compile/hoistableAwaits.ts +0 -183
  885. package/src/lib/ui/compile/hoistableChildRenders.ts +0 -112
  886. package/src/lib/ui/compile/identifierReferencePattern.ts +0 -13
  887. package/src/lib/ui/compile/ifPlan.ts +0 -36
  888. package/src/lib/ui/compile/interpolatedTemplateLiteral.ts +0 -27
  889. package/src/lib/ui/compile/interpolationClassifierForRoot.ts +0 -32
  890. package/src/lib/ui/compile/isAnchorPositioned.ts +0 -19
  891. package/src/lib/ui/compile/isControlFlow.ts +0 -20
  892. package/src/lib/ui/compile/isFunctionScopeBoundary.ts +0 -20
  893. package/src/lib/ui/compile/isPlainIdentifier.ts +0 -7
  894. package/src/lib/ui/compile/isSpuriousAsyncReadDiagnostic.ts +0 -215
  895. package/src/lib/ui/compile/isTextLeaf.ts +0 -16
  896. package/src/lib/ui/compile/isWhitespaceText.ts +0 -19
  897. package/src/lib/ui/compile/liftAsyncSubExpressions.ts +0 -166
  898. package/src/lib/ui/compile/liftScriptSeed.ts +0 -47
  899. package/src/lib/ui/compile/loadShadowTsConfig.ts +0 -31
  900. package/src/lib/ui/compile/lowerAsyncInterpolations.ts +0 -92
  901. package/src/lib/ui/compile/lowerCompoundAssignment.ts +0 -49
  902. package/src/lib/ui/compile/lowerContext.ts +0 -167
  903. package/src/lib/ui/compile/lowerDocAccess.ts +0 -302
  904. package/src/lib/ui/compile/lowerScript.ts +0 -190
  905. package/src/lib/ui/compile/lowerUpdateExpression.ts +0 -32
  906. package/src/lib/ui/compile/makeVarNamer.ts +0 -10
  907. package/src/lib/ui/compile/nearestProjectRoot.ts +0 -16
  908. package/src/lib/ui/compile/nodeAtShadowOffset.ts +0 -28
  909. package/src/lib/ui/compile/offsetToLineColumn.ts +0 -16
  910. package/src/lib/ui/compile/offsetToPosition.ts +0 -9
  911. package/src/lib/ui/compile/pagePropsType.ts +0 -23
  912. package/src/lib/ui/compile/parseTemplate.ts +0 -25
  913. package/src/lib/ui/compile/parseTemplateRecovering.ts +0 -1385
  914. package/src/lib/ui/compile/prepareNestedScript.ts +0 -62
  915. package/src/lib/ui/compile/reactiveBinding.ts +0 -47
  916. package/src/lib/ui/compile/referencedIdentifiers.ts +0 -35
  917. package/src/lib/ui/compile/remapShadowDiagnostic.ts +0 -30
  918. package/src/lib/ui/compile/renameSignalRefs.ts +0 -425
  919. package/src/lib/ui/compile/resolveAbideImports.ts +0 -29
  920. package/src/lib/ui/compile/resolveBranches.ts +0 -21
  921. package/src/lib/ui/compile/resolveReactiveExport.ts +0 -92
  922. package/src/lib/ui/compile/scopeAttr.ts +0 -9
  923. package/src/lib/ui/compile/scopeCss.ts +0 -138
  924. package/src/lib/ui/compile/seedTypeClassifierForRoot.ts +0 -60
  925. package/src/lib/ui/compile/shadowInterpolationClassifier.ts +0 -47
  926. package/src/lib/ui/compile/shadowNaming.ts +0 -11
  927. package/src/lib/ui/compile/signalCallee.ts +0 -24
  928. package/src/lib/ui/compile/skeletonContext.ts +0 -133
  929. package/src/lib/ui/compile/skeletonable.ts +0 -68
  930. package/src/lib/ui/compile/snippetPlan.ts +0 -28
  931. package/src/lib/ui/compile/sourceFileOptionsSignature.ts +0 -20
  932. package/src/lib/ui/compile/sourceToShadowOffset.ts +0 -24
  933. package/src/lib/ui/compile/spreadExcludedNames.ts +0 -27
  934. package/src/lib/ui/compile/staticAttr.ts +0 -11
  935. package/src/lib/ui/compile/staticAttrValue.ts +0 -13
  936. package/src/lib/ui/compile/staticTextPart.ts +0 -12
  937. package/src/lib/ui/compile/stripEffects.ts +0 -48
  938. package/src/lib/ui/compile/structuralHeadTokens.ts +0 -107
  939. package/src/lib/ui/compile/switchPlan.ts +0 -28
  940. package/src/lib/ui/compile/templateAnchorAdapter.ts +0 -61
  941. package/src/lib/ui/compile/templateElementAdapter.ts +0 -44
  942. package/src/lib/ui/compile/templateSemanticTokens.ts +0 -21
  943. package/src/lib/ui/compile/templateStartOffset.ts +0 -15
  944. package/src/lib/ui/compile/tryPlan.ts +0 -37
  945. package/src/lib/ui/compile/types/AbideDiagnostic.ts +0 -14
  946. package/src/lib/ui/compile/types/AnalyzedComponent.ts +0 -42
  947. package/src/lib/ui/compile/types/AsyncInterpolationField.ts +0 -19
  948. package/src/lib/ui/compile/types/Binding.ts +0 -24
  949. package/src/lib/ui/compile/types/CompiledShadow.ts +0 -27
  950. package/src/lib/ui/compile/types/ElementPlan.ts +0 -43
  951. package/src/lib/ui/compile/types/InterpolationClassifier.ts +0 -12
  952. package/src/lib/ui/compile/types/InterpolationKind.ts +0 -7
  953. package/src/lib/ui/compile/types/ParseDiagnostic.ts +0 -8
  954. package/src/lib/ui/compile/types/SeedTypeClassifier.ts +0 -15
  955. package/src/lib/ui/compile/types/SemanticToken.ts +0 -11
  956. package/src/lib/ui/compile/types/ShadowKind.ts +0 -9
  957. package/src/lib/ui/compile/types/ShadowScope.ts +0 -19
  958. package/src/lib/ui/compile/types/SkeletonContext.ts +0 -21
  959. package/src/lib/ui/compile/types/TemplateAttr.ts +0 -34
  960. package/src/lib/ui/compile/types/TemplateNode.ts +0 -137
  961. package/src/lib/ui/compile/types/TextPart.ts +0 -8
  962. package/src/lib/ui/compile/types/ValuePositionInterpolation.ts +0 -13
  963. package/src/lib/ui/compile/unwrapParens.ts +0 -10
  964. package/src/lib/ui/compile/walkAnchorOrder.ts +0 -57
  965. package/src/lib/ui/compile/walkElementOrder.ts +0 -60
  966. package/src/lib/ui/compile/withBindings.ts +0 -45
  967. package/src/lib/ui/compile/wrapReactionCellSources.ts +0 -121
  968. package/src/lib/ui/compile/wrapReactiveSeeds.ts +0 -44
  969. package/src/lib/ui/compile/wrapSeed.ts +0 -28
  970. package/src/lib/ui/compile/writtenTemplateNames.ts +0 -84
  971. package/src/lib/ui/computed.ts +0 -75
  972. package/src/lib/ui/createScope.ts +0 -157
  973. package/src/lib/ui/dom/MATHML_NAMESPACE.ts +0 -6
  974. package/src/lib/ui/dom/SVG_NAMESPACE.ts +0 -8
  975. package/src/lib/ui/dom/adoptRange.ts +0 -27
  976. package/src/lib/ui/dom/anchorCursor.ts +0 -25
  977. package/src/lib/ui/dom/anchoredBranch.ts +0 -153
  978. package/src/lib/ui/dom/appendSnippet.ts +0 -75
  979. package/src/lib/ui/dom/appendStatic.ts +0 -26
  980. package/src/lib/ui/dom/appendText.ts +0 -160
  981. package/src/lib/ui/dom/appendTextAt.ts +0 -39
  982. package/src/lib/ui/dom/assertClaimedText.ts +0 -30
  983. package/src/lib/ui/dom/attach.ts +0 -25
  984. package/src/lib/ui/dom/attr.ts +0 -57
  985. package/src/lib/ui/dom/awaitBlock.ts +0 -314
  986. package/src/lib/ui/dom/awaitSubject.ts +0 -118
  987. package/src/lib/ui/dom/bindProp.ts +0 -22
  988. package/src/lib/ui/dom/bindSelectValue.ts +0 -48
  989. package/src/lib/ui/dom/bindableProp.ts +0 -47
  990. package/src/lib/ui/dom/buildDetachedRange.ts +0 -31
  991. package/src/lib/ui/dom/cellPending.ts +0 -24
  992. package/src/lib/ui/dom/claimText.ts +0 -38
  993. package/src/lib/ui/dom/clearBetween.ts +0 -16
  994. package/src/lib/ui/dom/cloneStatic.ts +0 -69
  995. package/src/lib/ui/dom/commentData.ts +0 -14
  996. package/src/lib/ui/dom/depthZeroNodes.ts +0 -34
  997. package/src/lib/ui/dom/discardAndRebuild.ts +0 -23
  998. package/src/lib/ui/dom/discardBoundary.ts +0 -46
  999. package/src/lib/ui/dom/disposeRange.ts +0 -18
  1000. package/src/lib/ui/dom/domAnchorAdapter.ts +0 -29
  1001. package/src/lib/ui/dom/domElementAdapter.ts +0 -20
  1002. package/src/lib/ui/dom/each.ts +0 -253
  1003. package/src/lib/ui/dom/eachAsync.ts +0 -188
  1004. package/src/lib/ui/dom/effectiveChildNamespace.ts +0 -13
  1005. package/src/lib/ui/dom/enterNamespace.ts +0 -20
  1006. package/src/lib/ui/dom/fillBefore.ts +0 -42
  1007. package/src/lib/ui/dom/fillBoundary.ts +0 -38
  1008. package/src/lib/ui/dom/fillRange.ts +0 -30
  1009. package/src/lib/ui/dom/foreignWrapperTag.ts +0 -22
  1010. package/src/lib/ui/dom/hydrate.ts +0 -34
  1011. package/src/lib/ui/dom/inheritedNamespace.ts +0 -19
  1012. package/src/lib/ui/dom/isComment.ts +0 -6
  1013. package/src/lib/ui/dom/isElement.ts +0 -6
  1014. package/src/lib/ui/dom/markerDepthDelta.ts +0 -19
  1015. package/src/lib/ui/dom/matchingRangeClose.ts +0 -29
  1016. package/src/lib/ui/dom/mergeProps.ts +0 -32
  1017. package/src/lib/ui/dom/mount.ts +0 -30
  1018. package/src/lib/ui/dom/mountChild.ts +0 -129
  1019. package/src/lib/ui/dom/mountRange.ts +0 -48
  1020. package/src/lib/ui/dom/mountSlot.ts +0 -38
  1021. package/src/lib/ui/dom/mountSwappableRange.ts +0 -122
  1022. package/src/lib/ui/dom/moveRange.ts +0 -19
  1023. package/src/lib/ui/dom/mutateDocContainer.ts +0 -65
  1024. package/src/lib/ui/dom/on.ts +0 -33
  1025. package/src/lib/ui/dom/openMarker.ts +0 -22
  1026. package/src/lib/ui/dom/outlet.ts +0 -63
  1027. package/src/lib/ui/dom/parseRawNodes.ts +0 -17
  1028. package/src/lib/ui/dom/readCall.ts +0 -29
  1029. package/src/lib/ui/dom/readCell.ts +0 -55
  1030. package/src/lib/ui/dom/readTextOrSuspend.ts +0 -21
  1031. package/src/lib/ui/dom/removeRange.ts +0 -18
  1032. package/src/lib/ui/dom/replaceRange.ts +0 -24
  1033. package/src/lib/ui/dom/restProps.ts +0 -32
  1034. package/src/lib/ui/dom/skeleton.ts +0 -153
  1035. package/src/lib/ui/dom/spreadAttrs.ts +0 -95
  1036. package/src/lib/ui/dom/spreadProps.ts +0 -31
  1037. package/src/lib/ui/dom/switchBlock.ts +0 -80
  1038. package/src/lib/ui/dom/templateFor.ts +0 -28
  1039. package/src/lib/ui/dom/tryBlock.ts +0 -263
  1040. package/src/lib/ui/dom/types/EachRow.ts +0 -21
  1041. package/src/lib/ui/dom/types/SkeletonHoles.ts +0 -10
  1042. package/src/lib/ui/dom/types/SwitchCase.ts +0 -11
  1043. package/src/lib/ui/dom/when.ts +0 -58
  1044. package/src/lib/ui/dom/withScope.ts +0 -37
  1045. package/src/lib/ui/dom/withSuspense.ts +0 -22
  1046. package/src/lib/ui/dom/writeCell.ts +0 -22
  1047. package/src/lib/ui/effect.ts +0 -24
  1048. package/src/lib/ui/enterScope.ts +0 -18
  1049. package/src/lib/ui/exitScope.ts +0 -8
  1050. package/src/lib/ui/finalizeStreamedChildren.ts +0 -88
  1051. package/src/lib/ui/flight.ts +0 -56
  1052. package/src/lib/ui/html.ts +0 -39
  1053. package/src/lib/ui/isolateCellBarrier.ts +0 -17
  1054. package/src/lib/ui/linked.ts +0 -125
  1055. package/src/lib/ui/navigate.ts +0 -77
  1056. package/src/lib/ui/probeNavigation.ts +0 -33
  1057. package/src/lib/ui/props.ts +0 -17
  1058. package/src/lib/ui/remoteProxy.ts +0 -256
  1059. package/src/lib/ui/renderChain.ts +0 -113
  1060. package/src/lib/ui/renderToStream.ts +0 -128
  1061. package/src/lib/ui/resumeSeedScript.ts +0 -27
  1062. package/src/lib/ui/router.ts +0 -649
  1063. package/src/lib/ui/runtime/AsyncCellError.ts +0 -21
  1064. package/src/lib/ui/runtime/BRANCH_SEGMENT.ts +0 -24
  1065. package/src/lib/ui/runtime/CELL_SEED.ts +0 -12
  1066. package/src/lib/ui/runtime/CHILD_PRESENT.ts +0 -8
  1067. package/src/lib/ui/runtime/CURRENT_BOUNDARY.ts +0 -11
  1068. package/src/lib/ui/runtime/CURRENT_PATH.ts +0 -29
  1069. package/src/lib/ui/runtime/CURRENT_SCOPE.ts +0 -23
  1070. package/src/lib/ui/runtime/DOC_SEED.ts +0 -10
  1071. package/src/lib/ui/runtime/HOLE_ATTRIBUTE.ts +0 -9
  1072. package/src/lib/ui/runtime/NODE_STATE.ts +0 -22
  1073. package/src/lib/ui/runtime/OUTLET_MARKER.ts +0 -10
  1074. package/src/lib/ui/runtime/OUTLET_TAG.ts +0 -7
  1075. package/src/lib/ui/runtime/OWNER.ts +0 -8
  1076. package/src/lib/ui/runtime/PENDING_OUTLET.ts +0 -8
  1077. package/src/lib/ui/runtime/RANGE_MARKER.ts +0 -18
  1078. package/src/lib/ui/runtime/REACTIVE_CONTEXT.ts +0 -20
  1079. package/src/lib/ui/runtime/RENDER.ts +0 -35
  1080. package/src/lib/ui/runtime/REQUEST_SUPERSEDED.ts +0 -8
  1081. package/src/lib/ui/runtime/RESUME.ts +0 -21
  1082. package/src/lib/ui/runtime/SEED_MARKS.ts +0 -14
  1083. package/src/lib/ui/runtime/STREAMED_CELLS.ts +0 -57
  1084. package/src/lib/ui/runtime/SuspenseSignal.ts +0 -24
  1085. package/src/lib/ui/runtime/abortNode.ts +0 -22
  1086. package/src/lib/ui/runtime/ambientPathBacking.ts +0 -32
  1087. package/src/lib/ui/runtime/ambientScopeBacking.ts +0 -26
  1088. package/src/lib/ui/runtime/applyPatchToTree.ts +0 -54
  1089. package/src/lib/ui/runtime/batch.ts +0 -22
  1090. package/src/lib/ui/runtime/blockId.ts +0 -31
  1091. package/src/lib/ui/runtime/boundaryFor.ts +0 -11
  1092. package/src/lib/ui/runtime/cellBarrierBacking.ts +0 -30
  1093. package/src/lib/ui/runtime/claimChild.ts +0 -8
  1094. package/src/lib/ui/runtime/claimExpected.ts +0 -27
  1095. package/src/lib/ui/runtime/claimMarker.ts +0 -13
  1096. package/src/lib/ui/runtime/claimRun.ts +0 -22
  1097. package/src/lib/ui/runtime/clientPage.ts +0 -116
  1098. package/src/lib/ui/runtime/consumeSeed.ts +0 -38
  1099. package/src/lib/ui/runtime/createAsyncCell.ts +0 -358
  1100. package/src/lib/ui/runtime/createComputedNode.ts +0 -19
  1101. package/src/lib/ui/runtime/createDoc.ts +0 -334
  1102. package/src/lib/ui/runtime/createEffectNode.ts +0 -81
  1103. package/src/lib/ui/runtime/createSignalNode.ts +0 -19
  1104. package/src/lib/ui/runtime/currentAbortSignal.ts +0 -26
  1105. package/src/lib/ui/runtime/detachLink.ts +0 -21
  1106. package/src/lib/ui/runtime/endTracking.ts +0 -24
  1107. package/src/lib/ui/runtime/enterRenderPass.ts +0 -13
  1108. package/src/lib/ui/runtime/escapeKey.ts +0 -19
  1109. package/src/lib/ui/runtime/exitRenderPass.ts +0 -7
  1110. package/src/lib/ui/runtime/flushEffects.ts +0 -91
  1111. package/src/lib/ui/runtime/generationGuard.ts +0 -40
  1112. package/src/lib/ui/runtime/historyEntries.ts +0 -151
  1113. package/src/lib/ui/runtime/inScope.ts +0 -19
  1114. package/src/lib/ui/runtime/isAsyncFunction.ts +0 -14
  1115. package/src/lib/ui/runtime/nextBlockId.ts +0 -12
  1116. package/src/lib/ui/runtime/parkCursor.ts +0 -10
  1117. package/src/lib/ui/runtime/pathSegments.ts +0 -10
  1118. package/src/lib/ui/runtime/reactiveAbortState.ts +0 -15
  1119. package/src/lib/ui/runtime/readNode.ts +0 -38
  1120. package/src/lib/ui/runtime/renderPath.ts +0 -16
  1121. package/src/lib/ui/runtime/reportHydrationDivergence.ts +0 -30
  1122. package/src/lib/ui/runtime/routeBareSeed.ts +0 -28
  1123. package/src/lib/ui/runtime/runHydrationPass.ts +0 -69
  1124. package/src/lib/ui/runtime/runNode.ts +0 -75
  1125. package/src/lib/ui/runtime/runtimePath.ts +0 -9
  1126. package/src/lib/ui/runtime/scope.ts +0 -46
  1127. package/src/lib/ui/runtime/scopeGroup.ts +0 -40
  1128. package/src/lib/ui/runtime/toTeardown.ts +0 -38
  1129. package/src/lib/ui/runtime/track.ts +0 -60
  1130. package/src/lib/ui/runtime/trigger.ts +0 -74
  1131. package/src/lib/ui/runtime/types/AbideHistoryState.ts +0 -9
  1132. package/src/lib/ui/runtime/types/Boundary.ts +0 -9
  1133. package/src/lib/ui/runtime/types/Cell.ts +0 -7
  1134. package/src/lib/ui/runtime/types/Computed.ts +0 -3
  1135. package/src/lib/ui/runtime/types/Doc.ts +0 -24
  1136. package/src/lib/ui/runtime/types/EffectResult.ts +0 -10
  1137. package/src/lib/ui/runtime/types/HydrationCursor.ts +0 -8
  1138. package/src/lib/ui/runtime/types/NavVerdict.ts +0 -9
  1139. package/src/lib/ui/runtime/types/Patch.ts +0 -11
  1140. package/src/lib/ui/runtime/types/PathWalk.ts +0 -10
  1141. package/src/lib/ui/runtime/types/ReactiveLink.ts +0 -21
  1142. package/src/lib/ui/runtime/types/ReactiveNode.ts +0 -33
  1143. package/src/lib/ui/runtime/types/RenderContext.ts +0 -10
  1144. package/src/lib/ui/runtime/types/Route.ts +0 -9
  1145. package/src/lib/ui/runtime/types/RouteLoader.ts +0 -7
  1146. package/src/lib/ui/runtime/types/SsrRender.ts +0 -34
  1147. package/src/lib/ui/runtime/types/State.ts +0 -3
  1148. package/src/lib/ui/runtime/types/Teardown.ts +0 -5
  1149. package/src/lib/ui/runtime/types/UiComponent.ts +0 -24
  1150. package/src/lib/ui/runtime/types/UiProps.ts +0 -12
  1151. package/src/lib/ui/runtime/unescapeKey.ts +0 -12
  1152. package/src/lib/ui/runtime/unlinkDeps.ts +0 -28
  1153. package/src/lib/ui/runtime/untrack.ts +0 -20
  1154. package/src/lib/ui/runtime/updateIfNecessary.ts +0 -40
  1155. package/src/lib/ui/runtime/walkPath.ts +0 -41
  1156. package/src/lib/ui/runtime/withOptionalPath.ts +0 -8
  1157. package/src/lib/ui/runtime/withPath.ts +0 -16
  1158. package/src/lib/ui/runtime/withPathFrom.ts +0 -20
  1159. package/src/lib/ui/runtime/withoutHydration.ts +0 -22
  1160. package/src/lib/ui/runtime/writeNode.ts +0 -16
  1161. package/src/lib/ui/scope.ts +0 -20
  1162. package/src/lib/ui/seedBootState.ts +0 -53
  1163. package/src/lib/ui/seedStreamedResolution.ts +0 -56
  1164. package/src/lib/ui/settleAsyncCells.ts +0 -51
  1165. package/src/lib/ui/socketChannel.ts +0 -156
  1166. package/src/lib/ui/socketProxy.ts +0 -47
  1167. package/src/lib/ui/startClient.ts +0 -156
  1168. package/src/lib/ui/state.ts +0 -77
  1169. package/src/lib/ui/subscribeCacheStaleness.ts +0 -85
  1170. package/src/lib/ui/trackedComputed.ts +0 -68
  1171. package/src/lib/ui/tryEncodeResume.ts +0 -11
  1172. package/src/lib/ui/types/Layouts.ts +0 -9
  1173. package/src/lib/ui/types/Pages.ts +0 -8
  1174. package/src/lib/ui/types/Scope.ts +0 -68
  1175. package/src/lib/ui/watch.ts +0 -150
  1176. package/src/preload.ts +0 -19
  1177. package/src/scaffold.ts +0 -153
  1178. package/src/serverBuildPlugins.ts +0 -25
  1179. package/src/serverEntry.ts +0 -138
  1180. package/src/zodCjsPlugin.ts +0 -51
  1181. package/template/.zed/settings.json +0 -10
  1182. package/template/CLAUDE.md +0 -22
  1183. package/template/bunfig.toml +0 -4
  1184. package/template/package.json +0 -21
  1185. package/template/src/app.ts +0 -28
  1186. package/template/src/bundle/icon.png +0 -0
  1187. package/template/src/cli/banner.txt +0 -3
  1188. package/template/src/cli/footer.txt +0 -1
  1189. package/template/src/server/config.ts +0 -17
  1190. package/template/src/server/rpc/getHello.ts +0 -38
  1191. package/template/src/ui/app.css +0 -21
  1192. package/template/src/ui/app.html +0 -24
  1193. package/template/src/ui/pages/about/page.abide +0 -7
  1194. package/template/src/ui/pages/layout.abide +0 -19
  1195. package/template/src/ui/pages/page.abide +0 -19
  1196. package/template/test/app.test.ts +0 -30
  1197. package/template/tsconfig.json +0 -18
  1198. package/tsconfig.app.json +0 -17
@@ -1,1326 +0,0 @@
1
- import ts from 'typescript'
2
- import { ABIDE_PACKAGE_NAME } from '../../shared/ABIDE_PACKAGE_NAME.ts'
3
- import { attrLiftPosition } from './attrLiftPosition.ts'
4
- import { hasTopLevelAwait } from './hasTopLevelAwait.ts'
5
- import { isFunctionScopeBoundary } from './isFunctionScopeBoundary.ts'
6
- import { isWhitespaceText } from './isWhitespaceText.ts'
7
- import {
8
- type LiftPosition,
9
- type LiftSpan,
10
- liftAsyncSubExpressions,
11
- } from './liftAsyncSubExpressions.ts'
12
- import { parseTemplate } from './parseTemplate.ts'
13
- import {
14
- NESTED_REACTIVE_BINDINGS,
15
- type ReactiveImportBindings,
16
- reactiveImportBindings,
17
- resolveReactiveExport,
18
- } from './resolveReactiveExport.ts'
19
- import { signalCallee } from './signalCallee.ts'
20
- import { LEADING_SCRIPT } from './templateStartOffset.ts'
21
- import type { CompiledShadow, ShadowDiagnostic, ShadowMapping } from './types/CompiledShadow.ts'
22
- import type { InterpolationClassifier } from './types/InterpolationClassifier.ts'
23
- import type { TemplateNode } from './types/TemplateNode.ts'
24
-
25
- /*
26
- Framework callables the `.abide` loader injects into a component's scope. `snippet`
27
- and `scope` keep their real published types via imports so author calls type-check —
28
- `scope()` is the internal lowering host (a captured handle `const s = scope()` + its
29
- capability calls type-check against the real `Scope`; generated code targets it too).
30
- `state`/`linked`/`computed`/`effect` are the imported reactive surface; when the author
31
- imports one its own binding provides the type, so the ambient fallback for that name is
32
- OMITTED (see `shadowPreamble`) to avoid a duplicate identifier. Otherwise
33
- `state`/`linked`/`computed` are declared ambiently and `effect` is imported as a fallback
34
- for a bare/nested use the top-level rewrite doesn't project (unused when projected — fine,
35
- the shadow disables noUnusedLocals). `props` is the prop reader — destructured
36
- (`const { a = 1 } = props<Shape>()`); a required import (`abide/ui/props`), so the shadow
37
- declares it only when imported, returning the file's contextual shape (route params or
38
- `Record<string, any>`) intersected with its own type argument — additive, so declared props
39
- like `children: Snippet` layer on top instead of re-spelling the route shape.
40
- */
41
- function shadowPreamble(importedReactives: ReadonlySet<string>): string {
42
- /* Omit the ambient fallback for a primitive the author imports — its own binding is
43
- the type, and a second declaration would be a duplicate-identifier error. */
44
- const lines = [
45
- importedReactives.has('effect')
46
- ? undefined
47
- : `import { effect } from '${ABIDE_PACKAGE_NAME}/ui/effect'`,
48
- `import { snippet } from '${ABIDE_PACKAGE_NAME}/shared/snippet'`,
49
- `import { scope } from '${ABIDE_PACKAGE_NAME}/ui/currentScope'`,
50
- importedReactives.has('state')
51
- ? undefined
52
- : 'declare function state<T>(initial?: T, transform?: (next: T, previous: T) => T): { value: T }',
53
- importedReactives.has('linked')
54
- ? undefined
55
- : 'declare function linked<T>(seed: () => T, transform?: (next: T, previous: T) => T): { value: T }',
56
- importedReactives.has('computed')
57
- ? undefined
58
- : 'declare function computed<T>(compute: () => T): { readonly value: T }',
59
- /* `effect` is defined either way — the preamble import or the author's own import. */
60
- 'void [effect, snippet, scope]',
61
- ]
62
- return `${lines.filter((line) => line !== undefined).join('\n')}\n`
63
- }
64
-
65
- /*
66
- Compiles a `.abide` component into its type-checking shadow — a synthetic TS
67
- module that reconstructs the author scope with value types and references every
68
- template expression in a checkable position (see ADR-0010). The shadow is never
69
- executed; it exists only so `tsc`/the language service can type-check template
70
- expressions and child-component props, with diagnostics mapped back through the
71
- returned segments.
72
-
73
- The script's signal surface is rewritten to value types:
74
- let count = state(0) → let count = (0)
75
- const total = computed(() => …) → const total = (() => …)()
76
- const { a } = props<{ a: T }>() → `__Props = { a: T }` + the verbatim destructure
77
- Everything else (functions, plain consts, imports) is emitted verbatim, so
78
- expressions inside it (e.g. a computed's compute body) are checked and mapped too.
79
- */
80
- export function compileShadow(
81
- source: string,
82
- propsType = 'Record<string, any>',
83
- classify?: InterpolationClassifier,
84
- ): CompiledShadow {
85
- const leadingScript = source.match(LEADING_SCRIPT)
86
- const scriptBody = leadingScript?.[1] ?? ''
87
- /* Body starts just past the opening `<script …>`; template just past `</script>`. */
88
- const scriptStart = leadingScript ? source.indexOf('>', leadingScript.index) + 1 : 0
89
- const templateStart = leadingScript ? (leadingScript.index ?? 0) + leadingScript[0].length : 0
90
-
91
- const {
92
- imports,
93
- types,
94
- scope,
95
- propsShapes,
96
- diagnostics,
97
- importedReactives,
98
- propsLocalName,
99
- watchLocalName,
100
- pendingCellNames,
101
- } = analyzeScript(scriptBody, scriptStart, classify)
102
- /* Built AFTER the script analysis so the `pendingCellNames` set (the `$$cellValuePending`
103
- cells) can ride onto the builder — the `{#await}` emit reads it to strip a bare
104
- pending-cell subject's pending `undefined` off its resolved binding (ADR-0047 fidelity). */
105
- const builder = createBuilder(classify, pendingCellNames)
106
- builder.raw(shadowPreamble(importedReactives))
107
- /* Every `computed`/`linked` scope line reads through this: it invokes the seed thunk and
108
- unwraps a promise/stream to the value a BARE cell read peeks (ADR-0019/0032) — so an async
109
- `computed(await …)` / stream `computed(src)` type-checks as its resolved value, and a sync
110
- seed keeps its return type (`Awaited` is identity on a non-thenable). Reserved `$$` name so
111
- it can never collide with an author binding; `declare`-only, so it carries no runtime. */
112
- builder.raw(
113
- 'declare function $$cellValue<R>(seed: () => R): R extends AsyncIterable<infer F> ? F : Awaited<R>\n',
114
- )
115
- /* The STREAMING sibling (ADR-0042): a no-`await` async `computed`/`linked` cell reads
116
- `undefined`-while-pending, so its shadow type is the resolved value UNIONED with `undefined` —
117
- the author must guard it (`?.`/`??`), exactly the runtime. A BLOCKING (`await`) cell uses
118
- `$$cellValue` above (resolved `T`, never pending — its render region suspends). Selected in
119
- `scopeLineFor` by the syntactic blocking bit. Unconditional (a named cell can occur with no
120
- classifier), matching `$$cellValue`. */
121
- builder.raw(
122
- 'declare function $$cellValuePending<R>(seed: () => R): (R extends AsyncIterable<infer F> ? F : Awaited<R>) | undefined\n',
123
- )
124
- /* `{#await <pendingCell>}` awaits the CELL (ADR-0047 `$$awaitSubject`) — it shows pending then
125
- binds the RESOLVED value, never the pending `undefined`. So a bare pending-cell subject's
126
- resolved/`:then` binding must drop the `| undefined` the `$$cellValuePending` peek carries;
127
- `$$awaitCell` strips exactly `undefined` (`Exclude`, so a genuine `null` in the value survives).
128
- Emitted only when a pending cell exists (else the `{#await}` emit never references it). */
129
- if (pendingCellNames.size > 0) {
130
- builder.raw('declare function $$awaitCell<V>(v: V): Exclude<V, undefined>\n')
131
- }
132
- /* The peek helpers the async-interpolation wrap targets (ADR-0032): `$$peek` unwraps a promise
133
- sub-expression to its resolved value (`undefined` while pending) and `$$peekStream` reads an
134
- async iterable's latest frame, so `getFoo()?.name`/`{#if getFoo()}` type-check against the
135
- RESOLVED value the runtime peeks — not the raw `Promise`. Emitted only when a classifier is
136
- present (the wrap is type-directed); their names carry the reserved `$$` prefix an author
137
- binding can never take, so they cannot collide with user code. */
138
- if (classify !== undefined) {
139
- builder.raw('declare function $$peek<T>(v: T): Awaited<T> | undefined\n')
140
- builder.raw(
141
- 'declare function $$peekStream<S>(v: S): (S extends AsyncIterable<infer F> ? F : unknown) | undefined\n',
142
- )
143
- }
144
- /* `props` is a required import (`abide/ui/props`). The shadow owns its type so the
145
- return is file-contextual — the route param shape (page/layout) or `Record<string,
146
- any>` (component), intersected with the author's annotation `T` so declared props
147
- (notably `children: Snippet`) are ADDITIVE and route params never need re-spelling.
148
- Emitted only when imported: a missing import surfaces as "Cannot find name 'props'"
149
- (or the author's local alias), so `abide check` flags it. Declared under the LOCAL
150
- binding name (alias-safe, like `state`/`effect`) — a `props as p` import must get a
151
- `p` declare, or `p()` reads as undefined once the import below is stripped. */
152
- if (propsLocalName !== undefined) {
153
- builder.raw(`declare function ${propsLocalName}<T = {}>(): (${propsType}) & T\n`)
154
- }
155
- /* `watch` is re-typed with a trailing value-source overload: the real overloads
156
- (`State`/socket/rpc/thunk) intersected with `<T>(source: T, handler: (value: T) => void)`.
157
- A `watch(cell, handler)` source is projected to the cell's VALUE type (like every read),
158
- so it never matches the real `State<T>` overload — the value-source form catches it and
159
- types `handler`'s parameter as that value. Ordered after the real overloads (intersection
160
- left-to-right), so a socket/rpc source still resolves to its specific frame/return type.
161
- The real type is referenced through `typeof import(...)` (no value import to keep live), and
162
- the binding uses the author's local alias — or the `watch` fallback for a bare/nested use
163
- that isn't author-imported. */
164
- const watchSpecifier = `${ABIDE_PACKAGE_NAME}/ui/watch`
165
- builder.raw(
166
- `declare const ${watchLocalName ?? 'watch'}: typeof import('${watchSpecifier}').watch & (<__WatchT>(source: __WatchT, handler: (value: __WatchT) => void) => () => void)\n`,
167
- )
168
- const propsSpecifier = `${ABIDE_PACKAGE_NAME}/ui/props`
169
- for (const line of imports) {
170
- /* The `props`/`watch` imports are replaced by the contextual declarations above;
171
- emitting one too would be a duplicate-identifier error. Matched by EXACT specifier
172
- (either quote style, not a loose suffix match) so an unrelated user module merely
173
- named `.../ui/props` (or `.../ui/watch`) survives verbatim. */
174
- if (
175
- line.text.includes(`from '${propsSpecifier}'`) ||
176
- line.text.includes(`from "${propsSpecifier}"`) ||
177
- line.text.includes(`from '${watchSpecifier}'`) ||
178
- line.text.includes(`from "${watchSpecifier}"`)
179
- ) {
180
- continue
181
- }
182
- builder.flush(line)
183
- }
184
- /* Component-local `type`/`interface` declarations are hoisted to module scope —
185
- above `__Props` so prop annotations referencing them resolve, and still visible
186
- inside the function body where the rest of the scope and template expressions use
187
- them. (Emitting them as in-function scope lines would hide them from `__Props`.) */
188
- for (const line of types) {
189
- builder.flush(line)
190
- }
191
- /* The author's scope (value consts, functions, reactive projections, the `props()`
192
- destructure) is hoisted to module scope — above `__Props` — for the same reason the
193
- types are: a prop annotation can then reference a value const by `typeof`
194
- (`size: keyof typeof sizes`), which fails when the const sits in the function body and
195
- `__Props` at module scope can't see it. Narrowing is unaffected: a template's guard and
196
- read are both in the render function below, so control-flow narrowing flows regardless
197
- of where the binding is declared, and reactive projections are never rebound (writes go
198
- through `.value`), so they narrow like consts even into nested handlers. */
199
- for (const line of scope) {
200
- builder.flush(line)
201
- }
202
- /* `__Props` is the parent-facing prop shape: each `props<Shape>()` destructure
203
- contributes its whole `Shape` (intersected if there's more than one), or an empty
204
- object for a component that reads no props. */
205
- builder.raw(
206
- propsShapes.length > 0
207
- ? `type __Props = ${propsShapes.join(' & ')}\n`
208
- : `interface __Props {}\n`,
209
- )
210
- /* `__props` (not `props`) so the destructuring `props()` sugar resolves to the
211
- declared function, not this parameter. async so `await` blocks are legal; never
212
- executed, so the return is void. */
213
- builder.raw('export default async function (__props: __Props): Promise<void> {\n')
214
- /* Reference props so an all-optional bag with no reads doesn't read as unused. */
215
- builder.raw('void __props;\n')
216
- const templateNodes = parseTemplate(source.slice(templateStart), templateStart).nodes
217
- /* Nested `<script>` blocks inline into the synchronous `build()` too, so a top-level
218
- await in one is the same build-breaker — flag it, mapped via the node's body offset. */
219
- collectNestedScriptAwaitDiagnostics(templateNodes, diagnostics)
220
- /* Emit the DOM-typed attachment aliases only when an element `attach` uses them: they
221
- reference `HTMLElementTagNameMap`/`Element`, so a template with no element attach never
222
- forces DOM lib into its shadow. `__ElementFor` maps a tag to its element interface
223
- (HTML-first; unknown/custom tags fall back to `Element`); `__Attachment` sources its
224
- return type from the real `attach` runtime signature so it never drifts. */
225
- if (hasElementAttach(templateNodes)) {
226
- builder.raw(
227
- 'type __ElementFor<T extends string> = T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : T extends keyof SVGElementTagNameMap ? SVGElementTagNameMap[T] : T extends keyof MathMLElementTagNameMap ? MathMLElementTagNameMap[T] : Element;\n',
228
- )
229
- builder.raw(
230
- `type __Attachment<E extends Element> = (node: E) => ReturnType<Parameters<typeof import('${ABIDE_PACKAGE_NAME}/ui/dom/attach').attach>[1]>;\n`,
231
- )
232
- }
233
- emitNodes(templateNodes, builder)
234
- builder.raw('}\n')
235
- return { ...builder.result(), diagnostics }
236
- }
237
-
238
- /* The shadow text builder: `raw` appends synthesised scaffolding (no mapping),
239
- `expr` appends an inline parenthesised source span `(code)` and records its
240
- segment, `stmt` wraps one as a standalone statement, `flush` appends a
241
- pre-assembled scope line carrying its own embedded segments. */
242
- type Builder = {
243
- raw: (text: string) => void
244
- /* Appends `text` verbatim and maps it back to source, WITHOUT the `expr`
245
- parens — for binding names and other spans that must stay bare TS syntax
246
- (`for (const NAME of …)`). `text` must equal the source at `sourceLoc`. */
247
- mapped: (text: string, sourceLoc: number | undefined) => void
248
- expr: (code: string, sourceLoc: number | undefined) => void
249
- stmt: (code: string, sourceLoc: number | undefined) => void
250
- /* Like `expr`/`stmt` but for a template interpolation: async (sub)expressions are wrapped in a
251
- peek helper (`$$peek`/`$$peekStream`) so their RESOLVED type composes (ADR-0032). Every source
252
- span still maps 1:1 — the inserted wrapper chars are unmapped — so diagnostics land precisely.
253
- With no classifier (or no async sub-expression) these are byte-identical to `expr`/`stmt`. */
254
- asyncExpr: (code: string, sourceLoc: number | undefined, position: LiftPosition) => void
255
- asyncStmt: (code: string, sourceLoc: number | undefined, position: LiftPosition) => void
256
- flush: (line: ScopeLine) => void
257
- /* A fresh shadow-local binding name (`__<base>_<n>`) — for synthesised bindings
258
- like an await's resolved value, kept distinct so nested blocks never collide. */
259
- unique: (base: string) => string
260
- /* The `$$cellValuePending` (STREAMING) cells declared in the leading script — a bare
261
- `{#await <name>}` over one strips the pending `undefined` off its resolved binding. */
262
- pendingCellNames: ReadonlySet<string>
263
- result: () => CompiledShadow
264
- }
265
-
266
- /* A reconstructed scope statement plus the segments embedded inside it (the parts
267
- emitted verbatim from the original script), offset-relative to the line start. */
268
- type ScopeLine = { text: string; segments: ShadowMapping[] }
269
-
270
- function createBuilder(
271
- classify?: InterpolationClassifier,
272
- pendingCellNames: ReadonlySet<string> = new Set(),
273
- ): Builder {
274
- let code = ''
275
- let uniqueCounter = 0
276
- const mappings: ShadowMapping[] = []
277
- /* The non-blocking async (sub)expression spans in one interpolation — the peek-wrap targets.
278
- A leading `await` (blocking) stays verbatim: `await X` already resolves in the async shadow
279
- render fn. Fail-open: no classifier, an unparseable field, or the D4a `AsyncIterable`-in-`each`
280
- throw all yield no spans, so the emit is verbatim (`collectValuePositionDiagnostics` still
281
- reports the D4a error separately). */
282
- const peekSpans = (exprCode: string, sourceLoc: number, position: LiftPosition) => {
283
- if (classify === undefined) {
284
- return []
285
- }
286
- try {
287
- let counter = 0
288
- const result = liftAsyncSubExpressions(
289
- exprCode,
290
- sourceLoc,
291
- classify,
292
- () => `__v${counter++}`,
293
- position,
294
- )
295
- return result.spans.filter((span) => !span.blocking)
296
- } catch {
297
- return []
298
- }
299
- }
300
- /* Appends `exprCode` mapped 1:1 to source, but wraps each async span in its peek helper — the
301
- wrapper chars are unmapped, every original char keeps its true source offset. */
302
- const emitPeeked = (exprCode: string, sourceLoc: number, position: LiftPosition): void => {
303
- const spans = peekSpans(exprCode, sourceLoc, position)
304
- if (spans.length === 0) {
305
- builder.mapped(exprCode, sourceLoc)
306
- return
307
- }
308
- let cursor = 0
309
- for (const span of spans) {
310
- if (span.start > cursor) {
311
- builder.mapped(exprCode.slice(cursor, span.start), sourceLoc + cursor)
312
- }
313
- builder.raw(span.kind === 'asyncIterable' ? '$$peekStream(' : '$$peek(')
314
- builder.mapped(exprCode.slice(span.start, span.end), sourceLoc + span.start)
315
- builder.raw(')')
316
- cursor = span.end
317
- }
318
- if (cursor < exprCode.length) {
319
- builder.mapped(exprCode.slice(cursor), sourceLoc + cursor)
320
- }
321
- }
322
- const builder: Builder = {
323
- pendingCellNames,
324
- unique(base) {
325
- return `__${base}_${uniqueCounter++}`
326
- },
327
- raw(text) {
328
- code += text
329
- },
330
- mapped(text, sourceLoc) {
331
- if (sourceLoc !== undefined) {
332
- mappings.push({
333
- shadowStart: code.length,
334
- sourceStart: sourceLoc,
335
- length: text.length,
336
- })
337
- }
338
- code += text
339
- },
340
- expr(exprCode, sourceLoc) {
341
- code += '('
342
- if (sourceLoc !== undefined) {
343
- mappings.push({
344
- shadowStart: code.length,
345
- sourceStart: sourceLoc,
346
- length: exprCode.length,
347
- })
348
- }
349
- code += `${exprCode})`
350
- },
351
- stmt(exprCode, sourceLoc) {
352
- code += ';'
353
- builder.expr(exprCode, sourceLoc)
354
- code += ';\n'
355
- },
356
- asyncExpr(exprCode, sourceLoc, position) {
357
- /* No source offset ⇒ can't map or classify — emit verbatim, like `expr`. */
358
- if (sourceLoc === undefined) {
359
- code += `(${exprCode})`
360
- return
361
- }
362
- code += '('
363
- emitPeeked(exprCode, sourceLoc, position)
364
- code += ')'
365
- },
366
- asyncStmt(exprCode, sourceLoc, position) {
367
- code += ';'
368
- builder.asyncExpr(exprCode, sourceLoc, position)
369
- code += ';\n'
370
- },
371
- flush(line) {
372
- const base = code.length
373
- for (const segment of line.segments) {
374
- mappings.push({ ...segment, shadowStart: base + segment.shadowStart })
375
- }
376
- code += `${line.text}\n`
377
- },
378
- result: () => ({ code, mappings }),
379
- }
380
- return builder
381
- }
382
-
383
- type ScriptAnalysis = {
384
- imports: ScopeLine[]
385
- types: ScopeLine[]
386
- scope: ScopeLine[]
387
- propsShapes: string[]
388
- diagnostics: ShadowDiagnostic[]
389
- /* The reactive primitives the author imports (`state`/`effect`), so the preamble
390
- omits the ambient fallback for each and avoids a duplicate-identifier error. */
391
- importedReactives: Set<string>
392
- /* The LOCAL binding name the author's `props` import is bound to (alias-safe — `props`
393
- for the canonical import, `p` for `props as p`), or undefined when not imported. The
394
- `declare function` for `props` must target this name, not the canonical `'props'`. */
395
- propsLocalName: string | undefined
396
- /* The LOCAL binding name the author's `watch` import is bound to (alias-safe), or undefined
397
- when not imported. The shadow re-types `watch` under this name with a value-source
398
- overload so the `watch(cell, handler)` form type-checks (the cell is projected to its
399
- value, so the real State/socket/rpc overloads never match it). */
400
- watchLocalName: string | undefined
401
- /* The STREAMING (`$$cellValuePending`) cell names — a bare `{#await <name>}` over one awaits
402
- the cell and strips its pending `undefined` for the resolved binding (ADR-0047). */
403
- pendingCellNames: Set<string>
404
- }
405
-
406
- /* Pushes a diagnostic for every author binding whose name starts with the reserved `$$`
407
- prefix — variable/function/class declarations, parameters, and destructuring leaves.
408
- Read structurally off the parsed script; the message points at the offending name. */
409
- function collectReservedNameDiagnostics(
410
- file: ts.SourceFile,
411
- scriptStart: number,
412
- diagnostics: ShadowDiagnostic[],
413
- ): void {
414
- const flag = (name: ts.Node | undefined): void => {
415
- if (name !== undefined && ts.isIdentifier(name) && name.text.startsWith('$$')) {
416
- diagnostics.push({
417
- start: scriptStart + name.getStart(file),
418
- length: name.getEnd() - name.getStart(file),
419
- message: `\`${name.text}\` is reserved — the \`$$\` prefix is the compiler's injected runtime namespace; rename this binding.`,
420
- })
421
- }
422
- }
423
- const visit = (node: ts.Node): void => {
424
- if (
425
- ts.isVariableDeclaration(node) ||
426
- ts.isFunctionDeclaration(node) ||
427
- ts.isClassDeclaration(node) ||
428
- ts.isParameter(node) ||
429
- ts.isBindingElement(node)
430
- ) {
431
- flag(node.name)
432
- }
433
- ts.forEachChild(node, visit)
434
- }
435
- visit(file)
436
- }
437
-
438
- /* Pushes a diagnostic for every `await` sitting at the script's top level — outside any
439
- nested function. The generated `build()` runs the leading script synchronously, so a
440
- top-level await transpiles to `await` in a non-async function and breaks the bundle; the
441
- shadow's render fn is async, so `tsc` alone never flags it (a check/runtime parity gap).
442
- Stops descending at function boundaries — their own async-ness is the author's concern —
443
- and catches both `await expr` and `for await (… of …)`, flagging the `await` keyword. A
444
- `computed`/`linked` SEED argument is exempt: `wrapSeed` (desugarSignals) lowers a top-level
445
- `await` there into an async thunk (`computed(await load())` → `async () => await load()`), so
446
- its await runs off the sync build — flagging it would be a false positive. */
447
- function collectTopLevelAwaitDiagnostics(
448
- file: ts.SourceFile,
449
- scriptStart: number,
450
- diagnostics: ShadowDiagnostic[],
451
- bindings: ReactiveImportBindings,
452
- ): void {
453
- const message =
454
- 'top-level `await` is not allowed in a `<script>` — the component build runs synchronously. Use `{#await expr}…{:then value}…{/await}` markup for blocking data, or `await` inside an async event handler.'
455
- const visit = (node: ts.Node): void => {
456
- /* A nested function introduces its own (possibly async) scope; its awaits are legal. */
457
- if (isFunctionScopeBoundary(node)) {
458
- return
459
- }
460
- /* A `computed`/`linked` seed becomes an async thunk (`wrapSeed`), so an await in it is
461
- legal — visit the callee and any trailing args, but skip the seed (`arguments[0]`). */
462
- if (ts.isCallExpression(node) && node.arguments.length > 0) {
463
- const callee = resolveReactiveExport(node.expression, bindings)
464
- if (callee === 'computed' || callee === 'linked') {
465
- visit(node.expression)
466
- for (let index = 1; index < node.arguments.length; index++) {
467
- const argument = node.arguments[index]
468
- if (argument !== undefined) {
469
- visit(argument)
470
- }
471
- }
472
- return
473
- }
474
- }
475
- /* The `await` keyword token: the AwaitExpression's first child, or a `for await`'s
476
- await modifier. */
477
- const keyword = ts.isAwaitExpression(node)
478
- ? node.getChildAt(0, file)
479
- : ts.isForOfStatement(node)
480
- ? node.awaitModifier
481
- : undefined
482
- if (keyword !== undefined) {
483
- diagnostics.push({
484
- start: scriptStart + keyword.getStart(file),
485
- length: keyword.getEnd() - keyword.getStart(file),
486
- message,
487
- })
488
- }
489
- ts.forEachChild(node, visit)
490
- }
491
- visit(file)
492
- }
493
-
494
- /* Recursively visits every nested `<script>` in the template and flags a top-level await in
495
- its body — the same trap as the leading script (it inlines into the sync `build()`), mapped
496
- through the node's body offset (`loc`). Walks `children` on every node kind that carries
497
- them, so a script buried in an `{#if}`/`{#for}`/`{#await}` branch is still reached. */
498
- function collectNestedScriptAwaitDiagnostics(
499
- nodes: TemplateNode[],
500
- diagnostics: ShadowDiagnostic[],
501
- ): void {
502
- for (const node of nodes) {
503
- if (node === undefined) {
504
- continue
505
- }
506
- if (node.kind === 'script' && node.loc !== undefined) {
507
- const file = ts.createSourceFile('nested.ts', node.code, ts.ScriptTarget.Latest, true)
508
- /* A nested script inherits the surface by canonical name (no imports of its own). */
509
- collectTopLevelAwaitDiagnostics(file, node.loc, diagnostics, NESTED_REACTIVE_BINDINGS)
510
- }
511
- if ('children' in node) {
512
- collectNestedScriptAwaitDiagnostics(node.children, diagnostics)
513
- }
514
- }
515
- }
516
-
517
- /* Walks the leading `<script>` and produces the shadow's module imports, the
518
- module-scope type declarations, the value-typed scope lines, and the `props<Shape>()`
519
- prop shapes. `scriptStart` is the body's absolute offset in the source, so verbatim
520
- spans map back exactly. */
521
- function analyzeScript(
522
- scriptBody: string,
523
- scriptStart: number,
524
- classify?: InterpolationClassifier,
525
- ): ScriptAnalysis {
526
- const imports: ScopeLine[] = []
527
- const types: ScopeLine[] = []
528
- const scope: ScopeLine[] = []
529
- const propsShapes: string[] = []
530
- const diagnostics: ShadowDiagnostic[] = []
531
- const pendingCellNames = new Set<string>()
532
- if (scriptBody.trim() === '') {
533
- return {
534
- imports,
535
- types,
536
- scope,
537
- propsShapes,
538
- diagnostics,
539
- importedReactives: new Set(),
540
- propsLocalName: undefined,
541
- watchLocalName: undefined,
542
- pendingCellNames,
543
- }
544
- }
545
- const file = ts.createSourceFile('script.ts', scriptBody, ts.ScriptTarget.Latest, true)
546
- /* The author's reactive import bindings (alias-safe) — recognition source for
547
- `state`/`state.linked`/`state.computed`/`effect`, and the set of imported primitives
548
- the preamble omits its ambient fallback for. */
549
- const bindings = reactiveImportBindings(file)
550
- const importedReactives = new Set(bindings.direct.values())
551
- /* The local name bound to `props` (alias-safe): the key whose value is the canonical
552
- `'props'`. At most one — a file imports `props` from one specifier. */
553
- let propsLocalName: string | undefined
554
- let watchLocalName: string | undefined
555
- for (const [local, canonical] of bindings.direct) {
556
- if (canonical === 'props') {
557
- propsLocalName = local
558
- }
559
- if (canonical === 'watch') {
560
- watchLocalName = local
561
- }
562
- }
563
- /* The `$$` prefix is reserved for the compiler's injected runtime (`$$each`, `$$model`,
564
- `$$scope`, …), so an author binding may not start with it — that's the contract that
565
- lets a user freely name a variable after any helper. Flag every such declaration. */
566
- collectReservedNameDiagnostics(file, scriptStart, diagnostics)
567
- /* The leading script runs in the synchronous `build()`, so a top-level await breaks the
568
- bundle — catch it here with a legible message instead of an opaque transpile error. */
569
- collectTopLevelAwaitDiagnostics(file, scriptStart, diagnostics, bindings)
570
- /* A verbatim span: original text + the segment mapping it back, relative to the
571
- line start (the caller rebases shadowStart onto the running shadow length). */
572
- const span = (node: ts.Node, prefixLength: number): ScopeLine['segments'][number] => ({
573
- shadowStart: prefixLength,
574
- sourceStart: scriptStart + node.getStart(file),
575
- length: node.getEnd() - node.getStart(file),
576
- })
577
- const verbatim = (node: ts.Node): string => scriptBody.slice(node.getStart(file), node.getEnd())
578
-
579
- for (const statement of file.statements) {
580
- if (ts.isImportDeclaration(statement)) {
581
- /* Emit verbatim with a span so hover/go-to resolve on the imported names.
582
- `abide/ui/state` / `abide/ui/effect` are ordinary author imports now — the
583
- preamble drops its ambient fallback for whichever names are imported. */
584
- imports.push({ text: verbatim(statement), segments: [span(statement, 0)] })
585
- continue
586
- }
587
- if (ts.isTypeAliasDeclaration(statement) || ts.isInterfaceDeclaration(statement)) {
588
- /* Hoist to module scope (verbatim, mapped) so prop annotations resolve them. */
589
- types.push({ text: verbatim(statement), segments: [span(statement, 0)] })
590
- continue
591
- }
592
- const reactive = reactiveDeclarations(statement, bindings)
593
- if (reactive === undefined) {
594
- /* Plain statement (function, const, expression) — emit verbatim, mapped. */
595
- scope.push({ text: verbatim(statement), segments: [span(statement, 0)] })
596
- continue
597
- }
598
- for (const declaration of reactive) {
599
- scope.push(
600
- scopeLineFor(
601
- declaration,
602
- propsShapes,
603
- verbatim,
604
- span,
605
- bindings,
606
- classify,
607
- pendingCellNames,
608
- ),
609
- )
610
- }
611
- }
612
- return {
613
- imports,
614
- types,
615
- scope,
616
- propsShapes,
617
- diagnostics,
618
- importedReactives,
619
- propsLocalName,
620
- watchLocalName,
621
- pendingCellNames,
622
- }
623
- }
624
-
625
- /* Value-projects a nested control-flow `<script>` body the way `analyzeScript`
626
- projects the leading script's scope: reactive declarations become their value
627
- type, every other statement stays verbatim. Returns the projected source text
628
- (unmapped — nested scripts carry no source offset yet), so a branch's markup
629
- reads a nested signal as its value type instead of the raw `State`/`Computed`. */
630
- function projectNestedScript(code: string): string {
631
- const file = ts.createSourceFile('nested.ts', code, ts.ScriptTarget.Latest, true)
632
- /* A nested script can't import — it inherits the module-scope surface by canonical name. */
633
- const bindings = NESTED_REACTIVE_BINDINGS
634
- const verbatim = (node: ts.Node): string => code.slice(node.getStart(file), node.getEnd())
635
- /* No mapping: a zero-length segment the caller drops. */
636
- const span = (): ShadowMapping => ({ shadowStart: 0, sourceStart: 0, length: 0 })
637
- return file.statements
638
- .flatMap((statement) => {
639
- const reactive = reactiveDeclarations(statement, bindings)
640
- if (reactive === undefined) {
641
- return [verbatim(statement)]
642
- }
643
- return reactive.map(
644
- (declaration) => scopeLineFor(declaration, [], verbatim, span, bindings).text,
645
- )
646
- })
647
- .join('\n')
648
- }
649
-
650
- /* The `state`/`computed`/`linked`/`props()` declarations in a variable statement, or
651
- undefined if it isn't one declaring them (so the caller emits it verbatim). A statement
652
- mixing reactive and plain declarations is rare; treated as all-verbatim. */
653
- function reactiveDeclarations(
654
- statement: ts.Statement,
655
- bindings: ReactiveImportBindings,
656
- ): ts.VariableDeclaration[] | undefined {
657
- if (!ts.isVariableStatement(statement)) {
658
- return undefined
659
- }
660
- const declarations = statement.declarationList.declarations
661
- const reactive = declarations.filter(
662
- (declaration) => signalCallee(declaration, bindings) !== undefined,
663
- )
664
- return reactive.length === declarations.length && reactive.length > 0 ? reactive : undefined
665
- }
666
-
667
- /* Builds one scope line for a reactive declaration, projecting it to its value
668
- type. A `props()` destructure contributes its whole shape (pushed into `propsShapes`). */
669
- /* Splits a SEED's source text so each buried async sub-expression is wrapped in its shadow peek
670
- helper (`$$peek`/`$$peekStream`) — the script-seed twin of the builder's `emitPeeked` (ADR-0032),
671
- but returning a mapped `{ text, segments }` for a scope line rather than driving the builder. So a
672
- bare `state.linked(getSession()?.x ?? [])` shadow-types via `$$peek(getSession())?.x ?? []` (the
673
- RESOLVED value, `?.`/`??` compose) instead of erroring on `Promise.x` — mirroring exactly what the
674
- `desugarSignals` lift builds. Fail-open: no classifier, a thunk seed (the walk stops at function
675
- boundaries — matching the build, which also leaves a `() => …` seed unlifted), or an unparseable
676
- span → the seed emits verbatim as one span. Every original char keeps its true source offset; the
677
- inserted wrapper chars are unmapped, so diagnostics land precisely. */
678
- function peekWrappedSeed(
679
- seedText: string,
680
- sourceStart: number,
681
- prefixLength: number,
682
- classify: InterpolationClassifier | undefined,
683
- ): { text: string; segments: ShadowMapping[] } {
684
- const verbatimResult = {
685
- text: seedText,
686
- segments: [{ shadowStart: prefixLength, sourceStart, length: seedText.length }],
687
- }
688
- if (classify === undefined) {
689
- return verbatimResult
690
- }
691
- let spans: LiftSpan[]
692
- try {
693
- let counter = 0
694
- spans = liftAsyncSubExpressions(
695
- seedText,
696
- sourceStart,
697
- classify,
698
- () => `__v${counter++}`,
699
- 'content',
700
- ).spans.filter((span) => !span.blocking)
701
- } catch {
702
- return verbatimResult
703
- }
704
- if (spans.length === 0) {
705
- return verbatimResult
706
- }
707
- /* A single span covering the WHOLE seed is the whole-seed case (`computed(getRates())`): the
708
- `$$cellValue`/`$$cellValuePending` wrapper the caller already applies unwraps it, so peek-
709
- wrapping it here would double-unwrap (`T` → `T | undefined`). Skip it — only PROPER sub-
710
- expressions wrap, matching `liftScriptSeed`'s identical whole-seed skip on the build side. */
711
- const only = spans.length === 1 ? spans[0] : undefined
712
- if (only !== undefined && seedText.slice(only.start, only.end).trim() === seedText.trim()) {
713
- return verbatimResult
714
- }
715
- let text = ''
716
- const segments: ShadowMapping[] = []
717
- const pushMapped = (chunk: string, chunkSource: number): void => {
718
- segments.push({
719
- shadowStart: prefixLength + text.length,
720
- sourceStart: chunkSource,
721
- length: chunk.length,
722
- })
723
- text += chunk
724
- }
725
- let cursor = 0
726
- for (const span of spans) {
727
- if (span.start > cursor) {
728
- pushMapped(seedText.slice(cursor, span.start), sourceStart + cursor)
729
- }
730
- text += span.kind === 'asyncIterable' ? '$$peekStream(' : '$$peek('
731
- pushMapped(seedText.slice(span.start, span.end), sourceStart + span.start)
732
- text += ')'
733
- cursor = span.end
734
- }
735
- if (cursor < seedText.length) {
736
- pushMapped(seedText.slice(cursor), sourceStart + cursor)
737
- }
738
- return { text, segments }
739
- }
740
-
741
- function scopeLineFor(
742
- declaration: ts.VariableDeclaration,
743
- propsShapes: string[],
744
- verbatim: (node: ts.Node) => string,
745
- span: (node: ts.Node, prefixLength: number) => ShadowMapping,
746
- bindings: ReactiveImportBindings,
747
- classify?: InterpolationClassifier,
748
- /* Collects the names that project through `$$cellValuePending` (STREAMING cells) so the
749
- `{#await}` emit can strip their pending `undefined`. Absent for nested scripts. */
750
- pendingCellNames?: Set<string>,
751
- ): ScopeLine {
752
- const name = ts.isIdentifier(declaration.name) ? declaration.name.text : '_'
753
- const call = declaration.initializer as ts.CallExpression
754
- /* The CANONICAL primitive drives value-projection — resolved purely from the import
755
- binding (so an aliased `s(0)` / `state.computed(...)` projects correctly).
756
- `verbatim(call.expression)` below keeps the AUTHOR's text for the trailing hover ref. */
757
- const callee = resolveReactiveExport(call.expression, bindings)
758
- if (callee === 'props') {
759
- /* The parent-facing prop shape. Like `state`/`computed` below, it comes from the
760
- generic (`const {…} = props<Shape>()`) OR the destructure's binding annotation
761
- (`const {…}: Shape = props()`) — either TS-idiomatic form resolves through the
762
- shadow's own imports, so an imported/aliased type just works, no inline gotcha.
763
- Default `Record<string, any>`; the destructure then projects verbatim so each
764
- binding inherits its value type. */
765
- const shape = call.typeArguments?.[0] ?? declaration.type
766
- propsShapes.push(shape === undefined ? 'Record<string, any>' : verbatim(shape))
767
- /* `let`, not `const`: a prop the component writes back through a two-way `bind:prop`
768
- (`value += 1`, or forwarding it to another `bind:`) is a legal reassignment, so the
769
- destructure must not read as a `const`. Bindability is dynamic (decided by what the
770
- parent passed), so the shadow can't single out which props are written — it relaxes
771
- the whole destructure, matching the runtime's usage-inferred upgrade. */
772
- return { text: `let ${verbatim(declaration)};`, segments: [span(declaration, 4)] }
773
- }
774
- /* The rewrite drops the callee from the line, so hovering `state`/`computed`/
775
- `linked` at its call site has nothing to resolve. Append the callee as a
776
- trailing reference statement (`…; state;`), mapped back to its source span,
777
- so it resolves to the same primitive the destructure does. */
778
- const withCalleeRef = (line: ScopeLine): ScopeLine => ({
779
- text: `${line.text} ${verbatim(call.expression)};`,
780
- segments: [...line.segments, span(call.expression, line.text.length + 1)],
781
- })
782
- if (callee === 'state') {
783
- /* state<T>(initial): T is the value type — carry it onto the `let` so an
784
- explicit annotation isn't lost to `any`/`any[]` inference of the initial. The
785
- type comes from the generic (`state<T>(v)`), else the binding annotation
786
- (`let x: T = state(v)`) — either form pins the cell type, so a narrow/`any`
787
- inference of the initial (`state([])` → `any[]`) can't leak. */
788
- const typeNode = call.typeArguments?.[0] ?? declaration.type
789
- const annotation = typeNode === undefined ? '' : `: ${verbatim(typeNode)}`
790
- const init = call.arguments[0]
791
- /* A literal `undefined` initial is the no-arg form spelled out (`state<T>(undefined)`):
792
- the value is `T | undefined`, never `= (undefined)` checked against a non-optional
793
- `T` — which would spuriously flag "undefined not assignable to T". */
794
- const initIsUndefined =
795
- init !== undefined && ts.isIdentifier(init) && init.text === 'undefined'
796
- if (init === undefined || initIsUndefined) {
797
- /* No initial (`state<T>()` / `state<T>(undefined)`): the value is `T | undefined`.
798
- A definite-assignment assertion (`!`) gives that union without a use-before-
799
- assign false-positive AND without control-flow narrowing it to just `undefined`
800
- (an `= undefined` initializer, never reassigned in the shadow, would make
801
- a guard like `x !== undefined` collapse to `never`). Unguarded access is
802
- then correctly flagged possibly-undefined; a guard narrows cleanly. */
803
- const valueType = annotation === '' ? ': unknown' : `${annotation} | undefined`
804
- /* map the binding name (offset 4, past `let `) so hover/go-to resolve on it */
805
- return withCalleeRef({
806
- text: `let ${name}!${valueType};`,
807
- segments: [span(declaration.name, 4)],
808
- })
809
- }
810
- const prefix = `let ${name}${annotation} = (`
811
- /* Peek-wrap a buried async sub-expression in the initial too (the `desugarSignals` lift
812
- runs on `state` seeds), so `state(getSession()?.x ?? [])` type-checks. */
813
- const seed = seedPeekWrap(init, verbatim, span, prefix.length, classify)
814
- return withCalleeRef({
815
- text: `${prefix}${seed.text});`,
816
- segments: [span(declaration.name, 4), ...seed.segments],
817
- })
818
- }
819
- /* computed<T>(compute) / linked<T>(seed) — the only callees left: T is the value
820
- type — the call's first arg is a thunk, so invoking it yields the value. The type
821
- comes from the generic (`computed<T>(fn)`), else the binding annotation
822
- (`let x: T = state.computed(fn)`) — same fallback as `state` above, so a binding
823
- annotation isn't dropped and `abide check` doesn't emit `never`-inference false
824
- positives on the thunk's return. */
825
- const typeNode = call.typeArguments?.[0] ?? declaration.type
826
- const annotation = typeNode === undefined ? '' : `: ${verbatim(typeNode)}`
827
- const fn = call.arguments[0]
828
- /* `linked` is a writable `State<T>` at runtime (it reseeds AND accepts `.value =`
829
- writes), so project it as `let`; `computed` is genuinely read-only, so `const`. */
830
- const keyword = callee === 'linked' ? 'let' : 'const'
831
- /* binding-name map offset = past the keyword + space (`let ` = 4, `const ` = 6) */
832
- const keywordOffset = keyword.length + 1
833
- if (fn === undefined) {
834
- return withCalleeRef({
835
- text: `${keyword} ${name} = undefined;`,
836
- segments: [span(declaration.name, keywordOffset)],
837
- })
838
- }
839
- /* Mirror `wrapSeed` (desugarSignals): a bare (non-thunk) seed is normalised to `() => (seed)`,
840
- made ASYNC when it carries a top-level `await` — so `computed(await load())` projects as a
841
- legal async thunk instead of a raw top-level await (`(await load())()` — a build-breaker that
842
- also mis-called the resolved value). A literal thunk passes through unchanged. `$$cellValue`
843
- then invokes it and unwraps a promise/stream to the value a bare read peeks, so an async or
844
- stream seed types as its RESOLVED value (`Promise<T>` → `T`) rather than the raw promise. */
845
- const fnIsThunk = ts.isArrowFunction(fn) || ts.isFunctionExpression(fn)
846
- const wrapPrefix = fnIsThunk ? '' : seedIsAsync(fn) ? 'async () => (' : '() => ('
847
- const wrapSuffix = fnIsThunk ? '' : ')'
848
- /* ADR-0042/0043: a STREAMING cell reads `undefined`-while-pending → `$$cellValuePending`
849
- (resolved `T | undefined`). Two seed shapes stream: a no-`await` async thunk (`async () =>
850
- x`), and a bare call/identifier whose type resolves to a promise/stream — the latter is what
851
- desugarSignals routes to `trackedComputed(…, streaming)` (`isPromiseComputed` /
852
- `isEagerStreamComputed`), so the shadow must agree or a `state.computed(getFoo())` reads as
853
- non-optional `T` while the runtime peeks `undefined`. A BLOCKING (`await`) cell suspends its
854
- region so it is always resolved, and a genuinely sync seed is never pending → `$$cellValue`
855
- (resolved `T`). The bare-seed arm needs the warm classifier; fail-open keeps `$$cellValue`. */
856
- const streamingSeed =
857
- (seedIsAsync(fn) && !seedIsBlocking(fn)) || bareSeedStreams(fn, span, verbatim, classify)
858
- const helper = streamingSeed ? '$$cellValuePending' : '$$cellValue'
859
- /* Record the pending cell so `{#await <name>}` strips its pending `undefined` (ADR-0047). */
860
- if (streamingSeed && ts.isIdentifier(declaration.name)) {
861
- pendingCellNames?.add(name)
862
- }
863
- const prefix = `${keyword} ${name}${annotation} = ${helper}(${wrapPrefix}`
864
- /* Peek-wrap any buried async sub-expression in the seed (ADR-0032, script side) so a bare
865
- `getSession()?.x ?? []` types as its resolved value — matching the `desugarSignals` lift.
866
- A whole-seed async call / a thunk seed yields no wrap (verbatim), exactly as the build. */
867
- const seed = seedPeekWrap(fn, verbatim, span, prefix.length, classify)
868
- return withCalleeRef({
869
- text: `${prefix}${seed.text}${wrapSuffix});`,
870
- segments: [span(declaration.name, keywordOffset), ...seed.segments],
871
- })
872
- }
873
-
874
- /* The seed peek-wrap as a scope line contributes it: a bare CALL or IDENTIFIER seed (the whole-seed
875
- / probe case — `getRates()`, `chat.done()`) stays verbatim so the `$$cellValue` wrapper unwraps it
876
- and no probe receiver is lifted, mirroring `desugarSignals`'s bare-seed skip; every other seed
877
- descends into `peekWrappedSeed`. */
878
- function seedPeekWrap(
879
- seed: ts.Expression,
880
- verbatim: (node: ts.Node) => string,
881
- span: (node: ts.Node, prefixLength: number) => ShadowMapping,
882
- prefixLength: number,
883
- classify: InterpolationClassifier | undefined,
884
- ): { text: string; segments: ShadowMapping[] } {
885
- if (ts.isCallExpression(seed) || ts.isIdentifier(seed)) {
886
- return { text: verbatim(seed), segments: [span(seed, prefixLength)] }
887
- }
888
- return peekWrappedSeed(verbatim(seed), span(seed, 0).sourceStart, prefixLength, classify)
889
- }
890
-
891
- /* True for a `computed`/`linked` seed that `wrapSeed` (desugarSignals) turns into an ASYNC thunk —
892
- a thunk the author wrote `async`, or a bare seed carrying a top-level `await` (`computed(await
893
- x)`). The shadow must agree so it unwraps the promise to the resolved value AND so the top-level
894
- await scan spares the seed. Stops at function boundaries — an inner `async` callback is its own
895
- scope, mirroring `hasTopLevelAwait`. */
896
- function seedIsAsync(seed: ts.Expression): boolean {
897
- if (ts.isArrowFunction(seed) || ts.isFunctionExpression(seed)) {
898
- return (
899
- ts
900
- .getModifiers(seed)
901
- ?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword) ?? false
902
- )
903
- }
904
- return hasTopLevelAwait(seed)
905
- }
906
-
907
- /* True for a BLOCKING async cell (ADR-0042 D6): an async thunk whose BODY has a top-level `await`
908
- (`computed(async () => await X)`), or a bare seed carrying a top-level `await` (`computed(await
909
- X)` — wrapSeed makes it an async thunk over that await). An async thunk with NO await
910
- (`computed(async () => getFoo())`) is STREAMING, not blocking. Shares `hasTopLevelAwait` with
911
- desugarSignals' `isBlockingSeed` so the shadow type (`$$cellValue` vs `$$cellValuePending`) agrees
912
- with the runtime's blocking flag — the "one predicate" ADR-0042 D5 requires. */
913
- function seedIsBlocking(seed: ts.Expression): boolean {
914
- if (ts.isArrowFunction(seed) || ts.isFunctionExpression(seed)) {
915
- return seedIsAsync(seed) && hasTopLevelAwait(seed.body)
916
- }
917
- return hasTopLevelAwait(seed)
918
- }
919
-
920
- /* True for a bare (non-thunk, no-`await`) call/identifier seed whose checker type resolves to a
921
- promise or async iterable — the STREAMING cell desugarSignals routes to `trackedComputed(…,
922
- streaming)` (`isPromiseComputed` / `isEagerStreamComputed`). Such a cell peeks `undefined` while
923
- pending, so its shadow type must be `$$cellValuePending` (resolved `T | undefined`), matching the
924
- `async () => x` streaming form. Restricted to a bare CALL/IDENTIFIER seed — the whole-seed shape,
925
- mirroring desugarSignals' bare-seed routing; a compound seed's buried async sub-expression is
926
- peek-wrapped separately. Needs the warm classifier — absent (or on a resolution throw) it returns
927
- false, keeping today's `$$cellValue`. */
928
- function bareSeedStreams(
929
- seed: ts.Expression,
930
- span: (node: ts.Node, prefixLength: number) => ShadowMapping,
931
- verbatim: (node: ts.Node) => string,
932
- classify: InterpolationClassifier | undefined,
933
- ): boolean {
934
- if (classify === undefined || (!ts.isCallExpression(seed) && !ts.isIdentifier(seed))) {
935
- return false
936
- }
937
- try {
938
- const kind = classify(span(seed, 0).sourceStart, verbatim(seed))
939
- return kind === 'promise' || kind === 'asyncIterable'
940
- } catch {
941
- return false
942
- }
943
- }
944
-
945
- /* Whether any ELEMENT in the tree carries an `attach` — gates emitting the DOM-typed
946
- attachment aliases. All nested content (block bodies, await/switch branches, snippet
947
- bodies) routes through `children`, so a recursive `children` walk is complete. */
948
- function hasElementAttach(nodes: TemplateNode[]): boolean {
949
- for (const node of nodes) {
950
- if (node === undefined) {
951
- continue
952
- }
953
- if (node.kind === 'element') {
954
- for (const attr of node.attrs) {
955
- if (attr.kind === 'attach') {
956
- return true
957
- }
958
- }
959
- }
960
- if ('children' in node && node.children !== undefined && hasElementAttach(node.children)) {
961
- return true
962
- }
963
- }
964
- return false
965
- }
966
-
967
- /* Emits a sibling list — each node standalone via `emitNode`. */
968
- function emitNodes(nodes: TemplateNode[], builder: Builder): void {
969
- for (const node of nodes) {
970
- if (node !== undefined) {
971
- emitNode(node, builder)
972
- }
973
- }
974
- }
975
-
976
- /* Emits a template node's expressions into the shadow's render body. Control flow
977
- introduces its binding so children type-check against it; every expression is
978
- referenced in a statement so a type error surfaces and maps. */
979
- function emitNode(node: TemplateNode, builder: Builder): void {
980
- switch (node.kind) {
981
- case 'text':
982
- for (const part of node.parts) {
983
- if (part.kind === 'expression') {
984
- builder.asyncStmt(part.code, part.loc, 'content')
985
- }
986
- }
987
- return
988
- case 'element':
989
- for (const attr of node.attrs) {
990
- if (attr.kind === 'attach') {
991
- /* `attach={code}` types its callback's `node` param from the element's tag
992
- (via `__ElementFor`) and checks the whole value is an attachment: an inline
993
- arrow's `node` reads the specific DOM interface, and a non-function value is
994
- rejected. Same IIFE-parameter contextual-typing trick the component-prop
995
- path uses; the leading `;` guards an unterminated preceding statement. */
996
- builder.raw(
997
- `;((__attach: __Attachment<__ElementFor<${JSON.stringify(node.tag)}>>) => {})(`,
998
- )
999
- builder.expr(attr.code, attr.loc)
1000
- builder.raw(');\n')
1001
- } else if (attr.kind === 'interpolated') {
1002
- /* An interpolated value checks each `{expr}` part on its own offset. */
1003
- for (const part of attr.parts) {
1004
- if (part.kind === 'expression') {
1005
- builder.asyncStmt(part.code, part.loc, 'attribute')
1006
- }
1007
- }
1008
- } else if (attr.kind !== 'static') {
1009
- /* Every other dynamic attribute checks its single `code`. `attrLiftPosition` —
1010
- the shared gate the runtime front-end lifts through — decides whether the
1011
- value is async-liftable: only `name={code}` peek-wraps (its promise/stream
1012
- sub-expressions project to their resolved type), while a directive
1013
- (`on*`/`bind:`/`class:`/`style:`/`{...}`) checks its code verbatim, matching
1014
- that the runtime never injects a cell for it. */
1015
- const position = attrLiftPosition(attr)
1016
- if (position !== undefined) {
1017
- builder.asyncStmt(attr.code, attr.loc, position)
1018
- } else {
1019
- builder.stmt(attr.code, attr.loc)
1020
- }
1021
- }
1022
- }
1023
- emitNodes(node.children, builder)
1024
- return
1025
- case 'component': {
1026
- /* The imported tag resolves (via the shadow host) to the child's
1027
- `(props: Props) => …` default, so `Parameters<typeof Child>[0]` is its prop
1028
- shape. `bind:` / `class:` / `style:` / `attach` and `{...spread}` are
1029
- framework directives (not part of the declared shape), so they are checked
1030
- leniently — each value against its own declared key type — never flagged as
1031
- excess. `on*` callbacks ARE ordinary declared props on a component (abide does
1032
- not auto-forward events to the DOM), so they go through the completeness check
1033
- with the rest — otherwise a required `onsave`/`oncancel` reads as missing even
1034
- when passed, and an undeclared handler slips by unflagged. */
1035
- const handled = (prop: { name: string; spread?: boolean }): boolean =>
1036
- prop.spread === true ||
1037
- prop.name.startsWith('bind:') ||
1038
- prop.name.startsWith('class:') ||
1039
- prop.name.startsWith('style:') ||
1040
- prop.name === 'attach'
1041
- const hasSpread = node.props.some((prop) => prop.spread)
1042
- /* Default slot content (`<Card>…</Card>`) lowers to a `children` Snippet prop at
1043
- runtime (see generateBuild.slotPart), so the completeness check must treat
1044
- `children` as supplied when it's present (handled below). Mirror the runtime's
1045
- predicate: any child that isn't whitespace-only text is renderable slot content
1046
- — an empty/whitespace slot sets no `children` layer, so it doesn't count. */
1047
- const hasSlotContent = node.children.some((child) => !isWhitespaceText(child))
1048
- for (const prop of node.props.filter(handled)) {
1049
- /* Lead with a defensive `;`: an IIFE/object-literal arg starts with `(` or
1050
- `{`, so without it a preceding scope statement left unterminated (a script
1051
- ending in a call with no trailing semicolon, e.g. `effect(() => …)`)
1052
- merges across the newline into `effect(…)(…)` — a spurious "not callable". */
1053
- if (prop.spread) {
1054
- /* A `{...expr}` spread contributes a SUBSET of the props (required ones
1055
- may come from another spread/explicit prop), so check it against
1056
- `Partial<Props>` — every key it does carry must match, without
1057
- demanding completeness. */
1058
- builder.raw(`;((__spread: Partial<Parameters<typeof ${node.name}>[0]>) => {})(`)
1059
- } else {
1060
- builder.raw(
1061
- `;((__prop: Parameters<typeof ${node.name}>[0][${JSON.stringify(prop.name)}]) => {})(`,
1062
- )
1063
- }
1064
- builder.expr(prop.code, prop.loc)
1065
- builder.raw(');\n')
1066
- }
1067
- /* The plain data props as one object-literal argument typed to the child's whole
1068
- prop shape: a missing required prop errors on the literal (anchored at the tag
1069
- via the mapped `{`), an unknown prop errors on its key, a wrong type on its
1070
- value. Skipped when a spread is present — a spread may supply required props,
1071
- so completeness can't be demanded; the data props fall back to lenient per-key
1072
- checks instead. */
1073
- const dataProps = node.props.filter((prop) => !handled(prop))
1074
- if (hasSpread) {
1075
- for (const prop of dataProps) {
1076
- builder.raw(
1077
- `;((__prop: Parameters<typeof ${node.name}>[0][${JSON.stringify(prop.name)}]) => {})(`,
1078
- )
1079
- builder.expr(prop.code, prop.loc)
1080
- builder.raw(');\n')
1081
- }
1082
- } else {
1083
- /* With slot content the child's `children` prop is supplied by the slot, so
1084
- check completeness against the shape with `children` made OPTIONAL rather
1085
- than removed — dropping it via a bare `Omit` collapses a children-only
1086
- shape to `{}`, a weak type that then lets excess props slip by. `Omit` +
1087
- `Partial<Pick<…>>` keeps every other prop required and `children` as a
1088
- known-optional key (a no-op `Partial<{}>` when the child declares none), so
1089
- completeness and excess-prop checks both stay intact. The explicit
1090
- `children={…}` attribute is dropped from the literal — the slot's key wins
1091
- (`composeProps`), and leaving it in would read as excess. */
1092
- const propsShape = `Parameters<typeof ${node.name}>[0]`
1093
- const completenessType = hasSlotContent
1094
- ? `Omit<${propsShape}, 'children'> & Partial<Pick<${propsShape}, Extract<keyof ${propsShape}, 'children'>>>`
1095
- : propsShape
1096
- const literalProps = hasSlotContent
1097
- ? dataProps.filter((prop) => prop.name !== 'children')
1098
- : dataProps
1099
- builder.raw(`;((__c: ${completenessType}): void => { void __c })({`)
1100
- /* A zero-length anchor right after `{`, pointing at the tag: a missing-
1101
- required-prop error spans the literal from `{`, so it overlaps this and
1102
- maps to the tag (an empty span trivially satisfies the source-text ==
1103
- shadow-text invariant). */
1104
- builder.mapped('', node.loc)
1105
- builder.raw('\n')
1106
- for (const prop of literalProps) {
1107
- /* The key mapped to its source name (excess-prop errors land on the key);
1108
- the value verbatim-mapped (wrong-type errors land on the value).
1109
- Hyphenated names (`aria-label`, `data-*`) aren't valid identifiers, so
1110
- they're wrapped in raw quotes — a string-literal key the parser accepts.
1111
- The quotes are unmapped; an excess-prop error on the literal starts at the
1112
- opening quote and overlaps the mapped name, clamping back onto it. */
1113
- const needsQuoting = !/^[A-Za-z_$][\w$]*$/.test(prop.name)
1114
- if (needsQuoting) {
1115
- builder.raw('"')
1116
- }
1117
- if (prop.nameLoc !== undefined) {
1118
- builder.mapped(prop.name, prop.nameLoc)
1119
- } else {
1120
- builder.raw(prop.name)
1121
- }
1122
- if (needsQuoting) {
1123
- builder.raw('"')
1124
- }
1125
- builder.raw(': ')
1126
- builder.expr(prop.code, prop.loc)
1127
- builder.raw(',\n')
1128
- }
1129
- builder.raw('});\n')
1130
- }
1131
- emitNodes(node.children, builder)
1132
- return
1133
- }
1134
- case 'if': {
1135
- /* The optional `<template else>` is a match-less `case` CHILD (the runtime
1136
- pairs it the same way — see `generateIf`); the rest are the then-content.
1137
- Emitting it as a real `else` gives its body the condition's NEGATIVE
1138
- narrowing — emitting it inside the `if` block (as a plain child) instead
1139
- gave it the positive narrowing, so a literal-union compare read as a
1140
- "no overlap" and a typeof-narrowed branch saw the wrong member. */
1141
- const branches = node.children.filter(
1142
- (child): child is Extract<TemplateNode, { kind: 'case' }> => child.kind === 'case',
1143
- )
1144
- const thenChildren = node.children.filter((child) => child.kind !== 'case')
1145
- builder.raw('if ')
1146
- builder.asyncExpr(node.condition, node.loc, 'if')
1147
- builder.raw(' {\n')
1148
- emitNodes(thenChildren, builder)
1149
- builder.raw('}')
1150
- /* `elseif` → a real `else if` so its body inherits the prior conditions' negative
1151
- narrowing plus its own positive; `else` → the trailing block. */
1152
- for (const branch of branches) {
1153
- if (branch.condition !== undefined) {
1154
- builder.raw(' else if ')
1155
- builder.asyncExpr(branch.condition, branch.loc, 'if')
1156
- builder.raw(' {\n')
1157
- } else {
1158
- builder.raw(' else {\n')
1159
- }
1160
- emitNodes(branch.children, builder)
1161
- builder.raw('}')
1162
- }
1163
- builder.raw('\n')
1164
- return
1165
- }
1166
- case 'each':
1167
- /* `for await` over an async each's AsyncIterable, plain `for…of` otherwise —
1168
- so the item binds to the element type under either iteration protocol. The
1169
- binding name is `mapped` (not `raw`) so hover/highlighting land on it. */
1170
- builder.raw(node.async ? 'for await (const ' : 'for (const ')
1171
- builder.mapped(node.as, node.asLoc)
1172
- builder.raw(' of ')
1173
- builder.expr(node.items, node.loc)
1174
- builder.raw(') {\n')
1175
- if (node.key !== undefined) {
1176
- builder.raw('void ')
1177
- builder.expr(node.key, node.keyLoc)
1178
- builder.raw(';\n')
1179
- }
1180
- /* `index="i"` binds the row's position — always a number (the row ordinal,
1181
- or an async stream's arrival count). Declare it so body references check. */
1182
- if (node.index !== undefined) {
1183
- builder.raw('const ')
1184
- builder.mapped(node.index, node.indexLoc)
1185
- builder.raw(': number = 0;\n')
1186
- }
1187
- emitNodes(node.children, builder)
1188
- builder.raw('}\n')
1189
- return
1190
- case 'await': {
1191
- /* Resolve once into a shadow-local; `then` binds it (carrying the awaited
1192
- type so resolved-content props are checked), `catch` binds the error as
1193
- `any` (statically unknowable), `finally` binds nothing. Blocking: the
1194
- non-branch children are the resolved content, bound to `as`. Streaming:
1195
- they're the pending content, checked without the resolved value. */
1196
- const resolved = builder.unique('awaited')
1197
- builder.raw('{\n')
1198
- /* A bare `{#await <pendingCell>}` awaits the CELL (ADR-0047 `$$awaitSubject`): it shows
1199
- pending then binds the RESOLVED value, never the pending `undefined` the
1200
- `$$cellValuePending` peek carries. So strip that `undefined` with `$$awaitCell` — the
1201
- resolved/`:then` bindings all derive from `resolved`, so one strip covers every one.
1202
- Only a whole-subject bare pending-cell reference qualifies (mirrors the runtime
1203
- `awaitSubjectExpr` classification); any other subject (a plain promise, a blocking
1204
- cell, a compound expression) stays a plain `await`. */
1205
- const subjectIsPendingCell = builder.pendingCellNames.has(node.promise.trim())
1206
- builder.raw(`const ${resolved} = ${subjectIsPendingCell ? '$$awaitCell(' : 'await '}`)
1207
- builder.expr(node.promise, node.loc)
1208
- builder.raw(`${subjectIsPendingCell ? ')' : ''};\nvoid ${resolved};\n`)
1209
- const pending = node.children.filter((child) => child.kind !== 'branch')
1210
- const branches = node.children.filter((child) => child.kind === 'branch')
1211
- if (node.blocking && node.as !== undefined) {
1212
- builder.raw('{\nconst ')
1213
- builder.mapped(node.as, node.asLoc)
1214
- builder.raw(` = ${resolved};\n`)
1215
- emitNodes(pending, builder)
1216
- builder.raw('}\n')
1217
- } else {
1218
- emitNodes(pending, builder)
1219
- }
1220
- for (const branch of branches) {
1221
- if (branch.kind !== 'branch') {
1222
- continue
1223
- }
1224
- builder.raw('{\n')
1225
- if (branch.branch === 'then' && branch.as !== undefined) {
1226
- builder.raw('const ')
1227
- builder.mapped(branch.as, branch.asLoc)
1228
- builder.raw(` = ${resolved};\n`)
1229
- } else if (branch.branch === 'catch' && branch.as !== undefined) {
1230
- builder.raw('const ')
1231
- builder.mapped(branch.as, branch.asLoc)
1232
- /* `unknown`, not `any` — a `catch` error is statically unknowable, and this
1233
- matches what strict-mode plain TS gives a real `catch (err)`
1234
- (`useUnknownInCatchVariables`), so the author must narrow before dereferencing
1235
- (`err instanceof Error ? … : …`) exactly as outside a template (ADR-0042 fidelity). */
1236
- builder.raw(' = undefined as unknown;\n')
1237
- }
1238
- emitNodes(branch.children, builder)
1239
- builder.raw('}\n')
1240
- }
1241
- builder.raw('}\n')
1242
- return
1243
- }
1244
- case 'switch':
1245
- /* A real `switch` so a discriminant subject narrows into each case body;
1246
- non-case children (whitespace between cases) carry nothing and are
1247
- skipped. `break` keeps cases independent under `noFallthroughCasesInSwitch`. */
1248
- builder.raw('switch (')
1249
- builder.asyncExpr(node.subject, node.loc, 'switch')
1250
- builder.raw(') {\n')
1251
- for (const child of node.children) {
1252
- if (child.kind !== 'case') {
1253
- continue
1254
- }
1255
- if (child.match !== undefined) {
1256
- builder.raw('case ')
1257
- builder.expr(child.match, child.loc)
1258
- builder.raw(': {\n')
1259
- } else {
1260
- builder.raw('default: {\n')
1261
- }
1262
- emitNodes(child.children, builder)
1263
- builder.raw('break;\n}\n')
1264
- }
1265
- builder.raw('}\n')
1266
- return
1267
- case 'case':
1268
- /* Reached only for a stray case outside a switch/if (none today); a `switch`
1269
- emits its own cases and the `if` handler consumes its `else` child. */
1270
- if (node.match !== undefined) {
1271
- builder.stmt(node.match, node.loc)
1272
- }
1273
- emitNodes(node.children, builder)
1274
- return
1275
- case 'branch':
1276
- /* Reached for a `{#try}`'s `catch`/`finally`: the `try` handler emits its
1277
- children directly (guarded content + these branch nodes), so a `{:catch err}`
1278
- binds its error here as `any` (statically unknowable). The `await`/`if`/`switch`
1279
- handlers consume their own branches inline and never route through this case. */
1280
- builder.raw('{\n')
1281
- if (node.as !== undefined) {
1282
- /* `unknown`, not `any` — see the await-`catch` binding above (matches strict TS's
1283
- `catch (err)`, forcing the author to narrow). */
1284
- builder.raw(`const ${node.as} = undefined as unknown;\n`)
1285
- }
1286
- emitNodes(node.children, builder)
1287
- builder.raw('}\n')
1288
- return
1289
- case 'try':
1290
- builder.raw('{\n')
1291
- emitNodes(node.children, builder)
1292
- builder.raw('}\n')
1293
- return
1294
- case 'snippet':
1295
- /* `args={…}` is the parameter list; `mapped` (not `raw`) so hover/highlighting
1296
- land on the binding. `loc` is the `args` expression's offset (see
1297
- toSnippetOrTemplate). The name is a static attribute with no tracked offset. */
1298
- builder.raw(`const ${node.name} = (`)
1299
- if (node.params !== undefined) {
1300
- builder.mapped(node.params, node.loc)
1301
- }
1302
- /* Wrap the body in `snippet(() => …)` so the shadow types the snippet as
1303
- `(args) => SnippetValue` — mirroring the runtime lowering (which returns
1304
- `$$snippet(($host) => …)`) so a snippet passed to a `Snippet`-typed prop
1305
- type-checks instead of reading as `() => void`. */
1306
- builder.raw(') => snippet(() => {\n')
1307
- emitNodes(node.children, builder)
1308
- builder.raw('});\n')
1309
- return
1310
- case 'script':
1311
- /* A scoped reactive `<script>`: value-project its reactive declarations to
1312
- their value types (`computed(…)` → the computed value, `state(…)` → the
1313
- initial) exactly as the leading script's scope lines are, so the branch's
1314
- markup type-checks a nested signal as its value — matching the runtime,
1315
- which derefs nested-script signals through the rest of the branch. Emitted
1316
- INLINE in the current block, not a nested `{…}`, so its bindings reach the
1317
- branch's later siblings (a nested if/each); a wrapping block trapped them,
1318
- surfacing "Cannot find name". Leading `;` guards a preceding semicolon-less
1319
- call from merging in (see the component case). Not yet position-mapped. */
1320
- builder.raw(`;\n${projectNestedScript(node.code)}\n`)
1321
- return
1322
- case 'style':
1323
- /* CSS, not TypeScript — nothing for the shadow to type-check. */
1324
- return
1325
- }
1326
- }