{"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;AAEtB,MAAI,OAAO,gBAAgB,SACzB,OAAM,IAAI,MAAM,gCAAgC;AAGlD,MAAI,OAAO,aAAa,SACtB,OAAM,IAAI,MAAM,6BAA6B;AAI/C,MAAI;GACF,MAAM,uCAAwB,QAAQ,KAAK,EAAE,SAAS;GAGtD,MAAM,uCAAwB,iBAAiB;AAE/C,OAAI,yBAAY,cAAc,CAC5B,wBAAU,eAAe,EAAE,WAAW,MAAM,CAAC;AAI/C,8BAAc,kBAAkB,YAAY;WACrC,OAAO;AACd,SAAM,IAAI,MACR,GAAGC,0BAAE,mEAAsC,SAAS,CAAC,IAAI,QAC1D;;AAQH,SAAO;GAJL,UAAUD,yBAAU;IACnBA,yBAAU,OAAO,KAAKA,yBAAU;GAGN;;CAEhC;;;;AAMD,MAAM,qBAA8B;CAClC,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaA,yBAAU;CAC3D,YAAY,MAAuB,OAAO,sBAAsB;AAM9D,SAAO;GAJL,UAAUA,yBAAU;IACnBA,yBAAU,WAAW,kBAAkB,KAAKA,yBAAU,WAAW,MAAM;GAG7C;;CAEhC;;;;AAMD,MAAM,sBAA+B;CACnC,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaA,yBAAU;CAC3D,YAAY,MAAwB,OAAO,sBAAsB;AAS/D,SAAO;GAPL,UAAUA,yBAAU;IACnBA,yBAAU,YAAY,kBACrB,KAAKA,yBAAU,YACf,MACD;GAG2B;;CAEjC;;;;AAMD,MAAM,iBAA0B;CAC9B,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaA,yBAAU;CAC3D,YAAY,MAAmB,OAAO,sBAAsB;AAM1D,SAAO;GAJL,UAAUA,yBAAU;IACnBA,yBAAU,OAAO,kBAAkB,KAAKA,yBAAU,OAAO,MAAM;GAGzC;;CAE5B;;;;;;;;AASD,MAAa,mCAAmC,OAC9C,iEAEkB,YAAY;CAC5B,eAAe,WAAW;CAC1B,SAAS,EAAE;CACX,SAAS;EACP;EACA;EACA;EACA;EACD;CACF,CAAC"}