{"version":3,"sources":["../src/codama.ts"],"names":["visit","assertIsNode","CodamaError","CODAMA_ERROR__VERSION_MISMATCH"],"mappings":";;;;;;;;AAaO,SAAS,eAAe,IAAA,EAAwB;AACnD,EAAA,IAAI,WAAA,GAAc,IAAA;AAClB,EAAA,qBAAA,CAAsB,YAAY,OAAO,CAAA;AACzC,EAAA,OAAO;AAAA,IACH,OAAU,OAAA,EAAoC;AAC1C,MAAA,OAAOA,cAAA,CAAM,aAAa,OAAO,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,KAAA,GAAgB;AACZ,MAAA,OAAO,cAAA,CAAe,EAAE,GAAG,WAAA,EAAa,CAAA;AAAA,IAC5C,CAAA;AAAA,IACA,OAAA,GAAkB;AACd,MAAA,OAAO,IAAA,CAAK,UAAU,WAAW,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,OAAA,GAAoB;AAChB,MAAA,OAAO,WAAA;AAAA,IACX,CAAA;AAAA,IACA,OAAO,OAAA,EAAiD;AACpD,MAAA,MAAM,OAAA,GAAUA,cAAA,CAAM,WAAA,EAAa,OAAO,CAAA;AAC1C,MAAAC,kBAAA,CAAa,SAAS,UAAU,CAAA;AAChC,MAAA,WAAA,GAAc,OAAA;AAAA,IAClB;AAAA,GACJ;AACJ;AAEO,SAAS,eAAe,IAAA,EAAsB;AACjD,EAAA,OAAO,cAAA,CAAe,IAAA,CAAK,KAAA,CAAM,IAAI,CAAa,CAAA;AACtD;AAEO,SAAS,sBAAsB,WAAA,EAAkC;AACpE,EAAA,MAAM,aAAA,GAAgB,OAAA;AACtB,EAAA,IAAI,gBAAgB,aAAA,EAAe;AACnC,EAAA,MAAM,CAAC,WAAW,SAAS,CAAA,GAAI,YAAY,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AAChE,EAAA,MAAM,CAAC,aAAa,WAAW,CAAA,GAAI,cAAc,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AACtE,EAAA,MAAM,WAAA,GAAc,SAAA,KAAc,CAAA,IAAK,WAAA,KAAgB,CAAA;AACvD,EAAA,IAAI,WAAA,IAAe,cAAc,WAAA,EAAa;AAC9C,EAAA,IAAI,cAAc,WAAA,EAAa;AAC/B,EAAA,MAAM,IAAIC,kBAAA,CAAYC,qCAAA,EAAgC,EAAE,aAAA,EAAe,aAAa,CAAA;AACxF","file":"index.node.cjs","sourcesContent":["import { CODAMA_ERROR__VERSION_MISMATCH } from '@codama/errors';\nimport { CodamaError } from '@codama/errors';\nimport { assertIsNode, CodamaVersion, Node, RootNode } from '@codama/nodes';\nimport { visit, Visitor } from '@codama/visitors';\n\nexport interface Codama {\n    accept<T>(visitor: Visitor<T, 'rootNode'>): T;\n    clone(): Codama;\n    getJson(): string;\n    getRoot(): RootNode;\n    update(visitor: Visitor<Node | null, 'rootNode'>): void;\n}\n\nexport function createFromRoot(root: RootNode): Codama {\n    let currentRoot = root;\n    validateCodamaVersion(currentRoot.version);\n    return {\n        accept<T>(visitor: Visitor<T, 'rootNode'>): T {\n            return visit(currentRoot, visitor);\n        },\n        clone(): Codama {\n            return createFromRoot({ ...currentRoot });\n        },\n        getJson(): string {\n            return JSON.stringify(currentRoot);\n        },\n        getRoot(): RootNode {\n            return currentRoot;\n        },\n        update(visitor: Visitor<Node | null, 'rootNode'>): void {\n            const newRoot = visit(currentRoot, visitor);\n            assertIsNode(newRoot, 'rootNode');\n            currentRoot = newRoot;\n        },\n    };\n}\n\nexport function createFromJson(json: string): Codama {\n    return createFromRoot(JSON.parse(json) as RootNode);\n}\n\nexport function validateCodamaVersion(rootVersion: CodamaVersion): void {\n    const codamaVersion = __VERSION__;\n    if (rootVersion === codamaVersion) return;\n    const [rootMajor, rootMinor] = rootVersion.split('.').map(Number);\n    const [CodamaMajor, CodamaMinor] = codamaVersion.split('.').map(Number);\n    const isZeroMajor = rootMajor === 0 && CodamaMajor === 0;\n    if (isZeroMajor && rootMinor === CodamaMinor) return;\n    if (rootMajor === CodamaMajor) return;\n    throw new CodamaError(CODAMA_ERROR__VERSION_MISMATCH, { codamaVersion, rootVersion });\n}\n"]}