@langadventurellc/task-trellis-mcp 0.1.0-rc.3

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 (343) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +81 -0
  3. package/dist/configuration/ServerConfig.d.ts +8 -0
  4. package/dist/configuration/ServerConfig.d.ts.map +1 -0
  5. package/dist/configuration/ServerConfig.js +3 -0
  6. package/dist/configuration/ServerConfig.js.map +1 -0
  7. package/dist/configuration/index.d.ts +2 -0
  8. package/dist/configuration/index.d.ts.map +1 -0
  9. package/dist/configuration/index.js +18 -0
  10. package/dist/configuration/index.js.map +1 -0
  11. package/dist/models/TrellisObject.d.ts +18 -0
  12. package/dist/models/TrellisObject.d.ts.map +1 -0
  13. package/dist/models/TrellisObject.js +3 -0
  14. package/dist/models/TrellisObject.js.map +1 -0
  15. package/dist/models/TrellisObjectPriority.d.ts +6 -0
  16. package/dist/models/TrellisObjectPriority.d.ts.map +1 -0
  17. package/dist/models/TrellisObjectPriority.js +10 -0
  18. package/dist/models/TrellisObjectPriority.js.map +1 -0
  19. package/dist/models/TrellisObjectStatus.d.ts +8 -0
  20. package/dist/models/TrellisObjectStatus.d.ts.map +1 -0
  21. package/dist/models/TrellisObjectStatus.js +12 -0
  22. package/dist/models/TrellisObjectStatus.js.map +1 -0
  23. package/dist/models/TrellisObjectType.d.ts +7 -0
  24. package/dist/models/TrellisObjectType.d.ts.map +1 -0
  25. package/dist/models/TrellisObjectType.js +11 -0
  26. package/dist/models/TrellisObjectType.js.map +1 -0
  27. package/dist/models/__tests__/isClaimable.test.d.ts +2 -0
  28. package/dist/models/__tests__/isClaimable.test.d.ts.map +1 -0
  29. package/dist/models/__tests__/isClaimable.test.js +101 -0
  30. package/dist/models/__tests__/isClaimable.test.js.map +1 -0
  31. package/dist/models/__tests__/isClosed.test.d.ts +2 -0
  32. package/dist/models/__tests__/isClosed.test.d.ts.map +1 -0
  33. package/dist/models/__tests__/isClosed.test.js +84 -0
  34. package/dist/models/__tests__/isClosed.test.js.map +1 -0
  35. package/dist/models/__tests__/isOpen.test.d.ts +2 -0
  36. package/dist/models/__tests__/isOpen.test.d.ts.map +1 -0
  37. package/dist/models/__tests__/isOpen.test.js +84 -0
  38. package/dist/models/__tests__/isOpen.test.js.map +1 -0
  39. package/dist/models/index.d.ts +8 -0
  40. package/dist/models/index.d.ts.map +1 -0
  41. package/dist/models/index.js +16 -0
  42. package/dist/models/index.js.map +1 -0
  43. package/dist/models/isClaimable.d.ts +10 -0
  44. package/dist/models/isClaimable.d.ts.map +1 -0
  45. package/dist/models/isClaimable.js +16 -0
  46. package/dist/models/isClaimable.js.map +1 -0
  47. package/dist/models/isClosed.d.ts +10 -0
  48. package/dist/models/isClosed.d.ts.map +1 -0
  49. package/dist/models/isClosed.js +16 -0
  50. package/dist/models/isClosed.js.map +1 -0
  51. package/dist/models/isOpen.d.ts +10 -0
  52. package/dist/models/isOpen.d.ts.map +1 -0
  53. package/dist/models/isOpen.js +16 -0
  54. package/dist/models/isOpen.js.map +1 -0
  55. package/dist/repositories/Repository.d.ts +8 -0
  56. package/dist/repositories/Repository.d.ts.map +1 -0
  57. package/dist/repositories/Repository.js +3 -0
  58. package/dist/repositories/Repository.js.map +1 -0
  59. package/dist/repositories/index.d.ts +3 -0
  60. package/dist/repositories/index.d.ts.map +1 -0
  61. package/dist/repositories/index.js +19 -0
  62. package/dist/repositories/index.js.map +1 -0
  63. package/dist/repositories/local/LocalRepository.d.ts +21 -0
  64. package/dist/repositories/local/LocalRepository.d.ts.map +1 -0
  65. package/dist/repositories/local/LocalRepository.js +75 -0
  66. package/dist/repositories/local/LocalRepository.js.map +1 -0
  67. package/dist/repositories/local/__tests__/deleteObjectById.test.d.ts +2 -0
  68. package/dist/repositories/local/__tests__/deleteObjectById.test.d.ts.map +1 -0
  69. package/dist/repositories/local/__tests__/deleteObjectById.test.js +228 -0
  70. package/dist/repositories/local/__tests__/deleteObjectById.test.js.map +1 -0
  71. package/dist/repositories/local/__tests__/extractMarkdownIds.test.d.ts +2 -0
  72. package/dist/repositories/local/__tests__/extractMarkdownIds.test.d.ts.map +1 -0
  73. package/dist/repositories/local/__tests__/extractMarkdownIds.test.js +135 -0
  74. package/dist/repositories/local/__tests__/extractMarkdownIds.test.js.map +1 -0
  75. package/dist/repositories/local/__tests__/findMarkdownFiles.test.d.ts +2 -0
  76. package/dist/repositories/local/__tests__/findMarkdownFiles.test.d.ts.map +1 -0
  77. package/dist/repositories/local/__tests__/findMarkdownFiles.test.js +236 -0
  78. package/dist/repositories/local/__tests__/findMarkdownFiles.test.js.map +1 -0
  79. package/dist/repositories/local/__tests__/getObjectByFilePath.test.d.ts +2 -0
  80. package/dist/repositories/local/__tests__/getObjectByFilePath.test.d.ts.map +1 -0
  81. package/dist/repositories/local/__tests__/getObjectByFilePath.test.js +96 -0
  82. package/dist/repositories/local/__tests__/getObjectByFilePath.test.js.map +1 -0
  83. package/dist/repositories/local/__tests__/getObjectById.test.d.ts +2 -0
  84. package/dist/repositories/local/__tests__/getObjectById.test.d.ts.map +1 -0
  85. package/dist/repositories/local/__tests__/getObjectById.test.js +46 -0
  86. package/dist/repositories/local/__tests__/getObjectById.test.js.map +1 -0
  87. package/dist/repositories/local/__tests__/getObjectFilePath.test.d.ts +2 -0
  88. package/dist/repositories/local/__tests__/getObjectFilePath.test.d.ts.map +1 -0
  89. package/dist/repositories/local/__tests__/getObjectFilePath.test.js +172 -0
  90. package/dist/repositories/local/__tests__/getObjectFilePath.test.js.map +1 -0
  91. package/dist/repositories/local/__tests__/getObjects.test.d.ts +2 -0
  92. package/dist/repositories/local/__tests__/getObjects.test.d.ts.map +1 -0
  93. package/dist/repositories/local/__tests__/getObjects.test.js +351 -0
  94. package/dist/repositories/local/__tests__/getObjects.test.js.map +1 -0
  95. package/dist/repositories/local/__tests__/scopeFilter.test.d.ts +2 -0
  96. package/dist/repositories/local/__tests__/scopeFilter.test.d.ts.map +1 -0
  97. package/dist/repositories/local/__tests__/scopeFilter.test.js +109 -0
  98. package/dist/repositories/local/__tests__/scopeFilter.test.js.map +1 -0
  99. package/dist/repositories/local/deleteObjectById.d.ts +16 -0
  100. package/dist/repositories/local/deleteObjectById.d.ts.map +1 -0
  101. package/dist/repositories/local/deleteObjectById.js +108 -0
  102. package/dist/repositories/local/deleteObjectById.js.map +1 -0
  103. package/dist/repositories/local/extractMarkdownIds.d.ts +17 -0
  104. package/dist/repositories/local/extractMarkdownIds.d.ts.map +1 -0
  105. package/dist/repositories/local/extractMarkdownIds.js +34 -0
  106. package/dist/repositories/local/extractMarkdownIds.js.map +1 -0
  107. package/dist/repositories/local/filterByScope.d.ts +8 -0
  108. package/dist/repositories/local/filterByScope.d.ts.map +1 -0
  109. package/dist/repositories/local/filterByScope.js +17 -0
  110. package/dist/repositories/local/filterByScope.js.map +1 -0
  111. package/dist/repositories/local/findMarkdownFiles.d.ts +9 -0
  112. package/dist/repositories/local/findMarkdownFiles.d.ts.map +1 -0
  113. package/dist/repositories/local/findMarkdownFiles.js +47 -0
  114. package/dist/repositories/local/findMarkdownFiles.js.map +1 -0
  115. package/dist/repositories/local/getObjectByFilePath.d.ts +9 -0
  116. package/dist/repositories/local/getObjectByFilePath.d.ts.map +1 -0
  117. package/dist/repositories/local/getObjectByFilePath.js +16 -0
  118. package/dist/repositories/local/getObjectByFilePath.js.map +1 -0
  119. package/dist/repositories/local/getObjectById.d.ts +10 -0
  120. package/dist/repositories/local/getObjectById.d.ts.map +1 -0
  121. package/dist/repositories/local/getObjectById.js +36 -0
  122. package/dist/repositories/local/getObjectById.js.map +1 -0
  123. package/dist/repositories/local/getObjectFilePath.d.ts +7 -0
  124. package/dist/repositories/local/getObjectFilePath.d.ts.map +1 -0
  125. package/dist/repositories/local/getObjectFilePath.js +90 -0
  126. package/dist/repositories/local/getObjectFilePath.js.map +1 -0
  127. package/dist/repositories/local/getObjects.d.ts +3 -0
  128. package/dist/repositories/local/getObjects.d.ts.map +1 -0
  129. package/dist/repositories/local/getObjects.js +64 -0
  130. package/dist/repositories/local/getObjects.js.map +1 -0
  131. package/dist/repositories/local/index.d.ts +8 -0
  132. package/dist/repositories/local/index.d.ts.map +1 -0
  133. package/dist/repositories/local/index.js +24 -0
  134. package/dist/repositories/local/index.js.map +1 -0
  135. package/dist/repositories/local/saveObject.d.ts +12 -0
  136. package/dist/repositories/local/saveObject.d.ts.map +1 -0
  137. package/dist/repositories/local/saveObject.js +27 -0
  138. package/dist/repositories/local/saveObject.js.map +1 -0
  139. package/dist/repositories/local/scopeFilter.d.ts +12 -0
  140. package/dist/repositories/local/scopeFilter.d.ts.map +1 -0
  141. package/dist/repositories/local/scopeFilter.js +21 -0
  142. package/dist/repositories/local/scopeFilter.js.map +1 -0
  143. package/dist/server.d.ts +3 -0
  144. package/dist/server.d.ts.map +1 -0
  145. package/dist/server.js +138 -0
  146. package/dist/server.js.map +1 -0
  147. package/dist/tools/__tests__/appendObjectLogTool.test.d.ts +2 -0
  148. package/dist/tools/__tests__/appendObjectLogTool.test.d.ts.map +1 -0
  149. package/dist/tools/__tests__/appendObjectLogTool.test.js +125 -0
  150. package/dist/tools/__tests__/appendObjectLogTool.test.js.map +1 -0
  151. package/dist/tools/__tests__/claimTaskTool.test.d.ts +2 -0
  152. package/dist/tools/__tests__/claimTaskTool.test.d.ts.map +1 -0
  153. package/dist/tools/__tests__/claimTaskTool.test.js +348 -0
  154. package/dist/tools/__tests__/claimTaskTool.test.js.map +1 -0
  155. package/dist/tools/__tests__/completeTaskTool.test.d.ts +2 -0
  156. package/dist/tools/__tests__/completeTaskTool.test.d.ts.map +1 -0
  157. package/dist/tools/__tests__/completeTaskTool.test.js +221 -0
  158. package/dist/tools/__tests__/completeTaskTool.test.js.map +1 -0
  159. package/dist/tools/__tests__/createObjectTool.test.d.ts +2 -0
  160. package/dist/tools/__tests__/createObjectTool.test.d.ts.map +1 -0
  161. package/dist/tools/__tests__/createObjectTool.test.js +387 -0
  162. package/dist/tools/__tests__/createObjectTool.test.js.map +1 -0
  163. package/dist/tools/__tests__/deleteObjectTool.test.d.ts +2 -0
  164. package/dist/tools/__tests__/deleteObjectTool.test.d.ts.map +1 -0
  165. package/dist/tools/__tests__/deleteObjectTool.test.js +169 -0
  166. package/dist/tools/__tests__/deleteObjectTool.test.js.map +1 -0
  167. package/dist/tools/__tests__/getObjectTool.test.d.ts +2 -0
  168. package/dist/tools/__tests__/getObjectTool.test.d.ts.map +1 -0
  169. package/dist/tools/__tests__/getObjectTool.test.js +124 -0
  170. package/dist/tools/__tests__/getObjectTool.test.js.map +1 -0
  171. package/dist/tools/__tests__/listObjectsTool.test.d.ts +2 -0
  172. package/dist/tools/__tests__/listObjectsTool.test.d.ts.map +1 -0
  173. package/dist/tools/__tests__/listObjectsTool.test.js +266 -0
  174. package/dist/tools/__tests__/listObjectsTool.test.js.map +1 -0
  175. package/dist/tools/__tests__/updateObjectTool.test.d.ts +2 -0
  176. package/dist/tools/__tests__/updateObjectTool.test.d.ts.map +1 -0
  177. package/dist/tools/__tests__/updateObjectTool.test.js +208 -0
  178. package/dist/tools/__tests__/updateObjectTool.test.js.map +1 -0
  179. package/dist/tools/activateTool.d.ts +38 -0
  180. package/dist/tools/activateTool.d.ts.map +1 -0
  181. package/dist/tools/activateTool.js +48 -0
  182. package/dist/tools/activateTool.js.map +1 -0
  183. package/dist/tools/appendObjectLogTool.d.ts +26 -0
  184. package/dist/tools/appendObjectLogTool.d.ts.map +1 -0
  185. package/dist/tools/appendObjectLogTool.js +65 -0
  186. package/dist/tools/appendObjectLogTool.js.map +1 -0
  187. package/dist/tools/claimTaskTool.d.ts +30 -0
  188. package/dist/tools/claimTaskTool.d.ts.map +1 -0
  189. package/dist/tools/claimTaskTool.js +109 -0
  190. package/dist/tools/claimTaskTool.js.map +1 -0
  191. package/dist/tools/completeTaskTool.d.ts +33 -0
  192. package/dist/tools/completeTaskTool.d.ts.map +1 -0
  193. package/dist/tools/completeTaskTool.js +61 -0
  194. package/dist/tools/completeTaskTool.js.map +1 -0
  195. package/dist/tools/createObjectTool.d.ts +52 -0
  196. package/dist/tools/createObjectTool.d.ts.map +1 -0
  197. package/dist/tools/createObjectTool.js +87 -0
  198. package/dist/tools/createObjectTool.js.map +1 -0
  199. package/dist/tools/deleteObjectTool.d.ts +27 -0
  200. package/dist/tools/deleteObjectTool.d.ts.map +1 -0
  201. package/dist/tools/deleteObjectTool.js +48 -0
  202. package/dist/tools/deleteObjectTool.js.map +1 -0
  203. package/dist/tools/getObjectTool.d.ts +22 -0
  204. package/dist/tools/getObjectTool.d.ts.map +1 -0
  205. package/dist/tools/getObjectTool.js +53 -0
  206. package/dist/tools/getObjectTool.js.map +1 -0
  207. package/dist/tools/index.d.ts +11 -0
  208. package/dist/tools/index.d.ts.map +1 -0
  209. package/dist/tools/index.js +34 -0
  210. package/dist/tools/index.js.map +1 -0
  211. package/dist/tools/listObjectsTool.d.ts +39 -0
  212. package/dist/tools/listObjectsTool.d.ts.map +1 -0
  213. package/dist/tools/listObjectsTool.js +87 -0
  214. package/dist/tools/listObjectsTool.js.map +1 -0
  215. package/dist/tools/pruneClosedTool.d.ts +26 -0
  216. package/dist/tools/pruneClosedTool.d.ts.map +1 -0
  217. package/dist/tools/pruneClosedTool.js +35 -0
  218. package/dist/tools/pruneClosedTool.js.map +1 -0
  219. package/dist/tools/updateObjectTool.d.ts +46 -0
  220. package/dist/tools/updateObjectTool.d.ts.map +1 -0
  221. package/dist/tools/updateObjectTool.js +93 -0
  222. package/dist/tools/updateObjectTool.js.map +1 -0
  223. package/dist/utils/__tests__/checkPrerequisitesComplete.test.d.ts +2 -0
  224. package/dist/utils/__tests__/checkPrerequisitesComplete.test.d.ts.map +1 -0
  225. package/dist/utils/__tests__/checkPrerequisitesComplete.test.js +200 -0
  226. package/dist/utils/__tests__/checkPrerequisitesComplete.test.js.map +1 -0
  227. package/dist/utils/__tests__/deserializeTrellisObject.test.d.ts +2 -0
  228. package/dist/utils/__tests__/deserializeTrellisObject.test.d.ts.map +1 -0
  229. package/dist/utils/__tests__/deserializeTrellisObject.test.js +329 -0
  230. package/dist/utils/__tests__/deserializeTrellisObject.test.js.map +1 -0
  231. package/dist/utils/__tests__/filterUnavailableObjects.test.d.ts +2 -0
  232. package/dist/utils/__tests__/filterUnavailableObjects.test.d.ts.map +1 -0
  233. package/dist/utils/__tests__/filterUnavailableObjects.test.js +172 -0
  234. package/dist/utils/__tests__/filterUnavailableObjects.test.js.map +1 -0
  235. package/dist/utils/__tests__/generateUniqueId.test.d.ts +2 -0
  236. package/dist/utils/__tests__/generateUniqueId.test.d.ts.map +1 -0
  237. package/dist/utils/__tests__/generateUniqueId.test.js +186 -0
  238. package/dist/utils/__tests__/generateUniqueId.test.js.map +1 -0
  239. package/dist/utils/__tests__/inferObjectType.test.d.ts +2 -0
  240. package/dist/utils/__tests__/inferObjectType.test.d.ts.map +1 -0
  241. package/dist/utils/__tests__/inferObjectType.test.js +43 -0
  242. package/dist/utils/__tests__/inferObjectType.test.js.map +1 -0
  243. package/dist/utils/__tests__/isRequiredForOtherObjects.test.d.ts +2 -0
  244. package/dist/utils/__tests__/isRequiredForOtherObjects.test.d.ts.map +1 -0
  245. package/dist/utils/__tests__/isRequiredForOtherObjects.test.js +229 -0
  246. package/dist/utils/__tests__/isRequiredForOtherObjects.test.js.map +1 -0
  247. package/dist/utils/__tests__/serializationRoundTrip.test.d.ts +2 -0
  248. package/dist/utils/__tests__/serializationRoundTrip.test.d.ts.map +1 -0
  249. package/dist/utils/__tests__/serializationRoundTrip.test.js +389 -0
  250. package/dist/utils/__tests__/serializationRoundTrip.test.js.map +1 -0
  251. package/dist/utils/__tests__/serializeTrellisObject.test.d.ts +2 -0
  252. package/dist/utils/__tests__/serializeTrellisObject.test.d.ts.map +1 -0
  253. package/dist/utils/__tests__/serializeTrellisObject.test.js +192 -0
  254. package/dist/utils/__tests__/serializeTrellisObject.test.js.map +1 -0
  255. package/dist/utils/__tests__/sortTrellisObjects.test.d.ts +2 -0
  256. package/dist/utils/__tests__/sortTrellisObjects.test.d.ts.map +1 -0
  257. package/dist/utils/__tests__/sortTrellisObjects.test.js +114 -0
  258. package/dist/utils/__tests__/sortTrellisObjects.test.js.map +1 -0
  259. package/dist/utils/checkPrerequisitesComplete.d.ts +12 -0
  260. package/dist/utils/checkPrerequisitesComplete.d.ts.map +1 -0
  261. package/dist/utils/checkPrerequisitesComplete.js +38 -0
  262. package/dist/utils/checkPrerequisitesComplete.js.map +1 -0
  263. package/dist/utils/deserializeTrellisObject.d.ts +9 -0
  264. package/dist/utils/deserializeTrellisObject.d.ts.map +1 -0
  265. package/dist/utils/deserializeTrellisObject.js +134 -0
  266. package/dist/utils/deserializeTrellisObject.js.map +1 -0
  267. package/dist/utils/filterUnavailableObjects.d.ts +13 -0
  268. package/dist/utils/filterUnavailableObjects.d.ts.map +1 -0
  269. package/dist/utils/filterUnavailableObjects.js +40 -0
  270. package/dist/utils/filterUnavailableObjects.js.map +1 -0
  271. package/dist/utils/generateUniqueId.d.ts +10 -0
  272. package/dist/utils/generateUniqueId.d.ts.map +1 -0
  273. package/dist/utils/generateUniqueId.js +67 -0
  274. package/dist/utils/generateUniqueId.js.map +1 -0
  275. package/dist/utils/index.d.ts +9 -0
  276. package/dist/utils/index.d.ts.map +1 -0
  277. package/dist/utils/index.js +20 -0
  278. package/dist/utils/index.js.map +1 -0
  279. package/dist/utils/inferObjectType.d.ts +3 -0
  280. package/dist/utils/inferObjectType.d.ts.map +1 -0
  281. package/dist/utils/inferObjectType.js +26 -0
  282. package/dist/utils/inferObjectType.js.map +1 -0
  283. package/dist/utils/isRequiredForOtherObjects.d.ts +12 -0
  284. package/dist/utils/isRequiredForOtherObjects.d.ts.map +1 -0
  285. package/dist/utils/isRequiredForOtherObjects.js +33 -0
  286. package/dist/utils/isRequiredForOtherObjects.js.map +1 -0
  287. package/dist/utils/serializeTrellisObject.d.ts +8 -0
  288. package/dist/utils/serializeTrellisObject.d.ts.map +1 -0
  289. package/dist/utils/serializeTrellisObject.js +35 -0
  290. package/dist/utils/serializeTrellisObject.js.map +1 -0
  291. package/dist/utils/sortTrellisObjects.d.ts +8 -0
  292. package/dist/utils/sortTrellisObjects.d.ts.map +1 -0
  293. package/dist/utils/sortTrellisObjects.js +20 -0
  294. package/dist/utils/sortTrellisObjects.js.map +1 -0
  295. package/dist/validation/ValidationError.d.ts +9 -0
  296. package/dist/validation/ValidationError.d.ts.map +1 -0
  297. package/dist/validation/ValidationError.js +18 -0
  298. package/dist/validation/ValidationError.js.map +1 -0
  299. package/dist/validation/ValidationErrorCode.d.ts +3 -0
  300. package/dist/validation/ValidationErrorCode.d.ts.map +1 -0
  301. package/dist/validation/ValidationErrorCode.js +3 -0
  302. package/dist/validation/ValidationErrorCode.js.map +1 -0
  303. package/dist/validation/ValidationErrorCodes.d.ts +8 -0
  304. package/dist/validation/ValidationErrorCodes.d.ts.map +1 -0
  305. package/dist/validation/ValidationErrorCodes.js +11 -0
  306. package/dist/validation/ValidationErrorCodes.js.map +1 -0
  307. package/dist/validation/__tests__/ValidationError.test.d.ts +2 -0
  308. package/dist/validation/__tests__/ValidationError.test.d.ts.map +1 -0
  309. package/dist/validation/__tests__/ValidationError.test.js +32 -0
  310. package/dist/validation/__tests__/ValidationError.test.js.map +1 -0
  311. package/dist/validation/__tests__/validateObjectCreation.test.d.ts +2 -0
  312. package/dist/validation/__tests__/validateObjectCreation.test.d.ts.map +1 -0
  313. package/dist/validation/__tests__/validateObjectCreation.test.js +93 -0
  314. package/dist/validation/__tests__/validateObjectCreation.test.js.map +1 -0
  315. package/dist/validation/__tests__/validateParentExists.test.d.ts +2 -0
  316. package/dist/validation/__tests__/validateParentExists.test.d.ts.map +1 -0
  317. package/dist/validation/__tests__/validateParentExists.test.js +62 -0
  318. package/dist/validation/__tests__/validateParentExists.test.js.map +1 -0
  319. package/dist/validation/__tests__/validateParentType.test.d.ts +2 -0
  320. package/dist/validation/__tests__/validateParentType.test.d.ts.map +1 -0
  321. package/dist/validation/__tests__/validateParentType.test.js +125 -0
  322. package/dist/validation/__tests__/validateParentType.test.js.map +1 -0
  323. package/dist/validation/__tests__/validateStatusTransition.test.d.ts +2 -0
  324. package/dist/validation/__tests__/validateStatusTransition.test.d.ts.map +1 -0
  325. package/dist/validation/__tests__/validateStatusTransition.test.js +103 -0
  326. package/dist/validation/__tests__/validateStatusTransition.test.js.map +1 -0
  327. package/dist/validation/validateObjectCreation.d.ts +12 -0
  328. package/dist/validation/validateObjectCreation.d.ts.map +1 -0
  329. package/dist/validation/validateObjectCreation.js +24 -0
  330. package/dist/validation/validateObjectCreation.js.map +1 -0
  331. package/dist/validation/validateParentExists.d.ts +10 -0
  332. package/dist/validation/validateParentExists.d.ts.map +1 -0
  333. package/dist/validation/validateParentExists.js +23 -0
  334. package/dist/validation/validateParentExists.js.map +1 -0
  335. package/dist/validation/validateParentType.d.ts +16 -0
  336. package/dist/validation/validateParentType.d.ts.map +1 -0
  337. package/dist/validation/validateParentType.js +48 -0
  338. package/dist/validation/validateParentType.js.map +1 -0
  339. package/dist/validation/validateStatusTransition.d.ts +12 -0
  340. package/dist/validation/validateStatusTransition.d.ts.map +1 -0
  341. package/dist/validation/validateStatusTransition.js +29 -0
  342. package/dist/validation/validateStatusTransition.js.map +1 -0
  343. package/package.json +78 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=serializeTrellisObject.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializeTrellisObject.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/serializeTrellisObject.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const yaml_1 = require("yaml");
4
+ const models_1 = require("../../models");
5
+ const serializeTrellisObject_1 = require("../serializeTrellisObject");
6
+ describe("serializeTrellisObject", () => {
7
+ it("should serialize a basic TrellisObject to markdown with YAML frontmatter", () => {
8
+ const trellisObject = {
9
+ id: "test-id-123",
10
+ title: "Test Task",
11
+ status: models_1.TrellisObjectStatus.IN_PROGRESS,
12
+ priority: models_1.TrellisObjectPriority.HIGH,
13
+ prerequisites: ["prereq-1", "prereq-2"],
14
+ affectedFiles: new Map([
15
+ ["src/file1.ts", "modified"],
16
+ ["src/file2.ts", "created"],
17
+ ]),
18
+ log: ["Initial commit", "Updated implementation"],
19
+ schema: "v1.0",
20
+ childrenIds: ["child-1", "child-2"],
21
+ body: "This is the main content of the task.",
22
+ type: models_1.TrellisObjectType.PROJECT,
23
+ };
24
+ const result = (0, serializeTrellisObject_1.serializeTrellisObject)(trellisObject);
25
+ // Check that it starts and ends correctly
26
+ expect(result).toMatch(/^---\n/);
27
+ expect(result).toMatch(/\n---\n\nThis is the main content of the task\.$/);
28
+ // Parse the YAML frontmatter to verify structure
29
+ const yamlPart = result.split("---\n")[1];
30
+ const parsedYaml = (0, yaml_1.parse)(yamlPart);
31
+ expect(parsedYaml).toEqual({
32
+ id: "test-id-123",
33
+ title: "Test Task",
34
+ status: models_1.TrellisObjectStatus.IN_PROGRESS,
35
+ priority: models_1.TrellisObjectPriority.HIGH,
36
+ prerequisites: ["prereq-1", "prereq-2"],
37
+ affectedFiles: {
38
+ "src/file1.ts": "modified",
39
+ "src/file2.ts": "created",
40
+ },
41
+ log: ["Initial commit", "Updated implementation"],
42
+ schema: "v1.0",
43
+ childrenIds: ["child-1", "child-2"],
44
+ });
45
+ });
46
+ it("should handle multi-line log entries correctly", () => {
47
+ const trellisObject = {
48
+ id: "multiline-test",
49
+ title: "Multi-line Log Test",
50
+ status: models_1.TrellisObjectStatus.OPEN,
51
+ priority: models_1.TrellisObjectPriority.MEDIUM,
52
+ prerequisites: [],
53
+ affectedFiles: new Map(),
54
+ log: [
55
+ "Single line entry",
56
+ "Multi-line entry:\nThis spans multiple lines\nWith various details\nAnd even more information",
57
+ "Another single line",
58
+ "Complex multi-line:\n- Bullet point 1\n- Bullet point 2\n - Nested point\n- Final point",
59
+ ],
60
+ schema: "v1.0",
61
+ childrenIds: [],
62
+ body: "Test body content",
63
+ type: models_1.TrellisObjectType.PROJECT,
64
+ };
65
+ const result = (0, serializeTrellisObject_1.serializeTrellisObject)(trellisObject);
66
+ // Parse the YAML frontmatter
67
+ const yamlPart = result.split("---\n")[1];
68
+ const parsedYaml = (0, yaml_1.parse)(yamlPart);
69
+ // Verify that multi-line log entries are preserved correctly
70
+ expect(parsedYaml.log).toHaveLength(4);
71
+ expect(parsedYaml.log[0]).toBe("Single line entry");
72
+ expect(parsedYaml.log[1]).toBe("Multi-line entry:\nThis spans multiple lines\nWith various details\nAnd even more information");
73
+ expect(parsedYaml.log[2]).toBe("Another single line");
74
+ expect(parsedYaml.log[3]).toBe("Complex multi-line:\n- Bullet point 1\n- Bullet point 2\n - Nested point\n- Final point");
75
+ // Verify the structure is still valid YAML
76
+ expect(() => (0, yaml_1.parse)(yamlPart)).not.toThrow();
77
+ });
78
+ it("should handle empty arrays and Map correctly", () => {
79
+ const trellisObject = {
80
+ id: "empty-test",
81
+ title: "Empty Collections Test",
82
+ status: models_1.TrellisObjectStatus.DRAFT,
83
+ priority: models_1.TrellisObjectPriority.LOW,
84
+ prerequisites: [],
85
+ affectedFiles: new Map(),
86
+ log: [],
87
+ schema: "v1.0",
88
+ childrenIds: [],
89
+ body: "",
90
+ type: models_1.TrellisObjectType.PROJECT,
91
+ };
92
+ const result = (0, serializeTrellisObject_1.serializeTrellisObject)(trellisObject);
93
+ const yamlPart = result.split("---\n")[1];
94
+ const parsedYaml = (0, yaml_1.parse)(yamlPart);
95
+ expect(parsedYaml.prerequisites).toEqual([]);
96
+ expect(parsedYaml.affectedFiles).toEqual({});
97
+ expect(parsedYaml.log).toEqual([]);
98
+ expect(parsedYaml.childrenIds).toEqual([]);
99
+ });
100
+ it("should handle special characters in strings", () => {
101
+ const trellisObject = {
102
+ id: "special-chars-test",
103
+ title: 'Title with "quotes" and symbols: @#$%',
104
+ status: models_1.TrellisObjectStatus.IN_PROGRESS,
105
+ priority: models_1.TrellisObjectPriority.HIGH,
106
+ prerequisites: ["prereq with spaces", "prereq-with-dashes"],
107
+ affectedFiles: new Map([
108
+ ["src/file with spaces.ts", 'status with "quotes"'],
109
+ ["src/file-with-dashes.ts", "status: with: colons"],
110
+ ]),
111
+ log: [
112
+ 'Log entry with "double quotes"',
113
+ "Log entry with 'single quotes'",
114
+ "Log entry with: colons and @symbols",
115
+ ],
116
+ schema: "v2.0-beta",
117
+ childrenIds: ["child-with-dashes", "child with spaces"],
118
+ body: 'Body with "quotes", symbols: @#$%, and other special characters!',
119
+ type: models_1.TrellisObjectType.PROJECT,
120
+ };
121
+ const result = (0, serializeTrellisObject_1.serializeTrellisObject)(trellisObject);
122
+ const yamlPart = result.split("---\n")[1];
123
+ // Should parse without errors
124
+ expect(() => (0, yaml_1.parse)(yamlPart)).not.toThrow();
125
+ const parsedYaml = (0, yaml_1.parse)(yamlPart);
126
+ expect(parsedYaml.title).toBe('Title with "quotes" and symbols: @#$%');
127
+ expect(parsedYaml.affectedFiles["src/file with spaces.ts"]).toBe('status with "quotes"');
128
+ expect(parsedYaml.log[0]).toBe('Log entry with "double quotes"');
129
+ });
130
+ it("should preserve the body content separately from frontmatter", () => {
131
+ const bodyContent = `# Main Task Description
132
+
133
+ This is a detailed description of the task.
134
+
135
+ ## Steps to Complete
136
+
137
+ 1. First step
138
+ 2. Second step
139
+ 3. Final step
140
+
141
+ > Important note about the implementation`;
142
+ const trellisObject = {
143
+ id: "body-test",
144
+ title: "Body Content Test",
145
+ status: models_1.TrellisObjectStatus.OPEN,
146
+ priority: models_1.TrellisObjectPriority.MEDIUM,
147
+ prerequisites: [],
148
+ affectedFiles: new Map(),
149
+ log: [],
150
+ schema: "v1.0",
151
+ childrenIds: [],
152
+ body: bodyContent,
153
+ type: models_1.TrellisObjectType.PROJECT,
154
+ };
155
+ const result = (0, serializeTrellisObject_1.serializeTrellisObject)(trellisObject);
156
+ // Check that body is not in the YAML frontmatter
157
+ const yamlPart = result.split("---\n")[1];
158
+ const parsedYaml = (0, yaml_1.parse)(yamlPart);
159
+ expect(parsedYaml.body).toBeUndefined();
160
+ // Check that body appears after the frontmatter
161
+ const bodyPart = result.split(/---\n.*?\n---\n\n/s)[1];
162
+ expect(bodyPart).toBe(bodyContent);
163
+ });
164
+ it("should handle Map with complex keys and values", () => {
165
+ const trellisObject = {
166
+ id: "complex-map-test",
167
+ title: "Complex Map Test",
168
+ status: models_1.TrellisObjectStatus.IN_PROGRESS,
169
+ priority: models_1.TrellisObjectPriority.HIGH,
170
+ prerequisites: [],
171
+ affectedFiles: new Map([
172
+ ["path/to/complex file name.ts", "created"],
173
+ ["another/path/file.js", "modified"],
174
+ ["config/settings.json", "deleted"],
175
+ ]),
176
+ log: [],
177
+ schema: "v1.0",
178
+ childrenIds: [],
179
+ body: "Test content",
180
+ type: models_1.TrellisObjectType.PROJECT,
181
+ };
182
+ const result = (0, serializeTrellisObject_1.serializeTrellisObject)(trellisObject);
183
+ const yamlPart = result.split("---\n")[1];
184
+ const parsedYaml = (0, yaml_1.parse)(yamlPart);
185
+ expect(parsedYaml.affectedFiles).toEqual({
186
+ "path/to/complex file name.ts": "created",
187
+ "another/path/file.js": "modified",
188
+ "config/settings.json": "deleted",
189
+ });
190
+ });
191
+ });
192
+ //# sourceMappingURL=serializeTrellisObject.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializeTrellisObject.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/serializeTrellisObject.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sortTrellisObjects.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortTrellisObjects.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/sortTrellisObjects.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const models_1 = require("../../models");
4
+ const sortTrellisObjects_1 = require("../sortTrellisObjects");
5
+ describe("sortTrellisObjects", () => {
6
+ const createMockObject = (id, priority) => ({
7
+ id,
8
+ title: `Task ${id}`,
9
+ status: models_1.TrellisObjectStatus.OPEN,
10
+ priority,
11
+ prerequisites: [],
12
+ affectedFiles: new Map(),
13
+ log: [],
14
+ schema: "v1.0",
15
+ childrenIds: [],
16
+ body: `Body for ${id}`,
17
+ type: models_1.TrellisObjectType.TASK,
18
+ });
19
+ it("should sort objects by priority: high, medium, low", () => {
20
+ const objects = [
21
+ createMockObject("low-1", models_1.TrellisObjectPriority.LOW),
22
+ createMockObject("high-1", models_1.TrellisObjectPriority.HIGH),
23
+ createMockObject("medium-1", models_1.TrellisObjectPriority.MEDIUM),
24
+ createMockObject("low-2", models_1.TrellisObjectPriority.LOW),
25
+ createMockObject("high-2", models_1.TrellisObjectPriority.HIGH),
26
+ ];
27
+ const sorted = (0, sortTrellisObjects_1.sortTrellisObjects)(objects);
28
+ expect(sorted).toHaveLength(5);
29
+ expect(sorted[0].priority).toBe(models_1.TrellisObjectPriority.HIGH);
30
+ expect(sorted[1].priority).toBe(models_1.TrellisObjectPriority.HIGH);
31
+ expect(sorted[2].priority).toBe(models_1.TrellisObjectPriority.MEDIUM);
32
+ expect(sorted[3].priority).toBe(models_1.TrellisObjectPriority.LOW);
33
+ expect(sorted[4].priority).toBe(models_1.TrellisObjectPriority.LOW);
34
+ expect(sorted[0].id).toBe("high-1");
35
+ expect(sorted[1].id).toBe("high-2");
36
+ expect(sorted[2].id).toBe("medium-1");
37
+ expect(sorted[3].id).toBe("low-1");
38
+ expect(sorted[4].id).toBe("low-2");
39
+ });
40
+ it("should return a new array without modifying the original", () => {
41
+ const objects = [
42
+ createMockObject("low", models_1.TrellisObjectPriority.LOW),
43
+ createMockObject("high", models_1.TrellisObjectPriority.HIGH),
44
+ ];
45
+ const originalOrder = objects.map((obj) => obj.id);
46
+ const sorted = (0, sortTrellisObjects_1.sortTrellisObjects)(objects);
47
+ expect(objects.map((obj) => obj.id)).toEqual(originalOrder);
48
+ expect(sorted).not.toBe(objects);
49
+ expect(sorted[0].id).toBe("high");
50
+ expect(sorted[1].id).toBe("low");
51
+ });
52
+ it("should handle empty array", () => {
53
+ const result = (0, sortTrellisObjects_1.sortTrellisObjects)([]);
54
+ expect(result).toEqual([]);
55
+ });
56
+ it("should handle single object", () => {
57
+ const objects = [createMockObject("single", models_1.TrellisObjectPriority.MEDIUM)];
58
+ const result = (0, sortTrellisObjects_1.sortTrellisObjects)(objects);
59
+ expect(result).toHaveLength(1);
60
+ expect(result[0].id).toBe("single");
61
+ expect(result[0].priority).toBe(models_1.TrellisObjectPriority.MEDIUM);
62
+ });
63
+ it("should handle all objects with same priority", () => {
64
+ const objects = [
65
+ createMockObject("first", models_1.TrellisObjectPriority.HIGH),
66
+ createMockObject("second", models_1.TrellisObjectPriority.HIGH),
67
+ createMockObject("third", models_1.TrellisObjectPriority.HIGH),
68
+ ];
69
+ const result = (0, sortTrellisObjects_1.sortTrellisObjects)(objects);
70
+ expect(result).toHaveLength(3);
71
+ result.forEach((obj) => {
72
+ expect(obj.priority).toBe(models_1.TrellisObjectPriority.HIGH);
73
+ });
74
+ });
75
+ it("should maintain stable sort for objects with same priority", () => {
76
+ const objects = [
77
+ createMockObject("high-first", models_1.TrellisObjectPriority.HIGH),
78
+ createMockObject("high-second", models_1.TrellisObjectPriority.HIGH),
79
+ createMockObject("medium-first", models_1.TrellisObjectPriority.MEDIUM),
80
+ createMockObject("medium-second", models_1.TrellisObjectPriority.MEDIUM),
81
+ ];
82
+ const result = (0, sortTrellisObjects_1.sortTrellisObjects)(objects);
83
+ expect(result[0].id).toBe("high-first");
84
+ expect(result[1].id).toBe("high-second");
85
+ expect(result[2].id).toBe("medium-first");
86
+ expect(result[3].id).toBe("medium-second");
87
+ });
88
+ it("should work with mixed object types", () => {
89
+ const objects = [
90
+ {
91
+ ...createMockObject("project", models_1.TrellisObjectPriority.LOW),
92
+ type: models_1.TrellisObjectType.PROJECT,
93
+ },
94
+ {
95
+ ...createMockObject("epic", models_1.TrellisObjectPriority.HIGH),
96
+ type: models_1.TrellisObjectType.EPIC,
97
+ },
98
+ {
99
+ ...createMockObject("feature", models_1.TrellisObjectPriority.MEDIUM),
100
+ type: models_1.TrellisObjectType.FEATURE,
101
+ },
102
+ {
103
+ ...createMockObject("task", models_1.TrellisObjectPriority.HIGH),
104
+ type: models_1.TrellisObjectType.TASK,
105
+ },
106
+ ];
107
+ const result = (0, sortTrellisObjects_1.sortTrellisObjects)(objects);
108
+ expect(result[0].priority).toBe(models_1.TrellisObjectPriority.HIGH);
109
+ expect(result[1].priority).toBe(models_1.TrellisObjectPriority.HIGH);
110
+ expect(result[2].priority).toBe(models_1.TrellisObjectPriority.MEDIUM);
111
+ expect(result[3].priority).toBe(models_1.TrellisObjectPriority.LOW);
112
+ });
113
+ });
114
+ //# sourceMappingURL=sortTrellisObjects.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortTrellisObjects.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/sortTrellisObjects.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { TrellisObject } from "../models/TrellisObject";
2
+ import { Repository } from "../repositories/Repository";
3
+ /**
4
+ * Checks if all prerequisites for a trellis object are complete (closed).
5
+ * A prerequisite is considered complete if its status is DONE or WONT_DO.
6
+ *
7
+ * @param trellisObject - The trellis object to check prerequisites for
8
+ * @param repository - The repository to load prerequisite objects from
9
+ * @returns Promise<boolean> - true if all prerequisites are complete or no prerequisites exist, false otherwise
10
+ */
11
+ export declare function checkPrerequisitesComplete(trellisObject: TrellisObject, repository: Repository): Promise<boolean>;
12
+ //# sourceMappingURL=checkPrerequisitesComplete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkPrerequisitesComplete.d.ts","sourceRoot":"","sources":["../../src/utils/checkPrerequisitesComplete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,OAAO,CAAC,CAiClB"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkPrerequisitesComplete = checkPrerequisitesComplete;
4
+ const TrellisObjectStatus_1 = require("../models/TrellisObjectStatus");
5
+ /**
6
+ * Checks if all prerequisites for a trellis object are complete (closed).
7
+ * A prerequisite is considered complete if its status is DONE or WONT_DO.
8
+ *
9
+ * @param trellisObject - The trellis object to check prerequisites for
10
+ * @param repository - The repository to load prerequisite objects from
11
+ * @returns Promise<boolean> - true if all prerequisites are complete or no prerequisites exist, false otherwise
12
+ */
13
+ async function checkPrerequisitesComplete(trellisObject, repository) {
14
+ // If no prerequisites, return true
15
+ if (!trellisObject.prerequisites ||
16
+ trellisObject.prerequisites.length === 0) {
17
+ return true;
18
+ }
19
+ // Use bulk getObjects call for better performance
20
+ const allObjects = await repository.getObjects();
21
+ const objectMap = new Map();
22
+ allObjects.forEach((obj) => objectMap.set(obj.id, obj));
23
+ // Check if any prerequisite that exists in our system is not complete
24
+ for (const prerequisiteId of trellisObject.prerequisites) {
25
+ const prerequisiteObj = objectMap.get(prerequisiteId);
26
+ // If prerequisite is not in our system, it's fine (external dependency)
27
+ if (!prerequisiteObj) {
28
+ continue;
29
+ }
30
+ // If prerequisite is in our system but not done or wont-do, it's blocking
31
+ if (prerequisiteObj.status !== TrellisObjectStatus_1.TrellisObjectStatus.DONE &&
32
+ prerequisiteObj.status !== TrellisObjectStatus_1.TrellisObjectStatus.WONT_DO) {
33
+ return false;
34
+ }
35
+ }
36
+ return true;
37
+ }
38
+ //# sourceMappingURL=checkPrerequisitesComplete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkPrerequisitesComplete.js","sourceRoot":"","sources":["../../src/utils/checkPrerequisitesComplete.ts"],"names":[],"mappings":";;AAYA,gEAoCC;AA/CD,uEAAoE;AAGpE;;;;;;;GAOG;AACI,KAAK,UAAU,0BAA0B,CAC9C,aAA4B,EAC5B,UAAsB;IAEtB,mCAAmC;IACnC,IACE,CAAC,aAAa,CAAC,aAAa;QAC5B,aAAa,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EACxC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kDAAkD;IAClD,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;IACnD,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAExD,sEAAsE;IACtE,KAAK,MAAM,cAAc,IAAI,aAAa,CAAC,aAAa,EAAE,CAAC;QACzD,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAEtD,wEAAwE;QACxE,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,SAAS;QACX,CAAC;QAED,0EAA0E;QAC1E,IACE,eAAe,CAAC,MAAM,KAAK,yCAAmB,CAAC,IAAI;YACnD,eAAe,CAAC,MAAM,KAAK,yCAAmB,CAAC,OAAO,EACtD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { TrellisObject } from "../models";
2
+ /**
3
+ * Deserializes a markdown string with YAML frontmatter back to a TrellisObject
4
+ * @param markdownString - The markdown string with YAML frontmatter to deserialize
5
+ * @returns A TrellisObject reconstructed from the markdown string
6
+ * @throws Error if the input string is not properly formatted or missing required fields
7
+ */
8
+ export declare function deserializeTrellisObject(markdownString: string): TrellisObject;
9
+ //# sourceMappingURL=deserializeTrellisObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deserializeTrellisObject.d.ts","sourceRoot":"","sources":["../../src/utils/deserializeTrellisObject.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EAGd,MAAM,WAAW,CAAC;AA4InB;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,MAAM,GACrB,aAAa,CAuBf"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deserializeTrellisObject = deserializeTrellisObject;
4
+ const yaml_1 = require("yaml");
5
+ const models_1 = require("../models");
6
+ const inferObjectType_1 = require("./inferObjectType");
7
+ /**
8
+ * Extracts frontmatter and body content from markdown string
9
+ */
10
+ function extractFrontmatterAndBody(markdownString) {
11
+ const frontmatterStart = markdownString.indexOf("---");
12
+ if (frontmatterStart === -1) {
13
+ throw new Error("Invalid format: Expected YAML frontmatter delimited by --- markers");
14
+ }
15
+ const frontmatterEnd = markdownString.indexOf("---", frontmatterStart + 3);
16
+ if (frontmatterEnd === -1) {
17
+ throw new Error("Invalid format: Expected YAML frontmatter delimited by --- markers");
18
+ }
19
+ const yamlContent = markdownString
20
+ .substring(frontmatterStart + 3, frontmatterEnd)
21
+ .trim();
22
+ const bodyContent = markdownString
23
+ .substring(frontmatterEnd + 3)
24
+ .replace(/^\n+/, "");
25
+ return { yamlContent, bodyContent };
26
+ }
27
+ /**
28
+ * Parses YAML content and validates it's an object
29
+ */
30
+ function parseFrontmatter(yamlContent) {
31
+ let frontmatter;
32
+ try {
33
+ frontmatter = (0, yaml_1.parse)(yamlContent);
34
+ }
35
+ catch (error) {
36
+ throw new Error(`Invalid YAML frontmatter: ${error instanceof Error ? error.message : "Unknown error"}`);
37
+ }
38
+ if (typeof frontmatter !== "object" || frontmatter === null) {
39
+ throw new Error("Invalid frontmatter: Expected an object");
40
+ }
41
+ return frontmatter;
42
+ }
43
+ /**
44
+ * Validates required fields in frontmatter
45
+ */
46
+ function validateRequiredFields(fm) {
47
+ const requiredFields = [
48
+ "id",
49
+ "title",
50
+ "status",
51
+ "priority",
52
+ "schema",
53
+ ];
54
+ for (const field of requiredFields) {
55
+ if (fm[field] === undefined || fm[field] === null) {
56
+ throw new Error(`Missing required field: ${field}`);
57
+ }
58
+ if (typeof fm[field] !== "string") {
59
+ throw new Error(`Invalid type for field ${field}: Expected string`);
60
+ }
61
+ }
62
+ }
63
+ /**
64
+ * Converts affectedFiles object to Map
65
+ */
66
+ function processAffectedFiles(fm) {
67
+ const affectedFilesMap = new Map();
68
+ if (fm.affectedFiles &&
69
+ typeof fm.affectedFiles === "object" &&
70
+ fm.affectedFiles !== null) {
71
+ for (const [key, value] of Object.entries(fm.affectedFiles)) {
72
+ if (typeof value === "string") {
73
+ affectedFilesMap.set(key, value);
74
+ }
75
+ }
76
+ }
77
+ return affectedFilesMap;
78
+ }
79
+ /**
80
+ * Safely converts value to string array
81
+ */
82
+ function toStringArray(value) {
83
+ if (Array.isArray(value)) {
84
+ return value.filter((item) => typeof item === "string");
85
+ }
86
+ return [];
87
+ }
88
+ /**
89
+ * Converts status string to enum
90
+ */
91
+ function toStatus(statusString) {
92
+ const status = statusString;
93
+ if (Object.values(models_1.TrellisObjectStatus).includes(status)) {
94
+ return status;
95
+ }
96
+ throw new Error(`Invalid status value: ${status}`);
97
+ }
98
+ /**
99
+ * Converts priority string to enum
100
+ */
101
+ function toPriority(priorityString) {
102
+ const priority = priorityString;
103
+ if (Object.values(models_1.TrellisObjectPriority).includes(priority)) {
104
+ return priority;
105
+ }
106
+ throw new Error(`Invalid priority value: ${priority}`);
107
+ }
108
+ /**
109
+ * Deserializes a markdown string with YAML frontmatter back to a TrellisObject
110
+ * @param markdownString - The markdown string with YAML frontmatter to deserialize
111
+ * @returns A TrellisObject reconstructed from the markdown string
112
+ * @throws Error if the input string is not properly formatted or missing required fields
113
+ */
114
+ function deserializeTrellisObject(markdownString) {
115
+ const { yamlContent, bodyContent } = extractFrontmatterAndBody(markdownString);
116
+ const fm = parseFrontmatter(yamlContent);
117
+ validateRequiredFields(fm);
118
+ const affectedFilesMap = processAffectedFiles(fm);
119
+ const trellisObject = {
120
+ id: fm.id,
121
+ type: (0, inferObjectType_1.inferObjectType)(fm.id),
122
+ title: fm.title,
123
+ status: toStatus(fm.status),
124
+ priority: toPriority(fm.priority),
125
+ prerequisites: toStringArray(fm.prerequisites),
126
+ affectedFiles: affectedFilesMap,
127
+ log: toStringArray(fm.log),
128
+ schema: fm.schema,
129
+ childrenIds: toStringArray(fm.childrenIds),
130
+ body: bodyContent,
131
+ };
132
+ return trellisObject;
133
+ }
134
+ //# sourceMappingURL=deserializeTrellisObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deserializeTrellisObject.js","sourceRoot":"","sources":["../../src/utils/deserializeTrellisObject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { TrellisObject } from "../models/TrellisObject";
2
+ /**
3
+ * Filters a list of TrellisObjects to return only those that are available to work on.
4
+ *
5
+ * An object is considered unavailable if:
6
+ * 1. It doesn't have a status of "open"
7
+ * 2. It has prerequisites that refer to objects in the same list that are not "done" or "wont-do"
8
+ *
9
+ * @param objects - Array of TrellisObjects to filter
10
+ * @returns Array of available TrellisObjects
11
+ */
12
+ export declare function filterUnavailableObjects(objects: TrellisObject[]): TrellisObject[];
13
+ //# sourceMappingURL=filterUnavailableObjects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterUnavailableObjects.d.ts","sourceRoot":"","sources":["../../src/utils/filterUnavailableObjects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,aAAa,EAAE,GACvB,aAAa,EAAE,CA+BjB"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.filterUnavailableObjects = filterUnavailableObjects;
4
+ const TrellisObjectStatus_1 = require("../models/TrellisObjectStatus");
5
+ /**
6
+ * Filters a list of TrellisObjects to return only those that are available to work on.
7
+ *
8
+ * An object is considered unavailable if:
9
+ * 1. It doesn't have a status of "open"
10
+ * 2. It has prerequisites that refer to objects in the same list that are not "done" or "wont-do"
11
+ *
12
+ * @param objects - Array of TrellisObjects to filter
13
+ * @returns Array of available TrellisObjects
14
+ */
15
+ function filterUnavailableObjects(objects) {
16
+ // Create a map for quick lookup of objects by ID
17
+ const objectMap = new Map();
18
+ objects.forEach((obj) => objectMap.set(obj.id, obj));
19
+ return objects.filter((obj) => {
20
+ // Rule 1: Object must have status "open"
21
+ if (obj.status !== TrellisObjectStatus_1.TrellisObjectStatus.OPEN) {
22
+ return false;
23
+ }
24
+ // Rule 2: Check prerequisites
25
+ for (const prerequisiteId of obj.prerequisites) {
26
+ const prerequisiteObj = objectMap.get(prerequisiteId);
27
+ // If prerequisite is not in the list, it's fine (external dependency)
28
+ if (!prerequisiteObj) {
29
+ continue;
30
+ }
31
+ // If prerequisite is in the list but not done or wont-do, exclude this object
32
+ if (prerequisiteObj.status !== TrellisObjectStatus_1.TrellisObjectStatus.DONE &&
33
+ prerequisiteObj.status !== TrellisObjectStatus_1.TrellisObjectStatus.WONT_DO) {
34
+ return false;
35
+ }
36
+ }
37
+ return true;
38
+ });
39
+ }
40
+ //# sourceMappingURL=filterUnavailableObjects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterUnavailableObjects.js","sourceRoot":"","sources":["../../src/utils/filterUnavailableObjects.ts"],"names":[],"mappings":";;AAaA,4DAiCC;AA7CD,uEAAoE;AAEpE;;;;;;;;;GASG;AACH,SAAgB,wBAAwB,CACtC,OAAwB;IAExB,iDAAiD;IACjD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;IACnD,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAErD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QAC5B,yCAAyC;QACzC,IAAI,GAAG,CAAC,MAAM,KAAK,yCAAmB,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,8BAA8B;QAC9B,KAAK,MAAM,cAAc,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;YAC/C,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAEtD,sEAAsE;YACtE,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,8EAA8E;YAC9E,IACE,eAAe,CAAC,MAAM,KAAK,yCAAmB,CAAC,IAAI;gBACnD,eAAe,CAAC,MAAM,KAAK,yCAAmB,CAAC,OAAO,EACtD,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { TrellisObjectType } from "../models/TrellisObjectType";
2
+ /**
3
+ * Generates a unique ID for a Trellis object
4
+ * @param title - The title to generate an ID from
5
+ * @param type - The type of Trellis object
6
+ * @param existingIds - List of existing IDs to avoid duplicates
7
+ * @returns A unique ID with appropriate prefix
8
+ */
9
+ export declare function generateUniqueId(title: string, type: TrellisObjectType, existingIds: string[]): string;
10
+ //# sourceMappingURL=generateUniqueId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateUniqueId.d.ts","sourceRoot":"","sources":["../../src/utils/generateUniqueId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AA4ChE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,iBAAiB,EACvB,WAAW,EAAE,MAAM,EAAE,GACpB,MAAM,CAyBR"}