{"version":3,"file":"index9.cjs","sources":["../src/helpers.ts"],"sourcesContent":["import type { Term, Project } from './types';\n\n/**\n * Check if a term is associated with a given project.\n */\nexport const isTermAssociatedWithProject = (term: Term, projectId: string): boolean => {\n    return term.projects?.includes(projectId) ?? false;\n};\n\n/**\n * Add a project association to a term.\n */\nexport const addProjectToTerm = (term: Term, projectId: string): Term => {\n    const projects = term.projects || [];\n    if (projects.includes(projectId)) {\n        return term;\n    }\n    return {\n        ...term,\n        projects: [...projects, projectId],\n        updatedAt: new Date(),\n    };\n};\n\n/**\n * Remove a project association from a term.\n */\nexport const removeProjectFromTerm = (term: Term, projectId: string): Term => {\n    const projects = term.projects || [];\n    return {\n        ...term,\n        projects: projects.filter((id: string) => id !== projectId),\n        updatedAt: new Date(),\n    };\n};\n\n/**\n * Check if projectA is a parent of projectB.\n */\nexport const isParentProject = (projectA: Project, projectB: Project): boolean => {\n    // Check new format\n    const parentRel = projectB.relationships?.find(\n        r => r.relationship === 'parent' || r.relationship === 'child_of' || r.relationship === 'part_of'\n    );\n    if (parentRel) {\n        const parentId = parentRel.uri.split('/').pop();\n        return parentId === projectA.id;\n    }\n    \n    return false;\n};\n\n/**\n * Check if projectA is a child of projectB.\n */\nexport const isChildProject = (projectA: Project, projectB: Project): boolean => {\n    // Check new format\n    const parentRel = projectA.relationships?.find(\n        r => r.relationship === 'parent' || r.relationship === 'child_of' || r.relationship === 'part_of'\n    );\n    if (parentRel) {\n        const parentId = parentRel.uri.split('/').pop();\n        return parentId === projectB.id;\n    }\n    \n    return false;\n};\n\n/**\n * Check if two projects are siblings.\n */\nexport const areSiblingProjects = (projectA: Project, projectB: Project): boolean => {\n    // Check new format\n    const aSiblingRels = projectA.relationships?.filter(r => r.relationship === 'sibling') || [];\n    const bSiblingRels = projectB.relationships?.filter(r => r.relationship === 'sibling') || [];\n    \n    for (const rel of aSiblingRels) {\n        const siblingId = rel.uri.split('/').pop();\n        if (siblingId === projectB.id) return true;\n    }\n    \n    for (const rel of bSiblingRels) {\n        const siblingId = rel.uri.split('/').pop();\n        if (siblingId === projectA.id) return true;\n    }\n    \n    return false;\n};\n\n/**\n * Get relationship distance between two projects.\n * Returns: 0 = same, 1 = parent/child, 2 = siblings/cousins, -1 = unrelated\n */\nexport const getProjectRelationshipDistance = (projectA: Project, projectB: Project): number => {\n    if (projectA.id === projectB.id) return 0;\n    if (isParentProject(projectA, projectB) || isChildProject(projectA, projectB)) return 1;\n    if (areSiblingProjects(projectA, projectB)) return 2;\n    \n    // Check if they share a parent (new format)\n    const aParentRel = projectA.relationships?.find(r => r.relationship === 'parent' || r.relationship === 'child_of' || r.relationship === 'part_of');\n    const bParentRel = projectB.relationships?.find(r => r.relationship === 'parent' || r.relationship === 'child_of' || r.relationship === 'part_of');\n    \n    if (aParentRel && bParentRel) {\n        const aParentId = aParentRel.uri.split('/').pop();\n        const bParentId = bParentRel.uri.split('/').pop();\n        if (aParentId === bParentId) {\n            return 2;\n        }\n    }\n  \n    return -1;\n};\n"],"names":[],"mappings":"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"}