rimecms 0.28.10 → 0.30.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 (356) hide show
  1. package/README.md +3 -3
  2. package/dist/adapter-sqlite/area.server.js +8 -8
  3. package/dist/adapter-sqlite/generate-schema/column.server.d.ts +13 -0
  4. package/dist/adapter-sqlite/generate-schema/column.server.js +77 -0
  5. package/dist/adapter-sqlite/generate-schema/index.server.js +7 -12
  6. package/dist/adapter-sqlite/generate-schema/root.server.js +35 -39
  7. package/dist/adapter-sqlite/generate-schema/templates.server.d.ts +12 -0
  8. package/dist/adapter-sqlite/generate-schema/templates.server.js +19 -0
  9. package/dist/adapter-sqlite/generate-schema/{util.d.ts → util.server.d.ts} +2 -2
  10. package/dist/adapter-sqlite/generate-schema/{util.js → util.server.js} +2 -2
  11. package/dist/adapter-sqlite/generate-schema/write.server.js +1 -1
  12. package/dist/adapter-sqlite/relations.server.js +6 -1
  13. package/dist/adapter-sqlite/transform.server.js +1 -1
  14. package/dist/adapter-sqlite/util.server.d.ts +1 -6
  15. package/dist/adapter-sqlite/util.server.js +6 -0
  16. package/dist/adapter-sqlite/where.server.js +17 -16
  17. package/dist/adapter-sqlite/with.server.js +10 -10
  18. package/dist/core/areas/{api → rest}/get.server.d.ts +4 -2
  19. package/dist/core/areas/rest/get.server.js +45 -0
  20. package/dist/core/areas/rest/index.server.d.ts +6 -0
  21. package/dist/core/areas/rest/index.server.js +3 -0
  22. package/dist/core/areas/{api → rest}/update.server.d.ts +4 -2
  23. package/dist/core/areas/rest/update.server.js +43 -0
  24. package/dist/core/collections/auth/fields.d.ts +2 -182
  25. package/dist/core/collections/auth/hooks/before-upsert/augment-fields-password.server.d.ts +1 -1
  26. package/dist/core/collections/config/augment-auth.server.js +1 -1
  27. package/dist/core/collections/config/augment-nested.server.js +1 -1
  28. package/dist/core/collections/config/augment-panel.d.ts +1 -1
  29. package/dist/core/collections/config/augment-upload.js +2 -2
  30. package/dist/core/collections/config/augment-upload.server.js +4 -1
  31. package/dist/core/collections/operations/duplicate.js +31 -12
  32. package/dist/core/collections/operations/updateById.js +6 -5
  33. package/dist/core/collections/{api → rest}/create.server.d.ts +4 -2
  34. package/dist/core/collections/rest/create.server.js +37 -0
  35. package/dist/core/collections/{api → rest}/delete.server.d.ts +4 -2
  36. package/dist/core/collections/rest/delete.server.js +37 -0
  37. package/dist/core/collections/{api → rest}/deleteById.server.d.ts +4 -2
  38. package/dist/core/collections/rest/deleteById.server.js +21 -0
  39. package/dist/core/collections/{api → rest}/duplicate.server.d.ts +1 -1
  40. package/dist/core/collections/rest/duplicate.server.js +20 -0
  41. package/dist/core/collections/{api → rest}/get.server.d.ts +4 -2
  42. package/dist/core/collections/rest/get.server.js +50 -0
  43. package/dist/core/collections/{api → rest}/getById.server.d.ts +4 -2
  44. package/dist/core/collections/rest/getById.server.js +35 -0
  45. package/dist/core/collections/rest/index.server.d.ts +16 -0
  46. package/dist/core/collections/rest/index.server.js +16 -0
  47. package/dist/core/collections/{api → rest}/updateById.server.d.ts +4 -2
  48. package/dist/core/collections/rest/updateById.server.js +44 -0
  49. package/dist/core/collections/upload/disk/delete.server.d.ts +1 -1
  50. package/dist/core/collections/upload/disk/delete.server.js +48 -1
  51. package/dist/core/collections/upload/hooks/clean-up-files.server.js +2 -2
  52. package/dist/core/collections/upload/hooks/convert-base64.server.d.ts +1 -1
  53. package/dist/core/collections/upload/hooks/extract-path.server.d.ts +2 -2
  54. package/dist/core/collections/upload/hooks/extract-path.server.js +1 -1
  55. package/dist/core/collections/upload/hooks/handle-path-creation.server.d.ts +1 -1
  56. package/dist/core/collections/upload/hooks/process-file-upload.server.d.ts +1 -1
  57. package/dist/core/collections/upload/hooks/process-file-upload.server.js +3 -3
  58. package/dist/core/config/auth/better-auth.server.d.ts +2 -2
  59. package/dist/core/config/client/augment-directories.js +1 -1
  60. package/dist/core/config/config-context.server.d.ts +3 -3
  61. package/dist/core/config/server/augment-directories.server.js +1 -1
  62. package/dist/core/config/server/augment-panel-access.server.d.ts +1 -1
  63. package/dist/core/config/server/build-config.server.d.ts +11 -11
  64. package/dist/core/config/server/validate.server.js +51 -31
  65. package/dist/core/config/shared/find-thumbnail.js +13 -13
  66. package/dist/core/config/shared/find-title.js +13 -13
  67. package/dist/core/config/shared/upload-directories.js +1 -1
  68. package/dist/core/constant.d.ts +1 -1
  69. package/dist/core/constant.js +1 -1
  70. package/dist/core/constant.server.d.ts +1 -0
  71. package/dist/core/constant.server.js +2 -0
  72. package/dist/core/dev/cache/index.server.js +9 -9
  73. package/dist/core/dev/cli/build/index.d.ts +1 -0
  74. package/dist/core/dev/cli/build/index.js +37 -8
  75. package/dist/core/dev/cli/build/templates.d.ts +1 -0
  76. package/dist/core/dev/cli/build/templates.js +24 -0
  77. package/dist/core/dev/cli/clear/index.server.js +3 -2
  78. package/dist/core/dev/cli/generate/index.server.js +3 -2
  79. package/dist/core/dev/cli/index.js +20 -0
  80. package/dist/core/dev/cli/init/index.server.js +4 -4
  81. package/dist/core/dev/cli/init/templates.d.ts +1 -1
  82. package/dist/core/dev/cli/init/templates.js +2 -2
  83. package/dist/core/dev/cli/util/log.server.d.ts +1 -0
  84. package/dist/core/dev/cli/util/log.server.js +4 -0
  85. package/dist/core/dev/cli/util/package-manager.server.d.ts +9 -0
  86. package/dist/core/dev/cli/{init/package-manager-util.server.js → util/package-manager.server.js} +15 -0
  87. package/dist/core/dev/cli/util/package.server.d.ts +9 -0
  88. package/dist/core/dev/cli/{init/get-package-info.server.js → util/package.server.js} +10 -0
  89. package/dist/core/dev/generate/routes/common.server.d.ts +10 -1
  90. package/dist/core/dev/generate/routes/common.server.js +248 -29
  91. package/dist/core/dev/generate/routes/index.server.d.ts +7 -1
  92. package/dist/core/dev/generate/routes/index.server.js +16 -55
  93. package/dist/core/dev/generate/routes/util.server.d.ts +6 -16
  94. package/dist/core/dev/generate/routes/util.server.js +8 -21
  95. package/dist/core/dev/generate/types/index.server.js +22 -20
  96. package/dist/core/dev/vite/index.server.js +22 -6
  97. package/dist/core/errors/handler.server.d.ts +22 -1
  98. package/dist/core/errors/handler.server.js +25 -2
  99. package/dist/core/errors/index.d.ts +0 -1
  100. package/dist/core/errors/index.js +0 -1
  101. package/dist/core/fields/builders/boolean-builder.d.ts +3 -1
  102. package/dist/core/fields/builders/boolean-builder.js +3 -0
  103. package/dist/core/fields/builders/field-builder.d.ts +35 -2
  104. package/dist/core/fields/builders/field-builder.js +33 -2
  105. package/dist/core/fields/builders/form-field-builder.d.ts +71 -12
  106. package/dist/core/fields/builders/form-field-builder.js +96 -6
  107. package/dist/core/fields/builders/select-builder.d.ts +4 -1
  108. package/dist/core/fields/builders/select-builder.js +3 -0
  109. package/dist/core/fields/util.d.ts +9 -17
  110. package/dist/core/fields/util.js +49 -83
  111. package/dist/core/handlers/routes.server.d.ts +70 -1
  112. package/dist/core/handlers/routes.server.js +71 -4
  113. package/dist/core/naming.d.ts +34 -0
  114. package/dist/core/naming.js +39 -0
  115. package/dist/core/operations/blocks/diff.server.js +1 -1
  116. package/dist/core/operations/blocks/extract.server.js +1 -1
  117. package/dist/core/operations/configMap/buildTreeMap.d.ts +3 -2
  118. package/dist/core/operations/configMap/buildTreeMap.js +1 -1
  119. package/dist/core/operations/configMap/index.d.ts +2 -1
  120. package/dist/core/operations/configMap/index.js +13 -13
  121. package/dist/core/operations/configMap/types.d.ts +2 -2
  122. package/dist/core/operations/hooks/before-read/process-document-fields.server.js +14 -17
  123. package/dist/core/operations/hooks/before-upsert/data-config-map.server.d.ts +1 -1
  124. package/dist/core/operations/hooks/before-upsert/data-config-map.server.js +1 -1
  125. package/dist/core/operations/hooks/before-upsert/handle-new-version.server.d.ts +1 -1
  126. package/dist/core/operations/hooks/before-upsert/original-config-map.server.d.ts +1 -1
  127. package/dist/core/operations/hooks/before-upsert/original-config-map.server.js +1 -1
  128. package/dist/core/operations/hooks/before-upsert/set-default-values.server.d.ts +3 -5
  129. package/dist/core/operations/hooks/before-upsert/set-default-values.server.js +10 -15
  130. package/dist/core/operations/hooks/before-upsert/validate-fields.server.d.ts +1 -1
  131. package/dist/core/operations/hooks/before-upsert/validate-fields.server.js +49 -31
  132. package/dist/core/operations/relations/extract.server.js +5 -5
  133. package/dist/core/operations/shared/fallback-data-from-original.js +2 -2
  134. package/dist/core/operations/tree/diff.server.js +1 -1
  135. package/dist/core/operations/tree/extract.server.js +1 -1
  136. package/dist/core/plugins/api-init/index.server.js +10 -5
  137. package/dist/core/plugins/cache/cache.server.js +4 -4
  138. package/dist/core/rime.server.d.ts +10 -10
  139. package/dist/core/rime.server.js +5 -1
  140. package/dist/fields/blocks/component/AddBlockButton.svelte +7 -7
  141. package/dist/fields/blocks/component/AddBlockButton.svelte.d.ts +2 -2
  142. package/dist/fields/blocks/component/Blocks.svelte +6 -7
  143. package/dist/fields/blocks/component/props.d.ts +2 -2
  144. package/dist/fields/blocks/index.d.ts +1 -1
  145. package/dist/fields/blocks/index.js +3 -3
  146. package/dist/fields/blocks/index.server.js +1 -1
  147. package/dist/fields/checkbox/component/Checkbox.svelte +2 -2
  148. package/dist/fields/checkbox/component/props.d.ts +2 -2
  149. package/dist/fields/checkbox/index.server.d.ts +1 -2
  150. package/dist/fields/checkbox/index.server.js +1 -10
  151. package/dist/fields/combobox/component/ComboBox.svelte +3 -3
  152. package/dist/fields/combobox/component/props.d.ts +2 -2
  153. package/dist/fields/combobox/index.server.d.ts +1 -2
  154. package/dist/fields/combobox/index.server.js +2 -11
  155. package/dist/fields/component/index.d.ts +1 -1
  156. package/dist/fields/date/component/Date.svelte +4 -4
  157. package/dist/fields/date/component/Date.svelte.d.ts +2 -2
  158. package/dist/fields/date/index.d.ts +3 -1
  159. package/dist/fields/date/index.js +3 -0
  160. package/dist/fields/date/index.server.d.ts +1 -2
  161. package/dist/fields/date/index.server.js +1 -10
  162. package/dist/fields/email/component/Email.svelte +5 -6
  163. package/dist/fields/email/component/props.d.ts +2 -3
  164. package/dist/fields/email/index.d.ts +3 -2
  165. package/dist/fields/email/index.js +5 -2
  166. package/dist/fields/email/index.server.d.ts +0 -3
  167. package/dist/fields/email/index.server.js +0 -9
  168. package/dist/fields/group/component/Group.svelte +9 -15
  169. package/dist/fields/group/component/Group.svelte.d.ts +2 -2
  170. package/dist/fields/group/index.d.ts +4 -2
  171. package/dist/fields/group/index.server.js +2 -2
  172. package/dist/fields/index.server.d.ts +1 -4
  173. package/dist/fields/index.server.js +17 -13
  174. package/dist/fields/link/component/Link.svelte +5 -5
  175. package/dist/fields/link/component/RessourceInput.svelte +1 -1
  176. package/dist/fields/link/component/props.d.ts +2 -2
  177. package/dist/fields/link/index.d.ts +5 -2
  178. package/dist/fields/link/index.js +10 -11
  179. package/dist/fields/link/runtime.d.ts +2 -0
  180. package/dist/fields/link/runtime.js +1 -0
  181. package/dist/fields/link/{index.server.d.ts → runtime.server.d.ts} +1 -2
  182. package/dist/fields/link/{index.server.js → runtime.server.js} +2 -11
  183. package/dist/fields/number/component/Number.svelte +6 -6
  184. package/dist/fields/number/component/props.d.ts +2 -2
  185. package/dist/fields/number/index.d.ts +4 -10
  186. package/dist/fields/number/index.js +3 -4
  187. package/dist/fields/number/index.server.d.ts +1 -2
  188. package/dist/fields/number/index.server.js +1 -10
  189. package/dist/fields/radio/component/Radio.svelte +6 -7
  190. package/dist/fields/radio/component/props.d.ts +2 -2
  191. package/dist/fields/radio/index.server.d.ts +1 -2
  192. package/dist/fields/radio/index.server.js +2 -11
  193. package/dist/fields/relation/client.d.ts +1 -1
  194. package/dist/fields/relation/client.js +1 -1
  195. package/dist/fields/relation/component/Cell.svelte +1 -1
  196. package/dist/fields/relation/component/Relation.svelte +19 -15
  197. package/dist/fields/relation/component/Relation.svelte.d.ts +2 -2
  198. package/dist/fields/relation/component/upload/Browse.svelte +1 -1
  199. package/dist/fields/relation/index.d.ts +8 -5
  200. package/dist/fields/relation/index.js +8 -47
  201. package/dist/fields/relation/runtime.d.ts +5 -0
  202. package/dist/fields/relation/runtime.js +4 -0
  203. package/dist/fields/relation/runtime.server.d.ts +8 -0
  204. package/dist/fields/relation/runtime.server.js +49 -0
  205. package/dist/fields/rich-text/component/RichText.svelte +5 -5
  206. package/dist/fields/rich-text/component/props.d.ts +2 -2
  207. package/dist/fields/rich-text/core/features/fields/extension.d.ts +2 -2
  208. package/dist/fields/rich-text/core/features/fields/fields.svelte +2 -2
  209. package/dist/fields/rich-text/core/features/link/component/link-selector.svelte +1 -1
  210. package/dist/fields/rich-text/core/features/resource/resource-extension.d.ts +1 -1
  211. package/dist/fields/rich-text/core/features/resource/resource.svelte +1 -1
  212. package/dist/fields/rich-text/core/features/upload/upload-extension.d.ts +1 -1
  213. package/dist/fields/rich-text/core/features/upload/upload.svelte +1 -1
  214. package/dist/fields/rich-text/index.d.ts +2 -0
  215. package/dist/fields/rich-text/index.js +7 -2
  216. package/dist/fields/rich-text/index.server.d.ts +1 -2
  217. package/dist/fields/rich-text/index.server.js +1 -10
  218. package/dist/fields/select/component/Select.svelte +16 -16
  219. package/dist/fields/select/component/props.d.ts +2 -2
  220. package/dist/fields/select/index.d.ts +2 -0
  221. package/dist/fields/select/index.js +3 -0
  222. package/dist/fields/select/index.server.d.ts +1 -2
  223. package/dist/fields/select/index.server.js +2 -17
  224. package/dist/fields/slug/component/Slug.svelte +14 -10
  225. package/dist/fields/slug/component/Slug.svelte.d.ts +2 -2
  226. package/dist/fields/slug/index.d.ts +5 -2
  227. package/dist/fields/slug/index.js +3 -0
  228. package/dist/fields/slug/index.server.d.ts +1 -2
  229. package/dist/fields/slug/index.server.js +1 -10
  230. package/dist/fields/tabs/component/Tabs.svelte +15 -15
  231. package/dist/fields/tabs/component/Tabs.svelte.d.ts +2 -2
  232. package/dist/fields/tabs/index.d.ts +4 -16
  233. package/dist/fields/tabs/index.js +1 -8
  234. package/dist/fields/tabs/index.server.js +3 -3
  235. package/dist/fields/text/component/Text.svelte +5 -5
  236. package/dist/fields/text/component/props.d.ts +2 -3
  237. package/dist/fields/text/index.d.ts +4 -10
  238. package/dist/fields/text/index.js +3 -4
  239. package/dist/fields/text/index.server.d.ts +1 -2
  240. package/dist/fields/text/index.server.js +1 -10
  241. package/dist/fields/textarea/component/TextArea.svelte +3 -3
  242. package/dist/fields/textarea/component/props.d.ts +2 -2
  243. package/dist/fields/textarea/index.d.ts +4 -1
  244. package/dist/fields/textarea/index.js +3 -0
  245. package/dist/fields/textarea/index.server.d.ts +1 -2
  246. package/dist/fields/textarea/index.server.js +1 -10
  247. package/dist/fields/time/component/Time.svelte +5 -5
  248. package/dist/fields/time/component/Time.svelte.d.ts +1 -1
  249. package/dist/fields/time/component/props.d.ts +2 -2
  250. package/dist/fields/time/index.d.ts +2 -0
  251. package/dist/fields/time/index.js +3 -0
  252. package/dist/fields/time/index.server.d.ts +1 -2
  253. package/dist/fields/time/index.server.js +1 -10
  254. package/dist/fields/toggle/component/Toggle.svelte +3 -3
  255. package/dist/fields/toggle/component/Toggle.svelte.d.ts +1 -1
  256. package/dist/fields/toggle/component/props.d.ts +2 -2
  257. package/dist/fields/toggle/index.d.ts +2 -1
  258. package/dist/fields/toggle/index.server.d.ts +1 -2
  259. package/dist/fields/toggle/index.server.js +1 -10
  260. package/dist/fields/tree/component/AddItemButton.svelte +1 -2
  261. package/dist/fields/tree/component/Tree.svelte +6 -6
  262. package/dist/fields/tree/component/TreeBlock.svelte +5 -12
  263. package/dist/fields/tree/component/props.d.ts +3 -3
  264. package/dist/fields/tree/index.d.ts +3 -1
  265. package/dist/fields/tree/index.js +2 -2
  266. package/dist/fields/types.d.ts +11 -5
  267. package/dist/index.d.ts +8 -3
  268. package/dist/index.js +7 -3
  269. package/dist/panel/components/fields/FieldsPreview.svelte +4 -5
  270. package/dist/panel/components/fields/Hint.svelte +5 -4
  271. package/dist/panel/components/fields/Hint.svelte.d.ts +3 -2
  272. package/dist/panel/components/fields/Label.svelte +6 -11
  273. package/dist/panel/components/fields/Label.svelte.d.ts +3 -2
  274. package/dist/panel/components/fields/LabelFor.svelte +4 -4
  275. package/dist/panel/components/fields/LabelFor.svelte.d.ts +2 -1
  276. package/dist/panel/components/fields/RenderFields.svelte +11 -16
  277. package/dist/panel/components/fields/{root.svelte.d.ts → fieldset.svelte.d.ts} +1 -1
  278. package/dist/panel/components/fields/{root.svelte.js → fieldset.svelte.js} +1 -1
  279. package/dist/panel/components/fields/index.d.ts +5 -5
  280. package/dist/panel/components/fields/index.js +2 -2
  281. package/dist/panel/components/sections/collection/folder/FolderWithActions.svelte +1 -1
  282. package/dist/panel/components/sections/document/AuthFooter.svelte +2 -7
  283. package/dist/panel/components/sections/document/ButtonStatus.svelte +1 -1
  284. package/dist/panel/components/sections/document/CurrentlyEdited.svelte +1 -1
  285. package/dist/panel/components/sections/document/Settings.svelte +1 -1
  286. package/dist/panel/components/sections/live/LiveEditPanel.svelte +2 -2
  287. package/dist/panel/context/collection.svelte.js +10 -10
  288. package/dist/panel/context/documentForm.svelte.d.ts +8 -21
  289. package/dist/panel/context/documentForm.svelte.js +46 -54
  290. package/dist/panel/context/form.svelte.d.ts +6 -3
  291. package/dist/panel/context/form.svelte.js +22 -18
  292. package/dist/panel/context/live.svelte.js +1 -1
  293. package/dist/panel/index.d.ts +9 -1
  294. package/dist/panel/index.js +7 -1
  295. package/dist/panel/pages/area/actions.server.d.ts +2 -21
  296. package/dist/panel/pages/area/actions.server.js +28 -27
  297. package/dist/panel/pages/area/load.server.d.ts +2 -17
  298. package/dist/panel/pages/area/load.server.js +37 -46
  299. package/dist/panel/pages/auth/fields.d.ts +4 -4
  300. package/dist/panel/pages/auth/fields.js +6 -22
  301. package/dist/panel/pages/auth/reset-password/ResetPassword.svelte +3 -10
  302. package/dist/panel/pages/auth/sign-in/SignIn.svelte +7 -1
  303. package/dist/panel/pages/collection/load.server.d.ts +6 -6
  304. package/dist/panel/pages/collection/load.server.js +70 -72
  305. package/dist/panel/pages/collection-document/actions.server.d.ts +1 -1
  306. package/dist/panel/pages/collection-document/actions.server.js +78 -70
  307. package/dist/panel/pages/collection-document/load.server.d.ts +5 -20
  308. package/dist/panel/pages/collection-document/load.server.js +80 -82
  309. package/dist/server.d.ts +7 -0
  310. package/dist/server.js +7 -0
  311. package/dist/types.d.ts +1 -0
  312. package/dist/util/doc.js +15 -17
  313. package/dist/util/index.d.ts +9 -1
  314. package/dist/util/index.js +12 -1
  315. package/package.json +8 -50
  316. package/dist/core/api/index.d.ts +0 -7
  317. package/dist/core/api/index.js +0 -10
  318. package/dist/core/api/index.server.d.ts +0 -3
  319. package/dist/core/api/index.server.js +0 -3
  320. package/dist/core/areas/api/get.server.js +0 -36
  321. package/dist/core/areas/api/index.server.d.ts +0 -7
  322. package/dist/core/areas/api/index.server.js +0 -4
  323. package/dist/core/areas/api/update.server.js +0 -33
  324. package/dist/core/collections/api/create.server.js +0 -29
  325. package/dist/core/collections/api/delete.server.js +0 -32
  326. package/dist/core/collections/api/deleteById.server.js +0 -16
  327. package/dist/core/collections/api/duplicate.server.js +0 -18
  328. package/dist/core/collections/api/get.server.js +0 -45
  329. package/dist/core/collections/api/getById.server.js +0 -30
  330. package/dist/core/collections/api/index.server.d.ts +0 -17
  331. package/dist/core/collections/api/index.server.js +0 -9
  332. package/dist/core/collections/api/updateById.server.js +0 -38
  333. package/dist/core/dev/cli/init/get-package-info.server.d.ts +0 -1
  334. package/dist/core/dev/cli/init/package-manager-util.server.d.ts +0 -3
  335. package/dist/core/dev/generate/routes/area.server.d.ts +0 -7
  336. package/dist/core/dev/generate/routes/area.server.js +0 -69
  337. package/dist/core/dev/generate/routes/collection.server.d.ts +0 -14
  338. package/dist/core/dev/generate/routes/collection.server.js +0 -129
  339. package/dist/fields/relation/index.server.d.ts +0 -4
  340. package/dist/fields/relation/index.server.js +0 -13
  341. package/dist/live.d.ts +0 -4
  342. package/dist/live.js +0 -4
  343. package/dist/panel/index.server.d.ts +0 -4
  344. package/dist/panel/index.server.js +0 -4
  345. package/dist/panel/pages/auth/index.d.ts +0 -4
  346. package/dist/panel/pages/auth/index.js +0 -4
  347. package/dist/panel/pages/auth/index.server.d.ts +0 -18
  348. package/dist/panel/pages/auth/index.server.js +0 -12
  349. package/dist/panel/pages/index.actions.server.d.ts +0 -13
  350. package/dist/panel/pages/index.actions.server.js +0 -10
  351. package/dist/panel/pages/index.load.server.d.ts +0 -23
  352. package/dist/panel/pages/index.load.server.js +0 -16
  353. package/dist/panel/ui.d.ts +0 -4
  354. package/dist/panel/ui.js +0 -5
  355. /package/dist/core/dev/cli/{util.server.d.ts → util/prompt.server.d.ts} +0 -0
  356. /package/dist/core/dev/cli/{util.server.js → util/prompt.server.js} +0 -0
@@ -1,5 +1,6 @@
1
+ import type { FieldBuilder } from '../../fields/builders/field-builder.js';
1
2
  import type { GenericDoc } from '../../types/doc.js';
2
3
  import type { Field } from '../../../fields/types.js';
3
4
  import type { DeepPartial } from '../../../util/types.js';
4
5
  import type { ConfigMap } from './types.js';
5
- export declare const buildConfigMap: (data: DeepPartial<GenericDoc>, incomingFields: Field[]) => ConfigMap;
6
+ export declare const buildConfigMap: (data: DeepPartial<GenericDoc>, incomingFields: FieldBuilder<Field>[]) => ConfigMap;
@@ -1,8 +1,8 @@
1
1
  import { isFormField } from '../../fields/util.js';
2
- import { isBlocksFieldRaw } from '../../../fields/blocks/index.js';
3
- import { isGroupFieldRaw } from '../../../fields/group/index.js';
4
- import { isTabsFieldRaw } from '../../../fields/tabs/index.js';
5
- import { isTreeFieldRaw } from '../../../fields/tree/index.js';
2
+ import { BlocksBuilder } from '../../../fields/blocks/index.js';
3
+ import { GroupFieldBuilder } from '../../../fields/group/index.js';
4
+ import { TabsBuilder } from '../../../fields/tabs/index.js';
5
+ import { TreeBuilder } from '../../../fields/tree/index.js';
6
6
  import { buildTreeFieldsMap } from './buildTreeMap.js';
7
7
  export const buildConfigMap = (data, incomingFields) => {
8
8
  let map = {};
@@ -11,10 +11,10 @@ export const buildConfigMap = (data, incomingFields) => {
11
11
  return;
12
12
  basePath = basePath === '' ? basePath : `${basePath}.`;
13
13
  for (const field of fields) {
14
- if (isTabsFieldRaw(field)) {
15
- for (const tab of field.tabs) {
14
+ if (field instanceof TabsBuilder) {
15
+ for (const tab of field.get.tabs) {
16
16
  if (tab.name in data) {
17
- traverseData(data[tab.name], tab.fields, tab.name);
17
+ traverseData(data[tab.name], tab.get.fields, tab.name);
18
18
  }
19
19
  }
20
20
  continue;
@@ -26,13 +26,13 @@ export const buildConfigMap = (data, incomingFields) => {
26
26
  const value = data[field.name];
27
27
  const path = `${basePath}${field.name}`;
28
28
  map[path] = field;
29
- if (isBlocksFieldRaw(field) && value && Array.isArray(value)) {
29
+ if (field instanceof BlocksBuilder && value && Array.isArray(value)) {
30
30
  const blocks = value;
31
31
  for (const [index, block] of blocks.entries()) {
32
32
  try {
33
- const blockConfig = field.blocks.find((b) => b.name === block.type);
33
+ const blockConfig = field.get.blocks.find((b) => b.name === block.type);
34
34
  if (blockConfig) {
35
- traverseData(block, blockConfig.fields, `${path}.${index}`);
35
+ traverseData(block, blockConfig.get.fields, `${path}.${index}`);
36
36
  }
37
37
  }
38
38
  catch {
@@ -40,12 +40,12 @@ export const buildConfigMap = (data, incomingFields) => {
40
40
  }
41
41
  }
42
42
  }
43
- else if (isTreeFieldRaw(field) && value && Array.isArray(value)) {
43
+ else if (field instanceof TreeBuilder && value && Array.isArray(value)) {
44
44
  const treeMap = buildTreeFieldsMap(field, value, path);
45
45
  map = { ...map, ...treeMap };
46
46
  }
47
- else if (isGroupFieldRaw(field)) {
48
- traverseData(value, field.fields, path);
47
+ else if (field instanceof GroupFieldBuilder) {
48
+ traverseData(value, field.get.fields, path);
49
49
  }
50
50
  }
51
51
  };
@@ -1,2 +1,2 @@
1
- import type { FormField } from '../../../fields/types.js';
2
- export type ConfigMap = Record<string, FormField>;
1
+ import type { FormFieldBuilder } from '../../fields/builders/form-field-builder.js';
2
+ export type ConfigMap = Record<string, FormFieldBuilder>;
@@ -1,38 +1,35 @@
1
1
  import { logger } from '../../../logger/index.server.js';
2
- import { deleteValueAtPath, getValueAtPath, hasProp, setValueAtPath } from '../../../../util/object.js';
2
+ import { deleteValueAtPath, getValueAtPath, setValueAtPath } from '../../../../util/object.js';
3
3
  import { buildConfigMap } from '../../configMap/index.js';
4
4
  import { getDefaultValue } from '../before-upsert/set-default-values.server.js';
5
5
  import { Hooks } from '../index.server.js';
6
6
  export const processDocumentFields = Hooks.beforeRead(async (args) => {
7
7
  const { event } = args;
8
8
  let doc = args.doc;
9
- const configMap = buildConfigMap(doc, args.config.fields.map((f) => f.compile()));
9
+ const configMap = buildConfigMap(doc, args.config.fields);
10
10
  for (const [key, config] of Object.entries(configMap)) {
11
11
  let value = getValueAtPath(key, doc);
12
12
  let isEmpty;
13
- if (config.access && config.access.read) {
14
- const authorized = config.access.read(event.locals.user);
15
- if (!authorized) {
16
- doc = deleteValueAtPath(doc, key);
17
- continue;
18
- }
13
+ if (!config.run.canRead(event.locals.user)) {
14
+ doc = deleteValueAtPath(doc, key);
15
+ continue;
19
16
  }
20
- if (config.hooks?.beforeRead) {
21
- if (value) {
22
- for (const hook of config.hooks.beforeRead) {
23
- value = await hook(value, { event, config, operation: args.context, documentId: doc.id });
24
- doc = setValueAtPath(key, doc, value);
25
- }
26
- }
17
+ if (value !== undefined && value !== null) {
18
+ value = await config.run.beforeRead(value, {
19
+ event,
20
+ operation: args.context,
21
+ documentId: doc.id
22
+ });
23
+ doc = setValueAtPath(key, doc, value);
27
24
  }
28
25
  try {
29
- isEmpty = config.isEmpty(value);
26
+ isEmpty = config.run.isEmpty(value);
30
27
  }
31
28
  catch {
32
29
  isEmpty = false;
33
30
  logger.warn(`Error in config.isEmpty for field ${key}`);
34
31
  }
35
- if (isEmpty && hasProp('defaultValue', config)) {
32
+ if (isEmpty && config.get.defaultValue !== undefined) {
36
33
  value = await getDefaultValue({ key, config, adapter: args.event.locals.rime.adapter });
37
34
  doc = setValueAtPath(key, doc, value);
38
35
  }
@@ -1 +1 @@
1
- export declare const buildDataConfigMap: import("../index.server.js").Hook<"raw", "create" | "update", "before">;
1
+ export declare const buildDataConfigMap: import("../index.server.js").Hook<"raw", "update" | "create", "before">;
@@ -1,7 +1,7 @@
1
1
  import { buildConfigMap } from '../../configMap/index.js';
2
2
  import { Hooks } from '../index.server.js';
3
3
  export const buildDataConfigMap = Hooks.beforeUpsert(async (args) => {
4
- const configMap = buildConfigMap(args.data, args.config.fields.map((f) => f.compile()));
4
+ const configMap = buildConfigMap(args.data, args.config.fields);
5
5
  return {
6
6
  ...args,
7
7
  context: {
@@ -2,4 +2,4 @@
2
2
  * Handles version-related operations for document updates
3
3
  * Manages specific version updates and new version creation
4
4
  */
5
- export declare const handleNewVersion: import("../index.server.js").Hook<"raw", "create" | "update", "before">;
5
+ export declare const handleNewVersion: import("../index.server.js").Hook<"raw", "update" | "create", "before">;
@@ -1 +1 @@
1
- export declare const buildOriginalDocConfigMap: import("../index.server.js").Hook<"raw", "create" | "update", "before">;
1
+ export declare const buildOriginalDocConfigMap: import("../index.server.js").Hook<"raw", "update" | "create", "before">;
@@ -5,7 +5,7 @@ export const buildOriginalDocConfigMap = Hooks.beforeUpsert(async (args) => {
5
5
  const { originalDoc } = args.context;
6
6
  if (!originalDoc)
7
7
  throw new RimeError(RimeError.OPERATION_ERROR, 'missing originalDoc @buildDataConfigMap');
8
- const originalConfigMap = buildConfigMap(originalDoc, args.config.fields.map((f) => f.compile()));
8
+ const originalConfigMap = buildConfigMap(originalDoc, args.config.fields);
9
9
  return {
10
10
  ...args,
11
11
  context: {
@@ -1,11 +1,9 @@
1
1
  import type { Adapter } from '../../../../adapter-sqlite/index.server.js';
2
- import type { FormField } from '../../../../fields/types.js';
3
- export declare const setDefaultValues: import("../index.server.js").Hook<"raw", "create" | "update", "before">;
2
+ import type { FormFieldBuilder } from '../../../fields/builders/form-field-builder.js';
3
+ export declare const setDefaultValues: import("../index.server.js").Hook<"raw", "update" | "create", "before">;
4
4
  type GetDefaultValue = (args: {
5
5
  key: string;
6
- config: FormField & {
7
- defaultValue: any;
8
- };
6
+ config: FormFieldBuilder;
9
7
  adapter: Adapter;
10
8
  }) => Promise<any>;
11
9
  export declare const getDefaultValue: GetDefaultValue;
@@ -1,8 +1,8 @@
1
1
  import { getRequestEvent } from '$app/server';
2
2
  import { RimeError } from '../../../errors/index.js';
3
3
  import { logger } from '../../../logger/index.server.js';
4
- import { isRelationField } from '../../../../fields/relation/index.js';
5
- import { getValueAtPath, hasProp, setValueAtPath } from '../../../../util/object.js';
4
+ import { RelationFieldBuilder } from '../../../../fields/relation/index.js';
5
+ import { getValueAtPath, setValueAtPath } from '../../../../util/object.js';
6
6
  import { eq, inArray } from 'drizzle-orm';
7
7
  import { Hooks } from '../index.server.js';
8
8
  export const setDefaultValues = Hooks.beforeUpsert(async (args) => {
@@ -15,15 +15,15 @@ export const setDefaultValues = Hooks.beforeUpsert(async (args) => {
15
15
  for (const [key, config] of Object.entries(configMap)) {
16
16
  let value = getValueAtPath(key, output);
17
17
  let isEmpty;
18
- const shouldAddDefault = operation === 'create' || (operation === 'update' && config.required);
18
+ const shouldAddDefault = operation === 'create' || (operation === 'update' && config.get.required);
19
19
  try {
20
- isEmpty = config.isEmpty(value);
20
+ isEmpty = config.run.isEmpty(value);
21
21
  }
22
22
  catch {
23
23
  isEmpty = false;
24
24
  logger.warn(`Error in config.isEmpty for field ${key}`);
25
25
  }
26
- if (shouldAddDefault && isEmpty && hasProp('defaultValue', config)) {
26
+ if (shouldAddDefault && isEmpty && config.get.defaultValue !== undefined) {
27
27
  value = await getDefaultValue({ key, config, adapter: rime.adapter });
28
28
  output = setValueAtPath(key, output, value);
29
29
  }
@@ -41,7 +41,7 @@ const defaultRelationValue = async (config, key, adapter) => {
41
41
  const buildRelation = async (defaultValue) => {
42
42
  let condition;
43
43
  //@TODO encapsulate this into adapter.relation.something
44
- const relationTable = adapter.tables[config.relationTo];
44
+ const relationTable = adapter.tables[config.get.relationTo];
45
45
  if (typeof defaultValue === 'string') {
46
46
  condition = eq(relationTable.id, defaultValue);
47
47
  }
@@ -54,22 +54,17 @@ const defaultRelationValue = async (config, key, adapter) => {
54
54
  .where(condition));
55
55
  return existing.map(({ documentId }, index) => ({
56
56
  id: null,
57
- relationTo: config.relationTo,
57
+ relationTo: config.get.relationTo,
58
58
  path: key,
59
59
  position: index,
60
60
  documentId: documentId
61
61
  }));
62
62
  };
63
- return await buildRelation(config.defaultValue);
63
+ return await buildRelation(config.run.defaultValue({ event: getRequestEvent() }));
64
64
  };
65
65
  export const getDefaultValue = async ({ key, config, adapter }) => {
66
- if (isRelationField(config)) {
66
+ if (config instanceof RelationFieldBuilder) {
67
67
  return await defaultRelationValue(config, key, adapter);
68
68
  }
69
- else {
70
- if (typeof config.defaultValue === 'function') {
71
- return config.defaultValue({ event: getRequestEvent() });
72
- }
73
- return config.defaultValue;
74
- }
69
+ return config.run.defaultValue({ event: getRequestEvent() });
75
70
  };
@@ -1 +1 @@
1
- export declare const validateFields: import("../index.server.js").Hook<"raw", "create" | "update", "before">;
1
+ export declare const validateFields: import("../index.server.js").Hook<"raw", "update" | "create", "before">;
@@ -7,7 +7,13 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
7
7
  const errors = {};
8
8
  const { event, operation } = args;
9
9
  const { rime, user } = event.locals;
10
- const configMap = args.context.configMap;
10
+ // Own copy — an access-denied field gets deleted from here too, not just
11
+ // from `output`. `updateById` turns this map's keys into `incomingPaths`,
12
+ // which saveRelations/saveBlocks/saveTreeBlocks use to decide which
13
+ // existing rows are even in scope for this request; leaving a denied
14
+ // field's path in there made its silently-dropped write look like an
15
+ // explicit "no relations/blocks here anymore" and delete the existing data.
16
+ const configMap = { ...args.context.configMap };
11
17
  const locale = args.context.params.locale || args.event.locals.locale;
12
18
  const slug = args.config.slug;
13
19
  const isCollection = rime.config.isCollection(slug);
@@ -16,9 +22,15 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
16
22
  throw new RimeError(RimeError.OPERATION_ERROR, 'missing configMap @validateFields');
17
23
  // Get the skip parameter from the url
18
24
  const paramSkip = event.url.searchParams.get(PARAMS.SKIP_VALIDATION) === 'true' || false;
19
- // Skip validation on locale fallback as the validation has already been done on creation
25
+ // Skip validation/hooks on locale fallback — this data is `omitId(document)`
26
+ // read back from the just-created document (see create.ts's other-locales
27
+ // loop), already fully processed once. skipHooks gates validate() as well
28
+ // as beforeValidate/beforeSave: a non-idempotent hook (e.g. appending a
29
+ // suffix) would otherwise re-apply itself on every other locale and
30
+ // corrupt non-localized fields, which share the same underlying storage
31
+ // across locales.
20
32
  const skipUnique = args.context.isFallbackLocale || paramSkip;
21
- const skipValidate = args.context.isFallbackLocale || paramSkip;
33
+ const skipHooks = args.context.isFallbackLocale || paramSkip;
22
34
  const skipRequired = args.context.isFallbackLocale || paramSkip;
23
35
  const skipAccess = args.context.isFallbackLocale || args.context.isSystemOperation;
24
36
  for (const [key, config] of Object.entries(configMap)) {
@@ -28,7 +40,7 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
28
40
  /****************************************************/
29
41
  // Unique
30
42
  /** @TODO better unique check like relations, locale,... */
31
- if ('unique' in config && config.unique && isCollection && !skipUnique) {
43
+ if ('unique' in config.get && config.get.unique && isCollection && !skipUnique) {
32
44
  let query;
33
45
  switch (operation) {
34
46
  case 'create':
@@ -50,72 +62,74 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
50
62
  /****************************************************/
51
63
  /* Field hook before validate
52
64
  /****************************************************/
53
- if (config.hooks?.beforeValidate) {
54
- if (value) {
55
- for (const hook of config.hooks.beforeValidate) {
56
- value = await hook(value, { config, data: args.data });
57
- output = setValueAtPath(key, output, value);
58
- }
59
- }
65
+ if (value !== undefined && value !== null && !skipHooks) {
66
+ value = await config.run.beforeValidate(value, { config, data: args.data });
67
+ output = setValueAtPath(key, output, value);
60
68
  }
61
69
  /****************************************************/
62
70
  /* Validate
63
71
  /****************************************************/
64
- if (config.validate && value && !skipValidate) {
72
+ if (config.get.validate && value !== undefined && value !== null && !skipHooks) {
65
73
  try {
66
- const valid = config.validate(value, {
74
+ const valid = config.run.validate(value, {
67
75
  data: output,
68
76
  operation,
69
77
  id: operation === 'update' ? args.context.originalDoc?.id : undefined,
70
78
  user: user,
71
79
  locale,
72
- config
80
+ config: config.get
73
81
  });
74
82
  if (valid !== true) {
75
83
  errors[key] = valid;
76
84
  }
77
85
  }
78
- catch {
86
+ catch (err) {
79
87
  logger.warn(`Error while validating field ${key}`);
88
+ console.debug(`[validateFields] field "${key}" threw:`, err);
80
89
  errors[key] = RimeFormError.VALIDATION_ERROR;
81
90
  }
82
91
  }
83
- /****************************************************/
92
+ /*
84
93
  /* Field hook before Save
85
- /****************************************************/
86
- if (config.hooks?.beforeSave) {
87
- if (value) {
88
- for (const hook of config.hooks.beforeSave) {
89
- value = await hook(value, { config, event, operation: args.context });
90
- output = setValueAtPath(key, output, value);
91
- }
92
- }
94
+ */
95
+ if (value !== undefined && value !== null && !skipHooks) {
96
+ value = await config.run.beforeSave(value, {
97
+ config: config.get,
98
+ event,
99
+ operation: args.context
100
+ });
101
+ output = setValueAtPath(key, output, value);
93
102
  }
94
103
  /****************************************************/
95
104
  /* Access
96
105
  /****************************************************/
97
- if (config.access && config.access.update && operation === 'update' && !skipAccess) {
98
- const authorizedFieldUpdate = config.access.update(user, {
106
+ if (operation === 'update' && !skipAccess) {
107
+ const authorizedFieldUpdate = config.run.canUpdate(user, {
99
108
  id: args.context.originalDoc?.id
100
109
  });
101
110
  if (!authorizedFieldUpdate) {
102
111
  output = deleteValueAtPath(output, key);
112
+ delete configMap[key];
103
113
  value = undefined;
104
114
  }
105
115
  }
106
- if (config.access && config.access.create && operation === 'create' && !skipAccess) {
107
- const authorizedFieldCreate = config.access.create(user, {
116
+ if (operation === 'create' && !skipAccess) {
117
+ const authorizedFieldCreate = config.run.canCreate(user, {
108
118
  id: undefined
109
119
  });
110
120
  if (!authorizedFieldCreate) {
111
121
  output = deleteValueAtPath(output, key);
122
+ delete configMap[key];
112
123
  value = undefined;
113
124
  }
114
125
  }
115
126
  // Required
116
- if (config.required && config.isEmpty(value)) {
127
+ if (config.get.required && config.run.isEmpty(value)) {
117
128
  if (skipRequired) {
118
- output = setValueAtPath(key, output, '');
129
+ // The field's own type-correct default (falling back to '' only
130
+ // when none is set) — a hardcoded '' here was wrong for every
131
+ // non-string required field (number, checkbox, date, ...).
132
+ output = setValueAtPath(key, output, config.run.defaultValue({ event }) ?? '');
119
133
  }
120
134
  else {
121
135
  errors[key] = RimeFormError.REQUIRED_FIELD;
@@ -127,6 +141,10 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
127
141
  }
128
142
  return {
129
143
  ...args,
130
- data: output
144
+ data: output,
145
+ context: {
146
+ ...args.context,
147
+ configMap
148
+ }
131
149
  };
132
150
  });
@@ -1,17 +1,17 @@
1
- import { isRelationField } from '../../../fields/relation/index.js';
1
+ import { RelationFieldBuilder } from '../../../fields/relation/index.js';
2
2
  import { getValueAtPath } from '../../../util/object.js';
3
3
  export const extractRelations = ({ ownerId, data, configMap, locale }) => {
4
4
  const relations = [];
5
5
  for (const [path, config] of Object.entries(configMap)) {
6
- if (isRelationField(config)) {
6
+ if (config instanceof RelationFieldBuilder) {
7
7
  const value = getValueAtPath(path, data);
8
- const localized = config.localized;
8
+ const localized = config.get.localized;
9
9
  const relationRawValue = value;
10
10
  let output = [];
11
11
  const relationFromString = ({ value, position = 0 }) => {
12
12
  const result = {
13
13
  position,
14
- relationTo: config.relationTo,
14
+ relationTo: config.get.relationTo,
15
15
  documentId: value,
16
16
  ownerId,
17
17
  path
@@ -25,7 +25,7 @@ export const extractRelations = ({ ownerId, data, configMap, locale }) => {
25
25
  const result = {
26
26
  id: value.id || undefined,
27
27
  position,
28
- relationTo: config.relationTo,
28
+ relationTo: config.get.relationTo,
29
29
  documentId: value.documentId,
30
30
  ownerId,
31
31
  path
@@ -10,13 +10,13 @@ export const fallbackDataFromOriginal = async (args) => {
10
10
  if (ignore.includes(key))
11
11
  continue;
12
12
  // skip if not required and mode is 'required'
13
- const shouldUpdate = (config.required && mode === 'required') || mode === 'all';
13
+ const shouldUpdate = (config.get.required && mode === 'required') || mode === 'all';
14
14
  if (!shouldUpdate)
15
15
  continue;
16
16
  let value = getValueAtPath(key, output);
17
17
  let isEmpty;
18
18
  try {
19
- isEmpty = config.isEmpty(value);
19
+ isEmpty = config.run.isEmpty(value);
20
20
  }
21
21
  catch {
22
22
  isEmpty = false;
@@ -12,7 +12,7 @@ export function defineTreeBlocksDiff({ existingBlocks, incomingBlocks, context }
12
12
  // - If a block is not localized than it should keep its id so block is updated
13
13
  if (context.isFallbackLocale) {
14
14
  incomingBlocks = incomingBlocks.map((block) => {
15
- const isLocalized = configMap[block.path]?.localized || false;
15
+ const isLocalized = configMap[block.path]?.get.localized || false;
16
16
  if (isLocalized) {
17
17
  delete block.id;
18
18
  block.locale = context.isFallbackLocale;
@@ -22,7 +22,7 @@ export function extractTreeBlocks({ data, configMap }) {
22
22
  Object.entries(configMap).forEach(([path, config]) => {
23
23
  if (config.type === 'tree') {
24
24
  const value = getValueAtPath(path, data);
25
- const isEmptyValue = config.isEmpty(value);
25
+ const isEmptyValue = config.run.isEmpty(value);
26
26
  if (value && !isEmptyValue) {
27
27
  value.forEach((item, index) => {
28
28
  processTreeItem(item, index, path, undefined);
@@ -1,5 +1,5 @@
1
1
  import { dev } from '$app/environment';
2
- import { handleError } from '../../errors/handler.server.js';
2
+ import { ERROR_CONTEXT, handleError } from '../../errors/handler.server.js';
3
3
  import { RimeError, RimeFormError } from '../../errors/index.js';
4
4
  import { extractData } from '../../operations/extract-data.server.js';
5
5
  import { trycatch, trycatchSync } from '../../../util/function.js';
@@ -12,13 +12,18 @@ export const apiInit = definePlugin(() => {
12
12
  throw new RimeError(RimeError.NOT_FOUND);
13
13
  const hasAuthUser = await event.locals.rime.adapter.auth.hasAuthUser();
14
14
  if (hasAuthUser || (!hasAuthUser && !dev)) {
15
- throw handleError(new RimeError(RimeError.NOT_FOUND), { context: 'api' });
15
+ throw handleError(new RimeError(RimeError.NOT_FOUND), { context: ERROR_CONTEXT.API });
16
+ }
17
+ const [extractError, data] = await trycatch(() => extractData(event.request));
18
+ if (extractError) {
19
+ throw handleError(new RimeError(RimeError.INVALID_DATA, extractError.message), {
20
+ context: ERROR_CONTEXT.API
21
+ });
16
22
  }
17
- const data = await extractData(event.request);
18
23
  const [error] = trycatchSync(() => validateForm(data));
19
24
  if (error) {
20
- throw handleError(error, {
21
- context: 'action',
25
+ throw handleError(new RimeError(RimeError.INVALID_DATA, error.message), {
26
+ context: ERROR_CONTEXT.ACTION,
22
27
  formData: { email: data.email }
23
28
  });
24
29
  }
@@ -1,12 +1,9 @@
1
1
  import { getRequestEvent } from '$app/server';
2
- import { RimeError } from '../../errors';
2
+ import { RimeError } from '../../errors/index.js';
3
3
  import { logger } from '../../logger/index.server.js';
4
4
  import fs from 'fs';
5
5
  import path from 'path';
6
6
  const cachePath = path.resolve(process.cwd(), '.cache');
7
- if (!fs.existsSync(cachePath)) {
8
- fs.mkdirSync(cachePath);
9
- }
10
7
  const IS_ENV_CACHE_ENABLED = process.env.RIME_CACHE_ENABLED === 'true';
11
8
  export class Cache {
12
9
  static memoryCache = new Map();
@@ -68,6 +65,9 @@ export class Cache {
68
65
  this.memoryCache.set(key, value);
69
66
  }
70
67
  static async setToDisk(key, value) {
68
+ if (!fs.existsSync(cachePath)) {
69
+ fs.mkdirSync(cachePath);
70
+ }
71
71
  const keyPath = path.join(cachePath, key + '.txt');
72
72
  await fs.promises.writeFile(keyPath, value);
73
73
  }
@@ -1761,13 +1761,13 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
1761
1761
  $Infer: {
1762
1762
  body: ({
1763
1763
  permission: {
1764
- readonly user?: ("create" | "update" | "delete" | "list" | "get" | "set-role" | "ban" | "impersonate" | "set-password")[] | undefined;
1764
+ readonly user?: ("update" | "create" | "delete" | "list" | "get" | "set-role" | "ban" | "impersonate" | "set-password")[] | undefined;
1765
1765
  readonly session?: ("delete" | "list" | "revoke")[] | undefined;
1766
1766
  };
1767
1767
  permissions?: never | undefined;
1768
1768
  } | {
1769
1769
  permissions: {
1770
- readonly user?: ("create" | "update" | "delete" | "list" | "get" | "set-role" | "ban" | "impersonate" | "set-password")[] | undefined;
1770
+ readonly user?: ("update" | "create" | "delete" | "list" | "get" | "set-role" | "ban" | "impersonate" | "set-password")[] | undefined;
1771
1771
  readonly session?: ("delete" | "list" | "revoke")[] | undefined;
1772
1772
  };
1773
1773
  permission?: never | undefined;
@@ -1982,9 +1982,9 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
1982
1982
  isValidLocale: (locale: string) => boolean;
1983
1983
  getArea: (slug: string) => import("./config/types.js").BuiltArea;
1984
1984
  getCollection: (slug: string) => import("./config/types.js").BuiltCollection;
1985
- getBySlug: (slug: string) => import("./config/types.js").BuiltCollection | import("./config/types.js").BuiltArea;
1986
- isCollection: (slug: string) => slug is import("./types/doc.js").CollectionSlug;
1987
- isArea: (slug: string) => slug is import("./types/doc.js").AreaSlug;
1985
+ getBySlug: (slug: string) => import("./config/types.js").BuiltArea | import("./config/types.js").BuiltCollection;
1986
+ isCollection: (slug?: string) => slug is import("./types/doc.js").CollectionSlug;
1987
+ isArea: (slug?: string) => slug is import("./types/doc.js").AreaSlug;
1988
1988
  getDocumentPrototype(slug: import("./types/doc.js").PrototypeSlug): "area" | "collection";
1989
1989
  };
1990
1990
  readonly plugins: {
@@ -3767,13 +3767,13 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
3767
3767
  $Infer: {
3768
3768
  body: ({
3769
3769
  permission: {
3770
- readonly user?: ("create" | "update" | "delete" | "list" | "get" | "set-role" | "ban" | "impersonate" | "set-password")[] | undefined;
3770
+ readonly user?: ("update" | "create" | "delete" | "list" | "get" | "set-role" | "ban" | "impersonate" | "set-password")[] | undefined;
3771
3771
  readonly session?: ("delete" | "list" | "revoke")[] | undefined;
3772
3772
  };
3773
3773
  permissions?: never | undefined;
3774
3774
  } | {
3775
3775
  permissions: {
3776
- readonly user?: ("create" | "update" | "delete" | "list" | "get" | "set-role" | "ban" | "impersonate" | "set-password")[] | undefined;
3776
+ readonly user?: ("update" | "create" | "delete" | "list" | "get" | "set-role" | "ban" | "impersonate" | "set-password")[] | undefined;
3777
3777
  readonly session?: ("delete" | "list" | "revoke")[] | undefined;
3778
3778
  };
3779
3779
  permission?: never | undefined;
@@ -4004,9 +4004,9 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
4004
4004
  isValidLocale: (locale: string) => boolean;
4005
4005
  getArea: (slug: string) => import("./config/types.js").BuiltArea;
4006
4006
  getCollection: (slug: string) => import("./config/types.js").BuiltCollection;
4007
- getBySlug: (slug: string) => import("./config/types.js").BuiltCollection | import("./config/types.js").BuiltArea;
4008
- isCollection: (slug: string) => slug is import("./types/doc.js").CollectionSlug;
4009
- isArea: (slug: string) => slug is import("./types/doc.js").AreaSlug;
4007
+ getBySlug: (slug: string) => import("./config/types.js").BuiltArea | import("./config/types.js").BuiltCollection;
4008
+ isCollection: (slug?: string) => slug is import("./types/doc.js").CollectionSlug;
4009
+ isArea: (slug?: string) => slug is import("./types/doc.js").AreaSlug;
4010
4010
  getDocumentPrototype(slug: import("./types/doc.js").PrototypeSlug): "area" | "collection";
4011
4011
  };
4012
4012
  /**
@@ -79,7 +79,11 @@ export async function createRime(config) {
79
79
  function defineLocale(event) {
80
80
  // locale present inside the url params ex : /en/foo
81
81
  const params = event.params;
82
- const paramLocale = 'locale' in params && typeof params.locale === 'string' ? params.locale : null;
82
+ const paramLocale = 'locale' in params &&
83
+ typeof params.locale === 'string' &&
84
+ configCtx.getLocalesCodes().includes(params.locale)
85
+ ? params.locale
86
+ : null;
83
87
  // locale present as a search param ex : ?locale=en
84
88
  const searchParams = event.url.searchParams;
85
89
  const hasParams = searchParams.toString();