@aphexcms/cms-core 0.1.11 → 0.1.13

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 (399) hide show
  1. package/LICENSE +21 -0
  2. package/dist/api/assets.d.ts +48 -0
  3. package/dist/api/assets.d.ts.map +1 -0
  4. package/dist/api/assets.js +52 -0
  5. package/dist/api/client.d.ts +37 -0
  6. package/dist/api/client.d.ts.map +1 -0
  7. package/dist/api/client.js +125 -0
  8. package/dist/api/documents.d.ts +57 -0
  9. package/dist/api/documents.d.ts.map +1 -0
  10. package/dist/api/documents.js +85 -0
  11. package/dist/api/index.d.ts +7 -0
  12. package/dist/api/index.d.ts.map +1 -0
  13. package/dist/api/index.js +5 -0
  14. package/dist/api/organizations.d.ts +101 -0
  15. package/dist/api/organizations.d.ts.map +1 -0
  16. package/dist/api/organizations.js +92 -0
  17. package/dist/api/types.d.ts +45 -0
  18. package/dist/api/types.d.ts.map +1 -0
  19. package/dist/api/types.js +1 -0
  20. package/dist/auth/auth-errors.d.ts +7 -0
  21. package/dist/auth/auth-errors.d.ts.map +1 -0
  22. package/dist/auth/auth-errors.js +13 -0
  23. package/dist/auth/auth-hooks.d.ts +6 -0
  24. package/dist/auth/auth-hooks.d.ts.map +1 -0
  25. package/dist/auth/auth-hooks.js +122 -0
  26. package/dist/auth/provider.d.ts +17 -0
  27. package/dist/auth/provider.d.ts.map +1 -0
  28. package/dist/auth/provider.js +1 -0
  29. package/dist/cli/generate-types.js +218 -0
  30. package/dist/cli/index.js +86 -0
  31. package/dist/client/index.d.ts +24 -0
  32. package/dist/client/index.d.ts.map +1 -0
  33. package/{src/lib/client/index.ts → dist/client/index.js} +7 -18
  34. package/{src/lib → dist}/components/AdminApp.svelte +26 -55
  35. package/dist/components/AdminApp.svelte.d.ts +24 -0
  36. package/dist/components/AdminApp.svelte.d.ts.map +1 -0
  37. package/dist/components/admin/AdminLayout.svelte.d.ts +15 -0
  38. package/dist/components/admin/AdminLayout.svelte.d.ts.map +1 -0
  39. package/{src/lib → dist}/components/admin/DocumentEditor.svelte +60 -14
  40. package/dist/components/admin/DocumentEditor.svelte.d.ts +18 -0
  41. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -0
  42. package/dist/components/admin/DocumentTypesList.svelte.d.ts +14 -0
  43. package/dist/components/admin/DocumentTypesList.svelte.d.ts.map +1 -0
  44. package/dist/components/admin/ObjectModal.svelte.d.ts +15 -0
  45. package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -0
  46. package/dist/components/admin/SchemaField.svelte.d.ts +19 -0
  47. package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -0
  48. package/dist/components/admin/fields/ArrayField.svelte.d.ts +12 -0
  49. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -0
  50. package/dist/components/admin/fields/BooleanField.svelte.d.ts +13 -0
  51. package/dist/components/admin/fields/BooleanField.svelte.d.ts.map +1 -0
  52. package/dist/components/admin/fields/ImageField.svelte.d.ts +15 -0
  53. package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -0
  54. package/dist/components/admin/fields/NumberField.svelte.d.ts +14 -0
  55. package/dist/components/admin/fields/NumberField.svelte.d.ts.map +1 -0
  56. package/{src/lib → dist}/components/admin/fields/ReferenceField.svelte +2 -3
  57. package/dist/components/admin/fields/ReferenceField.svelte.d.ts +12 -0
  58. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -0
  59. package/dist/components/admin/fields/SlugField.svelte.d.ts +15 -0
  60. package/dist/components/admin/fields/SlugField.svelte.d.ts.map +1 -0
  61. package/dist/components/admin/fields/StringField.svelte.d.ts +14 -0
  62. package/dist/components/admin/fields/StringField.svelte.d.ts.map +1 -0
  63. package/dist/components/admin/fields/TextareaField.svelte.d.ts +14 -0
  64. package/dist/components/admin/fields/TextareaField.svelte.d.ts.map +1 -0
  65. package/dist/components/fields/index.d.ts +9 -0
  66. package/dist/components/fields/index.d.ts.map +1 -0
  67. package/dist/components/index.d.ts +7 -0
  68. package/dist/components/index.d.ts.map +1 -0
  69. package/{src/lib/components/index.ts → dist/components/index.js} +1 -5
  70. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts +11 -0
  71. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts.map +1 -0
  72. package/dist/components/layout/Sidebar.svelte.d.ts +14 -0
  73. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -0
  74. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts +11 -0
  75. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts.map +1 -0
  76. package/dist/components/layout/sidebar/NavMain.svelte.d.ts +19 -0
  77. package/dist/components/layout/sidebar/NavMain.svelte.d.ts.map +1 -0
  78. package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts +9 -0
  79. package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts.map +1 -0
  80. package/dist/components/layout/sidebar/NavUser.svelte.d.ts +9 -0
  81. package/dist/components/layout/sidebar/NavUser.svelte.d.ts.map +1 -0
  82. package/dist/config.d.ts +3 -0
  83. package/dist/config.d.ts.map +1 -0
  84. package/dist/config.js +15 -0
  85. package/dist/db/adapters/index.d.ts +1 -0
  86. package/dist/db/adapters/index.d.ts.map +1 -0
  87. package/{src/lib/db/adapters/index.ts → dist/db/adapters/index.js} +1 -0
  88. package/dist/db/index.d.ts +2 -0
  89. package/dist/db/index.d.ts.map +1 -0
  90. package/{src/lib/db/index.ts → dist/db/index.js} +1 -2
  91. package/dist/db/interfaces/asset.d.ts +73 -0
  92. package/dist/db/interfaces/asset.d.ts.map +1 -0
  93. package/dist/db/interfaces/asset.js +1 -0
  94. package/dist/db/interfaces/document.d.ts +61 -0
  95. package/dist/db/interfaces/document.d.ts.map +1 -0
  96. package/dist/db/interfaces/document.js +1 -0
  97. package/dist/db/interfaces/index.d.ts +73 -0
  98. package/dist/db/interfaces/index.d.ts.map +1 -0
  99. package/dist/db/interfaces/index.js +1 -0
  100. package/dist/db/interfaces/organization.d.ts +27 -0
  101. package/dist/db/interfaces/organization.d.ts.map +1 -0
  102. package/dist/db/interfaces/organization.js +1 -0
  103. package/dist/db/interfaces/schema.d.ts +21 -0
  104. package/dist/db/interfaces/schema.d.ts.map +1 -0
  105. package/dist/db/interfaces/schema.js +1 -0
  106. package/dist/db/interfaces/user.d.ts +15 -0
  107. package/dist/db/interfaces/user.d.ts.map +1 -0
  108. package/dist/db/interfaces/user.js +1 -0
  109. package/dist/db/utils/reference-resolver.d.ts +18 -0
  110. package/dist/db/utils/reference-resolver.d.ts.map +1 -0
  111. package/dist/db/utils/reference-resolver.js +80 -0
  112. package/dist/define.d.ts +3 -0
  113. package/dist/define.d.ts.map +1 -0
  114. package/dist/define.js +4 -0
  115. package/dist/email/index.d.ts +2 -0
  116. package/dist/email/index.d.ts.map +1 -0
  117. package/{src/lib/email/index.ts → dist/email/index.js} +1 -2
  118. package/dist/email/interfaces/email.d.ts +42 -0
  119. package/dist/email/interfaces/email.d.ts.map +1 -0
  120. package/dist/email/interfaces/email.js +1 -0
  121. package/dist/engine.d.ts +26 -0
  122. package/dist/engine.d.ts.map +1 -0
  123. package/dist/engine.js +66 -0
  124. package/dist/field-validation/rule.d.ts +51 -0
  125. package/dist/field-validation/rule.d.ts.map +1 -0
  126. package/dist/field-validation/rule.js +221 -0
  127. package/dist/field-validation/utils.d.ts +39 -0
  128. package/dist/field-validation/utils.d.ts.map +1 -0
  129. package/dist/field-validation/utils.js +99 -0
  130. package/dist/hooks.d.ts +25 -0
  131. package/dist/hooks.d.ts.map +1 -0
  132. package/dist/hooks.js +164 -0
  133. package/dist/index.d.ts +2 -0
  134. package/dist/index.d.ts.map +1 -0
  135. package/{src/lib/index.ts → dist/index.js} +1 -2
  136. package/dist/is-mobile.svelte.d.ts +5 -0
  137. package/dist/is-mobile.svelte.d.ts.map +1 -0
  138. package/{src/lib/is-mobile.svelte.ts → dist/is-mobile.svelte.js} +3 -5
  139. package/dist/lib/auth/provider.js +1 -0
  140. package/dist/lib/db/index.js +4 -0
  141. package/dist/lib/db/interfaces/asset.js +1 -0
  142. package/dist/lib/db/interfaces/document.js +1 -0
  143. package/dist/lib/db/interfaces/index.js +1 -0
  144. package/dist/lib/db/interfaces/organization.js +1 -0
  145. package/dist/lib/db/interfaces/schema.js +1 -0
  146. package/dist/lib/db/interfaces/user.js +1 -0
  147. package/dist/lib/email/index.js +4 -0
  148. package/dist/lib/email/interfaces/email.js +1 -0
  149. package/dist/lib/field-validation/rule.js +221 -0
  150. package/dist/lib/field-validation/utils.js +99 -0
  151. package/dist/lib/storage/interfaces/index.js +2 -0
  152. package/dist/lib/storage/interfaces/storage.js +1 -0
  153. package/dist/lib/types/asset.js +2 -0
  154. package/dist/lib/types/auth.js +41 -0
  155. package/dist/lib/types/config.js +1 -0
  156. package/dist/lib/types/document.js +1 -0
  157. package/dist/lib/types/filters.js +5 -0
  158. package/dist/lib/types/index.js +9 -0
  159. package/dist/lib/types/organization.js +3 -0
  160. package/dist/lib/types/schemas.js +1 -0
  161. package/dist/lib/types/sidebar.js +1 -0
  162. package/dist/lib/types/user.js +1 -0
  163. package/dist/local-api/auth-helpers.d.ts +65 -0
  164. package/dist/local-api/auth-helpers.d.ts.map +1 -0
  165. package/dist/local-api/auth-helpers.js +102 -0
  166. package/dist/local-api/collection-api.d.ts +138 -0
  167. package/dist/local-api/collection-api.d.ts.map +1 -0
  168. package/dist/local-api/collection-api.js +276 -0
  169. package/dist/local-api/index.d.ts +108 -0
  170. package/dist/local-api/index.d.ts.map +1 -0
  171. package/dist/local-api/index.js +157 -0
  172. package/dist/local-api/permissions.d.ts +45 -0
  173. package/dist/local-api/permissions.d.ts.map +1 -0
  174. package/dist/local-api/permissions.js +117 -0
  175. package/dist/local-api/types.d.ts +65 -0
  176. package/dist/local-api/types.d.ts.map +1 -0
  177. package/dist/local-api/types.js +4 -0
  178. package/dist/routes/assets-by-id.d.ts +5 -0
  179. package/dist/routes/assets-by-id.d.ts.map +1 -0
  180. package/dist/routes/assets-by-id.js +138 -0
  181. package/dist/routes/assets-cdn.d.ts +3 -0
  182. package/dist/routes/assets-cdn.d.ts.map +1 -0
  183. package/dist/routes/assets-cdn.js +155 -0
  184. package/dist/routes/assets.d.ts +4 -0
  185. package/dist/routes/assets.d.ts.map +1 -0
  186. package/dist/routes/assets.js +94 -0
  187. package/dist/routes/documents-by-id.d.ts +5 -0
  188. package/dist/routes/documents-by-id.d.ts.map +1 -0
  189. package/dist/routes/documents-by-id.js +163 -0
  190. package/dist/routes/documents-publish.d.ts +4 -0
  191. package/dist/routes/documents-publish.d.ts.map +1 -0
  192. package/dist/routes/documents-publish.js +136 -0
  193. package/dist/routes/documents-query.d.ts +24 -0
  194. package/dist/routes/documents-query.d.ts.map +1 -0
  195. package/dist/routes/documents-query.js +95 -0
  196. package/dist/routes/documents.d.ts +4 -0
  197. package/dist/routes/documents.d.ts.map +1 -0
  198. package/dist/routes/documents.js +136 -0
  199. package/dist/routes/index.d.ts +8 -0
  200. package/dist/routes/index.d.ts.map +1 -0
  201. package/dist/routes/index.js +12 -0
  202. package/dist/routes/organizations-by-id.d.ts +5 -0
  203. package/dist/routes/organizations-by-id.d.ts.map +1 -0
  204. package/dist/routes/organizations-by-id.js +187 -0
  205. package/dist/routes/organizations-invitations.d.ts +4 -0
  206. package/dist/routes/organizations-invitations.d.ts.map +1 -0
  207. package/dist/routes/organizations-invitations.js +125 -0
  208. package/dist/routes/organizations-members.d.ts +5 -0
  209. package/dist/routes/organizations-members.d.ts.map +1 -0
  210. package/dist/routes/organizations-members.js +206 -0
  211. package/dist/routes/organizations-switch.d.ts +3 -0
  212. package/dist/routes/organizations-switch.d.ts.map +1 -0
  213. package/dist/routes/organizations-switch.js +53 -0
  214. package/dist/routes/organizations.d.ts +4 -0
  215. package/dist/routes/organizations.d.ts.map +1 -0
  216. package/dist/routes/organizations.js +109 -0
  217. package/dist/routes/schemas-by-type.d.ts +3 -0
  218. package/dist/routes/schemas-by-type.d.ts.map +1 -0
  219. package/dist/routes/schemas-by-type.js +25 -0
  220. package/dist/routes/schemas.d.ts +3 -0
  221. package/dist/routes/schemas.d.ts.map +1 -0
  222. package/dist/routes/schemas.js +11 -0
  223. package/dist/routes-exports.d.ts +14 -0
  224. package/dist/routes-exports.d.ts.map +1 -0
  225. package/dist/routes-exports.js +19 -0
  226. package/dist/schema-context.svelte.d.ts +10 -0
  227. package/dist/schema-context.svelte.d.ts.map +1 -0
  228. package/dist/schema-context.svelte.js +18 -0
  229. package/dist/schema-utils/cleanup.d.ts +21 -0
  230. package/dist/schema-utils/cleanup.d.ts.map +1 -0
  231. package/dist/schema-utils/cleanup.js +80 -0
  232. package/dist/schema-utils/index.d.ts +4 -0
  233. package/dist/schema-utils/index.d.ts.map +1 -0
  234. package/dist/schema-utils/index.js +4 -0
  235. package/dist/schema-utils/utils.d.ts +30 -0
  236. package/dist/schema-utils/utils.d.ts.map +1 -0
  237. package/dist/schema-utils/utils.js +37 -0
  238. package/dist/schema-utils/validator.d.ts +6 -0
  239. package/dist/schema-utils/validator.d.ts.map +1 -0
  240. package/dist/schema-utils/validator.js +45 -0
  241. package/dist/server/index.d.ts +17 -0
  242. package/dist/server/index.d.ts.map +1 -0
  243. package/dist/server/index.js +30 -0
  244. package/dist/services/asset-service.d.ts +86 -0
  245. package/dist/services/asset-service.d.ts.map +1 -0
  246. package/dist/services/asset-service.js +187 -0
  247. package/dist/services/index.d.ts +3 -0
  248. package/dist/services/index.d.ts.map +1 -0
  249. package/dist/services/index.js +4 -0
  250. package/dist/storage/adapters/index.d.ts +2 -0
  251. package/dist/storage/adapters/index.d.ts.map +1 -0
  252. package/dist/storage/adapters/index.js +2 -0
  253. package/dist/storage/adapters/local-storage-adapter.d.ts +54 -0
  254. package/dist/storage/adapters/local-storage-adapter.d.ts.map +1 -0
  255. package/dist/storage/adapters/local-storage-adapter.js +187 -0
  256. package/dist/storage/index.d.ts +3 -0
  257. package/dist/storage/index.d.ts.map +1 -0
  258. package/{src/lib/storage/index.ts → dist/storage/index.js} +2 -4
  259. package/dist/storage/interfaces/index.d.ts +2 -0
  260. package/dist/storage/interfaces/index.d.ts.map +1 -0
  261. package/dist/storage/interfaces/index.js +2 -0
  262. package/dist/storage/interfaces/storage.d.ts +91 -0
  263. package/dist/storage/interfaces/storage.d.ts.map +1 -0
  264. package/dist/storage/interfaces/storage.js +1 -0
  265. package/dist/storage/providers/storage.d.ts +43 -0
  266. package/dist/storage/providers/storage.d.ts.map +1 -0
  267. package/dist/storage/providers/storage.js +64 -0
  268. package/dist/types/asset.d.ts +73 -0
  269. package/dist/types/asset.d.ts.map +1 -0
  270. package/dist/types/asset.js +2 -0
  271. package/dist/types/auth.d.ts +50 -0
  272. package/dist/types/auth.d.ts.map +1 -0
  273. package/dist/types/auth.js +41 -0
  274. package/dist/types/config.d.ts +64 -0
  275. package/dist/types/config.d.ts.map +1 -0
  276. package/dist/types/config.js +1 -0
  277. package/dist/types/document.d.ts +35 -0
  278. package/dist/types/document.d.ts.map +1 -0
  279. package/dist/types/document.js +1 -0
  280. package/dist/types/filters.d.ts +173 -0
  281. package/dist/types/filters.d.ts.map +1 -0
  282. package/dist/types/filters.js +5 -0
  283. package/dist/types/index.d.ts +10 -0
  284. package/dist/types/index.d.ts.map +1 -0
  285. package/dist/types/index.js +9 -0
  286. package/dist/types/organization.d.ts +105 -0
  287. package/dist/types/organization.d.ts.map +1 -0
  288. package/dist/types/organization.js +3 -0
  289. package/dist/types/schemas.d.ts +114 -0
  290. package/dist/types/schemas.d.ts.map +1 -0
  291. package/dist/types/schemas.js +1 -0
  292. package/dist/types/sidebar.d.ts +33 -0
  293. package/dist/types/sidebar.d.ts.map +1 -0
  294. package/dist/types/sidebar.js +1 -0
  295. package/dist/types/user.d.ts +14 -0
  296. package/dist/types/user.d.ts.map +1 -0
  297. package/dist/types/user.js +1 -0
  298. package/dist/utils/content-hash.d.ts +22 -0
  299. package/dist/utils/content-hash.d.ts.map +1 -0
  300. package/dist/utils/content-hash.js +67 -0
  301. package/dist/utils/image-url.d.ts +88 -0
  302. package/dist/utils/image-url.d.ts.map +1 -0
  303. package/dist/utils/image-url.js +165 -0
  304. package/dist/utils/index.d.ts +6 -0
  305. package/dist/utils/index.d.ts.map +1 -0
  306. package/dist/utils/index.js +9 -0
  307. package/dist/utils/slug.d.ts +13 -0
  308. package/dist/utils/slug.d.ts.map +1 -0
  309. package/dist/utils/slug.js +30 -0
  310. package/dist/utils.d.ts +13 -0
  311. package/dist/utils.d.ts.map +1 -0
  312. package/dist/utils.js +5 -0
  313. package/package.json +101 -95
  314. package/src/lib/api/assets.ts +0 -75
  315. package/src/lib/api/client.ts +0 -150
  316. package/src/lib/api/documents.ts +0 -102
  317. package/src/lib/api/index.ts +0 -7
  318. package/src/lib/api/organizations.ts +0 -154
  319. package/src/lib/api/types.ts +0 -34
  320. package/src/lib/auth/auth-errors.ts +0 -23
  321. package/src/lib/auth/auth-hooks.ts +0 -132
  322. package/src/lib/auth/provider.ts +0 -25
  323. package/src/lib/config.ts +0 -18
  324. package/src/lib/db/interfaces/asset.ts +0 -61
  325. package/src/lib/db/interfaces/document.ts +0 -53
  326. package/src/lib/db/interfaces/index.ts +0 -98
  327. package/src/lib/db/interfaces/organization.ts +0 -51
  328. package/src/lib/db/interfaces/schema.ts +0 -13
  329. package/src/lib/db/interfaces/user.ts +0 -16
  330. package/src/lib/db/utils/reference-resolver.ts +0 -119
  331. package/src/lib/define.ts +0 -7
  332. package/src/lib/email/interfaces/email.ts +0 -45
  333. package/src/lib/engine.ts +0 -85
  334. package/src/lib/field-validation/rule.ts +0 -287
  335. package/src/lib/field-validation/utils.ts +0 -91
  336. package/src/lib/hooks.ts +0 -142
  337. package/src/lib/routes/assets-by-id.ts +0 -161
  338. package/src/lib/routes/assets-cdn.ts +0 -185
  339. package/src/lib/routes/assets.ts +0 -116
  340. package/src/lib/routes/documents-by-id.ts +0 -188
  341. package/src/lib/routes/documents-publish.ts +0 -211
  342. package/src/lib/routes/documents.ts +0 -172
  343. package/src/lib/routes/index.ts +0 -13
  344. package/src/lib/routes/organizations-by-id.ts +0 -258
  345. package/src/lib/routes/organizations-invitations.ts +0 -183
  346. package/src/lib/routes/organizations-members.ts +0 -301
  347. package/src/lib/routes/organizations-switch.ts +0 -74
  348. package/src/lib/routes/organizations.ts +0 -147
  349. package/src/lib/routes/schemas-by-type.ts +0 -35
  350. package/src/lib/routes/schemas.ts +0 -19
  351. package/src/lib/routes-exports.ts +0 -42
  352. package/src/lib/schema-context.svelte.ts +0 -24
  353. package/src/lib/schema-utils/cleanup.ts +0 -116
  354. package/src/lib/schema-utils/index.ts +0 -4
  355. package/src/lib/schema-utils/utils.ts +0 -47
  356. package/src/lib/schema-utils/validator.ts +0 -58
  357. package/src/lib/server/index.ts +0 -40
  358. package/src/lib/services/asset-service.ts +0 -256
  359. package/src/lib/services/index.ts +0 -6
  360. package/src/lib/storage/adapters/index.ts +0 -2
  361. package/src/lib/storage/adapters/local-storage-adapter.ts +0 -215
  362. package/src/lib/storage/interfaces/index.ts +0 -2
  363. package/src/lib/storage/interfaces/storage.ts +0 -114
  364. package/src/lib/storage/providers/storage.ts +0 -83
  365. package/src/lib/types/asset.ts +0 -81
  366. package/src/lib/types/auth.ts +0 -80
  367. package/src/lib/types/config.ts +0 -45
  368. package/src/lib/types/document.ts +0 -38
  369. package/src/lib/types/index.ts +0 -8
  370. package/src/lib/types/organization.ts +0 -119
  371. package/src/lib/types/schemas.ts +0 -156
  372. package/src/lib/types/sidebar.ts +0 -37
  373. package/src/lib/types/user.ts +0 -17
  374. package/src/lib/utils/content-hash.ts +0 -75
  375. package/src/lib/utils/image-url.ts +0 -204
  376. package/src/lib/utils/index.ts +0 -12
  377. package/src/lib/utils/slug.ts +0 -33
  378. package/src/lib/utils.ts +0 -13
  379. /package/{src/lib → dist}/app.d.ts +0 -0
  380. /package/{src/lib → dist}/auth/MULTI_TENANCY_PLAN.md +0 -0
  381. /package/{src/lib → dist}/components/admin/AdminLayout.svelte +0 -0
  382. /package/{src/lib → dist}/components/admin/DocumentTypesList.svelte +0 -0
  383. /package/{src/lib → dist}/components/admin/ObjectModal.svelte +0 -0
  384. /package/{src/lib → dist}/components/admin/SchemaField.svelte +0 -0
  385. /package/{src/lib → dist}/components/admin/fields/ArrayField.svelte +0 -0
  386. /package/{src/lib → dist}/components/admin/fields/BooleanField.svelte +0 -0
  387. /package/{src/lib → dist}/components/admin/fields/ImageField.svelte +0 -0
  388. /package/{src/lib → dist}/components/admin/fields/NumberField.svelte +0 -0
  389. /package/{src/lib → dist}/components/admin/fields/SlugField.svelte +0 -0
  390. /package/{src/lib → dist}/components/admin/fields/StringField.svelte +0 -0
  391. /package/{src/lib → dist}/components/admin/fields/TextareaField.svelte +0 -0
  392. /package/{src/lib/components/fields/index.ts → dist/components/fields/index.js} +0 -0
  393. /package/{src/lib → dist}/components/layout/OrganizationSwitcher.svelte +0 -0
  394. /package/{src/lib → dist}/components/layout/Sidebar.svelte +0 -0
  395. /package/{src/lib → dist}/components/layout/sidebar/AppSidebar.svelte +0 -0
  396. /package/{src/lib → dist}/components/layout/sidebar/NavMain.svelte +0 -0
  397. /package/{src/lib → dist}/components/layout/sidebar/NavSecondary.svelte +0 -0
  398. /package/{src/lib → dist}/components/layout/sidebar/NavUser.svelte +0 -0
  399. /package/{src/lib → dist}/plugins/README.md +0 -0
@@ -0,0 +1,45 @@
1
+ import type { Document, NewDocument } from '../types/index.js';
2
+ export interface PaginationMeta {
3
+ total: number;
4
+ page: number;
5
+ pageSize: number;
6
+ totalPages: number;
7
+ hasNextPage: boolean;
8
+ hasPrevPage: boolean;
9
+ }
10
+ export interface ApiResponse<T> {
11
+ success: boolean;
12
+ data?: T;
13
+ error?: string;
14
+ message?: string;
15
+ pagination?: PaginationMeta;
16
+ meta?: {
17
+ count: number;
18
+ limit: number;
19
+ offset: number;
20
+ filters: Record<string, any>;
21
+ };
22
+ }
23
+ export interface DocumentListParams {
24
+ type?: string;
25
+ docType?: string;
26
+ status?: string;
27
+ page?: number;
28
+ pageSize?: number;
29
+ limit?: number;
30
+ offset?: number;
31
+ depth?: number;
32
+ sort?: string;
33
+ perspective?: 'draft' | 'published';
34
+ }
35
+ export interface CreateDocumentData {
36
+ type: string;
37
+ data: Record<string, any>;
38
+ publish?: boolean;
39
+ }
40
+ export interface UpdateDocumentData {
41
+ data: Record<string, any>;
42
+ publish?: boolean;
43
+ }
44
+ export type { Document, NewDocument };
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/api/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG5D,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACrB;AAGD,MAAM,WAAW,WAAW,CAAC,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,UAAU,CAAC,EAAE,cAAc,CAAC;IAE5B,IAAI,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC7B,CAAC;CACF;AAGD,MAAM,WAAW,kBAAkB;IAElC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;CACpC;AAGD,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAGD,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ export type AuthErrorCode = 'no_session' | 'session_expired' | 'no_organization' | 'kicked_from_org' | 'unauthorized';
2
+ export declare class AuthError extends Error {
3
+ code: AuthErrorCode;
4
+ constructor(code: AuthErrorCode, message: string);
5
+ }
6
+ export declare function createAuthError(code: AuthErrorCode, message: string): AuthError;
7
+ //# sourceMappingURL=auth-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-errors.d.ts","sourceRoot":"","sources":["../../src/lib/auth/auth-errors.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GACtB,YAAY,GACZ,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,cAAc,CAAC;AAElB,qBAAa,SAAU,SAAQ,KAAK;IACnC,IAAI,EAAE,aAAa,CAAC;gBAER,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM;CAKhD;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAE/E"}
@@ -0,0 +1,13 @@
1
+ // Custom authentication errors with error codes for better error handling
2
+ export class AuthError extends Error {
3
+ code;
4
+ constructor(code, message) {
5
+ super(message);
6
+ this.code = code;
7
+ this.name = 'AuthError';
8
+ }
9
+ }
10
+ // Helper function to create auth errors
11
+ export function createAuthError(code, message) {
12
+ return new AuthError(code, message);
13
+ }
@@ -0,0 +1,6 @@
1
+ import type { RequestEvent } from '@sveltejs/kit';
2
+ import type { DatabaseAdapter } from '../db/index.js';
3
+ import type { CMSConfig } from '../types/index.js';
4
+ import type { AuthProvider } from './provider.js';
5
+ export declare function handleAuthHook(event: RequestEvent, config: CMSConfig, authProvider: AuthProvider, db: DatabaseAdapter): Promise<Response | null>;
6
+ //# sourceMappingURL=auth-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-hooks.d.ts","sourceRoot":"","sources":["../../src/lib/auth/auth-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAQ,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,wBAAsB,cAAc,CACnC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,eAAe,GACjB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAoI1B"}
@@ -0,0 +1,122 @@
1
+ import { redirect } from '@sveltejs/kit';
2
+ import { AuthError } from './auth-errors.js';
3
+ export async function handleAuthHook(event, config, authProvider, db) {
4
+ const path = event.url.pathname;
5
+ // 1. Admin UI routes - require session authentication
6
+ if (path.startsWith('/admin')) {
7
+ try {
8
+ const session = await authProvider.requireSession(event.request, db);
9
+ event.locals.auth = session;
10
+ }
11
+ catch (error) {
12
+ // If it's an AuthError, redirect to login with error code
13
+ if (error instanceof AuthError) {
14
+ const loginUrl = config.auth?.loginUrl || '/login';
15
+ throw redirect(302, `${loginUrl}?error=${error.code}`);
16
+ }
17
+ // For other errors, redirect without error code
18
+ throw redirect(302, config.auth?.loginUrl || '/login');
19
+ }
20
+ }
21
+ // 2. Asset CDN routes - accept session OR API key OR signed token
22
+ // Support both /assets/ and /media/ paths (media is Sanity-style URL)
23
+ if (path.startsWith('/assets/') || path.startsWith('/media/')) {
24
+ // Try session first (for admin UI)
25
+ let auth = await authProvider.getSession(event.request, db);
26
+ // If no session, try API key
27
+ if (!auth) {
28
+ auth = await authProvider.validateApiKey(event.request, db);
29
+ }
30
+ // Make auth available (can be null, route will check for signed token)
31
+ if (auth) {
32
+ event.locals.auth = auth;
33
+ }
34
+ }
35
+ // 3. API routes - accept session OR API key
36
+ if (path.startsWith('/api/')) {
37
+ // Skip auth routes (Better Auth handles these)
38
+ if (path.startsWith('/api/auth')) {
39
+ return null; // Let the main hook continue
40
+ }
41
+ // If API key is explicitly provided, prioritize it over session
42
+ // This allows public content access even when user is logged in to a different org
43
+ const hasApiKey = event.request.headers.has('x-api-key');
44
+ let auth = null;
45
+ if (hasApiKey) {
46
+ // API key takes precedence when explicitly provided
47
+ auth = await authProvider.validateApiKey(event.request, db);
48
+ }
49
+ else {
50
+ // Otherwise, try session (for admin UI making API calls)
51
+ auth = await authProvider.getSession(event.request, db);
52
+ }
53
+ // Check if GraphQL plugin is configured
54
+ let graphqlEndpoint;
55
+ const hasGraphQLPlugin = config.plugins?.some((p) => {
56
+ if (typeof p === 'string')
57
+ return p === '@aphexcms/graphql-plugin';
58
+ if (typeof p === 'object')
59
+ return p.name === '@aphexcms/graphql-plugin';
60
+ return false;
61
+ });
62
+ if (hasGraphQLPlugin) {
63
+ graphqlEndpoint = '/api/graphql'; // Standard GraphQL endpoint
64
+ }
65
+ // Require authentication for protected API routes
66
+ const protectedApiRoutes = [
67
+ '/api/documents',
68
+ '/api/assets',
69
+ '/api/schemas',
70
+ '/api/organizations',
71
+ '/api/settings'
72
+ ];
73
+ if (graphqlEndpoint) {
74
+ protectedApiRoutes.push(graphqlEndpoint);
75
+ }
76
+ const isProtectedRoute = protectedApiRoutes.some((route) => path.startsWith(route));
77
+ if (isProtectedRoute && !auth) {
78
+ return new Response(JSON.stringify({ error: 'Unauthorized' }), {
79
+ status: 401,
80
+ headers: { 'Content-Type': 'application/json' }
81
+ });
82
+ }
83
+ // Check write permission for mutations
84
+ if (auth && ['POST', 'PUT', 'PATCH', 'DELETE'].includes(event.request.method)) {
85
+ // Special handling for GraphQL
86
+ if (graphqlEndpoint && path.startsWith(graphqlEndpoint)) {
87
+ // We need to read the body to check if it's a mutation.
88
+ // It's important to clone the request so we don't consume the body stream.
89
+ const requestBody = await event.request.clone().text();
90
+ const isMutation = requestBody.trim().startsWith('mutation');
91
+ if (isMutation && auth.type === 'api_key' && !auth.permissions.includes('write')) {
92
+ return new Response(JSON.stringify({ error: 'Forbidden: Write permission required for mutations' }), {
93
+ status: 403,
94
+ headers: { 'Content-Type': 'application/json' }
95
+ });
96
+ }
97
+ }
98
+ else {
99
+ // Existing logic for other API routes
100
+ if (auth.type === 'api_key' && !auth.permissions.includes('write')) {
101
+ return new Response(JSON.stringify({ error: 'Forbidden: Write permission required' }), {
102
+ status: 403,
103
+ headers: { 'Content-Type': 'application/json' }
104
+ });
105
+ }
106
+ }
107
+ }
108
+ // Make auth available in API routes
109
+ if (auth) {
110
+ event.locals.auth = auth;
111
+ }
112
+ }
113
+ // 4. All other routes - try to populate auth if session exists (optional auth)
114
+ // This allows public pages to detect if user is logged in (like WordPress admin bar)
115
+ if (!event.locals.auth) {
116
+ const auth = await authProvider.getSession(event.request, db);
117
+ if (auth) {
118
+ event.locals.auth = auth;
119
+ }
120
+ }
121
+ return null; // Tell the main hook to continue
122
+ }
@@ -0,0 +1,17 @@
1
+ import type { SessionAuth, ApiKeyAuth } from '../types/index.js';
2
+ import type { DatabaseAdapter } from '../db/interfaces/index.js';
3
+ export interface AuthProvider {
4
+ getSession(request: Request, db: DatabaseAdapter): Promise<SessionAuth | null>;
5
+ requireSession(request: Request, db: DatabaseAdapter): Promise<SessionAuth>;
6
+ validateApiKey(request: Request, db: DatabaseAdapter): Promise<ApiKeyAuth | null>;
7
+ requireApiKey(request: Request, db: DatabaseAdapter, permission?: 'read' | 'write'): Promise<ApiKeyAuth>;
8
+ getUserById(userId: string): Promise<{
9
+ id: string;
10
+ name?: string;
11
+ email: string;
12
+ } | null>;
13
+ changeUserName(userId: string, name: string): Promise<void>;
14
+ requestPasswordReset(email: string, redirectTo?: string): Promise<void>;
15
+ resetPassword(token: string, newPassword: string): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/lib/auth/provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,WAAW,YAAY;IAE5B,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC/E,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAG5E,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClF,aAAa,CACZ,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,eAAe,EACnB,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,GAC3B,OAAO,CAAC,UAAU,CAAC,CAAC;IAGvB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC1F,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5D,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,218 @@
1
+ import { isFieldRequired } from '../lib/field-validation/utils.js';
2
+ /**
3
+ * Map Aphex field types to TypeScript types
4
+ */
5
+ function mapFieldTypeToTS(field, schemaMap) {
6
+ switch (field.type) {
7
+ case 'string':
8
+ case 'text':
9
+ case 'slug':
10
+ return 'string';
11
+ case 'number':
12
+ return 'number';
13
+ case 'boolean':
14
+ return 'boolean';
15
+ case 'image':
16
+ // Image fields store reference to asset
17
+ return 'string'; // Asset ID
18
+ case 'array': {
19
+ if (!('of' in field) || !field.of || field.of.length === 0) {
20
+ return 'unknown[]';
21
+ }
22
+ // Union of all possible array item types
23
+ const types = field.of
24
+ .map((ref) => {
25
+ const refSchema = schemaMap.get(ref.type);
26
+ if (refSchema && refSchema.type === 'object') {
27
+ return pascalCase(ref.type);
28
+ }
29
+ return 'unknown';
30
+ })
31
+ .filter((t) => t !== 'unknown');
32
+ if (types.length === 0) {
33
+ return 'unknown[]';
34
+ }
35
+ return types.length === 1 ? `${types[0]}[]` : `Array<${types.join(' | ')}>`;
36
+ }
37
+ case 'object': {
38
+ if (!('fields' in field) || !field.fields) {
39
+ return 'Record<string, unknown>';
40
+ }
41
+ // Generate inline interface for object fields
42
+ const props = field.fields
43
+ .map((f) => {
44
+ const tsType = mapFieldTypeToTS(f, schemaMap);
45
+ const optional = isFieldOptional(f) ? '?' : '';
46
+ return ` ${f.name}${optional}: ${tsType};`;
47
+ })
48
+ .join('\n');
49
+ return `{\n${props}\n}`;
50
+ }
51
+ case 'reference': {
52
+ // References store document ID as string
53
+ return 'string';
54
+ }
55
+ default:
56
+ return 'unknown';
57
+ }
58
+ }
59
+ /**
60
+ * Convert kebab-case or snake_case to PascalCase
61
+ */
62
+ function pascalCase(str) {
63
+ return str
64
+ .split(/[-_]/)
65
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
66
+ .join('');
67
+ }
68
+ /**
69
+ * Determine if a field is optional based on validation rules
70
+ */
71
+ function isFieldOptional(field) {
72
+ return !isFieldRequired(field);
73
+ }
74
+ /**
75
+ * Generate TypeScript interface for a schema type
76
+ */
77
+ function generateInterface(schema, schemaMap) {
78
+ const interfaceName = pascalCase(schema.name);
79
+ const fields = schema.fields
80
+ .map((field) => {
81
+ const tsType = mapFieldTypeToTS(field, schemaMap);
82
+ const optional = isFieldOptional(field) ? '?' : '';
83
+ const comment = field.description ? ` /** ${field.description} */\n` : '';
84
+ return `${comment} ${field.name}${optional}: ${tsType};`;
85
+ })
86
+ .join('\n');
87
+ // Add id and _meta fields for document types
88
+ const isDocument = schema.type === 'document';
89
+ const metadataFields = isDocument
90
+ ? ` /** Document ID */
91
+ id: string;
92
+ ${fields}
93
+ /** Document metadata */
94
+ _meta?: {
95
+ type: string;
96
+ status: 'draft' | 'published';
97
+ organizationId: string;
98
+ createdAt: Date | null;
99
+ updatedAt: Date | null;
100
+ createdBy?: string;
101
+ updatedBy?: string;
102
+ publishedAt?: Date | null;
103
+ publishedHash?: string | null;
104
+ };`
105
+ : fields;
106
+ return `export interface ${interfaceName} {\n${metadataFields}\n}`;
107
+ }
108
+ /**
109
+ * Generate the Collections interface augmentation
110
+ */
111
+ function generateCollectionsAugmentation(documentSchemas) {
112
+ const mappings = documentSchemas
113
+ .map((schema) => {
114
+ const interfaceName = pascalCase(schema.name);
115
+ return ` ${schema.name}: CollectionAPI<${interfaceName}>;`;
116
+ })
117
+ .join('\n');
118
+ return `declare module '@aphexcms/cms-core/server' {
119
+ interface Collections {
120
+ ${mappings}
121
+ }
122
+ }`;
123
+ }
124
+ /**
125
+ * Generate complete TypeScript types file with module augmentation
126
+ */
127
+ export function generateTypes(schemas) {
128
+ // Create schema map for lookups
129
+ const schemaMap = new Map(schemas.map((s) => [s.name, s]));
130
+ // Separate document and object types
131
+ const documentSchemas = schemas.filter((s) => s.type === 'document');
132
+ const objectSchemas = schemas.filter((s) => s.type === 'object');
133
+ // Generate interfaces for all schemas
134
+ const objectInterfaces = objectSchemas.map((s) => generateInterface(s, schemaMap)).join('\n\n');
135
+ const documentInterfaces = documentSchemas.map((s) => generateInterface(s, schemaMap)).join('\n\n');
136
+ // Generate Collections interface augmentation
137
+ const collectionsAugmentation = generateCollectionsAugmentation(documentSchemas);
138
+ // Build the complete file
139
+ const output = `/**
140
+ * Generated types for Aphex CMS
141
+ * This file is auto-generated - DO NOT EDIT manually
142
+ */
143
+ import type { CollectionAPI } from '@aphexcms/cms-core/server';
144
+
145
+ // ============================================================================
146
+ // Object Types (nested in documents)
147
+ // ============================================================================
148
+
149
+ ${objectInterfaces}
150
+
151
+ // ============================================================================
152
+ // Document Types (collections)
153
+ // ============================================================================
154
+
155
+ ${documentInterfaces}
156
+
157
+ // ============================================================================
158
+ // Module Augmentation - Extends Collections interface globally
159
+ // ============================================================================
160
+
161
+ ${collectionsAugmentation}
162
+ `;
163
+ return output;
164
+ }
165
+ /**
166
+ * CLI helper to generate types from schema file
167
+ */
168
+ export async function generateTypesFromConfig(schemaPath, outputPath) {
169
+ try {
170
+ // Resolve paths relative to current working directory
171
+ const path = await import('path');
172
+ const { pathToFileURL } = await import('url');
173
+ const fs = await import('fs/promises');
174
+ const absoluteSchemaPath = path.resolve(process.cwd(), schemaPath);
175
+ const absoluteOutputPath = path.resolve(process.cwd(), outputPath);
176
+ // If the schema file is TypeScript, compile it with esbuild first
177
+ let schemaModulePath = absoluteSchemaPath;
178
+ let tempFile = null;
179
+ if (absoluteSchemaPath.endsWith('.ts')) {
180
+ const { build } = await import('esbuild');
181
+ const tempOutFile = path.join(path.dirname(absoluteSchemaPath), '.temp-schema.mjs');
182
+ await build({
183
+ entryPoints: [absoluteSchemaPath],
184
+ bundle: true,
185
+ format: 'esm',
186
+ platform: 'node',
187
+ outfile: tempOutFile,
188
+ external: ['@aphexcms/*']
189
+ });
190
+ schemaModulePath = tempOutFile;
191
+ tempFile = tempOutFile;
192
+ }
193
+ // Dynamic import the schema types
194
+ // Use file:// URL for proper ESM import
195
+ const schemaModule = await import(pathToFileURL(schemaModulePath).href);
196
+ const schemas = schemaModule.schemaTypes || schemaModule.default;
197
+ // Clean up temp file if created
198
+ if (tempFile) {
199
+ try {
200
+ await fs.unlink(tempFile);
201
+ }
202
+ catch {
203
+ // Ignore cleanup errors
204
+ }
205
+ }
206
+ if (!schemas || !Array.isArray(schemas)) {
207
+ throw new Error('Invalid schema file: expected schemaTypes array export');
208
+ }
209
+ const generatedTypes = generateTypes(schemas);
210
+ // Write to output file
211
+ await fs.writeFile(absoluteOutputPath, generatedTypes, 'utf-8');
212
+ console.log(`✅ Types generated successfully at: ${absoluteOutputPath}`);
213
+ }
214
+ catch (error) {
215
+ console.error('❌ Failed to generate types:', error);
216
+ throw error;
217
+ }
218
+ }
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Aphex CMS CLI
4
+ * Uses cac for command parsing + clack for interactive prompts
5
+ */
6
+ import { intro, outro, spinner, text, cancel, isCancel } from '@clack/prompts';
7
+ import { cac } from 'cac';
8
+ import pc from 'picocolors';
9
+ import { generateTypesFromConfig } from './generate-types.js';
10
+ const cli = cac('aphex');
11
+ // Version from package.json
12
+ const version = '0.1.13';
13
+ // ASCII Art Banner
14
+ function printBanner() {
15
+ console.log(pc.cyan(`${pc.bold('⚡ Aphex CMS')}\n${pc.dim('A modern headless CMS')}`));
16
+ }
17
+ /**
18
+ * aphex generate:types [schema-path] [output-path]
19
+ * Generate TypeScript types from schema
20
+ */
21
+ cli
22
+ .command('generate:types [schema-path] [output-path]', 'Generate TypeScript types from schema')
23
+ .action(async (schemaPath, outputPath) => {
24
+ intro(pc.cyan('⚡ Aphex CMS - Type Generator'));
25
+ try {
26
+ // If paths not provided, prompt for them
27
+ if (!schemaPath) {
28
+ const result = await text({
29
+ message: 'Schema file path:',
30
+ placeholder: './src/lib/schemaTypes/index.ts',
31
+ defaultValue: './src/lib/schemaTypes/index.ts'
32
+ });
33
+ if (isCancel(result)) {
34
+ cancel('Operation cancelled.');
35
+ process.exit(0);
36
+ }
37
+ schemaPath = result;
38
+ }
39
+ if (!outputPath) {
40
+ const result = await text({
41
+ message: 'Output file path:',
42
+ placeholder: './src/lib/generated-types.ts',
43
+ defaultValue: './src/lib/generated-types.ts'
44
+ });
45
+ if (isCancel(result)) {
46
+ cancel('Operation cancelled.');
47
+ process.exit(0);
48
+ }
49
+ outputPath = result;
50
+ }
51
+ const s = spinner();
52
+ s.start('Generating types...');
53
+ await generateTypesFromConfig(schemaPath, outputPath);
54
+ s.stop(pc.green('✅ Types generated successfully!'));
55
+ outro(pc.dim(`Output: ${pc.cyan(outputPath)}`));
56
+ }
57
+ catch (error) {
58
+ cancel(pc.red('Failed to generate types'));
59
+ console.error(error);
60
+ process.exit(1);
61
+ }
62
+ });
63
+ /**
64
+ * aphex help
65
+ */
66
+ cli.help();
67
+ /**
68
+ * aphex --version
69
+ */
70
+ cli.version(version);
71
+ /**
72
+ * Default command - show banner and help
73
+ */
74
+ cli.on('command:*', () => {
75
+ printBanner();
76
+ console.log(pc.red(`Unknown command: ${cli.args.join(' ')}\n`));
77
+ console.log(`Run ${pc.cyan('aphex --help')} to see available commands.`);
78
+ process.exit(1);
79
+ });
80
+ // Parse CLI args
81
+ cli.parse();
82
+ // If no command provided, show banner and help
83
+ if (!process.argv.slice(2).length) {
84
+ printBanner();
85
+ cli.outputHelp();
86
+ }
@@ -0,0 +1,24 @@
1
+ export * from '../types/index.js';
2
+ export type { SidebarUser, SidebarNavItem, SidebarBranding, SidebarData } from '../types/sidebar.js';
3
+ export * from '../field-validation/rule.js';
4
+ export * from '../field-validation/utils.js';
5
+ export { createContentHash, hasUnpublishedChanges } from '../utils/content-hash.js';
6
+ export { setSchemaContext, getSchemaContext } from '../schema-context.svelte';
7
+ export * from '../schema-utils/index.js';
8
+ export { default as DocumentEditor } from '../components/admin/DocumentEditor.svelte';
9
+ export { default as DocumentTypesList } from '../components/admin/DocumentTypesList.svelte';
10
+ export { default as SchemaField } from '../components/admin/SchemaField.svelte';
11
+ export { default as AdminApp } from '../components/AdminApp.svelte';
12
+ export { default as Sidebar } from '../components/layout/Sidebar.svelte';
13
+ export { default as StringField } from '../components/admin/fields/StringField.svelte';
14
+ export { default as TextareaField } from '../components/admin/fields/TextareaField.svelte';
15
+ export { default as NumberField } from '../components/admin/fields/NumberField.svelte';
16
+ export { default as BooleanField } from '../components/admin/fields/BooleanField.svelte';
17
+ export { default as ImageField } from '../components/admin/fields/ImageField.svelte';
18
+ export { default as SlugField } from '../components/admin/fields/SlugField.svelte';
19
+ export { default as ArrayField } from '../components/admin/fields/ArrayField.svelte';
20
+ export { default as ReferenceField } from '../components/admin/fields/ReferenceField.svelte';
21
+ export * from '../utils/index.js';
22
+ export * from '../api/index.js';
23
+ export type { ApiResponse } from '../api/index.js';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/client/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlG,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAGzE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAG7F,cAAc,gBAAgB,CAAC;AAE/B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
@@ -1,30 +1,22 @@
1
1
  // Aphex CMS Core - Client-side exports
2
2
  // These are safe to import in the browser (no Node.js dependencies)
3
-
4
3
  // Core types (shared between client and server)
5
- export * from '../types/index';
6
- export type { SidebarUser, SidebarNavItem, SidebarBranding, SidebarData } from '../types/sidebar';
7
-
4
+ export * from '../types/index.js';
8
5
  // Field validation (client-side validation)
9
- export * from '../field-validation/rule';
10
- export * from '../field-validation/utils';
11
-
6
+ export * from '../field-validation/rule.js';
7
+ export * from '../field-validation/utils.js';
12
8
  // Content hashing utilities (for client-side change detection)
13
- export { createContentHash, hasUnpublishedChanges } from '../utils/content-hash';
14
-
9
+ export { createContentHash, hasUnpublishedChanges } from '../utils/content-hash.js';
15
10
  // Schema context (for providing schemas to components)
16
11
  export { setSchemaContext, getSchemaContext } from '../schema-context.svelte';
17
-
18
12
  // Schema utilities (for working with schemas)
19
- export * from '../schema-utils/index';
20
-
13
+ export * from '../schema-utils/index.js';
21
14
  // Components (UI components for the admin interface)
22
15
  export { default as DocumentEditor } from '../components/admin/DocumentEditor.svelte';
23
16
  export { default as DocumentTypesList } from '../components/admin/DocumentTypesList.svelte';
24
17
  export { default as SchemaField } from '../components/admin/SchemaField.svelte';
25
18
  export { default as AdminApp } from '../components/AdminApp.svelte';
26
19
  export { default as Sidebar } from '../components/layout/Sidebar.svelte';
27
-
28
20
  // Field components
29
21
  export { default as StringField } from '../components/admin/fields/StringField.svelte';
30
22
  export { default as TextareaField } from '../components/admin/fields/TextareaField.svelte';
@@ -34,9 +26,6 @@ export { default as ImageField } from '../components/admin/fields/ImageField.sve
34
26
  export { default as SlugField } from '../components/admin/fields/SlugField.svelte';
35
27
  export { default as ArrayField } from '../components/admin/fields/ArrayField.svelte';
36
28
  export { default as ReferenceField } from '../components/admin/fields/ReferenceField.svelte';
37
-
38
29
  // Utility functions (browser-safe)
39
- export * from '../utils/index';
40
-
41
- export * from '../api/index';
42
- export type { ApiResponse } from '../api/index';
30
+ export * from '../utils/index.js';
31
+ export * from '../api/index.js';