@primate/core 0.4.6 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (556) hide show
  1. package/lib/private/App.d.ts +771 -6
  2. package/lib/private/App.js +49 -16
  3. package/lib/private/Binder.d.ts +2 -2
  4. package/lib/private/Flags.d.ts +8 -4
  5. package/lib/private/Module.d.ts +4 -16
  6. package/lib/private/Module.js +1 -17
  7. package/lib/private/app/EnvSchema.d.ts +5 -0
  8. package/lib/private/app/EnvSchema.js +2 -0
  9. package/lib/private/app/Facade.browser.d.ts +11 -0
  10. package/lib/private/app/Facade.browser.js +19 -0
  11. package/lib/private/app/Facade.d.ts +811 -0
  12. package/lib/private/app/Facade.js +56 -0
  13. package/lib/private/asset/Asset.d.ts +1 -1
  14. package/lib/private/build/App.d.ts +2 -2
  15. package/lib/private/build/App.js +0 -2
  16. package/lib/private/build/client/index.js +19 -10
  17. package/lib/private/build/client/plugin/app-request.d.ts +4 -0
  18. package/lib/private/build/client/plugin/app-request.js +19 -0
  19. package/lib/private/build/client/plugin/view.d.ts +4 -0
  20. package/lib/private/build/client/plugin/view.js +13 -0
  21. package/lib/private/build/hook.d.ts +1 -2
  22. package/lib/private/build/hook.js +25 -19
  23. package/lib/private/build/index.d.ts +2 -1
  24. package/lib/private/build/index.js +27 -27
  25. package/lib/private/build/presets.d.ts +10 -0
  26. package/lib/private/build/presets.js +39 -0
  27. package/lib/private/build/server/index.js +10 -14
  28. package/lib/private/build/server/plugin/app-request.d.ts +4 -0
  29. package/lib/private/build/server/plugin/app-request.js +19 -0
  30. package/lib/private/build/server/plugin/assets.js +9 -7
  31. package/lib/private/build/server/plugin/config.js +11 -4
  32. package/lib/private/build/server/plugin/frontend.js +4 -2
  33. package/lib/private/build/server/plugin/live-reload.d.ts +4 -0
  34. package/lib/private/build/server/plugin/{hot-reload.js → live-reload.js} +12 -12
  35. package/lib/private/build/server/plugin/native-addons.js +10 -11
  36. package/lib/private/build/server/plugin/node-imports.js +2 -2
  37. package/lib/private/build/server/plugin/route.js +4 -4
  38. package/lib/private/build/server/plugin/store.js +11 -33
  39. package/lib/private/build/server/plugin/stores.js +12 -9
  40. package/lib/private/build/server/plugin/view.js +5 -5
  41. package/lib/private/build/server/plugin/views.js +4 -4
  42. package/lib/private/build/server/plugin/virtual-pages.js +8 -8
  43. package/lib/private/build/server/plugin/virtual-routes.js +8 -13
  44. package/lib/private/build/server/plugin/wasm.js +2 -3
  45. package/lib/private/build/shared/plugin/app-request.d.ts +4 -0
  46. package/lib/private/build/shared/plugin/app-request.js +19 -0
  47. package/lib/private/bye.js +2 -3
  48. package/lib/private/client/Data.d.ts +3 -2
  49. package/lib/private/client/Render.d.ts +8 -0
  50. package/lib/private/{frontend → client}/ServerData.d.ts +1 -1
  51. package/lib/private/client/ServerView.d.ts +4 -0
  52. package/lib/private/client/ValidateInit.d.ts +1 -3
  53. package/lib/private/client/ValidationError.d.ts +1 -1
  54. package/lib/private/{frontend → client}/View.d.ts +1 -1
  55. package/lib/private/{frontend → client}/ViewOptions.d.ts +1 -1
  56. package/lib/private/{frontend → client}/ViewResponse.d.ts +2 -2
  57. package/lib/private/client/app.js +3 -3
  58. package/lib/private/client/boot.d.ts +5 -0
  59. package/lib/private/client/boot.js +64 -0
  60. package/lib/private/client/create-form.d.ts +32 -0
  61. package/lib/private/client/create-form.js +123 -0
  62. package/lib/private/client/extract-issues.d.ts +4 -0
  63. package/lib/private/client/extract-issues.js +21 -0
  64. package/lib/private/client/http.d.ts +13 -0
  65. package/lib/private/client/http.js +57 -0
  66. package/lib/private/client/index.d.ts +23 -0
  67. package/lib/private/client/index.js +16 -0
  68. package/lib/private/client/navigate.d.ts +13 -0
  69. package/lib/private/client/navigate.js +67 -0
  70. package/lib/private/client/root.d.ts +9 -0
  71. package/lib/private/client/root.js +11 -0
  72. package/lib/private/client/submit.d.ts +2 -0
  73. package/lib/private/client/submit.js +41 -0
  74. package/lib/private/client/{toValidated.d.ts → to-validated.d.ts} +2 -4
  75. package/lib/private/client/{toValidated.js → to-validated.js} +1 -1
  76. package/lib/private/client/validate-field.d.ts +3 -0
  77. package/lib/private/client/validate-field.js +41 -0
  78. package/lib/private/config/index.d.ts +7 -21
  79. package/lib/private/config/index.js +4 -1
  80. package/lib/private/config/schema.d.ts +82 -22
  81. package/lib/private/config/schema.js +25 -7
  82. package/lib/private/cookie.d.ts +12 -6
  83. package/lib/private/cookie.js +10 -14
  84. package/lib/private/db/As.d.ts +10 -0
  85. package/lib/private/db/DB.d.ts +49 -0
  86. package/lib/private/db/DB.js +3 -0
  87. package/lib/private/db/DataDict.d.ts +5 -0
  88. package/lib/private/db/DataKey.d.ts +4 -0
  89. package/lib/private/db/DataValue.d.ts +17 -0
  90. package/lib/private/db/MemoryDB.d.ts +33 -0
  91. package/lib/private/db/MemoryDB.js +335 -0
  92. package/lib/private/db/PK.d.ts +3 -0
  93. package/lib/private/db/PK.js +2 -0
  94. package/lib/private/{database → db}/Query.d.ts +2 -2
  95. package/lib/private/{database → db}/QueryBuilder.d.ts +2 -3
  96. package/lib/private/db/ReadArgs.d.ts +9 -0
  97. package/lib/private/db/ReadArgs.js +2 -0
  98. package/lib/private/db/ReadRelationsArgs.d.ts +6 -0
  99. package/lib/private/db/ReadRelationsArgs.js +2 -0
  100. package/lib/private/{database → db}/Schema.d.ts +1 -2
  101. package/lib/private/db/Sort.d.ts +4 -0
  102. package/lib/private/{database → db}/TypeMap.d.ts +2 -3
  103. package/lib/private/{database → db}/Types.d.ts +1 -1
  104. package/lib/private/db/With.d.ts +16 -0
  105. package/lib/private/db/With.js +2 -0
  106. package/lib/private/db/common.d.ts +25 -0
  107. package/lib/private/db/common.js +67 -0
  108. package/lib/private/db/errors.d.ts +104 -0
  109. package/lib/private/db/errors.js +237 -0
  110. package/lib/private/db/migrate/apply.d.ts +2 -0
  111. package/lib/private/db/migrate/apply.js +32 -0
  112. package/lib/private/db/migrate/bundle.d.ts +3 -0
  113. package/lib/private/db/migrate/bundle.js +22 -0
  114. package/lib/private/db/migrate/create.d.ts +2 -0
  115. package/lib/private/db/migrate/create.js +154 -0
  116. package/lib/private/db/migrate/index.d.ts +10 -0
  117. package/lib/private/db/migrate/index.js +6 -0
  118. package/lib/private/db/migrate/status.d.ts +2 -0
  119. package/lib/private/db/migrate/status.js +38 -0
  120. package/lib/private/db/migrate/store.d.ts +5 -0
  121. package/lib/private/db/migrate/store.js +33 -0
  122. package/lib/private/db/sql.d.ts +28 -0
  123. package/lib/private/db/sql.js +177 -0
  124. package/lib/private/db/storage.d.ts +3 -0
  125. package/lib/private/db/storage.js +3 -0
  126. package/lib/private/db/symbol.js +2 -0
  127. package/lib/private/db/test.d.ts +4 -0
  128. package/lib/private/db/test.js +1750 -0
  129. package/lib/private/errors.d.ts +88 -0
  130. package/lib/private/errors.js +211 -0
  131. package/lib/private/frontend.d.ts +72 -0
  132. package/lib/private/frontend.js +245 -0
  133. package/lib/private/hash.js +0 -1
  134. package/lib/private/i18n/Catalog.d.ts +5 -2
  135. package/lib/private/i18n/Formatter.js +21 -9
  136. package/lib/private/i18n/errors.d.ts +16 -0
  137. package/lib/private/i18n/errors.js +27 -0
  138. package/lib/private/i18n/format.d.ts +4 -0
  139. package/lib/private/i18n/format.js +95 -0
  140. package/lib/private/i18n/index/client.d.ts +9 -0
  141. package/lib/private/i18n/index/client.js +152 -0
  142. package/lib/private/i18n/index/server.d.ts +9 -0
  143. package/lib/private/i18n/index/server.js +57 -0
  144. package/lib/private/i18n/index/types.d.ts +33 -0
  145. package/lib/private/i18n/index/types.js +2 -0
  146. package/lib/private/i18n/locale.d.ts +9 -3
  147. package/lib/private/i18n/module.d.ts +3 -0
  148. package/lib/private/i18n/module.js +115 -0
  149. package/lib/private/i18n/ordinals.d.ts +1 -1
  150. package/lib/private/i18n/resolve.d.ts +7 -0
  151. package/lib/private/i18n/resolve.js +30 -0
  152. package/lib/private/i18n/schema.d.ts +10 -5
  153. package/lib/private/i18n/schema.js +6 -10
  154. package/lib/private/i18n/storage.d.ts +3 -0
  155. package/lib/private/i18n/storage.js +5 -0
  156. package/lib/private/i18n/validate.d.ts +2 -0
  157. package/lib/private/i18n/validate.js +19 -0
  158. package/lib/private/index.d.ts +14 -0
  159. package/lib/private/index.js +2 -0
  160. package/lib/private/log.d.ts +1 -0
  161. package/lib/private/log.js +15 -14
  162. package/lib/private/module/Hook.d.ts +1 -1
  163. package/lib/private/module/Next.d.ts +1 -1
  164. package/lib/private/module/Setup.d.ts +21 -0
  165. package/lib/private/module/Setup.js +2 -0
  166. package/lib/private/module/create.d.ts +16 -0
  167. package/lib/private/module/create.js +28 -0
  168. package/lib/private/orm/ExtractSchema.d.ts +9 -0
  169. package/lib/private/orm/ExtractSchema.js +2 -0
  170. package/lib/private/orm/ForeignKey.d.ts +14 -0
  171. package/lib/private/orm/ForeignKey.js +25 -0
  172. package/lib/private/orm/PrimaryKey.d.ts +17 -0
  173. package/lib/private/orm/PrimaryKey.js +38 -0
  174. package/lib/private/orm/StoreInput.d.ts +10 -0
  175. package/lib/private/orm/StoreInput.js +2 -0
  176. package/lib/private/orm/key.d.ts +8 -0
  177. package/lib/private/orm/key.js +8 -0
  178. package/lib/private/orm/parse.d.ts +13 -0
  179. package/lib/private/orm/parse.js +29 -0
  180. package/lib/private/orm/relation.d.ts +43 -0
  181. package/lib/private/orm/relation.js +26 -0
  182. package/lib/private/orm/store.d.ts +187 -0
  183. package/lib/private/orm/store.js +542 -0
  184. package/lib/private/paths.d.ts +2 -2
  185. package/lib/private/paths.js +3 -3
  186. package/lib/private/request/RequestBag.d.ts +5 -1
  187. package/lib/private/request/RequestBag.js +16 -9
  188. package/lib/private/request/RequestBody.d.ts +6 -11
  189. package/lib/private/request/RequestBody.js +51 -59
  190. package/lib/private/request/RequestContext.d.ts +12 -0
  191. package/lib/private/request/RequestContext.js +31 -0
  192. package/lib/private/request/RequestFacade.d.ts +11 -6
  193. package/lib/private/request/RequestPublic.d.ts +9 -0
  194. package/lib/private/request/RequestPublic.js +2 -0
  195. package/lib/private/request/RequestView.d.ts +11 -0
  196. package/lib/private/request/RequestView.js +3 -0
  197. package/lib/private/request/handle.d.ts +4 -0
  198. package/lib/private/request/handle.js +18 -0
  199. package/lib/private/request/parse.d.ts +2 -2
  200. package/lib/private/request/parse.js +55 -16
  201. package/lib/private/request/route.js +37 -22
  202. package/lib/private/request/router.d.ts +1 -1
  203. package/lib/private/request/router.js +22 -50
  204. package/lib/private/{database/symbol/wrap.d.ts → request/sContext.d.ts} +1 -1
  205. package/lib/private/request/sContext.js +2 -0
  206. package/lib/private/request/storage.d.ts +4 -0
  207. package/lib/private/request/storage.js +5 -0
  208. package/lib/private/response/ResponseFunction.d.ts +2 -3
  209. package/lib/private/response/ResponseLike.d.ts +1 -1
  210. package/lib/private/response/binary.d.ts +1 -1
  211. package/lib/private/response/binary.js +4 -3
  212. package/lib/private/response/error.d.ts +1 -1
  213. package/lib/private/response/error.js +1 -1
  214. package/lib/private/response/json.d.ts +1 -1
  215. package/lib/private/response/json.js +2 -2
  216. package/lib/private/response/redirect.d.ts +5 -5
  217. package/lib/private/response/redirect.js +9 -10
  218. package/lib/private/response/respond.js +16 -17
  219. package/lib/private/response/sse.d.ts +1 -1
  220. package/lib/private/response/sse.js +2 -2
  221. package/lib/private/response/text.d.ts +1 -1
  222. package/lib/private/response/text.js +3 -3
  223. package/lib/private/response/view.d.ts +3 -3
  224. package/lib/private/response/view.js +7 -14
  225. package/lib/private/response/ws.d.ts +1 -1
  226. package/lib/private/response.d.ts +1 -1
  227. package/lib/private/route/Handler.d.ts +1 -1
  228. package/lib/private/route/hook.d.ts +6 -0
  229. package/lib/private/route/hook.js +5 -0
  230. package/lib/private/route/router.d.ts +6 -2
  231. package/lib/private/route/router.js +32 -18
  232. package/lib/private/route/wrap.js +2 -2
  233. package/lib/private/serve/App.d.ts +11 -25
  234. package/lib/private/serve/App.js +138 -120
  235. package/lib/private/serve/Init.d.ts +5 -5
  236. package/lib/private/serve/dev-module.d.ts +2 -0
  237. package/lib/private/serve/dev-module.js +34 -0
  238. package/lib/private/serve/hook.d.ts +1 -2
  239. package/lib/private/serve/hook.js +2 -9
  240. package/lib/private/serve/index.d.ts +1 -1
  241. package/lib/private/serve/index.js +36 -2
  242. package/lib/private/server/TAG.d.ts +3 -0
  243. package/lib/private/server/TAG.js +2 -0
  244. package/lib/private/server/index.d.ts +5 -0
  245. package/lib/private/server/index.js +6 -0
  246. package/lib/private/session/Data.d.ts +1 -2
  247. package/lib/private/session/SessionHandle.d.ts +1 -1
  248. package/lib/private/session/SessionHandle.js +11 -9
  249. package/lib/private/session/index.d.ts +3 -4
  250. package/lib/private/session/module.d.ts +3 -0
  251. package/lib/private/session/module.js +114 -0
  252. package/lib/private/session/schema.d.ts +17 -9
  253. package/lib/private/session/schema.js +11 -6
  254. package/lib/private/session/storage.d.ts +1 -2
  255. package/lib/private/session/storage.js +2 -2
  256. package/lib/private/tags.js +2 -2
  257. package/lib/private/target/Manager.js +6 -12
  258. package/lib/private/target/Target.d.ts +1 -1
  259. package/lib/public/AppFacade.d.ts +2 -0
  260. package/lib/public/AppFacade.js +2 -0
  261. package/lib/public/build/presets.d.ts +2 -0
  262. package/lib/public/build/presets.js +2 -0
  263. package/lib/public/build/transform.d.ts +2 -0
  264. package/lib/public/build/transform.js +2 -0
  265. package/lib/public/client.d.ts +3 -0
  266. package/lib/public/client.js +2 -0
  267. package/lib/public/db/MemoryDB.d.ts +2 -0
  268. package/lib/public/db/MemoryDB.js +2 -0
  269. package/lib/public/db/errors.d.ts +2 -0
  270. package/lib/public/db/errors.js +2 -0
  271. package/lib/public/db/migrate.d.ts +2 -0
  272. package/lib/public/db/migrate.js +2 -0
  273. package/lib/public/db/sql.d.ts +2 -0
  274. package/lib/public/db/sql.js +2 -0
  275. package/lib/public/db/test.d.ts +2 -0
  276. package/lib/public/db/test.js +2 -0
  277. package/lib/public/db.d.ts +12 -0
  278. package/lib/public/db.js +2 -0
  279. package/lib/public/frontend.d.ts +3 -0
  280. package/lib/public/frontend.js +2 -0
  281. package/lib/public/index.d.ts +2 -0
  282. package/lib/public/index.js +2 -0
  283. package/lib/public/orm/key.d.ts +2 -0
  284. package/lib/public/orm/key.js +2 -0
  285. package/lib/public/orm/relation.d.ts +2 -0
  286. package/lib/public/orm/relation.js +2 -0
  287. package/lib/public/orm/store.d.ts +2 -0
  288. package/lib/public/orm/store.js +2 -0
  289. package/lib/public/request/server.d.ts +5 -0
  290. package/lib/public/request/server.js +7 -0
  291. package/lib/public/response.d.ts +22 -0
  292. package/lib/public/response.js +19 -0
  293. package/lib/public/route/hook.d.ts +2 -0
  294. package/lib/public/route/hook.js +2 -0
  295. package/lib/public/server.d.ts +3 -0
  296. package/lib/public/server.js +2 -0
  297. package/package.json +40 -30
  298. package/lib/private/AppError.d.ts +0 -4
  299. package/lib/private/AppError.js +0 -8
  300. package/lib/private/backend/Module.d.ts +0 -18
  301. package/lib/private/backend/Module.js +0 -22
  302. package/lib/private/backend/TAG.d.ts +0 -3
  303. package/lib/private/backend/TAG.js +0 -2
  304. package/lib/private/build/client/reload.d.ts +0 -7
  305. package/lib/private/build/client/reload.js +0 -6
  306. package/lib/private/build/server/plugin/database-default.d.ts +0 -4
  307. package/lib/private/build/server/plugin/database-default.js +0 -48
  308. package/lib/private/build/server/plugin/hot-reload.d.ts +0 -4
  309. package/lib/private/build/server/plugin/store-wrap.d.ts +0 -4
  310. package/lib/private/build/server/plugin/store-wrap.js +0 -33
  311. package/lib/private/client/spa/index.d.ts +0 -6
  312. package/lib/private/client/spa/index.js +0 -201
  313. package/lib/private/client/validate.d.ts +0 -3
  314. package/lib/private/client/validate.js +0 -54
  315. package/lib/private/database/As.d.ts +0 -7
  316. package/lib/private/database/Binds.d.ts +0 -4
  317. package/lib/private/database/Binds.js +0 -2
  318. package/lib/private/database/Changes.d.ts +0 -11
  319. package/lib/private/database/Changes.js +0 -2
  320. package/lib/private/database/ColumnTypes.d.ts +0 -11
  321. package/lib/private/database/ColumnTypes.js +0 -2
  322. package/lib/private/database/DataDict.d.ts +0 -5
  323. package/lib/private/database/DataKey.d.ts +0 -4
  324. package/lib/private/database/DataValue.d.ts +0 -5
  325. package/lib/private/database/Database.d.ts +0 -56
  326. package/lib/private/database/Database.js +0 -153
  327. package/lib/private/database/InMemoryDatabase.d.ts +0 -37
  328. package/lib/private/database/InMemoryDatabase.js +0 -181
  329. package/lib/private/database/Sort.d.ts +0 -4
  330. package/lib/private/database/Store.d.ts +0 -172
  331. package/lib/private/database/Store.js +0 -261
  332. package/lib/private/database/storage.d.ts +0 -4
  333. package/lib/private/database/storage.js +0 -3
  334. package/lib/private/database/symbol/wrap.js +0 -2
  335. package/lib/private/database/symbol.js +0 -2
  336. package/lib/private/database/test.d.ts +0 -4
  337. package/lib/private/database/test.js +0 -678
  338. package/lib/private/database/wrap.d.ts +0 -5
  339. package/lib/private/database/wrap.js +0 -5
  340. package/lib/private/fail.d.ts +0 -3
  341. package/lib/private/fail.js +0 -5
  342. package/lib/private/frontend/Module.d.ts +0 -62
  343. package/lib/private/frontend/Module.js +0 -250
  344. package/lib/private/frontend/Render.d.ts +0 -9
  345. package/lib/private/frontend/ServerView.d.ts +0 -5
  346. package/lib/private/i18n/Module.d.ts +0 -16
  347. package/lib/private/i18n/Module.js +0 -122
  348. package/lib/private/i18n/index.d.ts +0 -28
  349. package/lib/private/i18n/index.js +0 -236
  350. package/lib/private/module/BuildHook.d.ts +0 -5
  351. package/lib/private/module/BuildHook.js +0 -2
  352. package/lib/private/module/NextBuild.d.ts +0 -5
  353. package/lib/private/module/NextBuild.js +0 -2
  354. package/lib/private/module/NextServe.d.ts +0 -5
  355. package/lib/private/module/NextServe.js +0 -2
  356. package/lib/private/reducer.d.ts +0 -24
  357. package/lib/private/reducer.js +0 -10
  358. package/lib/private/route/guard.d.ts +0 -4
  359. package/lib/private/route/guard.js +0 -22
  360. package/lib/private/serve/module/Dev.d.ts +0 -11
  361. package/lib/private/serve/module/Dev.js +0 -28
  362. package/lib/private/serve/module/Handle.d.ts +0 -10
  363. package/lib/private/serve/module/Handle.js +0 -15
  364. package/lib/private/session/SessionModule.d.ts +0 -14
  365. package/lib/private/session/SessionModule.js +0 -122
  366. package/lib/private/wasm/API.d.ts +0 -7
  367. package/lib/private/wasm/API.js +0 -2
  368. package/lib/private/wasm/BufferViewSource.d.ts +0 -4
  369. package/lib/private/wasm/BufferViewSource.js +0 -2
  370. package/lib/private/wasm/Exports.d.ts +0 -23
  371. package/lib/private/wasm/Exports.js +0 -2
  372. package/lib/private/wasm/I32.d.ts +0 -5
  373. package/lib/private/wasm/I32.js +0 -2
  374. package/lib/private/wasm/I32_SIZE.d.ts +0 -3
  375. package/lib/private/wasm/I32_SIZE.js +0 -2
  376. package/lib/private/wasm/Instantiation.d.ts +0 -12
  377. package/lib/private/wasm/Instantiation.js +0 -2
  378. package/lib/private/wasm/Tagged.d.ts +0 -7
  379. package/lib/private/wasm/Tagged.js +0 -2
  380. package/lib/private/wasm/buffersize.d.ts +0 -2
  381. package/lib/private/wasm/buffersize.js +0 -5
  382. package/lib/private/wasm/decode-bytes.d.ts +0 -3
  383. package/lib/private/wasm/decode-bytes.js +0 -5
  384. package/lib/private/wasm/decode-json.d.ts +0 -7
  385. package/lib/private/wasm/decode-json.js +0 -11
  386. package/lib/private/wasm/decode-option.d.ts +0 -5
  387. package/lib/private/wasm/decode-option.js +0 -10
  388. package/lib/private/wasm/decode-response.d.ts +0 -19
  389. package/lib/private/wasm/decode-response.js +0 -90
  390. package/lib/private/wasm/decode-string.d.ts +0 -3
  391. package/lib/private/wasm/decode-string.js +0 -5
  392. package/lib/private/wasm/decode-websocket-close.d.ts +0 -5
  393. package/lib/private/wasm/decode-websocket-close.js +0 -6
  394. package/lib/private/wasm/decode-websocket-send.d.ts +0 -6
  395. package/lib/private/wasm/decode-websocket-send.js +0 -19
  396. package/lib/private/wasm/encode-buffer.d.ts +0 -3
  397. package/lib/private/wasm/encode-buffer.js +0 -6
  398. package/lib/private/wasm/encode-request.d.ts +0 -9
  399. package/lib/private/wasm/encode-request.js +0 -195
  400. package/lib/private/wasm/encode-session.d.ts +0 -3
  401. package/lib/private/wasm/encode-session.js +0 -25
  402. package/lib/private/wasm/encode-string-map.d.ts +0 -5
  403. package/lib/private/wasm/encode-string-map.js +0 -14
  404. package/lib/private/wasm/encode-string.d.ts +0 -13
  405. package/lib/private/wasm/encode-string.js +0 -17
  406. package/lib/private/wasm/encode-url.d.ts +0 -11
  407. package/lib/private/wasm/encode-url.js +0 -14
  408. package/lib/private/wasm/encode-websocket-close.d.ts +0 -2
  409. package/lib/private/wasm/encode-websocket-close.js +0 -7
  410. package/lib/private/wasm/encode-websocket-message.d.ts +0 -4
  411. package/lib/private/wasm/encode-websocket-message.js +0 -30
  412. package/lib/private/wasm/encode-websocket-open.d.ts +0 -2
  413. package/lib/private/wasm/encode-websocket-open.js +0 -7
  414. package/lib/private/wasm/filesize.d.ts +0 -2
  415. package/lib/private/wasm/filesize.js +0 -8
  416. package/lib/private/wasm/instantiate.d.ts +0 -37
  417. package/lib/private/wasm/instantiate.js +0 -408
  418. package/lib/private/wasm/open-websocket.d.ts +0 -4
  419. package/lib/private/wasm/open-websocket.js +0 -26
  420. package/lib/private/wasm/stringsize.d.ts +0 -3
  421. package/lib/private/wasm/stringsize.js +0 -5
  422. package/lib/private/wasm/urlsize.d.ts +0 -2
  423. package/lib/private/wasm/urlsize.js +0 -5
  424. package/lib/public/App.d.ts +0 -2
  425. package/lib/public/App.js +0 -2
  426. package/lib/public/AppError.d.ts +0 -2
  427. package/lib/public/AppError.js +0 -2
  428. package/lib/public/BuildApp.d.ts +0 -2
  429. package/lib/public/BuildApp.js +0 -2
  430. package/lib/public/BuildHook.d.ts +0 -2
  431. package/lib/public/BuildHook.js +0 -2
  432. package/lib/public/Database.d.ts +0 -2
  433. package/lib/public/Database.js +0 -2
  434. package/lib/public/Mode.d.ts +0 -2
  435. package/lib/public/Mode.js +0 -2
  436. package/lib/public/Module.d.ts +0 -2
  437. package/lib/public/Module.js +0 -2
  438. package/lib/public/Next.d.ts +0 -2
  439. package/lib/public/Next.js +0 -2
  440. package/lib/public/NextBuild.d.ts +0 -2
  441. package/lib/public/NextBuild.js +0 -2
  442. package/lib/public/NextHandle.d.ts +0 -2
  443. package/lib/public/NextHandle.js +0 -2
  444. package/lib/public/NextRoute.d.ts +0 -3
  445. package/lib/public/NextRoute.js +0 -2
  446. package/lib/public/NextServe.d.ts +0 -2
  447. package/lib/public/NextServe.js +0 -2
  448. package/lib/public/ServeApp.d.ts +0 -2
  449. package/lib/public/ServeApp.js +0 -2
  450. package/lib/public/Target.d.ts +0 -2
  451. package/lib/public/Target.js +0 -2
  452. package/lib/public/backend/Module.d.ts +0 -2
  453. package/lib/public/backend/Module.js +0 -2
  454. package/lib/public/backend/TAG.d.ts +0 -2
  455. package/lib/public/backend/TAG.js +0 -2
  456. package/lib/public/client/Data.d.ts +0 -2
  457. package/lib/public/client/Data.js +0 -2
  458. package/lib/public/client/ValidateInit.d.ts +0 -2
  459. package/lib/public/client/ValidateInit.js +0 -2
  460. package/lib/public/client/ValidateUpdater.d.ts +0 -2
  461. package/lib/public/client/ValidateUpdater.js +0 -2
  462. package/lib/public/client/ValidationError.d.ts +0 -2
  463. package/lib/public/client/ValidationError.js +0 -2
  464. package/lib/public/client/spa.d.ts +0 -2
  465. package/lib/public/client/spa.js +0 -2
  466. package/lib/public/client/toValidated.d.ts +0 -2
  467. package/lib/public/client/toValidated.js +0 -2
  468. package/lib/public/client/validate.d.ts +0 -2
  469. package/lib/public/client/validate.js +0 -2
  470. package/lib/public/database/As.d.ts +0 -2
  471. package/lib/public/database/As.js +0 -2
  472. package/lib/public/database/DataDict.d.ts +0 -2
  473. package/lib/public/database/DataDict.js +0 -2
  474. package/lib/public/database/InMemoryDatabase.d.ts +0 -2
  475. package/lib/public/database/InMemoryDatabase.js +0 -2
  476. package/lib/public/database/Sort.d.ts +0 -2
  477. package/lib/public/database/Sort.js +0 -2
  478. package/lib/public/database/Store.d.ts +0 -2
  479. package/lib/public/database/Store.js +0 -2
  480. package/lib/public/database/TypeMap.d.ts +0 -2
  481. package/lib/public/database/TypeMap.js +0 -2
  482. package/lib/public/database/Types.d.ts +0 -2
  483. package/lib/public/database/Types.js +0 -2
  484. package/lib/public/database/test.d.ts +0 -2
  485. package/lib/public/database/test.js +0 -2
  486. package/lib/public/database/wrap.d.ts +0 -2
  487. package/lib/public/database/wrap.js +0 -2
  488. package/lib/public/fail.d.ts +0 -2
  489. package/lib/public/fail.js +0 -2
  490. package/lib/public/frontend/Module.d.ts +0 -2
  491. package/lib/public/frontend/Module.js +0 -2
  492. package/lib/public/frontend/Publish.d.ts +0 -2
  493. package/lib/public/frontend/Publish.js +0 -2
  494. package/lib/public/frontend/Render.d.ts +0 -2
  495. package/lib/public/frontend/Render.js +0 -2
  496. package/lib/public/frontend/ViewResponse.d.ts +0 -2
  497. package/lib/public/frontend/ViewResponse.js +0 -2
  498. package/lib/public/request/RequestBody.d.ts +0 -2
  499. package/lib/public/request/RequestBody.js +0 -2
  500. package/lib/public/request/RequestFacade.d.ts +0 -2
  501. package/lib/public/request/RequestFacade.js +0 -2
  502. package/lib/public/request/Verb.d.ts +0 -2
  503. package/lib/public/request/Verb.js +0 -2
  504. package/lib/public/response/ResponseFunction.d.ts +0 -2
  505. package/lib/public/response/ResponseFunction.js +0 -2
  506. package/lib/public/response/ResponseLike.d.ts +0 -2
  507. package/lib/public/response/ResponseLike.js +0 -2
  508. package/lib/public/response/binary.d.ts +0 -2
  509. package/lib/public/response/binary.js +0 -2
  510. package/lib/public/response/error.d.ts +0 -2
  511. package/lib/public/response/error.js +0 -2
  512. package/lib/public/response/json.d.ts +0 -2
  513. package/lib/public/response/json.js +0 -2
  514. package/lib/public/response/redirect.d.ts +0 -2
  515. package/lib/public/response/redirect.js +0 -2
  516. package/lib/public/response/sse.d.ts +0 -2
  517. package/lib/public/response/sse.js +0 -2
  518. package/lib/public/response/text.d.ts +0 -2
  519. package/lib/public/response/text.js +0 -2
  520. package/lib/public/response/view.d.ts +0 -2
  521. package/lib/public/response/view.js +0 -2
  522. package/lib/public/response/ws.d.ts +0 -2
  523. package/lib/public/response/ws.js +0 -2
  524. package/lib/public/wasm/decode-json.d.ts +0 -5
  525. package/lib/public/wasm/decode-json.js +0 -3
  526. package/lib/public/wasm/decode-response.d.ts +0 -3
  527. package/lib/public/wasm/decode-response.js +0 -3
  528. package/lib/public/wasm/encode-request.d.ts +0 -3
  529. package/lib/public/wasm/encode-request.js +0 -3
  530. package/lib/public/wasm/encode-session.d.ts +0 -3
  531. package/lib/public/wasm/encode-session.js +0 -3
  532. package/lib/public/wasm/instantiate.d.ts +0 -4
  533. package/lib/public/wasm/instantiate.js +0 -3
  534. /package/lib/private/{frontend → client}/Publish.d.ts +0 -0
  535. /package/lib/private/{frontend → client}/Publish.js +0 -0
  536. /package/lib/private/{frontend → client}/Render.js +0 -0
  537. /package/lib/private/{frontend → client}/ServerData.js +0 -0
  538. /package/lib/private/{frontend → client}/ServerView.js +0 -0
  539. /package/lib/private/{frontend → client}/View.js +0 -0
  540. /package/lib/private/{frontend → client}/ViewOptions.js +0 -0
  541. /package/lib/private/{frontend → client}/ViewResponse.js +0 -0
  542. /package/lib/private/client/{spa/storage.d.ts → storage.d.ts} +0 -0
  543. /package/lib/private/client/{spa/storage.js → storage.js} +0 -0
  544. /package/lib/private/{database → db}/As.js +0 -0
  545. /package/lib/private/{database → db}/DataDict.js +0 -0
  546. /package/lib/private/{database → db}/DataKey.js +0 -0
  547. /package/lib/private/{database → db}/DataValue.js +0 -0
  548. /package/lib/private/{database → db}/Query.js +0 -0
  549. /package/lib/private/{database → db}/QueryBuilder.js +0 -0
  550. /package/lib/private/{database → db}/Schema.js +0 -0
  551. /package/lib/private/{database → db}/Sort.js +0 -0
  552. /package/lib/private/{database → db}/TypeMap.js +0 -0
  553. /package/lib/private/{database → db}/Types.js +0 -0
  554. /package/lib/private/{database → db}/primary.d.ts +0 -0
  555. /package/lib/private/{database → db}/primary.js +0 -0
  556. /package/lib/private/{database → db}/symbol.d.ts +0 -0
@@ -1,21 +1,39 @@
1
- import Module from "#Module";
2
- import FileRef from "@rcompat/fs/FileRef";
1
+ import fs from "@rcompat/fs";
3
2
  import p from "pema";
4
3
  export default p({
5
4
  http: {
6
- csp: p.record(p.string, p.array(p.string)).optional(),
7
- headers: p.record(p.string, p.string).optional(),
5
+ csp: p.dict(p.array(p.string)).optional(),
6
+ headers: p.dict().optional(),
8
7
  host: p.string.default("localhost"),
9
8
  port: p.uint.port().default(6161),
10
9
  ssl: {
11
- cert: p.union(FileRef, p.string).optional(),
12
- key: p.union(FileRef, p.string).optional(),
10
+ cert: p.union(p.is(fs.isRef), p.string).optional(),
11
+ key: p.union(p.is(fs.isRef), p.string).optional(),
13
12
  },
14
13
  static: {
15
14
  root: p.string.default("/"),
16
15
  },
17
16
  },
18
- modules: p.array(p.constructor(Module)).optional(),
17
+ livereload: {
18
+ exclude: p.array(p.string).optional(),
19
+ host: p.string.optional(),
20
+ port: p.uint.port().optional(),
21
+ },
22
+ db: {
23
+ migrations: p.object({
24
+ table: p.string,
25
+ db: p.pure(),
26
+ }).optional(),
27
+ },
28
+ env: {
29
+ schema: p.pure().optional(),
30
+ },
31
+ modules: p.array(p.object({
32
+ name: p.string,
33
+ setup: p.function,
34
+ }).shape())
35
+ .uniqueBy(member => member.name)
36
+ .default([]),
19
37
  request: {
20
38
  body: {
21
39
  parse: p.boolean.default(true),
@@ -1,9 +1,15 @@
1
- declare const Schema: import("pema").ObjectType<{
2
- httpOnly: import("pema").DefaultType<import("pema/boolean").BooleanType, true>;
3
- path: import("pema").DefaultType<import("pema/string").StringType, "/">;
4
- sameSite: import("pema/union").UnionType<[import("pema").LiteralType<"Lax">, import("pema").LiteralType<"None">, import("pema").LiteralType<"Strict">]>;
5
- secure: import("pema/boolean").BooleanType;
6
- maxAge: import("pema").OptionalType<import("pema/number").NumberType<"f64">>;
1
+ declare const Schema: import("pema").ObjectType<import("pema").NormalizeSchemaObject<{
2
+ readonly httpOnly: import("pema").DefaultType<import("pema").BooleanType, true>;
3
+ readonly path: import("pema").DefaultType<import("pema").StringType, "/">;
4
+ readonly sameSite: import("pema").UnionType<[import("pema").LiteralType<"Lax">, import("pema").LiteralType<"None">, import("pema").LiteralType<"Strict">]>;
5
+ readonly secure: import("pema").BooleanType;
6
+ readonly maxAge: import("pema").OptionalType<import("pema").NumberType<"f64">>;
7
+ }>, {
8
+ httpOnly: boolean;
9
+ path: string;
10
+ sameSite: "Lax" | "None" | "Strict";
11
+ secure: boolean;
12
+ maxAge: number | undefined;
7
13
  }>;
8
14
  type Options = typeof Schema.input;
9
15
  export default function cookie(name: string, value: string, options: Options): string;
@@ -1,19 +1,15 @@
1
- import is from "@rcompat/assert/is";
2
- import pema from "pema";
3
- import boolean from "pema/boolean";
4
- import number from "pema/number";
5
- import string from "pema/string";
6
- import union from "pema/union";
7
- const Schema = pema({
8
- httpOnly: boolean.default(true),
9
- path: string.default("/"),
10
- sameSite: union("Lax", "None", "Strict"),
11
- secure: boolean,
12
- maxAge: number.optional(), // seconds
1
+ import assert from "@rcompat/assert";
2
+ import p from "pema";
3
+ const Schema = p({
4
+ httpOnly: p.boolean.default(true),
5
+ path: p.string.default("/"),
6
+ sameSite: p.union("Lax", "None", "Strict"),
7
+ secure: p.boolean,
8
+ maxAge: p.number.optional(), // seconds
13
9
  });
14
10
  export default function cookie(name, value, options) {
15
- is(name).string();
16
- is(value).string();
11
+ assert.string(name);
12
+ assert.string(value);
17
13
  const parsed = Schema.parse(options);
18
14
  const parts = [`${name}=${value}`];
19
15
  parts.push(`Path=${parsed.path}`);
@@ -0,0 +1,10 @@
1
+ import type Types from "#db/Types";
2
+ import type PK from "#db/PK";
3
+ type As = {
4
+ table: string;
5
+ pk: PK;
6
+ generate_pk?: boolean;
7
+ types: Types;
8
+ };
9
+ export type { As as default };
10
+ //# sourceMappingURL=As.d.ts.map
@@ -0,0 +1,49 @@
1
+ import type As from "#db/As";
2
+ import type PK from "#db/PK";
3
+ import type Sort from "#db/Sort";
4
+ import type Types from "#db/Types";
5
+ import type With from "#db/With";
6
+ import type { Dict, MaybePromise } from "@rcompat/type";
7
+ import type { DataType } from "pema";
8
+ export interface SchemaDiff {
9
+ add: Types;
10
+ drop: string[];
11
+ rename: [string, string][];
12
+ }
13
+ type MaybeTable = Dict<(keyof DataType)[]> | null;
14
+ type PKConfig = {
15
+ name: PK;
16
+ generate: boolean;
17
+ };
18
+ export type Schema = {
19
+ create(name: string, pk: PKConfig, types: Types): MaybePromise<void>;
20
+ delete(name: string): MaybePromise<void>;
21
+ introspect(name: string, pk?: PK): MaybePromise<MaybeTable>;
22
+ alter(name: string, diff: SchemaDiff): MaybePromise<void>;
23
+ };
24
+ export default interface DB {
25
+ schema: Schema;
26
+ close(): MaybePromise<void>;
27
+ create<O extends Dict>(as: As, record: Dict): MaybePromise<O>;
28
+ read(as: As, args: {
29
+ count: true;
30
+ where: Dict;
31
+ with?: never;
32
+ }): MaybePromise<number>;
33
+ read(as: As, args: {
34
+ where: Dict;
35
+ fields?: string[];
36
+ limit?: number;
37
+ sort?: Sort;
38
+ with?: With;
39
+ }): MaybePromise<Dict[]>;
40
+ update(as: As, args: {
41
+ set: Dict;
42
+ where: Dict;
43
+ }): MaybePromise<number>;
44
+ delete(as: As, args: {
45
+ where: Dict;
46
+ }): MaybePromise<number>;
47
+ }
48
+ export {};
49
+ //# sourceMappingURL=DB.d.ts.map
@@ -0,0 +1,3 @@
1
+ ;
2
+ export {};
3
+ //# sourceMappingURL=DB.js.map
@@ -0,0 +1,5 @@
1
+ import type DataValue from "#db/DataValue";
2
+ import type { Dict } from "@rcompat/type";
3
+ type DataDict = Dict<DataValue>;
4
+ export type { DataDict as default };
5
+ //# sourceMappingURL=DataDict.d.ts.map
@@ -0,0 +1,4 @@
1
+ import type { DataType } from "pema";
2
+ type DataKey = keyof DataType;
3
+ export type { DataKey as default };
4
+ //# sourceMappingURL=DataKey.d.ts.map
@@ -0,0 +1,17 @@
1
+ import type DataKey from "#db/DataKey";
2
+ import type { DataType } from "pema";
3
+ type Scalar = DataType[DataKey] | null;
4
+ type OperatorObject = Partial<{
5
+ $like: string;
6
+ $ilike: string;
7
+ $gt: number | bigint;
8
+ $gte: number | bigint;
9
+ $lt: number | bigint;
10
+ $lte: number | bigint;
11
+ $before: Date;
12
+ $after: Date;
13
+ $ne: DataType[DataKey];
14
+ }>;
15
+ type DataValue = Scalar | OperatorObject;
16
+ export type { DataValue as default };
17
+ //# sourceMappingURL=DataValue.d.ts.map
@@ -0,0 +1,33 @@
1
+ import type As from "#db/As";
2
+ import type DB from "#db/DB";
3
+ import type { Schema } from "#db/DB";
4
+ import type DataDict from "#db/DataDict";
5
+ import type Sort from "#db/Sort";
6
+ import type With from "#db/With";
7
+ import type { Dict, MaybePromise } from "@rcompat/type";
8
+ export default class MemoryDB implements DB {
9
+ #private;
10
+ get schema(): Schema;
11
+ close(): void;
12
+ create<O extends Dict>(as: As, record: Dict): MaybePromise<O>;
13
+ read(as: As, args: {
14
+ count: true;
15
+ where: DataDict;
16
+ with?: never;
17
+ }): number;
18
+ read(as: As, args: {
19
+ where: DataDict;
20
+ fields?: string[];
21
+ limit?: number;
22
+ sort?: Sort;
23
+ with?: With;
24
+ }): Dict[];
25
+ update(as: As, args: {
26
+ set: DataDict;
27
+ where: DataDict;
28
+ }): Promise<number>;
29
+ delete(as: As, args: {
30
+ where: DataDict;
31
+ }): number;
32
+ }
33
+ //# sourceMappingURL=MemoryDB.d.ts.map
@@ -0,0 +1,335 @@
1
+ import E from "#db/errors";
2
+ import assert from "@rcompat/assert";
3
+ import entries from "@rcompat/dict/entries";
4
+ import is from "@rcompat/is";
5
+ function escape_re(s) {
6
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
7
+ }
8
+ function comparable(x) {
9
+ if (is.date(x))
10
+ return x.getTime();
11
+ if (is.url(x))
12
+ return x.href;
13
+ return x;
14
+ }
15
+ ;
16
+ function like_re(pattern, flags = "") {
17
+ return new RegExp("^" + escape_re(pattern)
18
+ .replace(/\\%/g, "<<PERCENT>>")
19
+ .replace(/\\_/g, "<<UNDERSCORE>>")
20
+ .replace(/%/g, "[\\s\\S]*")
21
+ .replace(/_/g, "[\\s\\S]")
22
+ .replace(/<<PERCENT>>/g, "%")
23
+ .replace(/<<UNDERSCORE>>/g, "_") +
24
+ "$", flags);
25
+ }
26
+ function match(record, where) {
27
+ return Object.entries(where).every(([k, v]) => {
28
+ const value = record[k];
29
+ // null where (IS NULL semantics in this DB == key absent)
30
+ if (v === null)
31
+ return value === null || value === undefined;
32
+ // operator objects: only plain dicts
33
+ if (is.dict(v)) {
34
+ // NULL / missing values don't match operator predicates
35
+ if (value === null || value === undefined)
36
+ return false;
37
+ for (const [op, op_val] of Object.entries(v)) {
38
+ switch (op) {
39
+ case "$like": {
40
+ if (!is.string(value))
41
+ return false;
42
+ if (!like_re(op_val).test(value))
43
+ return false;
44
+ break;
45
+ }
46
+ case "$ilike": {
47
+ if (!is.string(value))
48
+ return false;
49
+ if (!like_re(op_val, "i").test(value))
50
+ return false;
51
+ break;
52
+ }
53
+ case "$gte":
54
+ if (!(comparable(value) >= comparable(op_val)))
55
+ return false;
56
+ break;
57
+ case "$gt":
58
+ case "$after":
59
+ if (!(comparable(value) > comparable(op_val)))
60
+ return false;
61
+ break;
62
+ case "$lte":
63
+ if (!(comparable(value) <= comparable(op_val)))
64
+ return false;
65
+ break;
66
+ case "$lt":
67
+ case "$before":
68
+ if (!(comparable(value) < comparable(op_val)))
69
+ return false;
70
+ break;
71
+ case "$ne": {
72
+ if (is.date(value) && is.date(op_val)) {
73
+ if (value.getTime() === op_val.getTime())
74
+ return false;
75
+ break;
76
+ }
77
+ if (is.url(value) && is.url(op_val)) {
78
+ if (value.href === op_val.href)
79
+ return false;
80
+ break;
81
+ }
82
+ if (value === op_val)
83
+ return false;
84
+ break;
85
+ }
86
+ default:
87
+ throw E.operator_unknown(k, op);
88
+ }
89
+ }
90
+ return true;
91
+ }
92
+ // literal equality
93
+ if (is.date(value) && is.date(v))
94
+ return value.getTime() === v.getTime();
95
+ if (is.url(value) && is.url(v))
96
+ return value.href === v.href;
97
+ return value === v;
98
+ });
99
+ }
100
+ function filter(record, fields) {
101
+ return Object.fromEntries(Object.entries(record)
102
+ .filter(([key]) => fields.includes(key)));
103
+ }
104
+ function toSorted(d1, d2, sort) {
105
+ return [...entries(sort).valmap(([, value]) => value === "asc" ? 1 : -1)]
106
+ .reduce((sorting, [field, direction]) => {
107
+ const left = d1[field];
108
+ const right = d2[field];
109
+ // if sorting has been established, it stays fixed
110
+ if (sorting !== 0) {
111
+ return sorting;
112
+ }
113
+ // equal, sorting doesn't change
114
+ if (left === right) {
115
+ return sorting;
116
+ }
117
+ if (left < right) {
118
+ return -1 * direction;
119
+ }
120
+ return direction;
121
+ }, 0);
122
+ }
123
+ export default class MemoryDB {
124
+ #tables = {};
125
+ #types = {};
126
+ #use(name) {
127
+ this.#tables[name] ??= [];
128
+ return this.#tables[name];
129
+ }
130
+ get schema() {
131
+ return {
132
+ create: async (table, _pk, types) => {
133
+ if (this.#tables[table] !== undefined)
134
+ return;
135
+ this.#tables[table] = [];
136
+ this.#types[table] = types;
137
+ },
138
+ delete: table => {
139
+ if (this.#tables[table] !== undefined)
140
+ delete this.#tables[table];
141
+ },
142
+ introspect: table => {
143
+ if (this.#tables[table] === undefined)
144
+ return null;
145
+ const types = this.#types[table] ?? {};
146
+ return Object.fromEntries(Object.entries(types).map(([field, type]) => [field, [type]]));
147
+ },
148
+ alter: (table, diff) => {
149
+ if (this.#types[table] === undefined)
150
+ throw E.table_not_found(table);
151
+ const types = { ...this.#types[table] };
152
+ const { add, drop, rename } = diff;
153
+ for (const [field, type] of Object.entries(add))
154
+ types[field] = type;
155
+ for (const field of drop)
156
+ delete types[field];
157
+ for (const [from, to] of rename) {
158
+ types[to] = types[from];
159
+ delete types[from];
160
+ }
161
+ this.#types[table] = types;
162
+ },
163
+ };
164
+ }
165
+ // noop
166
+ close() { }
167
+ #next_id(as) {
168
+ const table = this.#use(as.table);
169
+ const size = table.length;
170
+ const pk = assert.defined(as.pk);
171
+ const type = as.types[pk];
172
+ if (type === "uuid" || type === "uuid_v4" || type === "uuid_v7") {
173
+ return crypto.randomUUID();
174
+ }
175
+ else if (["u64", "u128", "i64", "i128"].includes(type)) {
176
+ return size === 0 ? 0n : table[size - 1][pk] + 1n;
177
+ }
178
+ else {
179
+ return size === 0 ? 0 : table[size - 1][pk] + 1;
180
+ }
181
+ }
182
+ create(as, record) {
183
+ assert.nonempty(record);
184
+ const table = this.#use(as.table);
185
+ const pk = as.pk;
186
+ let to_insert = record;
187
+ if (pk !== null && !(pk in record)) {
188
+ if (as.generate_pk === false)
189
+ throw E.pk_required(pk);
190
+ to_insert = { ...record, [pk]: this.#next_id(as) };
191
+ }
192
+ if (pk !== null) {
193
+ const pv = to_insert[pk];
194
+ if (table.find(s => s[pk] === pv) !== undefined)
195
+ throw E.pk_duplicate(pk);
196
+ }
197
+ table.push({ ...to_insert });
198
+ return to_insert;
199
+ }
200
+ read(as, args) {
201
+ assert.dict(args.where);
202
+ const table = this.#use(as.table);
203
+ const matches = table.filter(r => match(r, args.where));
204
+ if (args.count === true)
205
+ return matches.length;
206
+ const sort = args.sort ?? {};
207
+ const sorted = Object.keys(sort).length === 0
208
+ ? matches
209
+ : matches.toSorted((a, b) => toSorted(a, b, sort));
210
+ const limit = args.limit ?? sorted.length;
211
+ const base_rows = sorted.slice(0, limit);
212
+ // no relations -> preserve existing behavior
213
+ if (args.with === undefined) {
214
+ const fields = args.fields ?? [];
215
+ return (fields.length === 0
216
+ ? base_rows
217
+ : base_rows.map(r => filter(r, fields)));
218
+ }
219
+ assert.dict(args.with);
220
+ const base_fields = args.fields ?? [];
221
+ // output objects must be detached, so as to not mutate stored rows whilst
222
+ // attaching relations
223
+ const out = base_rows.map(full => {
224
+ return base_fields.length === 0
225
+ ? { ...full }
226
+ : filter(full, base_fields);
227
+ });
228
+ // need access to the full base rows to read join keys even if not projected
229
+ const base_full = base_rows;
230
+ for (const [r_name, rel] of Object.entries(args.with)) {
231
+ const target_as = rel.as;
232
+ const kind = rel.kind;
233
+ const fk = rel.fk;
234
+ const reverse = rel.reverse === true;
235
+ const r_where = rel.where;
236
+ const r_sort = rel.sort;
237
+ const r_limit = rel.limit;
238
+ const r_fields = rel.fields ?? [];
239
+ const target = this.#use(target_as.table);
240
+ function project_rel(row) {
241
+ if (r_fields.length === 0)
242
+ return { ...row };
243
+ return filter(row, r_fields);
244
+ }
245
+ ;
246
+ // reverse one: FK on parent points to target PK
247
+ if (kind === "one" && reverse) {
248
+ const target_pk = target_as.pk;
249
+ if (target_pk === null)
250
+ throw E.relation_requires_pk("target");
251
+ for (let i = 0; i < out.length; i++) {
252
+ const parent_full = base_full[i];
253
+ const fk_value = parent_full[fk];
254
+ if (fk_value == null) {
255
+ (out[i])[r_name] = null;
256
+ continue;
257
+ }
258
+ // filter by target_pk equality + optional where
259
+ let candidates = target.filter(t => t[target_pk] === fk_value && match(t, r_where));
260
+ if (r_sort !== undefined && Object.keys(r_sort).length > 0) {
261
+ candidates = candidates.toSorted((a, b) => toSorted(a, b, r_sort));
262
+ }
263
+ if (r_limit !== undefined)
264
+ candidates = candidates.slice(0, r_limit);
265
+ const got = candidates[0];
266
+ (out[i])[r_name] = got ? project_rel(got) : null;
267
+ }
268
+ continue;
269
+ }
270
+ // non-reverse: FK on target points to parent PK
271
+ const parent_pk = as.pk;
272
+ if (parent_pk === null)
273
+ throw E.relation_requires_pk("parent");
274
+ const parent_keys = new Set(base_full.map(r => r[parent_pk]));
275
+ const grouped = new Map();
276
+ for (const row of target) {
277
+ const key = row[fk];
278
+ if (!parent_keys.has(key))
279
+ continue;
280
+ if (!match(row, r_where))
281
+ continue;
282
+ const bucket = grouped.get(key);
283
+ if (bucket !== undefined)
284
+ bucket.push(row);
285
+ else
286
+ grouped.set(key, [row]);
287
+ }
288
+ for (let i = 0; i < out.length; i++) {
289
+ const parent_full = base_full[i];
290
+ const key = parent_full[parent_pk];
291
+ let rows = grouped.get(key) ?? [];
292
+ if (r_sort !== undefined && Object.keys(r_sort).length > 0) {
293
+ rows = rows.toSorted((a, b) => toSorted(a, b, r_sort));
294
+ }
295
+ if (kind === "one") {
296
+ if (r_limit !== undefined)
297
+ rows = rows.slice(0, r_limit);
298
+ const got = rows[0];
299
+ (out[i])[r_name] = got ? project_rel(got) : null;
300
+ }
301
+ else {
302
+ if (r_limit !== undefined)
303
+ rows = rows.slice(0, r_limit);
304
+ (out[i])[r_name] = rows.map(project_rel);
305
+ }
306
+ }
307
+ }
308
+ return out;
309
+ }
310
+ async update(as, args) {
311
+ assert.nonempty(args.set);
312
+ assert.dict(args.where);
313
+ const table = this.#use(as.table);
314
+ const matched = table.filter(record => match(record, args.where));
315
+ const pk = as.pk;
316
+ return matched.map(record => {
317
+ const changed = entries({ ...record, ...args.set })
318
+ .filter(([, value]) => value !== null)
319
+ .get();
320
+ const index = pk !== null
321
+ ? table.findIndex(stored => stored[pk] === record[pk])
322
+ : table.findIndex(stored => stored === record);
323
+ table.splice(index, 1, changed);
324
+ return changed;
325
+ }).length;
326
+ }
327
+ delete(as, args) {
328
+ assert.nonempty(args.where);
329
+ const table = this.#use(as.table);
330
+ const size_before = table.length;
331
+ this.#tables[as.table] = table.filter(record => !match(record, args.where));
332
+ return size_before - this.#use(as.table).length;
333
+ }
334
+ }
335
+ //# sourceMappingURL=MemoryDB.js.map
@@ -0,0 +1,3 @@
1
+ type PK = string | null;
2
+ export type { PK as default };
3
+ //# sourceMappingURL=PK.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PK.js.map
@@ -1,5 +1,5 @@
1
- import type Schema from "#database/Schema";
2
- import type StoreSchema from "pema/StoreSchema";
1
+ import type Schema from "#db/Schema";
2
+ import type { StoreSchema } from "pema";
3
3
  type X<T> = {
4
4
  [K in keyof T]: T[K];
5
5
  } & {};
@@ -1,6 +1,5 @@
1
- import type Schema from "#database/Schema";
2
- import type InferStoreOut from "pema/InferStoreOut";
3
- import type StoreSchema from "pema/StoreSchema";
1
+ import type Schema from "#db/Schema";
2
+ import type { InferStoreOut, StoreSchema } from "pema";
4
3
  type X<T> = {
5
4
  [K in keyof T]: T[K];
6
5
  } & {};
@@ -0,0 +1,9 @@
1
+ import type DataDict from "#db/DataDict";
2
+ import type Sort from "#db/Sort";
3
+ export default interface ReadArgs {
4
+ where: DataDict;
5
+ fields?: string[];
6
+ sort?: Sort;
7
+ limit?: number;
8
+ }
9
+ //# sourceMappingURL=ReadArgs.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ReadArgs.js.map
@@ -0,0 +1,6 @@
1
+ import type ReadArgs from "#db/ReadArgs";
2
+ import type With from "#db/With";
3
+ export default interface ReadRelationsArgs extends ReadArgs {
4
+ with: With;
5
+ }
6
+ //# sourceMappingURL=ReadRelationsArgs.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ReadRelationsArgs.js.map
@@ -1,5 +1,4 @@
1
- import type InferStoreOut from "pema/InferStoreOut";
2
- import type StoreSchema from "pema/StoreSchema";
1
+ import type { InferStoreOut, StoreSchema } from "pema";
3
2
  type X<T> = {
4
3
  [K in keyof T]: T[K];
5
4
  } & {};
@@ -0,0 +1,4 @@
1
+ import type { Dict } from "@rcompat/type";
2
+ type Sort = Dict<"asc" | "desc">;
3
+ export type { Sort as default };
4
+ //# sourceMappingURL=Sort.d.ts.map
@@ -1,6 +1,5 @@
1
- import type MaybePromise from "@rcompat/type/MaybePromise";
2
- import type DataType from "pema/DataType";
3
- import type Dict from "@rcompat/type/Dict";
1
+ import type { Dict, MaybePromise } from "@rcompat/type";
2
+ import type { DataType } from "pema";
4
3
  type TypeMap<Columns extends Dict = Dict> = {
5
4
  [K in keyof DataType]: {
6
5
  [C in keyof Columns]: {
@@ -1,4 +1,4 @@
1
- import type DataType from "pema/DataType";
1
+ import type { DataType } from "pema";
2
2
  type Types = {
3
3
  [k: string]: keyof DataType;
4
4
  };
@@ -0,0 +1,16 @@
1
+ import type As from "#db/As";
2
+ import type DataDict from "#db/DataDict";
3
+ import type Sort from "#db/Sort";
4
+ import type { Dict } from "@rcompat/type";
5
+ type With = Dict<{
6
+ as: As;
7
+ kind: "one" | "many";
8
+ fk: string;
9
+ reverse?: boolean;
10
+ where: DataDict;
11
+ fields?: string[];
12
+ sort?: Sort;
13
+ limit?: number;
14
+ }>;
15
+ export type { With as default };
16
+ //# sourceMappingURL=With.d.ts.map