akanjs 2.2.4 → 2.2.6

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 (609) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/base/base.ts +1 -1
  3. package/base/primitiveRegistry.ts +6 -10
  4. package/base/types.ts +1 -4
  5. package/capacitor.base.config.ts +1 -1
  6. package/client/capacitor.ts +1 -1
  7. package/client/cookie.ts +2 -4
  8. package/client/createFont.ts +2 -2
  9. package/client/csrTypes.ts +2 -8
  10. package/client/makePageProto.tsx +4 -10
  11. package/client/router.ts +3 -8
  12. package/client/translator.ts +4 -12
  13. package/common/Logger.ts +1 -4
  14. package/common/formatNumber.ts +2 -5
  15. package/common/hmrPhase.ts +1 -1
  16. package/common/isValidDate.ts +0 -3
  17. package/constant/fieldInfo.ts +3 -3
  18. package/constant/purify.ts +1 -2
  19. package/constant/types.ts +0 -4
  20. package/constant/via.ts +6 -12
  21. package/document/databaseRegistry.ts +0 -8
  22. package/document/into.ts +0 -1
  23. package/fetch/client/fetchClient.ts +1 -6
  24. package/fetch/client/httpClient.ts +1 -2
  25. package/fetch/fetchType/appliedReturn.type.ts +0 -1
  26. package/fetch/fetchType/endpointFetch.type.ts +0 -3
  27. package/fetch/fetchType/sliceFetch.type.ts +0 -8
  28. package/fetch/requestStorage.ts +2 -10
  29. package/package.json +67 -24
  30. package/server/akanApp.ts +2 -5
  31. package/server/akanLib.ts +0 -1
  32. package/server/akanServer.ts +3 -4
  33. package/server/artifact/builderRpc.ts +2 -2
  34. package/server/artifact/ipcTypes.ts +0 -4
  35. package/server/decorators.ts +1 -1
  36. package/server/di/diLifecycle.ts +3 -6
  37. package/server/hmr/clientScript.ts +2 -20
  38. package/server/hmr/devHmrController.ts +0 -4
  39. package/server/processMetricsCollector.ts +1 -1
  40. package/server/resolver/database.resolver.ts +2 -2
  41. package/server/resolver/resolver.contract.fixture.ts +0 -1
  42. package/server/resolver/signal.resolver.ts +2 -10
  43. package/server/routing/apiRouter.ts +2 -4
  44. package/server/rscClient.tsx +1 -7
  45. package/server/rscWorkerHost.ts +11 -33
  46. package/server/ssrFromRscRenderer.tsx +3 -35
  47. package/server/types/react-server-dom-webpack.d.ts +1 -7
  48. package/server/vendor/react-dom-client.ts +1 -1
  49. package/server/vendor/react-dom.ts +2 -3
  50. package/server/vendor/react-jsx-dev-runtime.ts +1 -1
  51. package/server/vendor/react-jsx-runtime.ts +1 -1
  52. package/server/vendor/react-refresh-runtime.ts +2 -2
  53. package/server/vendor/react-server-dom-webpack-client-browser.ts +1 -1
  54. package/server/vendor/react.ts +2 -9
  55. package/server/vendor/scheduler.ts +2 -3
  56. package/server/webRouter.ts +2 -3
  57. package/service/adapt.ts +1 -5
  58. package/service/predefinedAdaptor/cache.adaptor.ts +1 -2
  59. package/service/predefinedAdaptor/database.adaptor.ts +2 -2
  60. package/service/predefinedAdaptor/solidSqlite.ts +1 -2
  61. package/service/predefinedAdaptor/websocket.adaptor.ts +3 -15
  62. package/service/serve.ts +3 -7
  63. package/signal/base.signal.ts +0 -1
  64. package/signal/endpointInfo.ts +0 -7
  65. package/signal/intercept.ts +0 -2
  66. package/signal/middleware.ts +1 -2
  67. package/signal/serverSignal.ts +1 -15
  68. package/signal/signalContext.ts +1 -1
  69. package/signal/signalRegistry.ts +0 -5
  70. package/signal/sliceInfo.ts +0 -3
  71. package/signal/trace.ts +0 -11
  72. package/signal/types.ts +2 -11
  73. package/store/action.ts +3 -5
  74. package/store/stateBuilder.ts +0 -2
  75. package/store/stateInfo.ts +1 -2
  76. package/store/types.ts +1 -1
  77. package/test/playwright.config.base.ts +5 -28
  78. package/test/playwright.pageAgent.ts +1 -1
  79. package/test/sampleOf.ts +1 -1
  80. package/test/testServer.ts +1 -1
  81. package/types/base/base.d.ts +53 -0
  82. package/types/base/baseEnv.d.ts +68 -0
  83. package/types/base/index.d.ts +6 -0
  84. package/types/base/primitiveRegistry.d.ts +134 -0
  85. package/types/base/symbols.d.ts +11 -0
  86. package/types/base/types.d.ts +68 -0
  87. package/types/base/utils.d.ts +4 -0
  88. package/types/base.d.ts +1 -0
  89. package/types/capacitor.base.config.d.ts +3 -0
  90. package/types/client/capacitor.d.ts +233 -0
  91. package/types/client/clientRuntime.d.ts +63 -0
  92. package/types/client/cookie.d.ts +33 -0
  93. package/types/client/createFont.d.ts +6 -0
  94. package/types/client/csrTypes.d.ts +262 -0
  95. package/types/client/decorators.d.ts +7 -0
  96. package/types/client/device.d.ts +41 -0
  97. package/types/client/fetch.d.ts +1 -0
  98. package/types/client/index.d.ts +14 -0
  99. package/types/client/locale.d.ts +5 -0
  100. package/types/client/makePageProto.d.ts +17002 -0
  101. package/types/client/router.d.ts +66 -0
  102. package/types/client/rscNavigation.d.ts +19 -0
  103. package/types/client/storage.d.ts +5 -0
  104. package/types/client/translator.d.ts +18 -0
  105. package/types/client/types.d.ts +145 -0
  106. package/types/client/useClient.d.ts +1 -0
  107. package/types/client.d.ts +1 -0
  108. package/types/common/Logger.d.ts +41 -0
  109. package/types/common/applyMixins.d.ts +3 -0
  110. package/types/common/capitalize.d.ts +2 -0
  111. package/types/common/deepObjectify.d.ts +4 -0
  112. package/types/common/fileUpload.d.ts +28 -0
  113. package/types/common/formatNumber.d.ts +1 -0
  114. package/types/common/formatPhone.d.ts +2 -0
  115. package/types/common/getAllPropertyDescriptors.d.ts +5 -0
  116. package/types/common/hmrPhase.d.ts +6 -0
  117. package/types/common/httpClient.d.ts +20 -0
  118. package/types/common/index.d.ts +29 -0
  119. package/types/common/isDayjs.d.ts +2 -0
  120. package/types/common/isEmail.d.ts +2 -0
  121. package/types/common/isPhoneNumber.d.ts +2 -0
  122. package/types/common/isQueryEqual.d.ts +1 -0
  123. package/types/common/isValidDate.d.ts +2 -0
  124. package/types/common/jwtDecode.d.ts +2 -0
  125. package/types/common/localeConfig.d.ts +11 -0
  126. package/types/common/lowerlize.d.ts +2 -0
  127. package/types/common/mergeVersion.d.ts +10 -0
  128. package/types/common/objectify.d.ts +1 -0
  129. package/types/common/pathGet.d.ts +1 -0
  130. package/types/common/pathSet.d.ts +3 -0
  131. package/types/common/randomPick.d.ts +1 -0
  132. package/types/common/randomPicks.d.ts +1 -0
  133. package/types/common/routeConvention.d.ts +35 -0
  134. package/types/common/sleep.d.ts +2 -0
  135. package/types/common/splitVersion.d.ts +11 -0
  136. package/types/common/subRoute.d.ts +7 -0
  137. package/types/common/types.d.ts +14 -0
  138. package/types/common.d.ts +1 -0
  139. package/types/constant/constantRegistry.d.ts +89 -0
  140. package/types/constant/crystalize.d.ts +4 -0
  141. package/types/constant/deserialize.d.ts +7 -0
  142. package/types/constant/fieldInfo.d.ts +153 -0
  143. package/types/constant/getDefault.d.ts +3 -0
  144. package/types/constant/immerify.d.ts +2 -0
  145. package/types/constant/index.d.ts +10 -0
  146. package/types/constant/purify.d.ts +12 -0
  147. package/types/constant/serialize.d.ts +11 -0
  148. package/types/constant/types.d.ts +77 -0
  149. package/types/constant/via.d.ts +52 -0
  150. package/types/constant.d.ts +1 -0
  151. package/types/dictionary/base.dictionary.d.ts +1 -0
  152. package/types/dictionary/dictInfo.d.ts +206 -0
  153. package/types/dictionary/dictionary.d.ts +11 -0
  154. package/types/dictionary/index.d.ts +4 -0
  155. package/types/dictionary/locale.d.ts +128 -0
  156. package/types/dictionary/trans.d.ts +82 -0
  157. package/types/dictionary.d.ts +1 -0
  158. package/types/document/by.d.ts +20 -0
  159. package/types/document/dataLoader.d.ts +36 -0
  160. package/types/document/database.d.ts +96 -0
  161. package/types/document/databaseRegistry.d.ts +36 -0
  162. package/types/document/documentQuery.d.ts +105 -0
  163. package/types/document/documentSchema.d.ts +33 -0
  164. package/types/document/filterMeta.d.ts +84 -0
  165. package/types/document/index.d.ts +11 -0
  166. package/types/document/into.d.ts +65 -0
  167. package/types/document/loaderInfo.d.ts +35 -0
  168. package/types/document/schema.d.ts +5 -0
  169. package/types/document/types.d.ts +36 -0
  170. package/types/document.d.ts +1 -0
  171. package/types/fetch/client/fetchClient.d.ts +78 -0
  172. package/types/fetch/client/httpClient.d.ts +39 -0
  173. package/types/fetch/client/index.d.ts +3 -0
  174. package/types/fetch/client/wsClient.d.ts +37 -0
  175. package/types/fetch/client.d.ts +1 -0
  176. package/types/fetch/fetchType/appliedReturn.type.d.ts +67 -0
  177. package/types/fetch/fetchType/buildFetch.type.d.ts +11 -0
  178. package/types/fetch/fetchType/clientSignal.type.d.ts +16 -0
  179. package/types/fetch/fetchType/endpointFetch.type.d.ts +29 -0
  180. package/types/fetch/fetchType/index.d.ts +5 -0
  181. package/types/fetch/fetchType/sliceFetch.type.d.ts +76 -0
  182. package/types/fetch/fetchType.d.ts +1 -0
  183. package/types/fetch/index.d.ts +4 -0
  184. package/types/fetch/requestStorage.d.ts +29 -0
  185. package/types/fetch/serializer/fetch.serializer.d.ts +14 -0
  186. package/types/fetch/serializer/index.d.ts +1 -0
  187. package/types/fetch/serializer.d.ts +1 -0
  188. package/types/fetch/types.d.ts +19 -0
  189. package/types/fetch.d.ts +1 -0
  190. package/types/index.d.ts +213 -0
  191. package/types/server/akanApp.d.ts +17 -0
  192. package/types/server/akanAppHeaders.d.ts +1 -0
  193. package/types/server/akanLib.d.ts +33 -0
  194. package/types/server/akanOption.d.ts +15 -0
  195. package/types/server/akanServer.d.ts +47 -0
  196. package/types/server/artifact/builderRpc.d.ts +42 -0
  197. package/types/server/artifact/index.d.ts +6 -0
  198. package/types/server/artifact/ipcTypes.d.ts +73 -0
  199. package/types/server/artifact/manifestTypes.d.ts +16 -0
  200. package/types/server/artifact/routeClientCache.d.ts +45 -0
  201. package/types/server/artifact/routeSeedIndexStore.d.ts +43 -0
  202. package/types/server/artifact/routesManifestStore.d.ts +16 -0
  203. package/types/server/artifact.d.ts +1 -0
  204. package/types/server/decorators.d.ts +6 -0
  205. package/types/server/di/diLifecycle.d.ts +45 -0
  206. package/types/server/di/index.d.ts +4 -0
  207. package/types/server/di/predefinedAdaptor.d.ts +33 -0
  208. package/types/server/di/resolveAdaptorHierarchy.d.ts +21 -0
  209. package/types/server/di/resolveHierarchy.d.ts +11 -0
  210. package/types/server/di/resolveServiceHierarchy.d.ts +13 -0
  211. package/types/server/di/utils.d.ts +14 -0
  212. package/types/server/di.d.ts +1 -0
  213. package/types/server/hmr/changeBatch.d.ts +13 -0
  214. package/types/server/hmr/clientScript.d.ts +1 -0
  215. package/types/server/hmr/devHmrController.d.ts +24 -0
  216. package/types/server/hmr/index.d.ts +4 -0
  217. package/types/server/hmr/wsHub.d.ts +45 -0
  218. package/types/server/hmr.d.ts +1 -0
  219. package/types/server/imageOptimizer.d.ts +12 -0
  220. package/types/server/imageOptimizerError.d.ts +4 -0
  221. package/types/server/index.d.ts +14 -0
  222. package/types/server/lifecycle/shutdownManager.d.ts +13 -0
  223. package/types/server/logging/rotatingLogWriter.d.ts +20 -0
  224. package/types/server/processMetricsCollector.d.ts +10 -0
  225. package/types/server/proxy/akanResponse.d.ts +7 -0
  226. package/types/server/proxy/bunRequestFields.d.ts +1 -0
  227. package/types/server/proxy/hostBasePathWebProxy.d.ts +6 -0
  228. package/types/server/proxy/index.d.ts +6 -0
  229. package/types/server/proxy/localeWebProxy.d.ts +5 -0
  230. package/types/server/proxy/types.d.ts +37 -0
  231. package/types/server/proxy/webProxyRunner.d.ts +7 -0
  232. package/types/server/proxy.d.ts +1 -0
  233. package/types/server/resolver/database.resolver.d.ts +6 -0
  234. package/types/server/resolver/index.d.ts +3 -0
  235. package/types/server/resolver/service.resolver.d.ts +7 -0
  236. package/types/server/resolver/signal.resolver.d.ts +29 -0
  237. package/types/server/resolver.d.ts +1 -0
  238. package/types/server/robots.d.ts +1 -0
  239. package/types/server/routeElementComposer.d.ts +41 -0
  240. package/types/server/routeTreeBuilder.d.ts +28 -0
  241. package/types/server/routing/apiRouter.d.ts +61 -0
  242. package/types/server/rscClient.d.ts +15 -0
  243. package/types/server/rscWorker.d.ts +3 -0
  244. package/types/server/rscWorkerHost.d.ts +83 -0
  245. package/types/server/sitemap.d.ts +13 -0
  246. package/types/server/ssrFromRscRenderer.d.ts +6 -0
  247. package/types/server/ssrTypes.d.ts +47 -0
  248. package/types/server/systemPages.d.ts +27 -0
  249. package/types/server/types/react-server-dom-webpack.d.ts +91 -0
  250. package/types/server/types.d.ts +67 -0
  251. package/types/server/vendor/akanjs-base.d.ts +1 -0
  252. package/types/server/vendor/akanjs-common.d.ts +1 -0
  253. package/types/server/vendor/akanjs-constant.d.ts +1 -0
  254. package/types/server/vendor/akanjs-store.d.ts +1 -0
  255. package/types/server/vendor/react-dom-client.d.ts +3 -0
  256. package/types/server/vendor/react-dom.d.ts +3 -0
  257. package/types/server/vendor/react-jsx-dev-runtime.d.ts +3 -0
  258. package/types/server/vendor/react-jsx-runtime.d.ts +3 -0
  259. package/types/server/vendor/react-refresh-runtime.d.ts +3 -0
  260. package/types/server/vendor/react-server-dom-webpack-client-browser.d.ts +3 -0
  261. package/types/server/vendor/react.d.ts +11 -0
  262. package/types/server/vendor/scheduler.d.ts +3 -0
  263. package/types/server/webRouter.d.ts +44 -0
  264. package/types/server.d.ts +1 -0
  265. package/types/service/adapt.d.ts +15 -0
  266. package/types/service/base.service.d.ts +18 -0
  267. package/types/service/index.d.ts +10 -0
  268. package/types/service/injectInfo.d.ts +102 -0
  269. package/types/service/ipcTypes.d.ts +194 -0
  270. package/types/service/predefinedAdaptor/cache.adaptor.d.ts +46 -0
  271. package/types/service/predefinedAdaptor/compress.adaptor.d.ts +22 -0
  272. package/types/service/predefinedAdaptor/database.adaptor.d.ts +329 -0
  273. package/types/service/predefinedAdaptor/index.d.ts +13 -0
  274. package/types/service/predefinedAdaptor/logging.adaptor.d.ts +20 -0
  275. package/types/service/predefinedAdaptor/queue.adaptor.d.ts +22 -0
  276. package/types/service/predefinedAdaptor/role.adaptor.d.ts +17 -0
  277. package/types/service/predefinedAdaptor/schedule.adaptor.d.ts +60 -0
  278. package/types/service/predefinedAdaptor/solidCache.adaptor.d.ts +25 -0
  279. package/types/service/predefinedAdaptor/solidPubsub.adaptor.d.ts +20 -0
  280. package/types/service/predefinedAdaptor/solidQueue.adaptor.d.ts +19 -0
  281. package/types/service/predefinedAdaptor/solidSqlite.d.ts +24 -0
  282. package/types/service/predefinedAdaptor/sqlitePath.d.ts +9 -0
  283. package/types/service/predefinedAdaptor/storage.adaptor.d.ts +80 -0
  284. package/types/service/predefinedAdaptor/websocket.adaptor.d.ts +49 -0
  285. package/types/service/predefinedAdaptor.d.ts +1 -0
  286. package/types/service/serve.d.ts +31 -0
  287. package/types/service/serviceModule.d.ts +50 -0
  288. package/types/service/serviceRegistry.d.ts +9 -0
  289. package/types/service/types.d.ts +55 -0
  290. package/types/service.d.ts +1 -0
  291. package/types/signal/base.signal.d.ts +41 -0
  292. package/types/signal/endpoint.d.ts +28 -0
  293. package/types/signal/endpointInfo.d.ts +77 -0
  294. package/types/signal/exception.d.ts +54786 -0
  295. package/types/signal/guard.d.ts +10 -0
  296. package/types/signal/guards.d.ts +10 -0
  297. package/types/signal/index.d.ts +19 -0
  298. package/types/signal/intercept.d.ts +17 -0
  299. package/types/signal/internal.d.ts +18 -0
  300. package/types/signal/internalArg.d.ts +31 -0
  301. package/types/signal/internalInfo.d.ts +45 -0
  302. package/types/signal/middleware.d.ts +51 -0
  303. package/types/signal/serializer/fetch.serializer.d.ts +14 -0
  304. package/types/signal/serializer/index.d.ts +1 -0
  305. package/types/signal/serializer.d.ts +1 -0
  306. package/types/signal/serverSignal.d.ts +36 -0
  307. package/types/signal/signalContext.d.ts +96 -0
  308. package/types/signal/signalRegistry.d.ts +49 -0
  309. package/types/signal/slice.d.ts +42 -0
  310. package/types/signal/sliceInfo.d.ts +51 -0
  311. package/types/signal/trace.d.ts +97 -0
  312. package/types/signal/types.d.ts +142 -0
  313. package/types/signal.d.ts +1 -0
  314. package/types/store/action.d.ts +145 -0
  315. package/types/store/baseSt.d.ts +412 -0
  316. package/types/store/hooks.d.ts +1 -0
  317. package/types/store/index.d.ts +8 -0
  318. package/types/store/rootStore.d.ts +22 -0
  319. package/types/store/state.d.ts +91 -0
  320. package/types/store/stateBuilder.d.ts +141 -0
  321. package/types/store/stateInfo.d.ts +23 -0
  322. package/types/store/store.d.ts +36 -0
  323. package/types/store/storeInstance.d.ts +38 -0
  324. package/types/store/storeRegistry.d.ts +13 -0
  325. package/types/store/types.d.ts +42 -0
  326. package/types/store/withSelector.d.ts +42 -0
  327. package/types/store.d.ts +1 -0
  328. package/types/test/index.d.ts +4 -0
  329. package/types/test/playwright.config.base.d.ts +9 -0
  330. package/types/test/playwright.pageAgent.d.ts +12 -0
  331. package/types/test/sample.d.ts +15 -0
  332. package/types/test/sampleOf.d.ts +5 -0
  333. package/types/test/signalTest.preload.d.ts +1 -0
  334. package/types/test/signalTestRuntime.d.ts +29 -0
  335. package/types/test/testServer.d.ts +26 -0
  336. package/types/test.d.ts +1 -0
  337. package/types/ui/BottomSheet.d.ts +13 -0
  338. package/types/ui/Button.d.ts +11 -0
  339. package/types/ui/ClientSide.d.ts +8 -0
  340. package/types/ui/Clipboard.d.ts +7 -0
  341. package/types/ui/Constant/Doc.d.ts +29 -0
  342. package/types/ui/Constant/Mermaid.d.ts +8 -0
  343. package/types/ui/Constant/index.d.ts +6 -0
  344. package/types/ui/Constant/schemaDoc.d.ts +84 -0
  345. package/types/ui/Constant.d.ts +1 -0
  346. package/types/ui/Copy.d.ts +10 -0
  347. package/types/ui/CsrImage.d.ts +18 -0
  348. package/types/ui/Data/CardList.d.ts +36 -0
  349. package/types/ui/Data/Dashboard.d.ts +11 -0
  350. package/types/ui/Data/Insight.d.ts +9 -0
  351. package/types/ui/Data/Item.d.ts +75 -0
  352. package/types/ui/Data/ListContainer.d.ts +49 -0
  353. package/types/ui/Data/Pagination.d.ts +9 -0
  354. package/types/ui/Data/QueryMaker.d.ts +8 -0
  355. package/types/ui/Data/TableList.d.ts +26 -0
  356. package/types/ui/Data/index.d.ts +9 -0
  357. package/types/ui/Data/index_.d.ts +8 -0
  358. package/types/ui/Data.d.ts +1 -0
  359. package/types/ui/DatePicker.d.ts +36 -0
  360. package/types/ui/Dialog/Action.d.ts +5 -0
  361. package/types/ui/Dialog/Close.d.ts +6 -0
  362. package/types/ui/Dialog/Content.d.ts +6 -0
  363. package/types/ui/Dialog/Modal.d.ts +9 -0
  364. package/types/ui/Dialog/Provider.d.ts +11 -0
  365. package/types/ui/Dialog/Title.d.ts +5 -0
  366. package/types/ui/Dialog/Trigger.d.ts +6 -0
  367. package/types/ui/Dialog/context.d.ts +10 -0
  368. package/types/ui/Dialog/index.d.ts +9 -0
  369. package/types/ui/Dialog.d.ts +1 -0
  370. package/types/ui/DragAction.d.ts +24 -0
  371. package/types/ui/DraggableList.d.ts +31 -0
  372. package/types/ui/Dropdown.d.ts +14 -0
  373. package/types/ui/Empty.d.ts +12 -0
  374. package/types/ui/Field.d.ts +411 -0
  375. package/types/ui/FontFace.d.ts +6 -0
  376. package/types/ui/Image.d.ts +49 -0
  377. package/types/ui/InfiniteScroll.d.ts +10 -0
  378. package/types/ui/Input.d.ts +95 -0
  379. package/types/ui/KeyboardAvoiding.d.ts +8 -0
  380. package/types/ui/Layout/BottomAction.d.ts +6 -0
  381. package/types/ui/Layout/BottomInset.d.ts +7 -0
  382. package/types/ui/Layout/BottomTab.d.ts +14 -0
  383. package/types/ui/Layout/Header.d.ts +8 -0
  384. package/types/ui/Layout/LeftSider.d.ts +9 -0
  385. package/types/ui/Layout/Navbar.d.ts +11 -0
  386. package/types/ui/Layout/RightSider.d.ts +10 -0
  387. package/types/ui/Layout/Sider.d.ts +7 -0
  388. package/types/ui/Layout/Template.d.ts +7 -0
  389. package/types/ui/Layout/TopLeftAction.d.ts +6 -0
  390. package/types/ui/Layout/Unit.d.ts +9 -0
  391. package/types/ui/Layout/View.d.ts +8 -0
  392. package/types/ui/Layout/Zone.d.ts +6 -0
  393. package/types/ui/Layout/index.d.ts +14 -0
  394. package/types/ui/Layout.d.ts +1 -0
  395. package/types/ui/Link/Back.d.ts +7 -0
  396. package/types/ui/Link/Close.d.ts +7 -0
  397. package/types/ui/Link/CsrLink.d.ts +2 -0
  398. package/types/ui/Link/Lang.d.ts +8 -0
  399. package/types/ui/Link/SsrLink.d.ts +2 -0
  400. package/types/ui/Link/index.d.ts +10 -0
  401. package/types/ui/Link/types.d.ts +42 -0
  402. package/types/ui/Link.d.ts +1 -0
  403. package/types/ui/Load/Edit.d.ts +4 -0
  404. package/types/ui/Load/Edit_Client.d.ts +27 -0
  405. package/types/ui/Load/Page.d.ts +15 -0
  406. package/types/ui/Load/PageCSR.d.ts +3 -0
  407. package/types/ui/Load/Pagination.d.ts +8 -0
  408. package/types/ui/Load/Units.d.ts +30 -0
  409. package/types/ui/Load/View.d.ts +22 -0
  410. package/types/ui/Load/index.d.ts +8 -0
  411. package/types/ui/Load/index_.d.ts +3 -0
  412. package/types/ui/Load.d.ts +1 -0
  413. package/types/ui/Loading/Area.d.ts +1 -0
  414. package/types/ui/Loading/Button.d.ts +7 -0
  415. package/types/ui/Loading/Input.d.ts +7 -0
  416. package/types/ui/Loading/ProgressBar.d.ts +6 -0
  417. package/types/ui/Loading/Skeleton.d.ts +7 -0
  418. package/types/ui/Loading/Spin.d.ts +7 -0
  419. package/types/ui/Loading/index.d.ts +8 -0
  420. package/types/ui/Loading.d.ts +1 -0
  421. package/types/ui/Menu.d.ts +26 -0
  422. package/types/ui/Modal.d.ts +19 -0
  423. package/types/ui/Model/AdminPanel.d.ts +31 -0
  424. package/types/ui/Model/Edit.d.ts +16 -0
  425. package/types/ui/Model/EditModal.d.ts +52 -0
  426. package/types/ui/Model/EditWrapper.d.ts +13 -0
  427. package/types/ui/Model/LoadInit.d.ts +10 -0
  428. package/types/ui/Model/New.d.ts +16 -0
  429. package/types/ui/Model/NewWrapper.d.ts +13 -0
  430. package/types/ui/Model/NewWrapper_Client.d.ts +13 -0
  431. package/types/ui/Model/Remove.d.ts +13 -0
  432. package/types/ui/Model/RemoveWrapper.d.ts +12 -0
  433. package/types/ui/Model/SureToRemove.d.ts +11 -0
  434. package/types/ui/Model/View.d.ts +19 -0
  435. package/types/ui/Model/ViewEditModal.d.ts +12 -0
  436. package/types/ui/Model/ViewModal.d.ts +14 -0
  437. package/types/ui/Model/ViewWrapper.d.ts +12 -0
  438. package/types/ui/Model/index.d.ts +16 -0
  439. package/types/ui/Model/index_.d.ts +14 -0
  440. package/types/ui/Model.d.ts +1 -0
  441. package/types/ui/More.d.ts +12 -0
  442. package/types/ui/ObjectId.d.ts +5 -0
  443. package/types/ui/Pagination.d.ts +20 -0
  444. package/types/ui/Popconfirm.d.ts +28 -0
  445. package/types/ui/Portal.d.ts +6 -0
  446. package/types/ui/Radio.d.ts +19 -0
  447. package/types/ui/RecentTime.d.ts +12 -0
  448. package/types/ui/Refresh.d.ts +7 -0
  449. package/types/ui/ScreenNavigator.d.ts +18 -0
  450. package/types/ui/Select.d.ts +43 -0
  451. package/types/ui/Signal/Arg.d.ts +78 -0
  452. package/types/ui/Signal/Doc.d.ts +33 -0
  453. package/types/ui/Signal/Listener.d.ts +9 -0
  454. package/types/ui/Signal/Message.d.ts +23 -0
  455. package/types/ui/Signal/Object.d.ts +20 -0
  456. package/types/ui/Signal/PubSub.d.ts +24 -0
  457. package/types/ui/Signal/Request.d.ts +8 -0
  458. package/types/ui/Signal/Response.d.ts +14 -0
  459. package/types/ui/Signal/RestApi.d.ts +40 -0
  460. package/types/ui/Signal/WebSocket.d.ts +11 -0
  461. package/types/ui/Signal/index.d.ts +18 -0
  462. package/types/ui/Signal/makeExample.d.ts +4 -0
  463. package/types/ui/Signal/style.d.ts +15 -0
  464. package/types/ui/Signal.d.ts +1 -0
  465. package/types/ui/System/CSR.d.ts +32 -0
  466. package/types/ui/System/Client.d.ts +47 -0
  467. package/types/ui/System/Common.d.ts +47 -0
  468. package/types/ui/System/DevModeToggle.d.ts +1 -0
  469. package/types/ui/System/Gtag.d.ts +4 -0
  470. package/types/ui/System/Messages.d.ts +1 -0
  471. package/types/ui/System/Reconnect.d.ts +1 -0
  472. package/types/ui/System/Root.d.ts +6 -0
  473. package/types/ui/System/SSR.d.ts +24 -0
  474. package/types/ui/System/SelectLanguage.d.ts +5 -0
  475. package/types/ui/System/ThemeToggle.d.ts +4 -0
  476. package/types/ui/System/index.d.ts +12 -0
  477. package/types/ui/System.d.ts +1 -0
  478. package/types/ui/Tab/Menu.d.ts +12 -0
  479. package/types/ui/Tab/Menus.d.ts +6 -0
  480. package/types/ui/Tab/Panel.d.ts +8 -0
  481. package/types/ui/Tab/Provider.d.ts +10 -0
  482. package/types/ui/Tab/context.d.ts +9 -0
  483. package/types/ui/Tab/index.d.ts +7 -0
  484. package/types/ui/Tab.d.ts +1 -0
  485. package/types/ui/Table.d.ts +41 -0
  486. package/types/ui/ToggleSelect.d.ts +33 -0
  487. package/types/ui/Unauthorized.d.ts +9 -0
  488. package/types/ui/animated.d.ts +5 -0
  489. package/types/ui/fontCss.d.ts +11 -0
  490. package/types/ui/index.d.ts +44 -0
  491. package/types/ui.d.ts +1 -0
  492. package/types/webkit/bootCsr.d.ts +16 -0
  493. package/types/webkit/createRobotPage.d.ts +15 -0
  494. package/types/webkit/createSitemapPage.d.ts +4 -0
  495. package/types/webkit/index.d.ts +17 -0
  496. package/types/webkit/lazy.d.ts +11 -0
  497. package/types/webkit/types.d.ts +7 -0
  498. package/types/webkit/useCamera.d.ts +19 -0
  499. package/types/webkit/useCodepush.d.ts +16 -0
  500. package/types/webkit/useContact.d.ts +11 -0
  501. package/types/webkit/useCsrValues.d.ts +30 -0
  502. package/types/webkit/useDebounce.d.ts +2 -0
  503. package/types/webkit/useFetch.d.ts +18 -0
  504. package/types/webkit/useGeoLocation.d.ts +8 -0
  505. package/types/webkit/useHistory.d.ts +23 -0
  506. package/types/webkit/useInterval.d.ts +2 -0
  507. package/types/webkit/useLocation.d.ts +8 -0
  508. package/types/webkit/usePurchase.d.ts +19 -0
  509. package/types/webkit/usePushNoti.d.ts +7 -0
  510. package/types/webkit/useThrottle.d.ts +2 -0
  511. package/types/webkit.d.ts +1 -0
  512. package/ui/BottomSheet.tsx +1 -1
  513. package/ui/Clipboard.tsx +1 -1
  514. package/ui/CsrImage.tsx +3 -14
  515. package/ui/Data/ListContainer.tsx +1 -1
  516. package/ui/Data/Pagination.tsx +1 -1
  517. package/ui/Data/QueryMaker.tsx +0 -339
  518. package/ui/Data/index.ts +0 -1
  519. package/ui/DatePicker.tsx +1 -95
  520. package/ui/Dialog/Modal.tsx +1 -1
  521. package/ui/DraggableList.tsx +5 -5
  522. package/ui/Field.tsx +2 -3
  523. package/ui/Image.tsx +2 -3
  524. package/ui/InfiniteScroll.tsx +0 -1
  525. package/ui/Input.tsx +1 -8
  526. package/ui/Layout/BottomTab.tsx +2 -2
  527. package/ui/Link/SsrLink.tsx +1 -2
  528. package/ui/Load/Page.tsx +1 -1
  529. package/ui/Load/PageCSR.tsx +0 -1
  530. package/ui/Load/Units.tsx +1 -2
  531. package/ui/Load/View.tsx +1 -2
  532. package/ui/Menu.tsx +5 -8
  533. package/ui/Model/EditModal.tsx +2 -5
  534. package/ui/Popconfirm.tsx +2 -4
  535. package/ui/ScreenNavigator.tsx +2 -3
  536. package/ui/Signal/Message.tsx +2 -3
  537. package/ui/Signal/PubSub.tsx +0 -2
  538. package/ui/Signal/Response.tsx +1 -1
  539. package/ui/Signal/WebSocket.tsx +2 -11
  540. package/ui/System/Client.tsx +7 -41
  541. package/ui/System/Gtag.tsx +2 -5
  542. package/ui/System/Messages.tsx +2 -2
  543. package/ui/System/Reconnect.tsx +5 -6
  544. package/ui/System/Root.tsx +0 -1
  545. package/ui/System/SSR.tsx +1 -7
  546. package/ui/ToggleSelect.tsx +3 -8
  547. package/ui/Unauthorized.tsx +1 -1
  548. package/webkit/bootCsr.tsx +3 -6
  549. package/webkit/lazy.tsx +1 -8
  550. package/webkit/useCamera.tsx +0 -1
  551. package/webkit/useCodepush.tsx +4 -9
  552. package/webkit/useContact.tsx +0 -1
  553. package/webkit/useCsrValues.ts +6 -10
  554. package/webkit/useDebounce.ts +2 -2
  555. package/webkit/usePurchase.tsx +5 -9
  556. package/webkit/usePushNoti.tsx +0 -1
  557. package/base/base.test.ts +0 -135
  558. package/base/baseEnv.test.ts +0 -146
  559. package/base/primitiveRegistry.test.ts +0 -127
  560. package/base/symbols.test.ts +0 -29
  561. package/base/utils.test.ts +0 -30
  562. package/build.ts +0 -318
  563. package/capacitor.base.config.test.ts +0 -83
  564. package/client/client.auth-storage.test.ts +0 -210
  565. package/client/client.decorators.test.ts +0 -74
  566. package/client/client.device.test.ts +0 -181
  567. package/client/client.page.test.tsx +0 -175
  568. package/client/client.pure.test.ts +0 -146
  569. package/client/client.router.test.ts +0 -290
  570. package/common/Logger.test.ts +0 -45
  571. package/common/formatAndValidation.test.ts +0 -61
  572. package/common/httpClient.test.ts +0 -91
  573. package/common/objectPath.test.ts +0 -108
  574. package/common/routeConvention.test.ts +0 -132
  575. package/common/runtimeConfig.test.ts +0 -84
  576. package/constant/constant.test.ts +0 -374
  577. package/dictionary/dictionary.test.ts +0 -352
  578. package/document/document.test.ts +0 -698
  579. package/fetch/fetch.test.ts +0 -838
  580. package/server/akanApp.test.ts +0 -130
  581. package/server/akanServer.test.ts +0 -157
  582. package/server/artifact/routeClientCache.test.ts +0 -265
  583. package/server/artifact/routeSeedIndex.test.ts +0 -56
  584. package/server/artifact/routesManifest.test.ts +0 -64
  585. package/server/di/diLifecycle.contract.test.ts +0 -168
  586. package/server/logging/rotatingLogWriter.test.ts +0 -119
  587. package/server/processMetrics.test.ts +0 -24
  588. package/server/proxy/webProxyRunner.test.ts +0 -66
  589. package/server/resolver/resolver.contract.test.ts +0 -594
  590. package/server/robots.test.ts +0 -16
  591. package/server/routeTree.test.tsx +0 -198
  592. package/server/routing/apiRouter.test.ts +0 -136
  593. package/server/sitemap.test.ts +0 -61
  594. package/server/systemPages.test.tsx +0 -93
  595. package/server/webRouter.test.ts +0 -49
  596. package/service/predefinedAdaptor/compress.adaptor.test.ts +0 -184
  597. package/service/predefinedAdaptor/solidCache.adaptor.test.ts +0 -107
  598. package/service/predefinedAdaptor/solidSqlite.test.ts +0 -457
  599. package/service/service.test.ts +0 -732
  600. package/signal/signal.test.ts +0 -892
  601. package/store/stateBuilder.test.ts +0 -168
  602. package/store/store.test.ts +0 -427
  603. package/tsconfig.json +0 -5
  604. package/ui/Constant/schemaDoc.test.ts +0 -113
  605. package/ui/InfiniteScroll.test.tsx +0 -155
  606. package/ui/System/Common.test.ts +0 -37
  607. package/webkit/bootCsr.test.tsx +0 -153
  608. package/webkit/native.test.tsx +0 -341
  609. package/webkit/webkit.test.tsx +0 -531
@@ -1,892 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import { ENDPOINT_META, ID, INJECT_META, INTERNAL_META, Int, SLICE_META } from "akanjs/base";
3
- import { ConstantRegistry, via } from "akanjs/constant";
4
- import { by, type DatabaseCls, DatabaseRegistry, from, into, type ModelCls } from "akanjs/document";
5
- import {
6
- adapt,
7
- type DatabaseService,
8
- getDefaultInjectRegistry,
9
- type LiveRegistry,
10
- ServiceModel,
11
- serve,
12
- } from "akanjs/service";
13
- import { endpoint } from "./endpoint";
14
- import { buildEndpoint } from "./endpointInfo";
15
- import type { Guard } from "./guard";
16
- import { None, Public } from "./guards";
17
- import { type Internal, internal } from "./internal";
18
- import type { InternalArg } from "./internalArg";
19
- import { Ws } from "./internalArg";
20
- import { buildInternal } from "./internalInfo";
21
- import { middleware } from "./middleware";
22
- import { FetchSerializer } from "./serializer";
23
- import { serverSignal } from "./serverSignal";
24
- import { SignalContext } from "./signalContext";
25
- import { SignalRegistry } from "./signalRegistry";
26
- import { slice } from "./slice";
27
- import { buildSlice } from "./sliceInfo";
28
-
29
- const SignalTestNested = via((f) => ({
30
- label: f(String),
31
- }));
32
- ConstantRegistry.buildScalar("signalTestNested", SignalTestNested, { SignalTestNested });
33
-
34
- const SignalTestInput = via((f) => ({
35
- ownerId: f(ID),
36
- title: f(String),
37
- count: f(Int, { default: 0 }),
38
- nested: f(SignalTestNested),
39
- }));
40
- const SignalTestObject = via(SignalTestInput, (f) => ({
41
- secret: f.secret(String),
42
- relatedId: f(ID, { ref: "signalTestRelated" }).optional(),
43
- relatedIds: f([ID], { ref: "signalTestRelated" }),
44
- }));
45
- const SignalTestLight = via(SignalTestObject, ["title"] as const, () => ({}));
46
- const SignalTestFull = via(SignalTestObject, SignalTestLight, (f) => ({
47
- resolvedLabel: f(String),
48
- }));
49
- const SignalTestInsight = via(SignalTestFull, (f) => ({
50
- total: f(Int, { default: 0, accumulate: {} }),
51
- }));
52
- const signalTestConstant = ConstantRegistry.buildModel(
53
- "signalTestItem",
54
- SignalTestInput,
55
- SignalTestObject,
56
- SignalTestFull,
57
- SignalTestLight,
58
- SignalTestInsight,
59
- { SignalTestInput, SignalTestObject, SignalTestFull, SignalTestLight, SignalTestInsight },
60
- );
61
-
62
- const SignalTestRelatedInput = via((f) => ({
63
- title: f(String),
64
- }));
65
- const SignalTestRelatedObject = via(SignalTestRelatedInput, (f) => ({
66
- memo: f(String).optional(),
67
- }));
68
- const SignalTestRelatedLight = via(SignalTestRelatedObject, ["title"] as const, () => ({}));
69
- const SignalTestRelatedFull = via(SignalTestRelatedObject, SignalTestRelatedLight, () => ({}));
70
- const SignalTestRelatedInsight = via(SignalTestRelatedFull, (f) => ({
71
- total: f(Int, { default: 0, accumulate: {} }),
72
- }));
73
- ConstantRegistry.buildModel(
74
- "signalTestRelated",
75
- SignalTestRelatedInput,
76
- SignalTestRelatedObject,
77
- SignalTestRelatedFull,
78
- SignalTestRelatedLight,
79
- SignalTestRelatedInsight,
80
- {
81
- SignalTestRelatedInput,
82
- SignalTestRelatedObject,
83
- SignalTestRelatedFull,
84
- SignalTestRelatedLight,
85
- SignalTestRelatedInsight,
86
- },
87
- );
88
-
89
- class SignalTestFilter extends from(SignalTestFull, (filter) => ({
90
- query: {
91
- byOwner: filter()
92
- .arg("ownerId", ID, { ref: "user" })
93
- .query((ownerId) => ({ ownerId })),
94
- },
95
- sort: {
96
- titleAsc: { title: 1 },
97
- },
98
- })) {}
99
-
100
- class SignalTestDoc extends by(SignalTestFull) {}
101
- class SignalTestModel extends into(
102
- SignalTestDoc,
103
- SignalTestFilter,
104
- signalTestConstant,
105
- () => ({}),
106
- class SignalTestModelMixin {} as unknown as ModelCls,
107
- ) {}
108
- const signalTestDatabase = DatabaseRegistry.buildModel(
109
- "signalTestItem",
110
- SignalTestInput as unknown as DatabaseCls<InstanceType<typeof SignalTestInput>>,
111
- SignalTestDoc,
112
- SignalTestModel,
113
- SignalTestObject,
114
- SignalTestInsight,
115
- SignalTestFilter,
116
- );
117
-
118
- class SignalTestService extends serve(signalTestDatabase, () => ({})) {
119
- queryToOwner(ownerId: string) {
120
- return { ownerId };
121
- }
122
- }
123
- class SignalTestAuxService extends serve("signalTestAux" as const, () => ({})) {
124
- ping() {
125
- return "pong";
126
- }
127
- }
128
- const signalTestServiceModel = ServiceModel.fromModel(SignalTestService, signalTestConstant, signalTestDatabase).with(
129
- ServiceModel.from(SignalTestAuxService),
130
- );
131
-
132
- class TestAdmin implements Guard {
133
- static name = "TestAdmin";
134
- canPass() {
135
- return true;
136
- }
137
- }
138
- class TestDeny implements Guard {
139
- static name = "TestDeny";
140
- canPass() {
141
- return false;
142
- }
143
- }
144
- class TestInternalArg implements InternalArg<string> {
145
- getArg() {
146
- return "internal-value";
147
- }
148
- }
149
- class MissingInternalArg implements InternalArg<null> {
150
- getArg() {
151
- return null;
152
- }
153
- }
154
- class GlobalMiddleware extends middleware("global") {
155
- override async use() {
156
- return async (_context: SignalContext, next: () => Promise<unknown>) => {
157
- signalTestOrder.push("global:before");
158
- const result = await next();
159
- signalTestOrder.push("global:after");
160
- return result;
161
- };
162
- }
163
- }
164
- class EndpointMiddleware extends middleware("endpoint") {
165
- override async use() {
166
- return async (_context: SignalContext, next: () => Promise<unknown>) => {
167
- signalTestOrder.push("endpoint:before");
168
- const result = await next();
169
- signalTestOrder.push("endpoint:after");
170
- return result;
171
- };
172
- }
173
- }
174
- let signalTestOrder: string[] = [];
175
-
176
- const makeLiveRegistry = (): LiveRegistry => ({
177
- adaptor: new Map(),
178
- adaptorCls: new Map(),
179
- service: new Map(),
180
- serviceCls: new Map(),
181
- endpoint: new Map(),
182
- endpointCls: new Map(),
183
- slice: new Map(),
184
- sliceCls: new Map(),
185
- internal: new Map(),
186
- internalCls: new Map(),
187
- serverSignal: new Map(),
188
- serverSignalCls: new Map(),
189
- });
190
-
191
- const makeHttpRequest = ({
192
- url = "http://localhost/api?ownerId=u1&ids=a&ids=b",
193
- params = { id: "123" },
194
- body,
195
- }: {
196
- url?: string;
197
- params?: Record<string, string>;
198
- body?: Record<string, unknown>;
199
- } = {}) =>
200
- ({
201
- url,
202
- params,
203
- body: body ? {} : undefined,
204
- json: async () => body ?? {},
205
- }) as unknown as Bun.BunRequest;
206
-
207
- const makeSignalContext = ({
208
- endpointInfo = buildEndpoint.query(String).exec(() => "ok"),
209
- request = makeHttpRequest(),
210
- adaptor = new (adapt("signalTestContextAdaptor"))(),
211
- live = makeLiveRegistry(),
212
- middlewareMap = new Map(),
213
- }: {
214
- endpointInfo?: ReturnType<typeof buildEndpoint.query>;
215
- request?: Bun.BunRequest;
216
- adaptor?: InstanceType<ReturnType<typeof adapt>>;
217
- live?: LiveRegistry;
218
- middlewareMap?: Map<string, typeof GlobalMiddleware>;
219
- } = {}) =>
220
- new SignalContext("contextKey", request, {
221
- endpointInfo,
222
- adaptor,
223
- registry: getDefaultInjectRegistry(),
224
- env: {} as never,
225
- live,
226
- middleware: middlewareMap,
227
- });
228
-
229
- describe("signal metadata builders", () => {
230
- test("builds endpoint metadata, paths, nullable search args, and validation errors", () => {
231
- const endpointInfo = buildEndpoint
232
- .query([SignalTestFull], {
233
- nullable: true,
234
- partial: ["title"] as never,
235
- guards: [Public],
236
- path: "custom/items/:id",
237
- })
238
- .param("id", ID, { example: "abc" })
239
- .search("tags", [String], { example: "tag" })
240
- .body("input", SignalTestInput, { nullable: true })
241
- .with(TestInternalArg)
242
- .exec(() => []);
243
-
244
- expect(endpointInfo.type).toBe("query");
245
- expect(endpointInfo.argNames).toEqual(["id", "tags", "input"]);
246
- expect(endpointInfo.args.map((arg) => [arg.type, arg.name, arg.arrDepth, arg.option?.nullable])).toEqual([
247
- ["param", "id", 0, undefined],
248
- ["search", "tags", 1, true],
249
- ["body", "input", 0, true],
250
- ]);
251
- expect(endpointInfo.returns.returnRef).toBe(SignalTestFull);
252
- expect(endpointInfo.returns.arrDepth).toBe(1);
253
- expect(endpointInfo.returns.nullable).toBe(true);
254
- expect(endpointInfo.signalOption.partial).toEqual(["title"]);
255
- expect(endpointInfo.getPath("fallback")).toBe("/custom/items/:id");
256
- expect(buildEndpoint.query(String).param("id", ID).getPath("getOne")).toBe("/getOne/:id");
257
- expect(buildEndpoint.query(String, { name: "renamed" }).getPath("getOne")).toBe("/renamed");
258
- expect(() => buildEndpoint.query(String).body("maybe", String, { nullable: true }).param("id", ID)).toThrow(
259
- "Last argument is nullable",
260
- );
261
- expect(() => endpointInfo.param("late", String)).toThrow("Query function is already set");
262
- expect(() =>
263
- buildEndpoint
264
- .query(String)
265
- .exec(() => "ok")
266
- .exec(() => "again"),
267
- ).toThrow("Query function is already set");
268
- });
269
-
270
- test("builds slice metadata with query, internal args, and nullable search args", () => {
271
- const sliceInfo = buildSlice(
272
- "signalTestItem",
273
- SignalTestInput,
274
- SignalTestFull,
275
- SignalTestLight,
276
- SignalTestInsight,
277
- SignalTestFilter,
278
- )({ guards: [TestAdmin], path: "items/custom" })
279
- .param("ownerId", ID)
280
- .search("q", String)
281
- .with(TestInternalArg, { nullable: true })
282
- .exec((ownerId, q) => ({ ownerId, q }));
283
-
284
- expect(sliceInfo.refName).toBe("signalTestItem");
285
- expect(sliceInfo.args.map((arg) => [arg.type, arg.name, arg.option?.nullable])).toEqual([
286
- ["param", "ownerId", undefined],
287
- ["search", "q", true],
288
- ]);
289
- expect(sliceInfo.internalArgs[0]?.argRef).toBe(TestInternalArg);
290
- expect(sliceInfo.internalArgs[0]?.option?.nullable).toBe(true);
291
- expect(sliceInfo.signalOption.path).toBe("items/custom");
292
- expect(sliceInfo.execFn?.("u1", "search", null)).toEqual({ ownerId: "u1", q: "search" });
293
- expect(() =>
294
- buildSlice(
295
- "signalTestItem",
296
- SignalTestInput,
297
- SignalTestFull,
298
- SignalTestLight,
299
- SignalTestInsight,
300
- SignalTestFilter,
301
- )({})
302
- .body("maybe", String, { nullable: true })
303
- .param("id", ID),
304
- ).toThrow("Last argument is nullable");
305
- });
306
-
307
- test("builds internal scheduling metadata and default args", () => {
308
- const interval = buildInternal.interval(5000, { serverMode: "batch" });
309
- const cron = buildInternal.cron("0 * * * *", { operationMode: ["cloud"] });
310
- const timeout = buildInternal.timeout(1000);
311
- const init = buildInternal.initialize();
312
- const destroy = buildInternal.destroy();
313
- const process = buildInternal
314
- .process(Boolean)
315
- .msg("force", Boolean)
316
- .exec(() => true);
317
- const resolveField = buildInternal
318
- .resolveField(String)
319
- .with(MissingInternalArg)
320
- .exec((parent) => `${parent}`);
321
-
322
- expect(interval.signalOption).toMatchObject({
323
- enabled: true,
324
- lock: true,
325
- scheduleType: "interval",
326
- scheduleTime: 5000,
327
- });
328
- expect(cron.signalOption).toMatchObject({
329
- enabled: true,
330
- lock: true,
331
- scheduleType: "cron",
332
- scheduleCron: "0 * * * *",
333
- });
334
- expect(timeout.signalOption).toMatchObject({
335
- enabled: true,
336
- lock: true,
337
- scheduleType: "timeout",
338
- scheduleTime: 1000,
339
- });
340
- expect(init.signalOption).toMatchObject({ enabled: true, scheduleType: "init" });
341
- expect(destroy.signalOption).toMatchObject({ enabled: true, lock: true, scheduleType: "destroy" });
342
- expect(process.type).toBe("process");
343
- expect(process.defaultArgs).toEqual(["Job"]);
344
- expect(process.args[0]?.name).toBe("force");
345
- expect(resolveField.defaultArgs).toEqual(["Parent"]);
346
- expect(resolveField.internalArgs[0]?.option?.nullable).toBe(true);
347
- });
348
- });
349
-
350
- describe("signal class factories and composition", () => {
351
- test("creates endpoint classes and merges lib endpoint metadata and services", () => {
352
- class LibEndpoint extends endpoint(ServiceModel.from(SignalTestAuxService), (builder) => ({
353
- ping: builder.query(String).exec(() => "pong"),
354
- })) {}
355
- class MainEndpoint extends endpoint(
356
- signalTestServiceModel,
357
- (builder) => ({
358
- getTitle: builder
359
- .query(String, { guards: [Public] })
360
- .param("id", ID)
361
- .exec((id) => id),
362
- publish: builder
363
- .pubsub(SignalTestLight)
364
- .room("ownerId", ID)
365
- .exec(() => undefined),
366
- }),
367
- LibEndpoint,
368
- ) {}
369
-
370
- expect(MainEndpoint.baseName).toBe("signalTestItem");
371
- expect(Object.keys(MainEndpoint[ENDPOINT_META]).sort()).toEqual(["getTitle", "ping", "publish"]);
372
- expect(MainEndpoint[ENDPOINT_META].getTitle?.args[0]?.name).toBe("id");
373
- expect(MainEndpoint[ENDPOINT_META].publish?.type).toBe("pubsub");
374
- expect(Object.keys(MainEndpoint.srv.srvMap).sort()).toEqual(["signalTestAuxService", "signalTestItemService"]);
375
- expect(MainEndpoint[INJECT_META].signalTestItemService.type).toBe("service");
376
- expect(MainEndpoint[INJECT_META].signalTestAuxService.type).toBe("service");
377
- });
378
-
379
- test("creates internal classes and merges lib internals", () => {
380
- class LibInternal extends internal(ServiceModel.from(SignalTestAuxService), (builder) => ({
381
- auxProcess: builder.process(String).exec(() => "queued"),
382
- })) {}
383
- class MainInternal extends internal(
384
- signalTestServiceModel,
385
- (builder) => ({
386
- hourly: builder.cron("0 * * * *").exec(() => undefined),
387
- resolveLabel: builder.resolveField(String).exec((parent) => (parent as { title: string }).title),
388
- }),
389
- LibInternal,
390
- ) {}
391
-
392
- expect(MainInternal.refName).toBe("signalTestItemInternal");
393
- expect(Object.keys(MainInternal[INTERNAL_META]).sort()).toEqual(["auxProcess", "hourly", "resolveLabel"]);
394
- expect(MainInternal[INTERNAL_META].hourly?.signalOption.scheduleType).toBe("cron");
395
- expect(MainInternal[INTERNAL_META].auxProcess?.type).toBe("process");
396
- expect(Object.keys(MainInternal.srv.srvMap).sort()).toEqual(["signalTestAuxService", "signalTestItemService"]);
397
- expect(MainInternal[INJECT_META].schedule.type).toBe("plug");
398
- expect(MainInternal[INJECT_META].queue.type).toBe("plug");
399
- });
400
-
401
- test("creates slice classes with default root slice, guards, and lib slice metadata", () => {
402
- class LibSlice extends slice(
403
- signalTestServiceModel,
404
- { guards: { root: Public, get: None, cru: Public } },
405
- (init) => ({
406
- libOwner: init()
407
- .param("ownerId", ID)
408
- .exec((ownerId) => ({ ownerId })),
409
- }),
410
- ) {}
411
- class MainSlice extends slice(
412
- signalTestServiceModel,
413
- { guards: { root: TestAdmin, get: [Public, None], cru: [TestAdmin] }, prefix: "customPrefix" },
414
- (init) => ({
415
- byOwner: init()
416
- .param("ownerId", ID)
417
- .search("q", String)
418
- .exec((ownerId, q) => ({ ownerId, q })),
419
- }),
420
- LibSlice,
421
- ) {}
422
-
423
- expect(Object.keys(MainSlice[SLICE_META]).sort()).toEqual(["", "byOwner", "libOwner"]);
424
- expect(MainSlice[SLICE_META][""]?.args[0]?.name).toBe("query");
425
- expect(MainSlice[SLICE_META][""]?.args[0]?.option?.nullable).toBe(true);
426
- expect(MainSlice.getGuards.map((guard) => guard.name)).toEqual(["Public", "None"]);
427
- expect(MainSlice.cruGuards.map((guard) => guard.name)).toEqual(["TestAdmin"]);
428
- expect(Object.keys(MainSlice.srv.srvMap).sort()).toEqual(["signalTestAuxService", "signalTestItemService"]);
429
- expect(() => slice(ServiceModel.from(SignalTestAuxService), {}, () => ({}))).toThrow("cnst and db are required");
430
- });
431
- });
432
-
433
- describe("signal serialization and registry", () => {
434
- class RegistryEndpoint extends endpoint(signalTestServiceModel, (builder) => ({
435
- list: builder
436
- .query([SignalTestLight], {
437
- guards: [Public],
438
- partial: ["title"] as never,
439
- path: "items/list",
440
- })
441
- .search("ownerId", ID, { example: "user-1" })
442
- .exec(() => []),
443
- mutate: builder
444
- .mutation(SignalTestFull, { nullable: true })
445
- .body("input", SignalTestInput)
446
- .exec((input) => input as never),
447
- })) {}
448
- class RegistryInternal extends internal(signalTestServiceModel, (builder) => ({
449
- processItem: builder
450
- .process(Boolean)
451
- .msg("force", Boolean)
452
- .exec(() => true),
453
- })) {}
454
- class RegistrySlice extends slice(
455
- signalTestServiceModel,
456
- { guards: { root: Public, get: None, cru: [None] } },
457
- (init) => ({
458
- byOwner: init()
459
- .param("ownerId", ID)
460
- .exec((ownerId) => ({ ownerId })),
461
- }),
462
- ) {}
463
- class RegistryServerSignal extends serverSignal(RegistryEndpoint, RegistryInternal) {}
464
-
465
- test("serializes database and service signals", () => {
466
- const databaseSignal = FetchSerializer.serializeDatabaseSignal(RegistrySlice, RegistryEndpoint);
467
- const serviceEndpoint = endpoint(ServiceModel.from(SignalTestAuxService), (builder) => ({
468
- ping: builder.query(String).exec(() => "pong"),
469
- }));
470
- const serviceSignal = FetchSerializer.serializeServiceSignal(serviceEndpoint);
471
-
472
- expect(databaseSignal.prefix).toBe("signalTestItem");
473
- expect(databaseSignal.slice?.byOwner?.args[0]).toMatchObject({ type: "param", name: "ownerId", refName: "ID" });
474
- expect(databaseSignal.endpoint.list).toMatchObject({
475
- type: "query",
476
- path: "items/list",
477
- guards: ["Public"],
478
- returns: { refName: "signalTestItem", modelType: "light", arrDepth: 1, partial: ["title"] },
479
- });
480
- expect(databaseSignal.endpoint.list?.args[0]).toMatchObject({
481
- type: "search",
482
- name: "ownerId",
483
- refName: "ID",
484
- nullable: true,
485
- example: "user-1",
486
- });
487
- expect(databaseSignal.endpoint.mutate?.returns).toMatchObject({
488
- refName: "signalTestItem",
489
- modelType: "full",
490
- nullable: true,
491
- });
492
- expect(databaseSignal.getGuards).toBeUndefined();
493
- expect(databaseSignal.cruGuards).toBeUndefined();
494
- expect(serviceSignal).toEqual({
495
- endpoint: {
496
- ping: { type: "query", args: [], returns: { refName: "String" } },
497
- },
498
- });
499
- });
500
-
501
- test("registers signals and serializes live registry", () => {
502
- const databaseRegistered = SignalRegistry.registerDatabase(
503
- "signalTestItem" as const,
504
- RegistryInternal,
505
- RegistryEndpoint,
506
- RegistrySlice,
507
- RegistryServerSignal,
508
- );
509
- const ServiceEndpoint = endpoint(ServiceModel.from(SignalTestAuxService), (builder) => ({
510
- ping: builder.query(String).exec(() => "pong"),
511
- }));
512
- const ServiceInternal = internal(ServiceModel.from(SignalTestAuxService), () => ({}));
513
- const ServiceServer = serverSignal(ServiceEndpoint, ServiceInternal);
514
- const serviceRegistered = SignalRegistry.registerService(
515
- "signalTestAux" as const,
516
- ServiceInternal,
517
- ServiceEndpoint,
518
- ServiceServer,
519
- );
520
- const live = makeLiveRegistry();
521
- live.endpointCls.set("signalTestItem", RegistryEndpoint);
522
- live.sliceCls.set("signalTestItem", RegistrySlice);
523
- live.endpointCls.set("signalTestAux", ServiceEndpoint);
524
-
525
- expect(SignalRegistry.getDatabase("signalTestItem")).toBe(databaseRegistered);
526
- expect(SignalRegistry.getService("signalTestAux")).toBe(serviceRegistered);
527
- expect(databaseRegistered.serializedSignal.endpoint.list?.type).toBe("query");
528
- expect(serviceRegistered.serializedSignal.endpoint.ping?.returns.refName).toBe("String");
529
- expect(FetchSerializer.serializeRegistry(live).signal.signalTestItem?.prefix).toBe("signalTestItem");
530
- expect(FetchSerializer.serializeRegistry(live).signal.signalTestAux?.endpoint.ping?.type).toBe("query");
531
- expect(() =>
532
- SignalRegistry.registerDatabase(
533
- "signalTestItem" as const,
534
- RegistryInternal,
535
- ServiceEndpoint as never,
536
- RegistrySlice,
537
- RegistryServerSignal,
538
- ),
539
- ).toThrow('Signal base mismatch: endpoint uses "signalTestAux", but registry expected "signalTestItem"');
540
-
541
- const brokenLive = makeLiveRegistry();
542
- brokenLive.endpointCls.set("signalTestItem", RegistryEndpoint);
543
- expect(() => FetchSerializer.serializeRegistry(brokenLive)).toThrow(
544
- 'No slice found for service signal "signalTestItem"',
545
- );
546
- });
547
-
548
- test("serverSignal exposes only pubsub endpoints and process internals", () => {
549
- class ServerEndpoint extends endpoint(signalTestServiceModel, (builder) => ({
550
- queryItem: builder.query(String).exec(() => "query"),
551
- publishItem: builder
552
- .pubsub(String)
553
- .room("roomId", String)
554
- .exec(() => undefined),
555
- })) {}
556
- class ServerInternal extends internal(signalTestServiceModel, (builder) => ({
557
- hourly: builder.cron("* * * * *").exec(() => undefined),
558
- queueItem: builder.process(Boolean).exec(() => true),
559
- })) {}
560
- class SignalRef extends serverSignal(ServerEndpoint, ServerInternal) {}
561
-
562
- expect(Object.keys(SignalRef[ENDPOINT_META])).toEqual(["publishItem"]);
563
- expect(Object.keys(SignalRef[INTERNAL_META])).toEqual(["queueItem"]);
564
- expect(SignalRef[INJECT_META].queue.type).toBe("plug");
565
- });
566
- });
567
-
568
- describe("SignalContext execution", () => {
569
- test("parses HTTP params, query arrays, nullable search args, and JSON body", async () => {
570
- const endpointInfo = buildEndpoint
571
- .mutation(String)
572
- .param("id", ID)
573
- .search("ids", [ID])
574
- .search("maybe", String)
575
- .body("title", String)
576
- .exec((id, ids, maybe, title) => `${id}:${ids.join(",")}:${maybe ?? "none"}:${title}`);
577
- const context = makeSignalContext({
578
- endpointInfo,
579
- request: makeHttpRequest({
580
- url: "http://localhost/update?ids=abcdefabcdefabcdefabcdef&ids=bbbbbbbbbbbbbbbbbbbbbbbb",
581
- params: { id: "1234567890abcdef12345678" },
582
- body: { title: "Hello" },
583
- }),
584
- });
585
-
586
- await context.init();
587
- const response = (await context.exec()) as Response;
588
-
589
- expect(context.args).toEqual([
590
- "1234567890abcdef12345678",
591
- ["abcdefabcdefabcdefabcdef", "bbbbbbbbbbbbbbbbbbbbbbbb"],
592
- null,
593
- "Hello",
594
- ]);
595
- expect(await response.json()).toBe(
596
- "1234567890abcdef12345678:abcdefabcdefabcdefabcdef,bbbbbbbbbbbbbbbbbbbbbbbb:none:Hello",
597
- );
598
- });
599
-
600
- test("parses websocket message and pubsub room args", async () => {
601
- const messageInfo = buildEndpoint
602
- .message(String)
603
- .msg("text", String)
604
- .with(Ws)
605
- .exec((text, ws) => `${text}:${ws.subscribe}`);
606
- const pubsubInfo = buildEndpoint
607
- .pubsub(String)
608
- .room("roomId", String)
609
- .exec(() => undefined);
610
- const wsReq = {
611
- ws: { id: "ws-1" },
612
- data: ["hello"],
613
- eventType: "message",
614
- } as never;
615
- const messageContext = new SignalContext("messageKey", wsReq, {
616
- endpointInfo: messageInfo,
617
- adaptor: new (adapt("signalTestWsAdaptor"))(),
618
- registry: getDefaultInjectRegistry(),
619
- env: {} as never,
620
- live: makeLiveRegistry(),
621
- middleware: new Map(),
622
- });
623
- const pubsubContext = new SignalContext(
624
- "roomKey",
625
- { ws: { id: "ws-2" }, data: ["room-1"], eventType: "subscribe" } as never,
626
- {
627
- endpointInfo: pubsubInfo,
628
- adaptor: new (adapt("signalTestPubsubAdaptor"))(),
629
- registry: getDefaultInjectRegistry(),
630
- env: {} as never,
631
- live: makeLiveRegistry(),
632
- middleware: new Map(),
633
- },
634
- );
635
-
636
- await messageContext.init();
637
- await pubsubContext.init();
638
-
639
- expect(messageContext.args).toEqual(["hello"]);
640
- expect(messageContext.internalArgs).toEqual([]);
641
- expect(pubsubContext.args).toEqual(["room-1"]);
642
- expect(pubsubContext.getRoomId("roomKey")).toBe("roomKey-room-1");
643
- });
644
-
645
- test("runs guards, internal args, and middleware in order", async () => {
646
- signalTestOrder = [];
647
- const endpointInfo = buildEndpoint
648
- .query(String, { guards: [Public], middlewares: [EndpointMiddleware] })
649
- .with(TestInternalArg)
650
- .exec((internalValue) => {
651
- signalTestOrder.push(`exec:${internalValue}`);
652
- return internalValue;
653
- });
654
- const context = makeSignalContext({
655
- endpointInfo,
656
- middlewareMap: new Map([["global", GlobalMiddleware]]),
657
- });
658
-
659
- await context.init();
660
- const response = (await context.exec()) as Response;
661
-
662
- expect(await response.json()).toBe("internal-value");
663
- expect(signalTestOrder).toEqual([
664
- "global:before",
665
- "endpoint:before",
666
- "exec:internal-value",
667
- "endpoint:after",
668
- "global:after",
669
- ]);
670
- });
671
-
672
- test("reports guard and internal argument failures through HTTP responses", async () => {
673
- const denyInfo = buildEndpoint.query(String, { guards: [TestDeny] }).exec(() => "blocked");
674
- const missingInternalInfo = buildEndpoint
675
- .query(String)
676
- .with(MissingInternalArg)
677
- .exec(() => "missing");
678
- const denyAdaptor = new (adapt("signalTestDenyAdaptor"))();
679
- const denyResponse = await SignalContext.try(denyAdaptor, denyInfo, "deny", async () => {
680
- const context = makeSignalContext({ endpointInfo: denyInfo, adaptor: denyAdaptor });
681
- await context.init();
682
- return (await context.exec()) as Response;
683
- });
684
- const missingResponse = await SignalContext.try(denyAdaptor, missingInternalInfo, "missing", async () => {
685
- const context = makeSignalContext({ endpointInfo: missingInternalInfo, adaptor: denyAdaptor });
686
- await context.init();
687
- return (await context.exec()) as Response;
688
- });
689
- const nullableInfo = buildEndpoint
690
- .query(String)
691
- .with(MissingInternalArg, { nullable: true })
692
- .exec((arg) => (arg === null ? "nullable" : "value"));
693
- const nullableContext = makeSignalContext({ endpointInfo: nullableInfo });
694
-
695
- await nullableContext.init();
696
- const nullableResponse = (await nullableContext.exec()) as Response;
697
-
698
- expect(denyResponse).toBeInstanceOf(Response);
699
- expect((denyResponse as Response).status).toBe(403);
700
- expect(await (denyResponse as Response).json()).toMatchObject({
701
- statusCode: 403,
702
- error: "Access denied by guard: TestDeny",
703
- });
704
- expect((missingResponse as Response).status).toBe(401);
705
- expect(await (missingResponse as Response).json()).toMatchObject({
706
- statusCode: 401,
707
- error: "Internal Argument MissingInternalArg is required",
708
- });
709
- expect(await nullableResponse.json()).toBe("nullable");
710
- });
711
-
712
- test("passes through raw Response results", async () => {
713
- const endpointInfo = buildEndpoint.query(Response as never).exec(() => Response.json({ ok: true }));
714
- const context = makeSignalContext({ endpointInfo });
715
-
716
- await context.init();
717
- const response = (await context.exec()) as Response;
718
-
719
- expect(response).toBeInstanceOf(Response);
720
- expect(await response.json()).toEqual({ ok: true });
721
- });
722
- });
723
-
724
- describe("SignalContext return resolution", () => {
725
- test("resolves primitives, arrays, hidden fields, scalar fields, nested documents, and resolve fields", async () => {
726
- const live = makeLiveRegistry();
727
- const relatedService = {
728
- __load: async (id: string) => ({
729
- toJSON: () => ({ id, title: `related:${id}` }),
730
- }),
731
- __loadMany: async (ids: string[]) =>
732
- ids.map((id) => ({
733
- toJSON: () => ({ id, title: `related:${id}` }),
734
- })),
735
- } as unknown as DatabaseService;
736
- class ResolveInternal extends internal(signalTestServiceModel, (builder) => ({
737
- resolvedLabel: builder.resolveField(String).exec((parent) => `resolved:${(parent as { title: string }).title}`),
738
- })) {}
739
- live.service.set("signalTestRelated", relatedService);
740
- live.internal.set("signalTestItemInternal", new ResolveInternal() as unknown as Internal);
741
-
742
- const resolved = await SignalContext.resolveReturn(
743
- {
744
- id: "item-1",
745
- ownerId: "owner-1",
746
- title: "Item",
747
- count: 3,
748
- nested: { label: "Nested" },
749
- secret: "hidden",
750
- relatedId: "rel-1",
751
- relatedIds: ["rel-2", "rel-3"],
752
- },
753
- {
754
- signalContext: null,
755
- returnRef: SignalTestFull,
756
- arrDepth: 0,
757
- registry: getDefaultInjectRegistry(),
758
- live,
759
- },
760
- );
761
- const resolvedArray = await SignalContext.resolveReturn(
762
- [[{ title: "A", nested: { label: "N" }, relatedIds: [] }]],
763
- {
764
- signalContext: null,
765
- returnRef: SignalTestFull,
766
- arrDepth: 2,
767
- registry: getDefaultInjectRegistry(),
768
- live,
769
- },
770
- );
771
-
772
- expect(
773
- await SignalContext.resolveReturn("text", {
774
- signalContext: null,
775
- returnRef: String,
776
- arrDepth: 0,
777
- registry: getDefaultInjectRegistry(),
778
- live,
779
- }),
780
- ).toBe("text");
781
- expect(resolved).toMatchObject({
782
- title: "Item",
783
- count: 3,
784
- nested: { label: "Nested" },
785
- resolvedLabel: "resolved:Item",
786
- relatedId: "rel-1",
787
- relatedIds: ["rel-2", "rel-3"],
788
- });
789
- expect(resolved).not.toHaveProperty("secret");
790
- expect(resolvedArray).toEqual([
791
- [{ title: "A", nested: { label: "N" }, relatedIds: [], resolvedLabel: "resolved:A" }],
792
- ]);
793
- });
794
-
795
- test("loadNested handles nullable and non-nullable missing documents", async () => {
796
- const missingService = {
797
- __load: async () => null,
798
- __loadMany: async () => [null],
799
- } as unknown as DatabaseService;
800
-
801
- await expect(SignalContext.loadNested("missing", missingService, { arrDepth: 0, nullable: false })).rejects.toThrow(
802
- "Document missing is not found",
803
- );
804
- await expect(
805
- SignalContext.loadNested("missing", missingService, { arrDepth: 0, nullable: true }),
806
- ).resolves.toBeNull();
807
- await expect(
808
- SignalContext.loadNested(["missing"], missingService, { arrDepth: 1, nullable: false }),
809
- ).rejects.toThrow("Document missing is not found");
810
- });
811
- });
812
-
813
- describe("representative signal usage regressions", () => {
814
- test("mirrors cron internal plus slice query/search pattern", () => {
815
- class SummaryLikeInternal extends internal(signalTestServiceModel, (builder) => ({
816
- makeSummary: builder.cron("0 * * * *", { serverMode: "batch", operationMode: ["cloud"] }).exec(() => undefined),
817
- })) {}
818
- class SummaryLikeSlice extends slice(
819
- signalTestServiceModel,
820
- { guards: { root: TestAdmin, get: Public, cru: None } },
821
- (init) => ({
822
- inPeriod: init()
823
- .param("from", Date)
824
- .param("to", Date)
825
- .search("types", [String])
826
- .exec((from, to, types) => ({ from, to, types })),
827
- }),
828
- ) {}
829
-
830
- expect(SummaryLikeInternal[INTERNAL_META].makeSummary?.signalOption).toMatchObject({
831
- scheduleType: "cron",
832
- scheduleCron: "0 * * * *",
833
- serverMode: "batch",
834
- operationMode: ["cloud"],
835
- });
836
- expect(
837
- SummaryLikeSlice[SLICE_META].inPeriod?.args.map((arg) => [
838
- arg.type,
839
- arg.name,
840
- arg.arrDepth,
841
- arg.option?.nullable,
842
- ]),
843
- ).toEqual([
844
- ["param", "from", 0, undefined],
845
- ["param", "to", 0, undefined],
846
- ["search", "types", 1, true],
847
- ]);
848
- });
849
-
850
- test("mirrors websocket message/pubsub and Ws internal arg pattern", () => {
851
- class ChatLikeEndpoint extends endpoint(signalTestServiceModel, (builder) => ({
852
- send: builder
853
- .message(SignalTestLight)
854
- .msg("roomId", ID)
855
- .msg("text", String)
856
- .with(Ws)
857
- .exec((roomId, text) => ({ title: `${roomId}:${text}` }) as never),
858
- room: builder
859
- .pubsub(SignalTestLight)
860
- .room("roomId", ID)
861
- .exec(() => undefined),
862
- })) {}
863
-
864
- expect(ChatLikeEndpoint[ENDPOINT_META].send?.type).toBe("message");
865
- expect(ChatLikeEndpoint[ENDPOINT_META].send?.args.map((arg) => [arg.type, arg.name])).toEqual([
866
- ["msg", "roomId"],
867
- ["msg", "text"],
868
- ]);
869
- expect(ChatLikeEndpoint[ENDPOINT_META].send?.internalArgs[0]?.argRef).toBe(Ws);
870
- expect(ChatLikeEndpoint[ENDPOINT_META].room?.args[0]?.type).toBe("room");
871
- });
872
-
873
- test("mirrors custom path, prefix false, wildcard, and process internal metadata", () => {
874
- const customPath = buildEndpoint
875
- .query(String, { path: "wsl/homes/:dongho/erv", prefix: false })
876
- .param("dongho", String)
877
- .exec((dongho) => dongho);
878
- const wildcard = buildEndpoint.query(Response as never, { path: "localFile/getBlob/*" }).exec(() => new Response());
879
- const processInternal = buildInternal
880
- .process(Boolean, { serverMode: "all" })
881
- .msg("force", Boolean)
882
- .exec(() => true);
883
-
884
- expect(customPath.getPath("ignored")).toBe("/wsl/homes/:dongho/erv");
885
- expect(customPath.signalOption.prefix).toBe(false);
886
- expect(wildcard.getPath("blob")).toBe("/localFile/getBlob/*");
887
- expect(processInternal.type).toBe("process");
888
- expect(processInternal.defaultArgs).toEqual(["Job"]);
889
- expect(processInternal.args[0]?.name).toBe("force");
890
- expect(processInternal.signalOption.serverMode).toBe("all");
891
- });
892
- });