akanjs 2.2.4 → 2.2.5

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,732 +0,0 @@
1
- import { beforeEach, describe, expect, test } from "bun:test";
2
- import { INJECT_META, Int } from "akanjs/base";
3
- import { ConstantRegistry, via } from "akanjs/constant";
4
- import { by, type DatabaseCls, DatabaseRegistry, from, getFilterInfoByKey, into } from "akanjs/document";
5
- import type { ServerSignal, ServerSignalCls } from "akanjs/signal";
6
- import { type Adaptor, type AdaptorCls, adapt, dangerouslyAdapt } from "./adapt";
7
- import { getDefaultInjectRegistry, InjectInfo, injectionBuilder } from "./injectInfo";
8
- import type { CacheAdaptor } from "./predefinedAdaptor";
9
- import { type Service, serve } from "./serve";
10
- import { ServiceModel } from "./serviceModule";
11
- import type { DatabaseService } from "./types";
12
-
13
- const TestItemInput = via((f) => ({
14
- title: f(String),
15
- category: f(String).optional(),
16
- score: f(Int, { default: 0 }),
17
- }));
18
- const TestItemObject = via(TestItemInput, (f) => ({
19
- note: f(String).optional(),
20
- }));
21
- const TestItemLight = via(TestItemObject, ["title"] as const, (f) => ({
22
- label: f(String),
23
- }));
24
- const TestItemFull = via(TestItemObject, TestItemLight, (f) => ({
25
- searchable: f(String, { text: "search" }),
26
- }));
27
- const TestItemInsight = via(TestItemFull, (f) => ({
28
- count: f(Int, { default: 0, accumulate: {} }),
29
- }));
30
- const testItemConstant = ConstantRegistry.buildModel(
31
- "serviceTestItem",
32
- TestItemInput,
33
- TestItemObject,
34
- TestItemFull,
35
- TestItemLight,
36
- TestItemInsight,
37
- { TestItemInput, TestItemObject, TestItemFull, TestItemLight, TestItemInsight },
38
- );
39
-
40
- class TestItemFilter extends from(TestItemFull, (filter) => ({
41
- query: {
42
- inCategory: filter()
43
- .opt("category", String)
44
- .query((category) => ({ category })),
45
- withMeta: filter()
46
- .arg("meta", Object)
47
- .query((meta) => ({ meta })),
48
- },
49
- sort: {
50
- scoreHigh: { score: -1 },
51
- },
52
- })) {}
53
-
54
- class TestItemDoc extends by(TestItemFull) {}
55
-
56
- class TestItemModel extends into(TestItemDoc, TestItemFilter, testItemConstant, () => ({})) {}
57
-
58
- const testItemDatabase = DatabaseRegistry.buildModel(
59
- "serviceTestItem",
60
- TestItemInput as unknown as DatabaseCls<InstanceType<typeof TestItemInput>>,
61
- TestItemDoc,
62
- TestItemModel,
63
- TestItemObject,
64
- TestItemInsight,
65
- TestItemFilter,
66
- );
67
-
68
- type TestDoc = { id: string; title: string; category?: string | null; score?: number; note?: string | null };
69
- type CallRecord = { method: string; args: unknown[] };
70
- type TestItemDocInstance = InstanceType<typeof TestItemDoc>;
71
- type TestItemDataInput = Parameters<DatabaseService["__libsPreCreate"]>[0];
72
- type TestHookServiceCls = { prototype: object };
73
- type Equal<Left, Right> =
74
- (<Type>() => Type extends Left ? 1 : 2) extends <Type>() => Type extends Right ? 1 : 2 ? true : false;
75
- type Expect<Type extends true> = Type;
76
-
77
- const makeFakeDatabaseModel = () => {
78
- const calls: CallRecord[] = [];
79
- const doc = { id: "doc-1", title: "Alpha", category: "notice", score: 10 };
80
- const model = {
81
- calls,
82
- async __get(id: string) {
83
- calls.push({ method: "__get", args: [id] });
84
- return { ...doc, id };
85
- },
86
- async __load(id?: string) {
87
- calls.push({ method: "__load", args: [id] });
88
- return id ? { ...doc, id } : null;
89
- },
90
- async __loadMany(ids: string[]) {
91
- calls.push({ method: "__loadMany", args: [ids] });
92
- return ids.map((id) => ({ ...doc, id }));
93
- },
94
- async __create(data: Record<string, unknown>) {
95
- calls.push({ method: "__create", args: [data] });
96
- return { ...doc, ...data, id: "created" };
97
- },
98
- async __update(id: string, data: Record<string, unknown>) {
99
- calls.push({ method: "__update", args: [id, data] });
100
- return { ...doc, ...data, id };
101
- },
102
- async __remove(id: string) {
103
- calls.push({ method: "__remove", args: [id] });
104
- return { ...doc, id, removed: true };
105
- },
106
- async __list(query: unknown, queryOption?: unknown) {
107
- calls.push({ method: "__list", args: [query, queryOption] });
108
- return [doc];
109
- },
110
- async __listIds(query: unknown, queryOption?: unknown) {
111
- calls.push({ method: "__listIds", args: [query, queryOption] });
112
- return [doc.id];
113
- },
114
- async __find(query: unknown, queryOption?: unknown) {
115
- calls.push({ method: "__find", args: [query, queryOption] });
116
- return doc;
117
- },
118
- async __findId(query: unknown, queryOption?: unknown) {
119
- calls.push({ method: "__findId", args: [query, queryOption] });
120
- return doc.id;
121
- },
122
- async __pick(query: unknown, queryOption?: unknown) {
123
- calls.push({ method: "__pick", args: [query, queryOption] });
124
- return doc;
125
- },
126
- async __pickId(query: unknown, queryOption?: unknown) {
127
- calls.push({ method: "__pickId", args: [query, queryOption] });
128
- return doc.id;
129
- },
130
- async __exists(query: unknown) {
131
- calls.push({ method: "__exists", args: [query] });
132
- return doc.id;
133
- },
134
- async __count(query: unknown) {
135
- calls.push({ method: "__count", args: [query] });
136
- return 1;
137
- },
138
- async __insight(query: unknown) {
139
- calls.push({ method: "__insight", args: [query] });
140
- return { count: 1 };
141
- },
142
- listenPre(type: string, listener: unknown) {
143
- calls.push({ method: "listenPre", args: [type, listener] });
144
- return () => calls.push({ method: "unlistenPre", args: [type] });
145
- },
146
- listenPost(type: string, listener: unknown) {
147
- calls.push({ method: "listenPost", args: [type, listener] });
148
- return () => calls.push({ method: "unlistenPost", args: [type] });
149
- },
150
- };
151
- return model;
152
- };
153
-
154
- const dbMethods = ServiceModel.getDefaultDbServiceMethods("ServiceTestItem");
155
- const filterMethods = ServiceModel.getFilterServiceMethods(
156
- "inCategory",
157
- getFilterInfoByKey(TestItemFilter, "inCategory").queryFn as (...args: unknown[]) => Record<string, unknown>,
158
- );
159
- const metaFilterMethods = ServiceModel.getFilterServiceMethods(
160
- "withMeta",
161
- getFilterInfoByKey(TestItemFilter, "withMeta").queryFn as (...args: unknown[]) => Record<string, unknown>,
162
- );
163
- type ServiceInstance = Service &
164
- DatabaseService &
165
- typeof dbMethods &
166
- typeof filterMethods &
167
- typeof metaFilterMethods & {
168
- childToken?: string;
169
- childOnlyMethod?: () => string;
170
- parentCallsChildMethod?: () => string;
171
- parentReadsChildProperty?: () => string | undefined;
172
- parentCallsChildDbHelper?: (id: string) => Promise<TestDoc>;
173
- parentReturnsDoc?: () => Promise<TestDoc>;
174
- parentReturnsDocs?: () => Promise<TestDoc[]>;
175
- childCallsParent?: () => string;
176
- collision?: () => string;
177
- secondParentMethod?: () => string;
178
- };
179
- type RuntimeServiceInstance = ServiceInstance & Record<string, (...args: unknown[]) => unknown>;
180
-
181
- const installDatabaseMethods = (instance: object, fakeDb = makeFakeDatabaseModel()) => {
182
- Object.entries({ ...dbMethods, ...filterMethods, ...metaFilterMethods }).forEach(([key, value]) => {
183
- if (key.startsWith("_") && key in instance) return;
184
- Object.assign(instance, { [key]: value });
185
- });
186
- Object.defineProperty(instance, "__databaseModel", { value: fakeDb, configurable: true, enumerable: true });
187
- Object.defineProperty(instance, "serviceTestItemModel", { value: fakeDb, configurable: true, enumerable: true });
188
- return fakeDb;
189
- };
190
- const setTestHook = (srv: TestHookServiceCls, key: string, hook: (...args: never[]) => unknown) => {
191
- Object.defineProperty(srv.prototype, key, { value: hook, configurable: true });
192
- };
193
-
194
- const originalServerMode = process.env.SERVER_MODE;
195
- const originalNodeEnv = process.env.NODE_ENV;
196
-
197
- beforeEach(() => {
198
- process.env.SERVER_MODE = originalServerMode;
199
- process.env.NODE_ENV = originalNodeEnv;
200
- });
201
-
202
- describe("adapt and serve factories", () => {
203
- test("creates adaptor classes with metadata and lifecycle defaults", async () => {
204
- const TestAdaptor = adapt("serviceTestAdaptor", ({ env }) => ({
205
- token: env((env: { token: string }) => env.token),
206
- }));
207
- const DangerousAdaptor = dangerouslyAdapt("serviceTestDangerous", ({ service }) => ({
208
- otherService: service<Service>(),
209
- }));
210
-
211
- expect(TestAdaptor.refName).toBe("serviceTestAdaptor");
212
- expect(TestAdaptor[INJECT_META].token.type).toBe("env");
213
- expect(DangerousAdaptor[INJECT_META].otherService.type).toBe("service");
214
-
215
- const adaptor = new TestAdaptor();
216
-
217
- expect(adaptor.logger).toBeDefined();
218
- await expect(adaptor.onInit()).resolves.toBeUndefined();
219
- await expect(adaptor.onDestroy()).resolves.toBeUndefined();
220
- });
221
-
222
- test("creates plain services with lowerlized names, enabled flags, and lifecycle mixins", async () => {
223
- const calls: string[] = [];
224
- class ParentOne extends serve("parentOne" as const, () => ({})) {
225
- override async onInit() {
226
- calls.push("parentOne:init");
227
- }
228
- override async onDestroy() {
229
- calls.push("parentOne:destroy");
230
- }
231
- parentOneMethod() {
232
- return "parent-one";
233
- }
234
- }
235
- class ParentTwo extends serve("parentTwo" as const, () => ({})) {
236
- override async onInit() {
237
- calls.push("parentTwo:init");
238
- }
239
- }
240
- process.env.SERVER_MODE = "batch";
241
- class ChildService extends serve(
242
- "ServiceTestChild" as const,
243
- { serverMode: "batch" },
244
- ({ use }) => ({ childUse: use<string>() }),
245
- ParentOne,
246
- ParentTwo,
247
- ) {
248
- override async onInit() {
249
- calls.push("child:init");
250
- }
251
- override async onDestroy() {
252
- calls.push("child:destroy");
253
- }
254
- childMethod() {
255
- return (this as unknown as ServiceInstance).parentOneMethod?.();
256
- }
257
- }
258
-
259
- const child = new ChildService();
260
-
261
- expect(ChildService.refName as string).toBe("serviceTestChild");
262
- expect(ChildService.type).toBe("plain");
263
- expect(ChildService.enabled).toBe(true);
264
- expect(ChildService[INJECT_META].childUse.type).toBe("use");
265
- expect(child.childMethod()).toBe("parent-one");
266
-
267
- await child._libsOnInit();
268
- await child._libsOnDestroy();
269
-
270
- expect(calls).toEqual(["parentOne:init", "parentTwo:init", "child:init", "parentOne:destroy", "child:destroy"]);
271
- });
272
-
273
- test("creates database services with database injection metadata", () => {
274
- class DbService extends serve(testItemDatabase, () => ({})) {}
275
- const injectMeta = DbService[INJECT_META] as Record<string, InjectInfo>;
276
-
277
- expect(DbService.refName).toBe("serviceTestItem");
278
- expect(DbService.type).toBe("database");
279
- expect(injectMeta.serviceTestItemModel?.type).toBe("database");
280
- expect(injectMeta.__databaseModel?.type).toBe("database");
281
- });
282
- });
283
-
284
- describe("service extension contracts", () => {
285
- class ParentService extends serve(testItemDatabase, ({ use }) => ({ parentUse: use<string>() })) {
286
- parentCallsChildMethod() {
287
- return (this as unknown as ServiceInstance).childOnlyMethod?.();
288
- }
289
- parentReadsChildProperty() {
290
- return (this as unknown as ServiceInstance).childToken;
291
- }
292
- async parentCallsChildDbHelper(id: string) {
293
- return await (this as unknown as ServiceInstance).getServiceTestItem(id);
294
- }
295
- async parentReturnsDoc() {
296
- return await (this as unknown as ServiceInstance).getServiceTestItem("parent-doc");
297
- }
298
- async parentReturnsDocs() {
299
- return await (this as unknown as ServiceInstance).listInCategory("notice");
300
- }
301
- collision() {
302
- return "parent";
303
- }
304
- }
305
-
306
- class SecondParentService extends serve(testItemDatabase, () => ({})) {
307
- secondParentMethod() {
308
- return "second-parent";
309
- }
310
- }
311
-
312
- class ChildService extends serve(
313
- testItemDatabase,
314
- ({ use }) => ({ childUse: use<string>() }),
315
- ParentService,
316
- SecondParentService,
317
- ) {
318
- childToken = "child-token";
319
- childOnlyMethod() {
320
- return "child-only";
321
- }
322
- childCallsParent() {
323
- const self = this as unknown as ServiceInstance;
324
- return `${self.parentCallsChildMethod?.()}:${self.secondParentMethod?.()}`;
325
- }
326
- override collision = () => "child";
327
- }
328
-
329
- test("parent methods run with the final child instance as this", async () => {
330
- const child = new ChildService() as unknown as ServiceInstance;
331
- const fakeDb = installDatabaseMethods(child);
332
-
333
- expect(child.parentCallsChildMethod?.()).toBe("child-only");
334
- expect(child.parentReadsChildProperty?.()).toBe("child-token");
335
- expect(await child.parentCallsChildDbHelper?.("id-1")).toMatchObject({ id: "id-1", title: "Alpha" });
336
- expect(child.childCallsParent?.()).toBe("child-only:second-parent");
337
- expect(child.collision?.()).toBe("child");
338
- expect(await child.parentReturnsDoc?.()).toMatchObject({ id: "parent-doc" });
339
- expect(await child.parentReturnsDocs?.()).toEqual([{ id: "doc-1", title: "Alpha", category: "notice", score: 10 }]);
340
- expect(fakeDb.calls.map((call) => call.method)).toEqual(["__get", "__get", "__list"]);
341
- });
342
- });
343
-
344
- describe("database service hook chains", () => {
345
- test("composes sync and async parent hooks around generated CRUD methods", async () => {
346
- const calls: string[] = [];
347
- class SyncParent extends serve(testItemDatabase, () => ({})) {}
348
- setTestHook(SyncParent, "_preCreate", ((data: TestItemDataInput) => {
349
- calls.push("sync:preCreate");
350
- return { ...data, syncPreCreate: true } as TestItemDataInput;
351
- }) as (...args: never[]) => unknown);
352
- setTestHook(SyncParent, "_postCreate", ((doc: TestItemDocInstance) => {
353
- calls.push("sync:postCreate");
354
- return { ...doc, syncPostCreate: true } as typeof doc;
355
- }) as (...args: never[]) => unknown);
356
- setTestHook(SyncParent, "_preUpdate", ((id: string, data: Partial<TestItemDocInstance>) => {
357
- calls.push(`sync:preUpdate:${id}`);
358
- return { ...data, syncPreUpdate: true } as typeof data;
359
- }) as (...args: never[]) => unknown);
360
- setTestHook(SyncParent, "_postUpdate", ((doc: TestItemDocInstance) => {
361
- calls.push("sync:postUpdate");
362
- return { ...doc, syncPostUpdate: true } as typeof doc;
363
- }) as (...args: never[]) => unknown);
364
- setTestHook(SyncParent, "_preRemove", ((id: string) => {
365
- calls.push(`sync:preRemove:${id}`);
366
- }) as (...args: never[]) => unknown);
367
- setTestHook(SyncParent, "_postRemove", ((doc: TestItemDocInstance) => {
368
- calls.push("sync:postRemove");
369
- return { ...doc, syncPostRemove: true } as typeof doc;
370
- }) as (...args: never[]) => unknown);
371
- class AsyncParent extends serve(testItemDatabase, () => ({})) {}
372
- setTestHook(AsyncParent, "_preCreate", (async (data: TestItemDataInput) => {
373
- calls.push("async:preCreate");
374
- return { ...data, asyncPreCreate: true } as TestItemDataInput;
375
- }) as (...args: never[]) => unknown);
376
- setTestHook(AsyncParent, "_postCreate", (async (doc: TestItemDocInstance) => {
377
- calls.push("async:postCreate");
378
- return { ...doc, asyncPostCreate: true } as typeof doc;
379
- }) as (...args: never[]) => unknown);
380
- class Child extends serve(testItemDatabase, () => ({}), SyncParent, AsyncParent) {}
381
- setTestHook(Child, "_preCreate", ((data: TestItemDataInput) => {
382
- calls.push("child:preCreate");
383
- return { ...data, childPreCreate: true } as TestItemDataInput;
384
- }) as (...args: never[]) => unknown);
385
- setTestHook(Child, "_postCreate", ((doc: TestItemDocInstance) => {
386
- calls.push("child:postCreate");
387
- return { ...doc, childPostCreate: true } as typeof doc;
388
- }) as (...args: never[]) => unknown);
389
- const child = new Child() as unknown as ServiceInstance;
390
- const fakeDb = installDatabaseMethods(child);
391
-
392
- const created = await child.createServiceTestItem({ title: "Created" } as never);
393
- const updated = await child.updateServiceTestItem("u-1", { title: "Updated" } as never);
394
- const removed = await child.removeServiceTestItem("r-1");
395
-
396
- expect(created).toMatchObject({
397
- syncPreCreate: true,
398
- asyncPreCreate: true,
399
- childPreCreate: true,
400
- syncPostCreate: true,
401
- asyncPostCreate: true,
402
- childPostCreate: true,
403
- });
404
- expect(updated).toMatchObject({ syncPreUpdate: true, syncPostUpdate: true });
405
- expect(removed).toMatchObject({ removed: true, syncPostRemove: true });
406
- expect(fakeDb.calls.find((call) => call.method === "__create")?.args[0]).toMatchObject({
407
- syncPreCreate: true,
408
- asyncPreCreate: true,
409
- childPreCreate: true,
410
- });
411
- expect(calls).toEqual([
412
- "sync:preCreate",
413
- "async:preCreate",
414
- "child:preCreate",
415
- "sync:postCreate",
416
- "async:postCreate",
417
- "child:postCreate",
418
- "sync:preUpdate:u-1",
419
- "sync:postUpdate",
420
- "sync:preRemove:r-1",
421
- "sync:postRemove",
422
- ]);
423
- });
424
-
425
- test("propagates parent hook errors before writes continue", async () => {
426
- class ThrowingParent extends serve(testItemDatabase, () => ({})) {}
427
- setTestHook(ThrowingParent, "_preCreate", ((data: TestItemDataInput) => {
428
- void data;
429
- throw new Error("parent pre create failed");
430
- }) as (...args: never[]) => unknown);
431
- class Child extends serve(testItemDatabase, () => ({}), ThrowingParent) {}
432
- const child = new Child() as unknown as ServiceInstance;
433
- const fakeDb = installDatabaseMethods(child);
434
-
435
- await expect(child.createServiceTestItem({ title: "Never" } as never)).rejects.toThrow("parent pre create failed");
436
- expect(fakeDb.calls.some((call) => call.method === "__create")).toBe(false);
437
- });
438
- });
439
-
440
- describe("dependency injection resolution", () => {
441
- const makeFakeCache = () => {
442
- const values = new Map<string, unknown>();
443
- const hashValues = new Map<string, Map<string, unknown>>();
444
- const calls: CallRecord[] = [];
445
- const cache = {
446
- calls,
447
- async get(topic: string, key: string) {
448
- calls.push({ method: "get", args: [topic, key] });
449
- return values.has(`${topic}:${key}`) ? values.get(`${topic}:${key}`) : null;
450
- },
451
- async set(topic: string, key: string, value: unknown) {
452
- calls.push({ method: "set", args: [topic, key, value] });
453
- values.set(`${topic}:${key}`, value);
454
- },
455
- async delete(topic: string, key: string) {
456
- calls.push({ method: "delete", args: [topic, key] });
457
- values.delete(`${topic}:${key}`);
458
- },
459
- async hget(topic: string, prop: string, key: string) {
460
- calls.push({ method: "hget", args: [topic, prop, key] });
461
- return hashValues.get(`${topic}:${prop}`)?.get(key);
462
- },
463
- async hset(topic: string, prop: string, key: string, value: unknown) {
464
- calls.push({ method: "hset", args: [topic, prop, key, value] });
465
- const hashKey = `${topic}:${prop}`;
466
- const map = hashValues.get(hashKey) ?? new Map<string, unknown>();
467
- map.set(key, value);
468
- hashValues.set(hashKey, map);
469
- },
470
- async hdelete(topic: string, prop: string, key: string) {
471
- calls.push({ method: "hdelete", args: [topic, prop, key] });
472
- hashValues.get(`${topic}:${prop}`)?.delete(key);
473
- },
474
- async hkeys(topic: string, prop: string) {
475
- calls.push({ method: "hkeys", args: [topic, prop] });
476
- return [...(hashValues.get(`${topic}:${prop}`)?.keys() ?? [])];
477
- },
478
- async hentries(topic: string, prop: string) {
479
- calls.push({ method: "hentries", args: [topic, prop] });
480
- return [...(hashValues.get(`${topic}:${prop}`)?.entries() ?? [])];
481
- },
482
- async hclear(topic: string, prop: string) {
483
- calls.push({ method: "hclear", args: [topic, prop] });
484
- hashValues.delete(`${topic}:${prop}`);
485
- },
486
- };
487
- return cache as CacheAdaptor & { calls: CallRecord[] };
488
- };
489
-
490
- test("validates memory injection options", () => {
491
- const builder = injectionBuilder("serviceTestInject");
492
-
493
- expect(() => builder.memory(String, { local: true, get: (value: string) => value, set: (value) => value })).toThrow(
494
- "get and set should not be provided",
495
- );
496
- expect(() => builder.memory(String, { get: (value: string) => value })).toThrow("get and set should be both");
497
- expect(() => builder.memory(Map)).toThrow("of should be provided");
498
- });
499
-
500
- test("resolves use, env, plug, service, database, signal, and memory injections", async () => {
501
- const cache = makeFakeCache();
502
- class CacheAdaptorRef extends adapt("solidCache") {}
503
- class PlugAdaptor extends adapt("serviceTestPlug") {
504
- value = "plug-value";
505
- }
506
- class DepService extends serve("dep" as const, () => ({})) {
507
- dep = "service-value";
508
- }
509
- class SignalRef {}
510
- const signal = { ping: () => "pong" } as unknown as ServerSignal;
511
- const database = makeFakeDatabaseModel();
512
- const registry = getDefaultInjectRegistry();
513
- const cacheAdaptor = cache as unknown as Adaptor;
514
- const plugAdaptor = new PlugAdaptor() as unknown as PlugAdaptor & Adaptor;
515
- const depService = new DepService();
516
-
517
- registry.uses.set("plainUse", "use-value");
518
- registry.adaptorCls.set("solidCache", CacheAdaptorRef);
519
- registry.adaptor.set(CacheAdaptorRef, cacheAdaptor);
520
- registry.adaptor.set(PlugAdaptor as unknown as AdaptorCls, plugAdaptor);
521
- registry.serviceCls.set("dep", DepService);
522
- registry.service.set(DepService, depService);
523
- registry.serverSignalCls.set("testSignal", SignalRef as unknown as ServerSignalCls);
524
- registry.serverSignal.set(SignalRef as unknown as ServerSignalCls, signal);
525
- registry.adaptorCls.set(
526
- "serviceTestItemModel",
527
- class ServiceTestItemModelAdaptor extends adapt("serviceTestItemModel") {},
528
- );
529
- const dbAdaptorCls = registry.adaptorCls.get("serviceTestItemModel") as AdaptorCls;
530
- registry.adaptor.set(dbAdaptorCls, database as unknown as Adaptor);
531
-
532
- class TargetService extends serve("serviceTestTarget" as const, ({ use, env, plug, service, signal, memory }) => ({
533
- plainUse: use<string>(),
534
- envValue: env((env: { envValue: string }) => env.envValue),
535
- plugValue: plug(PlugAdaptor as unknown as AdaptorCls<PlugAdaptor & Adaptor>, (adaptor) => adaptor.value),
536
- depService: service<DepService>(),
537
- testSignal: signal<typeof signal>(),
538
- localCounter: memory(Int, { local: true, default: 3 }),
539
- remoteValue: memory(String),
540
- remoteMap: memory(Map, { of: String }),
541
- })) {}
542
- Object.assign(TargetService[INJECT_META], {
543
- serviceTestItemModel: new InjectInfo("database", { parentRefName: "serviceTestItem" }),
544
- });
545
- const instance = new TargetService() as TargetService & {
546
- plainUse: string;
547
- envValue: string;
548
- plugValue: string;
549
- depService: DepService;
550
- testSignal: typeof signal;
551
- localCounter: number;
552
- remoteValue: {
553
- get: () => Promise<string | null>;
554
- set: (value: string) => Promise<void>;
555
- delete: () => Promise<void>;
556
- };
557
- remoteMap: {
558
- get: (key: string) => Promise<string | undefined>;
559
- set: (key: string, value: string) => Promise<void>;
560
- delete: (key: string) => Promise<void>;
561
- getOrInsert: (key: string, value: string) => Promise<string>;
562
- getOrInsertComputed: (key: string, compute: (key: string) => string | Promise<string>) => Promise<string>;
563
- keys: () => Promise<string[]>;
564
- entries: () => Promise<[string, string][]>;
565
- forEach: (callback: (value: string, key: string) => void | Promise<void>) => Promise<void>;
566
- clear: () => Promise<void>;
567
- };
568
- serviceTestItemModel: typeof database;
569
- };
570
- type RemoteMapGetValue = Awaited<ReturnType<TargetService["remoteMap"]["get"]>>;
571
- type _RemoteMapGetReturnsOptionalString = Expect<Equal<RemoteMapGetValue, string | undefined>>;
572
- type RemoteMapEntriesValue = Awaited<ReturnType<TargetService["remoteMap"]["entries"]>>;
573
- type _RemoteMapEntriesReturnsStringTuples = Expect<Equal<RemoteMapEntriesValue, [string, string][]>>;
574
-
575
- await InjectInfo.resolveInjection(instance, TargetService, registry, { envValue: "env-value" } as never);
576
-
577
- expect(instance.plainUse).toBe("use-value");
578
- expect(instance.envValue).toBe("env-value");
579
- expect(instance.plugValue as string).toBe("plug-value");
580
- expect(instance.depService).toBe(depService);
581
- expect(instance.testSignal as ServerSignal).toBe(signal);
582
- expect(instance.localCounter).toBe(3);
583
- instance.localCounter = 4;
584
- expect(instance.localCounter).toBe(4);
585
- expect(instance.serviceTestItemModel).toBe(database);
586
-
587
- await instance.remoteValue.set("hello");
588
- expect(await instance.remoteValue.get()).toBe("hello");
589
- await instance.remoteValue.delete();
590
- expect(await instance.remoteValue.get()).toBeNull();
591
- await instance.remoteMap.set("ko", "안녕");
592
- expect(await instance.remoteMap.get("ko")).toBe("안녕");
593
- await instance.remoteMap.delete("ko");
594
- expect(await instance.remoteMap.get("ko")).toBeUndefined();
595
- expect(await instance.remoteMap.getOrInsert("ko", "다시 안녕")).toBe("다시 안녕");
596
- expect(await instance.remoteMap.getOrInsert("ko", "덮어쓰기")).toBe("다시 안녕");
597
- expect(await instance.remoteMap.getOrInsertComputed("en", async (key) => `hello:${key}`)).toBe("hello:en");
598
- expect(await instance.remoteMap.getOrInsertComputed("en", () => "overwrite")).toBe("hello:en");
599
- expect(await instance.remoteMap.keys()).toEqual(["ko", "en"]);
600
- expect(await instance.remoteMap.entries()).toEqual([
601
- ["ko", "다시 안녕"],
602
- ["en", "hello:en"],
603
- ]);
604
- const seen: string[] = [];
605
- await instance.remoteMap.forEach((value, key) => {
606
- seen.push(`${key}:${value}`);
607
- });
608
- expect(seen).toEqual(["ko:다시 안녕", "en:hello:en"]);
609
- await instance.remoteMap.clear();
610
- expect(await instance.remoteMap.keys()).toEqual([]);
611
- expect(cache.calls.map((call) => call.method)).toContain("hdelete");
612
- expect(cache.calls.map((call) => call.method)).toContain("hclear");
613
-
614
- expect(Object.getOwnPropertyDescriptor(instance, "plainUse")).toMatchObject({ enumerable: true, writable: false });
615
- });
616
-
617
- test("throws meaningful errors for missing or badly named injections", async () => {
618
- const registry = getDefaultInjectRegistry();
619
- class BadServiceKey extends serve("badServiceKey" as const, () => ({})) {}
620
- Object.assign(BadServiceKey[INJECT_META], { dep: injectionBuilder("badServiceKey").service<Service>() });
621
-
622
- await expect(
623
- InjectInfo.resolveInjection(new BadServiceKey(), BadServiceKey, registry, {} as never),
624
- ).rejects.toThrow("Service inject key must end");
625
-
626
- class BadSignalKey extends serve("badSignalKey" as const, () => ({})) {}
627
- Object.assign(BadSignalKey[INJECT_META], { dep: injectionBuilder("badSignalKey").signal<ServerSignal>() });
628
-
629
- await expect(InjectInfo.resolveInjection(new BadSignalKey(), BadSignalKey, registry, {} as never)).rejects.toThrow(
630
- "Signal inject key must end",
631
- );
632
-
633
- class MissingUse extends serve("missingUse" as const, ({ use }) => ({ missing: use<string>() })) {}
634
- await expect(InjectInfo.resolveInjection(new MissingUse(), MissingUse, registry, {} as never)).rejects.toThrow(
635
- 'use "missing" has not been initialized',
636
- );
637
-
638
- class MissingMemory extends serve("missingMemory" as const, ({ memory }) => ({ value: memory(String) })) {}
639
- await expect(
640
- InjectInfo.resolveInjection(new MissingMemory(), MissingMemory, registry, {} as never),
641
- ).rejects.toThrow("Cache adaptor role is not registered");
642
- });
643
- });
644
-
645
- describe("ServiceModel generated methods", () => {
646
- test("creates service modules and merges srv maps", () => {
647
- class BaseSrv extends serve("baseSrv" as const, () => ({})) {}
648
- class OtherSrv extends serve("otherSrv" as const, () => ({})) {}
649
-
650
- const base = ServiceModel.from(BaseSrv);
651
- const other = ServiceModel.from(OtherSrv);
652
- const merged = base.with(other);
653
- const model = ServiceModel.fromModel(BaseSrv, testItemConstant, testItemDatabase);
654
-
655
- expect(base.srv).toBe(BaseSrv);
656
- expect(Object.keys(base.srvMap)).toEqual(["baseSrvService"]);
657
- expect(Object.keys(merged.srvMap).sort()).toEqual(["baseSrvService", "otherSrvService"]);
658
- expect(model.cnst).toBe(testItemConstant);
659
- expect(model.db).toBe(testItemDatabase);
660
- });
661
-
662
- test("delegates generated CRUD methods to database model", async () => {
663
- const fakeDb = makeFakeDatabaseModel();
664
- const service = { __databaseModel: fakeDb } as unknown as RuntimeServiceInstance;
665
- Object.assign(service, dbMethods);
666
-
667
- expect(await service.getServiceTestItem("g-1")).toMatchObject({ id: "g-1" });
668
- expect(await service.loadServiceTestItem("l-1")).toMatchObject({ id: "l-1" });
669
- expect(await service.loadServiceTestItemMany(["a", "b"])).toHaveLength(2);
670
- expect(fakeDb.calls.map((call) => call.method)).toEqual(["__get", "__load", "__loadMany"]);
671
- });
672
-
673
- test("delegates listener registration to database model", () => {
674
- const fakeDb = makeFakeDatabaseModel();
675
- const service = { __databaseModel: fakeDb } as unknown as RuntimeServiceInstance;
676
- Object.assign(service, dbMethods);
677
- const listener = () => undefined;
678
-
679
- const unlistenPre = service.listenPre("save", listener);
680
- const unlistenPost = service.listenPost("save", listener);
681
- unlistenPre();
682
- unlistenPost();
683
-
684
- expect(fakeDb.calls.map((call) => call.method)).toEqual(["listenPre", "listenPost", "unlistenPre", "unlistenPost"]);
685
- });
686
- });
687
-
688
- describe("filter query and sort utility methods", () => {
689
- test("generates all filter utility methods from a FilterInfo query", async () => {
690
- const fakeDb = makeFakeDatabaseModel();
691
- const service = { __databaseModel: fakeDb } as unknown as RuntimeServiceInstance;
692
- Object.assign(service, dbMethods, filterMethods);
693
-
694
- expect(service.queryInCategory("notice")).toEqual({ category: "notice" });
695
- expect(service.queryInCategory(undefined)).toEqual({ category: undefined });
696
- expect(await service.listInCategory("notice", { limit: 2, sort: "scoreHigh" })).toHaveLength(1);
697
- expect(await service.listIdsInCategory("notice", { skip: 1 })).toEqual(["doc-1"]);
698
- expect(await service.findInCategory("notice", { select: { title: true } })).toMatchObject({
699
- title: "Alpha",
700
- });
701
- expect(await service.findIdInCategory("notice")).toBe("doc-1");
702
- expect(await service.pickInCategory("notice")).toMatchObject({ id: "doc-1" });
703
- expect(await service.pickIdInCategory("notice")).toBe("doc-1");
704
- expect(await service.existsInCategory("notice")).toBe("doc-1");
705
- expect(await service.countInCategory("notice")).toBe(1);
706
- expect(await service.insightInCategory("notice")).toEqual({ count: 1 });
707
-
708
- expect(fakeDb.calls).toEqual([
709
- { method: "__list", args: [{ category: "notice" }, { limit: 2, sort: "scoreHigh" }] },
710
- { method: "__listIds", args: [{ category: "notice" }, { skip: 1 }] },
711
- { method: "__find", args: [{ category: "notice" }, { select: { title: true } }] },
712
- { method: "__findId", args: [{ category: "notice" }, {}] },
713
- { method: "__pick", args: [{ category: "notice" }, {}] },
714
- { method: "__pickId", args: [{ category: "notice" }, {}] },
715
- { method: "__exists", args: [{ category: "notice" }] },
716
- { method: "__count", args: [{ category: "notice" }] },
717
- { method: "__insight", args: [{ category: "notice" }] },
718
- ]);
719
- });
720
-
721
- test("keeps final ordinary objects as query args instead of query options", async () => {
722
- const fakeDb = makeFakeDatabaseModel();
723
- const service = { __databaseModel: fakeDb } as unknown as RuntimeServiceInstance;
724
- Object.assign(service, dbMethods, metaFilterMethods);
725
- const meta = { select: "business-value", nested: { ok: true } };
726
-
727
- expect(service.queryWithMeta(meta)).toEqual({ meta });
728
- await service.listWithMeta(meta);
729
-
730
- expect(fakeDb.calls).toEqual([{ method: "__list", args: [{ meta }, {}] }]);
731
- });
732
- });