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,13 +1,15 @@
1
1
  import { isAuthConfig } from '../../collections/auth/util.js';
2
2
  import cache from '../../dev/cache/index.server.js';
3
3
  import { isFormField } from '../../fields/util.js';
4
- import { logger } from '../../logger/index.server';
5
- import { isBlocksFieldRaw } from '../../../fields/blocks/index.js';
6
- import { isGroupFieldRaw } from '../../../fields/group/index.js';
7
- import { isRelationField } from '../../../fields/relation';
8
- import { isSelectField } from '../../../fields/select/index.js';
9
- import { isTabsFieldRaw } from '../../../fields/tabs';
10
- import { isTreeFieldRaw } from '../../../fields/tree/index.js';
4
+ import { logger } from '../../logger/index.server.js';
5
+ import { withoutDirectoriesSuffix, withoutVersionsSuffix } from '../../naming.js';
6
+ import { BlocksBuilder } from '../../../fields/blocks/index.js';
7
+ import { GroupFieldBuilder } from '../../../fields/group/index.js';
8
+ import { RelationFieldBuilder } from '../../../fields/relation/index.js';
9
+ import { SelectFieldBuilder } from '../../../fields/select/index.js';
10
+ import { TabsBuilder } from '../../../fields/tabs/index.js';
11
+ import { TreeBuilder } from '../../../fields/tree/index.js';
12
+ import { isCamelCase } from '../../../util/string.js';
11
13
  function hasDuplicates(arr) {
12
14
  return [...new Set(arr.filter((e, i, a) => a.indexOf(e) !== i))];
13
15
  }
@@ -29,6 +31,24 @@ function hasDuplicateSlug(config) {
29
31
  }
30
32
  return [];
31
33
  }
34
+ /**
35
+ * Check that all area/collection slugs are camelCase
36
+ */
37
+ function validateSlugs(config) {
38
+ const errors = [];
39
+ const slugs = [
40
+ ...(config.collections || []).map((c) => c.slug),
41
+ ...(config.areas || []).map((a) => a.slug)
42
+ ]
43
+ .map(withoutVersionsSuffix)
44
+ .map(withoutDirectoriesSuffix);
45
+ for (const slug of slugs) {
46
+ if (!isCamelCase(slug)) {
47
+ errors.push(`Slug ${slug} is not a valid prototype slug`);
48
+ }
49
+ }
50
+ return errors;
51
+ }
32
52
  /**
33
53
  * Prevent the panel user collection slug
34
54
  * to be used elsewhere
@@ -64,14 +84,14 @@ const validateDocumentFields = (documentConfig, config) => {
64
84
  const isCollection = (documentConfig) => documentConfig.type === 'collection';
65
85
  const isAuth = isCollection(documentConfig) && isAuthConfig(documentConfig);
66
86
  const registeredBlocks = {};
67
- const fieldsCompiled = documentConfig.fields.map((f) => f.compile());
87
+ // const fieldsCompiled = documentConfig.fields.map((f) => f.compile());
68
88
  if (isAuth) {
69
- const rolesField = fieldsCompiled
89
+ const rolesField = documentConfig.fields
70
90
  .filter(isFormField)
71
91
  .filter((f) => f.name === 'roles')
72
- .filter((f) => isSelectField(f))[0];
73
- const nameField = fieldsCompiled.filter(isFormField).filter((f) => f.name === 'name')[0];
74
- const emailField = fieldsCompiled
92
+ .filter((f) => f instanceof SelectFieldBuilder)[0];
93
+ const nameField = documentConfig.fields.filter(isFormField).filter((f) => f.name === 'name')[0];
94
+ const emailField = documentConfig.fields
75
95
  .filter(isFormField)
76
96
  .find((f) => f.name === 'email' && f.type === 'email');
77
97
  if (!rolesField)
@@ -80,7 +100,7 @@ const validateDocumentFields = (documentConfig, config) => {
80
100
  errors.push(`Field email is missing in collection ${documentConfig.slug}`);
81
101
  if (!nameField)
82
102
  errors.push(`Field name is missing in collection ${documentConfig.slug}`);
83
- if (!rolesField.many)
103
+ if (!rolesField.get.many)
84
104
  errors.push(`Field roles must have "many" enabled : select('roles').options(...).many(), even with a single option`);
85
105
  }
86
106
  const validateBlockField = (fields, blockType) => {
@@ -96,8 +116,8 @@ const validateDocumentFields = (documentConfig, config) => {
96
116
  };
97
117
  const validateRelationField = (field) => {
98
118
  const collectionsSlugs = (config.collections || []).map((c) => c.slug);
99
- if (!collectionsSlugs.includes(field.relationTo)) {
100
- errors.push(`Relation field ${field.name} references unknown collection ${field.relationTo}, in ${documentConfig.type} ${documentConfig.slug}`);
119
+ if (!collectionsSlugs.includes(field.get.relationTo)) {
120
+ errors.push(`Relation field ${field.name} references unknown collection ${field.get.relationTo}, in ${documentConfig.type} ${documentConfig.slug}`);
101
121
  }
102
122
  };
103
123
  const validateFields = (fields) => {
@@ -116,17 +136,17 @@ const validateDocumentFields = (documentConfig, config) => {
116
136
  return pattern.test(name) && !name.includes('-') && !name.includes(' ');
117
137
  }
118
138
  function validateTabs(field) {
119
- const duplicates = hasDuplicates(field.tabs.map((t) => t.name));
139
+ const duplicates = hasDuplicates(field.get.tabs.map((t) => t.name));
120
140
  if (duplicates.length) {
121
141
  errors.push(`Dupplicate tab name ${duplicates} in ${documentConfig.slug}`);
122
142
  }
123
143
  }
124
144
  for (const field of fields) {
125
145
  // Recursive check first into Tabs since tabs are not Formfields
126
- if (isTabsFieldRaw(field)) {
146
+ if (field instanceof TabsBuilder) {
127
147
  validateTabs(field);
128
- for (const tab of field.tabs) {
129
- validateFields(tab.fields);
148
+ for (const tab of field.get.tabs) {
149
+ validateFields(tab.get.fields);
130
150
  }
131
151
  }
132
152
  // If field is not a Formfield eg. Separator then continue
@@ -134,7 +154,7 @@ const validateDocumentFields = (documentConfig, config) => {
134
154
  continue;
135
155
  }
136
156
  // Check that a field wich has field._root = true is not localized
137
- if ('_root' in field && field._root && field.localized) {
157
+ if (field.get.root && field.get.localized) {
138
158
  errors.push(`Field ${field.name} of ${documentConfig.type} ${documentConfig.slug} with _root = true, can't be localized`);
139
159
  }
140
160
  // Check for malformed field.name
@@ -142,8 +162,8 @@ const validateDocumentFields = (documentConfig, config) => {
142
162
  errors.push(`Field ${field.name} of ${documentConfig.type} ${documentConfig.slug} should be camelCase`);
143
163
  }
144
164
  // Recursive check into Blocks
145
- if (isBlocksFieldRaw(field)) {
146
- for (const block of field.blocks) {
165
+ if (field instanceof BlocksBuilder) {
166
+ for (const block of field.get.blocks) {
147
167
  if (block.name in registeredBlocks) {
148
168
  const blockDefinedButDiffer = JSON.stringify(registeredBlocks[block.name]) !== JSON.stringify(block);
149
169
  if (blockDefinedButDiffer) {
@@ -153,25 +173,25 @@ const validateDocumentFields = (documentConfig, config) => {
153
173
  else {
154
174
  registeredBlocks[block.name] = block;
155
175
  }
156
- validateFields(block.fields.filter(isFormField));
157
- validateBlockField(block.fields.filter(isFormField), block.name);
176
+ validateFields(block.get.fields.filter(isFormField));
177
+ validateBlockField(block.get.fields.filter(isFormField), block.name);
158
178
  }
159
179
  // Recursive check into Tree
160
180
  }
161
- else if (isTreeFieldRaw(field)) {
162
- validateFields(field.fields.filter(isFormField));
181
+ else if (field instanceof TreeBuilder) {
182
+ validateFields(field.get.fields.filter(isFormField));
163
183
  // Recursive check into Tabs
164
184
  }
165
- else if (isGroupFieldRaw(field)) {
166
- validateFields(field.fields.filter(isFormField));
185
+ else if (field instanceof GroupFieldBuilder) {
186
+ validateFields(field.get.fields.filter(isFormField));
167
187
  // Check relation field
168
188
  }
169
- else if (isRelationField(field)) {
189
+ else if (field instanceof RelationFieldBuilder) {
170
190
  validateRelationField(field);
171
191
  }
172
192
  }
173
193
  };
174
- validateFields(documentConfig.fields.map((f) => f.compile()));
194
+ validateFields(documentConfig.fields);
175
195
  return errors;
176
196
  };
177
197
  const hasDatabase = (config) => {
@@ -192,9 +212,9 @@ function validateAuthCollections(config) {
192
212
  return errors;
193
213
  }
194
214
  function validate(config) {
195
- logger.debug('Validating config...');
196
215
  const validateFunctions = [
197
216
  hasDuplicateSlug,
217
+ validateSlugs,
198
218
  hasUsersSlug,
199
219
  validateFields,
200
220
  hasDatabase,
@@ -1,29 +1,29 @@
1
1
  import { FormFieldBuilder } from '../../fields/builders/form-field-builder.js';
2
- import { isGroupField } from '../../../fields/group/index.js';
3
- import { RelationFieldBuilder } from '../../../fields/relation';
2
+ import { GroupFieldBuilder } from '../../../fields/group/index.js';
3
+ import { RelationFieldBuilder } from '../../../fields/relation/index.js';
4
4
  import { TabsBuilder } from '../../../fields/tabs/index.js';
5
5
  export function findThumbnailField(fields = [], basePath = '') {
6
6
  for (const field of fields) {
7
7
  // Direct check for isThumbnail
8
8
  if (field instanceof RelationFieldBuilder &&
9
- 'isThumbnail' in field.raw &&
10
- field.raw.isThumbnail === true) {
11
- const path = basePath ? `${basePath}.${field.raw.name}` : field.raw.name;
9
+ 'isThumbnail' in field.get &&
10
+ field.get.isThumbnail === true) {
11
+ const path = basePath ? `${basePath}.${field.name}` : field.name;
12
12
  return { field, path };
13
13
  }
14
14
  // Check in group
15
- if (isGroupField(field.raw) && field.raw.fields) {
16
- const groupPath = basePath ? `${basePath}.${field.raw.name}` : field.raw.name;
17
- const found = findThumbnailField(field.raw.fields, groupPath);
15
+ if (field instanceof GroupFieldBuilder && field.get.fields) {
16
+ const groupPath = basePath ? `${basePath}.${field.name}` : field.name;
17
+ const found = findThumbnailField(field.get.fields, groupPath);
18
18
  if (found)
19
19
  return found;
20
20
  }
21
21
  // Check in tabs
22
- if (field instanceof TabsBuilder && field.raw.tabs) {
23
- for (const tab of field.raw.tabs) {
24
- if (tab.raw.fields) {
25
- const tabPath = basePath ? `${basePath}.${tab.raw.name}` : tab.raw.name;
26
- const found = findThumbnailField(tab.raw.fields, tabPath);
22
+ if (field instanceof TabsBuilder && field.get.tabs) {
23
+ for (const tab of field.get.tabs) {
24
+ if (tab.get.fields) {
25
+ const tabPath = basePath ? `${basePath}.${tab.name}` : tab.name;
26
+ const found = findThumbnailField(tab.get.fields, tabPath);
27
27
  if (found)
28
28
  return found;
29
29
  }
@@ -1,30 +1,30 @@
1
1
  import { FormFieldBuilder } from '../../fields/builders/form-field-builder.js';
2
- import { isGroupField } from '../../../fields/group/index.js';
2
+ import { GroupFieldBuilder } from '../../../fields/group/index.js';
3
3
  import { TabsBuilder } from '../../../fields/tabs/index.js';
4
4
  export const hasMaybeTitle = (field) => ['text', 'date', 'slug', 'email', 'richText'].includes(field.type);
5
5
  export function findTitleField(fields = [], basePath = '') {
6
6
  for (const field of fields) {
7
7
  // Direct check for isTitle
8
8
  if (field instanceof FormFieldBuilder &&
9
- hasMaybeTitle(field.raw) &&
10
- 'isTitle' in field.raw &&
11
- field.raw.isTitle === true) {
12
- const path = basePath ? `${basePath}.${field.raw.name}` : field.raw.name;
9
+ hasMaybeTitle(field.get) &&
10
+ 'isTitle' in field.get &&
11
+ field.get.isTitle === true) {
12
+ const path = basePath ? `${basePath}.${field.name}` : field.name;
13
13
  return { field, path };
14
14
  }
15
15
  // Check in group
16
- if (isGroupField(field.raw) && field.raw.fields) {
17
- const groupPath = basePath ? `${basePath}.${field.raw.name}` : field.raw.name;
18
- const found = findTitleField(field.raw.fields, groupPath);
16
+ if (field instanceof GroupFieldBuilder && field.get.fields) {
17
+ const groupPath = basePath ? `${basePath}.${field.name}` : field.name;
18
+ const found = findTitleField(field.get.fields, groupPath);
19
19
  if (found)
20
20
  return found;
21
21
  }
22
22
  // Check in tabs
23
- if (field instanceof TabsBuilder && field.raw.tabs) {
24
- for (const tab of field.raw.tabs) {
25
- if (tab.raw.fields) {
26
- const tabPath = basePath ? `${basePath}.${tab.raw.name}` : tab.raw.name;
27
- const found = findTitleField(tab.raw.fields, tabPath);
23
+ if (field instanceof TabsBuilder && field.get.tabs) {
24
+ for (const tab of field.get.tabs) {
25
+ if (tab.get.fields) {
26
+ const tabPath = basePath ? `${basePath}.${tab.name}` : tab.name;
27
+ const found = findTitleField(tab.get.fields, tabPath);
28
28
  if (found)
29
29
  return found;
30
30
  }
@@ -10,7 +10,7 @@ export function makeUploadDirectoriesCollectionClient(collection) {
10
10
  const slug = withDirectoriesSuffix(collection.slug);
11
11
  const directoriesConfig = collection.upload.directories;
12
12
  // else create the directory collection
13
- let directoriesCollection = {
13
+ const directoriesCollection = {
14
14
  slug: slug,
15
15
  kebab: withDirectoriesSuffix(collection.kebab),
16
16
  versions: undefined,
@@ -37,7 +37,7 @@ export declare const PARAMS: {
37
37
  readonly SORT: "sort";
38
38
  /** GET / UPDATE a specific version*/
39
39
  readonly VERSION_ID: "versionId";
40
- /** Parameter for panel collection list to filter out documents from a specific uploadPath */
40
+ /** On fetch (upload) list operation filter out documents from a specific uploadPath */
41
41
  readonly UPLOAD_PATH: "uploadPath";
42
42
  /**
43
43
  * Disable validation on CREATE / UPDATE operations
@@ -37,7 +37,7 @@ export const PARAMS = {
37
37
  SORT: 'sort',
38
38
  /** GET / UPDATE a specific version*/
39
39
  VERSION_ID: 'versionId',
40
- /** Parameter for panel collection list to filter out documents from a specific uploadPath */
40
+ /** On fetch (upload) list operation filter out documents from a specific uploadPath */
41
41
  UPLOAD_PATH: 'uploadPath',
42
42
  /**
43
43
  * Disable validation on CREATE / UPDATE operations
@@ -1 +1,2 @@
1
1
  export declare const PACKAGE_NAME = "rimecms";
2
+ export declare const RIME_DEV_CACHE_DIR: string;
@@ -1 +1,3 @@
1
+ import path from 'path';
1
2
  export const PACKAGE_NAME = 'rimecms';
3
+ export const RIME_DEV_CACHE_DIR = path.resolve(process.cwd(), 'node_modules', '.rime');
@@ -1,12 +1,12 @@
1
+ import { RIME_DEV_CACHE_DIR } from '../../constant.server';
1
2
  import fs from 'fs';
2
3
  import path from 'path';
3
4
  const dev = process.env.NODE_ENV === 'development';
4
- const cachePath = path.resolve(process.cwd(), '.rime');
5
- if (!fs.existsSync(cachePath) && dev) {
6
- fs.mkdirSync(cachePath);
5
+ if (!fs.existsSync(RIME_DEV_CACHE_DIR) && dev) {
6
+ fs.mkdirSync(RIME_DEV_CACHE_DIR);
7
7
  }
8
8
  function get(key) {
9
- const keyPath = path.join(cachePath, key + '.txt');
9
+ const keyPath = path.join(RIME_DEV_CACHE_DIR, key + '.txt');
10
10
  const exist = fs.existsSync(keyPath);
11
11
  if (exist) {
12
12
  return fs.readFileSync(keyPath).toString();
@@ -14,20 +14,20 @@ function get(key) {
14
14
  return false;
15
15
  }
16
16
  function set(key, value) {
17
- if (!fs.existsSync(cachePath)) {
18
- fs.mkdirSync(cachePath);
17
+ if (!fs.existsSync(RIME_DEV_CACHE_DIR)) {
18
+ fs.mkdirSync(RIME_DEV_CACHE_DIR);
19
19
  }
20
- const keyPath = path.join(cachePath, key + '.txt');
20
+ const keyPath = path.join(RIME_DEV_CACHE_DIR, key + '.txt');
21
21
  fs.writeFileSync(keyPath, value);
22
22
  }
23
23
  function del(key) {
24
- const keyPath = path.join(cachePath, key + '.txt');
24
+ const keyPath = path.join(RIME_DEV_CACHE_DIR, key + '.txt');
25
25
  if (fs.existsSync(keyPath)) {
26
26
  fs.rmSync(keyPath, { force: true });
27
27
  }
28
28
  }
29
29
  function clear() {
30
- fs.rmSync(cachePath, { recursive: true });
30
+ fs.rmSync(RIME_DEV_CACHE_DIR, { recursive: true });
31
31
  }
32
32
  export default {
33
33
  get,
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  export declare const build: (args: {
3
3
  withDatabase?: boolean;
4
+ withEnv?: boolean;
4
5
  }) => void;
@@ -1,8 +1,22 @@
1
1
  #!/usr/bin/env node
2
+ import { logger } from '../../../logger/index.server.js';
3
+ import chalk from 'chalk';
2
4
  import { spawnSync } from 'child_process';
3
5
  import { copyFileSync, cpSync, existsSync, mkdirSync, renameSync, rmSync, writeFileSync } from 'fs';
4
- import { polkaServer } from './templates.js';
5
- import { logger } from '../../../logger/index.server.js';
6
+ import { getInvokingPackageManager } from '../util/package-manager.server.js';
7
+ import { envProduction, polkaServer } from './templates.js';
8
+ const installCommands = {
9
+ pnpm: {
10
+ addDeps: 'pnpm install polka sharp serve-static',
11
+ prodInstall: 'pnpm install --prod',
12
+ runEnv: 'pnpm rime env'
13
+ },
14
+ npm: {
15
+ addDeps: 'npm install polka sharp serve-static',
16
+ prodInstall: 'npm install --omit=dev',
17
+ runEnv: 'npx rime env'
18
+ }
19
+ };
6
20
  export const build = (args) => {
7
21
  // Delete app folder if it exists
8
22
  if (existsSync('./app')) {
@@ -24,13 +38,28 @@ export const build = (args) => {
24
38
  cpSync('./db', './app/db', { recursive: true });
25
39
  logger.info('[✓] database copied');
26
40
  }
41
+ // Create main entry server file
27
42
  writeFileSync('./app/index.js', polkaServer);
28
43
  logger.info('[✓] polka server created at app/index.js');
44
+ // Create .env file if flag is set
45
+ const envContent = envProduction();
46
+ if (args.withEnv) {
47
+ writeFileSync('./app/.env', envContent);
48
+ logger.info('[✓] .env file created at app/.env');
49
+ }
50
+ console.log('----------------------------------------------------------------\n');
51
+ console.log('## Next steps :');
52
+ console.log('');
53
+ console.log(' cd ./app');
54
+ const pm = getInvokingPackageManager() === 'pnpm' ? 'pnpm' : 'npm';
55
+ if (!args.withEnv) {
56
+ console.log(' ' +
57
+ installCommands[pm].runEnv +
58
+ ' ' +
59
+ chalk.dim(`# next time run \`${pm === 'pnpm' ? 'pnpm' : 'npx'} rime build -e\` to generate the .env file automatically`));
60
+ }
61
+ console.log(' ' + installCommands[pm].addDeps);
62
+ console.log(' ' + installCommands[pm].prodInstall);
29
63
  console.log('');
30
- logger.info('Next steps :');
31
- logger.info('create a /app/.env file with ORIGIN HOST and PORT variables');
32
- logger.info('cd ./app');
33
- logger.info('pnpm install --prod');
34
- logger.info('pnpm install polka sharp serve-static');
35
- logger.info('node --env-file=.env index.js');
64
+ console.log(' node --env-file=.env index.js');
36
65
  };
@@ -1 +1,2 @@
1
+ export declare const envProduction: () => string;
1
2
  export declare const polkaServer = "import polka from 'polka';\nimport serveStatic from 'serve-static';\nimport { handler } from './build/handler.js';\n\nconst serve = serveStatic('./static');\n\nconst port = process.env.PORT || 3000;\nconst host = process.env.HOST || '127.0.0.1';\n\npolka()\n\t.use(serve)\n\t.use(handler)\n\t.listen(port, host, () => {\n\t\tconsole.log(`server running on ${host}:${port}`);\n\t});\n";
@@ -1,3 +1,27 @@
1
+ import { randomId } from '../../../../util/random.js';
2
+ export const envProduction = () => `# BETTER-AUTH
3
+ BETTER_AUTH_SECRET=${randomId(32)}
4
+
5
+ # RIME
6
+ PUBLIC_RIME_URL=http://localhost:3000
7
+ RIME_LOG_LEVEL=ERROR
8
+ RIME_LOG_TO_FILE=true
9
+ RIME_CACHE_ENABLED=true
10
+ RIME_CACHE_STRATEGY=memory
11
+
12
+ # RIME_SMTP_USER=user@host.org
13
+ # RIME_SMTP_PASSWORD=somepassword
14
+ # RIME_SMTP_HOST=smtp.host
15
+ # RIME_SMTP_PORT=465
16
+
17
+ # SVELTEKIT ADAPTER-NODE
18
+ ORIGIN=http://localhost:3000
19
+ PORT=3000
20
+ HOST=localhost
21
+
22
+ # MISC
23
+ BODY_SIZE_LIMIT=10485760 # 10(MB) * 1024 * 1024 = 10485760 bytes
24
+ `;
1
25
  export const polkaServer = `import polka from 'polka';
2
26
  import serveStatic from 'serve-static';
3
27
  import { handler } from './build/handler.js';
@@ -1,8 +1,9 @@
1
+ import { RIME_DEV_CACHE_DIR } from '../../../constant.server.js';
1
2
  import { logger } from '../../../logger/index.server.js';
2
3
  import { rmSync } from 'node:fs';
3
4
  import path from 'node:path';
4
5
  import { INPUT_DIR, OUTPUT_DIR } from '../../constants.js';
5
- import { prompt } from '../util.server.js';
6
+ import { prompt } from '../util/prompt.server.js';
6
7
  const clearMessage = `Are you sure you want to delete all related rime files (Y/n):
7
8
  - ./static/medias
8
9
  - ./db
@@ -24,7 +25,7 @@ export const clear = async (args) => {
24
25
  return logger.info('Operation cancelled. Great!');
25
26
  }
26
27
  // Remove directories
27
- rmSync(path.join('.rime'), { recursive: true, force: true });
28
+ rmSync(RIME_DEV_CACHE_DIR, { recursive: true, force: true });
28
29
  rmSync(path.join('src', 'routes', '(rime)'), { recursive: true, force: true });
29
30
  rmSync(path.join('src', 'lib', INPUT_DIR), { recursive: true, force: true });
30
31
  rmSync(path.join('src', 'lib', OUTPUT_DIR), { recursive: true, force: true });
@@ -1,3 +1,4 @@
1
+ import { RIME_DEV_CACHE_DIR } from '../../../constant.server';
1
2
  import cache from '../../cache/index.server.js';
2
3
  import { sanitize } from '../../generate/sanitize/index.server.js';
3
4
  import { ensureGeneratedConfig, ensureUserConfigExist } from '../../../ensure.server.js';
@@ -12,8 +13,8 @@ export const generate = async (args) => {
12
13
  */
13
14
  function clearConfigCache() {
14
15
  try {
15
- rmSync(path.join(process.cwd(), '.rime'), { recursive: true, force: true });
16
- mkdirSync(path.join(process.cwd(), '.rime'));
16
+ rmSync(RIME_DEV_CACHE_DIR, { recursive: true, force: true });
17
+ mkdirSync(RIME_DEV_CACHE_DIR);
17
18
  }
18
19
  catch (err) {
19
20
  logger.error(err.message);
@@ -1,5 +1,8 @@
1
1
  #!/usr/bin/env node
2
+ import { logger } from '../../logger/index.server.js';
2
3
  import { program } from 'commander';
4
+ import { existsSync, writeFileSync } from 'fs';
5
+ import { envProduction } from './build/templates.js';
3
6
  program.version('0.1').description('CMS utilities');
4
7
  program.description('Rime utilities');
5
8
  program
@@ -14,6 +17,7 @@ program
14
17
  program
15
18
  .command('build')
16
19
  .option('-d, --with-database', 'Include database', false)
20
+ .option('-e, --with-env', 'Create the /app/.env file from the production template', false)
17
21
  .action(async (args) => {
18
22
  const build = await import('./build/index.js').then((m) => m.build);
19
23
  build(args);
@@ -39,4 +43,20 @@ program
39
43
  process.exitCode = 1;
40
44
  }
41
45
  });
46
+ program
47
+ .command('env')
48
+ .option('-f, --force', 'Force generation, overwrite current', false)
49
+ .action(async (args) => {
50
+ try {
51
+ if (existsSync('./.env') && !args.force) {
52
+ logger.info('.env file already exists. Use --force to overwrite.');
53
+ return;
54
+ }
55
+ writeFileSync('./.env', envProduction());
56
+ logger.info('[✓] .env file created');
57
+ }
58
+ catch {
59
+ process.exitCode = 1;
60
+ }
61
+ });
42
62
  program.parse(process.argv);
@@ -11,9 +11,9 @@ import path from 'path';
11
11
  import { fileURLToPath } from 'url';
12
12
  import { INPUT_DIR } from '../../constants.js';
13
13
  import { generate } from '../generate/index.server.js';
14
- import { prompt } from '../util.server.js';
15
- import { getPackageInfoByKey } from './get-package-info.server.js';
16
- import { installDependencies } from './package-manager-util.server.js';
14
+ import { installDependencies } from '../util/package-manager.server.js';
15
+ import { getPackageInfoByKey } from '../util/package.server.js';
16
+ import { prompt } from '../util/prompt.server.js';
17
17
  import * as templates from './templates.js';
18
18
  const PACKAGE = 'rimecms';
19
19
  const root = process.cwd();
@@ -83,7 +83,7 @@ export const init = async ({ force, name: incomingName, skipInstall }) => {
83
83
  return;
84
84
  }
85
85
  let gitignoreContent = readFileSync(gitignorePath, 'utf-8');
86
- const updates = ['\\.rime', '\\.cache', '/logs', '/db', '\\+rime.generated'];
86
+ const updates = ['\\.cache', '/logs', '/db', '\\+rime.generated'];
87
87
  if (!gitignoreContent.includes('# rime'))
88
88
  gitignoreContent += '\n# rime';
89
89
  for (const line of updates) {
@@ -1,4 +1,4 @@
1
1
  export declare const env: () => string;
2
2
  export declare const defaultConfig: (name: string) => string;
3
3
  export declare const drizzleConfig: (name: string) => string;
4
- export declare const hooks = "import { sequence } from '@sveltejs/kit/hooks';\nimport { handlers } from 'rimecms';\nimport config from './lib/+rime.generated/rime.config.server.js';\n\nexport const handle = sequence(...(await handlers(config)));\n";
4
+ export declare const hooks = "import { sequence } from '@sveltejs/kit/hooks';\nimport { handlers } from 'rimecms/server';\nimport config from './lib/+rime.generated/rime.config.server.js';\n\nexport const handle = sequence(...(await handlers(config)));\n";
@@ -18,7 +18,7 @@ RIME_LOG_TO_FILE_MAX_DAYS=1
18
18
  export const defaultConfig = (name) => `
19
19
  import { Collection, rime } from '$rime/config';
20
20
  import { text } from '${PACKAGE}/fields';
21
- import { adapterSqlite } from '${PACKAGE}/sqlite';
21
+ import { adapterSqlite } from '${PACKAGE}/adapter-sqlite';
22
22
 
23
23
  const Pages = Collection.create('pages', {
24
24
  fields: [text('title').isTitle()]
@@ -45,7 +45,7 @@ export const config: Config = {
45
45
  export default defineConfig(config);
46
46
  `;
47
47
  export const hooks = `import { sequence } from '@sveltejs/kit/hooks';
48
- import { handlers } from '${PACKAGE}';
48
+ import { handlers } from '${PACKAGE}/server';
49
49
  import config from './lib/${OUTPUT_DIR}/rime.config.server.js';
50
50
 
51
51
  export const handle = sequence(...(await handlers(config)));
@@ -0,0 +1 @@
1
+ export declare const dim: (text: string) => void;
@@ -0,0 +1,4 @@
1
+ import chalk from 'chalk';
2
+ export const dim = (text) => {
3
+ console.log(chalk.dim(text));
4
+ };
@@ -0,0 +1,9 @@
1
+ export type PackageManagerName = 'yarn' | 'pnpm' | 'bun' | 'npm' | 'deno';
2
+ export declare function getPackageManager(): PackageManagerName;
3
+ /**
4
+ * Detects the package manager used to invoke the currently running command
5
+ * (e.g. `pnpm rime build` vs `npx rime build`), based on the user agent npm/pnpm/yarn/bun
6
+ * set on the child process. Falls back to npm, which is also what npx reports.
7
+ */
8
+ export declare function getInvokingPackageManager(): PackageManagerName;
9
+ export declare function installDependencies(): void;
@@ -39,6 +39,21 @@ export function getPackageManager() {
39
39
  }
40
40
  return 'npm';
41
41
  }
42
+ /**
43
+ * Detects the package manager used to invoke the currently running command
44
+ * (e.g. `pnpm rime build` vs `npx rime build`), based on the user agent npm/pnpm/yarn/bun
45
+ * set on the child process. Falls back to npm, which is also what npx reports.
46
+ */
47
+ export function getInvokingPackageManager() {
48
+ const userAgent = process.env.npm_config_user_agent;
49
+ if (!userAgent)
50
+ return 'npm';
51
+ const name = userAgent.split('/')[0];
52
+ if (name === 'pnpm' || name === 'yarn' || name === 'bun' || name === 'npm' || name === 'deno') {
53
+ return name;
54
+ }
55
+ return 'npm';
56
+ }
42
57
  export function installDependencies() {
43
58
  const pm = getPackageManager();
44
59
  if (pm === 'deno' || pm === 'yarn') {
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Vite (and every other rime command) resolves everything relative to cwd and
3
+ * fails when run from elsewhere (e.g. `vite build` from ./app errors with
4
+ * "Cannot resolve entry module index.html"). package.json alone isn't a
5
+ * reliable root marker since the build command copies one into ./app too;
6
+ * src/ is only ever present at the real project root.
7
+ */
8
+ export declare function isProjectRoot(cwd?: string): boolean;
9
+ export declare function getPackageInfoByKey(key: string): string;
@@ -1,5 +1,15 @@
1
1
  import path from 'path';
2
2
  import fs from 'fs';
3
+ /**
4
+ * Vite (and every other rime command) resolves everything relative to cwd and
5
+ * fails when run from elsewhere (e.g. `vite build` from ./app errors with
6
+ * "Cannot resolve entry module index.html"). package.json alone isn't a
7
+ * reliable root marker since the build command copies one into ./app too;
8
+ * src/ is only ever present at the real project root.
9
+ */
10
+ export function isProjectRoot(cwd = process.cwd()) {
11
+ return fs.existsSync(path.join(cwd, 'package.json')) && fs.existsSync(path.join(cwd, 'src'));
12
+ }
3
13
  export function getPackageInfoByKey(key) {
4
14
  try {
5
15
  // Read the package.json file