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,10 +1,10 @@
1
- import { getFieldConfigByPath } from '../core/fields/util.js';
1
+ import { getFieldAtPath } from '../core/fields/util.js';
2
2
  import { withLocalesSuffix } from '../core/naming.js';
3
- import { isBlocksFieldRaw } from '../fields/blocks/index.js';
4
- import { isRelationField } from '../fields/relation/index.js';
5
- import { isTreeFieldRaw } from '../fields/tree/index.js';
3
+ import { BlocksBuilder } from '../fields/blocks/index.js';
4
+ import { RelationFieldBuilder } from '../fields/relation/index.js';
5
+ import { TreeBuilder } from '../fields/tree/index.js';
6
6
  import { asc, eq, getTableColumns, or, SQL } from 'drizzle-orm';
7
- import { getBlocksTableNames, getTreeTableNames } from './generate-schema/util.js';
7
+ import { getBlocksTableNames, getTreeTableNames } from './generate-schema/util.server.js';
8
8
  export const buildWithParam = (args) => {
9
9
  const { slug, select = [], locale, tables, config: documentConfig } = args;
10
10
  if (!select.length) {
@@ -22,12 +22,12 @@ export const buildWithParam = (args) => {
22
22
  for (const path of select) {
23
23
  // Convert dot notation to double underscore notation for SQLite queries
24
24
  const sqlPath = path.replace(/\./g, '__');
25
- const fieldConfig = getFieldConfigByPath(path, documentConfig.fields.map((f) => f.compile()));
26
- if (fieldConfig && isRelationField(fieldConfig)) {
25
+ const fieldConfig = getFieldAtPath(path, documentConfig.fields);
26
+ if (fieldConfig instanceof RelationFieldBuilder) {
27
27
  // Handle relation fields
28
28
  directRelationPaths.push(path);
29
29
  }
30
- else if (fieldConfig && isBlocksFieldRaw(fieldConfig)) {
30
+ else if (fieldConfig instanceof BlocksBuilder) {
31
31
  // Handle blocks fields
32
32
  blockPaths.push(path);
33
33
  const blocksTables = getBlocksTableNames(slug, tables);
@@ -56,7 +56,7 @@ export const buildWithParam = (args) => {
56
56
  }
57
57
  }
58
58
  }
59
- else if (fieldConfig && isTreeFieldRaw(fieldConfig)) {
59
+ else if (fieldConfig instanceof TreeBuilder) {
60
60
  // Handle tree fields
61
61
  treePaths.push(path);
62
62
  const treeTables = getTreeTableNames(slug, tables);
@@ -87,7 +87,7 @@ export const buildWithParam = (args) => {
87
87
  }
88
88
  else if (fieldConfig) {
89
89
  // Handle regular fields
90
- if (fieldConfig.localized && locale) {
90
+ if (fieldConfig.get.localized && locale) {
91
91
  const localesTableName = withLocalesSuffix(slug);
92
92
  if (localesTableName in tables) {
93
93
  const tableLocales = tables[localesTableName];
@@ -1,6 +1,8 @@
1
- import type { AreaSlug } from '../../types/doc.js';
2
1
  import { type RequestEvent } from '@sveltejs/kit';
3
- export default function (slug: AreaSlug): (event: RequestEvent) => Promise<Response | import("@sveltejs/kit").ActionFailure<{
2
+ /**
3
+ * GET handler for the area API endpoint.
4
+ */
5
+ export declare function restGet(event: RequestEvent): Promise<Response | import("@sveltejs/kit").ActionFailure<{
4
6
  form: Record<string, any>;
5
7
  errors: import("../../../types").FormErrors;
6
8
  }> | import("@sveltejs/kit").ActionFailure<{
@@ -0,0 +1,45 @@
1
+ import { PARAMS } from '../../constant.js';
2
+ import { RimeError } from '../../errors/index.js';
3
+ import { handleError } from '../../errors/handler.server.js';
4
+ import { trycatch } from '../../../util/function.js';
5
+ import { json } from '@sveltejs/kit';
6
+ /**
7
+ * GET handler for the area API endpoint.
8
+ */
9
+ export async function restGet(event) {
10
+ //
11
+ const { rime } = event.locals;
12
+ // Check if the slug corresponds to a valid area
13
+ const slug = event.params.slug;
14
+ if (!rime.config.isArea(slug)) {
15
+ return handleError(new RimeError(RimeError.NOT_FOUND), { context: 'api' });
16
+ }
17
+ const params = event.url.searchParams;
18
+ const areaAPI = rime.area(slug);
19
+ // Build the select parameter for the API call based on the request parameters
20
+ function buildSelect(params) {
21
+ const paramSelect = params.get(PARAMS.SELECT)
22
+ ? params.get(PARAMS.SELECT).split(',')
23
+ : undefined;
24
+ if (paramSelect &&
25
+ paramSelect.includes('title') &&
26
+ !paramSelect.includes(areaAPI.config.asTitle)) {
27
+ paramSelect.push(areaAPI.config.asTitle);
28
+ }
29
+ return paramSelect;
30
+ }
31
+ // Prepare the parameters for the API call to find the area document
32
+ const apiParams = {
33
+ locale: rime.getLocale(),
34
+ draft: params.get(PARAMS.DRAFT) ? params.get(PARAMS.DRAFT) === 'true' : undefined,
35
+ versionId: params.get(PARAMS.VERSION_ID) || undefined,
36
+ depth: params.get(PARAMS.DEPTH) ? parseInt(params.get(PARAMS.DEPTH)) : 0,
37
+ select: buildSelect(params)
38
+ };
39
+ // Call the area API to find the document based on the prepared parameters
40
+ const [error, doc] = await trycatch(() => rime.area(slug).find(apiParams));
41
+ if (error) {
42
+ return handleError(error, { context: 'api' });
43
+ }
44
+ return json({ doc });
45
+ }
@@ -0,0 +1,6 @@
1
+ import { restGet } from './get.server.js';
2
+ import { restUpdate } from './update.server.js';
3
+ export declare const rest: {
4
+ get: typeof restGet;
5
+ update: typeof restUpdate;
6
+ };
@@ -0,0 +1,3 @@
1
+ import { restGet } from './get.server.js';
2
+ import { restUpdate } from './update.server.js';
3
+ export const rest = { get: restGet, update: restUpdate };
@@ -1,6 +1,8 @@
1
- import type { AreaSlug } from '../../types/doc.js';
2
1
  import { type RequestEvent } from '@sveltejs/kit';
3
- export default function (slug: AreaSlug): (event: RequestEvent) => Promise<Response | import("@sveltejs/kit").ActionFailure<{
2
+ /**
3
+ * POST handler for the area API endpoint.
4
+ */
5
+ export declare function restUpdate(event: RequestEvent): Promise<Response | import("@sveltejs/kit").ActionFailure<{
4
6
  form: Record<string, any>;
5
7
  errors: import("../../../types").FormErrors;
6
8
  }> | import("@sveltejs/kit").ActionFailure<{
@@ -0,0 +1,43 @@
1
+ import { PARAMS } from '../../constant.js';
2
+ import { RimeError } from '../../errors/index.js';
3
+ import { ERROR_CONTEXT, handleError } from '../../errors/handler.server.js';
4
+ import { extractData } from '../../operations/extract-data.server.js';
5
+ import { trycatch } from '../../../util/function.js';
6
+ import { json } from '@sveltejs/kit';
7
+ /**
8
+ * POST handler for the area API endpoint.
9
+ */
10
+ export async function restUpdate(event) {
11
+ //
12
+ const { rime } = event.locals;
13
+ const slug = event.params.slug;
14
+ // Check if the slug corresponds to a valid area
15
+ if (!rime.config.isArea(slug)) {
16
+ return handleError(new RimeError(RimeError.NOT_FOUND), { context: ERROR_CONTEXT.API });
17
+ }
18
+ // Extract versionId and draft parameters from the request URL
19
+ const versionId = event.url.searchParams.get(PARAMS.VERSION_ID) || undefined;
20
+ const draft = event.url.searchParams.get(PARAMS.DRAFT)
21
+ ? event.url.searchParams.get(PARAMS.DRAFT) === 'true'
22
+ : undefined;
23
+ // Extract data from the request body
24
+ const [extractError, data] = await trycatch(() => extractData(event.request));
25
+ if (extractError) {
26
+ return handleError(extractError, { context: ERROR_CONTEXT.API });
27
+ }
28
+ // Set the locale if provided in the data
29
+ if (data.locale) {
30
+ rime.setLocale(data.locale);
31
+ }
32
+ // Update the area with the extracted data, versionId, draft status, and current locale
33
+ const [error, doc] = await trycatch(() => rime.area(slug).update({
34
+ data,
35
+ versionId,
36
+ draft,
37
+ locale: rime.getLocale()
38
+ }));
39
+ if (error) {
40
+ return handleError(error, { context: ERROR_CONTEXT.API });
41
+ }
42
+ return json({ doc });
43
+ }
@@ -1,190 +1,10 @@
1
- declare const emailField: {
2
- _metaUrl: string;
3
- layout(layout: "compact" | "default"): /*elided*/ any;
4
- readonly component: import("svelte").Component<import("../../../fields/email/component/props").EmailFieldProps, {}, "">;
5
- unique(bool?: boolean): /*elided*/ any;
6
- defaultValue(value: string | import("../../../types").DefaultValueFn<string>): /*elided*/ any;
7
- isTitle(): /*elided*/ any;
8
- _generateSchema: null | ((args: {
9
- camel: string;
10
- snake: string;
11
- suffix: string;
12
- }) => string);
13
- readonly name: string;
14
- label(label: string): /*elided*/ any;
15
- hidden(): /*elided*/ any;
16
- localized(): /*elided*/ any;
17
- validate(validateFunction: import("../../../types").FieldValidationFunc<import("../../../fields/email/index.js").EmailField>): /*elided*/ any;
18
- condition(conditionFunction: (doc: import("../../../util/types").Dic, siblings: import("../../../util/types").Dic) => boolean): /*elided*/ any;
19
- table(params?: import("../../../types").FieldPanelTableConfig | number): /*elided*/ any;
20
- width(value: import("../../../types").FieldWidth): /*elided*/ any;
21
- required(bool?: boolean): /*elided*/ any;
22
- access(access: {
23
- create?: import("../../../types").FieldAccess;
24
- read?: import("../../../types").FieldAccess;
25
- update?: import("../../../types").FieldAccess;
26
- }): /*elided*/ any;
27
- onChange(hook: import("../../../types").FieldHookClient): /*elided*/ any;
28
- hint(hint: string): /*elided*/ any;
29
- clone(): /*elided*/ any;
30
- $generateSchema(fn: (args: {
31
- camel: string;
32
- snake: string;
33
- suffix: string;
34
- }) => string): /*elided*/ any;
35
- $beforeRead(hook: import("../../../types").FieldHook<import("../../../fields/email/index.js").EmailField>): /*elided*/ any;
36
- $beforeSave(hook: import("../../../types").FieldHook<import("../../../fields/email/index.js").EmailField>): /*elided*/ any;
37
- beforeValidate(hook: import("../../../types").FieldHookShared): /*elided*/ any;
38
- field: import("../../../fields/email/index.js").EmailField;
39
- className(str: string): /*elided*/ any;
40
- compile(): {
41
- type: "email";
42
- live?: boolean | undefined;
43
- condition?: ((doc: any, siblings: any) => boolean) | undefined;
44
- width?: import("../../../types").FieldWidth | undefined;
45
- className?: string | undefined;
46
- component: import("svelte").Component<any>;
47
- cell: import("svelte").Component<any> | undefined;
48
- access: {
49
- create: import("../../../types").FieldAccess;
50
- read: import("../../../types").FieldAccess;
51
- update: import("../../../types").FieldAccess;
52
- };
53
- name: string;
54
- hidden?: boolean | undefined;
55
- validate?: import("../../../types").FieldValidationFunc<any> | undefined;
56
- required?: boolean | undefined;
57
- localized?: boolean | undefined;
58
- label?: string | undefined;
59
- hint?: string | undefined;
60
- table?: {
61
- cell?: import("svelte").Component<{
62
- value: any;
63
- }> | undefined;
64
- sort?: boolean | undefined;
65
- position: number;
66
- } | undefined;
67
- hooks?: {
68
- beforeRead?: import("../../../types").FieldHook<any>[] | undefined;
69
- beforeSave?: import("../../../types").FieldHook<any>[] | undefined;
70
- beforeValidate?: import("../../../types").FieldHookShared<any>[] | undefined;
71
- onChange?: import("../../../types").FieldHookClient[] | undefined;
72
- } | undefined;
73
- defaultValue?: string | import("../../../types").DefaultValueFn<string> | undefined;
74
- isEmpty: (value: unknown) => boolean;
75
- placeholder?: string | undefined;
76
- layout?: "compact" | "default" | undefined;
77
- unique?: boolean | undefined;
78
- isTitle?: true | undefined;
79
- } & {
80
- component: import("svelte").Component<any>;
81
- cell?: import("svelte").Component<{
82
- value: any;
83
- }> | null;
84
- };
85
- live(bool: boolean): /*elided*/ any;
86
- readonly type: string;
87
- readonly raw: import("../../../fields/email/index.js").EmailField;
88
- readonly cell: import("svelte").Component<{
89
- value: any;
90
- }> | null;
91
- };
1
+ declare const emailField: import("../../../fields/email/index.js").EmailFieldBuilder;
92
2
  declare const name: import("../../../fields/text/index.js").TextFieldBuilder;
93
3
  declare const roles: import("../../../fields/select/index.js").SelectFieldBuilder;
94
4
  declare const password: import("../../../fields/text/index.js").TextFieldBuilder;
95
5
  declare const confirmPassword: import("../../../fields/text/index.js").TextFieldBuilder;
96
6
  export declare const usersFields: {
97
- email: {
98
- _metaUrl: string;
99
- layout(layout: "compact" | "default"): /*elided*/ any;
100
- readonly component: import("svelte").Component<import("../../../fields/email/component/props").EmailFieldProps, {}, "">;
101
- unique(bool?: boolean): /*elided*/ any;
102
- defaultValue(value: string | import("../../../types").DefaultValueFn<string>): /*elided*/ any;
103
- isTitle(): /*elided*/ any;
104
- _generateSchema: null | ((args: {
105
- camel: string;
106
- snake: string;
107
- suffix: string;
108
- }) => string);
109
- readonly name: string;
110
- label(label: string): /*elided*/ any;
111
- hidden(): /*elided*/ any;
112
- localized(): /*elided*/ any;
113
- validate(validateFunction: import("../../../types").FieldValidationFunc<import("../../../fields/email/index.js").EmailField>): /*elided*/ any;
114
- condition(conditionFunction: (doc: import("../../../util/types").Dic, siblings: import("../../../util/types").Dic) => boolean): /*elided*/ any;
115
- table(params?: import("../../../types").FieldPanelTableConfig | number): /*elided*/ any;
116
- width(value: import("../../../types").FieldWidth): /*elided*/ any;
117
- required(bool?: boolean): /*elided*/ any;
118
- access(access: {
119
- create?: import("../../../types").FieldAccess;
120
- read?: import("../../../types").FieldAccess;
121
- update?: import("../../../types").FieldAccess;
122
- }): /*elided*/ any;
123
- onChange(hook: import("../../../types").FieldHookClient): /*elided*/ any;
124
- hint(hint: string): /*elided*/ any;
125
- clone(): /*elided*/ any;
126
- $generateSchema(fn: (args: {
127
- camel: string;
128
- snake: string;
129
- suffix: string;
130
- }) => string): /*elided*/ any;
131
- $beforeRead(hook: import("../../../types").FieldHook<import("../../../fields/email/index.js").EmailField>): /*elided*/ any;
132
- $beforeSave(hook: import("../../../types").FieldHook<import("../../../fields/email/index.js").EmailField>): /*elided*/ any;
133
- beforeValidate(hook: import("../../../types").FieldHookShared): /*elided*/ any;
134
- field: import("../../../fields/email/index.js").EmailField;
135
- className(str: string): /*elided*/ any;
136
- compile(): {
137
- type: "email";
138
- live?: boolean | undefined;
139
- condition?: ((doc: any, siblings: any) => boolean) | undefined;
140
- width?: import("../../../types").FieldWidth | undefined;
141
- className?: string | undefined;
142
- component: import("svelte").Component<any>;
143
- cell: import("svelte").Component<any> | undefined;
144
- access: {
145
- create: import("../../../types").FieldAccess;
146
- read: import("../../../types").FieldAccess;
147
- update: import("../../../types").FieldAccess;
148
- };
149
- name: string;
150
- hidden?: boolean | undefined;
151
- validate?: import("../../../types").FieldValidationFunc<any> | undefined;
152
- required?: boolean | undefined;
153
- localized?: boolean | undefined;
154
- label?: string | undefined;
155
- hint?: string | undefined;
156
- table?: {
157
- cell?: import("svelte").Component<{
158
- value: any;
159
- }> | undefined;
160
- sort?: boolean | undefined;
161
- position: number;
162
- } | undefined;
163
- hooks?: {
164
- beforeRead?: import("../../../types").FieldHook<any>[] | undefined;
165
- beforeSave?: import("../../../types").FieldHook<any>[] | undefined;
166
- beforeValidate?: import("../../../types").FieldHookShared<any>[] | undefined;
167
- onChange?: import("../../../types").FieldHookClient[] | undefined;
168
- } | undefined;
169
- defaultValue?: string | import("../../../types").DefaultValueFn<string> | undefined;
170
- isEmpty: (value: unknown) => boolean;
171
- placeholder?: string | undefined;
172
- layout?: "compact" | "default" | undefined;
173
- unique?: boolean | undefined;
174
- isTitle?: true | undefined;
175
- } & {
176
- component: import("svelte").Component<any>;
177
- cell?: import("svelte").Component<{
178
- value: any;
179
- }> | null;
180
- };
181
- live(bool: boolean): /*elided*/ any;
182
- readonly type: string;
183
- readonly raw: import("../../../fields/email/index.js").EmailField;
184
- readonly cell: import("svelte").Component<{
185
- value: any;
186
- }> | null;
187
- };
7
+ email: import("../../../fields/email/index.js").EmailFieldBuilder;
188
8
  name: import("../../../fields/text/index.js").TextFieldBuilder;
189
9
  roles: import("../../../fields/select/index.js").SelectFieldBuilder;
190
10
  password: import("../../../fields/text/index.js").TextFieldBuilder;
@@ -3,4 +3,4 @@
3
3
  * add fields password and confirmPassword
4
4
  * to add validations
5
5
  */
6
- export declare const augmentFieldsPassword: import("../../../../operations/hooks/index.server.js").Hook<"auth", "create" | "update", "before">;
6
+ export declare const augmentFieldsPassword: import("../../../../operations/hooks/index.server.js").Hook<"auth", "update" | "create", "before">;
@@ -11,7 +11,7 @@ export const augmentAuthServer = (config) => {
11
11
  function addSchemaStaffReferenceForAPIKeys() {
12
12
  (collection.fields || []).forEach((field) => {
13
13
  if (field instanceof FormFieldBuilder && field.name === 'ownerId') {
14
- field = field.$generateSchema(() => `ownerId: text('onwer_id').references(() => staff.id, {onDelete: 'cascade'})`);
14
+ field.$references('staff', { onDelete: 'cascade' });
15
15
  }
16
16
  });
17
17
  return collection;
@@ -8,7 +8,7 @@ export const augmentNestedServer = (config) => {
8
8
  const fields = [...(config.fields || [])];
9
9
  if (config.nested) {
10
10
  const _parentField = text('_parent')
11
- .$generateSchema(() => `_parent: text('_parent').references((): any => ${config.slug}.id, {onDelete: 'set null'})`)
11
+ .$references(config.slug, { onDelete: 'set null', selfReferencing: true })
12
12
  .hidden()
13
13
  ._root();
14
14
  fields.push(_parentField);
@@ -1,4 +1,4 @@
1
- import type { CollectionPanelConfig, UploadConfig } from '../../config/types';
1
+ import type { CollectionPanelConfig, UploadConfig } from '../../config/types.js';
2
2
  type Input = {
3
3
  panel?: CollectionPanelConfig;
4
4
  upload?: UploadConfig;
@@ -46,10 +46,10 @@ export const augmentUpload = (config) => {
46
46
  // Add validation if accept is defined
47
47
  if ('accept' in upload && Array.isArray(upload.accept)) {
48
48
  const allowedMimeTypes = upload.accept;
49
- mimeType.raw.validate = (value) => {
49
+ mimeType.validate((value) => {
50
50
  return ((typeof value === 'string' && allowedMimeTypes.includes(value)) ||
51
51
  `File should be the type of ${allowedMimeTypes.toString()}`);
52
- };
52
+ });
53
53
  }
54
54
  const _pathField = text('_path')._root().hidden().validate(validatePath);
55
55
  // Add hidden fields
@@ -9,7 +9,10 @@ export const augmentUploadServer = (config) => {
9
9
  const collection = augmentUpload(config);
10
10
  (collection.fields || []).forEach((field) => {
11
11
  if (field instanceof FormFieldBuilder && field.name === '_path') {
12
- field = field.$generateSchema(() => `_path: text('_path').references(() => ${withDirectoriesSuffix(config.slug)}.id, {onDelete: 'cascade', onUpdate: 'cascade'})`);
12
+ field.$references(withDirectoriesSuffix(config.slug), {
13
+ onDelete: 'cascade',
14
+ onUpdate: 'cascade'
15
+ });
13
16
  }
14
17
  });
15
18
  return collection;
@@ -1,9 +1,8 @@
1
1
  import { VERSIONS_STATUS } from '../../constant.js';
2
2
  import { buildConfigMap } from '../../operations/configMap/index.js';
3
- import { isBlocksFieldRaw } from '../../../fields/blocks/index.js';
4
- import { isJSONContent } from '../../../fields/rich-text';
5
- import { richTextJSONToText } from '../../../fields/rich-text/index.js';
6
- import { isTreeFieldRaw } from '../../../fields/tree/index.js';
3
+ import { BlocksBuilder } from '../../../fields/blocks/index.js';
4
+ import { isJSONContent, richTextJSONToText } from '../../../fields/rich-text/index.js';
5
+ import { TreeBuilder } from '../../../fields/tree/index.js';
7
6
  import { getValueAtPath, isObjectLiteral, matchStructure, omitId, setValueAtPath } from '../../../util/object.js';
8
7
  // If block is localized should not keep its id so it created a new one
9
8
  // If block is not localized than it should keep its id so block is updated
@@ -15,6 +14,13 @@ export const duplicate = async (args) => {
15
14
  * on the given document
16
15
  */
17
16
  function setCopyTitle(doc) {
17
+ // For upload collections with no real title field, asTitle falls back to
18
+ // 'filename' (see augmentTitle) — that's a display fallback, not a
19
+ // mutable title. filename must keep matching the actual file on disk
20
+ // (saveFile dedupes by content), so leave it alone rather than
21
+ // corrupting the reference with a suffix no file on disk has.
22
+ if (config.upload && config.asTitle === 'filename')
23
+ return doc;
18
24
  const getTitle = () => {
19
25
  const title = getValueAtPath(config.asTitle, doc);
20
26
  return isJSONContent(title)
@@ -32,7 +38,7 @@ export const duplicate = async (args) => {
32
38
  */
33
39
  function prepareDuplicate(doc, locale, keepIds) {
34
40
  let data = setCopyTitle(doc);
35
- data.satus = data.satus ? VERSIONS_STATUS.DRAFT : undefined;
41
+ data.status = data.status ? VERSIONS_STATUS.DRAFT : undefined;
36
42
  data = normalizeProps(data, locale, keepIds);
37
43
  delete data.id;
38
44
  return data;
@@ -46,8 +52,11 @@ export const duplicate = async (args) => {
46
52
  // Set locale to the default one
47
53
  if (defaultLocale)
48
54
  rime.setLocale(defaultLocale);
49
- // Fetch document to copy
50
- const document = await collection.findById({ id, locale: defaultLocale });
55
+ // Fetch document to copy — draft: true, since the source document may
56
+ // never have been published (buildPublishedOrLatestVersionParams treats a
57
+ // missing draft flag as "published only" for versioned-with-draft
58
+ // collections, which would 404 on a draft-only source).
59
+ const document = await collection.findById({ id, locale: defaultLocale, draft: true });
51
60
  // Prepare data
52
61
  const data = prepareDuplicate(document, defaultLocale, false);
53
62
  // Create document
@@ -61,11 +70,11 @@ export const duplicate = async (args) => {
61
70
  rime.setLocale(locale);
62
71
  // Get localized document
63
72
  let source = await collection.findById({ id, locale, draft: true });
64
- const configMap = buildConfigMap(source, config.fields.map((f) => f.compile()));
73
+ const configMap = buildConfigMap(source, config.fields);
65
74
  // Id mapping
66
75
  for (const [key, field] of Object.entries(configMap)) {
67
76
  // Process only tree and blocks
68
- if (!isBlocksFieldRaw(field) && !isTreeFieldRaw(field))
77
+ if (!(field instanceof BlocksBuilder) && !(field instanceof TreeBuilder))
69
78
  continue;
70
79
  const handleField = {
71
80
  // For localized blocks just remove the id so a new one will be created
@@ -93,12 +102,22 @@ export const duplicate = async (args) => {
93
102
  });
94
103
  }
95
104
  };
96
- handleField[field.localized ? 'localized' : 'unlocalized']();
105
+ handleField[field.get.localized ? 'localized' : 'unlocalized']();
97
106
  }
98
107
  // Prepare data
99
108
  const data = prepareDuplicate(source, locale, true);
100
- // Update document for this locale
101
- await collection.updateById({ id: newDocument.id, data, locale });
109
+ // Update document for this locale — target newDocument's own version
110
+ // directly (versionId, not draft: true). draft: true with no versionId
111
+ // resolves to NEW_DRAFT_FROM_PUBLISHED, which still fetches the
112
+ // *published* original to branch from; newDocument was just created as
113
+ // a draft copy with no published version yet, so that 404s the same way
114
+ // an unqualified update would.
115
+ await collection.updateById({
116
+ id: newDocument.id,
117
+ data,
118
+ locale,
119
+ versionId: newDocument.versionId
120
+ });
102
121
  }
103
122
  // Reset event locale
104
123
  rime.setLocale(currentLocale);
@@ -45,16 +45,17 @@ export const updateById = async (args) => {
45
45
  data = result.data;
46
46
  }
47
47
  const makeMessage = (name) => `missing ${name} @uppdateById`;
48
+ const makeError = (name) => new RimeError(RimeError.OPERATION_ERROR, makeMessage(name));
48
49
  if (!context.configMap)
49
- throw new RimeError(RimeError.OPERATION_ERROR, makeMessage('configMap'));
50
+ throw makeError('configMap');
50
51
  if (!context.originalConfigMap)
51
- throw new RimeError(RimeError.OPERATION_ERROR, makeMessage('originalConfigMap'));
52
+ throw makeError('originalConfigMap');
52
53
  if (!context.originalDoc)
53
- throw new RimeError(RimeError.OPERATION_ERROR, makeMessage('originalDoc'));
54
+ throw makeError('originalDoc');
54
55
  if (!context.versionOperation)
55
- throw new RimeError(RimeError.OPERATION_ERROR, makeMessage('versionOperation'));
56
+ throw makeError('versionOperation');
56
57
  if (!context.params.versionId)
57
- throw new RimeError(RimeError.OPERATION_ERROR, makeMessage('versionId'));
58
+ throw makeError('versionId');
58
59
  const incomingPaths = Object.keys(context.configMap);
59
60
  const { id: updatedId } = await rime.adapter.collection.update({
60
61
  id,
@@ -1,6 +1,8 @@
1
- import type { CollectionSlug } from '../../types/doc.js';
2
1
  import { type RequestEvent } from '@sveltejs/kit';
3
- export default function (slug: CollectionSlug): (event: RequestEvent) => Promise<Response | import("@sveltejs/kit").ActionFailure<{
2
+ /**
3
+ * POST handler for the collection API endpoint.
4
+ */
5
+ export declare function restCreate(event: RequestEvent): Promise<Response | import("@sveltejs/kit").ActionFailure<{
4
6
  form: Record<string, any>;
5
7
  errors: import("../../../types.js").FormErrors;
6
8
  }> | import("@sveltejs/kit").ActionFailure<{
@@ -0,0 +1,37 @@
1
+ import { ERROR_CONTEXT, handleError } from '../../errors/handler.server.js';
2
+ import { RimeError } from '../../errors/index.js';
3
+ import { extractData } from '../../operations/extract-data.server.js';
4
+ import { trycatch } from '../../../util/function.js';
5
+ import { json } from '@sveltejs/kit';
6
+ import { isAuthConfig } from '../auth/util.js';
7
+ /**
8
+ * POST handler for the collection API endpoint.
9
+ */
10
+ export async function restCreate(event) {
11
+ //
12
+ const { rime } = event.locals;
13
+ // Check if the slug corresponds to a valid collection
14
+ const slug = event.params.slug;
15
+ if (!rime.config.isCollection(slug)) {
16
+ return handleError(new RimeError(RimeError.NOT_FOUND), { context: ERROR_CONTEXT.API });
17
+ }
18
+ const collection = rime.collection(slug);
19
+ // Extract data from the request body
20
+ const [extractError, data] = await trycatch(() => extractData(event.request));
21
+ if (extractError) {
22
+ return handleError(extractError, { context: ERROR_CONTEXT.API });
23
+ }
24
+ // Bypass confirm password for api auth collection creation calls
25
+ if (isAuthConfig(collection.config) && 'password' in data) {
26
+ data.confirmPassword = data.password;
27
+ }
28
+ // Set the locale if provided in the data
29
+ if (data.locale) {
30
+ rime.setLocale(data.locale);
31
+ }
32
+ const [error, document] = await trycatch(() => collection.create({ data, locale: rime.getLocale() }));
33
+ if (error) {
34
+ return handleError(error, { context: ERROR_CONTEXT.API });
35
+ }
36
+ return json({ doc: document });
37
+ }
@@ -1,6 +1,8 @@
1
- import type { CollectionSlug } from '../../types/doc.js';
2
1
  import { type RequestEvent } from '@sveltejs/kit';
3
- export default function (slug: CollectionSlug): (event: RequestEvent) => Promise<Response | import("@sveltejs/kit").ActionFailure<{
2
+ /**
3
+ * DELETE handler for the collection API endpoint.
4
+ */
5
+ export declare function restDelete(event: RequestEvent): Promise<Response | import("@sveltejs/kit").ActionFailure<{
4
6
  form: Record<string, any>;
5
7
  errors: import("../../../types").FormErrors;
6
8
  }> | import("@sveltejs/kit").ActionFailure<{
@@ -0,0 +1,37 @@
1
+ import { normalizeQuery } from '../../../adapter-sqlite/util.server.js';
2
+ import { PARAMS } from '../../constant.js';
3
+ import { RimeError } from '../../errors/index.js';
4
+ import { handleError } from '../../errors/handler.server.js';
5
+ import { trycatch } from '../../../util/function.js';
6
+ import { json } from '@sveltejs/kit';
7
+ /**
8
+ * DELETE handler for the collection API endpoint.
9
+ */
10
+ export async function restDelete(event) {
11
+ //
12
+ const { rime } = event.locals;
13
+ const slug = event.params.slug;
14
+ if (!rime.config.isCollection(slug)) {
15
+ return handleError(new RimeError(RimeError.NOT_FOUND), { context: 'api' });
16
+ }
17
+ const params = event.url.searchParams;
18
+ const hasQueryParams = !!params
19
+ .keys()
20
+ .filter((key) => key.startsWith('where'))
21
+ .toArray().length;
22
+ const query = hasQueryParams ? normalizeQuery(event.url.search.substring(1)) : undefined;
23
+ const apiParams = {
24
+ locale: rime.getLocale(),
25
+ sort: params.get(PARAMS.SORT) || undefined,
26
+ depth: params.get(PARAMS.DEPTH) ? parseInt(params.get(PARAMS.DEPTH)) : 0,
27
+ limit: params.get(PARAMS.LIMIT) ? parseInt(params.get(PARAMS.LIMIT)) : undefined,
28
+ offset: params.get(PARAMS.OFFSET) ? parseInt(params.get(PARAMS.OFFSET)) : undefined,
29
+ query,
30
+ select: params.get(PARAMS.SELECT) ? params.get(PARAMS.SELECT).split(',') : undefined
31
+ };
32
+ const [error, docs] = await trycatch(() => rime.collection(slug).delete(apiParams));
33
+ if (error) {
34
+ return handleError(error, { context: 'api' });
35
+ }
36
+ return json({ docs }, { status: 200 });
37
+ }