@jini-ai/cms 0.1.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 (527) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +84 -0
  3. package/dist/content-types/agent-tools.d.ts +65 -0
  4. package/dist/content-types/agent-tools.d.ts.map +1 -0
  5. package/dist/content-types/agent-tools.js +172 -0
  6. package/dist/content-types/agent-tools.js.map +1 -0
  7. package/dist/content-types/cleanup.d.ts +118 -0
  8. package/dist/content-types/cleanup.d.ts.map +1 -0
  9. package/dist/content-types/cleanup.js +65 -0
  10. package/dist/content-types/cleanup.js.map +1 -0
  11. package/dist/content-types/errors.d.ts +90 -0
  12. package/dist/content-types/errors.d.ts.map +1 -0
  13. package/dist/content-types/errors.js +119 -0
  14. package/dist/content-types/errors.js.map +1 -0
  15. package/dist/content-types/field-defs.d.ts +25 -0
  16. package/dist/content-types/field-defs.d.ts.map +1 -0
  17. package/dist/content-types/field-defs.js +155 -0
  18. package/dist/content-types/field-defs.js.map +1 -0
  19. package/dist/content-types/index-provisioning.d.ts +94 -0
  20. package/dist/content-types/index-provisioning.d.ts.map +1 -0
  21. package/dist/content-types/index-provisioning.js +133 -0
  22. package/dist/content-types/index-provisioning.js.map +1 -0
  23. package/dist/content-types/index.d.ts +63 -0
  24. package/dist/content-types/index.d.ts.map +1 -0
  25. package/dist/content-types/index.js +36 -0
  26. package/dist/content-types/index.js.map +1 -0
  27. package/dist/content-types/lifecycle-dispatch.d.ts +38 -0
  28. package/dist/content-types/lifecycle-dispatch.d.ts.map +1 -0
  29. package/dist/content-types/lifecycle-dispatch.js +28 -0
  30. package/dist/content-types/lifecycle-dispatch.js.map +1 -0
  31. package/dist/content-types/lifecycle.d.ts +104 -0
  32. package/dist/content-types/lifecycle.d.ts.map +1 -0
  33. package/dist/content-types/lifecycle.js +143 -0
  34. package/dist/content-types/lifecycle.js.map +1 -0
  35. package/dist/content-types/list.d.ts +44 -0
  36. package/dist/content-types/list.d.ts.map +1 -0
  37. package/dist/content-types/list.js +13 -0
  38. package/dist/content-types/list.js.map +1 -0
  39. package/dist/content-types/repo.memory.d.ts +72 -0
  40. package/dist/content-types/repo.memory.d.ts.map +1 -0
  41. package/dist/content-types/repo.memory.js +71 -0
  42. package/dist/content-types/repo.memory.js.map +1 -0
  43. package/dist/content-types/tool-registrations.d.ts +65 -0
  44. package/dist/content-types/tool-registrations.d.ts.map +1 -0
  45. package/dist/content-types/tool-registrations.js +180 -0
  46. package/dist/content-types/tool-registrations.js.map +1 -0
  47. package/dist/content-types/types.d.ts +78 -0
  48. package/dist/content-types/types.d.ts.map +1 -0
  49. package/dist/content-types/types.js +32 -0
  50. package/dist/content-types/types.js.map +1 -0
  51. package/dist/content-types/write-service.d.ts +141 -0
  52. package/dist/content-types/write-service.d.ts.map +1 -0
  53. package/dist/content-types/write-service.js +180 -0
  54. package/dist/content-types/write-service.js.map +1 -0
  55. package/dist/core/commands/change-set.d.ts +98 -0
  56. package/dist/core/commands/change-set.d.ts.map +1 -0
  57. package/dist/core/commands/change-set.js +2 -0
  58. package/dist/core/commands/change-set.js.map +1 -0
  59. package/dist/core/commands/command.d.ts +168 -0
  60. package/dist/core/commands/command.d.ts.map +1 -0
  61. package/dist/core/commands/command.js +173 -0
  62. package/dist/core/commands/command.js.map +1 -0
  63. package/dist/core/index.d.ts +45 -0
  64. package/dist/core/index.d.ts.map +1 -0
  65. package/dist/core/index.js +43 -0
  66. package/dist/core/index.js.map +1 -0
  67. package/dist/core/ports.d.ts +139 -0
  68. package/dist/core/ports.d.ts.map +1 -0
  69. package/dist/core/ports.js +2 -0
  70. package/dist/core/ports.js.map +1 -0
  71. package/dist/core/tools/registration-kit.d.ts +308 -0
  72. package/dist/core/tools/registration-kit.d.ts.map +1 -0
  73. package/dist/core/tools/registration-kit.js +381 -0
  74. package/dist/core/tools/registration-kit.js.map +1 -0
  75. package/dist/entries/agent-tools.d.ts +78 -0
  76. package/dist/entries/agent-tools.d.ts.map +1 -0
  77. package/dist/entries/agent-tools.js +158 -0
  78. package/dist/entries/agent-tools.js.map +1 -0
  79. package/dist/entries/errors.d.ts +43 -0
  80. package/dist/entries/errors.d.ts.map +1 -0
  81. package/dist/entries/errors.js +59 -0
  82. package/dist/entries/errors.js.map +1 -0
  83. package/dist/entries/field-validation.d.ts +70 -0
  84. package/dist/entries/field-validation.d.ts.map +1 -0
  85. package/dist/entries/field-validation.js +87 -0
  86. package/dist/entries/field-validation.js.map +1 -0
  87. package/dist/entries/index.d.ts +55 -0
  88. package/dist/entries/index.d.ts.map +1 -0
  89. package/dist/entries/index.js +38 -0
  90. package/dist/entries/index.js.map +1 -0
  91. package/dist/entries/lifecycle-dispatch.d.ts +15 -0
  92. package/dist/entries/lifecycle-dispatch.d.ts.map +1 -0
  93. package/dist/entries/lifecycle-dispatch.js +16 -0
  94. package/dist/entries/lifecycle-dispatch.js.map +1 -0
  95. package/dist/entries/list.d.ts +47 -0
  96. package/dist/entries/list.d.ts.map +1 -0
  97. package/dist/entries/list.js +12 -0
  98. package/dist/entries/list.js.map +1 -0
  99. package/dist/entries/repo.memory.d.ts +64 -0
  100. package/dist/entries/repo.memory.d.ts.map +1 -0
  101. package/dist/entries/repo.memory.js +73 -0
  102. package/dist/entries/repo.memory.js.map +1 -0
  103. package/dist/entries/tool-registrations.d.ts +52 -0
  104. package/dist/entries/tool-registrations.d.ts.map +1 -0
  105. package/dist/entries/tool-registrations.js +141 -0
  106. package/dist/entries/tool-registrations.js.map +1 -0
  107. package/dist/entries/types.d.ts +55 -0
  108. package/dist/entries/types.d.ts.map +1 -0
  109. package/dist/entries/types.js +2 -0
  110. package/dist/entries/types.js.map +1 -0
  111. package/dist/entries/write-service.d.ts +202 -0
  112. package/dist/entries/write-service.d.ts.map +1 -0
  113. package/dist/entries/write-service.js +204 -0
  114. package/dist/entries/write-service.js.map +1 -0
  115. package/dist/identity/admin-crud-service.d.ts +252 -0
  116. package/dist/identity/admin-crud-service.d.ts.map +1 -0
  117. package/dist/identity/admin-crud-service.js +437 -0
  118. package/dist/identity/admin-crud-service.js.map +1 -0
  119. package/dist/identity/agent-tool-input.d.ts +58 -0
  120. package/dist/identity/agent-tool-input.d.ts.map +1 -0
  121. package/dist/identity/agent-tool-input.js +126 -0
  122. package/dist/identity/agent-tool-input.js.map +1 -0
  123. package/dist/identity/agent-tools.d.ts +101 -0
  124. package/dist/identity/agent-tools.d.ts.map +1 -0
  125. package/dist/identity/agent-tools.js +290 -0
  126. package/dist/identity/agent-tools.js.map +1 -0
  127. package/dist/identity/auth-service.d.ts +87 -0
  128. package/dist/identity/auth-service.d.ts.map +1 -0
  129. package/dist/identity/auth-service.js +141 -0
  130. package/dist/identity/auth-service.js.map +1 -0
  131. package/dist/identity/authorize.d.ts +90 -0
  132. package/dist/identity/authorize.d.ts.map +1 -0
  133. package/dist/identity/authorize.js +94 -0
  134. package/dist/identity/authorize.js.map +1 -0
  135. package/dist/identity/grant-service.d.ts +198 -0
  136. package/dist/identity/grant-service.d.ts.map +1 -0
  137. package/dist/identity/grant-service.js +361 -0
  138. package/dist/identity/grant-service.js.map +1 -0
  139. package/dist/identity/hasher.d.ts +39 -0
  140. package/dist/identity/hasher.d.ts.map +1 -0
  141. package/dist/identity/hasher.js +39 -0
  142. package/dist/identity/hasher.js.map +1 -0
  143. package/dist/identity/index.d.ts +59 -0
  144. package/dist/identity/index.d.ts.map +1 -0
  145. package/dist/identity/index.js +51 -0
  146. package/dist/identity/index.js.map +1 -0
  147. package/dist/identity/password-policy.d.ts +58 -0
  148. package/dist/identity/password-policy.d.ts.map +1 -0
  149. package/dist/identity/password-policy.js +67 -0
  150. package/dist/identity/password-policy.js.map +1 -0
  151. package/dist/identity/permission-migrations.d.ts +86 -0
  152. package/dist/identity/permission-migrations.d.ts.map +1 -0
  153. package/dist/identity/permission-migrations.js +67 -0
  154. package/dist/identity/permission-migrations.js.map +1 -0
  155. package/dist/identity/permissions.d.ts +35 -0
  156. package/dist/identity/permissions.d.ts.map +1 -0
  157. package/dist/identity/permissions.js +603 -0
  158. package/dist/identity/permissions.js.map +1 -0
  159. package/dist/identity/ports.d.ts +201 -0
  160. package/dist/identity/ports.d.ts.map +1 -0
  161. package/dist/identity/ports.js +2 -0
  162. package/dist/identity/ports.js.map +1 -0
  163. package/dist/identity/repo.memory.d.ts +164 -0
  164. package/dist/identity/repo.memory.d.ts.map +1 -0
  165. package/dist/identity/repo.memory.js +224 -0
  166. package/dist/identity/repo.memory.js.map +1 -0
  167. package/dist/identity/seed.d.ts +42 -0
  168. package/dist/identity/seed.d.ts.map +1 -0
  169. package/dist/identity/seed.js +277 -0
  170. package/dist/identity/seed.js.map +1 -0
  171. package/dist/identity/tool-registrations.d.ts +50 -0
  172. package/dist/identity/tool-registrations.d.ts.map +1 -0
  173. package/dist/identity/tool-registrations.js +419 -0
  174. package/dist/identity/tool-registrations.js.map +1 -0
  175. package/dist/identity/types.d.ts +185 -0
  176. package/dist/identity/types.d.ts.map +1 -0
  177. package/dist/identity/types.js +64 -0
  178. package/dist/identity/types.js.map +1 -0
  179. package/dist/identity/username.d.ts +12 -0
  180. package/dist/identity/username.d.ts.map +1 -0
  181. package/dist/identity/username.js +14 -0
  182. package/dist/identity/username.js.map +1 -0
  183. package/dist/media/agent-tools.d.ts +66 -0
  184. package/dist/media/agent-tools.d.ts.map +1 -0
  185. package/dist/media/agent-tools.js +131 -0
  186. package/dist/media/agent-tools.js.map +1 -0
  187. package/dist/media/blob-gc-lock.d.ts +37 -0
  188. package/dist/media/blob-gc-lock.d.ts.map +1 -0
  189. package/dist/media/blob-gc-lock.js +55 -0
  190. package/dist/media/blob-gc-lock.js.map +1 -0
  191. package/dist/media/blob-gc.d.ts +246 -0
  192. package/dist/media/blob-gc.d.ts.map +1 -0
  193. package/dist/media/blob-gc.js +254 -0
  194. package/dist/media/blob-gc.js.map +1 -0
  195. package/dist/media/blob-key.d.ts +28 -0
  196. package/dist/media/blob-key.d.ts.map +1 -0
  197. package/dist/media/blob-key.js +11 -0
  198. package/dist/media/blob-key.js.map +1 -0
  199. package/dist/media/blob-store.fs.d.ts +23 -0
  200. package/dist/media/blob-store.fs.d.ts.map +1 -0
  201. package/dist/media/blob-store.fs.js +48 -0
  202. package/dist/media/blob-store.fs.js.map +1 -0
  203. package/dist/media/blob-store.memory.d.ts +22 -0
  204. package/dist/media/blob-store.memory.d.ts.map +1 -0
  205. package/dist/media/blob-store.memory.js +23 -0
  206. package/dist/media/blob-store.memory.js.map +1 -0
  207. package/dist/media/content-type-sniffer.d.ts +49 -0
  208. package/dist/media/content-type-sniffer.d.ts.map +1 -0
  209. package/dist/media/content-type-sniffer.js +141 -0
  210. package/dist/media/content-type-sniffer.js.map +1 -0
  211. package/dist/media/image-transformer.d.ts +45 -0
  212. package/dist/media/image-transformer.d.ts.map +1 -0
  213. package/dist/media/image-transformer.js +23 -0
  214. package/dist/media/image-transformer.js.map +1 -0
  215. package/dist/media/image-transformer.sharp.d.ts +26 -0
  216. package/dist/media/image-transformer.sharp.d.ts.map +1 -0
  217. package/dist/media/image-transformer.sharp.js +91 -0
  218. package/dist/media/image-transformer.sharp.js.map +1 -0
  219. package/dist/media/index.d.ts +43 -0
  220. package/dist/media/index.d.ts.map +1 -0
  221. package/dist/media/index.js +31 -0
  222. package/dist/media/index.js.map +1 -0
  223. package/dist/media/media-service.d.ts +244 -0
  224. package/dist/media/media-service.d.ts.map +1 -0
  225. package/dist/media/media-service.js +345 -0
  226. package/dist/media/media-service.js.map +1 -0
  227. package/dist/media/ports.d.ts +142 -0
  228. package/dist/media/ports.d.ts.map +1 -0
  229. package/dist/media/ports.js +2 -0
  230. package/dist/media/ports.js.map +1 -0
  231. package/dist/media/rendition-service.d.ts +66 -0
  232. package/dist/media/rendition-service.d.ts.map +1 -0
  233. package/dist/media/rendition-service.js +135 -0
  234. package/dist/media/rendition-service.js.map +1 -0
  235. package/dist/media/repo.memory.d.ts +107 -0
  236. package/dist/media/repo.memory.d.ts.map +1 -0
  237. package/dist/media/repo.memory.js +131 -0
  238. package/dist/media/repo.memory.js.map +1 -0
  239. package/dist/media/tool-registrations.d.ts +42 -0
  240. package/dist/media/tool-registrations.d.ts.map +1 -0
  241. package/dist/media/tool-registrations.js +121 -0
  242. package/dist/media/tool-registrations.js.map +1 -0
  243. package/dist/media/transform-lock.d.ts +36 -0
  244. package/dist/media/transform-lock.d.ts.map +1 -0
  245. package/dist/media/transform-lock.js +50 -0
  246. package/dist/media/transform-lock.js.map +1 -0
  247. package/dist/media/transform-registry.d.ts +103 -0
  248. package/dist/media/transform-registry.d.ts.map +1 -0
  249. package/dist/media/transform-registry.js +87 -0
  250. package/dist/media/transform-registry.js.map +1 -0
  251. package/dist/media/transform-types.d.ts +82 -0
  252. package/dist/media/transform-types.d.ts.map +1 -0
  253. package/dist/media/transform-types.js +47 -0
  254. package/dist/media/transform-types.js.map +1 -0
  255. package/dist/media/types.d.ts +150 -0
  256. package/dist/media/types.d.ts.map +1 -0
  257. package/dist/media/types.js +26 -0
  258. package/dist/media/types.js.map +1 -0
  259. package/dist/navigation/agent-tools.d.ts +90 -0
  260. package/dist/navigation/agent-tools.d.ts.map +1 -0
  261. package/dist/navigation/agent-tools.js +225 -0
  262. package/dist/navigation/agent-tools.js.map +1 -0
  263. package/dist/navigation/contracts.d.ts +98 -0
  264. package/dist/navigation/contracts.d.ts.map +1 -0
  265. package/dist/navigation/contracts.js +70 -0
  266. package/dist/navigation/contracts.js.map +1 -0
  267. package/dist/navigation/index.d.ts +39 -0
  268. package/dist/navigation/index.d.ts.map +1 -0
  269. package/dist/navigation/index.js +30 -0
  270. package/dist/navigation/index.js.map +1 -0
  271. package/dist/navigation/menu-service.d.ts +256 -0
  272. package/dist/navigation/menu-service.d.ts.map +1 -0
  273. package/dist/navigation/menu-service.js +382 -0
  274. package/dist/navigation/menu-service.js.map +1 -0
  275. package/dist/navigation/ports.d.ts +147 -0
  276. package/dist/navigation/ports.d.ts.map +1 -0
  277. package/dist/navigation/ports.js +2 -0
  278. package/dist/navigation/ports.js.map +1 -0
  279. package/dist/navigation/read-model.d.ts +11 -0
  280. package/dist/navigation/read-model.d.ts.map +1 -0
  281. package/dist/navigation/read-model.js +27 -0
  282. package/dist/navigation/read-model.js.map +1 -0
  283. package/dist/navigation/reconcile.d.ts +57 -0
  284. package/dist/navigation/reconcile.d.ts.map +1 -0
  285. package/dist/navigation/reconcile.js +33 -0
  286. package/dist/navigation/reconcile.js.map +1 -0
  287. package/dist/navigation/repo.memory.d.ts +137 -0
  288. package/dist/navigation/repo.memory.d.ts.map +1 -0
  289. package/dist/navigation/repo.memory.js +95 -0
  290. package/dist/navigation/repo.memory.js.map +1 -0
  291. package/dist/navigation/resolver.d.ts +110 -0
  292. package/dist/navigation/resolver.d.ts.map +1 -0
  293. package/dist/navigation/resolver.js +131 -0
  294. package/dist/navigation/resolver.js.map +1 -0
  295. package/dist/navigation/tool-registrations.d.ts +43 -0
  296. package/dist/navigation/tool-registrations.d.ts.map +1 -0
  297. package/dist/navigation/tool-registrations.js +126 -0
  298. package/dist/navigation/tool-registrations.js.map +1 -0
  299. package/dist/navigation/types.d.ts +207 -0
  300. package/dist/navigation/types.d.ts.map +1 -0
  301. package/dist/navigation/types.js +14 -0
  302. package/dist/navigation/types.js.map +1 -0
  303. package/dist/presentation/index.d.ts +15 -0
  304. package/dist/presentation/index.d.ts.map +1 -0
  305. package/dist/presentation/index.js +15 -0
  306. package/dist/presentation/index.js.map +1 -0
  307. package/dist/presentation/presentation.d.ts +72 -0
  308. package/dist/presentation/presentation.d.ts.map +1 -0
  309. package/dist/presentation/presentation.js +51 -0
  310. package/dist/presentation/presentation.js.map +1 -0
  311. package/dist/presentation/repo.memory.d.ts +9 -0
  312. package/dist/presentation/repo.memory.d.ts.map +1 -0
  313. package/dist/presentation/repo.memory.js +21 -0
  314. package/dist/presentation/repo.memory.js.map +1 -0
  315. package/dist/server/index.d.ts +28 -0
  316. package/dist/server/index.d.ts.map +1 -0
  317. package/dist/server/index.js +28 -0
  318. package/dist/server/index.js.map +1 -0
  319. package/dist/settings/agent-tools.d.ts +83 -0
  320. package/dist/settings/agent-tools.d.ts.map +1 -0
  321. package/dist/settings/agent-tools.js +200 -0
  322. package/dist/settings/agent-tools.js.map +1 -0
  323. package/dist/settings/agent-writable-preferences.d.ts +67 -0
  324. package/dist/settings/agent-writable-preferences.d.ts.map +1 -0
  325. package/dist/settings/agent-writable-preferences.js +144 -0
  326. package/dist/settings/agent-writable-preferences.js.map +1 -0
  327. package/dist/settings/change-feed.d.ts +74 -0
  328. package/dist/settings/change-feed.d.ts.map +1 -0
  329. package/dist/settings/change-feed.js +61 -0
  330. package/dist/settings/change-feed.js.map +1 -0
  331. package/dist/settings/definitions-dispatch.d.ts +51 -0
  332. package/dist/settings/definitions-dispatch.d.ts.map +1 -0
  333. package/dist/settings/definitions-dispatch.js +86 -0
  334. package/dist/settings/definitions-dispatch.js.map +1 -0
  335. package/dist/settings/dictionaries/index.d.ts +45 -0
  336. package/dist/settings/dictionaries/index.d.ts.map +1 -0
  337. package/dist/settings/dictionaries/index.js +69 -0
  338. package/dist/settings/dictionaries/index.js.map +1 -0
  339. package/dist/settings/dictionaries/settings-dialog.ar.d.ts +3 -0
  340. package/dist/settings/dictionaries/settings-dialog.ar.d.ts.map +1 -0
  341. package/dist/settings/dictionaries/settings-dialog.ar.js +28 -0
  342. package/dist/settings/dictionaries/settings-dialog.ar.js.map +1 -0
  343. package/dist/settings/dictionaries/settings-dialog.bn.d.ts +3 -0
  344. package/dist/settings/dictionaries/settings-dialog.bn.d.ts.map +1 -0
  345. package/dist/settings/dictionaries/settings-dialog.bn.js +28 -0
  346. package/dist/settings/dictionaries/settings-dialog.bn.js.map +1 -0
  347. package/dist/settings/dictionaries/settings-dialog.de.d.ts +3 -0
  348. package/dist/settings/dictionaries/settings-dialog.de.d.ts.map +1 -0
  349. package/dist/settings/dictionaries/settings-dialog.de.js +28 -0
  350. package/dist/settings/dictionaries/settings-dialog.de.js.map +1 -0
  351. package/dist/settings/dictionaries/settings-dialog.es.d.ts +3 -0
  352. package/dist/settings/dictionaries/settings-dialog.es.d.ts.map +1 -0
  353. package/dist/settings/dictionaries/settings-dialog.es.js +28 -0
  354. package/dist/settings/dictionaries/settings-dialog.es.js.map +1 -0
  355. package/dist/settings/dictionaries/settings-dialog.fa.d.ts +3 -0
  356. package/dist/settings/dictionaries/settings-dialog.fa.d.ts.map +1 -0
  357. package/dist/settings/dictionaries/settings-dialog.fa.js +28 -0
  358. package/dist/settings/dictionaries/settings-dialog.fa.js.map +1 -0
  359. package/dist/settings/dictionaries/settings-dialog.fr.d.ts +3 -0
  360. package/dist/settings/dictionaries/settings-dialog.fr.d.ts.map +1 -0
  361. package/dist/settings/dictionaries/settings-dialog.fr.js +28 -0
  362. package/dist/settings/dictionaries/settings-dialog.fr.js.map +1 -0
  363. package/dist/settings/dictionaries/settings-dialog.hi.d.ts +3 -0
  364. package/dist/settings/dictionaries/settings-dialog.hi.d.ts.map +1 -0
  365. package/dist/settings/dictionaries/settings-dialog.hi.js +28 -0
  366. package/dist/settings/dictionaries/settings-dialog.hi.js.map +1 -0
  367. package/dist/settings/dictionaries/settings-dialog.hu.d.ts +3 -0
  368. package/dist/settings/dictionaries/settings-dialog.hu.d.ts.map +1 -0
  369. package/dist/settings/dictionaries/settings-dialog.hu.js +28 -0
  370. package/dist/settings/dictionaries/settings-dialog.hu.js.map +1 -0
  371. package/dist/settings/dictionaries/settings-dialog.id.d.ts +3 -0
  372. package/dist/settings/dictionaries/settings-dialog.id.d.ts.map +1 -0
  373. package/dist/settings/dictionaries/settings-dialog.id.js +28 -0
  374. package/dist/settings/dictionaries/settings-dialog.id.js.map +1 -0
  375. package/dist/settings/dictionaries/settings-dialog.it.d.ts +3 -0
  376. package/dist/settings/dictionaries/settings-dialog.it.d.ts.map +1 -0
  377. package/dist/settings/dictionaries/settings-dialog.it.js +28 -0
  378. package/dist/settings/dictionaries/settings-dialog.it.js.map +1 -0
  379. package/dist/settings/dictionaries/settings-dialog.ja.d.ts +3 -0
  380. package/dist/settings/dictionaries/settings-dialog.ja.d.ts.map +1 -0
  381. package/dist/settings/dictionaries/settings-dialog.ja.js +28 -0
  382. package/dist/settings/dictionaries/settings-dialog.ja.js.map +1 -0
  383. package/dist/settings/dictionaries/settings-dialog.ko.d.ts +3 -0
  384. package/dist/settings/dictionaries/settings-dialog.ko.d.ts.map +1 -0
  385. package/dist/settings/dictionaries/settings-dialog.ko.js +28 -0
  386. package/dist/settings/dictionaries/settings-dialog.ko.js.map +1 -0
  387. package/dist/settings/dictionaries/settings-dialog.pl.d.ts +3 -0
  388. package/dist/settings/dictionaries/settings-dialog.pl.d.ts.map +1 -0
  389. package/dist/settings/dictionaries/settings-dialog.pl.js +28 -0
  390. package/dist/settings/dictionaries/settings-dialog.pl.js.map +1 -0
  391. package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts +3 -0
  392. package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts.map +1 -0
  393. package/dist/settings/dictionaries/settings-dialog.pt-BR.js +28 -0
  394. package/dist/settings/dictionaries/settings-dialog.pt-BR.js.map +1 -0
  395. package/dist/settings/dictionaries/settings-dialog.ru.d.ts +3 -0
  396. package/dist/settings/dictionaries/settings-dialog.ru.d.ts.map +1 -0
  397. package/dist/settings/dictionaries/settings-dialog.ru.js +28 -0
  398. package/dist/settings/dictionaries/settings-dialog.ru.js.map +1 -0
  399. package/dist/settings/dictionaries/settings-dialog.th.d.ts +3 -0
  400. package/dist/settings/dictionaries/settings-dialog.th.d.ts.map +1 -0
  401. package/dist/settings/dictionaries/settings-dialog.th.js +28 -0
  402. package/dist/settings/dictionaries/settings-dialog.th.js.map +1 -0
  403. package/dist/settings/dictionaries/settings-dialog.tr.d.ts +3 -0
  404. package/dist/settings/dictionaries/settings-dialog.tr.d.ts.map +1 -0
  405. package/dist/settings/dictionaries/settings-dialog.tr.js +28 -0
  406. package/dist/settings/dictionaries/settings-dialog.tr.js.map +1 -0
  407. package/dist/settings/dictionaries/settings-dialog.uk.d.ts +3 -0
  408. package/dist/settings/dictionaries/settings-dialog.uk.d.ts.map +1 -0
  409. package/dist/settings/dictionaries/settings-dialog.uk.js +28 -0
  410. package/dist/settings/dictionaries/settings-dialog.uk.js.map +1 -0
  411. package/dist/settings/dictionaries/settings-dialog.ur.d.ts +3 -0
  412. package/dist/settings/dictionaries/settings-dialog.ur.d.ts.map +1 -0
  413. package/dist/settings/dictionaries/settings-dialog.ur.js +28 -0
  414. package/dist/settings/dictionaries/settings-dialog.ur.js.map +1 -0
  415. package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts +3 -0
  416. package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts.map +1 -0
  417. package/dist/settings/dictionaries/settings-dialog.zh-CN.js +28 -0
  418. package/dist/settings/dictionaries/settings-dialog.zh-CN.js.map +1 -0
  419. package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts +3 -0
  420. package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts.map +1 -0
  421. package/dist/settings/dictionaries/settings-dialog.zh-TW.js +28 -0
  422. package/dist/settings/dictionaries/settings-dialog.zh-TW.js.map +1 -0
  423. package/dist/settings/ensure-definitions.d.ts +88 -0
  424. package/dist/settings/ensure-definitions.d.ts.map +1 -0
  425. package/dist/settings/ensure-definitions.js +91 -0
  426. package/dist/settings/ensure-definitions.js.map +1 -0
  427. package/dist/settings/errors.d.ts +36 -0
  428. package/dist/settings/errors.d.ts.map +1 -0
  429. package/dist/settings/errors.js +40 -0
  430. package/dist/settings/errors.js.map +1 -0
  431. package/dist/settings/index.d.ts +37 -0
  432. package/dist/settings/index.d.ts.map +1 -0
  433. package/dist/settings/index.js +36 -0
  434. package/dist/settings/index.js.map +1 -0
  435. package/dist/settings/ports.d.ts +117 -0
  436. package/dist/settings/ports.d.ts.map +1 -0
  437. package/dist/settings/ports.js +2 -0
  438. package/dist/settings/ports.js.map +1 -0
  439. package/dist/settings/purge-service.d.ts +53 -0
  440. package/dist/settings/purge-service.d.ts.map +1 -0
  441. package/dist/settings/purge-service.js +105 -0
  442. package/dist/settings/purge-service.js.map +1 -0
  443. package/dist/settings/repo.memory.d.ts +119 -0
  444. package/dist/settings/repo.memory.d.ts.map +1 -0
  445. package/dist/settings/repo.memory.js +199 -0
  446. package/dist/settings/repo.memory.js.map +1 -0
  447. package/dist/settings/settings.d.ts +124 -0
  448. package/dist/settings/settings.d.ts.map +1 -0
  449. package/dist/settings/settings.js +238 -0
  450. package/dist/settings/settings.js.map +1 -0
  451. package/dist/settings/tool-registrations.d.ts +56 -0
  452. package/dist/settings/tool-registrations.d.ts.map +1 -0
  453. package/dist/settings/tool-registrations.js +240 -0
  454. package/dist/settings/tool-registrations.js.map +1 -0
  455. package/dist/settings/types.d.ts +125 -0
  456. package/dist/settings/types.d.ts.map +1 -0
  457. package/dist/settings/types.js +3 -0
  458. package/dist/settings/types.js.map +1 -0
  459. package/dist/settings/ui-tab-definitions.d.ts +41 -0
  460. package/dist/settings/ui-tab-definitions.d.ts.map +1 -0
  461. package/dist/settings/ui-tab-definitions.js +148 -0
  462. package/dist/settings/ui-tab-definitions.js.map +1 -0
  463. package/dist/settings/write-service.d.ts +314 -0
  464. package/dist/settings/write-service.d.ts.map +1 -0
  465. package/dist/settings/write-service.js +677 -0
  466. package/dist/settings/write-service.js.map +1 -0
  467. package/dist/taxonomy/agent-tools.d.ts +76 -0
  468. package/dist/taxonomy/agent-tools.d.ts.map +1 -0
  469. package/dist/taxonomy/agent-tools.js +178 -0
  470. package/dist/taxonomy/agent-tools.js.map +1 -0
  471. package/dist/taxonomy/content-lookup.d.ts +45 -0
  472. package/dist/taxonomy/content-lookup.d.ts.map +1 -0
  473. package/dist/taxonomy/content-lookup.js +9 -0
  474. package/dist/taxonomy/content-lookup.js.map +1 -0
  475. package/dist/taxonomy/index.d.ts +38 -0
  476. package/dist/taxonomy/index.d.ts.map +1 -0
  477. package/dist/taxonomy/index.js +38 -0
  478. package/dist/taxonomy/index.js.map +1 -0
  479. package/dist/taxonomy/list.d.ts +39 -0
  480. package/dist/taxonomy/list.d.ts.map +1 -0
  481. package/dist/taxonomy/list.js +19 -0
  482. package/dist/taxonomy/list.js.map +1 -0
  483. package/dist/taxonomy/merge-term.d.ts +94 -0
  484. package/dist/taxonomy/merge-term.d.ts.map +1 -0
  485. package/dist/taxonomy/merge-term.js +65 -0
  486. package/dist/taxonomy/merge-term.js.map +1 -0
  487. package/dist/taxonomy/repo.memory.d.ts +160 -0
  488. package/dist/taxonomy/repo.memory.d.ts.map +1 -0
  489. package/dist/taxonomy/repo.memory.js +171 -0
  490. package/dist/taxonomy/repo.memory.js.map +1 -0
  491. package/dist/taxonomy/validation-chain.d.ts +114 -0
  492. package/dist/taxonomy/validation-chain.d.ts.map +1 -0
  493. package/dist/taxonomy/validation-chain.js +152 -0
  494. package/dist/taxonomy/validation-chain.js.map +1 -0
  495. package/dist/taxonomy/write-service.d.ts +387 -0
  496. package/dist/taxonomy/write-service.d.ts.map +1 -0
  497. package/dist/taxonomy/write-service.js +350 -0
  498. package/dist/taxonomy/write-service.js.map +1 -0
  499. package/dist/workspace/agent-tools.d.ts +67 -0
  500. package/dist/workspace/agent-tools.d.ts.map +1 -0
  501. package/dist/workspace/agent-tools.js +103 -0
  502. package/dist/workspace/agent-tools.js.map +1 -0
  503. package/dist/workspace/create.d.ts +116 -0
  504. package/dist/workspace/create.d.ts.map +1 -0
  505. package/dist/workspace/create.js +69 -0
  506. package/dist/workspace/create.js.map +1 -0
  507. package/dist/workspace/delete.d.ts +50 -0
  508. package/dist/workspace/delete.d.ts.map +1 -0
  509. package/dist/workspace/delete.js +24 -0
  510. package/dist/workspace/delete.js.map +1 -0
  511. package/dist/workspace/index.d.ts +27 -0
  512. package/dist/workspace/index.d.ts.map +1 -0
  513. package/dist/workspace/index.js +27 -0
  514. package/dist/workspace/index.js.map +1 -0
  515. package/dist/workspace/repo.memory.d.ts +34 -0
  516. package/dist/workspace/repo.memory.d.ts.map +1 -0
  517. package/dist/workspace/repo.memory.js +50 -0
  518. package/dist/workspace/repo.memory.js.map +1 -0
  519. package/dist/workspace/tool-registrations.d.ts +38 -0
  520. package/dist/workspace/tool-registrations.d.ts.map +1 -0
  521. package/dist/workspace/tool-registrations.js +71 -0
  522. package/dist/workspace/tool-registrations.js.map +1 -0
  523. package/dist/workspace/update.d.ts +52 -0
  524. package/dist/workspace/update.d.ts.map +1 -0
  525. package/dist/workspace/update.js +41 -0
  526. package/dist/workspace/update.js.map +1 -0
  527. package/package.json +149 -0
@@ -0,0 +1,126 @@
1
+ import { buildDomainRegistrations, indexCatalogById, requireInputRecord, requireNumber, requireString, requireToolPermission, withSchemaOnRejection, } from "../core/tools/registration-kit.js";
2
+ import { menusAgentToolCatalog } from "./agent-tools.js";
3
+ import { assignLocation, createMenu, MenuNotFoundError, MenuValidationError, updateMenuTree } from "./menu-service.js";
4
+ const CATALOG_BY_ID = indexCatalogById(menusAgentToolCatalog);
5
+ /**
6
+ * This wiring layer's OWN risk classification, authored from what each handler below actually
7
+ * calls. See `DerivedRiskByToolId` in the kit for why it is independent of the catalog's own
8
+ * `sideEffects` declaration.
9
+ */
10
+ export const menusDerivedRisk = new Map([
11
+ // -> menuRepo.list: reads only.
12
+ ["menus_list_menus", "none"],
13
+ // -> menuRepo.findById: reads only.
14
+ ["menus_get_menu", "none"],
15
+ // -> createMenu (menu-service.ts): repo.save + outbox.enqueue.
16
+ ["menus_create_menu", "mutates-durable-state"],
17
+ // -> updateMenuTree (menu-service.ts): repo.save + outbox.enqueue.
18
+ ["menus_update_menu_tree", "mutates-durable-state"],
19
+ // -> assignLocation (menu-service.ts): repo.save (maybe twice, on displacement) + bindingRepo.upsert
20
+ // + outbox.enqueue. Never a delete: deleteMenu is deliberately not exposed (see
21
+ // navigation/agent-tools.ts's file header).
22
+ ["menus_assign_location", "mutates-durable-state"],
23
+ ]);
24
+ /** The only Menus rejection worth decorating with the published schema — a shape problem a different input would fix. */
25
+ function isMenusShapeRejection(error) {
26
+ return error instanceof MenuValidationError;
27
+ }
28
+ /**
29
+ * Projects a `NavMenuEntry` into an explicit model-facing shape rather than returning the domain
30
+ * record verbatim — the same discipline Forms' `toFormDefinitionView` applies. `items` is
31
+ * deep-cloned via a JSON round-trip (the tree is JSON-serializable by construction, `types.ts`'s
32
+ * `NavMenuDoc` doc comment) rather than shallow-copied, since a tool caller pushing onto a nested
33
+ * `children` array must not be able to mutate domain state through the returned view the way a
34
+ * single top-level spread could not protect against.
35
+ */
36
+ function toMenuToolView(menu) {
37
+ return {
38
+ id: menu.id,
39
+ slug: menu.slug,
40
+ title: menu.title,
41
+ status: menu.status,
42
+ items: JSON.parse(JSON.stringify(menu.doc.items)),
43
+ locations: [...menu.locations],
44
+ version: menu.version,
45
+ };
46
+ }
47
+ function menusDeps(routeDeps) {
48
+ return { repo: routeDeps.menuRepo, clock: routeDeps.clock, idGen: routeDeps.idGen, outbox: routeDeps.outbox };
49
+ }
50
+ export function buildMenusRegistrations(routeDeps) {
51
+ const handlers = {
52
+ menus_list_menus: async (ctx) => {
53
+ await requireToolPermission(routeDeps, { principalId: ctx.principal.id, permission: "admin.menus.read", entityType: "menu" });
54
+ const menus = await routeDeps.menuRepo.list({ workspaceId: routeDeps.workspaceId });
55
+ return { menus: menus.map(toMenuToolView) };
56
+ },
57
+ menus_get_menu: async (ctx) => {
58
+ const menuId = requireString(requireInputRecord(ctx.input), "menuId");
59
+ await requireToolPermission(routeDeps, { principalId: ctx.principal.id, permission: "admin.menus.read", entityType: "menu", entityId: menuId });
60
+ const menu = await routeDeps.menuRepo.findById({ workspaceId: routeDeps.workspaceId, id: menuId });
61
+ if (!menu)
62
+ throw new MenuNotFoundError(`menu '${menuId}' was not found`);
63
+ return { menu: toMenuToolView(menu) };
64
+ },
65
+ menus_create_menu: async (ctx) => {
66
+ const input = requireInputRecord(ctx.input);
67
+ await requireToolPermission(routeDeps, { principalId: ctx.principal.id, permission: "admin.menus.create", entityType: "menu" });
68
+ return withSchemaOnRejection({ toolId: "menus_create_menu", catalog: CATALOG_BY_ID, isShapeRejection: isMenusShapeRejection }, async () => {
69
+ const { menu } = await createMenu({
70
+ deps: menusDeps(routeDeps),
71
+ input: {
72
+ workspaceId: routeDeps.workspaceId,
73
+ title: requireString(input, "title"),
74
+ slug: requireString(input, "slug"),
75
+ items: Array.isArray(input.items) ? input.items : undefined,
76
+ },
77
+ });
78
+ return { menu: toMenuToolView(menu) };
79
+ });
80
+ },
81
+ menus_update_menu_tree: async (ctx) => {
82
+ const input = requireInputRecord(ctx.input);
83
+ const menuId = requireString(input, "menuId");
84
+ await requireToolPermission(routeDeps, { principalId: ctx.principal.id, permission: "admin.menus.update", entityType: "menu", entityId: menuId });
85
+ if (!Array.isArray(input.items))
86
+ throw new Error("'items' (array) is required");
87
+ return withSchemaOnRejection({ toolId: "menus_update_menu_tree", catalog: CATALOG_BY_ID, isShapeRejection: isMenusShapeRejection }, async () => {
88
+ const { menu } = await updateMenuTree({
89
+ deps: menusDeps(routeDeps),
90
+ input: {
91
+ workspaceId: routeDeps.workspaceId,
92
+ id: menuId,
93
+ expectedVersion: requireNumber(input, "expectedVersion"),
94
+ title: typeof input.title === "string" ? input.title : undefined,
95
+ slug: typeof input.slug === "string" ? input.slug : undefined,
96
+ items: input.items,
97
+ },
98
+ });
99
+ return { menu: toMenuToolView(menu) };
100
+ });
101
+ },
102
+ menus_assign_location: async (ctx) => {
103
+ const input = requireInputRecord(ctx.input);
104
+ const menuId = requireString(input, "menuId");
105
+ await requireToolPermission(routeDeps, { principalId: ctx.principal.id, permission: "admin.menus.assign", entityType: "menu", entityId: menuId });
106
+ const { menu, binding, displacedMenu } = await assignLocation({
107
+ deps: { ...menusDeps(routeDeps), bindingRepo: routeDeps.navLocationBindingRepo },
108
+ input: { workspaceId: routeDeps.workspaceId, menuId, locationKey: requireString(input, "locationKey") },
109
+ });
110
+ return {
111
+ menu: toMenuToolView(menu),
112
+ binding: { locationKey: binding.locationKey, menuId: binding.menuId },
113
+ displacedMenu: displacedMenu ? toMenuToolView(displacedMenu) : null,
114
+ };
115
+ },
116
+ };
117
+ // No `unwiredToolIds`: Menus wires its ENTIRE catalog, same tripwire discipline as Forms.
118
+ return buildDomainRegistrations({
119
+ domain: "menus",
120
+ catalogModule: "navigation/agent-tools.ts",
121
+ catalog: CATALOG_BY_ID,
122
+ handlers,
123
+ derivedRisk: menusDerivedRisk,
124
+ });
125
+ }
126
+ //# sourceMappingURL=tool-registrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registrations.js","sourceRoot":"","sources":["../../src/navigation/tool-registrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * @file Core type definitions for the `navigation` library.
3
+ *
4
+ * Purpose:
5
+ * Menus/nav are **navigation trees as editable content**. A menu is a generic
6
+ * content entry (type `menu`); its ordered, nested item tree lives in the
7
+ * entry's validated `bodyJson` as a `navigation`-namespaced block vocabulary.
8
+ * Link targets that point at other content (entries, taxonomy terms) are `ref`
9
+ * values so the write-chokepoint extracts them into the rebuildable
10
+ * `entry_refs` index (where-used + safe-delete), exactly as the media library reuses it
11
+ * for media. External URLs and named routes carry no ref.
12
+ *
13
+ * How it relates to the project:
14
+ * - `core/ports.ts` supplies the shared primitives (`UUID`, `JsonObject`, …).
15
+ * - `navigation/ports.ts` declares the one rule-of-two port this library adds
16
+ * (`NavLocationBindingRepoPort`) plus the typed-call resolver contract.
17
+ * - The theme renderer consumes `ResolvedNav` (data only — no theme code
18
+ * resolves refs; the render-IR boundary).
19
+ *
20
+ * Architectural role:
21
+ * INTERFACES + TYPES ONLY (no feature logic). This is the design-frozen shape
22
+ * this library introduces; the entries repo, revisions, `entry_refs`, and the command
23
+ * gateway are reused unchanged from the generic entries model.
24
+ */
25
+ import type { ISODateTime, JsonObject, UUID } from "../core/ports.js";
26
+ /**
27
+ * `menu` ships as a **seeded content-type registry row**, like
28
+ * `post`/`page`/`media`. Core may special-case it in admin UI/rendering, never
29
+ * in storage. The extension-field owner namespace for menu-level fields
30
+ * (`fields.ext.navigation.*`) is `navigation`.
31
+ */
32
+ export declare const NAV_MENU_CONTENT_TYPE: "menu";
33
+ export declare const NAV_FIELD_NAMESPACE: "navigation";
34
+ /** Discriminator marking an entry's `bodyJson` as a navigation tree document. */
35
+ export declare const NAV_DOC_TYPE: "menu";
36
+ /**
37
+ * The v1 link-target kinds. `entryRef`/`termRef` are integrity-tracked (their
38
+ * ids are extracted to `entry_refs`); `url`/`route` are validated-only.
39
+ */
40
+ export type NavTargetKind = "entryRef" | "termRef" | "url" | "route";
41
+ /**
42
+ * Reserved-but-rejected target kinds — the named deferred seams.
43
+ * Recognized by the validator and **rejected with a clear "coming later" error**
44
+ * until their resolver stage ships, so the discriminant never has to widen in a
45
+ * breaking way. `dynamicQuery` needs a total/bounded expression
46
+ * language; `content` needs a mega-menu block-embed resolver.
47
+ */
48
+ export type ReservedNavTargetKind = "dynamicQuery" | "content";
49
+ /** A link to another content entry (page/post/media/…). Integrity-tracked. */
50
+ export interface NavEntryTarget {
51
+ readonly kind: "entryRef";
52
+ /** Target entry id. Extracted to `entry_refs` at the write chokepoint. */
53
+ readonly entryId: UUID;
54
+ }
55
+ /** A link to a taxonomy term (category/tag archive). Integrity-tracked. */
56
+ export interface NavTermTarget {
57
+ readonly kind: "termRef";
58
+ /** Target term id. Extracted to `entry_refs` (target kind = term). */
59
+ readonly termId: UUID;
60
+ /** Taxonomy the term belongs to, for archive-route resolution. */
61
+ readonly taxonomy: string;
62
+ }
63
+ /** An absolute or site-relative external URL. Validated, not ref-tracked. */
64
+ export interface NavUrlTarget {
65
+ readonly kind: "url";
66
+ /** Sanitized/validated at write time (scheme allowlist, no `javascript:`). */
67
+ readonly href: string;
68
+ }
69
+ /** A named core route (e.g. `home`, `search`), resolved by the routing lib. */
70
+ export interface NavRouteTarget {
71
+ readonly kind: "route";
72
+ readonly route: string;
73
+ /** Optional static params passed to the route resolver. */
74
+ readonly params?: JsonObject | undefined;
75
+ }
76
+ /** v1 discriminated union of link targets. */
77
+ export type NavTarget = NavEntryTarget | NavTermTarget | NavUrlTarget | NavRouteTarget;
78
+ /**
79
+ * Presentational attributes carried on an item, kept separate from identity and
80
+ * target so the render model can pass them through without interpreting them.
81
+ */
82
+ export interface NavItemAttrs {
83
+ readonly openInNewTab?: boolean | undefined;
84
+ /** `rel` tokens (e.g. `nofollow`), validated against an allowlist. */
85
+ readonly rel?: string | undefined;
86
+ /** Theme-facing CSS class hint. */
87
+ readonly cssClass?: string | undefined;
88
+ /** Optional description/subtitle (mega-menu-adjacent, cosmetic in v1). */
89
+ readonly description?: string | undefined;
90
+ /** Icon token resolved by the theme's icon set, if any. */
91
+ readonly icon?: string | undefined;
92
+ }
93
+ /**
94
+ * One node in the menu tree. **Ordering = array order** among siblings;
95
+ * **nesting = `children`**. `id` is a **stable ULID minted on item creation and
96
+ * preserved across edits/moves** (never regenerated on reorder) — the stable
97
+ * identity `entry_refs` locators and per-item caches depend on (a discipline
98
+ * discipline applied within the doc). The chokepoint validator enforces id
99
+ * stability and bounded depth/breadth.
100
+ */
101
+ export interface NavItemNode {
102
+ readonly id: UUID;
103
+ /** Editable display label. Falls back to the target's title when absent. */
104
+ readonly label?: string | undefined;
105
+ readonly target: NavTarget;
106
+ readonly attrs?: NavItemAttrs | undefined;
107
+ /** Child items (one level of nesting per depth). */
108
+ readonly children?: readonly NavItemNode[] | undefined;
109
+ }
110
+ /**
111
+ * The full navigation document stored in a menu entry's `bodyJson`. Shaped so it
112
+ * satisfies `JsonObject` structurally (all fields are JSON-serializable), which
113
+ * keeps it inside the storage contract and the serializable
114
+ * ABI.
115
+ */
116
+ export interface NavMenuDoc {
117
+ readonly type: typeof NAV_DOC_TYPE;
118
+ /** Doc-schema version, so the validator can migrate shapes later. */
119
+ readonly version: number;
120
+ readonly items: readonly NavItemNode[];
121
+ }
122
+ export type MenuStatus = "draft" | "published" | "trash";
123
+ /**
124
+ * A typed read model over a `type='menu'` entries row (universal
125
+ * columns) plus the parsed `bodyJson` tree and the `navigation`-namespaced
126
+ * fields. This is a **projection**, not a new table — menus are entries.
127
+ */
128
+ export interface NavMenuEntry {
129
+ readonly id: UUID;
130
+ readonly workspaceId: UUID;
131
+ /** Stable machine handle, e.g. `primary-nav` (the entry `slug`). */
132
+ readonly slug: string;
133
+ /** Human menu name (the entry `title`). */
134
+ readonly title: string;
135
+ readonly status: MenuStatus;
136
+ /** The parsed navigation tree (entry `bodyJson`). */
137
+ readonly doc: NavMenuDoc;
138
+ /**
139
+ * Theme-location keys this menu is assigned to fill
140
+ * (`fields.ext.navigation.locations`). Source of truth for assignment;
141
+ * the binding index (below) is the derived, uniqueness-enforcing projection.
142
+ */
143
+ readonly locations: readonly string[];
144
+ readonly updatedAt: ISODateTime;
145
+ readonly version: number;
146
+ }
147
+ /** A theme-registered location key (e.g. `primary`, `footer`, `social`). */
148
+ export type NavLocationKey = string;
149
+ /**
150
+ * A row of the derived `nav_location_bindings` index.
151
+ * **Derived + rebuildable** from `NavMenuEntry.locations` at the write
152
+ * chokepoint (same species as `entry_refs`), NOT a source of truth
153
+ * and NOT revision-generating. Its purpose is a single indexed location→menu
154
+ * lookup at render time and a **`UNIQUE (workspace_id, location_key)`**
155
+ * constraint that enforces *exactly one menu per location* — an invariant a
156
+ * per-entry JSON field cannot express.
157
+ */
158
+ export interface NavLocationBindingRow {
159
+ readonly workspaceId: UUID;
160
+ readonly locationKey: NavLocationKey;
161
+ /** The menu entry currently bound to this location. */
162
+ readonly menuId: UUID;
163
+ /** When the binding was last (re)assigned; for audit/debug only. */
164
+ readonly boundAt: ISODateTime;
165
+ }
166
+ /**
167
+ * A theme/plugin-registered navigation location (registered via
168
+ * `navigation.locations.register`). Registration is data; a menu may be bound to
169
+ * an **unregistered** key so assignments survive a theme switch (fixes WP's
170
+ * "lose your menus on theme change" sin).
171
+ */
172
+ export interface NavLocationDescriptor {
173
+ readonly key: NavLocationKey;
174
+ /** Admin-facing label. */
175
+ readonly label: string;
176
+ /** Which theme/plugin registered it (attribution + orphan detection). */
177
+ readonly registeredBy: string;
178
+ readonly description?: string | undefined;
179
+ }
180
+ /**
181
+ * A single item after resolution: target → concrete `href` + display `label` +
182
+ * `isActive`/`isCurrent` computed against the current route. Refs are resolved
183
+ * by core (routing/entries/taxonomy), never by theme code. Items whose target
184
+ * has been trashed/deleted are resolved to `available: false` so the theme can
185
+ * omit them rather than emit a dead link.
186
+ */
187
+ export interface ResolvedNavItem {
188
+ readonly id: UUID;
189
+ readonly label: string;
190
+ /** Fully-resolved href, or `null` when the target is unavailable. */
191
+ readonly href: string | null;
192
+ readonly available: boolean;
193
+ /** True when this item's href matches the current route. */
194
+ readonly isCurrent: boolean;
195
+ /** True when this or a descendant is current (for open/expanded state). */
196
+ readonly isActive: boolean;
197
+ readonly attrs?: NavItemAttrs | undefined;
198
+ readonly children: readonly ResolvedNavItem[];
199
+ }
200
+ /** A fully-resolved menu ready for a theme to render at a location. */
201
+ export interface ResolvedNav {
202
+ readonly menuId: UUID;
203
+ readonly locationKey: NavLocationKey;
204
+ readonly title: string;
205
+ readonly items: readonly ResolvedNavItem[];
206
+ }
207
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/navigation/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Content-type identity
3
+ // ---------------------------------------------------------------------------
4
+ /**
5
+ * `menu` ships as a **seeded content-type registry row**, like
6
+ * `post`/`page`/`media`. Core may special-case it in admin UI/rendering, never
7
+ * in storage. The extension-field owner namespace for menu-level fields
8
+ * (`fields.ext.navigation.*`) is `navigation`.
9
+ */
10
+ export const NAV_MENU_CONTENT_TYPE = "menu";
11
+ export const NAV_FIELD_NAMESPACE = "navigation";
12
+ /** Discriminator marking an entry's `bodyJson` as a navigation tree document. */
13
+ export const NAV_DOC_TYPE = "menu";
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/navigation/types.ts"],"names":[],"mappings":"AA0BA,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAe,CAAC;AACrD,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAqB,CAAC;AAEzD,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAe,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @file Public surface (barrel) for the `presentation` library.
3
+ *
4
+ * Presentation owns one thing: which theme a workspace is currently presenting under. It is a
5
+ * distinct domain from `settings` (the generic definitions/values/revision-ledger model) even
6
+ * though a host's settings migration reads from it — the dependency runs settings -> presentation
7
+ * and never the other way, which is what lets the two ship as separate subpaths.
8
+ */
9
+ export { ALLOWED_THEME_IDS, getPresentationSettings, setActiveTheme, PresentationSettingsNotFoundError, PresentationSettingsValidationError, type GetPresentationSettingsRequired, type PresentationOptional, type PresentationSettingsRecord, type PresentationSettingsRepoPort, type SetActiveThemeDeps, type SetActiveThemeRequired, type ThemeId, } from "./presentation.js";
10
+ export { InMemoryPresentationSettingsRepo } from "./repo.memory.js";
11
+ /**
12
+ * There is no SQLite adapter export here, deliberately — same reasoning as `workspace/index.ts`:
13
+ * a concrete adapter names a host's schema, so hosts compose their own against the port above.
14
+ */
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/presentation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,cAAc,EACd,iCAAiC,EACjC,mCAAmC,EACnC,KAAK,+BAA+B,EACpC,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,OAAO,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAC;AAEpE;;;GAGG"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @file Public surface (barrel) for the `presentation` library.
3
+ *
4
+ * Presentation owns one thing: which theme a workspace is currently presenting under. It is a
5
+ * distinct domain from `settings` (the generic definitions/values/revision-ledger model) even
6
+ * though a host's settings migration reads from it — the dependency runs settings -> presentation
7
+ * and never the other way, which is what lets the two ship as separate subpaths.
8
+ */
9
+ export { ALLOWED_THEME_IDS, getPresentationSettings, setActiveTheme, PresentationSettingsNotFoundError, PresentationSettingsValidationError, } from "./presentation.js";
10
+ export { InMemoryPresentationSettingsRepo } from "./repo.memory.js";
11
+ /**
12
+ * There is no SQLite adapter export here, deliberately — same reasoning as `workspace/index.ts`:
13
+ * a concrete adapter names a host's schema, so hosts compose their own against the port above.
14
+ */
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/presentation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,cAAc,EACd,iCAAiC,EACjC,mCAAmC,GAQpC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAC;AAEpE;;;GAGG"}
@@ -0,0 +1,72 @@
1
+ import type { ClockPort, UUID } from "../core/ports.js";
2
+ /**
3
+ * @file Presentation settings — the active-theme identity of a workspace.
4
+ *
5
+ * Deliberately theme-engine agnostic: this module validates an `activeThemeId` against a set of
6
+ * ids the caller supplies, and stores it. It does not discover, load, or render themes — a host
7
+ * owns theme discovery and passes the resulting ids in via `availableThemeIds`. That is what keeps
8
+ * this domain free of any template-engine or filesystem dependency.
9
+ */
10
+ /**
11
+ * Legacy hardcoded theme ids. Retained as the fallback allowlist when no
12
+ * discovered theme set is injected (keeps pure unit tests hermetic). A host's
13
+ * own theme discovery and presentation routes replace this with the ids of
14
+ * discovered `valid` themes, passed in via `availableThemeIds`.
15
+ */
16
+ export declare const ALLOWED_THEME_IDS: readonly ["paper", "atlas", "glassmorphic"];
17
+ export type ThemeId = (typeof ALLOWED_THEME_IDS)[number];
18
+ export interface PresentationSettingsRecord {
19
+ workspaceId: UUID;
20
+ /** Id of the active theme. Validated against discovered themes at write time. */
21
+ activeThemeId: string;
22
+ updatedAt: string;
23
+ }
24
+ export interface PresentationSettingsRepoPort {
25
+ findByWorkspaceId(workspaceId: UUID): Promise<PresentationSettingsRecord | null>;
26
+ save(record: PresentationSettingsRecord): Promise<void>;
27
+ /**
28
+ * Every row across every workspace, for the one-time
29
+ * `migrateLegacyPresentationSettings` brownfield migration (small row
30
+ * count: one row per workspace). Added additively; does not change
31
+ * `findByWorkspaceId`/`save`'s existing contract.
32
+ */
33
+ listAll(): Promise<PresentationSettingsRecord[]>;
34
+ }
35
+ export interface GetPresentationSettingsRequired {
36
+ deps: {
37
+ repo: PresentationSettingsRepoPort;
38
+ /** Discovered valid theme ids; falls back to ALLOWED_THEME_IDS when absent. */
39
+ availableThemeIds?: readonly string[] | undefined;
40
+ };
41
+ input: {
42
+ workspaceId: UUID;
43
+ };
44
+ }
45
+ export interface SetActiveThemeDeps {
46
+ clock: ClockPort;
47
+ repo: PresentationSettingsRepoPort;
48
+ /** Discovered valid theme ids; falls back to ALLOWED_THEME_IDS when absent. */
49
+ availableThemeIds?: readonly string[] | undefined;
50
+ }
51
+ export interface SetActiveThemeRequired {
52
+ deps: SetActiveThemeDeps;
53
+ input: {
54
+ workspaceId: UUID;
55
+ activeThemeId: string;
56
+ };
57
+ }
58
+ export interface PresentationOptional {
59
+ }
60
+ export declare class PresentationSettingsNotFoundError extends Error {
61
+ }
62
+ export declare class PresentationSettingsValidationError extends Error {
63
+ }
64
+ export declare function getPresentationSettings(required: GetPresentationSettingsRequired, _optional?: PresentationOptional): Promise<{
65
+ settings: PresentationSettingsRecord;
66
+ availableThemeIds: string[];
67
+ }>;
68
+ export declare function setActiveTheme(required: SetActiveThemeRequired, _optional?: PresentationOptional): Promise<{
69
+ settings: PresentationSettingsRecord;
70
+ availableThemeIds: string[];
71
+ }>;
72
+ //# sourceMappingURL=presentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../../src/presentation/presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;;;;;GAOG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,6CAA8C,CAAC;AAC7E,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,IAAI,CAAC;IAClB,iFAAiF;IACjF,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,iBAAiB,CAAC,WAAW,EAAE,IAAI,GAAG,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC;IACjF,IAAI,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD;;;;;OAKG;IACH,OAAO,IAAI,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE;QACJ,IAAI,EAAE,4BAA4B,CAAC;QACnC,+EAA+E;QAC/E,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;KACnD,CAAC;IACF,KAAK,EAAE;QAAE,WAAW,EAAE,IAAI,CAAA;KAAE,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,4BAA4B,CAAC;IACnC,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE;QACL,WAAW,EAAE,IAAI,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;CAAG;AAExC,qBAAa,iCAAkC,SAAQ,KAAK;CAAG;AAC/D,qBAAa,mCAAoC,SAAQ,KAAK;CAAG;AAEjE,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,+BAA+B,EACzC,SAAS,GAAE,oBAAyB,GACnC,OAAO,CAAC;IAAE,QAAQ,EAAE,0BAA0B,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAYhF;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,sBAAsB,EAChC,SAAS,GAAE,oBAAyB,GACnC,OAAO,CAAC;IAAE,QAAQ,EAAE,0BAA0B,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA4BhF"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @file Presentation settings — the active-theme identity of a workspace.
3
+ *
4
+ * Deliberately theme-engine agnostic: this module validates an `activeThemeId` against a set of
5
+ * ids the caller supplies, and stores it. It does not discover, load, or render themes — a host
6
+ * owns theme discovery and passes the resulting ids in via `availableThemeIds`. That is what keeps
7
+ * this domain free of any template-engine or filesystem dependency.
8
+ */
9
+ /**
10
+ * Legacy hardcoded theme ids. Retained as the fallback allowlist when no
11
+ * discovered theme set is injected (keeps pure unit tests hermetic). A host's
12
+ * own theme discovery and presentation routes replace this with the ids of
13
+ * discovered `valid` themes, passed in via `availableThemeIds`.
14
+ */
15
+ export const ALLOWED_THEME_IDS = ["paper", "atlas", "glassmorphic"];
16
+ export class PresentationSettingsNotFoundError extends Error {
17
+ }
18
+ export class PresentationSettingsValidationError extends Error {
19
+ }
20
+ export async function getPresentationSettings(required, _optional = {}) {
21
+ const settings = await required.deps.repo.findByWorkspaceId(required.input.workspaceId);
22
+ if (!settings) {
23
+ throw new PresentationSettingsNotFoundError(`presentation settings for workspace '${required.input.workspaceId}' were not found`);
24
+ }
25
+ return {
26
+ settings,
27
+ availableThemeIds: [...(required.deps.availableThemeIds ?? ALLOWED_THEME_IDS)],
28
+ };
29
+ }
30
+ export async function setActiveTheme(required, _optional = {}) {
31
+ const { deps, input } = required;
32
+ const allowed = deps.availableThemeIds ?? ALLOWED_THEME_IDS;
33
+ if (!allowed.includes(input.activeThemeId)) {
34
+ throw new PresentationSettingsValidationError(`theme '${input.activeThemeId}' is not supported`);
35
+ }
36
+ const existing = await deps.repo.findByWorkspaceId(input.workspaceId);
37
+ if (!existing) {
38
+ throw new PresentationSettingsNotFoundError(`presentation settings for workspace '${input.workspaceId}' were not found`);
39
+ }
40
+ const settings = {
41
+ ...existing,
42
+ activeThemeId: input.activeThemeId,
43
+ updatedAt: deps.clock.nowIso(),
44
+ };
45
+ await deps.repo.save(settings);
46
+ return {
47
+ settings,
48
+ availableThemeIds: [...allowed],
49
+ };
50
+ }
51
+ //# sourceMappingURL=presentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../src/presentation/presentation.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAU,CAAC;AAgD7E,MAAM,OAAO,iCAAkC,SAAQ,KAAK;CAAG;AAC/D,MAAM,OAAO,mCAAoC,SAAQ,KAAK;CAAG;AAEjE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,QAAyC,EACzC,YAAkC,EAAE;IAEpC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACxF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,iCAAiC,CACzC,wCAAwC,QAAQ,CAAC,KAAK,CAAC,WAAW,kBAAkB,CACrF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ;QACR,iBAAiB,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,CAAC;KAC/E,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgC,EAChC,YAAkC,EAAE;IAEpC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC;IAC5D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,mCAAmC,CAC3C,UAAU,KAAK,CAAC,aAAa,oBAAoB,CAClD,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,iCAAiC,CACzC,wCAAwC,KAAK,CAAC,WAAW,kBAAkB,CAC5E,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAA+B;QAC3C,GAAG,QAAQ;QACX,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;KAC/B,CAAC;IAEF,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE/B,OAAO;QACL,QAAQ;QACR,iBAAiB,EAAE,CAAC,GAAG,OAAO,CAAC;KAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { PresentationSettingsRecord, PresentationSettingsRepoPort } from "./presentation.js";
2
+ export declare class InMemoryPresentationSettingsRepo implements PresentationSettingsRepoPort {
3
+ private rows;
4
+ constructor(initialRows?: PresentationSettingsRecord[]);
5
+ findByWorkspaceId(workspaceId: string): Promise<PresentationSettingsRecord | null>;
6
+ save(record: PresentationSettingsRecord): Promise<void>;
7
+ listAll(): Promise<PresentationSettingsRecord[]>;
8
+ }
9
+ //# sourceMappingURL=repo.memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.memory.d.ts","sourceRoot":"","sources":["../../src/presentation/repo.memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAElG,qBAAa,gCAAiC,YAAW,4BAA4B;IACnF,OAAO,CAAC,IAAI,CAA+B;gBAE/B,WAAW,GAAE,0BAA0B,EAAO;IAIpD,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC;IAIlF,IAAI,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvD,OAAO,IAAI,OAAO,CAAC,0BAA0B,EAAE,CAAC;CAGvD"}
@@ -0,0 +1,21 @@
1
+ export class InMemoryPresentationSettingsRepo {
2
+ rows;
3
+ constructor(initialRows = []) {
4
+ this.rows = [...initialRows];
5
+ }
6
+ async findByWorkspaceId(workspaceId) {
7
+ return this.rows.find((row) => row.workspaceId === workspaceId) ?? null;
8
+ }
9
+ async save(record) {
10
+ const index = this.rows.findIndex((row) => row.workspaceId === record.workspaceId);
11
+ if (index === -1) {
12
+ this.rows.push(record);
13
+ return;
14
+ }
15
+ this.rows[index] = record;
16
+ }
17
+ async listAll() {
18
+ return [...this.rows];
19
+ }
20
+ }
21
+ //# sourceMappingURL=repo.memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.memory.js","sourceRoot":"","sources":["../../src/presentation/repo.memory.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gCAAgC;IACnC,IAAI,CAA+B;IAE3C,YAAY,cAA4C,EAAE;QACxD,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,WAAW,CAAC,IAAI,IAAI,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAkC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;QACnF,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @file `@jini-ai/cms/server` — the Node-bound half of the CMS capability.
3
+ *
4
+ * PLACEHOLDER. Nothing has been ported yet.
5
+ *
6
+ * ## What belongs here
7
+ *
8
+ * Concrete implementations of the ports declared in `../core`: SQLite/Postgres repositories,
9
+ * filesystem blob stores, image transformers — anything that imports `node:*` or a native
10
+ * dependency. This layer depends on `../core`; the reverse is a boundary violation.
11
+ *
12
+ * ## What does NOT belong here
13
+ *
14
+ * HTTP routing and request/response handling. The source repo's `src/server/**` is an Express
15
+ * composition root and is explicitly out of scope for this port — Jini already has
16
+ * `@jini-ai/http-kit` and `@jini-ai/server` for transport. Porting those routes here would
17
+ * reproduce exactly the coupling this package's layer split exists to prevent (see
18
+ * `../core/index.ts`'s header for the measurements).
19
+ *
20
+ * The name of this subpath is `/server` for consistency with `@jini-ai/admin`'s Node layer, which
21
+ * uses the same convention. It means "the Node-bound layer", not "the HTTP server".
22
+ */
23
+ /**
24
+ * Layer marker — same rationale as `CMS_CORE_LAYER`, and delete it on the same terms: once a real
25
+ * adapter is exported from here, this has no purpose.
26
+ */
27
+ export declare const CMS_SERVER_LAYER: "server";
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAG,QAAiB,CAAC"}