@aphexcms/cms-core 0.1.9 → 0.1.10

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 (351) hide show
  1. package/dist/api/assets.d.ts +48 -0
  2. package/dist/api/assets.d.ts.map +1 -0
  3. package/dist/api/assets.js +52 -0
  4. package/dist/api/client.d.ts +37 -0
  5. package/dist/api/client.d.ts.map +1 -0
  6. package/dist/api/client.js +125 -0
  7. package/dist/api/documents.d.ts +56 -0
  8. package/dist/api/documents.d.ts.map +1 -0
  9. package/dist/api/documents.js +77 -0
  10. package/dist/api/index.d.ts +7 -0
  11. package/dist/api/index.d.ts.map +1 -0
  12. package/dist/api/index.js +5 -0
  13. package/dist/api/organizations.d.ts +101 -0
  14. package/dist/api/organizations.d.ts.map +1 -0
  15. package/dist/api/organizations.js +92 -0
  16. package/dist/api/types.d.ts +23 -0
  17. package/dist/api/types.d.ts.map +1 -0
  18. package/dist/api/types.js +1 -0
  19. package/dist/auth/auth-errors.d.ts +7 -0
  20. package/dist/auth/auth-errors.d.ts.map +1 -0
  21. package/dist/auth/auth-errors.js +13 -0
  22. package/dist/auth/auth-hooks.d.ts +6 -0
  23. package/dist/auth/auth-hooks.d.ts.map +1 -0
  24. package/dist/auth/auth-hooks.js +108 -0
  25. package/dist/auth/provider.d.ts +17 -0
  26. package/dist/auth/provider.d.ts.map +1 -0
  27. package/dist/auth/provider.js +1 -0
  28. package/dist/client/index.d.ts +24 -0
  29. package/dist/client/index.d.ts.map +1 -0
  30. package/{src/lib/client/index.ts → dist/client/index.js} +7 -18
  31. package/dist/components/AdminApp.svelte.d.ts +24 -0
  32. package/dist/components/AdminApp.svelte.d.ts.map +1 -0
  33. package/dist/components/admin/AdminLayout.svelte.d.ts +15 -0
  34. package/dist/components/admin/AdminLayout.svelte.d.ts.map +1 -0
  35. package/dist/components/admin/DocumentEditor.svelte.d.ts +18 -0
  36. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -0
  37. package/dist/components/admin/DocumentTypesList.svelte.d.ts +14 -0
  38. package/dist/components/admin/DocumentTypesList.svelte.d.ts.map +1 -0
  39. package/dist/components/admin/ObjectModal.svelte.d.ts +15 -0
  40. package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -0
  41. package/dist/components/admin/SchemaField.svelte.d.ts +19 -0
  42. package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -0
  43. package/dist/components/admin/fields/ArrayField.svelte.d.ts +12 -0
  44. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -0
  45. package/dist/components/admin/fields/BooleanField.svelte.d.ts +13 -0
  46. package/dist/components/admin/fields/BooleanField.svelte.d.ts.map +1 -0
  47. package/dist/components/admin/fields/ImageField.svelte.d.ts +15 -0
  48. package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -0
  49. package/dist/components/admin/fields/NumberField.svelte.d.ts +14 -0
  50. package/dist/components/admin/fields/NumberField.svelte.d.ts.map +1 -0
  51. package/dist/components/admin/fields/ReferenceField.svelte.d.ts +12 -0
  52. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -0
  53. package/dist/components/admin/fields/SlugField.svelte.d.ts +15 -0
  54. package/dist/components/admin/fields/SlugField.svelte.d.ts.map +1 -0
  55. package/dist/components/admin/fields/StringField.svelte.d.ts +14 -0
  56. package/dist/components/admin/fields/StringField.svelte.d.ts.map +1 -0
  57. package/dist/components/admin/fields/TextareaField.svelte.d.ts +14 -0
  58. package/dist/components/admin/fields/TextareaField.svelte.d.ts.map +1 -0
  59. package/dist/components/fields/index.d.ts +9 -0
  60. package/dist/components/fields/index.d.ts.map +1 -0
  61. package/dist/components/index.d.ts +7 -0
  62. package/dist/components/index.d.ts.map +1 -0
  63. package/{src/lib/components/index.ts → dist/components/index.js} +1 -5
  64. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts +11 -0
  65. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts.map +1 -0
  66. package/dist/components/layout/Sidebar.svelte.d.ts +14 -0
  67. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -0
  68. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts +4 -0
  69. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts.map +1 -0
  70. package/dist/components/layout/sidebar/NavMain.svelte.d.ts +19 -0
  71. package/dist/components/layout/sidebar/NavMain.svelte.d.ts.map +1 -0
  72. package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts +9 -0
  73. package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts.map +1 -0
  74. package/dist/components/layout/sidebar/NavUser.svelte.d.ts +9 -0
  75. package/dist/components/layout/sidebar/NavUser.svelte.d.ts.map +1 -0
  76. package/dist/config.d.ts +3 -0
  77. package/dist/config.d.ts.map +1 -0
  78. package/dist/config.js +15 -0
  79. package/dist/db/adapters/index.d.ts +1 -0
  80. package/dist/db/adapters/index.d.ts.map +1 -0
  81. package/{src/lib/db/adapters/index.ts → dist/db/adapters/index.js} +1 -0
  82. package/dist/db/index.d.ts +2 -0
  83. package/dist/db/index.d.ts.map +1 -0
  84. package/{src/lib/db/index.ts → dist/db/index.js} +1 -2
  85. package/dist/db/interfaces/asset.d.ts +51 -0
  86. package/dist/db/interfaces/asset.d.ts.map +1 -0
  87. package/dist/db/interfaces/asset.js +1 -0
  88. package/dist/db/interfaces/document.d.ts +36 -0
  89. package/dist/db/interfaces/document.d.ts.map +1 -0
  90. package/dist/db/interfaces/document.js +1 -0
  91. package/dist/db/interfaces/index.d.ts +73 -0
  92. package/dist/db/interfaces/index.d.ts.map +1 -0
  93. package/dist/db/interfaces/index.js +1 -0
  94. package/dist/db/interfaces/organization.d.ts +27 -0
  95. package/dist/db/interfaces/organization.d.ts.map +1 -0
  96. package/dist/db/interfaces/organization.js +1 -0
  97. package/dist/db/interfaces/schema.d.ts +21 -0
  98. package/dist/db/interfaces/schema.d.ts.map +1 -0
  99. package/dist/db/interfaces/schema.js +1 -0
  100. package/dist/db/interfaces/user.d.ts +15 -0
  101. package/dist/db/interfaces/user.d.ts.map +1 -0
  102. package/dist/db/interfaces/user.js +1 -0
  103. package/dist/db/utils/reference-resolver.d.ts +18 -0
  104. package/dist/db/utils/reference-resolver.d.ts.map +1 -0
  105. package/dist/db/utils/reference-resolver.js +80 -0
  106. package/dist/define.d.ts +3 -0
  107. package/dist/define.d.ts.map +1 -0
  108. package/dist/define.js +4 -0
  109. package/dist/email/index.d.ts +2 -0
  110. package/dist/email/index.d.ts.map +1 -0
  111. package/{src/lib/email/index.ts → dist/email/index.js} +1 -2
  112. package/dist/email/interfaces/email.d.ts +42 -0
  113. package/dist/email/interfaces/email.d.ts.map +1 -0
  114. package/dist/email/interfaces/email.js +1 -0
  115. package/dist/engine.d.ts +26 -0
  116. package/dist/engine.d.ts.map +1 -0
  117. package/dist/engine.js +66 -0
  118. package/dist/field-validation/rule.d.ts +51 -0
  119. package/dist/field-validation/rule.d.ts.map +1 -0
  120. package/dist/field-validation/rule.js +221 -0
  121. package/dist/field-validation/utils.d.ts +21 -0
  122. package/dist/field-validation/utils.d.ts.map +1 -0
  123. package/dist/field-validation/utils.js +66 -0
  124. package/dist/hooks.d.ts +23 -0
  125. package/dist/hooks.d.ts.map +1 -0
  126. package/dist/hooks.js +96 -0
  127. package/dist/index.d.ts +2 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/{src/lib/index.ts → dist/index.js} +1 -2
  130. package/dist/is-mobile.svelte.d.ts +5 -0
  131. package/dist/is-mobile.svelte.d.ts.map +1 -0
  132. package/{src/lib/is-mobile.svelte.ts → dist/is-mobile.svelte.js} +3 -5
  133. package/dist/routes/assets-by-id.d.ts +5 -0
  134. package/dist/routes/assets-by-id.d.ts.map +1 -0
  135. package/dist/routes/assets-by-id.js +138 -0
  136. package/dist/routes/assets-cdn.d.ts +3 -0
  137. package/dist/routes/assets-cdn.d.ts.map +1 -0
  138. package/dist/routes/assets-cdn.js +155 -0
  139. package/dist/routes/assets.d.ts +4 -0
  140. package/dist/routes/assets.d.ts.map +1 -0
  141. package/dist/routes/assets.js +94 -0
  142. package/dist/routes/documents-by-id.d.ts +5 -0
  143. package/dist/routes/documents-by-id.d.ts.map +1 -0
  144. package/dist/routes/documents-by-id.js +142 -0
  145. package/dist/routes/documents-publish.d.ts +4 -0
  146. package/dist/routes/documents-publish.d.ts.map +1 -0
  147. package/dist/routes/documents-publish.js +151 -0
  148. package/dist/routes/documents.d.ts +4 -0
  149. package/dist/routes/documents.d.ts.map +1 -0
  150. package/dist/routes/documents.js +131 -0
  151. package/dist/routes/index.d.ts +6 -0
  152. package/dist/routes/index.d.ts.map +1 -0
  153. package/dist/routes/index.js +10 -0
  154. package/dist/routes/organizations-by-id.d.ts +5 -0
  155. package/dist/routes/organizations-by-id.d.ts.map +1 -0
  156. package/dist/routes/organizations-by-id.js +187 -0
  157. package/dist/routes/organizations-invitations.d.ts +4 -0
  158. package/dist/routes/organizations-invitations.d.ts.map +1 -0
  159. package/dist/routes/organizations-invitations.js +125 -0
  160. package/dist/routes/organizations-members.d.ts +5 -0
  161. package/dist/routes/organizations-members.d.ts.map +1 -0
  162. package/dist/routes/organizations-members.js +206 -0
  163. package/dist/routes/organizations-switch.d.ts +3 -0
  164. package/dist/routes/organizations-switch.d.ts.map +1 -0
  165. package/dist/routes/organizations-switch.js +53 -0
  166. package/dist/routes/organizations.d.ts +4 -0
  167. package/dist/routes/organizations.d.ts.map +1 -0
  168. package/dist/routes/organizations.js +109 -0
  169. package/dist/routes/schemas-by-type.d.ts +3 -0
  170. package/dist/routes/schemas-by-type.d.ts.map +1 -0
  171. package/dist/routes/schemas-by-type.js +25 -0
  172. package/dist/routes/schemas.d.ts +3 -0
  173. package/dist/routes/schemas.d.ts.map +1 -0
  174. package/dist/routes/schemas.js +11 -0
  175. package/dist/routes-exports.d.ts +14 -0
  176. package/dist/routes-exports.d.ts.map +1 -0
  177. package/dist/routes-exports.js +19 -0
  178. package/dist/schema-context.svelte.d.ts +10 -0
  179. package/dist/schema-context.svelte.d.ts.map +1 -0
  180. package/dist/schema-context.svelte.js +18 -0
  181. package/dist/schema-utils/cleanup.d.ts +21 -0
  182. package/dist/schema-utils/cleanup.d.ts.map +1 -0
  183. package/dist/schema-utils/cleanup.js +80 -0
  184. package/dist/schema-utils/index.d.ts +4 -0
  185. package/dist/schema-utils/index.d.ts.map +1 -0
  186. package/dist/schema-utils/index.js +4 -0
  187. package/dist/schema-utils/utils.d.ts +30 -0
  188. package/dist/schema-utils/utils.d.ts.map +1 -0
  189. package/dist/schema-utils/utils.js +37 -0
  190. package/dist/schema-utils/validator.d.ts +6 -0
  191. package/dist/schema-utils/validator.d.ts.map +1 -0
  192. package/dist/schema-utils/validator.js +45 -0
  193. package/dist/server/index.d.ts +16 -0
  194. package/dist/server/index.d.ts.map +1 -0
  195. package/dist/server/index.js +28 -0
  196. package/dist/services/asset-service.d.ts +86 -0
  197. package/dist/services/asset-service.d.ts.map +1 -0
  198. package/dist/services/asset-service.js +187 -0
  199. package/dist/services/index.d.ts +3 -0
  200. package/dist/services/index.d.ts.map +1 -0
  201. package/dist/services/index.js +4 -0
  202. package/dist/storage/adapters/index.d.ts +2 -0
  203. package/dist/storage/adapters/index.d.ts.map +1 -0
  204. package/dist/storage/adapters/index.js +2 -0
  205. package/dist/storage/adapters/local-storage-adapter.d.ts +54 -0
  206. package/dist/storage/adapters/local-storage-adapter.d.ts.map +1 -0
  207. package/dist/storage/adapters/local-storage-adapter.js +187 -0
  208. package/dist/storage/index.d.ts +3 -0
  209. package/dist/storage/index.d.ts.map +1 -0
  210. package/{src/lib/storage/index.ts → dist/storage/index.js} +2 -4
  211. package/dist/storage/interfaces/index.d.ts +2 -0
  212. package/dist/storage/interfaces/index.d.ts.map +1 -0
  213. package/dist/storage/interfaces/index.js +2 -0
  214. package/dist/storage/interfaces/storage.d.ts +91 -0
  215. package/dist/storage/interfaces/storage.d.ts.map +1 -0
  216. package/dist/storage/interfaces/storage.js +1 -0
  217. package/dist/storage/providers/storage.d.ts +43 -0
  218. package/dist/storage/providers/storage.d.ts.map +1 -0
  219. package/dist/storage/providers/storage.js +64 -0
  220. package/dist/types/asset.d.ts +73 -0
  221. package/dist/types/asset.d.ts.map +1 -0
  222. package/dist/types/asset.js +2 -0
  223. package/dist/types/auth.d.ts +50 -0
  224. package/dist/types/auth.d.ts.map +1 -0
  225. package/dist/types/auth.js +41 -0
  226. package/dist/types/config.d.ts +47 -0
  227. package/dist/types/config.d.ts.map +1 -0
  228. package/dist/types/config.js +1 -0
  229. package/dist/types/document.d.ts +34 -0
  230. package/dist/types/document.d.ts.map +1 -0
  231. package/dist/types/document.js +1 -0
  232. package/dist/types/index.d.ts +9 -0
  233. package/dist/types/index.d.ts.map +1 -0
  234. package/dist/types/index.js +8 -0
  235. package/dist/types/organization.d.ts +105 -0
  236. package/dist/types/organization.d.ts.map +1 -0
  237. package/dist/types/organization.js +3 -0
  238. package/dist/types/schemas.d.ts +114 -0
  239. package/dist/types/schemas.d.ts.map +1 -0
  240. package/dist/types/schemas.js +1 -0
  241. package/dist/types/sidebar.d.ts +33 -0
  242. package/dist/types/sidebar.d.ts.map +1 -0
  243. package/dist/types/sidebar.js +1 -0
  244. package/dist/types/user.d.ts +14 -0
  245. package/dist/types/user.d.ts.map +1 -0
  246. package/dist/types/user.js +1 -0
  247. package/dist/utils/content-hash.d.ts +22 -0
  248. package/dist/utils/content-hash.d.ts.map +1 -0
  249. package/dist/utils/content-hash.js +67 -0
  250. package/dist/utils/image-url.d.ts +88 -0
  251. package/dist/utils/image-url.d.ts.map +1 -0
  252. package/dist/utils/image-url.js +165 -0
  253. package/dist/utils/index.d.ts +6 -0
  254. package/dist/utils/index.d.ts.map +1 -0
  255. package/dist/utils/index.js +9 -0
  256. package/dist/utils/slug.d.ts +13 -0
  257. package/dist/utils/slug.d.ts.map +1 -0
  258. package/dist/utils/slug.js +30 -0
  259. package/dist/utils.d.ts +13 -0
  260. package/dist/utils.d.ts.map +1 -0
  261. package/dist/utils.js +5 -0
  262. package/package.json +2 -2
  263. package/src/lib/api/assets.ts +0 -75
  264. package/src/lib/api/client.ts +0 -150
  265. package/src/lib/api/documents.ts +0 -102
  266. package/src/lib/api/index.ts +0 -7
  267. package/src/lib/api/organizations.ts +0 -154
  268. package/src/lib/api/types.ts +0 -34
  269. package/src/lib/auth/auth-errors.ts +0 -23
  270. package/src/lib/auth/auth-hooks.ts +0 -132
  271. package/src/lib/auth/provider.ts +0 -25
  272. package/src/lib/config.ts +0 -18
  273. package/src/lib/db/interfaces/asset.ts +0 -61
  274. package/src/lib/db/interfaces/document.ts +0 -53
  275. package/src/lib/db/interfaces/index.ts +0 -98
  276. package/src/lib/db/interfaces/organization.ts +0 -51
  277. package/src/lib/db/interfaces/schema.ts +0 -13
  278. package/src/lib/db/interfaces/user.ts +0 -16
  279. package/src/lib/db/utils/reference-resolver.ts +0 -119
  280. package/src/lib/define.ts +0 -7
  281. package/src/lib/email/interfaces/email.ts +0 -45
  282. package/src/lib/engine.ts +0 -85
  283. package/src/lib/field-validation/rule.ts +0 -287
  284. package/src/lib/field-validation/utils.ts +0 -91
  285. package/src/lib/hooks.ts +0 -142
  286. package/src/lib/routes/assets-by-id.ts +0 -161
  287. package/src/lib/routes/assets-cdn.ts +0 -185
  288. package/src/lib/routes/assets.ts +0 -116
  289. package/src/lib/routes/documents-by-id.ts +0 -188
  290. package/src/lib/routes/documents-publish.ts +0 -211
  291. package/src/lib/routes/documents.ts +0 -172
  292. package/src/lib/routes/index.ts +0 -13
  293. package/src/lib/routes/organizations-by-id.ts +0 -258
  294. package/src/lib/routes/organizations-invitations.ts +0 -183
  295. package/src/lib/routes/organizations-members.ts +0 -301
  296. package/src/lib/routes/organizations-switch.ts +0 -74
  297. package/src/lib/routes/organizations.ts +0 -147
  298. package/src/lib/routes/schemas-by-type.ts +0 -35
  299. package/src/lib/routes/schemas.ts +0 -19
  300. package/src/lib/routes-exports.ts +0 -42
  301. package/src/lib/schema-context.svelte.ts +0 -24
  302. package/src/lib/schema-utils/cleanup.ts +0 -116
  303. package/src/lib/schema-utils/index.ts +0 -4
  304. package/src/lib/schema-utils/utils.ts +0 -47
  305. package/src/lib/schema-utils/validator.ts +0 -58
  306. package/src/lib/server/index.ts +0 -40
  307. package/src/lib/services/asset-service.ts +0 -256
  308. package/src/lib/services/index.ts +0 -6
  309. package/src/lib/storage/adapters/index.ts +0 -2
  310. package/src/lib/storage/adapters/local-storage-adapter.ts +0 -215
  311. package/src/lib/storage/interfaces/index.ts +0 -2
  312. package/src/lib/storage/interfaces/storage.ts +0 -114
  313. package/src/lib/storage/providers/storage.ts +0 -83
  314. package/src/lib/types/asset.ts +0 -81
  315. package/src/lib/types/auth.ts +0 -80
  316. package/src/lib/types/config.ts +0 -45
  317. package/src/lib/types/document.ts +0 -38
  318. package/src/lib/types/index.ts +0 -8
  319. package/src/lib/types/organization.ts +0 -119
  320. package/src/lib/types/schemas.ts +0 -151
  321. package/src/lib/types/sidebar.ts +0 -37
  322. package/src/lib/types/user.ts +0 -17
  323. package/src/lib/utils/content-hash.ts +0 -75
  324. package/src/lib/utils/image-url.ts +0 -204
  325. package/src/lib/utils/index.ts +0 -12
  326. package/src/lib/utils/slug.ts +0 -33
  327. package/src/lib/utils.ts +0 -13
  328. /package/{src/lib → dist}/app.d.ts +0 -0
  329. /package/{src/lib → dist}/auth/MULTI_TENANCY_PLAN.md +0 -0
  330. /package/{src/lib → dist}/components/AdminApp.svelte +0 -0
  331. /package/{src/lib → dist}/components/admin/AdminLayout.svelte +0 -0
  332. /package/{src/lib → dist}/components/admin/DocumentEditor.svelte +0 -0
  333. /package/{src/lib → dist}/components/admin/DocumentTypesList.svelte +0 -0
  334. /package/{src/lib → dist}/components/admin/ObjectModal.svelte +0 -0
  335. /package/{src/lib → dist}/components/admin/SchemaField.svelte +0 -0
  336. /package/{src/lib → dist}/components/admin/fields/ArrayField.svelte +0 -0
  337. /package/{src/lib → dist}/components/admin/fields/BooleanField.svelte +0 -0
  338. /package/{src/lib → dist}/components/admin/fields/ImageField.svelte +0 -0
  339. /package/{src/lib → dist}/components/admin/fields/NumberField.svelte +0 -0
  340. /package/{src/lib → dist}/components/admin/fields/ReferenceField.svelte +0 -0
  341. /package/{src/lib → dist}/components/admin/fields/SlugField.svelte +0 -0
  342. /package/{src/lib → dist}/components/admin/fields/StringField.svelte +0 -0
  343. /package/{src/lib → dist}/components/admin/fields/TextareaField.svelte +0 -0
  344. /package/{src/lib/components/fields/index.ts → dist/components/fields/index.js} +0 -0
  345. /package/{src/lib → dist}/components/layout/OrganizationSwitcher.svelte +0 -0
  346. /package/{src/lib → dist}/components/layout/Sidebar.svelte +0 -0
  347. /package/{src/lib → dist}/components/layout/sidebar/AppSidebar.svelte +0 -0
  348. /package/{src/lib → dist}/components/layout/sidebar/NavMain.svelte +0 -0
  349. /package/{src/lib → dist}/components/layout/sidebar/NavSecondary.svelte +0 -0
  350. /package/{src/lib → dist}/components/layout/sidebar/NavUser.svelte +0 -0
  351. /package/{src/lib → dist}/plugins/README.md +0 -0
@@ -1,119 +0,0 @@
1
- // Reference resolution utility for resolving nested document references
2
- import type { Document } from '../../types/index';
3
- import type { DocumentAdapter } from '../interfaces/document';
4
-
5
- interface ResolveOptions {
6
- depth: number;
7
- currentDepth?: number;
8
- visited?: Set<string>; // Track visited documents to prevent circular references
9
- }
10
-
11
- /**
12
- * Recursively resolves reference fields in a document
13
- * @param document - The document to resolve references for
14
- * @param adapter - Document adapter for fetching referenced documents
15
- * @param organizationId - Organization ID for filtering referenced documents
16
- * @param options - Resolution options (depth, tracking)
17
- * @returns Document with resolved references
18
- */
19
- export async function resolveReferences(
20
- document: Document,
21
- adapter: DocumentAdapter,
22
- organizationId: string,
23
- options: ResolveOptions
24
- ): Promise<Document> {
25
- const { depth, currentDepth = 0, visited = new Set() } = options;
26
-
27
- // Base case: no more depth to resolve or already visited (circular reference)
28
- if (currentDepth >= depth || visited.has(document.id)) {
29
- return document;
30
- }
31
-
32
- // Mark as visited
33
- visited.add(document.id);
34
-
35
- // Clone the document to avoid mutations
36
- const resolvedDocument = { ...document };
37
-
38
- // Resolve references in draftData
39
- if (document.draftData) {
40
- resolvedDocument.draftData = await resolveDataReferences(
41
- document.draftData,
42
- adapter,
43
- organizationId,
44
- {
45
- depth,
46
- currentDepth: currentDepth + 1,
47
- visited
48
- }
49
- );
50
- }
51
-
52
- // Resolve references in publishedData
53
- if (document.publishedData) {
54
- resolvedDocument.publishedData = await resolveDataReferences(
55
- document.publishedData,
56
- adapter,
57
- organizationId,
58
- {
59
- depth,
60
- currentDepth: currentDepth + 1,
61
- visited
62
- }
63
- );
64
- }
65
-
66
- return resolvedDocument;
67
- }
68
-
69
- /**
70
- * Resolves references within document data (recursive)
71
- */
72
- async function resolveDataReferences(
73
- data: any,
74
- adapter: DocumentAdapter,
75
- organizationId: string,
76
- options: ResolveOptions
77
- ): Promise<any> {
78
- if (!data || typeof data !== 'object') {
79
- return data;
80
- }
81
-
82
- // Handle arrays
83
- if (Array.isArray(data)) {
84
- return Promise.all(
85
- data.map((item) => resolveDataReferences(item, adapter, organizationId, options))
86
- );
87
- }
88
-
89
- // Clone object
90
- const resolved: any = {};
91
-
92
- for (const [key, value] of Object.entries(data)) {
93
- // Check if this looks like a reference field (string ID)
94
- if (typeof value === 'string' && key !== '_type' && key !== '_key') {
95
- // Try to fetch the referenced document
96
- try {
97
- const referencedDoc = await adapter.findByDocId(organizationId, value);
98
- if (referencedDoc) {
99
- // Recursively resolve nested references
100
- resolved[key] = await resolveReferences(referencedDoc, adapter, organizationId, options);
101
- } else {
102
- // Reference not found, keep the ID
103
- resolved[key] = value;
104
- }
105
- } catch (error) {
106
- // On error, keep the original value
107
- resolved[key] = value;
108
- }
109
- } else if (value && typeof value === 'object') {
110
- // Recursively resolve nested objects/arrays
111
- resolved[key] = await resolveDataReferences(value, adapter, organizationId, options);
112
- } else {
113
- // Primitive value, keep as is
114
- resolved[key] = value;
115
- }
116
- }
117
-
118
- return resolved;
119
- }
package/src/lib/define.ts DELETED
@@ -1,7 +0,0 @@
1
- // CMS configuration helper
2
- import type { CMSConfig } from './types/index';
3
-
4
- // CMS config helper
5
- export function defineCMSConfig(config: CMSConfig): CMSConfig {
6
- return config;
7
- }
@@ -1,45 +0,0 @@
1
- export interface EmailAddress {
2
- email: string;
3
- name?: string;
4
- }
5
-
6
- export interface SendEmailOptions {
7
- from: string;
8
- to: string | string[];
9
- subject: string;
10
- html?: string;
11
- text?: string;
12
- cc?: string | string[];
13
- bcc?: string | string[];
14
- replyTo?: string;
15
- tags?: Array<{ name: string; value: string }>;
16
- attachments?: Array<{
17
- filename: string;
18
- content: Buffer | string;
19
- }>;
20
- }
21
-
22
- export interface SendEmailResult {
23
- id: string;
24
- error?: string;
25
- }
26
-
27
- export interface EmailAdapter {
28
- readonly name: string;
29
-
30
- send(options: SendEmailOptions): Promise<SendEmailResult>;
31
-
32
- sendBatch?(emails: SendEmailOptions[]): Promise<SendEmailResult[]>;
33
- }
34
-
35
- export interface EmailProvider {
36
- name: string;
37
- createAdapter(config: EmailConfig): EmailAdapter;
38
- }
39
-
40
- export interface EmailConfig {
41
- apiKey?: string;
42
- options?: {
43
- [key: string]: any;
44
- };
45
- }
package/src/lib/engine.ts DELETED
@@ -1,85 +0,0 @@
1
- import type { CMSConfig } from './types/config';
2
- import type { SchemaType } from './types/schemas';
3
- import type { DatabaseAdapter } from './db/interfaces/index';
4
-
5
- export class CMSEngine {
6
- private db: DatabaseAdapter;
7
- public config: CMSConfig;
8
-
9
- constructor(config: CMSConfig, dbAdapter: DatabaseAdapter) {
10
- this.config = config;
11
- this.db = dbAdapter;
12
- }
13
-
14
- // Update config dynamically (for schema hot-reloading)
15
- updateConfig(newConfig: CMSConfig): void {
16
- this.config = newConfig;
17
- console.log('🔄 CMS config updated:', {
18
- schemaTypes: newConfig.schemaTypes.length,
19
- documents: newConfig.schemaTypes.filter((t) => t.type === 'document').length,
20
- objects: newConfig.schemaTypes.filter((t) => t.type === 'object').length
21
- });
22
- }
23
-
24
- // Initialize CMS - register schema types in database
25
- async initialize(): Promise<void> {
26
- console.log('🚀 Initializing CMS...');
27
-
28
- // Get existing schemas from database
29
- const existingSchemas = await this.db.listSchemas();
30
- const existingNames = new Set(existingSchemas.map((s) => s.name));
31
- const currentNames = new Set(this.config.schemaTypes.map((s) => s.name));
32
-
33
- // Delete schemas that are no longer in config
34
- for (const existingName of existingNames) {
35
- if (!currentNames.has(existingName)) {
36
- await this.db.deleteSchemaType(existingName);
37
- }
38
- }
39
-
40
- // Register all schema types (updates if exists, creates if new)
41
- for (const schemaType of this.config.schemaTypes) {
42
- await this.db.registerSchemaType(schemaType);
43
- }
44
-
45
- console.log('✅ CMS initialized successfully');
46
- }
47
-
48
- // Schema Type utility methods
49
- async getSchemaType(name: string): Promise<SchemaType | null> {
50
- return this.db.getSchemaType(name);
51
- }
52
-
53
- async listSchemas(): Promise<SchemaType[]> {
54
- return this.db.listSchemas();
55
- }
56
-
57
- getSchemaTypeByName(name: string): SchemaType | null {
58
- return this.config.schemaTypes.find((s) => s.name === name) || null;
59
- }
60
-
61
- async listDocumentTypes(): Promise<Array<{ name: string; title: string; description?: string }>> {
62
- return this.db.listDocumentTypes();
63
- }
64
-
65
- async listObjectTypes(): Promise<Array<{ name: string; title: string; description?: string }>> {
66
- return this.db.listObjectTypes();
67
- }
68
- }
69
-
70
- // Global CMS instance
71
- let cmsInstance: CMSEngine | null = null;
72
-
73
- export function createCMS(config: CMSConfig, dbAdapter: DatabaseAdapter): CMSEngine {
74
- if (!cmsInstance) {
75
- cmsInstance = new CMSEngine(config, dbAdapter);
76
- }
77
- return cmsInstance;
78
- }
79
-
80
- export function getCMS(): CMSEngine {
81
- if (!cmsInstance) {
82
- throw new Error('CMS not initialized. Call createCMS() first.');
83
- }
84
- return cmsInstance;
85
- }
@@ -1,287 +0,0 @@
1
- // Sanity-style validation Rule implementation
2
- export interface ValidationMarker {
3
- level: 'error' | 'warning' | 'info';
4
- message: string;
5
- path?: string[];
6
- }
7
-
8
- export interface ValidationContext {
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
- document?: any;
11
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
- parent?: any;
13
- path?: string[];
14
- }
15
-
16
- export interface CustomValidator<T = unknown> {
17
- (
18
- value: T,
19
- context: ValidationContext
20
- ): ValidationMarker[] | string | boolean | Promise<ValidationMarker[] | string | boolean>;
21
- }
22
-
23
- export interface FieldReference {
24
- __fieldReference: true;
25
- path: string | string[];
26
- }
27
-
28
- export class Rule {
29
- private _required: boolean = false;
30
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
- private _rules: Array<{ type: string; constraint?: any; message?: string }> = [];
32
- private _level: 'error' | 'warning' | 'info' = 'error';
33
- private _message?: string;
34
-
35
- static FIELD_REF = Symbol('fieldReference');
36
-
37
- static valueOfField(path: string | string[]): FieldReference {
38
- return {
39
- __fieldReference: true,
40
- path
41
- };
42
- }
43
-
44
- valueOfField(path: string | string[]): FieldReference {
45
- return Rule.valueOfField(path);
46
- }
47
-
48
- required(): Rule {
49
- const newRule = this.clone();
50
- newRule._required = true;
51
- return newRule;
52
- }
53
-
54
- optional(): Rule {
55
- const newRule = this.clone();
56
- newRule._required = false;
57
- return newRule;
58
- }
59
-
60
- min(len: number | string | FieldReference): Rule {
61
- const newRule = this.clone();
62
- newRule._rules.push({ type: 'min', constraint: len });
63
- return newRule;
64
- }
65
-
66
- max(len: number | string | FieldReference): Rule {
67
- const newRule = this.clone();
68
- newRule._rules.push({ type: 'max', constraint: len });
69
- return newRule;
70
- }
71
-
72
- length(len: number | FieldReference): Rule {
73
- const newRule = this.clone();
74
- newRule._rules.push({ type: 'length', constraint: len });
75
- return newRule;
76
- }
77
-
78
- email(): Rule {
79
- const newRule = this.clone();
80
- newRule._rules.push({ type: 'email' });
81
- return newRule;
82
- }
83
-
84
- uri(options?: { scheme?: RegExp[]; allowRelative?: boolean }): Rule {
85
- const newRule = this.clone();
86
- newRule._rules.push({ type: 'uri', constraint: options });
87
- return newRule;
88
- }
89
-
90
- regex(pattern: RegExp, name?: string): Rule {
91
- const newRule = this.clone();
92
- newRule._rules.push({ type: 'regex', constraint: { pattern, name } });
93
- return newRule;
94
- }
95
-
96
- positive(): Rule {
97
- const newRule = this.clone();
98
- newRule._rules.push({ type: 'positive' });
99
- return newRule;
100
- }
101
-
102
- negative(): Rule {
103
- const newRule = this.clone();
104
- newRule._rules.push({ type: 'negative' });
105
- return newRule;
106
- }
107
-
108
- integer(): Rule {
109
- const newRule = this.clone();
110
- newRule._rules.push({ type: 'integer' });
111
- return newRule;
112
- }
113
-
114
- greaterThan(num: number | FieldReference): Rule {
115
- const newRule = this.clone();
116
- newRule._rules.push({ type: 'greaterThan', constraint: num });
117
- return newRule;
118
- }
119
-
120
- lessThan(num: number | FieldReference): Rule {
121
- const newRule = this.clone();
122
- newRule._rules.push({ type: 'lessThan', constraint: num });
123
- return newRule;
124
- }
125
-
126
- custom<T = unknown>(fn: CustomValidator<T>): Rule {
127
- const newRule = this.clone();
128
- newRule._rules.push({ type: 'custom', constraint: fn });
129
- return newRule;
130
- }
131
-
132
- error(message?: string): Rule {
133
- const newRule = this.clone();
134
- newRule._level = 'error';
135
- newRule._message = message;
136
- return newRule;
137
- }
138
-
139
- warning(message?: string): Rule {
140
- const newRule = this.clone();
141
- newRule._level = 'warning';
142
- newRule._message = message;
143
- return newRule;
144
- }
145
-
146
- info(message?: string): Rule {
147
- const newRule = this.clone();
148
- newRule._level = 'info';
149
- newRule._message = message;
150
- return newRule;
151
- }
152
-
153
- clone(): Rule {
154
- const newRule = new Rule();
155
- newRule._required = this._required;
156
- newRule._rules = [...this._rules];
157
- newRule._level = this._level;
158
- newRule._message = this._message;
159
- return newRule;
160
- }
161
-
162
- async validate(value: unknown, context: ValidationContext = {}): Promise<ValidationMarker[]> {
163
- const markers: ValidationMarker[] = [];
164
-
165
- // Check required
166
- if (this._required && (value === undefined || value === null || value === '')) {
167
- markers.push({
168
- level: this._level,
169
- message: this._message || 'Required',
170
- path: context.path
171
- });
172
- }
173
-
174
- // If value is empty and not required, skip other validations
175
- if (!this._required && (value === undefined || value === null || value === '')) {
176
- return markers;
177
- }
178
-
179
- // Run other validations
180
- for (const rule of this._rules) {
181
- try {
182
- const result = await this.validateRule(rule, value, context);
183
- if (result) {
184
- markers.push({
185
- level: this._level,
186
- message: this._message || result,
187
- path: context.path
188
- });
189
- }
190
- } catch (error) {
191
- markers.push({
192
- level: 'error',
193
- message: `Validation error: ${error instanceof Error ? error.message : 'Unknown error'}`,
194
- path: context.path
195
- });
196
- }
197
- }
198
-
199
- return markers;
200
- }
201
-
202
- private async validateRule(
203
- rule: { type: string; constraint?: any },
204
- value: unknown,
205
- context: ValidationContext
206
- ): Promise<string | null> {
207
- switch (rule.type) {
208
- case 'min':
209
- if (typeof value === 'string' && value.length < rule.constraint) {
210
- return `Must be at least ${rule.constraint} characters`;
211
- }
212
- if (typeof value === 'number' && value < rule.constraint) {
213
- return `Must be at least ${rule.constraint}`;
214
- }
215
- break;
216
-
217
- case 'max':
218
- if (typeof value === 'string' && value.length > rule.constraint) {
219
- return `Must be at most ${rule.constraint} characters`;
220
- }
221
- if (typeof value === 'number' && value > rule.constraint) {
222
- return `Must be at most ${rule.constraint}`;
223
- }
224
- break;
225
-
226
- case 'email':
227
- if (typeof value === 'string' && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
228
- return 'Must be a valid email address';
229
- }
230
- break;
231
-
232
- case 'uri':
233
- if (typeof value === 'string') {
234
- try {
235
- new URL(value);
236
- } catch {
237
- return 'Must be a valid URL';
238
- }
239
- }
240
- break;
241
-
242
- case 'regex':
243
- if (typeof value === 'string' && !rule.constraint.pattern.test(value)) {
244
- return `Must match pattern${rule.constraint.name ? ` (${rule.constraint.name})` : ''}`;
245
- }
246
- break;
247
-
248
- case 'positive':
249
- if (typeof value === 'number' && value <= 0) {
250
- return 'Must be positive';
251
- }
252
- break;
253
-
254
- case 'negative':
255
- if (typeof value === 'number' && value >= 0) {
256
- return 'Must be negative';
257
- }
258
- break;
259
-
260
- case 'integer':
261
- if (typeof value === 'number' && !Number.isInteger(value)) {
262
- return 'Must be an integer';
263
- }
264
- break;
265
-
266
- case 'custom': {
267
- const customResult = await rule.constraint(value, context);
268
- if (customResult === false) {
269
- return 'Validation failed';
270
- }
271
- if (typeof customResult === 'string') {
272
- return customResult;
273
- }
274
- if (Array.isArray(customResult) && customResult.length > 0) {
275
- return customResult[0].message;
276
- }
277
- break;
278
- }
279
- }
280
-
281
- return null;
282
- }
283
-
284
- isRequired(): boolean {
285
- return this._required;
286
- }
287
- }
@@ -1,91 +0,0 @@
1
- import type { Field } from '../types/index';
2
- import { Rule } from './rule';
3
-
4
- export interface ValidationError {
5
- level: 'error' | 'warning' | 'info';
6
- message: string;
7
- }
8
-
9
- /**
10
- * Check if a field is required based on its validation rules
11
- */
12
- export function isFieldRequired(field: Field): boolean {
13
- if (!field.validation) return false;
14
- try {
15
- const validationFn = Array.isArray(field.validation) ? field.validation[0] : field.validation;
16
- if (!validationFn) return false;
17
- const rule = validationFn(new Rule());
18
- return rule.isRequired();
19
- } catch {
20
- return false;
21
- }
22
- }
23
-
24
- /**
25
- * Validate a field value against its validation rules
26
- */
27
- export async function validateField(
28
- field: Field,
29
- value: any,
30
- context: any = {}
31
- ): Promise<{
32
- isValid: boolean;
33
- errors: ValidationError[];
34
- }> {
35
- if (!field.validation) {
36
- return { isValid: true, errors: [] };
37
- }
38
-
39
- try {
40
- const validationFunctions = Array.isArray(field.validation)
41
- ? field.validation
42
- : [field.validation];
43
-
44
- const allErrors: ValidationError[] = [];
45
-
46
- for (const validationFn of validationFunctions) {
47
- const rule = validationFn(new Rule());
48
-
49
- if (!(rule instanceof Rule)) {
50
- console.error(
51
- `Validation function for field "${field.name}" did not return a Rule object. Make sure you are chaining validation methods and returning the result.`
52
- );
53
- continue;
54
- }
55
-
56
- const markers = await rule.validate(value, {
57
- path: [field.name],
58
- ...context
59
- });
60
-
61
- allErrors.push(
62
- ...markers.map((marker) => ({
63
- level: marker.level,
64
- message: marker.message
65
- }))
66
- );
67
- }
68
-
69
- const isValid = allErrors.filter((e) => e.level === 'error').length === 0;
70
-
71
- return { isValid, errors: allErrors };
72
- } catch (error) {
73
- console.error('Validation error:', error);
74
- return {
75
- isValid: false,
76
- errors: [{ level: 'error', message: 'Validation failed' }]
77
- };
78
- }
79
- }
80
-
81
- /**
82
- * Get validation CSS classes for input styling
83
- */
84
- export function getValidationClasses(hasErrors: boolean): string {
85
- if (hasErrors) {
86
- return 'border-destructive border-2';
87
- }
88
-
89
- // No green styling for success - only show red for errors
90
- return '';
91
- }