@aphexcms/cms-core 0.2.3 → 2.0.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 (617) hide show
  1. package/dist/api/api-keys.d.ts +37 -0
  2. package/dist/api/api-keys.d.ts.map +1 -0
  3. package/dist/api/api-keys.js +20 -0
  4. package/dist/api/assets.d.ts +27 -0
  5. package/dist/api/assets.d.ts.map +1 -1
  6. package/dist/api/assets.js +22 -1
  7. package/dist/api/index.d.ts +8 -0
  8. package/dist/api/index.d.ts.map +1 -1
  9. package/dist/api/index.js +4 -0
  10. package/dist/api/instance.d.ts +17 -0
  11. package/dist/api/instance.d.ts.map +1 -0
  12. package/dist/api/instance.js +21 -0
  13. package/dist/api/invitations.d.ts +37 -0
  14. package/dist/api/invitations.d.ts.map +1 -0
  15. package/dist/api/invitations.js +27 -0
  16. package/dist/api/organizations.d.ts +7 -0
  17. package/dist/api/organizations.d.ts.map +1 -1
  18. package/dist/api/organizations.js +7 -0
  19. package/dist/api/types.d.ts +1 -1
  20. package/dist/api/types.d.ts.map +1 -1
  21. package/dist/api/user.d.ts +23 -0
  22. package/dist/api/user.d.ts.map +1 -0
  23. package/dist/api/user.js +20 -0
  24. package/dist/auth/auth-errors.d.ts +1 -1
  25. package/dist/auth/auth-errors.d.ts.map +1 -1
  26. package/dist/auth/auth-hooks.d.ts.map +1 -1
  27. package/dist/auth/auth-hooks.js +39 -23
  28. package/dist/auth/provider.d.ts +2 -2
  29. package/dist/auth/provider.d.ts.map +1 -1
  30. package/dist/cli/generate-types.d.ts +14 -0
  31. package/dist/cli/generate-types.d.ts.map +1 -0
  32. package/dist/cli/generate-types.js +15 -7
  33. package/dist/cli/generate-types.js.map +1 -0
  34. package/dist/cli/index.d.ts +7 -0
  35. package/dist/cli/index.d.ts.map +1 -0
  36. package/dist/cli/index.js +1 -0
  37. package/dist/cli/index.js.map +1 -0
  38. package/dist/client/index.d.ts +1 -0
  39. package/dist/client/index.d.ts.map +1 -1
  40. package/dist/client/index.js +2 -0
  41. package/dist/components/AdminApp.svelte +160 -63
  42. package/dist/components/AdminApp.svelte.d.ts +1 -1
  43. package/dist/components/AdminApp.svelte.d.ts.map +1 -1
  44. package/dist/components/admin/AdminLayout.svelte.d.ts +3 -3
  45. package/dist/components/admin/AssetBrowserModal.svelte +66 -0
  46. package/dist/components/admin/AssetBrowserModal.svelte.d.ts +15 -0
  47. package/dist/components/admin/AssetBrowserModal.svelte.d.ts.map +1 -0
  48. package/dist/components/admin/DocumentEditor.svelte +137 -69
  49. package/dist/components/admin/DocumentEditor.svelte.d.ts +1 -1
  50. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
  51. package/dist/components/admin/DocumentsSkeleton.svelte +40 -0
  52. package/dist/components/admin/DocumentsSkeleton.svelte.d.ts +7 -0
  53. package/dist/components/admin/DocumentsSkeleton.svelte.d.ts.map +1 -0
  54. package/dist/components/admin/MediaBrowser.svelte +1398 -0
  55. package/dist/components/admin/MediaBrowser.svelte.d.ts +23 -0
  56. package/dist/components/admin/MediaBrowser.svelte.d.ts.map +1 -0
  57. package/dist/components/admin/ObjectModal.svelte +3 -4
  58. package/dist/components/admin/ObjectModal.svelte.d.ts +1 -1
  59. package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -1
  60. package/dist/components/admin/SchemaField.svelte +109 -81
  61. package/dist/components/admin/SchemaField.svelte.d.ts +1 -1
  62. package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -1
  63. package/dist/components/admin/fields/ArrayField.svelte +611 -277
  64. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
  65. package/dist/components/admin/fields/DateField.svelte +3 -2
  66. package/dist/components/admin/fields/DateField.svelte.d.ts.map +1 -1
  67. package/dist/components/admin/fields/DateTimeField.svelte +3 -2
  68. package/dist/components/admin/fields/DateTimeField.svelte.d.ts.map +1 -1
  69. package/dist/components/admin/fields/ImageField.svelte +217 -120
  70. package/dist/components/admin/fields/ImageField.svelte.d.ts +1 -0
  71. package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -1
  72. package/dist/components/admin/fields/ReferenceField.svelte +11 -6
  73. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -1
  74. package/dist/components/admin/fields/StringField.svelte +2 -1
  75. package/dist/components/admin/fields/StringField.svelte.d.ts.map +1 -1
  76. package/dist/components/index.d.ts +2 -0
  77. package/dist/components/index.d.ts.map +1 -1
  78. package/dist/components/index.js +2 -0
  79. package/dist/components/layout/OrganizationSwitcher.svelte +109 -45
  80. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts.map +1 -1
  81. package/dist/components/layout/Sidebar.svelte +36 -14
  82. package/dist/components/layout/Sidebar.svelte.d.ts +2 -1
  83. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -1
  84. package/dist/components/layout/sidebar/AppSidebar.svelte +1 -1
  85. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts +8 -1
  86. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts.map +1 -1
  87. package/dist/components/layout/sidebar/NavMain.svelte +1 -1
  88. package/dist/components/layout/sidebar/NavMain.svelte.d.ts +1 -1
  89. package/dist/components/layout/sidebar/NavMain.svelte.d.ts.map +1 -1
  90. package/dist/components/layout/sidebar/NavSecondary.svelte +3 -3
  91. package/dist/components/layout/sidebar/NavUser.svelte +22 -10
  92. package/dist/components/layout/sidebar/NavUser.svelte.d.ts +2 -2
  93. package/dist/components/layout/sidebar/NavUser.svelte.d.ts.map +1 -1
  94. package/dist/db/interfaces/document.d.ts +20 -0
  95. package/dist/db/interfaces/document.d.ts.map +1 -1
  96. package/dist/db/interfaces/index.d.ts +3 -1
  97. package/dist/db/interfaces/index.d.ts.map +1 -1
  98. package/dist/db/interfaces/instance.d.ts +7 -0
  99. package/dist/db/interfaces/instance.d.ts.map +1 -0
  100. package/dist/db/interfaces/instance.js +1 -0
  101. package/dist/db/interfaces/organization.d.ts +1 -0
  102. package/dist/db/interfaces/organization.d.ts.map +1 -1
  103. package/dist/engine.d.ts.map +1 -1
  104. package/dist/engine.js +4 -3
  105. package/dist/field-validation/date-utils.d.ts.map +1 -1
  106. package/dist/field-validation/date-utils.js +12 -11
  107. package/dist/field-validation/rule.d.ts.map +1 -1
  108. package/dist/field-validation/rule.js +11 -10
  109. package/dist/field-validation/utils.d.ts.map +1 -1
  110. package/dist/field-validation/utils.js +16 -15
  111. package/dist/graphql/index.d.ts +23 -0
  112. package/dist/graphql/index.d.ts.map +1 -0
  113. package/dist/graphql/index.js +85 -0
  114. package/dist/graphql/resolvers.d.ts +4 -0
  115. package/dist/graphql/resolvers.d.ts.map +1 -0
  116. package/dist/graphql/resolvers.js +542 -0
  117. package/dist/graphql/schema.d.ts +3 -0
  118. package/dist/graphql/schema.d.ts.map +1 -0
  119. package/dist/graphql/schema.js +356 -0
  120. package/dist/hooks.d.ts +2 -0
  121. package/dist/hooks.d.ts.map +1 -1
  122. package/dist/hooks.js +62 -9
  123. package/dist/lib/api/api-keys.d.ts +37 -0
  124. package/dist/lib/api/api-keys.d.ts.map +1 -0
  125. package/dist/lib/api/api-keys.js +21 -0
  126. package/dist/lib/api/api-keys.js.map +1 -0
  127. package/dist/lib/api/assets.d.ts +75 -0
  128. package/dist/lib/api/assets.d.ts.map +1 -0
  129. package/dist/lib/api/assets.js +74 -0
  130. package/dist/lib/api/assets.js.map +1 -0
  131. package/dist/lib/api/client.d.ts +37 -0
  132. package/dist/lib/api/client.d.ts.map +1 -0
  133. package/dist/lib/api/client.js +132 -0
  134. package/dist/lib/api/client.js.map +1 -0
  135. package/dist/lib/api/documents.d.ts +57 -0
  136. package/dist/lib/api/documents.d.ts.map +1 -0
  137. package/dist/lib/api/documents.js +86 -0
  138. package/dist/lib/api/documents.js.map +1 -0
  139. package/dist/lib/api/index.d.ts +15 -0
  140. package/dist/lib/api/index.d.ts.map +1 -0
  141. package/dist/lib/api/index.js +10 -0
  142. package/dist/lib/api/index.js.map +1 -0
  143. package/dist/lib/api/instance.d.ts +17 -0
  144. package/dist/lib/api/instance.d.ts.map +1 -0
  145. package/dist/lib/api/instance.js +22 -0
  146. package/dist/lib/api/instance.js.map +1 -0
  147. package/dist/lib/api/invitations.d.ts +37 -0
  148. package/dist/lib/api/invitations.d.ts.map +1 -0
  149. package/dist/lib/api/invitations.js +28 -0
  150. package/dist/lib/api/invitations.js.map +1 -0
  151. package/dist/lib/api/organizations.d.ts +108 -0
  152. package/dist/lib/api/organizations.d.ts.map +1 -0
  153. package/dist/lib/api/organizations.js +100 -0
  154. package/dist/lib/api/organizations.js.map +1 -0
  155. package/dist/lib/api/types.d.ts +47 -0
  156. package/dist/lib/api/types.d.ts.map +1 -0
  157. package/dist/lib/api/types.js +2 -0
  158. package/dist/lib/api/types.js.map +1 -0
  159. package/dist/lib/api/user.d.ts +23 -0
  160. package/dist/lib/api/user.d.ts.map +1 -0
  161. package/dist/lib/api/user.js +21 -0
  162. package/dist/lib/api/user.js.map +1 -0
  163. package/dist/lib/auth/auth-errors.d.ts +7 -0
  164. package/dist/lib/auth/auth-errors.d.ts.map +1 -0
  165. package/dist/lib/auth/auth-errors.js +14 -0
  166. package/dist/lib/auth/auth-errors.js.map +1 -0
  167. package/dist/lib/auth/auth-hooks.d.ts +6 -0
  168. package/dist/lib/auth/auth-hooks.d.ts.map +1 -0
  169. package/dist/lib/auth/auth-hooks.js +139 -0
  170. package/dist/lib/auth/auth-hooks.js.map +1 -0
  171. package/dist/lib/auth/provider.d.ts +17 -0
  172. package/dist/lib/auth/provider.d.ts.map +1 -0
  173. package/dist/lib/auth/provider.js +1 -0
  174. package/dist/lib/auth/provider.js.map +1 -0
  175. package/dist/lib/client/index.d.ts +24 -0
  176. package/dist/lib/client/index.d.ts.map +1 -0
  177. package/dist/lib/client/index.js +33 -0
  178. package/dist/lib/client/index.js.map +1 -0
  179. package/dist/lib/components/fields/index.d.ts +9 -0
  180. package/dist/lib/components/fields/index.d.ts.map +1 -0
  181. package/dist/lib/components/fields/index.js +10 -0
  182. package/dist/lib/components/fields/index.js.map +1 -0
  183. package/dist/lib/components/index.d.ts +8 -0
  184. package/dist/lib/components/index.d.ts.map +1 -0
  185. package/dist/lib/components/index.js +14 -0
  186. package/dist/lib/components/index.js.map +1 -0
  187. package/dist/lib/config.d.ts +3 -0
  188. package/dist/lib/config.d.ts.map +1 -0
  189. package/dist/lib/config.js +16 -0
  190. package/dist/lib/config.js.map +1 -0
  191. package/dist/lib/db/adapters/index.d.ts +1 -0
  192. package/dist/lib/db/adapters/index.d.ts.map +1 -0
  193. package/dist/lib/db/adapters/index.js +5 -0
  194. package/dist/lib/db/adapters/index.js.map +1 -0
  195. package/dist/lib/db/index.d.ts +2 -0
  196. package/dist/lib/db/index.d.ts.map +1 -0
  197. package/dist/lib/db/index.js +1 -0
  198. package/dist/lib/db/index.js.map +1 -0
  199. package/dist/lib/db/interfaces/asset.d.ts +73 -0
  200. package/dist/lib/db/interfaces/asset.d.ts.map +1 -0
  201. package/dist/lib/db/interfaces/asset.js +1 -0
  202. package/dist/lib/db/interfaces/asset.js.map +1 -0
  203. package/dist/lib/db/interfaces/document.d.ts +79 -0
  204. package/dist/lib/db/interfaces/document.d.ts.map +1 -0
  205. package/dist/lib/db/interfaces/document.js +1 -0
  206. package/dist/lib/db/interfaces/document.js.map +1 -0
  207. package/dist/lib/db/interfaces/index.d.ts +76 -0
  208. package/dist/lib/db/interfaces/index.d.ts.map +1 -0
  209. package/dist/lib/db/interfaces/index.js +1 -0
  210. package/dist/lib/db/interfaces/index.js.map +1 -0
  211. package/dist/lib/db/interfaces/instance.d.ts +7 -0
  212. package/dist/lib/db/interfaces/instance.d.ts.map +1 -0
  213. package/dist/lib/db/interfaces/instance.js +2 -0
  214. package/dist/lib/db/interfaces/instance.js.map +1 -0
  215. package/dist/lib/db/interfaces/organization.d.ts +28 -0
  216. package/dist/lib/db/interfaces/organization.d.ts.map +1 -0
  217. package/dist/lib/db/interfaces/organization.js +1 -0
  218. package/dist/lib/db/interfaces/organization.js.map +1 -0
  219. package/dist/lib/db/interfaces/schema.d.ts +21 -0
  220. package/dist/lib/db/interfaces/schema.d.ts.map +1 -0
  221. package/dist/lib/db/interfaces/schema.js +1 -0
  222. package/dist/lib/db/interfaces/schema.js.map +1 -0
  223. package/dist/lib/db/interfaces/user.d.ts +17 -0
  224. package/dist/lib/db/interfaces/user.d.ts.map +1 -0
  225. package/dist/lib/db/interfaces/user.js +1 -0
  226. package/dist/lib/db/interfaces/user.js.map +1 -0
  227. package/dist/lib/db/utils/reference-resolver.d.ts +18 -0
  228. package/dist/lib/db/utils/reference-resolver.d.ts.map +1 -0
  229. package/dist/lib/db/utils/reference-resolver.js +81 -0
  230. package/dist/lib/db/utils/reference-resolver.js.map +1 -0
  231. package/dist/lib/define.d.ts +3 -0
  232. package/dist/lib/define.d.ts.map +1 -0
  233. package/dist/lib/define.js +5 -0
  234. package/dist/lib/define.js.map +1 -0
  235. package/dist/lib/email/index.d.ts +2 -0
  236. package/dist/lib/email/index.d.ts.map +1 -0
  237. package/dist/lib/email/index.js +1 -0
  238. package/dist/lib/email/index.js.map +1 -0
  239. package/dist/lib/email/interfaces/email.d.ts +42 -0
  240. package/dist/lib/email/interfaces/email.d.ts.map +1 -0
  241. package/dist/lib/email/interfaces/email.js +1 -0
  242. package/dist/lib/email/interfaces/email.js.map +1 -0
  243. package/dist/lib/engine.d.ts +26 -0
  244. package/dist/lib/engine.d.ts.map +1 -0
  245. package/dist/lib/engine.js +71 -0
  246. package/dist/lib/engine.js.map +1 -0
  247. package/dist/lib/field-validation/date-utils.d.ts +30 -0
  248. package/dist/lib/field-validation/date-utils.d.ts.map +1 -0
  249. package/dist/lib/field-validation/date-utils.js +13 -11
  250. package/dist/lib/field-validation/date-utils.js.map +1 -0
  251. package/dist/lib/field-validation/rule.d.ts +55 -0
  252. package/dist/lib/field-validation/rule.d.ts.map +1 -0
  253. package/dist/lib/field-validation/rule.js +12 -10
  254. package/dist/lib/field-validation/rule.js.map +1 -0
  255. package/dist/lib/field-validation/utils.d.ts +43 -0
  256. package/dist/lib/field-validation/utils.d.ts.map +1 -0
  257. package/dist/lib/field-validation/utils.js +17 -15
  258. package/dist/lib/field-validation/utils.js.map +1 -0
  259. package/dist/lib/graphql/index.d.ts +23 -0
  260. package/dist/lib/graphql/index.d.ts.map +1 -0
  261. package/dist/lib/graphql/index.js +86 -0
  262. package/dist/lib/graphql/index.js.map +1 -0
  263. package/dist/lib/graphql/resolvers.d.ts +4 -0
  264. package/dist/lib/graphql/resolvers.d.ts.map +1 -0
  265. package/dist/lib/graphql/resolvers.js +543 -0
  266. package/dist/lib/graphql/resolvers.js.map +1 -0
  267. package/dist/lib/graphql/schema.d.ts +3 -0
  268. package/dist/lib/graphql/schema.d.ts.map +1 -0
  269. package/dist/lib/graphql/schema.js +357 -0
  270. package/dist/lib/graphql/schema.js.map +1 -0
  271. package/dist/lib/hooks.d.ts +27 -0
  272. package/dist/lib/hooks.d.ts.map +1 -0
  273. package/dist/lib/hooks.js +235 -0
  274. package/dist/lib/hooks.js.map +1 -0
  275. package/dist/lib/index.d.ts +2 -0
  276. package/dist/lib/index.d.ts.map +1 -0
  277. package/dist/lib/index.js +5 -0
  278. package/dist/lib/index.js.map +1 -0
  279. package/dist/lib/is-mobile.svelte.d.ts +5 -0
  280. package/dist/lib/is-mobile.svelte.d.ts.map +1 -0
  281. package/dist/lib/is-mobile.svelte.js +8 -0
  282. package/dist/lib/is-mobile.svelte.js.map +1 -0
  283. package/dist/lib/local-api/auth-helpers.d.ts +65 -0
  284. package/dist/lib/local-api/auth-helpers.d.ts.map +1 -0
  285. package/dist/lib/local-api/auth-helpers.js +103 -0
  286. package/dist/lib/local-api/auth-helpers.js.map +1 -0
  287. package/dist/lib/local-api/collection-api.d.ts +150 -0
  288. package/dist/lib/local-api/collection-api.d.ts.map +1 -0
  289. package/dist/lib/local-api/collection-api.js +311 -0
  290. package/dist/lib/local-api/collection-api.js.map +1 -0
  291. package/dist/lib/local-api/index.d.ts +108 -0
  292. package/dist/lib/local-api/index.d.ts.map +1 -0
  293. package/dist/lib/local-api/index.js +158 -0
  294. package/dist/lib/local-api/index.js.map +1 -0
  295. package/dist/lib/local-api/permissions.d.ts +45 -0
  296. package/dist/lib/local-api/permissions.d.ts.map +1 -0
  297. package/dist/lib/local-api/permissions.js +117 -0
  298. package/dist/lib/local-api/permissions.js.map +1 -0
  299. package/dist/lib/local-api/types.d.ts +65 -0
  300. package/dist/lib/local-api/types.d.ts.map +1 -0
  301. package/dist/lib/local-api/types.js +5 -0
  302. package/dist/lib/local-api/types.js.map +1 -0
  303. package/dist/lib/routes/assets-bulk.d.ts +3 -0
  304. package/dist/lib/routes/assets-bulk.d.ts.map +1 -0
  305. package/dist/lib/routes/assets-bulk.js +49 -0
  306. package/dist/lib/routes/assets-bulk.js.map +1 -0
  307. package/dist/lib/routes/assets-by-id.d.ts +5 -0
  308. package/dist/lib/routes/assets-by-id.d.ts.map +1 -0
  309. package/dist/lib/routes/assets-by-id.js +106 -0
  310. package/dist/lib/routes/assets-by-id.js.map +1 -0
  311. package/dist/lib/routes/assets-cdn.d.ts +3 -0
  312. package/dist/lib/routes/assets-cdn.d.ts.map +1 -0
  313. package/dist/lib/routes/assets-cdn.js +125 -0
  314. package/dist/lib/routes/assets-cdn.js.map +1 -0
  315. package/dist/lib/routes/assets-references-counts.d.ts +7 -0
  316. package/dist/lib/routes/assets-references-counts.d.ts.map +1 -0
  317. package/dist/lib/routes/assets-references-counts.js +32 -0
  318. package/dist/lib/routes/assets-references-counts.js.map +1 -0
  319. package/dist/lib/routes/assets-references.d.ts +7 -0
  320. package/dist/lib/routes/assets-references.d.ts.map +1 -0
  321. package/dist/lib/routes/assets-references.js +35 -0
  322. package/dist/lib/routes/assets-references.js.map +1 -0
  323. package/dist/lib/routes/assets.d.ts +4 -0
  324. package/dist/lib/routes/assets.d.ts.map +1 -0
  325. package/dist/lib/routes/assets.js +121 -0
  326. package/dist/lib/routes/assets.js.map +1 -0
  327. package/dist/lib/routes/documents-by-id.d.ts +5 -0
  328. package/dist/lib/routes/documents-by-id.d.ts.map +1 -0
  329. package/dist/lib/routes/documents-by-id.js +176 -0
  330. package/dist/lib/routes/documents-by-id.js.map +1 -0
  331. package/dist/lib/routes/documents-publish.d.ts +4 -0
  332. package/dist/lib/routes/documents-publish.d.ts.map +1 -0
  333. package/dist/lib/routes/documents-publish.js +138 -0
  334. package/dist/lib/routes/documents-publish.js.map +1 -0
  335. package/dist/lib/routes/documents-query.d.ts +26 -0
  336. package/dist/lib/routes/documents-query.d.ts.map +1 -0
  337. package/dist/lib/routes/documents-query.js +101 -0
  338. package/dist/lib/routes/documents-query.js.map +1 -0
  339. package/dist/lib/routes/documents.d.ts +4 -0
  340. package/dist/lib/routes/documents.d.ts.map +1 -0
  341. package/dist/lib/routes/documents.js +154 -0
  342. package/dist/lib/routes/documents.js.map +1 -0
  343. package/dist/lib/routes/index.d.ts +9 -0
  344. package/dist/lib/routes/index.d.ts.map +1 -0
  345. package/dist/lib/routes/index.js +15 -0
  346. package/dist/lib/routes/index.js.map +1 -0
  347. package/dist/lib/routes/organizations-by-id.d.ts +5 -0
  348. package/dist/lib/routes/organizations-by-id.d.ts.map +1 -0
  349. package/dist/lib/routes/organizations-by-id.js +189 -0
  350. package/dist/lib/routes/organizations-by-id.js.map +1 -0
  351. package/dist/lib/routes/organizations-invitations.d.ts +4 -0
  352. package/dist/lib/routes/organizations-invitations.d.ts.map +1 -0
  353. package/dist/lib/routes/organizations-invitations.js +127 -0
  354. package/dist/lib/routes/organizations-invitations.js.map +1 -0
  355. package/dist/lib/routes/organizations-members.d.ts +5 -0
  356. package/dist/lib/routes/organizations-members.d.ts.map +1 -0
  357. package/dist/lib/routes/organizations-members.js +208 -0
  358. package/dist/lib/routes/organizations-members.js.map +1 -0
  359. package/dist/lib/routes/organizations-switch.d.ts +3 -0
  360. package/dist/lib/routes/organizations-switch.d.ts.map +1 -0
  361. package/dist/lib/routes/organizations-switch.js +55 -0
  362. package/dist/lib/routes/organizations-switch.js.map +1 -0
  363. package/dist/lib/routes/organizations.d.ts +4 -0
  364. package/dist/lib/routes/organizations.d.ts.map +1 -0
  365. package/dist/lib/routes/organizations.js +111 -0
  366. package/dist/lib/routes/organizations.js.map +1 -0
  367. package/dist/lib/routes/schemas-by-type.d.ts +3 -0
  368. package/dist/lib/routes/schemas-by-type.d.ts.map +1 -0
  369. package/dist/lib/routes/schemas-by-type.js +27 -0
  370. package/dist/lib/routes/schemas-by-type.js.map +1 -0
  371. package/dist/lib/routes/schemas.d.ts +3 -0
  372. package/dist/lib/routes/schemas.d.ts.map +1 -0
  373. package/dist/lib/routes/schemas.js +12 -0
  374. package/dist/lib/routes/schemas.js.map +1 -0
  375. package/dist/lib/routes/user-preferences.d.ts +4 -0
  376. package/dist/lib/routes/user-preferences.d.ts.map +1 -0
  377. package/dist/lib/routes/user-preferences.js +79 -0
  378. package/dist/lib/routes/user-preferences.js.map +1 -0
  379. package/dist/lib/routes-exports.d.ts +17 -0
  380. package/dist/lib/routes-exports.d.ts.map +1 -0
  381. package/dist/lib/routes-exports.js +23 -0
  382. package/dist/lib/routes-exports.js.map +1 -0
  383. package/dist/lib/schema/index.d.ts +6 -0
  384. package/dist/lib/schema/index.d.ts.map +1 -0
  385. package/dist/lib/schema/index.js +12 -0
  386. package/dist/lib/schema/index.js.map +1 -0
  387. package/dist/lib/schema-context.svelte.d.ts +10 -0
  388. package/dist/lib/schema-context.svelte.d.ts.map +1 -0
  389. package/dist/lib/schema-context.svelte.js +19 -0
  390. package/dist/lib/schema-context.svelte.js.map +1 -0
  391. package/dist/lib/schema-utils/cleanup.d.ts +21 -0
  392. package/dist/lib/schema-utils/cleanup.d.ts.map +1 -0
  393. package/dist/lib/schema-utils/cleanup.js +81 -0
  394. package/dist/lib/schema-utils/cleanup.js.map +1 -0
  395. package/dist/lib/schema-utils/index.d.ts +4 -0
  396. package/dist/lib/schema-utils/index.d.ts.map +1 -0
  397. package/dist/lib/schema-utils/index.js +5 -0
  398. package/dist/lib/schema-utils/index.js.map +1 -0
  399. package/dist/lib/schema-utils/utils.d.ts +34 -0
  400. package/dist/lib/schema-utils/utils.d.ts.map +1 -0
  401. package/dist/lib/schema-utils/utils.js +59 -0
  402. package/dist/lib/schema-utils/utils.js.map +1 -0
  403. package/dist/lib/schema-utils/validator.d.ts +10 -0
  404. package/dist/lib/schema-utils/validator.d.ts.map +1 -0
  405. package/dist/lib/schema-utils/validator.js +167 -0
  406. package/dist/lib/schema-utils/validator.js.map +1 -0
  407. package/dist/lib/server/index.d.ts +19 -0
  408. package/dist/lib/server/index.d.ts.map +1 -0
  409. package/dist/lib/server/index.js +35 -0
  410. package/dist/lib/server/index.js.map +1 -0
  411. package/dist/lib/services/asset-service.d.ts +86 -0
  412. package/dist/lib/services/asset-service.d.ts.map +1 -0
  413. package/dist/lib/services/asset-service.js +189 -0
  414. package/dist/lib/services/asset-service.js.map +1 -0
  415. package/dist/lib/services/index.d.ts +3 -0
  416. package/dist/lib/services/index.d.ts.map +1 -0
  417. package/dist/lib/services/index.js +5 -0
  418. package/dist/lib/services/index.js.map +1 -0
  419. package/dist/lib/storage/adapters/index.d.ts +2 -0
  420. package/dist/lib/storage/adapters/index.d.ts.map +1 -0
  421. package/dist/lib/storage/adapters/index.js +3 -0
  422. package/dist/lib/storage/adapters/index.js.map +1 -0
  423. package/dist/lib/storage/adapters/local-storage-adapter.d.ts +54 -0
  424. package/dist/lib/storage/adapters/local-storage-adapter.d.ts.map +1 -0
  425. package/dist/lib/storage/adapters/local-storage-adapter.js +189 -0
  426. package/dist/lib/storage/adapters/local-storage-adapter.js.map +1 -0
  427. package/dist/lib/storage/index.d.ts +3 -0
  428. package/dist/lib/storage/index.d.ts.map +1 -0
  429. package/dist/lib/storage/index.js +7 -0
  430. package/dist/lib/storage/index.js.map +1 -0
  431. package/dist/lib/storage/interfaces/index.d.ts +2 -0
  432. package/dist/lib/storage/interfaces/index.d.ts.map +1 -0
  433. package/dist/lib/storage/interfaces/index.js +1 -0
  434. package/dist/lib/storage/interfaces/index.js.map +1 -0
  435. package/dist/lib/storage/interfaces/storage.d.ts +91 -0
  436. package/dist/lib/storage/interfaces/storage.d.ts.map +1 -0
  437. package/dist/lib/storage/interfaces/storage.js +1 -0
  438. package/dist/lib/storage/interfaces/storage.js.map +1 -0
  439. package/dist/lib/storage/providers/storage.d.ts +43 -0
  440. package/dist/lib/storage/providers/storage.d.ts.map +1 -0
  441. package/dist/lib/storage/providers/storage.js +65 -0
  442. package/dist/lib/storage/providers/storage.js.map +1 -0
  443. package/dist/lib/types/asset.d.ts +73 -0
  444. package/dist/lib/types/asset.d.ts.map +1 -0
  445. package/dist/lib/types/asset.js +1 -0
  446. package/dist/lib/types/asset.js.map +1 -0
  447. package/dist/lib/types/auth.d.ts +62 -0
  448. package/dist/lib/types/auth.d.ts.map +1 -0
  449. package/dist/lib/types/auth.js +7 -5
  450. package/dist/lib/types/auth.js.map +1 -0
  451. package/dist/lib/types/config.d.ts +77 -0
  452. package/dist/lib/types/config.d.ts.map +1 -0
  453. package/dist/lib/types/config.js +1 -0
  454. package/dist/lib/types/config.js.map +1 -0
  455. package/dist/lib/types/document.d.ts +35 -0
  456. package/dist/lib/types/document.d.ts.map +1 -0
  457. package/dist/lib/types/document.js +1 -0
  458. package/dist/lib/types/document.js.map +1 -0
  459. package/dist/lib/types/filters.d.ts +186 -0
  460. package/dist/lib/types/filters.d.ts.map +1 -0
  461. package/dist/lib/types/filters.js +1 -0
  462. package/dist/lib/types/filters.js.map +1 -0
  463. package/dist/lib/types/index.d.ts +11 -0
  464. package/dist/lib/types/index.d.ts.map +1 -0
  465. package/dist/lib/types/index.js +2 -0
  466. package/dist/lib/types/index.js.map +1 -0
  467. package/dist/lib/types/instance.d.ts +5 -0
  468. package/dist/lib/types/instance.d.ts.map +1 -0
  469. package/dist/lib/types/instance.js +3 -0
  470. package/dist/lib/types/instance.js.map +1 -0
  471. package/dist/lib/types/organization.d.ts +108 -0
  472. package/dist/lib/types/organization.d.ts.map +1 -0
  473. package/dist/lib/types/organization.js +1 -0
  474. package/dist/lib/types/organization.js.map +1 -0
  475. package/dist/lib/types/schemas.d.ts +179 -0
  476. package/dist/lib/types/schemas.d.ts.map +1 -0
  477. package/dist/lib/types/schemas.js +1 -0
  478. package/dist/lib/types/schemas.js.map +1 -0
  479. package/dist/lib/types/sidebar.d.ts +34 -0
  480. package/dist/lib/types/sidebar.d.ts.map +1 -0
  481. package/dist/lib/types/sidebar.js +1 -0
  482. package/dist/lib/types/sidebar.js.map +1 -0
  483. package/dist/lib/types/user.d.ts +14 -0
  484. package/dist/lib/types/user.d.ts.map +1 -0
  485. package/dist/lib/types/user.js +1 -0
  486. package/dist/lib/types/user.js.map +1 -0
  487. package/dist/lib/utils/asset-actions.d.ts +9 -0
  488. package/dist/lib/utils/asset-actions.d.ts.map +1 -0
  489. package/dist/lib/utils/asset-actions.js +28 -0
  490. package/dist/lib/utils/asset-actions.js.map +1 -0
  491. package/dist/lib/utils/content-hash.d.ts +22 -0
  492. package/dist/lib/utils/content-hash.d.ts.map +1 -0
  493. package/dist/lib/utils/content-hash.js +68 -0
  494. package/dist/lib/utils/content-hash.js.map +1 -0
  495. package/dist/lib/utils/default-orderings.d.ts +10 -0
  496. package/dist/lib/utils/default-orderings.d.ts.map +1 -0
  497. package/dist/lib/utils/default-orderings.js +64 -0
  498. package/dist/lib/utils/default-orderings.js.map +1 -0
  499. package/dist/lib/utils/element-events.d.ts +15 -0
  500. package/dist/lib/utils/element-events.d.ts.map +1 -0
  501. package/dist/lib/utils/element-events.js +17 -0
  502. package/dist/lib/utils/element-events.js.map +1 -0
  503. package/dist/lib/utils/field-defaults.d.ts +8 -0
  504. package/dist/lib/utils/field-defaults.d.ts.map +1 -0
  505. package/dist/lib/utils/field-defaults.js +21 -0
  506. package/dist/lib/utils/field-defaults.js.map +1 -0
  507. package/dist/lib/utils/image-url.d.ts +88 -0
  508. package/dist/lib/utils/image-url.d.ts.map +1 -0
  509. package/dist/lib/utils/image-url.js +167 -0
  510. package/dist/lib/utils/image-url.js.map +1 -0
  511. package/dist/lib/utils/index.d.ts +8 -0
  512. package/dist/lib/utils/index.d.ts.map +1 -0
  513. package/dist/lib/utils/index.js +13 -0
  514. package/dist/lib/utils/index.js.map +1 -0
  515. package/dist/lib/utils/initial-value-helpers.d.ts +50 -0
  516. package/dist/lib/utils/initial-value-helpers.d.ts.map +1 -0
  517. package/dist/lib/utils/initial-value-helpers.js +71 -0
  518. package/dist/lib/utils/initial-value-helpers.js.map +1 -0
  519. package/dist/lib/utils/logger.d.ts +9 -0
  520. package/dist/lib/utils/logger.d.ts.map +1 -0
  521. package/dist/lib/utils/logger.js +30 -0
  522. package/dist/lib/utils/logger.js.map +1 -0
  523. package/dist/lib/utils/slug.d.ts +13 -0
  524. package/dist/lib/utils/slug.d.ts.map +1 -0
  525. package/dist/lib/utils/slug.js +31 -0
  526. package/dist/lib/utils/slug.js.map +1 -0
  527. package/dist/lib/utils.d.ts +13 -0
  528. package/dist/lib/utils.d.ts.map +1 -0
  529. package/dist/lib/utils.js +6 -0
  530. package/dist/lib/utils.js.map +1 -0
  531. package/dist/local-api/index.d.ts.map +1 -1
  532. package/dist/local-api/permissions.d.ts.map +1 -1
  533. package/dist/local-api/permissions.js +3 -4
  534. package/dist/routes/assets-bulk.d.ts +3 -0
  535. package/dist/routes/assets-bulk.d.ts.map +1 -0
  536. package/dist/routes/assets-bulk.js +48 -0
  537. package/dist/routes/assets-by-id.d.ts.map +1 -1
  538. package/dist/routes/assets-by-id.js +22 -55
  539. package/dist/routes/assets-cdn.d.ts.map +1 -1
  540. package/dist/routes/assets-cdn.js +12 -50
  541. package/dist/routes/assets-references-counts.d.ts +7 -0
  542. package/dist/routes/assets-references-counts.d.ts.map +1 -0
  543. package/dist/routes/assets-references-counts.js +31 -0
  544. package/dist/routes/assets-references.d.ts +7 -0
  545. package/dist/routes/assets-references.d.ts.map +1 -0
  546. package/dist/routes/assets-references.js +34 -0
  547. package/dist/routes/assets.d.ts.map +1 -1
  548. package/dist/routes/assets.js +27 -6
  549. package/dist/routes/documents-by-id.d.ts.map +1 -1
  550. package/dist/routes/documents-by-id.js +4 -3
  551. package/dist/routes/documents-publish.d.ts.map +1 -1
  552. package/dist/routes/documents-publish.js +3 -2
  553. package/dist/routes/documents-query.d.ts.map +1 -1
  554. package/dist/routes/documents-query.js +2 -1
  555. package/dist/routes/documents.d.ts.map +1 -1
  556. package/dist/routes/documents.js +3 -2
  557. package/dist/routes/organizations-by-id.d.ts.map +1 -1
  558. package/dist/routes/organizations-by-id.js +4 -3
  559. package/dist/routes/organizations-invitations.d.ts.map +1 -1
  560. package/dist/routes/organizations-invitations.js +5 -4
  561. package/dist/routes/organizations-members.d.ts.map +1 -1
  562. package/dist/routes/organizations-members.js +7 -6
  563. package/dist/routes/organizations-switch.d.ts.map +1 -1
  564. package/dist/routes/organizations-switch.js +2 -1
  565. package/dist/routes/organizations.d.ts.map +1 -1
  566. package/dist/routes/organizations.js +3 -2
  567. package/dist/routes/schemas-by-type.d.ts.map +1 -1
  568. package/dist/routes/schemas-by-type.js +3 -2
  569. package/dist/routes/user-preferences.d.ts.map +1 -1
  570. package/dist/routes/user-preferences.js +3 -2
  571. package/dist/routes-exports.d.ts +3 -0
  572. package/dist/routes-exports.d.ts.map +1 -1
  573. package/dist/routes-exports.js +3 -0
  574. package/dist/schema/index.d.ts +6 -0
  575. package/dist/schema/index.d.ts.map +1 -0
  576. package/dist/schema/index.js +11 -0
  577. package/dist/schema-utils/validator.d.ts.map +1 -1
  578. package/dist/schema-utils/validator.js +4 -3
  579. package/dist/server/index.d.ts +2 -0
  580. package/dist/server/index.d.ts.map +1 -1
  581. package/dist/server/index.js +4 -0
  582. package/dist/services/asset-service.d.ts.map +1 -1
  583. package/dist/services/asset-service.js +8 -7
  584. package/dist/storage/adapters/local-storage-adapter.d.ts.map +1 -1
  585. package/dist/storage/adapters/local-storage-adapter.js +5 -4
  586. package/dist/types/auth.d.ts +13 -1
  587. package/dist/types/auth.d.ts.map +1 -1
  588. package/dist/types/auth.js +6 -5
  589. package/dist/types/config.d.ts +14 -1
  590. package/dist/types/config.d.ts.map +1 -1
  591. package/dist/types/document.d.ts +1 -1
  592. package/dist/types/document.d.ts.map +1 -1
  593. package/dist/types/index.d.ts +1 -0
  594. package/dist/types/index.d.ts.map +1 -1
  595. package/dist/types/index.js +1 -0
  596. package/dist/types/instance.d.ts +5 -0
  597. package/dist/types/instance.d.ts.map +1 -0
  598. package/dist/types/instance.js +2 -0
  599. package/dist/types/schemas.d.ts +1 -1
  600. package/dist/types/schemas.d.ts.map +1 -1
  601. package/dist/types/sidebar.d.ts +1 -0
  602. package/dist/types/sidebar.d.ts.map +1 -1
  603. package/dist/utils/asset-actions.d.ts +9 -0
  604. package/dist/utils/asset-actions.d.ts.map +1 -0
  605. package/dist/utils/asset-actions.js +27 -0
  606. package/dist/utils/element-events.d.ts +15 -0
  607. package/dist/utils/element-events.d.ts.map +1 -0
  608. package/dist/utils/element-events.js +16 -0
  609. package/dist/utils/image-url.d.ts.map +1 -1
  610. package/dist/utils/image-url.js +10 -9
  611. package/dist/utils/index.d.ts +1 -0
  612. package/dist/utils/index.d.ts.map +1 -1
  613. package/dist/utils/index.js +2 -0
  614. package/dist/utils/logger.d.ts +9 -0
  615. package/dist/utils/logger.d.ts.map +1 -0
  616. package/dist/utils/logger.js +29 -0
  617. package/package.json +69 -36
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,yEAAyE;AAEzE,0CAA0C;AAC1C,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { MediaQuery } from 'svelte/reactivity';
2
+ export declare class IsMobile extends MediaQuery {
3
+ constructor(breakpoint?: number);
4
+ }
5
+ //# sourceMappingURL=is-mobile.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-mobile.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/is-mobile.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI/C,qBAAa,QAAS,SAAQ,UAAU;gBAC3B,UAAU,GAAE,MAAkC;CAG1D"}
@@ -0,0 +1,8 @@
1
+ import { MediaQuery } from 'svelte/reactivity';
2
+ const DEFAULT_MOBILE_BREAKPOINT = 768;
3
+ export class IsMobile extends MediaQuery {
4
+ constructor(breakpoint = DEFAULT_MOBILE_BREAKPOINT) {
5
+ super(`max-width: ${breakpoint - 1}px`);
6
+ }
7
+ }
8
+ //# sourceMappingURL=is-mobile.svelte.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-mobile.svelte.js","sourceRoot":"","sources":["../../src/lib/is-mobile.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAEtC,MAAM,OAAO,QAAS,SAAQ,UAAU;IACvC,YAAY,aAAqB,yBAAyB;QACzD,KAAK,CAAC,cAAc,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACD"}
@@ -0,0 +1,65 @@
1
+ import type { Auth } from '../types/auth.js';
2
+ import type { LocalAPIContext } from './types.js';
3
+ /**
4
+ * Convert SvelteKit locals.auth to LocalAPIContext
5
+ *
6
+ * This helper bridges the gap between the authentication system
7
+ * (handled in the app layer and enriched by handleAuthHook) and
8
+ * the LocalAPI's context-based approach.
9
+ *
10
+ * Preserves the full Auth object in context.auth so custom permission
11
+ * logic can access any custom fields added via module augmentation.
12
+ *
13
+ * @param auth - Auth object from locals.auth (already validated by handleAuthHook)
14
+ * @returns LocalAPIContext for use with LocalAPI operations
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // In a SvelteKit route handler
19
+ * import { authToContext } from '@aphexcms/cms-core/local-api';
20
+ *
21
+ * export const GET: RequestHandler = async ({ locals }) => {
22
+ * const api = locals.aphexCMS.localAPI;
23
+ * const context = authToContext(locals.auth);
24
+ *
25
+ * const pages = await api.collections.page.find(context, {
26
+ * where: { status: { equals: 'published' } }
27
+ * });
28
+ *
29
+ * return json({ data: pages });
30
+ * };
31
+ * ```
32
+ */
33
+ export declare function authToContext(auth: Auth | null | undefined): LocalAPIContext;
34
+ /**
35
+ * Check if auth exists and convert to context
36
+ * Alias for authToContext - more semantic in some contexts
37
+ *
38
+ * @param auth - Auth object from locals.auth
39
+ * @returns LocalAPIContext
40
+ * @throws Error if auth is missing or invalid
41
+ */
42
+ export declare function requireAuth(auth: Auth | null | undefined): LocalAPIContext;
43
+ /**
44
+ * Create a system context for operations that bypass normal permissions
45
+ * Use this for seed scripts, cron jobs, migrations, and other system-level operations
46
+ *
47
+ * @param organizationId - Organization ID for the operation
48
+ * @returns LocalAPIContext with overrideAccess: true
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * // In a seed script
53
+ * import { systemContext } from '@aphexcms/cms-core/local-api';
54
+ *
55
+ * const api = getLocalAPI();
56
+ * const context = systemContext('org_123');
57
+ *
58
+ * await api.collections.page.create(context, {
59
+ * data: { title: 'Home', slug: 'home' },
60
+ * publish: true
61
+ * });
62
+ * ```
63
+ */
64
+ export declare function systemContext(organizationId: string): LocalAPIContext;
65
+ //# sourceMappingURL=auth-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-helpers.d.ts","sourceRoot":"","sources":["../../../src/lib/local-api/auth-helpers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,CAiC5E;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,CAE1E;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,eAAe,CAKrE"}
@@ -0,0 +1,103 @@
1
+ // local-api/auth-helpers.ts
2
+ //
3
+ // Helper utilities to convert between Auth types and LocalAPIContext
4
+ /**
5
+ * Convert SvelteKit locals.auth to LocalAPIContext
6
+ *
7
+ * This helper bridges the gap between the authentication system
8
+ * (handled in the app layer and enriched by handleAuthHook) and
9
+ * the LocalAPI's context-based approach.
10
+ *
11
+ * Preserves the full Auth object in context.auth so custom permission
12
+ * logic can access any custom fields added via module augmentation.
13
+ *
14
+ * @param auth - Auth object from locals.auth (already validated by handleAuthHook)
15
+ * @returns LocalAPIContext for use with LocalAPI operations
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * // In a SvelteKit route handler
20
+ * import { authToContext } from '@aphexcms/cms-core/local-api';
21
+ *
22
+ * export const GET: RequestHandler = async ({ locals }) => {
23
+ * const api = locals.aphexCMS.localAPI;
24
+ * const context = authToContext(locals.auth);
25
+ *
26
+ * const pages = await api.collections.page.find(context, {
27
+ * where: { status: { equals: 'published' } }
28
+ * });
29
+ *
30
+ * return json({ data: pages });
31
+ * };
32
+ * ```
33
+ */
34
+ export function authToContext(auth) {
35
+ if (!auth) {
36
+ throw new Error('Authentication required');
37
+ }
38
+ // For session auth, extract user and organization info
39
+ if (auth.type === 'session') {
40
+ return {
41
+ organizationId: auth.organizationId,
42
+ user: auth.user,
43
+ auth: auth // Preserve full auth for custom permission logic
44
+ };
45
+ }
46
+ // For API key auth, create a synthetic user for permission checking
47
+ // API keys don't have traditional user accounts, but we need user info
48
+ // for the permission system to work correctly
49
+ if (auth.type === 'api_key') {
50
+ return {
51
+ organizationId: auth.organizationId,
52
+ user: {
53
+ id: `apikey:${auth.keyId}`,
54
+ email: `apikey-${auth.name}@system`,
55
+ name: auth.name,
56
+ // Map API key permissions to user roles for permission checking
57
+ role: auth.permissions.includes('write') ? 'editor' : 'viewer'
58
+ },
59
+ auth: auth // Preserve full auth for custom permission logic
60
+ };
61
+ }
62
+ // This should never happen with proper typing, but just in case
63
+ throw new Error('Unknown auth type');
64
+ }
65
+ /**
66
+ * Check if auth exists and convert to context
67
+ * Alias for authToContext - more semantic in some contexts
68
+ *
69
+ * @param auth - Auth object from locals.auth
70
+ * @returns LocalAPIContext
71
+ * @throws Error if auth is missing or invalid
72
+ */
73
+ export function requireAuth(auth) {
74
+ return authToContext(auth);
75
+ }
76
+ /**
77
+ * Create a system context for operations that bypass normal permissions
78
+ * Use this for seed scripts, cron jobs, migrations, and other system-level operations
79
+ *
80
+ * @param organizationId - Organization ID for the operation
81
+ * @returns LocalAPIContext with overrideAccess: true
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * // In a seed script
86
+ * import { systemContext } from '@aphexcms/cms-core/local-api';
87
+ *
88
+ * const api = getLocalAPI();
89
+ * const context = systemContext('org_123');
90
+ *
91
+ * await api.collections.page.create(context, {
92
+ * data: { title: 'Home', slug: 'home' },
93
+ * publish: true
94
+ * });
95
+ * ```
96
+ */
97
+ export function systemContext(organizationId) {
98
+ return {
99
+ organizationId,
100
+ overrideAccess: true
101
+ };
102
+ }
103
+ //# sourceMappingURL=auth-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-helpers.js","sourceRoot":"","sources":["../../../src/lib/local-api/auth-helpers.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,EAAE;AACF,qEAAqE;AAKrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,aAAa,CAAC,IAA6B;IAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC5C,CAAC;IAED,uDAAuD;IACvD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO;YACN,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,iDAAiD;SAC5D,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,uEAAuE;IACvE,8CAA8C;IAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO;YACN,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,IAAI,EAAE;gBACL,EAAE,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;gBAC1B,KAAK,EAAE,UAAU,IAAI,CAAC,IAAI,SAAS;gBACnC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,gEAAgE;gBAChE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;aAC9D;YACD,IAAI,EAAE,IAAI,CAAC,iDAAiD;SAC5D,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,IAA6B;IACxD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,aAAa,CAAC,cAAsB;IACnD,OAAO;QACN,cAAc;QACd,cAAc,EAAE,IAAI;KACpB,CAAC;AACH,CAAC"}
@@ -0,0 +1,150 @@
1
+ import type { DatabaseAdapter } from '../db/index.js';
2
+ import type { Where, WhereTyped, FindOptions, FindResult } from '../types/filters.js';
3
+ import type { Document } from '../types/document.js';
4
+ import type { LocalAPIContext } from './types.js';
5
+ import type { SchemaType } from '../types/schemas.js';
6
+ import { PermissionChecker } from './permissions.js';
7
+ import { type DocumentValidationResult } from '../field-validation/utils.js';
8
+ /**
9
+ * Result from create/update operations that includes validation
10
+ */
11
+ export interface DocumentResult<T> {
12
+ document: T;
13
+ validation: DocumentValidationResult;
14
+ }
15
+ /**
16
+ * Collection API - provides type-safe operations for a single collection
17
+ * Generic type T represents the document type for this collection
18
+ */
19
+ export declare class CollectionAPI<T = Document> {
20
+ private collectionName;
21
+ private databaseAdapter;
22
+ private _schema;
23
+ private permissions;
24
+ constructor(collectionName: string, databaseAdapter: DatabaseAdapter, _schema: SchemaType, permissions: PermissionChecker);
25
+ /**
26
+ * Get the schema for this collection
27
+ */
28
+ get schema(): SchemaType;
29
+ /**
30
+ * Find multiple documents with advanced filtering and pagination
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const result = await api.collections.pages.find(
35
+ * { organizationId: 'org_123', user },
36
+ * {
37
+ * where: {
38
+ * status: { equals: 'published' },
39
+ * 'author.name': { contains: 'John' }
40
+ * },
41
+ * limit: 20,
42
+ * sort: '-publishedAt'
43
+ * }
44
+ * );
45
+ * ```
46
+ */
47
+ find(context: LocalAPIContext, options?: FindOptions<T>): Promise<FindResult<T>>;
48
+ /**
49
+ * Find a single document by ID
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * const page = await api.collections.pages.findByID(
54
+ * { organizationId: 'org_123', user },
55
+ * 'doc_123',
56
+ * { depth: 1, perspective: 'published' }
57
+ * );
58
+ * ```
59
+ */
60
+ findByID(context: LocalAPIContext, id: string, options?: Partial<FindOptions<T>>): Promise<T | null>;
61
+ /**
62
+ * Count documents matching a where clause
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * const count = await api.collections.pages.count(
67
+ * { organizationId: 'org_123', user },
68
+ * { where: { status: { equals: 'published' } } }
69
+ * );
70
+ * ```
71
+ */
72
+ count(context: LocalAPIContext, options?: {
73
+ where?: WhereTyped<T> | Where;
74
+ }): Promise<number>;
75
+ /**
76
+ * Create a new document
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * const result = await api.collections.pages.create(
81
+ * { organizationId: 'org_123', user },
82
+ * {
83
+ * title: 'New Page',
84
+ * slug: 'new-page',
85
+ * content: []
86
+ * }
87
+ * );
88
+ * // result.document - the created document
89
+ * // result.validation - validation results
90
+ * ```
91
+ */
92
+ create(context: LocalAPIContext, data: Omit<T, 'id' | '_meta'>, options?: {
93
+ publish?: boolean;
94
+ }): Promise<DocumentResult<T>>;
95
+ /**
96
+ * Update an existing document
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * const result = await api.collections.pages.update(
101
+ * { organizationId: 'org_123', user },
102
+ * 'doc_123',
103
+ * { title: 'Updated Title' },
104
+ * { publish: true }
105
+ * );
106
+ * // result.document - the updated document
107
+ * // result.validation - validation results
108
+ * ```
109
+ */
110
+ update(context: LocalAPIContext, id: string, data: Partial<Omit<T, 'id' | '_meta'>>, options?: {
111
+ publish?: boolean;
112
+ }): Promise<DocumentResult<T> | null>;
113
+ /**
114
+ * Delete a document
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * const deleted = await api.collections.pages.delete(
119
+ * { organizationId: 'org_123', user },
120
+ * 'doc_123'
121
+ * );
122
+ * ```
123
+ */
124
+ delete(context: LocalAPIContext, id: string): Promise<boolean>;
125
+ /**
126
+ * Publish a document
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * const published = await api.collections.pages.publish(
131
+ * { organizationId: 'org_123', user },
132
+ * 'doc_123'
133
+ * );
134
+ * ```
135
+ */
136
+ publish(context: LocalAPIContext, id: string): Promise<T | null>;
137
+ /**
138
+ * Unpublish a document
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * const unpublished = await api.collections.pages.unpublish(
143
+ * { organizationId: 'org_123', user },
144
+ * 'doc_123'
145
+ * );
146
+ * ```
147
+ */
148
+ unpublish(context: LocalAPIContext, id: string): Promise<T | null>;
149
+ }
150
+ //# sourceMappingURL=collection-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-api.d.ts","sourceRoot":"","sources":["../../../src/lib/local-api/collection-api.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAwB,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAEhG;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC;IACZ,UAAU,EAAE,wBAAwB,CAAC;CACrC;AA4BD;;;GAGG;AACH,qBAAa,aAAa,CAAC,CAAC,GAAG,QAAQ;IAErC,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;gBAHX,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,iBAAiB;IAMvC;;OAEG;IACH,IAAI,MAAM,IAAI,UAAU,CAEvB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACG,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,GAAE,WAAW,CAAC,CAAC,CAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAqB1F;;;;;;;;;;;OAWG;IACG,QAAQ,CACb,OAAO,EAAE,eAAe,EACxB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAmBpB;;;;;;;;;;OAUG;IACG,KAAK,CACV,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;KAAE,GACzC,OAAO,CAAC,MAAM,CAAC;IAWlB;;;;;;;;;;;;;;;;OAgBG;IACG,MAAM,CACX,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAC7B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IA4C7B;;;;;;;;;;;;;;OAcG;IACG,MAAM,CACX,OAAO,EAAE,eAAe,EACxB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,EACtC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAC7B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAkEpC;;;;;;;;;;OAUG;IACG,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOpE;;;;;;;;;;OAUG;IACG,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAgCtE;;;;;;;;;;OAUG;IACG,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CAUxE"}
@@ -0,0 +1,311 @@
1
+ // local-api/collection-api.ts
2
+ //
3
+ // Collection API - provides type-safe CRUD operations for a single collection
4
+ import { validateDocumentData } from '../field-validation/utils.js';
5
+ /**
6
+ * Transform a raw database document into a typed document with data extracted
7
+ * based on perspective (draft or published)
8
+ */
9
+ function transformDocument(doc, perspective = 'draft') {
10
+ const data = perspective === 'draft' ? doc.draftData : doc.publishedData;
11
+ // Merge document metadata with the content data
12
+ return {
13
+ id: doc.id,
14
+ ...data,
15
+ // Include metadata fields
16
+ _meta: {
17
+ type: doc.type,
18
+ status: doc.status,
19
+ organizationId: doc.organizationId,
20
+ createdAt: doc.createdAt,
21
+ updatedAt: doc.updatedAt,
22
+ createdBy: doc.createdBy,
23
+ updatedBy: doc.updatedBy,
24
+ publishedAt: doc.publishedAt,
25
+ publishedHash: doc.publishedHash
26
+ }
27
+ };
28
+ }
29
+ /**
30
+ * Collection API - provides type-safe operations for a single collection
31
+ * Generic type T represents the document type for this collection
32
+ */
33
+ export class CollectionAPI {
34
+ collectionName;
35
+ databaseAdapter;
36
+ _schema;
37
+ permissions;
38
+ constructor(collectionName, databaseAdapter, _schema, permissions) {
39
+ this.collectionName = collectionName;
40
+ this.databaseAdapter = databaseAdapter;
41
+ this._schema = _schema;
42
+ this.permissions = permissions;
43
+ // Validate collection exists
44
+ this.permissions.validateCollection(collectionName);
45
+ }
46
+ /**
47
+ * Get the schema for this collection
48
+ */
49
+ get schema() {
50
+ return this._schema;
51
+ }
52
+ /**
53
+ * Find multiple documents with advanced filtering and pagination
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * const result = await api.collections.pages.find(
58
+ * { organizationId: 'org_123', user },
59
+ * {
60
+ * where: {
61
+ * status: { equals: 'published' },
62
+ * 'author.name': { contains: 'John' }
63
+ * },
64
+ * limit: 20,
65
+ * sort: '-publishedAt'
66
+ * }
67
+ * );
68
+ * ```
69
+ */
70
+ async find(context, options = {}) {
71
+ // Permission check (unless overrideAccess)
72
+ await this.permissions.canRead(context, this.collectionName);
73
+ // Call adapter's advanced find method
74
+ const result = await this.databaseAdapter.findManyDocAdvanced(context.organizationId, this.collectionName, options);
75
+ // Transform documents to extract data based on perspective
76
+ const perspective = options.perspective || 'draft';
77
+ const transformedDocs = result.docs.map((doc) => transformDocument(doc, perspective));
78
+ return {
79
+ ...result,
80
+ docs: transformedDocs
81
+ };
82
+ }
83
+ /**
84
+ * Find a single document by ID
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * const page = await api.collections.pages.findByID(
89
+ * { organizationId: 'org_123', user },
90
+ * 'doc_123',
91
+ * { depth: 1, perspective: 'published' }
92
+ * );
93
+ * ```
94
+ */
95
+ async findByID(context, id, options) {
96
+ // Permission check (unless overrideAccess)
97
+ await this.permissions.canRead(context, this.collectionName);
98
+ const result = await this.databaseAdapter.findByDocIdAdvanced(context.organizationId, id, options);
99
+ if (!result) {
100
+ return null;
101
+ }
102
+ // Transform document to extract data based on perspective
103
+ const perspective = options?.perspective || 'draft';
104
+ return transformDocument(result, perspective);
105
+ }
106
+ /**
107
+ * Count documents matching a where clause
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * const count = await api.collections.pages.count(
112
+ * { organizationId: 'org_123', user },
113
+ * { where: { status: { equals: 'published' } } }
114
+ * );
115
+ * ```
116
+ */
117
+ async count(context, options) {
118
+ // Permission check (unless overrideAccess)
119
+ await this.permissions.canRead(context, this.collectionName);
120
+ return this.databaseAdapter.countDocuments(context.organizationId, this.collectionName, options?.where);
121
+ }
122
+ /**
123
+ * Create a new document
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * const result = await api.collections.pages.create(
128
+ * { organizationId: 'org_123', user },
129
+ * {
130
+ * title: 'New Page',
131
+ * slug: 'new-page',
132
+ * content: []
133
+ * }
134
+ * );
135
+ * // result.document - the created document
136
+ * // result.validation - validation results
137
+ * ```
138
+ */
139
+ async create(context, data, options) {
140
+ // Permission check (unless overrideAccess)
141
+ await this.permissions.canWrite(context, this.collectionName);
142
+ // Validate and normalize data (dates converted to ISO)
143
+ const validationResult = await validateDocumentData(this._schema, data, data);
144
+ if (options?.publish) {
145
+ await this.permissions.canPublish(context, this.collectionName);
146
+ // Block publish if validation fails
147
+ if (!validationResult.isValid) {
148
+ const errorMessage = validationResult.errors
149
+ .map((e) => `${e.field}: ${e.errors.join(', ')}`)
150
+ .join('; ');
151
+ throw new Error(`Cannot publish: validation errors - ${errorMessage}`);
152
+ }
153
+ }
154
+ // Create document with normalized data (dates in ISO format)
155
+ const document = await this.databaseAdapter.createDocument({
156
+ organizationId: context.organizationId,
157
+ type: this.collectionName,
158
+ draftData: validationResult.normalizedData,
159
+ createdBy: context.user?.id
160
+ });
161
+ // Publish immediately if requested (validation already done above)
162
+ if (options?.publish) {
163
+ const published = await this.databaseAdapter.publishDoc(context.organizationId, document.id);
164
+ if (published) {
165
+ return {
166
+ document: transformDocument(published, 'published'),
167
+ validation: validationResult
168
+ };
169
+ }
170
+ }
171
+ return {
172
+ document: transformDocument(document, 'draft'),
173
+ validation: validationResult
174
+ };
175
+ }
176
+ /**
177
+ * Update an existing document
178
+ *
179
+ * @example
180
+ * ```typescript
181
+ * const result = await api.collections.pages.update(
182
+ * { organizationId: 'org_123', user },
183
+ * 'doc_123',
184
+ * { title: 'Updated Title' },
185
+ * { publish: true }
186
+ * );
187
+ * // result.document - the updated document
188
+ * // result.validation - validation results
189
+ * ```
190
+ */
191
+ async update(context, id, data, options) {
192
+ // Permission check (unless overrideAccess)
193
+ await this.permissions.canWrite(context, this.collectionName);
194
+ // Get existing document to merge with updates
195
+ const existingDoc = await this.databaseAdapter.findByDocIdAdvanced(context.organizationId, id);
196
+ if (!existingDoc) {
197
+ return null;
198
+ }
199
+ // Merge existing data with updates, but only keep fields defined in schema
200
+ // This prevents orphaned fields from persisting when schema changes
201
+ const schemaFieldNames = new Set(this._schema.fields.map((f) => f.name));
202
+ const cleanedExisting = {};
203
+ // Only copy fields from existing doc that are still in the schema
204
+ for (const [key, value] of Object.entries(existingDoc.draftData || {})) {
205
+ if (schemaFieldNames.has(key)) {
206
+ cleanedExisting[key] = value;
207
+ }
208
+ }
209
+ // Merge cleaned existing data with new updates
210
+ const mergedData = { ...cleanedExisting, ...data };
211
+ // Validate and normalize the merged data
212
+ const validationResult = await validateDocumentData(this._schema, mergedData, mergedData);
213
+ // Update draft with normalized data (dates in ISO format)
214
+ const document = await this.databaseAdapter.updateDocDraft(context.organizationId, id, validationResult.normalizedData, context.user?.id);
215
+ if (!document) {
216
+ return null;
217
+ }
218
+ if (options?.publish) {
219
+ await this.permissions.canPublish(context, this.collectionName);
220
+ // Block publish if validation fails
221
+ if (!validationResult.isValid) {
222
+ const errorMessage = validationResult.errors
223
+ .map((e) => `${e.field}: ${e.errors.join(', ')}`)
224
+ .join('; ');
225
+ throw new Error(`Cannot publish: validation errors - ${errorMessage}`);
226
+ }
227
+ const published = await this.databaseAdapter.publishDoc(context.organizationId, document.id);
228
+ if (published) {
229
+ return {
230
+ document: transformDocument(published, 'published'),
231
+ validation: validationResult
232
+ };
233
+ }
234
+ }
235
+ return {
236
+ document: transformDocument(document, 'draft'),
237
+ validation: validationResult
238
+ };
239
+ }
240
+ /**
241
+ * Delete a document
242
+ *
243
+ * @example
244
+ * ```typescript
245
+ * const deleted = await api.collections.pages.delete(
246
+ * { organizationId: 'org_123', user },
247
+ * 'doc_123'
248
+ * );
249
+ * ```
250
+ */
251
+ async delete(context, id) {
252
+ // Permission check (unless overrideAccess)
253
+ await this.permissions.canDelete(context, this.collectionName);
254
+ return this.databaseAdapter.deleteDocById(context.organizationId, id);
255
+ }
256
+ /**
257
+ * Publish a document
258
+ *
259
+ * @example
260
+ * ```typescript
261
+ * const published = await api.collections.pages.publish(
262
+ * { organizationId: 'org_123', user },
263
+ * 'doc_123'
264
+ * );
265
+ * ```
266
+ */
267
+ async publish(context, id) {
268
+ // Permission check (unless overrideAccess)
269
+ await this.permissions.canPublish(context, this.collectionName);
270
+ // Get the document to access draft data for validation
271
+ const document = await this.databaseAdapter.findByDocIdAdvanced(context.organizationId, id);
272
+ if (!document || !document.draftData) {
273
+ throw new Error('Document not found or has no draft content to publish');
274
+ }
275
+ // Validate draft data (dates already in ISO, will be converted for validation)
276
+ const validationResult = await validateDocumentData(this._schema, document.draftData, document.draftData);
277
+ if (!validationResult.isValid) {
278
+ const errorMessage = validationResult.errors
279
+ .map((e) => `${e.field}: ${e.errors.join(', ')}`)
280
+ .join('; ');
281
+ throw new Error(`Cannot publish: validation errors - ${errorMessage}`);
282
+ }
283
+ // Validation passed - proceed with publish
284
+ const publishedDocument = await this.databaseAdapter.publishDoc(context.organizationId, id);
285
+ if (!publishedDocument) {
286
+ return null;
287
+ }
288
+ return transformDocument(publishedDocument, 'published');
289
+ }
290
+ /**
291
+ * Unpublish a document
292
+ *
293
+ * @example
294
+ * ```typescript
295
+ * const unpublished = await api.collections.pages.unpublish(
296
+ * { organizationId: 'org_123', user },
297
+ * 'doc_123'
298
+ * );
299
+ * ```
300
+ */
301
+ async unpublish(context, id) {
302
+ // Permission check (unless overrideAccess)
303
+ await this.permissions.canPublish(context, this.collectionName);
304
+ const document = await this.databaseAdapter.unpublishDoc(context.organizationId, id);
305
+ if (!document) {
306
+ return null;
307
+ }
308
+ return transformDocument(document, 'draft');
309
+ }
310
+ }
311
+ //# sourceMappingURL=collection-api.js.map