{"version":3,"file":"processContentDeclarationContent.cjs","names":["NodeTypes","x"],"sources":["../../../src/writeContentDeclaration/processContentDeclarationContent.ts"],"sourcesContent":["import { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { colorizePath, x } from '@intlayer/config/logger';\nimport { deepTransformNode, type Plugins } from '@intlayer/core/interpreter';\nimport type {\n  FileContent,\n  FileContentConstructor,\n  HTMLContent,\n  HTMLContentConstructor,\n  InsertionContent,\n  InsertionContentConstructor,\n  MarkdownContent,\n  MarkdownContentConstructor,\n} from '@intlayer/core/transpiler';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport * as NodeTypes from '@intlayer/types/nodeType';\n\n/**\n * Write file plugin\n */\n\nconst writeFilePlugin: Plugins = {\n  id: 'write-file-plugin',\n  canHandle: (node) =>\n    typeof node === 'object' && node?.nodeType === NodeTypes.FILE,\n  transform: (node: FileContent) => {\n    const fileContent = node.content;\n    const filePath = node.fixedPath;\n\n    if (typeof fileContent !== 'string') {\n      throw new Error('File content must be a string');\n    }\n\n    if (typeof filePath !== 'string') {\n      throw new Error('File path must be a string');\n    }\n\n    // Write the file to the file system\n    try {\n      const absoluteFilePath = join(process.cwd(), filePath);\n\n      // Create the file directory if it doesn't exist\n      const fileDirectory = dirname(absoluteFilePath);\n\n      if (!existsSync(fileDirectory)) {\n        mkdirSync(fileDirectory, { recursive: true });\n      }\n\n      // Write the file\n      writeFileSync(absoluteFilePath, fileContent);\n    } catch (error) {\n      throw new Error(\n        `${x} Error writing file to ${colorizePath(filePath)}: ${error}`\n      );\n    }\n\n    const transformedFileContent: FileContentConstructor = {\n      nodeType: NodeTypes.FILE,\n      [NodeTypes.FILE]: node[NodeTypes.FILE],\n    };\n\n    return transformedFileContent;\n  },\n};\n\n/**\n * Markdown file plugin\n */\n\nconst markdownFilePlugin: Plugins = {\n  id: 'markdown-file-plugin',\n  canHandle: (node) =>\n    typeof node === 'object' && node?.nodeType === NodeTypes.MARKDOWN,\n  transform: (node: MarkdownContent, props, deepTransformNode) => {\n    const simplifiedMarkdownNode: MarkdownContentConstructor = {\n      nodeType: NodeTypes.MARKDOWN,\n      [NodeTypes.MARKDOWN]: deepTransformNode(node[NodeTypes.MARKDOWN], props),\n    };\n\n    return simplifiedMarkdownNode;\n  },\n};\n\n/**\n * Insertion file plugin\n */\n\nconst insertionFilePlugin: Plugins = {\n  id: 'insertion-file-plugin',\n  canHandle: (node) =>\n    typeof node === 'object' && node?.nodeType === NodeTypes.INSERTION,\n  transform: (node: InsertionContent, props, deepTransformNode) => {\n    const simplifiedInsertionNode: InsertionContentConstructor = {\n      nodeType: NodeTypes.INSERTION,\n      [NodeTypes.INSERTION]: deepTransformNode(\n        node[NodeTypes.INSERTION],\n        props\n      ),\n    };\n\n    return simplifiedInsertionNode;\n  },\n};\n\n/**\n * HTML file plugin\n */\n\nconst htmlFilePlugin: Plugins = {\n  id: 'html-file-plugin',\n  canHandle: (node) =>\n    typeof node === 'object' && node?.nodeType === NodeTypes.HTML,\n  transform: (node: HTMLContent, props, deepTransformNode) => {\n    const simplifiedHTMLNode: HTMLContentConstructor = {\n      nodeType: NodeTypes.HTML,\n      [NodeTypes.HTML]: deepTransformNode(node[NodeTypes.HTML], props),\n    };\n\n    return simplifiedHTMLNode;\n  },\n};\n\n/**\n * Process content declaration content\n *\n * It filter node that are autogenerated by intlayer to do not rewrite them in the content declaration file.\n *\n * And write external sources as file content if necessary.\n */\nexport const processContentDeclarationContent = async (\n  dictionary: Dictionary\n) =>\n  deepTransformNode(dictionary, {\n    dictionaryKey: dictionary.key,\n    keyPath: [],\n    plugins: [\n      writeFilePlugin,\n      markdownFilePlugin,\n      insertionFilePlugin,\n      htmlFilePlugin,\n    ],\n  });\n"],"mappings":";;;;;;;;;;;;;AAqBA,MAAM,kBAA2B;CAC/B,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaA,yBAAU;CAC3D,YAAY,SAAsB;EAChC,MAAM,cAAc,KAAK;EACzB,MAAM,WAAW,KAAK;EAEtB,IAAI,OAAO,gBAAgB,UACzB,MAAM,IAAI,MAAM,+BAA+B;EAGjD,IAAI,OAAO,aAAa,UACtB,MAAM,IAAI,MAAM,4BAA4B;EAI9C,IAAI;GACF,MAAM,uCAAwB,QAAQ,IAAI,GAAG,QAAQ;GAGrD,MAAM,uCAAwB,gBAAgB;GAE9C,IAAI,yBAAY,aAAa,GAC3B,uBAAU,eAAe,EAAE,WAAW,KAAK,CAAC;GAI9C,2BAAc,kBAAkB,WAAW;EAC7C,SAAS,OAAO;GACd,MAAM,IAAI,MACR,GAAGC,0BAAE,mEAAsC,QAAQ,EAAE,IAAI,OAC3D;EACF;EAOA,OAAO;GAJL,UAAUD,yBAAU;IACnBA,yBAAU,OAAO,KAAKA,yBAAU;EAGP;CAC9B;AACF;;;;AAMA,MAAM,qBAA8B;CAClC,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaA,yBAAU;CAC3D,YAAY,MAAuB,OAAO,sBAAsB;EAM9D,OAAO;GAJL,UAAUA,yBAAU;IACnBA,yBAAU,WAAW,kBAAkB,KAAKA,yBAAU,WAAW,KAAK;EAG7C;CAC9B;AACF;;;;AAMA,MAAM,sBAA+B;CACnC,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaA,yBAAU;CAC3D,YAAY,MAAwB,OAAO,sBAAsB;EAS/D,OAAO;GAPL,UAAUA,yBAAU;IACnBA,yBAAU,YAAY,kBACrB,KAAKA,yBAAU,YACf,KACF;EAG2B;CAC/B;AACF;;;;AAMA,MAAM,iBAA0B;CAC9B,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaA,yBAAU;CAC3D,YAAY,MAAmB,OAAO,sBAAsB;EAM1D,OAAO;GAJL,UAAUA,yBAAU;IACnBA,yBAAU,OAAO,kBAAkB,KAAKA,yBAAU,OAAO,KAAK;EAGzC;CAC1B;AACF;;;;;;;;AASA,MAAa,mCAAmC,OAC9C,iEAEkB,YAAY;CAC5B,eAAe,WAAW;CAC1B,SAAS,CAAC;CACV,SAAS;EACP;EACA;EACA;EACA;CACF;AACF,CAAC"}