@abide/abide 0.28.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 (562) hide show
  1. package/CHANGELOG.md +607 -0
  2. package/LICENSE +21 -0
  3. package/README.md +154 -0
  4. package/bin/abide.ts +212 -0
  5. package/package.json +155 -0
  6. package/src/abideLsp.ts +211 -0
  7. package/src/abideModules.d.ts +8 -0
  8. package/src/abideResolverPlugin.ts +923 -0
  9. package/src/appEntry.ts +151 -0
  10. package/src/assets/app.html +12 -0
  11. package/src/build.ts +143 -0
  12. package/src/buildCli.ts +127 -0
  13. package/src/buildDisconnected.ts +118 -0
  14. package/src/bundleApp.ts +147 -0
  15. package/src/bundleDisconnectedEntry.ts +14 -0
  16. package/src/checkAbide.ts +77 -0
  17. package/src/cliEntry.ts +25 -0
  18. package/src/clientBuildPlugins.ts +33 -0
  19. package/src/clientEntry.ts +17 -0
  20. package/src/compile.ts +63 -0
  21. package/src/controlServerWorker.ts +426 -0
  22. package/src/devEntry.ts +250 -0
  23. package/src/discoveryEntry.ts +81 -0
  24. package/src/lib/bundle/BundleMenu.ts +12 -0
  25. package/src/lib/bundle/BundleMenuItem.ts +25 -0
  26. package/src/lib/bundle/BundleWindow.ts +37 -0
  27. package/src/lib/bundle/WEBVIEW_BUILD_REVISION.ts +9 -0
  28. package/src/lib/bundle/WEBVIEW_VERSION.ts +7 -0
  29. package/src/lib/bundle/bindConnectedFlag.ts +29 -0
  30. package/src/lib/bundle/bindRequestNavigate.ts +34 -0
  31. package/src/lib/bundle/buildWebviewLib.ts +111 -0
  32. package/src/lib/bundle/bundled.ts +35 -0
  33. package/src/lib/bundle/disconnected.abide +236 -0
  34. package/src/lib/bundle/disconnected.css +9 -0
  35. package/src/lib/bundle/ensureWebviewLib.ts +20 -0
  36. package/src/lib/bundle/exitWithParent.ts +28 -0
  37. package/src/lib/bundle/infoPlist.ts +46 -0
  38. package/src/lib/bundle/installDownloads.ts +24 -0
  39. package/src/lib/bundle/installMacMenu.ts +39 -0
  40. package/src/lib/bundle/listenLocalControlServer.ts +19 -0
  41. package/src/lib/bundle/native/abideMenu.mm +422 -0
  42. package/src/lib/bundle/native/webview.h +4557 -0
  43. package/src/lib/bundle/onMenu.ts +42 -0
  44. package/src/lib/bundle/openWebview.ts +104 -0
  45. package/src/lib/bundle/pngToIcns.ts +47 -0
  46. package/src/lib/bundle/probeAbideServer.ts +57 -0
  47. package/src/lib/bundle/resolveServerBinary.ts +12 -0
  48. package/src/lib/bundle/resolveWebviewLib.ts +53 -0
  49. package/src/lib/bundle/serverBinaryFilename.ts +8 -0
  50. package/src/lib/bundle/signMacApp.ts +37 -0
  51. package/src/lib/bundle/spawnEmbeddedServer.ts +64 -0
  52. package/src/lib/bundle/stableLocalPort.ts +19 -0
  53. package/src/lib/bundle/waitForServer.ts +23 -0
  54. package/src/lib/bundle/webviewCachePath.ts +23 -0
  55. package/src/lib/bundle/webviewLibName.ts +11 -0
  56. package/src/lib/cli/connectToServer.ts +23 -0
  57. package/src/lib/cli/createClient.ts +108 -0
  58. package/src/lib/cli/dispatchCommand.ts +71 -0
  59. package/src/lib/cli/loadEnvFromBinaryDir.ts +15 -0
  60. package/src/lib/cli/parseArgvForRpc.ts +100 -0
  61. package/src/lib/cli/printHelp.ts +119 -0
  62. package/src/lib/cli/printSessionHelp.ts +27 -0
  63. package/src/lib/cli/printSessionStatus.ts +21 -0
  64. package/src/lib/cli/printTrimmed.ts +8 -0
  65. package/src/lib/cli/printValue.ts +10 -0
  66. package/src/lib/cli/resolveCliTarget.ts +48 -0
  67. package/src/lib/cli/runCli.ts +176 -0
  68. package/src/lib/cli/runSession.ts +108 -0
  69. package/src/lib/cli/startLocalInstance.ts +14 -0
  70. package/src/lib/cli/tokenizeLine.ts +51 -0
  71. package/src/lib/cli/types/CliManifest.ts +9 -0
  72. package/src/lib/cli/types/CliManifestEntry.ts +17 -0
  73. package/src/lib/cli/types/CliTarget.ts +13 -0
  74. package/src/lib/mcp/annotationsForMethod.ts +29 -0
  75. package/src/lib/mcp/createMcpResourceServer.ts +102 -0
  76. package/src/lib/mcp/createMcpServer.ts +48 -0
  77. package/src/lib/mcp/dispatchMcpRequest.ts +138 -0
  78. package/src/lib/mcp/mcpResourceServerSlot.ts +18 -0
  79. package/src/lib/mcp/mcpSurface.ts +295 -0
  80. package/src/lib/mcp/toolResultFromResponse.ts +66 -0
  81. package/src/lib/mcp/types/JsonRpcRequest.ts +12 -0
  82. package/src/lib/mcp/types/JsonRpcResponse.ts +20 -0
  83. package/src/lib/mcp/types/McpResourceContents.ts +10 -0
  84. package/src/lib/mcp/types/McpResourceDescriptor.ts +6 -0
  85. package/src/lib/mcp/types/McpResourceServer.ts +12 -0
  86. package/src/lib/mcp/types/McpServer.ts +9 -0
  87. package/src/lib/mcp/types/McpServerOptions.ts +16 -0
  88. package/src/lib/server/AppModule.ts +47 -0
  89. package/src/lib/server/DELETE.ts +10 -0
  90. package/src/lib/server/GET.ts +10 -0
  91. package/src/lib/server/HEAD.ts +10 -0
  92. package/src/lib/server/PATCH.ts +10 -0
  93. package/src/lib/server/POST.ts +10 -0
  94. package/src/lib/server/PUT.ts +10 -0
  95. package/src/lib/server/agent.ts +86 -0
  96. package/src/lib/server/appDataDir.ts +16 -0
  97. package/src/lib/server/cli/buildEnvContent.ts +19 -0
  98. package/src/lib/server/cli/createTarGz.ts +77 -0
  99. package/src/lib/server/cli/handleCliDownload.ts +150 -0
  100. package/src/lib/server/cli/handleCliInstall.ts +37 -0
  101. package/src/lib/server/cli/installScript.ts +31 -0
  102. package/src/lib/server/cli/maxSourceMtime.ts +26 -0
  103. package/src/lib/server/cookies.ts +30 -0
  104. package/src/lib/server/env.ts +51 -0
  105. package/src/lib/server/error.ts +73 -0
  106. package/src/lib/server/json.ts +42 -0
  107. package/src/lib/server/jsonl.ts +47 -0
  108. package/src/lib/server/prompts/definePrompt.ts +21 -0
  109. package/src/lib/server/prompts/promptRegistry.ts +9 -0
  110. package/src/lib/server/prompts/registerPrompt.ts +6 -0
  111. package/src/lib/server/prompts/renderPromptTemplate.ts +17 -0
  112. package/src/lib/server/prompts/types/Prompt.ts +13 -0
  113. package/src/lib/server/prompts/types/PromptOptions.ts +12 -0
  114. package/src/lib/server/prompts/types/PromptRegistryEntry.ts +13 -0
  115. package/src/lib/server/prompts/types/PromptRoutes.ts +10 -0
  116. package/src/lib/server/reachable.ts +45 -0
  117. package/src/lib/server/redirect.ts +43 -0
  118. package/src/lib/server/request.ts +19 -0
  119. package/src/lib/server/rpc/defineVerb.ts +210 -0
  120. package/src/lib/server/rpc/dispatchVerbInProcess.ts +46 -0
  121. package/src/lib/server/rpc/findVerbByCommandName.ts +18 -0
  122. package/src/lib/server/rpc/parseArgs.ts +127 -0
  123. package/src/lib/server/rpc/readBodyWithinLimit.ts +44 -0
  124. package/src/lib/server/rpc/registerVerb.ts +6 -0
  125. package/src/lib/server/rpc/runWithVerbTimeout.ts +49 -0
  126. package/src/lib/server/rpc/types/RemoteHandler.ts +27 -0
  127. package/src/lib/server/rpc/types/RemoteRoutes.ts +13 -0
  128. package/src/lib/server/rpc/types/TypedResponse.ts +18 -0
  129. package/src/lib/server/rpc/types/VerbHelper.ts +87 -0
  130. package/src/lib/server/rpc/types/VerbRegistryEntry.ts +35 -0
  131. package/src/lib/server/rpc/unprocessed.ts +14 -0
  132. package/src/lib/server/rpc/verbRegistry.ts +11 -0
  133. package/src/lib/server/runtime/DEFAULT_PORT.ts +6 -0
  134. package/src/lib/server/runtime/DEV_READY_MESSAGE.ts +6 -0
  135. package/src/lib/server/runtime/DEV_REBUILD_MESSAGE.ts +4 -0
  136. package/src/lib/server/runtime/DEV_RELOAD_CLIENT_SCRIPT.ts +107 -0
  137. package/src/lib/server/runtime/SSR_SWAP_SCRIPT.ts +16 -0
  138. package/src/lib/server/runtime/acceptsGzip.ts +24 -0
  139. package/src/lib/server/runtime/buildCacheSnapshot.ts +61 -0
  140. package/src/lib/server/runtime/buildHealthPayload.ts +34 -0
  141. package/src/lib/server/runtime/buildInspectorSurface.ts +37 -0
  142. package/src/lib/server/runtime/buildOpenApiSpec.ts +106 -0
  143. package/src/lib/server/runtime/cacheControlForAsset.ts +22 -0
  144. package/src/lib/server/runtime/containsTraversal.ts +37 -0
  145. package/src/lib/server/runtime/createAppAssetServer.ts +76 -0
  146. package/src/lib/server/runtime/createAssetHeaderCache.ts +31 -0
  147. package/src/lib/server/runtime/createPublicAssetServer.ts +67 -0
  148. package/src/lib/server/runtime/createReachable.ts +109 -0
  149. package/src/lib/server/runtime/createRouteDispatcher.ts +127 -0
  150. package/src/lib/server/runtime/createServer.ts +674 -0
  151. package/src/lib/server/runtime/createUiPageRenderer.ts +181 -0
  152. package/src/lib/server/runtime/crossOriginForbidden.ts +17 -0
  153. package/src/lib/server/runtime/crossOriginGate.ts +29 -0
  154. package/src/lib/server/runtime/devClientFingerprint.ts +117 -0
  155. package/src/lib/server/runtime/devHotModuleResponse.ts +40 -0
  156. package/src/lib/server/runtime/devReloadResponse.ts +41 -0
  157. package/src/lib/server/runtime/disableIdleTimeoutForStream.ts +27 -0
  158. package/src/lib/server/runtime/envSchemaStore.ts +15 -0
  159. package/src/lib/server/runtime/findOpenPort.ts +21 -0
  160. package/src/lib/server/runtime/getActiveServer.ts +6 -0
  161. package/src/lib/server/runtime/globToPathSet.ts +29 -0
  162. package/src/lib/server/runtime/gzipResponse.ts +46 -0
  163. package/src/lib/server/runtime/inProcessServer.ts +20 -0
  164. package/src/lib/server/runtime/internalErrorResponse.ts +25 -0
  165. package/src/lib/server/runtime/isCrossOriginRequest.ts +23 -0
  166. package/src/lib/server/runtime/listenOnOpenPort.ts +36 -0
  167. package/src/lib/server/runtime/logExposedSurfaces.ts +156 -0
  168. package/src/lib/server/runtime/maybeMountInspector.ts +97 -0
  169. package/src/lib/server/runtime/mimeForExtension.ts +14 -0
  170. package/src/lib/server/runtime/pageUrlFromStore.ts +15 -0
  171. package/src/lib/server/runtime/parseIdleTimeout.ts +10 -0
  172. package/src/lib/server/runtime/parsePort.ts +11 -0
  173. package/src/lib/server/runtime/registryManifests.ts +66 -0
  174. package/src/lib/server/runtime/requestContext.ts +5 -0
  175. package/src/lib/server/runtime/resolvePageSnapshot.ts +25 -0
  176. package/src/lib/server/runtime/respondWithEmbeddedAsset.ts +18 -0
  177. package/src/lib/server/runtime/runWithRequestScope.ts +150 -0
  178. package/src/lib/server/runtime/safeJsonForScript.ts +17 -0
  179. package/src/lib/server/runtime/serializeCacheSnapshot.ts +45 -0
  180. package/src/lib/server/runtime/serverSlot.ts +13 -0
  181. package/src/lib/server/runtime/setActiveServer.ts +6 -0
  182. package/src/lib/server/runtime/snapshotEntryFromCache.ts +83 -0
  183. package/src/lib/server/runtime/streamCacheResolutions.ts +37 -0
  184. package/src/lib/server/runtime/streamFromIterator.ts +86 -0
  185. package/src/lib/server/runtime/types/Assets.ts +6 -0
  186. package/src/lib/server/runtime/types/DevReloadStamp.ts +18 -0
  187. package/src/lib/server/runtime/types/InspectorCacheEntry.ts +24 -0
  188. package/src/lib/server/runtime/types/InspectorCacheSnapshot.ts +11 -0
  189. package/src/lib/server/runtime/types/InspectorContext.ts +30 -0
  190. package/src/lib/server/runtime/types/InspectorSocket.ts +17 -0
  191. package/src/lib/server/runtime/types/InspectorSurface.ts +13 -0
  192. package/src/lib/server/runtime/types/InspectorVerb.ts +27 -0
  193. package/src/lib/server/runtime/types/RequestStore.ts +55 -0
  194. package/src/lib/server/runtime/warnUnguardedMcp.ts +32 -0
  195. package/src/lib/server/runtime/withResponseDefaults.ts +24 -0
  196. package/src/lib/server/server.ts +33 -0
  197. package/src/lib/server/socket.ts +32 -0
  198. package/src/lib/server/sockets/createSocketDispatcher.ts +337 -0
  199. package/src/lib/server/sockets/defineSocket.ts +179 -0
  200. package/src/lib/server/sockets/lookupSocket.ts +6 -0
  201. package/src/lib/server/sockets/registerSocket.ts +6 -0
  202. package/src/lib/server/sockets/socketOperations.ts +36 -0
  203. package/src/lib/server/sockets/socketRegistry.ts +9 -0
  204. package/src/lib/server/sockets/types/Socket.ts +23 -0
  205. package/src/lib/server/sockets/types/SocketClientFrame.ts +19 -0
  206. package/src/lib/server/sockets/types/SocketOperation.ts +22 -0
  207. package/src/lib/server/sockets/types/SocketOptions.ts +26 -0
  208. package/src/lib/server/sockets/types/SocketRegistryEntry.ts +19 -0
  209. package/src/lib/server/sockets/types/SocketRoutes.ts +10 -0
  210. package/src/lib/server/sockets/types/SocketServerFrame.ts +24 -0
  211. package/src/lib/server/sse.ts +54 -0
  212. package/src/lib/shared/ABIDE_PACKAGE_NAME.ts +7 -0
  213. package/src/lib/shared/ABIDE_VERSION.ts +9 -0
  214. package/src/lib/shared/CACHE_CONTROL_VALUES.ts +16 -0
  215. package/src/lib/shared/CACHE_WRAPPED.ts +8 -0
  216. package/src/lib/shared/CLI_PATH.ts +7 -0
  217. package/src/lib/shared/DEV_HOT_PREFIX.ts +7 -0
  218. package/src/lib/shared/DEV_RELOAD_PATH.ts +6 -0
  219. package/src/lib/shared/HEALTH_PATH.ts +7 -0
  220. package/src/lib/shared/HttpError.ts +20 -0
  221. package/src/lib/shared/IDENTITY_PATH.ts +6 -0
  222. package/src/lib/shared/INSPECTOR_PATH.ts +7 -0
  223. package/src/lib/shared/NAV_HEADER.ts +8 -0
  224. package/src/lib/shared/OFFLINE_HEADER.ts +8 -0
  225. package/src/lib/shared/REMOTE_FUNCTION.ts +8 -0
  226. package/src/lib/shared/REPLAYABLE_METHODS.ts +12 -0
  227. package/src/lib/shared/SOCKETS_PATH.ts +7 -0
  228. package/src/lib/shared/STREAMING_CONTENT_TYPES.ts +11 -0
  229. package/src/lib/shared/SocketDisconnectedError.ts +13 -0
  230. package/src/lib/shared/TEXT_PLAIN.ts +7 -0
  231. package/src/lib/shared/abideImportName.ts +44 -0
  232. package/src/lib/shared/abideLog.ts +38 -0
  233. package/src/lib/shared/activeCacheStore.ts +20 -0
  234. package/src/lib/shared/activePage.ts +25 -0
  235. package/src/lib/shared/appDataDir.ts +34 -0
  236. package/src/lib/shared/appNameSlot.ts +10 -0
  237. package/src/lib/shared/basePath.ts +10 -0
  238. package/src/lib/shared/basePathFromAppUrl.ts +20 -0
  239. package/src/lib/shared/baseSlot.ts +14 -0
  240. package/src/lib/shared/binaryDirEnvPath.ts +12 -0
  241. package/src/lib/shared/browserClientFlags.ts +10 -0
  242. package/src/lib/shared/buildRpcProxy.ts +39 -0
  243. package/src/lib/shared/buildRpcRequest.ts +70 -0
  244. package/src/lib/shared/buildSocketOverChannel.ts +58 -0
  245. package/src/lib/shared/bundleLayout.ts +36 -0
  246. package/src/lib/shared/cache.ts +951 -0
  247. package/src/lib/shared/cacheEntryFromSnapshot.ts +59 -0
  248. package/src/lib/shared/cacheStoreSlot.ts +16 -0
  249. package/src/lib/shared/cacheStores.ts +10 -0
  250. package/src/lib/shared/canonicalJson.ts +63 -0
  251. package/src/lib/shared/carriesBodyArgs.ts +13 -0
  252. package/src/lib/shared/clearLastConnection.ts +7 -0
  253. package/src/lib/shared/commandNameForUrl.ts +17 -0
  254. package/src/lib/shared/createCacheStore.ts +104 -0
  255. package/src/lib/shared/createChannelLog.ts +122 -0
  256. package/src/lib/shared/createLifecycleChannel.ts +56 -0
  257. package/src/lib/shared/createLivenessWatch.ts +118 -0
  258. package/src/lib/shared/createPushIterator.ts +127 -0
  259. package/src/lib/shared/createRemoteFunction.ts +122 -0
  260. package/src/lib/shared/createSubscriber.ts +55 -0
  261. package/src/lib/shared/createTraceContext.ts +21 -0
  262. package/src/lib/shared/dataDirEnvPath.ts +12 -0
  263. package/src/lib/shared/decodeResponse.ts +47 -0
  264. package/src/lib/shared/detectTarget.ts +27 -0
  265. package/src/lib/shared/detectVerbMethod.ts +17 -0
  266. package/src/lib/shared/emitLogRecord.ts +190 -0
  267. package/src/lib/shared/exeSuffix.ts +9 -0
  268. package/src/lib/shared/exitOnBuildFailure.ts +17 -0
  269. package/src/lib/shared/extraForwardHeaders.ts +16 -0
  270. package/src/lib/shared/fileStem.ts +9 -0
  271. package/src/lib/shared/findExportCallSite.ts +476 -0
  272. package/src/lib/shared/formatTraceparent.ts +6 -0
  273. package/src/lib/shared/forwardHeaders.ts +44 -0
  274. package/src/lib/shared/getRemoteMeta.ts +5 -0
  275. package/src/lib/shared/globalCacheStore.ts +15 -0
  276. package/src/lib/shared/globalCacheStoreSlot.ts +14 -0
  277. package/src/lib/shared/health.ts +179 -0
  278. package/src/lib/shared/healthReadSlot.ts +11 -0
  279. package/src/lib/shared/healthSeedSlot.ts +12 -0
  280. package/src/lib/shared/html.ts +38 -0
  281. package/src/lib/shared/importNamesToStrip.ts +13 -0
  282. package/src/lib/shared/invalidateEvent.ts +11 -0
  283. package/src/lib/shared/invalidateTripwire.ts +40 -0
  284. package/src/lib/shared/isAbideHealthPayload.ts +11 -0
  285. package/src/lib/shared/isCompileTarget.ts +15 -0
  286. package/src/lib/shared/isDebugEnabled.ts +26 -0
  287. package/src/lib/shared/isDebugNegated.ts +19 -0
  288. package/src/lib/shared/isModuleNotFound.ts +16 -0
  289. package/src/lib/shared/isReadOnlyMethod.ts +14 -0
  290. package/src/lib/shared/isReplayableMethod.ts +7 -0
  291. package/src/lib/shared/isStreamingResponse.ts +11 -0
  292. package/src/lib/shared/isSubscribable.ts +15 -0
  293. package/src/lib/shared/jsonSchemaForPromptArguments.ts +29 -0
  294. package/src/lib/shared/jsonSchemaForSchema.ts +39 -0
  295. package/src/lib/shared/jsonlErrorFrame.ts +24 -0
  296. package/src/lib/shared/keyForRemoteCall.ts +29 -0
  297. package/src/lib/shared/keyMatchesPrefix.ts +9 -0
  298. package/src/lib/shared/lastConnectionPath.ts +7 -0
  299. package/src/lib/shared/layoutChainForRoute.ts +22 -0
  300. package/src/lib/shared/loadEnvFile.ts +17 -0
  301. package/src/lib/shared/loadEnvFromDataDir.ts +14 -0
  302. package/src/lib/shared/log.ts +24 -0
  303. package/src/lib/shared/logClosingRecord.ts +28 -0
  304. package/src/lib/shared/logTapSlot.ts +13 -0
  305. package/src/lib/shared/manifestModule.ts +39 -0
  306. package/src/lib/shared/matchesDebugPattern.ts +16 -0
  307. package/src/lib/shared/memoizeByKey.ts +32 -0
  308. package/src/lib/shared/normalizeTarget.ts +10 -0
  309. package/src/lib/shared/online.ts +51 -0
  310. package/src/lib/shared/page.ts +30 -0
  311. package/src/lib/shared/pageSlot.ts +17 -0
  312. package/src/lib/shared/pageUrlForFile.ts +14 -0
  313. package/src/lib/shared/parseBoundedEnvInt.ts +20 -0
  314. package/src/lib/shared/parseDebugPatterns.ts +21 -0
  315. package/src/lib/shared/parseEnv.ts +30 -0
  316. package/src/lib/shared/parsePromptMarkdown.ts +35 -0
  317. package/src/lib/shared/parseRouteSegments.ts +22 -0
  318. package/src/lib/shared/parseTraceparent.ts +26 -0
  319. package/src/lib/shared/pending.ts +30 -0
  320. package/src/lib/shared/prepareRpcModule.ts +59 -0
  321. package/src/lib/shared/prepareSocketModule.ts +49 -0
  322. package/src/lib/shared/probeRegistries.ts +68 -0
  323. package/src/lib/shared/producerKey.ts +32 -0
  324. package/src/lib/shared/programNameForPackage.ts +14 -0
  325. package/src/lib/shared/promptNameForFile.ts +10 -0
  326. package/src/lib/shared/queryStringFromArgs.ts +27 -0
  327. package/src/lib/shared/randomHexId.ts +14 -0
  328. package/src/lib/shared/readEnvFile.ts +15 -0
  329. package/src/lib/shared/readLastConnection.ts +18 -0
  330. package/src/lib/shared/readPackageJson.ts +9 -0
  331. package/src/lib/shared/recordRemoteMeta.ts +5 -0
  332. package/src/lib/shared/refreshing.ts +31 -0
  333. package/src/lib/shared/remoteMetaStore.ts +16 -0
  334. package/src/lib/shared/requestScopeSlot.ts +15 -0
  335. package/src/lib/shared/resolveClientFlags.ts +20 -0
  336. package/src/lib/shared/responseErrorText.ts +9 -0
  337. package/src/lib/shared/rpcTimeoutSlot.ts +9 -0
  338. package/src/lib/shared/rpcUrlForFile.ts +19 -0
  339. package/src/lib/shared/runningAsStandaloneBinary.ts +13 -0
  340. package/src/lib/shared/selectorMatcher.ts +68 -0
  341. package/src/lib/shared/selectorPrefix.ts +39 -0
  342. package/src/lib/shared/serializeEnv.ts +18 -0
  343. package/src/lib/shared/setAppName.ts +5 -0
  344. package/src/lib/shared/setBaseResolver.ts +6 -0
  345. package/src/lib/shared/setCacheStoreResolver.ts +6 -0
  346. package/src/lib/shared/setGlobalCacheStoreResolver.ts +6 -0
  347. package/src/lib/shared/setPageResolver.ts +7 -0
  348. package/src/lib/shared/setRequestScopeResolver.ts +6 -0
  349. package/src/lib/shared/snippet.ts +25 -0
  350. package/src/lib/shared/socketNameForFile.ts +11 -0
  351. package/src/lib/shared/socketTapSlot.ts +12 -0
  352. package/src/lib/shared/sseErrorFrame.ts +29 -0
  353. package/src/lib/shared/streamResponse.ts +169 -0
  354. package/src/lib/shared/stripImport.ts +27 -0
  355. package/src/lib/shared/subscribableFromResponse.ts +51 -0
  356. package/src/lib/shared/tailProbeSlot.ts +16 -0
  357. package/src/lib/shared/toBunRoutePattern.ts +28 -0
  358. package/src/lib/shared/toScopeSet.ts +4 -0
  359. package/src/lib/shared/trace.ts +16 -0
  360. package/src/lib/shared/types/CacheEntry.ts +84 -0
  361. package/src/lib/shared/types/CacheInvalidation.ts +9 -0
  362. package/src/lib/shared/types/CacheOnContext.ts +25 -0
  363. package/src/lib/shared/types/CacheOptions.ts +39 -0
  364. package/src/lib/shared/types/CacheSelector.ts +17 -0
  365. package/src/lib/shared/types/CacheSnapshot.ts +16 -0
  366. package/src/lib/shared/types/CacheSnapshotEntry.ts +17 -0
  367. package/src/lib/shared/types/CacheStats.ts +13 -0
  368. package/src/lib/shared/types/CacheStore.ts +39 -0
  369. package/src/lib/shared/types/ChannelLog.ts +13 -0
  370. package/src/lib/shared/types/ClientFlags.ts +11 -0
  371. package/src/lib/shared/types/CompileTarget.ts +6 -0
  372. package/src/lib/shared/types/FrameworkLog.ts +13 -0
  373. package/src/lib/shared/types/HttpVerb.ts +1 -0
  374. package/src/lib/shared/types/LastConnection.ts +9 -0
  375. package/src/lib/shared/types/Log.ts +13 -0
  376. package/src/lib/shared/types/LogRecord.ts +42 -0
  377. package/src/lib/shared/types/LogVoice.ts +7 -0
  378. package/src/lib/shared/types/PageSnapshot.ts +14 -0
  379. package/src/lib/shared/types/PromptArgument.ts +12 -0
  380. package/src/lib/shared/types/RawRemoteFunction.ts +14 -0
  381. package/src/lib/shared/types/RemoteCallable.ts +12 -0
  382. package/src/lib/shared/types/RemoteFunction.ts +47 -0
  383. package/src/lib/shared/types/ReplayableMethod.ts +7 -0
  384. package/src/lib/shared/types/RequestScopeInfo.ts +16 -0
  385. package/src/lib/shared/types/RpcInvoker.ts +6 -0
  386. package/src/lib/shared/types/SocketChannel.ts +17 -0
  387. package/src/lib/shared/types/SocketSubCallbacks.ts +13 -0
  388. package/src/lib/shared/types/StandardSchemaV1.ts +56 -0
  389. package/src/lib/shared/types/StreamedResolution.ts +10 -0
  390. package/src/lib/shared/types/Subscribable.ts +26 -0
  391. package/src/lib/shared/types/TailHooks.ts +12 -0
  392. package/src/lib/shared/types/TailOptions.ts +10 -0
  393. package/src/lib/shared/types/TraceContext.ts +17 -0
  394. package/src/lib/shared/url.ts +118 -0
  395. package/src/lib/shared/withBase.ts +11 -0
  396. package/src/lib/shared/withBaseUrl.ts +17 -0
  397. package/src/lib/shared/withJsonSchema.ts +21 -0
  398. package/src/lib/shared/writeDts.ts +12 -0
  399. package/src/lib/shared/writeHealthDts.ts +36 -0
  400. package/src/lib/shared/writeLastConnection.ts +13 -0
  401. package/src/lib/shared/writePublicAssetsDts.ts +31 -0
  402. package/src/lib/shared/writeRoutesDts.ts +73 -0
  403. package/src/lib/shared/writeRpcDts.ts +49 -0
  404. package/src/lib/shared/writeTestRpcDts.ts +45 -0
  405. package/src/lib/shared/writeTestSocketsDts.ts +34 -0
  406. package/src/lib/test/assertAgentFrameConformance.ts +73 -0
  407. package/src/lib/test/createScriptedSurface.ts +45 -0
  408. package/src/lib/test/createTestApp.ts +203 -0
  409. package/src/lib/test/createTestSocketChannel.ts +142 -0
  410. package/src/lib/ui/README.md +86 -0
  411. package/src/lib/ui/compile/SSR_ESCAPE.ts +25 -0
  412. package/src/lib/ui/compile/UI_RUNTIME_IMPORTS.ts +36 -0
  413. package/src/lib/ui/compile/VOID_TAGS.ts +21 -0
  414. package/src/lib/ui/compile/abideUiPlugin.ts +65 -0
  415. package/src/lib/ui/compile/analyzeComponent.ts +117 -0
  416. package/src/lib/ui/compile/assetModulesFile.ts +32 -0
  417. package/src/lib/ui/compile/branchElements.ts +50 -0
  418. package/src/lib/ui/compile/collectAbideDiagnostics.ts +59 -0
  419. package/src/lib/ui/compile/compileComponent.ts +20 -0
  420. package/src/lib/ui/compile/compileModule.ts +116 -0
  421. package/src/lib/ui/compile/compileSSR.ts +36 -0
  422. package/src/lib/ui/compile/compileShadow.ts +352 -0
  423. package/src/lib/ui/compile/createShadowLanguageService.ts +197 -0
  424. package/src/lib/ui/compile/createShadowProgram.ts +96 -0
  425. package/src/lib/ui/compile/decodeHtmlEntities.ts +49 -0
  426. package/src/lib/ui/compile/desugarSignals.ts +133 -0
  427. package/src/lib/ui/compile/escapeHtml.ts +15 -0
  428. package/src/lib/ui/compile/generateBuild.ts +638 -0
  429. package/src/lib/ui/compile/generateSSR.ts +380 -0
  430. package/src/lib/ui/compile/groupBindParts.ts +28 -0
  431. package/src/lib/ui/compile/hoistCells.ts +120 -0
  432. package/src/lib/ui/compile/loadShadowTsConfig.ts +31 -0
  433. package/src/lib/ui/compile/lowerDocAccess.ts +202 -0
  434. package/src/lib/ui/compile/nearestProjectRoot.ts +16 -0
  435. package/src/lib/ui/compile/parseTemplate.ts +396 -0
  436. package/src/lib/ui/compile/partitionSlots.ts +36 -0
  437. package/src/lib/ui/compile/prepareNestedScript.ts +42 -0
  438. package/src/lib/ui/compile/remapShadowDiagnostic.ts +30 -0
  439. package/src/lib/ui/compile/renameSignalRefs.ts +85 -0
  440. package/src/lib/ui/compile/resolveAbideImports.ts +29 -0
  441. package/src/lib/ui/compile/scopeCss.ts +115 -0
  442. package/src/lib/ui/compile/shadowNaming.ts +11 -0
  443. package/src/lib/ui/compile/sourceToShadowOffset.ts +24 -0
  444. package/src/lib/ui/compile/staticAttrValue.ts +13 -0
  445. package/src/lib/ui/compile/stripEffects.ts +32 -0
  446. package/src/lib/ui/compile/types/AbideDiagnostic.ts +14 -0
  447. package/src/lib/ui/compile/types/AnalyzedComponent.ts +25 -0
  448. package/src/lib/ui/compile/types/CompiledShadow.ts +15 -0
  449. package/src/lib/ui/compile/types/TemplateAttr.ts +16 -0
  450. package/src/lib/ui/compile/types/TemplateNode.ts +78 -0
  451. package/src/lib/ui/compile/types/TextPart.ts +8 -0
  452. package/src/lib/ui/derived.ts +28 -0
  453. package/src/lib/ui/doc.ts +15 -0
  454. package/src/lib/ui/dom/appendSnippet.ts +34 -0
  455. package/src/lib/ui/dom/appendStatic.ts +27 -0
  456. package/src/lib/ui/dom/appendText.ts +114 -0
  457. package/src/lib/ui/dom/applyResolved.ts +72 -0
  458. package/src/lib/ui/dom/attach.ts +20 -0
  459. package/src/lib/ui/dom/attr.ts +19 -0
  460. package/src/lib/ui/dom/awaitBlock.ts +224 -0
  461. package/src/lib/ui/dom/cloneStatic.ts +52 -0
  462. package/src/lib/ui/dom/each.ts +115 -0
  463. package/src/lib/ui/dom/eachAsync.ts +153 -0
  464. package/src/lib/ui/dom/hydrate.ts +35 -0
  465. package/src/lib/ui/dom/mount.ts +29 -0
  466. package/src/lib/ui/dom/mountChild.ts +33 -0
  467. package/src/lib/ui/dom/on.ts +15 -0
  468. package/src/lib/ui/dom/openChild.ts +22 -0
  469. package/src/lib/ui/dom/openRoot.ts +20 -0
  470. package/src/lib/ui/dom/switchBlock.ts +75 -0
  471. package/src/lib/ui/dom/text.ts +20 -0
  472. package/src/lib/ui/dom/tryBlock.ts +112 -0
  473. package/src/lib/ui/dom/types/EachRow.ts +3 -0
  474. package/src/lib/ui/dom/types/SwitchCase.ts +6 -0
  475. package/src/lib/ui/dom/when.ts +73 -0
  476. package/src/lib/ui/effect.ts +16 -0
  477. package/src/lib/ui/installHotBridge.ts +73 -0
  478. package/src/lib/ui/matchRoute.ts +89 -0
  479. package/src/lib/ui/navigate.ts +17 -0
  480. package/src/lib/ui/probeNavigation.ts +33 -0
  481. package/src/lib/ui/remoteProxy.ts +97 -0
  482. package/src/lib/ui/renderChain.ts +50 -0
  483. package/src/lib/ui/renderToStream.ts +104 -0
  484. package/src/lib/ui/router.ts +286 -0
  485. package/src/lib/ui/runtime/OUTLET_TAG.ts +8 -0
  486. package/src/lib/ui/runtime/OWNER.ts +8 -0
  487. package/src/lib/ui/runtime/REACTIVE_CONTEXT.ts +14 -0
  488. package/src/lib/ui/runtime/RENDER.ts +23 -0
  489. package/src/lib/ui/runtime/RESUME.ts +16 -0
  490. package/src/lib/ui/runtime/applyPatchToTree.ts +41 -0
  491. package/src/lib/ui/runtime/claimChild.ts +10 -0
  492. package/src/lib/ui/runtime/clientPage.ts +16 -0
  493. package/src/lib/ui/runtime/createComputedNode.ts +16 -0
  494. package/src/lib/ui/runtime/createDoc.ts +177 -0
  495. package/src/lib/ui/runtime/createEffectNode.ts +58 -0
  496. package/src/lib/ui/runtime/createSignalNode.ts +16 -0
  497. package/src/lib/ui/runtime/detachLink.ts +21 -0
  498. package/src/lib/ui/runtime/endTracking.ts +24 -0
  499. package/src/lib/ui/runtime/enterRenderPass.ts +12 -0
  500. package/src/lib/ui/runtime/exitRenderPass.ts +7 -0
  501. package/src/lib/ui/runtime/firstOutlet.ts +22 -0
  502. package/src/lib/ui/runtime/flushEffects.ts +17 -0
  503. package/src/lib/ui/runtime/hotInstances.ts +10 -0
  504. package/src/lib/ui/runtime/hotReloadEnabled.ts +8 -0
  505. package/src/lib/ui/runtime/hotReplace.ts +25 -0
  506. package/src/lib/ui/runtime/nextBlockId.ts +11 -0
  507. package/src/lib/ui/runtime/pathExists.ts +23 -0
  508. package/src/lib/ui/runtime/readNode.ts +17 -0
  509. package/src/lib/ui/runtime/registerHotInstance.ts +23 -0
  510. package/src/lib/ui/runtime/runNode.ts +28 -0
  511. package/src/lib/ui/runtime/runtimePath.ts +9 -0
  512. package/src/lib/ui/runtime/scope.ts +24 -0
  513. package/src/lib/ui/runtime/toTeardown.ts +26 -0
  514. package/src/lib/ui/runtime/track.ts +58 -0
  515. package/src/lib/ui/runtime/trigger.ts +44 -0
  516. package/src/lib/ui/runtime/types/Cell.ts +5 -0
  517. package/src/lib/ui/runtime/types/Derived.ts +3 -0
  518. package/src/lib/ui/runtime/types/Doc.ts +19 -0
  519. package/src/lib/ui/runtime/types/EffectResult.ts +10 -0
  520. package/src/lib/ui/runtime/types/HotInstance.ts +14 -0
  521. package/src/lib/ui/runtime/types/NavVerdict.ts +9 -0
  522. package/src/lib/ui/runtime/types/Patch.ts +11 -0
  523. package/src/lib/ui/runtime/types/ReactiveLink.ts +21 -0
  524. package/src/lib/ui/runtime/types/ReactiveNode.ts +25 -0
  525. package/src/lib/ui/runtime/types/Route.ts +8 -0
  526. package/src/lib/ui/runtime/types/RouteLoader.ts +7 -0
  527. package/src/lib/ui/runtime/types/SsrRender.ts +22 -0
  528. package/src/lib/ui/runtime/types/State.ts +3 -0
  529. package/src/lib/ui/runtime/types/Teardown.ts +5 -0
  530. package/src/lib/ui/runtime/types/UiComponent.ts +16 -0
  531. package/src/lib/ui/runtime/types/UiProps.ts +15 -0
  532. package/src/lib/ui/runtime/unlinkDeps.ts +20 -0
  533. package/src/lib/ui/runtime/untrack.ts +20 -0
  534. package/src/lib/ui/runtime/valueAtPath.ts +18 -0
  535. package/src/lib/ui/runtime/writeNode.ts +16 -0
  536. package/src/lib/ui/socketChannel.ts +227 -0
  537. package/src/lib/ui/socketProxy.ts +25 -0
  538. package/src/lib/ui/startClient.ts +58 -0
  539. package/src/lib/ui/state.ts +25 -0
  540. package/src/lib/ui/tail.ts +324 -0
  541. package/src/lib/ui/types/Layouts.ts +9 -0
  542. package/src/lib/ui/types/Pages.ts +8 -0
  543. package/src/preload.ts +19 -0
  544. package/src/scaffold.ts +153 -0
  545. package/src/serverBuildPlugins.ts +19 -0
  546. package/src/serverEntry.ts +95 -0
  547. package/template/bunfig.toml +4 -0
  548. package/template/package.json +18 -0
  549. package/template/src/app.ts +28 -0
  550. package/template/src/bundle/icon.png +0 -0
  551. package/template/src/cli/banner.txt +3 -0
  552. package/template/src/cli/footer.txt +1 -0
  553. package/template/src/server/config.ts +17 -0
  554. package/template/src/server/rpc/getHello.ts +36 -0
  555. package/template/src/ui/Layout.abide +19 -0
  556. package/template/src/ui/app.css +21 -0
  557. package/template/src/ui/app.html +24 -0
  558. package/template/src/ui/pages/about/page.abide +9 -0
  559. package/template/src/ui/pages/page.abide +22 -0
  560. package/template/test/app.test.ts +30 -0
  561. package/template/tsconfig.json +18 -0
  562. package/tsconfig.app.json +17 -0
@@ -0,0 +1,147 @@
1
+ import { dirname } from 'node:path'
2
+ import { buildDisconnected } from './buildDisconnected.ts'
3
+ import { compile } from './compile.ts'
4
+ import { ensureWebviewLib } from './lib/bundle/ensureWebviewLib.ts'
5
+ import { infoPlist } from './lib/bundle/infoPlist.ts'
6
+ import { pngToIcns } from './lib/bundle/pngToIcns.ts'
7
+ import { serverBinaryFilename } from './lib/bundle/serverBinaryFilename.ts'
8
+ import { signMacApp } from './lib/bundle/signMacApp.ts'
9
+ import { webviewLibName } from './lib/bundle/webviewLibName.ts'
10
+ import { abideLog } from './lib/shared/abideLog.ts'
11
+ import { bundleLayout } from './lib/shared/bundleLayout.ts'
12
+ import { detectTarget } from './lib/shared/detectTarget.ts'
13
+ import { exitOnBuildFailure } from './lib/shared/exitOnBuildFailure.ts'
14
+ import { programNameForPackage } from './lib/shared/programNameForPackage.ts'
15
+ import { readPackageJson } from './lib/shared/readPackageJson.ts'
16
+ import { serverBuildPlugins } from './serverBuildPlugins.ts'
17
+
18
+ const APP_ENTRY = new URL('./appEntry.ts', import.meta.url).pathname
19
+ const WORKER_ENTRY = new URL('./controlServerWorker.ts', import.meta.url).pathname
20
+
21
+ /*
22
+ Assembles a movable, self-contained app bundle for the host platform —
23
+ no cross-compilation, and on macOS an ad-hoc seal so it launches on other
24
+ Macs (signMacApp). Three pieces travel together so the app runs on another
25
+ machine of the same OS with nothing installed:
26
+
27
+ - the standalone server binary (`compile()`, assets embedded)
28
+ - the launcher binary (appEntry — spawns the server, opens the webview)
29
+ - the native webview shared library
30
+
31
+ macOS gets a `.app` bundle (`Contents/MacOS/` + `Contents/Frameworks/` +
32
+ Info.plist); other platforms get a flat `<name>/` directory with the two
33
+ binaries and the lib side by side. The launcher finds both relatives at
34
+ runtime via resolveServerBinary / resolveWebviewLib.
35
+ */
36
+ export async function bundleApp({ cwd = process.cwd() }: { cwd?: string } = {}): Promise<string> {
37
+ const target = detectTarget()
38
+ const { name, version } = await readPackage(cwd)
39
+ const programName = programNameForPackage(name)
40
+
41
+ /*
42
+ Layout differs by OS: a macOS .app nests binaries under Contents/MacOS, the
43
+ lib under Contents/Frameworks, and data under Contents/Resources; elsewhere
44
+ everything sits flat in one directory. bundleLayout derives the rest from
45
+ binDir — the same source the boot readers resolve from — so build and runtime
46
+ agree on where the lib, resources, and shipped `.env` land.
47
+ */
48
+ const isMac = process.platform === 'darwin'
49
+ const bundleRoot = isMac ? `${cwd}/dist/${programName}.app` : `${cwd}/dist/${programName}`
50
+ const binDir = isMac ? `${bundleRoot}/Contents/MacOS` : bundleRoot
51
+ const { libDir, resourcesDir, envPath } = bundleLayout(binDir)
52
+
53
+ await Bun.$`rm -rf ${bundleRoot}`.quiet()
54
+ await Bun.$`mkdir -p ${binDir} ${libDir}`.quiet()
55
+
56
+ // 1. Server binary — self-contained, embeds the client assets. compile()
57
+ // runs the client build, which clears dist first, so it must precede the
58
+ // connect-screen build that writes into dist.
59
+ await compile({ cwd, target, outfile: `${binDir}/${serverBinaryFilename()}` })
60
+
61
+ /*
62
+ Opt-in: ship the project's `bundle.env` as the shipped `.env`, which the
63
+ server loads at boot (loadEnvFromBinaryDir) as its default config layer. A
64
+ dedicated file, never the working `.env` — a compiled bundle is extractable,
65
+ so only ship-safe defaults belong here; user-specific/secret values come from
66
+ the data-dir `.env` instead. Named outside Bun's `.env.*` autoload family on
67
+ purpose: it's a build input, not a runtime overlay, so `bun dev`/`bun start`
68
+ never pick it up. bundleLayout places it under Contents/Resources
69
+ in a macOS `.app` (sealed as a resource, so it survives codesign) and beside
70
+ the binaries otherwise. Skipped when absent.
71
+ */
72
+ const bundleEnv = Bun.file(`${cwd}/bundle.env`)
73
+ if (await bundleEnv.exists()) {
74
+ await Bun.$`mkdir -p ${dirname(envPath)}`.quiet()
75
+ await Bun.write(envPath, bundleEnv)
76
+ }
77
+
78
+ // 2. Connect screen — bake dist/bundle-disconnected.html before the launcher
79
+ // build, which inlines it via the abide:bundle-disconnected virtual.
80
+ await buildDisconnected({ cwd })
81
+
82
+ // 3. Launcher binary — named after the program so CFBundleExecutable matches.
83
+ const launcherSuffix = target.includes('windows') ? '.exe' : ''
84
+ const launcherPath = `${binDir}/${programName}${launcherSuffix}`
85
+ const launcherResult = await Bun.build({
86
+ entrypoints: [APP_ENTRY],
87
+ target: 'bun',
88
+ compile: { target, outfile: launcherPath },
89
+ plugins: serverBuildPlugins({ cwd }),
90
+ /*
91
+ Inject the worker's absolute path as a static literal. `new Worker()` is
92
+ embedded into the standalone binary only when its specifier is a build-time
93
+ literal, and a relative one would resolve against `cwd` (the consumer
94
+ project) rather than appEntry's directory — so the launcher passes the
95
+ absolute path through this define instead.
96
+ */
97
+ define: { __ABIDE_WORKER_ENTRY__: JSON.stringify(WORKER_ENTRY) },
98
+ })
99
+ exitOnBuildFailure(launcherResult)
100
+
101
+ // 4. Webview lib — built from the vendored source if needed, then copied
102
+ // beside the binaries (or into Frameworks on macOS) so the bundle is self-contained.
103
+ const libSource = await ensureWebviewLib(cwd)
104
+ await Bun.write(`${libDir}/${webviewLibName()}`, Bun.file(libSource))
105
+
106
+ /*
107
+ macOS-only: produce Contents/Resources/icon.icns from an optional project
108
+ icon, then write the Info.plist that makes the .app launchable from
109
+ Finder, wiring CFBundleIconFile when an icon was produced. A ready-made
110
+ src/bundle/icon.icns is used as-is; otherwise src/bundle/icon.png is
111
+ converted via sips + iconutil so authors don't need to make an .icns.
112
+ */
113
+ if (isMac) {
114
+ const icnsSource = `${cwd}/src/bundle/icon.icns`
115
+ const pngSource = `${cwd}/src/bundle/icon.png`
116
+ let hasIcon = false
117
+ if (await Bun.file(icnsSource).exists()) {
118
+ await Bun.$`mkdir -p ${resourcesDir}`.quiet()
119
+ await Bun.write(`${resourcesDir}/icon.icns`, Bun.file(icnsSource))
120
+ hasIcon = true
121
+ } else if (await Bun.file(pngSource).exists()) {
122
+ await Bun.$`mkdir -p ${resourcesDir}`.quiet()
123
+ hasIcon = await pngToIcns(pngSource, `${resourcesDir}/icon.icns`)
124
+ }
125
+ await Bun.write(
126
+ `${bundleRoot}/Contents/Info.plist`,
127
+ infoPlist({ name: programName, version, icon: hasIcon ? 'icon' : undefined }),
128
+ )
129
+
130
+ // Seal the finished bundle so it launches on other Macs — must run last,
131
+ // after every binary, the lib, and Info.plist are in place.
132
+ await signMacApp(bundleRoot, [
133
+ `${libDir}/${webviewLibName()}`,
134
+ `${binDir}/${serverBinaryFilename()}`,
135
+ launcherPath,
136
+ ])
137
+ }
138
+
139
+ abideLog.success(`bundled app: ${bundleRoot} (target: ${target})`)
140
+ return bundleRoot
141
+ }
142
+
143
+ // Reads name + version from package.json, with fallbacks when absent.
144
+ async function readPackage(cwd: string): Promise<{ name: string | undefined; version: string }> {
145
+ const pkg = (await readPackageJson(cwd)) as { name?: string; version?: string } | undefined
146
+ return { name: pkg?.name, version: pkg?.version ?? '0.0.0' }
147
+ }
@@ -0,0 +1,14 @@
1
+ // @ts-expect-error virtual module resolved by abideResolverPlugin
2
+ import Disconnected from './_virtual/bundle-disconnected-component.ts'
3
+
4
+ /*
5
+ Client entry for the bundle connect screen. Standalone — it mounts the
6
+ disconnected component (the user's src/bundle/disconnected.abide override or the
7
+ lib default, picked by the resolver) into #app, with no router or SSR hydration.
8
+ buildDisconnected bundles this into a single self-contained HTML file. A compiled
9
+ abide-ui component's default export is its mounter, so calling it mounts.
10
+ */
11
+ const target = document.getElementById('app')
12
+ if (target) {
13
+ Disconnected(target)
14
+ }
@@ -0,0 +1,77 @@
1
+ import { resolve } from 'node:path'
2
+ import ts from 'typescript'
3
+ import { collectAbideDiagnostics } from './lib/ui/compile/collectAbideDiagnostics.ts'
4
+ import { createShadowProgram } from './lib/ui/compile/createShadowProgram.ts'
5
+ import { nearestProjectRoot } from './lib/ui/compile/nearestProjectRoot.ts'
6
+ import type { AbideDiagnostic } from './lib/ui/compile/types/AbideDiagnostic.ts'
7
+
8
+ /*
9
+ Type-checks every `.abide` component in `cwd` through its shadow (ADR-0010) and
10
+ prints the diagnostics against the source files with a code frame — a
11
+ component type-check pass. Each component is grouped under its nearest tsconfig and
12
+ checked against that project's options, so a monorepo checked at its root reports
13
+ the same as each package checked on its own — and the same as the LSP. Returns
14
+ the error count so the CLI can set its exit code.
15
+ */
16
+ export async function checkAbide({ cwd }: { cwd: string }): Promise<number> {
17
+ const diagnostics = collectByProject(cwd)
18
+ const byFile = new Map<string, AbideDiagnostic[]>()
19
+ for (const diagnostic of diagnostics) {
20
+ const bucket = byFile.get(diagnostic.file) ?? []
21
+ bucket.push(diagnostic)
22
+ byFile.set(diagnostic.file, bucket)
23
+ }
24
+
25
+ for (const [file, fileDiagnostics] of byFile) {
26
+ const text = (await Bun.file(file).text()).replaceAll('\r\n', '\n')
27
+ for (const diagnostic of fileDiagnostics.toSorted((a, b) => a.start - b.start)) {
28
+ printDiagnostic(file, text, diagnostic)
29
+ }
30
+ }
31
+
32
+ const errors = diagnostics.filter(
33
+ (diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error,
34
+ ).length
35
+ const relative = byFile.size
36
+ console.log(
37
+ errors === 0
38
+ ? `\n[abide check] no type errors in ${relative} component${relative === 1 ? '' : 's'}`
39
+ : `\n[abide check] ${errors} error${errors === 1 ? '' : 's'} in ${relative} file${relative === 1 ? '' : 's'}`,
40
+ )
41
+ return errors
42
+ }
43
+
44
+ /* Groups every `.abide` under `cwd` by its nearest tsconfig and type-checks each
45
+ project's components against that project's options, then concatenates the
46
+ diagnostics. Imported components from another project resolve on demand through
47
+ the host, so the per-project root set stays each project's own files. */
48
+ function collectByProject(cwd: string): AbideDiagnostic[] {
49
+ const byProject = new Map<string, string[]>()
50
+ for (const relative of new Bun.Glob('**/*.abide').scanSync({ cwd, onlyFiles: true })) {
51
+ if (relative.includes('node_modules')) {
52
+ continue
53
+ }
54
+ const path = resolve(cwd, relative)
55
+ const root = nearestProjectRoot(path, cwd)
56
+ byProject.set(root, [...(byProject.get(root) ?? []), path])
57
+ }
58
+ return [...byProject].flatMap(([root, paths]) =>
59
+ collectAbideDiagnostics(createShadowProgram(root, paths)),
60
+ )
61
+ }
62
+
63
+ /* Renders one diagnostic as `path:line:col severity message` plus the offending
64
+ line and a caret underline spanning the mapped range. */
65
+ function printDiagnostic(file: string, text: string, diagnostic: AbideDiagnostic): void {
66
+ const before = text.slice(0, diagnostic.start)
67
+ const lineNumber = before.split('\n').length
68
+ const column = diagnostic.start - (before.lastIndexOf('\n') + 1)
69
+ const lineText = text.split('\n')[lineNumber - 1] ?? ''
70
+ const severity = diagnostic.category === ts.DiagnosticCategory.Error ? 'error' : 'warning'
71
+ const gutter = String(lineNumber)
72
+ console.log(`\n${file}:${lineNumber}:${column + 1} ${severity} ${diagnostic.message}`)
73
+ console.log(` ${gutter} | ${lineText}`)
74
+ console.log(
75
+ ` ${' '.repeat(gutter.length)} | ${' '.repeat(column)}${'^'.repeat(Math.max(1, diagnostic.length))}`,
76
+ )
77
+ }
@@ -0,0 +1,25 @@
1
+ // @ts-expect-error virtual module resolved by abideResolverPlugin
2
+ import { banner, footer } from './_virtual/cli-chrome.ts'
3
+ // @ts-expect-error virtual module resolved by abideResolverPlugin
4
+ import manifest from './_virtual/cli-manifest.ts'
5
+ // @ts-expect-error virtual module resolved by abideResolverPlugin
6
+ import programName from './_virtual/cli-name.ts'
7
+ import { runCli } from './lib/cli/runCli.ts'
8
+
9
+ /*
10
+ Standalone CLI binary entry. Compiled with `bun build --compile` into
11
+ `dist/cli` (or `dist/cli-thin/<platform>/` for cross-builds). The CLI is
12
+ a thin remote client — no handler code is bundled; it talks to a running
13
+ server over HTTP (ABIDE_APP_URL at runtime). The bundler emits:
14
+ - abide:cli-manifest — the per-rpc manifest (method, url, jsonSchema)
15
+ - abide:cli-name — the program name from package.json
16
+ - abide:cli-chrome — optional banner/footer text from src/cli/
17
+ */
18
+ const exitCode = await runCli({
19
+ programName,
20
+ manifest,
21
+ banner,
22
+ footer,
23
+ argv: process.argv.slice(2),
24
+ })
25
+ process.exit(exitCode)
@@ -0,0 +1,33 @@
1
+ import type { BunPlugin } from 'bun'
2
+ import { abideResolverPlugin } from './abideResolverPlugin.ts'
3
+ import { abideLog } from './lib/shared/abideLog.ts'
4
+ import { isModuleNotFound } from './lib/shared/isModuleNotFound.ts'
5
+ import { abideUiPlugin } from './lib/ui/compile/abideUiPlugin.ts'
6
+
7
+ /*
8
+ The client-target Bun.build plugin chain shared by the page bundle (build) and
9
+ the bundle connect screen (buildDisconnected): the abide-ui `.abide` loader,
10
+ abide's virtual-module resolver, and the optional Tailwind plugin. Tailwind is an
11
+ optional peer — a genuine "not installed" builds without it, but any other load
12
+ error surfaces (a plugin that loaded then threw on a real misconfig must not
13
+ silently ship unstyled). `tailwindWarning` names what each caller builds without
14
+ when Tailwind is absent.
15
+ */
16
+ export async function clientBuildPlugins({
17
+ cwd,
18
+ tailwindWarning,
19
+ }: {
20
+ cwd: string
21
+ tailwindWarning: string
22
+ }): Promise<BunPlugin[]> {
23
+ const plugins: BunPlugin[] = [abideUiPlugin, abideResolverPlugin({ cwd, target: 'client' })]
24
+ try {
25
+ plugins.push((await import('bun-plugin-tailwind')).default)
26
+ } catch (error) {
27
+ if (!isModuleNotFound(error)) {
28
+ throw error
29
+ }
30
+ abideLog.warn(tailwindWarning)
31
+ }
32
+ return plugins
33
+ }
@@ -0,0 +1,17 @@
1
+ // @ts-expect-error virtual module resolved by abideResolverPlugin
2
+ import { layouts } from './_virtual/layouts.ts'
3
+ // @ts-expect-error virtual module resolved by abideResolverPlugin
4
+ import { pages } from './_virtual/pages.ts'
5
+ import type { RouteLoader } from './lib/ui/runtime/types/RouteLoader.ts'
6
+ import { startClient } from './lib/ui/startClient.ts'
7
+
8
+ /*
9
+ The SSR client entry. The pages/layouts manifests are
10
+ `{ route: () => import(page.abide) }` / `{ dir: () => import(layout.abide) }`; hand
11
+ the loaders straight to abide-ui's startClient — the router imports each route's
12
+ chunk (and its layout chunks) only when first visited, so the initial load downloads
13
+ just the current route's chain (plus the entry), not every page up front. startClient
14
+ also seeds the cache from __SSR__, installs the base, and adopts the server-rendered
15
+ #app for the current route.
16
+ */
17
+ startClient(pages as Record<string, RouteLoader>, layouts as Record<string, RouteLoader>)
package/src/compile.ts ADDED
@@ -0,0 +1,63 @@
1
+ import { build } from './build.ts'
2
+ import { abideLog } from './lib/shared/abideLog.ts'
3
+ import { detectTarget } from './lib/shared/detectTarget.ts'
4
+ import { exeSuffix } from './lib/shared/exeSuffix.ts'
5
+ import { exitOnBuildFailure } from './lib/shared/exitOnBuildFailure.ts'
6
+ import type { CompileTarget } from './lib/shared/types/CompileTarget.ts'
7
+ import { serverBuildPlugins } from './serverBuildPlugins.ts'
8
+
9
+ const SERVER_ENTRY = new URL('./serverEntry.ts', import.meta.url).pathname
10
+
11
+ /*
12
+ Produces a standalone Bun executable for the server. Runs the client `build`
13
+ first so the resolver plugin can embed the gzip-compressed assets into
14
+ the binary, then invokes Bun.build in compile mode against the server
15
+ entry. Defaults
16
+ the target to the host platform and appends `.exe` for windows targets.
17
+ Returns the path of the emitted binary; exits the process on build failure.
18
+ */
19
+ // @readme plumbing
20
+ export async function compile({
21
+ cwd = process.cwd(),
22
+ target = detectTarget(),
23
+ outfile,
24
+ buildClient = true,
25
+ }: {
26
+ cwd?: string
27
+ target?: CompileTarget
28
+ outfile?: string
29
+ /*
30
+ Skip the client `build` (which clears dist). Set false when the caller already
31
+ built the platform-independent client once and is compiling several server
32
+ binaries against it — e.g. `abide cli` co-shipping a per-platform server beside
33
+ each CLI binary — so the shared `dist/_app` isn't wiped between targets.
34
+ */
35
+ buildClient?: boolean
36
+ } = {}): Promise<string> {
37
+ if (buildClient) {
38
+ await build({ cwd })
39
+ }
40
+
41
+ const outPath = outfile ?? `${cwd}/dist/app${exeSuffix(target)}`
42
+
43
+ const result = await Bun.build({
44
+ entrypoints: [SERVER_ENTRY],
45
+ target: 'bun',
46
+ format: 'esm',
47
+ minify: true,
48
+ /*
49
+ Bytecode embeds precompiled JS module metadata directly into the
50
+ standalone binary, dramatically cutting cold-start time for large
51
+ apps. Requires `target: 'bun'` + an explicit `format` because the
52
+ default for `bytecode` alone is CommonJS; we need ESM bytecode.
53
+ */
54
+ bytecode: true,
55
+ compile: { target, outfile: outPath },
56
+ plugins: serverBuildPlugins({ cwd, embedAssets: true }),
57
+ })
58
+
59
+ exitOnBuildFailure(result)
60
+
61
+ abideLog.success(`compiled standalone binary: ${outPath} (target: ${target})`)
62
+ return outPath
63
+ }