@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.
- package/LICENSE +674 -0
- package/README.md +81 -0
- package/dist/configuration/ServerConfig.d.ts +8 -0
- package/dist/configuration/ServerConfig.d.ts.map +1 -0
- package/dist/configuration/ServerConfig.js +3 -0
- package/dist/configuration/ServerConfig.js.map +1 -0
- package/dist/configuration/index.d.ts +2 -0
- package/dist/configuration/index.d.ts.map +1 -0
- package/dist/configuration/index.js +18 -0
- package/dist/configuration/index.js.map +1 -0
- package/dist/models/TrellisObject.d.ts +18 -0
- package/dist/models/TrellisObject.d.ts.map +1 -0
- package/dist/models/TrellisObject.js +3 -0
- package/dist/models/TrellisObject.js.map +1 -0
- package/dist/models/TrellisObjectPriority.d.ts +6 -0
- package/dist/models/TrellisObjectPriority.d.ts.map +1 -0
- package/dist/models/TrellisObjectPriority.js +10 -0
- package/dist/models/TrellisObjectPriority.js.map +1 -0
- package/dist/models/TrellisObjectStatus.d.ts +8 -0
- package/dist/models/TrellisObjectStatus.d.ts.map +1 -0
- package/dist/models/TrellisObjectStatus.js +12 -0
- package/dist/models/TrellisObjectStatus.js.map +1 -0
- package/dist/models/TrellisObjectType.d.ts +7 -0
- package/dist/models/TrellisObjectType.d.ts.map +1 -0
- package/dist/models/TrellisObjectType.js +11 -0
- package/dist/models/TrellisObjectType.js.map +1 -0
- package/dist/models/__tests__/isClaimable.test.d.ts +2 -0
- package/dist/models/__tests__/isClaimable.test.d.ts.map +1 -0
- package/dist/models/__tests__/isClaimable.test.js +101 -0
- package/dist/models/__tests__/isClaimable.test.js.map +1 -0
- package/dist/models/__tests__/isClosed.test.d.ts +2 -0
- package/dist/models/__tests__/isClosed.test.d.ts.map +1 -0
- package/dist/models/__tests__/isClosed.test.js +84 -0
- package/dist/models/__tests__/isClosed.test.js.map +1 -0
- package/dist/models/__tests__/isOpen.test.d.ts +2 -0
- package/dist/models/__tests__/isOpen.test.d.ts.map +1 -0
- package/dist/models/__tests__/isOpen.test.js +84 -0
- package/dist/models/__tests__/isOpen.test.js.map +1 -0
- package/dist/models/index.d.ts +8 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +16 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/isClaimable.d.ts +10 -0
- package/dist/models/isClaimable.d.ts.map +1 -0
- package/dist/models/isClaimable.js +16 -0
- package/dist/models/isClaimable.js.map +1 -0
- package/dist/models/isClosed.d.ts +10 -0
- package/dist/models/isClosed.d.ts.map +1 -0
- package/dist/models/isClosed.js +16 -0
- package/dist/models/isClosed.js.map +1 -0
- package/dist/models/isOpen.d.ts +10 -0
- package/dist/models/isOpen.d.ts.map +1 -0
- package/dist/models/isOpen.js +16 -0
- package/dist/models/isOpen.js.map +1 -0
- package/dist/repositories/Repository.d.ts +8 -0
- package/dist/repositories/Repository.d.ts.map +1 -0
- package/dist/repositories/Repository.js +3 -0
- package/dist/repositories/Repository.js.map +1 -0
- package/dist/repositories/index.d.ts +3 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +19 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/repositories/local/LocalRepository.d.ts +21 -0
- package/dist/repositories/local/LocalRepository.d.ts.map +1 -0
- package/dist/repositories/local/LocalRepository.js +75 -0
- package/dist/repositories/local/LocalRepository.js.map +1 -0
- package/dist/repositories/local/__tests__/deleteObjectById.test.d.ts +2 -0
- package/dist/repositories/local/__tests__/deleteObjectById.test.d.ts.map +1 -0
- package/dist/repositories/local/__tests__/deleteObjectById.test.js +228 -0
- package/dist/repositories/local/__tests__/deleteObjectById.test.js.map +1 -0
- package/dist/repositories/local/__tests__/extractMarkdownIds.test.d.ts +2 -0
- package/dist/repositories/local/__tests__/extractMarkdownIds.test.d.ts.map +1 -0
- package/dist/repositories/local/__tests__/extractMarkdownIds.test.js +135 -0
- package/dist/repositories/local/__tests__/extractMarkdownIds.test.js.map +1 -0
- package/dist/repositories/local/__tests__/findMarkdownFiles.test.d.ts +2 -0
- package/dist/repositories/local/__tests__/findMarkdownFiles.test.d.ts.map +1 -0
- package/dist/repositories/local/__tests__/findMarkdownFiles.test.js +236 -0
- package/dist/repositories/local/__tests__/findMarkdownFiles.test.js.map +1 -0
- package/dist/repositories/local/__tests__/getObjectByFilePath.test.d.ts +2 -0
- package/dist/repositories/local/__tests__/getObjectByFilePath.test.d.ts.map +1 -0
- package/dist/repositories/local/__tests__/getObjectByFilePath.test.js +96 -0
- package/dist/repositories/local/__tests__/getObjectByFilePath.test.js.map +1 -0
- package/dist/repositories/local/__tests__/getObjectById.test.d.ts +2 -0
- package/dist/repositories/local/__tests__/getObjectById.test.d.ts.map +1 -0
- package/dist/repositories/local/__tests__/getObjectById.test.js +46 -0
- package/dist/repositories/local/__tests__/getObjectById.test.js.map +1 -0
- package/dist/repositories/local/__tests__/getObjectFilePath.test.d.ts +2 -0
- package/dist/repositories/local/__tests__/getObjectFilePath.test.d.ts.map +1 -0
- package/dist/repositories/local/__tests__/getObjectFilePath.test.js +172 -0
- package/dist/repositories/local/__tests__/getObjectFilePath.test.js.map +1 -0
- package/dist/repositories/local/__tests__/getObjects.test.d.ts +2 -0
- package/dist/repositories/local/__tests__/getObjects.test.d.ts.map +1 -0
- package/dist/repositories/local/__tests__/getObjects.test.js +351 -0
- package/dist/repositories/local/__tests__/getObjects.test.js.map +1 -0
- package/dist/repositories/local/__tests__/scopeFilter.test.d.ts +2 -0
- package/dist/repositories/local/__tests__/scopeFilter.test.d.ts.map +1 -0
- package/dist/repositories/local/__tests__/scopeFilter.test.js +109 -0
- package/dist/repositories/local/__tests__/scopeFilter.test.js.map +1 -0
- package/dist/repositories/local/deleteObjectById.d.ts +16 -0
- package/dist/repositories/local/deleteObjectById.d.ts.map +1 -0
- package/dist/repositories/local/deleteObjectById.js +108 -0
- package/dist/repositories/local/deleteObjectById.js.map +1 -0
- package/dist/repositories/local/extractMarkdownIds.d.ts +17 -0
- package/dist/repositories/local/extractMarkdownIds.d.ts.map +1 -0
- package/dist/repositories/local/extractMarkdownIds.js +34 -0
- package/dist/repositories/local/extractMarkdownIds.js.map +1 -0
- package/dist/repositories/local/filterByScope.d.ts +8 -0
- package/dist/repositories/local/filterByScope.d.ts.map +1 -0
- package/dist/repositories/local/filterByScope.js +17 -0
- package/dist/repositories/local/filterByScope.js.map +1 -0
- package/dist/repositories/local/findMarkdownFiles.d.ts +9 -0
- package/dist/repositories/local/findMarkdownFiles.d.ts.map +1 -0
- package/dist/repositories/local/findMarkdownFiles.js +47 -0
- package/dist/repositories/local/findMarkdownFiles.js.map +1 -0
- package/dist/repositories/local/getObjectByFilePath.d.ts +9 -0
- package/dist/repositories/local/getObjectByFilePath.d.ts.map +1 -0
- package/dist/repositories/local/getObjectByFilePath.js +16 -0
- package/dist/repositories/local/getObjectByFilePath.js.map +1 -0
- package/dist/repositories/local/getObjectById.d.ts +10 -0
- package/dist/repositories/local/getObjectById.d.ts.map +1 -0
- package/dist/repositories/local/getObjectById.js +36 -0
- package/dist/repositories/local/getObjectById.js.map +1 -0
- package/dist/repositories/local/getObjectFilePath.d.ts +7 -0
- package/dist/repositories/local/getObjectFilePath.d.ts.map +1 -0
- package/dist/repositories/local/getObjectFilePath.js +90 -0
- package/dist/repositories/local/getObjectFilePath.js.map +1 -0
- package/dist/repositories/local/getObjects.d.ts +3 -0
- package/dist/repositories/local/getObjects.d.ts.map +1 -0
- package/dist/repositories/local/getObjects.js +64 -0
- package/dist/repositories/local/getObjects.js.map +1 -0
- package/dist/repositories/local/index.d.ts +8 -0
- package/dist/repositories/local/index.d.ts.map +1 -0
- package/dist/repositories/local/index.js +24 -0
- package/dist/repositories/local/index.js.map +1 -0
- package/dist/repositories/local/saveObject.d.ts +12 -0
- package/dist/repositories/local/saveObject.d.ts.map +1 -0
- package/dist/repositories/local/saveObject.js +27 -0
- package/dist/repositories/local/saveObject.js.map +1 -0
- package/dist/repositories/local/scopeFilter.d.ts +12 -0
- package/dist/repositories/local/scopeFilter.d.ts.map +1 -0
- package/dist/repositories/local/scopeFilter.js +21 -0
- package/dist/repositories/local/scopeFilter.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +138 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/__tests__/appendObjectLogTool.test.d.ts +2 -0
- package/dist/tools/__tests__/appendObjectLogTool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/appendObjectLogTool.test.js +125 -0
- package/dist/tools/__tests__/appendObjectLogTool.test.js.map +1 -0
- package/dist/tools/__tests__/claimTaskTool.test.d.ts +2 -0
- package/dist/tools/__tests__/claimTaskTool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/claimTaskTool.test.js +348 -0
- package/dist/tools/__tests__/claimTaskTool.test.js.map +1 -0
- package/dist/tools/__tests__/completeTaskTool.test.d.ts +2 -0
- package/dist/tools/__tests__/completeTaskTool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/completeTaskTool.test.js +221 -0
- package/dist/tools/__tests__/completeTaskTool.test.js.map +1 -0
- package/dist/tools/__tests__/createObjectTool.test.d.ts +2 -0
- package/dist/tools/__tests__/createObjectTool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/createObjectTool.test.js +387 -0
- package/dist/tools/__tests__/createObjectTool.test.js.map +1 -0
- package/dist/tools/__tests__/deleteObjectTool.test.d.ts +2 -0
- package/dist/tools/__tests__/deleteObjectTool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/deleteObjectTool.test.js +169 -0
- package/dist/tools/__tests__/deleteObjectTool.test.js.map +1 -0
- package/dist/tools/__tests__/getObjectTool.test.d.ts +2 -0
- package/dist/tools/__tests__/getObjectTool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/getObjectTool.test.js +124 -0
- package/dist/tools/__tests__/getObjectTool.test.js.map +1 -0
- package/dist/tools/__tests__/listObjectsTool.test.d.ts +2 -0
- package/dist/tools/__tests__/listObjectsTool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/listObjectsTool.test.js +266 -0
- package/dist/tools/__tests__/listObjectsTool.test.js.map +1 -0
- package/dist/tools/__tests__/updateObjectTool.test.d.ts +2 -0
- package/dist/tools/__tests__/updateObjectTool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/updateObjectTool.test.js +208 -0
- package/dist/tools/__tests__/updateObjectTool.test.js.map +1 -0
- package/dist/tools/activateTool.d.ts +38 -0
- package/dist/tools/activateTool.d.ts.map +1 -0
- package/dist/tools/activateTool.js +48 -0
- package/dist/tools/activateTool.js.map +1 -0
- package/dist/tools/appendObjectLogTool.d.ts +26 -0
- package/dist/tools/appendObjectLogTool.d.ts.map +1 -0
- package/dist/tools/appendObjectLogTool.js +65 -0
- package/dist/tools/appendObjectLogTool.js.map +1 -0
- package/dist/tools/claimTaskTool.d.ts +30 -0
- package/dist/tools/claimTaskTool.d.ts.map +1 -0
- package/dist/tools/claimTaskTool.js +109 -0
- package/dist/tools/claimTaskTool.js.map +1 -0
- package/dist/tools/completeTaskTool.d.ts +33 -0
- package/dist/tools/completeTaskTool.d.ts.map +1 -0
- package/dist/tools/completeTaskTool.js +61 -0
- package/dist/tools/completeTaskTool.js.map +1 -0
- package/dist/tools/createObjectTool.d.ts +52 -0
- package/dist/tools/createObjectTool.d.ts.map +1 -0
- package/dist/tools/createObjectTool.js +87 -0
- package/dist/tools/createObjectTool.js.map +1 -0
- package/dist/tools/deleteObjectTool.d.ts +27 -0
- package/dist/tools/deleteObjectTool.d.ts.map +1 -0
- package/dist/tools/deleteObjectTool.js +48 -0
- package/dist/tools/deleteObjectTool.js.map +1 -0
- package/dist/tools/getObjectTool.d.ts +22 -0
- package/dist/tools/getObjectTool.d.ts.map +1 -0
- package/dist/tools/getObjectTool.js +53 -0
- package/dist/tools/getObjectTool.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +34 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/listObjectsTool.d.ts +39 -0
- package/dist/tools/listObjectsTool.d.ts.map +1 -0
- package/dist/tools/listObjectsTool.js +87 -0
- package/dist/tools/listObjectsTool.js.map +1 -0
- package/dist/tools/pruneClosedTool.d.ts +26 -0
- package/dist/tools/pruneClosedTool.d.ts.map +1 -0
- package/dist/tools/pruneClosedTool.js +35 -0
- package/dist/tools/pruneClosedTool.js.map +1 -0
- package/dist/tools/updateObjectTool.d.ts +46 -0
- package/dist/tools/updateObjectTool.d.ts.map +1 -0
- package/dist/tools/updateObjectTool.js +93 -0
- package/dist/tools/updateObjectTool.js.map +1 -0
- package/dist/utils/__tests__/checkPrerequisitesComplete.test.d.ts +2 -0
- package/dist/utils/__tests__/checkPrerequisitesComplete.test.d.ts.map +1 -0
- package/dist/utils/__tests__/checkPrerequisitesComplete.test.js +200 -0
- package/dist/utils/__tests__/checkPrerequisitesComplete.test.js.map +1 -0
- package/dist/utils/__tests__/deserializeTrellisObject.test.d.ts +2 -0
- package/dist/utils/__tests__/deserializeTrellisObject.test.d.ts.map +1 -0
- package/dist/utils/__tests__/deserializeTrellisObject.test.js +329 -0
- package/dist/utils/__tests__/deserializeTrellisObject.test.js.map +1 -0
- package/dist/utils/__tests__/filterUnavailableObjects.test.d.ts +2 -0
- package/dist/utils/__tests__/filterUnavailableObjects.test.d.ts.map +1 -0
- package/dist/utils/__tests__/filterUnavailableObjects.test.js +172 -0
- package/dist/utils/__tests__/filterUnavailableObjects.test.js.map +1 -0
- package/dist/utils/__tests__/generateUniqueId.test.d.ts +2 -0
- package/dist/utils/__tests__/generateUniqueId.test.d.ts.map +1 -0
- package/dist/utils/__tests__/generateUniqueId.test.js +186 -0
- package/dist/utils/__tests__/generateUniqueId.test.js.map +1 -0
- package/dist/utils/__tests__/inferObjectType.test.d.ts +2 -0
- package/dist/utils/__tests__/inferObjectType.test.d.ts.map +1 -0
- package/dist/utils/__tests__/inferObjectType.test.js +43 -0
- package/dist/utils/__tests__/inferObjectType.test.js.map +1 -0
- package/dist/utils/__tests__/isRequiredForOtherObjects.test.d.ts +2 -0
- package/dist/utils/__tests__/isRequiredForOtherObjects.test.d.ts.map +1 -0
- package/dist/utils/__tests__/isRequiredForOtherObjects.test.js +229 -0
- package/dist/utils/__tests__/isRequiredForOtherObjects.test.js.map +1 -0
- package/dist/utils/__tests__/serializationRoundTrip.test.d.ts +2 -0
- package/dist/utils/__tests__/serializationRoundTrip.test.d.ts.map +1 -0
- package/dist/utils/__tests__/serializationRoundTrip.test.js +389 -0
- package/dist/utils/__tests__/serializationRoundTrip.test.js.map +1 -0
- package/dist/utils/__tests__/serializeTrellisObject.test.d.ts +2 -0
- package/dist/utils/__tests__/serializeTrellisObject.test.d.ts.map +1 -0
- package/dist/utils/__tests__/serializeTrellisObject.test.js +192 -0
- package/dist/utils/__tests__/serializeTrellisObject.test.js.map +1 -0
- package/dist/utils/__tests__/sortTrellisObjects.test.d.ts +2 -0
- package/dist/utils/__tests__/sortTrellisObjects.test.d.ts.map +1 -0
- package/dist/utils/__tests__/sortTrellisObjects.test.js +114 -0
- package/dist/utils/__tests__/sortTrellisObjects.test.js.map +1 -0
- package/dist/utils/checkPrerequisitesComplete.d.ts +12 -0
- package/dist/utils/checkPrerequisitesComplete.d.ts.map +1 -0
- package/dist/utils/checkPrerequisitesComplete.js +38 -0
- package/dist/utils/checkPrerequisitesComplete.js.map +1 -0
- package/dist/utils/deserializeTrellisObject.d.ts +9 -0
- package/dist/utils/deserializeTrellisObject.d.ts.map +1 -0
- package/dist/utils/deserializeTrellisObject.js +134 -0
- package/dist/utils/deserializeTrellisObject.js.map +1 -0
- package/dist/utils/filterUnavailableObjects.d.ts +13 -0
- package/dist/utils/filterUnavailableObjects.d.ts.map +1 -0
- package/dist/utils/filterUnavailableObjects.js +40 -0
- package/dist/utils/filterUnavailableObjects.js.map +1 -0
- package/dist/utils/generateUniqueId.d.ts +10 -0
- package/dist/utils/generateUniqueId.d.ts.map +1 -0
- package/dist/utils/generateUniqueId.js +67 -0
- package/dist/utils/generateUniqueId.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +20 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/inferObjectType.d.ts +3 -0
- package/dist/utils/inferObjectType.d.ts.map +1 -0
- package/dist/utils/inferObjectType.js +26 -0
- package/dist/utils/inferObjectType.js.map +1 -0
- package/dist/utils/isRequiredForOtherObjects.d.ts +12 -0
- package/dist/utils/isRequiredForOtherObjects.d.ts.map +1 -0
- package/dist/utils/isRequiredForOtherObjects.js +33 -0
- package/dist/utils/isRequiredForOtherObjects.js.map +1 -0
- package/dist/utils/serializeTrellisObject.d.ts +8 -0
- package/dist/utils/serializeTrellisObject.d.ts.map +1 -0
- package/dist/utils/serializeTrellisObject.js +35 -0
- package/dist/utils/serializeTrellisObject.js.map +1 -0
- package/dist/utils/sortTrellisObjects.d.ts +8 -0
- package/dist/utils/sortTrellisObjects.d.ts.map +1 -0
- package/dist/utils/sortTrellisObjects.js +20 -0
- package/dist/utils/sortTrellisObjects.js.map +1 -0
- package/dist/validation/ValidationError.d.ts +9 -0
- package/dist/validation/ValidationError.d.ts.map +1 -0
- package/dist/validation/ValidationError.js +18 -0
- package/dist/validation/ValidationError.js.map +1 -0
- package/dist/validation/ValidationErrorCode.d.ts +3 -0
- package/dist/validation/ValidationErrorCode.d.ts.map +1 -0
- package/dist/validation/ValidationErrorCode.js +3 -0
- package/dist/validation/ValidationErrorCode.js.map +1 -0
- package/dist/validation/ValidationErrorCodes.d.ts +8 -0
- package/dist/validation/ValidationErrorCodes.d.ts.map +1 -0
- package/dist/validation/ValidationErrorCodes.js +11 -0
- package/dist/validation/ValidationErrorCodes.js.map +1 -0
- package/dist/validation/__tests__/ValidationError.test.d.ts +2 -0
- package/dist/validation/__tests__/ValidationError.test.d.ts.map +1 -0
- package/dist/validation/__tests__/ValidationError.test.js +32 -0
- package/dist/validation/__tests__/ValidationError.test.js.map +1 -0
- package/dist/validation/__tests__/validateObjectCreation.test.d.ts +2 -0
- package/dist/validation/__tests__/validateObjectCreation.test.d.ts.map +1 -0
- package/dist/validation/__tests__/validateObjectCreation.test.js +93 -0
- package/dist/validation/__tests__/validateObjectCreation.test.js.map +1 -0
- package/dist/validation/__tests__/validateParentExists.test.d.ts +2 -0
- package/dist/validation/__tests__/validateParentExists.test.d.ts.map +1 -0
- package/dist/validation/__tests__/validateParentExists.test.js +62 -0
- package/dist/validation/__tests__/validateParentExists.test.js.map +1 -0
- package/dist/validation/__tests__/validateParentType.test.d.ts +2 -0
- package/dist/validation/__tests__/validateParentType.test.d.ts.map +1 -0
- package/dist/validation/__tests__/validateParentType.test.js +125 -0
- package/dist/validation/__tests__/validateParentType.test.js.map +1 -0
- package/dist/validation/__tests__/validateStatusTransition.test.d.ts +2 -0
- package/dist/validation/__tests__/validateStatusTransition.test.d.ts.map +1 -0
- package/dist/validation/__tests__/validateStatusTransition.test.js +103 -0
- package/dist/validation/__tests__/validateStatusTransition.test.js.map +1 -0
- package/dist/validation/validateObjectCreation.d.ts +12 -0
- package/dist/validation/validateObjectCreation.d.ts.map +1 -0
- package/dist/validation/validateObjectCreation.js +24 -0
- package/dist/validation/validateObjectCreation.js.map +1 -0
- package/dist/validation/validateParentExists.d.ts +10 -0
- package/dist/validation/validateParentExists.d.ts.map +1 -0
- package/dist/validation/validateParentExists.js +23 -0
- package/dist/validation/validateParentExists.js.map +1 -0
- package/dist/validation/validateParentType.d.ts +16 -0
- package/dist/validation/validateParentType.d.ts.map +1 -0
- package/dist/validation/validateParentType.js +48 -0
- package/dist/validation/validateParentType.js.map +1 -0
- package/dist/validation/validateStatusTransition.d.ts +12 -0
- package/dist/validation/validateStatusTransition.d.ts.map +1 -0
- package/dist/validation/validateStatusTransition.js +29 -0
- package/dist/validation/validateStatusTransition.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const models_1 = require("../../models");
|
|
4
|
+
const isRequiredForOtherObjects_1 = require("../isRequiredForOtherObjects");
|
|
5
|
+
// Mock repository implementation for testing
|
|
6
|
+
class MockRepository {
|
|
7
|
+
objects = new Map();
|
|
8
|
+
constructor(objects = []) {
|
|
9
|
+
objects.forEach((obj) => this.objects.set(obj.id, obj));
|
|
10
|
+
}
|
|
11
|
+
async getObjectById(id) {
|
|
12
|
+
return Promise.resolve(this.objects.get(id) || null);
|
|
13
|
+
}
|
|
14
|
+
async getObjects(_includeClosed) {
|
|
15
|
+
return Promise.resolve(Array.from(this.objects.values()));
|
|
16
|
+
}
|
|
17
|
+
async saveObject(trellisObject) {
|
|
18
|
+
this.objects.set(trellisObject.id, trellisObject);
|
|
19
|
+
return Promise.resolve();
|
|
20
|
+
}
|
|
21
|
+
async deleteObject(id) {
|
|
22
|
+
this.objects.delete(id);
|
|
23
|
+
return Promise.resolve();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
describe("isRequiredForOtherObjects", () => {
|
|
27
|
+
const createMockObject = (id, status, prerequisites = []) => ({
|
|
28
|
+
id,
|
|
29
|
+
title: `Task ${id}`,
|
|
30
|
+
status,
|
|
31
|
+
priority: models_1.TrellisObjectPriority.MEDIUM,
|
|
32
|
+
prerequisites,
|
|
33
|
+
affectedFiles: new Map(),
|
|
34
|
+
log: [],
|
|
35
|
+
schema: "v1.0",
|
|
36
|
+
childrenIds: [],
|
|
37
|
+
body: `Body for ${id}`,
|
|
38
|
+
type: models_1.TrellisObjectType.TASK,
|
|
39
|
+
});
|
|
40
|
+
it("should return false when no other objects exist", async () => {
|
|
41
|
+
const object = createMockObject("task-1", models_1.TrellisObjectStatus.OPEN);
|
|
42
|
+
const repository = new MockRepository([object]);
|
|
43
|
+
const result = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(object, repository);
|
|
44
|
+
expect(result).toBe(false);
|
|
45
|
+
});
|
|
46
|
+
it("should return false when no other objects have this object as prerequisite", async () => {
|
|
47
|
+
const object1 = createMockObject("task-1", models_1.TrellisObjectStatus.OPEN);
|
|
48
|
+
const object2 = createMockObject("task-2", models_1.TrellisObjectStatus.OPEN, [
|
|
49
|
+
"task-3",
|
|
50
|
+
]);
|
|
51
|
+
const object3 = createMockObject("task-3", models_1.TrellisObjectStatus.DONE);
|
|
52
|
+
const repository = new MockRepository([object1, object2, object3]);
|
|
53
|
+
const result = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(object1, repository);
|
|
54
|
+
expect(result).toBe(false);
|
|
55
|
+
});
|
|
56
|
+
it("should return true when an open object has this object as prerequisite", async () => {
|
|
57
|
+
const prerequisiteObject = createMockObject("prereq-1", models_1.TrellisObjectStatus.DONE);
|
|
58
|
+
const dependentObject = createMockObject("task-1", models_1.TrellisObjectStatus.OPEN, ["prereq-1"]);
|
|
59
|
+
const repository = new MockRepository([
|
|
60
|
+
prerequisiteObject,
|
|
61
|
+
dependentObject,
|
|
62
|
+
]);
|
|
63
|
+
const result = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(prerequisiteObject, repository);
|
|
64
|
+
expect(result).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
it("should return true when an in-progress object has this object as prerequisite", async () => {
|
|
67
|
+
const prerequisiteObject = createMockObject("prereq-1", models_1.TrellisObjectStatus.DONE);
|
|
68
|
+
const dependentObject = createMockObject("task-1", models_1.TrellisObjectStatus.IN_PROGRESS, ["prereq-1"]);
|
|
69
|
+
const repository = new MockRepository([
|
|
70
|
+
prerequisiteObject,
|
|
71
|
+
dependentObject,
|
|
72
|
+
]);
|
|
73
|
+
const result = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(prerequisiteObject, repository);
|
|
74
|
+
expect(result).toBe(true);
|
|
75
|
+
});
|
|
76
|
+
it("should return true when a draft object has this object as prerequisite", async () => {
|
|
77
|
+
const prerequisiteObject = createMockObject("prereq-1", models_1.TrellisObjectStatus.DONE);
|
|
78
|
+
const dependentObject = createMockObject("task-1", models_1.TrellisObjectStatus.DRAFT, ["prereq-1"]);
|
|
79
|
+
const repository = new MockRepository([
|
|
80
|
+
prerequisiteObject,
|
|
81
|
+
dependentObject,
|
|
82
|
+
]);
|
|
83
|
+
const result = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(prerequisiteObject, repository);
|
|
84
|
+
expect(result).toBe(true);
|
|
85
|
+
});
|
|
86
|
+
it("should return false when only closed objects have this object as prerequisite", async () => {
|
|
87
|
+
const prerequisiteObject = createMockObject("prereq-1", models_1.TrellisObjectStatus.DONE);
|
|
88
|
+
const doneObject = createMockObject("task-1", models_1.TrellisObjectStatus.DONE, [
|
|
89
|
+
"prereq-1",
|
|
90
|
+
]);
|
|
91
|
+
const wontDoObject = createMockObject("task-2", models_1.TrellisObjectStatus.WONT_DO, ["prereq-1"]);
|
|
92
|
+
const repository = new MockRepository([
|
|
93
|
+
prerequisiteObject,
|
|
94
|
+
doneObject,
|
|
95
|
+
wontDoObject,
|
|
96
|
+
]);
|
|
97
|
+
const result = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(prerequisiteObject, repository);
|
|
98
|
+
expect(result).toBe(false);
|
|
99
|
+
});
|
|
100
|
+
it("should return true when mix of closed and non-closed objects have this object as prerequisite", async () => {
|
|
101
|
+
const prerequisiteObject = createMockObject("prereq-1", models_1.TrellisObjectStatus.DONE);
|
|
102
|
+
const doneObject = createMockObject("task-1", models_1.TrellisObjectStatus.DONE, [
|
|
103
|
+
"prereq-1",
|
|
104
|
+
]);
|
|
105
|
+
const openObject = createMockObject("task-2", models_1.TrellisObjectStatus.OPEN, [
|
|
106
|
+
"prereq-1",
|
|
107
|
+
]);
|
|
108
|
+
const repository = new MockRepository([
|
|
109
|
+
prerequisiteObject,
|
|
110
|
+
doneObject,
|
|
111
|
+
openObject,
|
|
112
|
+
]);
|
|
113
|
+
const result = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(prerequisiteObject, repository);
|
|
114
|
+
expect(result).toBe(true);
|
|
115
|
+
});
|
|
116
|
+
it("should handle multiple objects requiring the same object", async () => {
|
|
117
|
+
const prerequisiteObject = createMockObject("prereq-1", models_1.TrellisObjectStatus.DONE);
|
|
118
|
+
const openObject1 = createMockObject("task-1", models_1.TrellisObjectStatus.OPEN, [
|
|
119
|
+
"prereq-1",
|
|
120
|
+
]);
|
|
121
|
+
const openObject2 = createMockObject("task-2", models_1.TrellisObjectStatus.OPEN, [
|
|
122
|
+
"prereq-1",
|
|
123
|
+
]);
|
|
124
|
+
const repository = new MockRepository([
|
|
125
|
+
prerequisiteObject,
|
|
126
|
+
openObject1,
|
|
127
|
+
openObject2,
|
|
128
|
+
]);
|
|
129
|
+
const result = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(prerequisiteObject, repository);
|
|
130
|
+
expect(result).toBe(true);
|
|
131
|
+
});
|
|
132
|
+
it("should handle objects with multiple prerequisites where target is one of them", async () => {
|
|
133
|
+
const prerequisiteObject = createMockObject("prereq-1", models_1.TrellisObjectStatus.DONE);
|
|
134
|
+
const otherPrereq = createMockObject("prereq-2", models_1.TrellisObjectStatus.DONE);
|
|
135
|
+
const dependentObject = createMockObject("task-1", models_1.TrellisObjectStatus.OPEN, ["prereq-1", "prereq-2", "prereq-3"]);
|
|
136
|
+
const repository = new MockRepository([
|
|
137
|
+
prerequisiteObject,
|
|
138
|
+
otherPrereq,
|
|
139
|
+
dependentObject,
|
|
140
|
+
]);
|
|
141
|
+
const result = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(prerequisiteObject, repository);
|
|
142
|
+
expect(result).toBe(true);
|
|
143
|
+
});
|
|
144
|
+
it("should not consider the object itself as a dependent", async () => {
|
|
145
|
+
const object = createMockObject("task-1", models_1.TrellisObjectStatus.OPEN, [
|
|
146
|
+
"task-1",
|
|
147
|
+
]); // Self-referencing prerequisites (edge case)
|
|
148
|
+
const repository = new MockRepository([object]);
|
|
149
|
+
const result = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(object, repository);
|
|
150
|
+
expect(result).toBe(false);
|
|
151
|
+
});
|
|
152
|
+
it("should handle empty repository", async () => {
|
|
153
|
+
const object = createMockObject("task-1", models_1.TrellisObjectStatus.OPEN);
|
|
154
|
+
const repository = new MockRepository([]);
|
|
155
|
+
const result = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(object, repository);
|
|
156
|
+
expect(result).toBe(false);
|
|
157
|
+
});
|
|
158
|
+
it("should work with different object types", async () => {
|
|
159
|
+
const prerequisiteProject = {
|
|
160
|
+
...createMockObject("proj-1", models_1.TrellisObjectStatus.DONE),
|
|
161
|
+
type: models_1.TrellisObjectType.PROJECT,
|
|
162
|
+
};
|
|
163
|
+
const dependentEpic = {
|
|
164
|
+
...createMockObject("epic-1", models_1.TrellisObjectStatus.OPEN, ["proj-1"]),
|
|
165
|
+
type: models_1.TrellisObjectType.EPIC,
|
|
166
|
+
};
|
|
167
|
+
const repository = new MockRepository([prerequisiteProject, dependentEpic]);
|
|
168
|
+
const result = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(prerequisiteProject, repository);
|
|
169
|
+
expect(result).toBe(true);
|
|
170
|
+
});
|
|
171
|
+
it("should handle repository errors gracefully", async () => {
|
|
172
|
+
const object = createMockObject("task-1", models_1.TrellisObjectStatus.OPEN);
|
|
173
|
+
// Mock repository that throws an error
|
|
174
|
+
const mockRepository = {
|
|
175
|
+
getObjectById: jest.fn(),
|
|
176
|
+
getObjects: jest.fn().mockRejectedValue(new Error("Repository error")),
|
|
177
|
+
saveObject: jest.fn(),
|
|
178
|
+
deleteObject: jest.fn(),
|
|
179
|
+
};
|
|
180
|
+
await expect((0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(object, mockRepository)).rejects.toThrow("Repository error");
|
|
181
|
+
});
|
|
182
|
+
it("should work regardless of the target object's status", async () => {
|
|
183
|
+
const prerequisiteObject = createMockObject("prereq-1", models_1.TrellisObjectStatus.OPEN);
|
|
184
|
+
const dependentObject = createMockObject("task-1", models_1.TrellisObjectStatus.IN_PROGRESS, ["prereq-1"]);
|
|
185
|
+
const repository = new MockRepository([
|
|
186
|
+
prerequisiteObject,
|
|
187
|
+
dependentObject,
|
|
188
|
+
]);
|
|
189
|
+
const result = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(prerequisiteObject, repository);
|
|
190
|
+
expect(result).toBe(true);
|
|
191
|
+
});
|
|
192
|
+
it("should handle complex scenario with multiple objects and statuses", async () => {
|
|
193
|
+
const prereq1 = createMockObject("prereq-1", models_1.TrellisObjectStatus.DONE);
|
|
194
|
+
const prereq2 = createMockObject("prereq-2", models_1.TrellisObjectStatus.OPEN);
|
|
195
|
+
// Objects that depend on prereq-1
|
|
196
|
+
const doneTask = createMockObject("task-1", models_1.TrellisObjectStatus.DONE, [
|
|
197
|
+
"prereq-1",
|
|
198
|
+
]);
|
|
199
|
+
const wontDoTask = createMockObject("task-2", models_1.TrellisObjectStatus.WONT_DO, [
|
|
200
|
+
"prereq-1",
|
|
201
|
+
]);
|
|
202
|
+
const openTask = createMockObject("task-3", models_1.TrellisObjectStatus.OPEN, [
|
|
203
|
+
"prereq-1",
|
|
204
|
+
]);
|
|
205
|
+
// Object that depends on prereq-2
|
|
206
|
+
const inProgressTask = createMockObject("task-4", models_1.TrellisObjectStatus.IN_PROGRESS, ["prereq-2"]);
|
|
207
|
+
// Object with no dependencies
|
|
208
|
+
const independentTask = createMockObject("task-5", models_1.TrellisObjectStatus.OPEN);
|
|
209
|
+
const repository = new MockRepository([
|
|
210
|
+
prereq1,
|
|
211
|
+
prereq2,
|
|
212
|
+
doneTask,
|
|
213
|
+
wontDoTask,
|
|
214
|
+
openTask,
|
|
215
|
+
inProgressTask,
|
|
216
|
+
independentTask,
|
|
217
|
+
]);
|
|
218
|
+
// prereq-1 should be required because openTask depends on it and is not closed
|
|
219
|
+
const result1 = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(prereq1, repository);
|
|
220
|
+
expect(result1).toBe(true);
|
|
221
|
+
// prereq-2 should be required because inProgressTask depends on it and is not closed
|
|
222
|
+
const result2 = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(prereq2, repository);
|
|
223
|
+
expect(result2).toBe(true);
|
|
224
|
+
// independentTask should not be required by anyone
|
|
225
|
+
const result3 = await (0, isRequiredForOtherObjects_1.isRequiredForOtherObjects)(independentTask, repository);
|
|
226
|
+
expect(result3).toBe(false);
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
//# sourceMappingURL=isRequiredForOtherObjects.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isRequiredForOtherObjects.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/isRequiredForOtherObjects.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializationRoundTrip.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/serializationRoundTrip.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const models_1 = require("../../models");
|
|
4
|
+
const deserializeTrellisObject_1 = require("../deserializeTrellisObject");
|
|
5
|
+
const serializeTrellisObject_1 = require("../serializeTrellisObject");
|
|
6
|
+
describe("TrellisObject Serialization/Deserialization Integration Tests", () => {
|
|
7
|
+
describe("Round-trip serialization compatibility", () => {
|
|
8
|
+
it("should handle basic TrellisObject round-trip", () => {
|
|
9
|
+
const original = {
|
|
10
|
+
id: "T-basic-test",
|
|
11
|
+
title: "Basic Test Task",
|
|
12
|
+
status: models_1.TrellisObjectStatus.OPEN,
|
|
13
|
+
priority: models_1.TrellisObjectPriority.MEDIUM,
|
|
14
|
+
prerequisites: ["prereq-1", "prereq-2"],
|
|
15
|
+
affectedFiles: new Map([
|
|
16
|
+
["src/component.ts", "modified"],
|
|
17
|
+
["tests/component.test.ts", "created"],
|
|
18
|
+
]),
|
|
19
|
+
log: ["Initial commit", "Added tests"],
|
|
20
|
+
schema: "v1.0",
|
|
21
|
+
childrenIds: ["child-1"],
|
|
22
|
+
body: "Basic task description",
|
|
23
|
+
type: models_1.TrellisObjectType.TASK,
|
|
24
|
+
};
|
|
25
|
+
const serialized = (0, serializeTrellisObject_1.serializeTrellisObject)(original);
|
|
26
|
+
const deserialized = (0, deserializeTrellisObject_1.deserializeTrellisObject)(serialized);
|
|
27
|
+
expect(deserialized).toEqual(original);
|
|
28
|
+
});
|
|
29
|
+
it("should handle complex multi-line content round-trip", () => {
|
|
30
|
+
const complexBody = `# Complex Task
|
|
31
|
+
|
|
32
|
+
This task involves multiple steps:
|
|
33
|
+
|
|
34
|
+
## Prerequisites
|
|
35
|
+
- Set up environment
|
|
36
|
+
- Install dependencies
|
|
37
|
+
|
|
38
|
+
## Implementation Steps
|
|
39
|
+
|
|
40
|
+
1. Create the main component
|
|
41
|
+
2. Add unit tests
|
|
42
|
+
3. Update documentation
|
|
43
|
+
|
|
44
|
+
\`\`\`typescript
|
|
45
|
+
interface Example {
|
|
46
|
+
name: string;
|
|
47
|
+
value: number;
|
|
48
|
+
}
|
|
49
|
+
\`\`\`
|
|
50
|
+
|
|
51
|
+
## Notes
|
|
52
|
+
|
|
53
|
+
> **Important**: This requires careful attention to detail.
|
|
54
|
+
|
|
55
|
+
### Edge Cases
|
|
56
|
+
- Handle empty inputs
|
|
57
|
+
- Validate user permissions
|
|
58
|
+
- Graceful error handling
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
Additional section with --- delimiters for testing.`;
|
|
63
|
+
const original = {
|
|
64
|
+
id: "T-complex-content-test",
|
|
65
|
+
title: 'Complex Content Test with "quotes" and symbols: @#$%',
|
|
66
|
+
status: models_1.TrellisObjectStatus.IN_PROGRESS,
|
|
67
|
+
priority: models_1.TrellisObjectPriority.HIGH,
|
|
68
|
+
prerequisites: [
|
|
69
|
+
"setup environment",
|
|
70
|
+
'install deps with "quotes"',
|
|
71
|
+
"config: with: colons",
|
|
72
|
+
],
|
|
73
|
+
affectedFiles: new Map([
|
|
74
|
+
["src/complex file name.ts", "created"],
|
|
75
|
+
["docs/README.md", "updated"],
|
|
76
|
+
["config/settings.json", "modified"],
|
|
77
|
+
["tests/integration/complex.test.ts", "created"],
|
|
78
|
+
]),
|
|
79
|
+
log: [
|
|
80
|
+
"Initial implementation",
|
|
81
|
+
"Multi-line commit message:\n- Added feature A\n- Fixed bug B\n- Updated docs",
|
|
82
|
+
"Code review feedback:\n\n> Reviewer comments:\n> - Good implementation\n> - Consider edge cases",
|
|
83
|
+
'Final commit with special chars: "quotes" and symbols @#$%',
|
|
84
|
+
],
|
|
85
|
+
schema: "v2.1-beta",
|
|
86
|
+
childrenIds: ["subtask-1", "subtask-2", "cleanup-task"],
|
|
87
|
+
body: complexBody,
|
|
88
|
+
type: models_1.TrellisObjectType.TASK,
|
|
89
|
+
};
|
|
90
|
+
const serialized = (0, serializeTrellisObject_1.serializeTrellisObject)(original);
|
|
91
|
+
const deserialized = (0, deserializeTrellisObject_1.deserializeTrellisObject)(serialized);
|
|
92
|
+
expect(deserialized).toEqual(original);
|
|
93
|
+
});
|
|
94
|
+
it("should handle empty collections round-trip", () => {
|
|
95
|
+
const original = {
|
|
96
|
+
id: "T-empty-collections-test",
|
|
97
|
+
title: "Empty Collections Test",
|
|
98
|
+
status: models_1.TrellisObjectStatus.DRAFT,
|
|
99
|
+
priority: models_1.TrellisObjectPriority.LOW,
|
|
100
|
+
prerequisites: [],
|
|
101
|
+
affectedFiles: new Map(),
|
|
102
|
+
log: [],
|
|
103
|
+
schema: "v1.0",
|
|
104
|
+
childrenIds: [],
|
|
105
|
+
body: "",
|
|
106
|
+
type: models_1.TrellisObjectType.TASK,
|
|
107
|
+
};
|
|
108
|
+
const serialized = (0, serializeTrellisObject_1.serializeTrellisObject)(original);
|
|
109
|
+
const deserialized = (0, deserializeTrellisObject_1.deserializeTrellisObject)(serialized);
|
|
110
|
+
expect(deserialized).toEqual(original);
|
|
111
|
+
});
|
|
112
|
+
it("should handle special characters and unicode round-trip", () => {
|
|
113
|
+
const original = {
|
|
114
|
+
id: "T-unicode-test-🚀",
|
|
115
|
+
title: "Unicode Test: 你好世界 🌍 émojis & spëcial chars",
|
|
116
|
+
status: models_1.TrellisObjectStatus.OPEN,
|
|
117
|
+
priority: models_1.TrellisObjectPriority.MEDIUM,
|
|
118
|
+
prerequisites: [
|
|
119
|
+
"Setup with émojis 🔧",
|
|
120
|
+
"Config files: ~/.bashrc",
|
|
121
|
+
'Path with spaces and "quotes"',
|
|
122
|
+
],
|
|
123
|
+
affectedFiles: new Map([
|
|
124
|
+
["src/émoji-component.ts", "créated"],
|
|
125
|
+
["docs/中文文档.md", "updated"],
|
|
126
|
+
["files/with spaces & symbols.json", "modified"],
|
|
127
|
+
]),
|
|
128
|
+
log: [
|
|
129
|
+
"Added unicode support 🎉",
|
|
130
|
+
"Fixed encoding issues:\n- UTF-8 properly handled\n- Special chars: àáâãäåæç",
|
|
131
|
+
"Emoji support: 😀😃😄😁😆😅🤣😂",
|
|
132
|
+
],
|
|
133
|
+
schema: "v1.0",
|
|
134
|
+
childrenIds: ["子任务-1", "tâche-2"],
|
|
135
|
+
body: `# Unicode Support Test
|
|
136
|
+
|
|
137
|
+
This task tests unicode and special character handling.
|
|
138
|
+
|
|
139
|
+
## Examples:
|
|
140
|
+
- Chinese: 你好世界
|
|
141
|
+
- French: Bonjour le monde
|
|
142
|
+
- Spanish: Hola mundo
|
|
143
|
+
- Emojis: 🚀🌟💫⭐🎯
|
|
144
|
+
|
|
145
|
+
### Code Example:
|
|
146
|
+
\`\`\`javascript
|
|
147
|
+
const greeting = "Hello 世界! 🌍";
|
|
148
|
+
console.log(greeting);
|
|
149
|
+
\`\`\`
|
|
150
|
+
|
|
151
|
+
> Note: All unicode characters should be preserved.`,
|
|
152
|
+
type: models_1.TrellisObjectType.TASK,
|
|
153
|
+
};
|
|
154
|
+
const serialized = (0, serializeTrellisObject_1.serializeTrellisObject)(original);
|
|
155
|
+
const deserialized = (0, deserializeTrellisObject_1.deserializeTrellisObject)(serialized);
|
|
156
|
+
expect(deserialized).toEqual(original);
|
|
157
|
+
});
|
|
158
|
+
it("should handle body content with YAML-like structure round-trip", () => {
|
|
159
|
+
const yamlLikeBody = `# Task with YAML-like content
|
|
160
|
+
|
|
161
|
+
This task contains content that might confuse the parser:
|
|
162
|
+
|
|
163
|
+
\`\`\`yaml
|
|
164
|
+
---
|
|
165
|
+
config:
|
|
166
|
+
name: example
|
|
167
|
+
values:
|
|
168
|
+
- item1
|
|
169
|
+
- item2
|
|
170
|
+
---
|
|
171
|
+
\`\`\`
|
|
172
|
+
|
|
173
|
+
## Configuration Example
|
|
174
|
+
|
|
175
|
+
\`\`\`
|
|
176
|
+
key: value
|
|
177
|
+
list:
|
|
178
|
+
- first
|
|
179
|
+
- second
|
|
180
|
+
nested:
|
|
181
|
+
deep:
|
|
182
|
+
property: "value with --- markers"
|
|
183
|
+
\`\`\`
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
This section starts with --- which could be problematic.
|
|
188
|
+
|
|
189
|
+
### More content after ---
|
|
190
|
+
|
|
191
|
+
The parser should handle all of this correctly.`;
|
|
192
|
+
const original = {
|
|
193
|
+
id: "T-yaml-body-test",
|
|
194
|
+
title: "YAML Body Content Test",
|
|
195
|
+
status: models_1.TrellisObjectStatus.OPEN,
|
|
196
|
+
priority: models_1.TrellisObjectPriority.HIGH,
|
|
197
|
+
prerequisites: ["yaml-parser-setup"],
|
|
198
|
+
affectedFiles: new Map([["config/app.yaml", "created"]]),
|
|
199
|
+
log: ["Added YAML config support"],
|
|
200
|
+
schema: "v1.0",
|
|
201
|
+
childrenIds: [],
|
|
202
|
+
body: yamlLikeBody,
|
|
203
|
+
type: models_1.TrellisObjectType.TASK,
|
|
204
|
+
};
|
|
205
|
+
const serialized = (0, serializeTrellisObject_1.serializeTrellisObject)(original);
|
|
206
|
+
const deserialized = (0, deserializeTrellisObject_1.deserializeTrellisObject)(serialized);
|
|
207
|
+
expect(deserialized).toEqual(original);
|
|
208
|
+
});
|
|
209
|
+
it("should handle very large content round-trip", () => {
|
|
210
|
+
// Create large arrays and content to test performance and memory handling
|
|
211
|
+
const largePrerequistes = Array.from({ length: 100 }, (_, i) => `prerequisite-${i}`);
|
|
212
|
+
const largeLog = Array.from({ length: 50 }, (_, i) => `Log entry ${i}:\nThis is a multi-line log entry\nwith detailed information\nabout step ${i}`);
|
|
213
|
+
const largeChildrenIds = Array.from({ length: 200 }, (_, i) => `child-task-${i}`);
|
|
214
|
+
const largeAffectedFiles = new Map();
|
|
215
|
+
for (let i = 0; i < 150; i++) {
|
|
216
|
+
largeAffectedFiles.set(`src/component-${i}.ts`, i % 3 === 0 ? "created" : i % 3 === 1 ? "modified" : "deleted");
|
|
217
|
+
}
|
|
218
|
+
const largeBody = `# Large Content Test
|
|
219
|
+
|
|
220
|
+
${"This is a large body content section that repeats many times. ".repeat(500)}
|
|
221
|
+
|
|
222
|
+
## Large Section
|
|
223
|
+
|
|
224
|
+
${"Another section with repeated content for testing serialization performance. ".repeat(300)}
|
|
225
|
+
|
|
226
|
+
### Code Blocks
|
|
227
|
+
|
|
228
|
+
\`\`\`typescript
|
|
229
|
+
${Array.from({ length: 50 }, (_, i) => `const variable${i} = "value${i}";`).join("\n")}
|
|
230
|
+
\`\`\`
|
|
231
|
+
|
|
232
|
+
## Final Notes
|
|
233
|
+
|
|
234
|
+
${"Final section content repeated multiple times to test large content handling. ".repeat(200)}`;
|
|
235
|
+
const original = {
|
|
236
|
+
id: "T-large-content-test",
|
|
237
|
+
title: "Large Content Performance Test",
|
|
238
|
+
status: models_1.TrellisObjectStatus.OPEN,
|
|
239
|
+
priority: models_1.TrellisObjectPriority.LOW,
|
|
240
|
+
prerequisites: largePrerequistes,
|
|
241
|
+
affectedFiles: largeAffectedFiles,
|
|
242
|
+
log: largeLog,
|
|
243
|
+
schema: "v1.0",
|
|
244
|
+
childrenIds: largeChildrenIds,
|
|
245
|
+
body: largeBody,
|
|
246
|
+
type: models_1.TrellisObjectType.TASK,
|
|
247
|
+
};
|
|
248
|
+
const serialized = (0, serializeTrellisObject_1.serializeTrellisObject)(original);
|
|
249
|
+
const deserialized = (0, deserializeTrellisObject_1.deserializeTrellisObject)(serialized);
|
|
250
|
+
expect(deserialized).toEqual(original);
|
|
251
|
+
});
|
|
252
|
+
it("should maintain Map order and exact string content", () => {
|
|
253
|
+
const original = {
|
|
254
|
+
id: "T-map-order-test",
|
|
255
|
+
title: "Map Order Preservation Test",
|
|
256
|
+
status: models_1.TrellisObjectStatus.OPEN,
|
|
257
|
+
priority: models_1.TrellisObjectPriority.MEDIUM,
|
|
258
|
+
prerequisites: ["first-prereq", "second-prereq", "third-prereq"],
|
|
259
|
+
affectedFiles: new Map([
|
|
260
|
+
["z-last-file.ts", "created"],
|
|
261
|
+
["a-first-file.ts", "modified"],
|
|
262
|
+
["m-middle-file.ts", "deleted"],
|
|
263
|
+
["1-numeric-start.ts", "created"],
|
|
264
|
+
["special@file#name.ts", "modified"],
|
|
265
|
+
]),
|
|
266
|
+
log: [
|
|
267
|
+
"First log entry",
|
|
268
|
+
"Second log with\nmultiple\nlines",
|
|
269
|
+
"Third log entry",
|
|
270
|
+
],
|
|
271
|
+
schema: "v1.0",
|
|
272
|
+
childrenIds: ["z-child", "a-child", "m-child"],
|
|
273
|
+
body: "Test body content",
|
|
274
|
+
type: models_1.TrellisObjectType.TASK,
|
|
275
|
+
};
|
|
276
|
+
const serialized = (0, serializeTrellisObject_1.serializeTrellisObject)(original);
|
|
277
|
+
const deserialized = (0, deserializeTrellisObject_1.deserializeTrellisObject)(serialized);
|
|
278
|
+
// Check that the Map maintains the same entries
|
|
279
|
+
expect(deserialized.affectedFiles.size).toBe(original.affectedFiles.size);
|
|
280
|
+
// Check each entry individually
|
|
281
|
+
for (const [key, value] of original.affectedFiles) {
|
|
282
|
+
expect(deserialized.affectedFiles.get(key)).toBe(value);
|
|
283
|
+
}
|
|
284
|
+
// Verify complete equality
|
|
285
|
+
expect(deserialized).toEqual(original);
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
describe("Serialization format validation", () => {
|
|
289
|
+
it("should produce valid YAML frontmatter structure", () => {
|
|
290
|
+
const original = {
|
|
291
|
+
id: "F-format-test",
|
|
292
|
+
title: "Format Validation Test",
|
|
293
|
+
status: models_1.TrellisObjectStatus.OPEN,
|
|
294
|
+
priority: models_1.TrellisObjectPriority.HIGH,
|
|
295
|
+
prerequisites: ["test-setup"],
|
|
296
|
+
affectedFiles: new Map([["test.ts", "created"]]),
|
|
297
|
+
log: ["Format test"],
|
|
298
|
+
schema: "v1.0",
|
|
299
|
+
childrenIds: ["format-child"],
|
|
300
|
+
body: "Format validation body",
|
|
301
|
+
type: models_1.TrellisObjectType.FEATURE,
|
|
302
|
+
};
|
|
303
|
+
const serialized = (0, serializeTrellisObject_1.serializeTrellisObject)(original);
|
|
304
|
+
// Check overall structure
|
|
305
|
+
expect(serialized).toMatch(/^---\n[\s\S]+\n---\n\nFormat validation body$/);
|
|
306
|
+
// Verify it can be deserialized
|
|
307
|
+
const deserialized = (0, deserializeTrellisObject_1.deserializeTrellisObject)(serialized);
|
|
308
|
+
expect(deserialized).toEqual(original);
|
|
309
|
+
});
|
|
310
|
+
it("should handle edge case: body starting with ---", () => {
|
|
311
|
+
const original = {
|
|
312
|
+
id: "E-edge-case-test",
|
|
313
|
+
title: "Edge Case Test",
|
|
314
|
+
status: models_1.TrellisObjectStatus.OPEN,
|
|
315
|
+
priority: models_1.TrellisObjectPriority.MEDIUM,
|
|
316
|
+
prerequisites: [],
|
|
317
|
+
affectedFiles: new Map(),
|
|
318
|
+
log: [],
|
|
319
|
+
schema: "v1.0",
|
|
320
|
+
childrenIds: [],
|
|
321
|
+
body: "---\nThis body starts with --- which is tricky\n---\nAnd has more --- markers",
|
|
322
|
+
type: models_1.TrellisObjectType.EPIC,
|
|
323
|
+
};
|
|
324
|
+
const serialized = (0, serializeTrellisObject_1.serializeTrellisObject)(original);
|
|
325
|
+
const deserialized = (0, deserializeTrellisObject_1.deserializeTrellisObject)(serialized);
|
|
326
|
+
expect(deserialized).toEqual(original);
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
describe("Cross-validation with multiple objects", () => {
|
|
330
|
+
it("should handle multiple different objects in sequence", () => {
|
|
331
|
+
const objects = [
|
|
332
|
+
{
|
|
333
|
+
id: "T-seq-1",
|
|
334
|
+
title: "First Object",
|
|
335
|
+
status: models_1.TrellisObjectStatus.DONE,
|
|
336
|
+
priority: models_1.TrellisObjectPriority.LOW,
|
|
337
|
+
prerequisites: [],
|
|
338
|
+
affectedFiles: new Map([["file1.ts", "created"]]),
|
|
339
|
+
log: ["First object log"],
|
|
340
|
+
schema: "v1.0",
|
|
341
|
+
childrenIds: [],
|
|
342
|
+
body: "First body",
|
|
343
|
+
type: models_1.TrellisObjectType.TASK,
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
id: "P-seq-2",
|
|
347
|
+
title: "Second Object",
|
|
348
|
+
status: models_1.TrellisObjectStatus.IN_PROGRESS,
|
|
349
|
+
priority: models_1.TrellisObjectPriority.HIGH,
|
|
350
|
+
prerequisites: ["T-seq-1"],
|
|
351
|
+
affectedFiles: new Map([
|
|
352
|
+
["file1.ts", "modified"],
|
|
353
|
+
["file2.ts", "created"],
|
|
354
|
+
]),
|
|
355
|
+
log: [
|
|
356
|
+
"Started second object",
|
|
357
|
+
"Multi-line log:\nwith details\nand more info",
|
|
358
|
+
],
|
|
359
|
+
schema: "v2.0",
|
|
360
|
+
childrenIds: ["seq-2-child"],
|
|
361
|
+
body: "# Second Object\n\nMore complex content.",
|
|
362
|
+
type: models_1.TrellisObjectType.PROJECT,
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
id: "F-seq-3",
|
|
366
|
+
title: 'Third Object with "quotes"',
|
|
367
|
+
status: models_1.TrellisObjectStatus.OPEN,
|
|
368
|
+
priority: models_1.TrellisObjectPriority.MEDIUM,
|
|
369
|
+
prerequisites: ["T-seq-1", "P-seq-2"],
|
|
370
|
+
affectedFiles: new Map(),
|
|
371
|
+
log: [],
|
|
372
|
+
schema: "v1.5",
|
|
373
|
+
childrenIds: ["seq-3a", "seq-3b"],
|
|
374
|
+
body: "",
|
|
375
|
+
type: models_1.TrellisObjectType.FEATURE,
|
|
376
|
+
},
|
|
377
|
+
];
|
|
378
|
+
// Serialize all objects
|
|
379
|
+
const serializedObjects = objects.map((obj) => (0, serializeTrellisObject_1.serializeTrellisObject)(obj));
|
|
380
|
+
// Deserialize all objects
|
|
381
|
+
const deserializedObjects = serializedObjects.map((str) => (0, deserializeTrellisObject_1.deserializeTrellisObject)(str));
|
|
382
|
+
// Verify each object matches the original
|
|
383
|
+
deserializedObjects.forEach((deserialized, index) => {
|
|
384
|
+
expect(deserialized).toEqual(objects[index]);
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
});
|
|
388
|
+
});
|
|
389
|
+
//# sourceMappingURL=serializationRoundTrip.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializationRoundTrip.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/serializationRoundTrip.test.ts"],"names":[],"mappings":"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"}
|