{"version":3,"file":"index.cjs","sources":["../src/templates/fragment.ts","../src/templates/react.ts","../src/templates/string.ts","../src/index.ts"],"sourcesContent":["export default (html: string) => `export default () => {\n  const div = document.createElement('div')\n  div.innerHTML = ${html}\n\n  const frag = document.createDocumentFragment()\n  frag.append(...div.children)\n  return frag\n}`\n","export default (html: string) => `export default (props) => {\n  const __html = ${html}\n  return <div {...props} dangerouslySetInnerHTML={{ __html }} />\n}`\n","export default (html: string) => `export default ${html}`\n","import type { Plugin } from \"vite\";\nimport type { PluggableList } from \"unified\";\n\nimport { readFile } from \"fs/promises\";\nimport { join } from \"path\";\n\nimport { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkRehype from \"remark-rehype\";\nimport rehypeStringify from \"rehype-stringify\";\nimport type { Options as RemarkParseOptions } from \"remark-parse\";\nimport type { Options as RemarkRehypeOptions } from \"remark-rehype\";\nimport type { Options as RehypeStringifyOptions } from \"rehype-stringify\";\n\nimport * as DEFAULT_TEMPLATES from \"./templates\";\nimport { TemplateFn } from \"./templates/utils\";\n\ntype PluginOptions = {\n  templates?: Record<string, TemplateFn>,\n  remarkPlugins?: PluggableList;\n  rehypePlugins?: PluggableList;\n  remarkParseOptions?: RemarkParseOptions;\n  remarkRehypeOptions?: RemarkRehypeOptions;\n  rehypeStringifyOptions?: RehypeStringifyOptions;\n};\n\nexport * from './templates/utils'\n\nexport default function vitePlugin({\n  templates = {},\n  remarkPlugins = [],\n  rehypePlugins = [],\n  remarkParseOptions = {},\n  remarkRehypeOptions = {},\n  rehypeStringifyOptions = {},\n}: PluginOptions = {}): Plugin {\n  const templateFns = {\n    ...DEFAULT_TEMPLATES,\n    ...templates,\n  }\n\n  // unified plugin stack\n  const unifiedPlugins: PluggableList = [\n    [remarkParse, remarkParseOptions],\n    ...remarkPlugins,\n    [remarkRehype, remarkRehypeOptions],\n    ...rehypePlugins,\n    [rehypeStringify, rehypeStringifyOptions],\n  ];\n\n  const compiler = unified().use(unifiedPlugins);\n\n  let rootPath = process.cwd();\n\n  return {\n    name: \"vite-plugin-remark-rehype\",\n\n    configResolved(config) {\n      rootPath = config.root;\n    },\n\n    async transform(mdContent, id) {\n      try {\n        const url = new URL(id, 'file://')\n\n        if (url.pathname.endsWith(\".md\")) {\n          const templateName = url.searchParams.get('as') ?? 'string'\n          const templateFn = templateFns[templateName] ?? templateFns['string']\n\n          const htmlContent = await compiler.process(mdContent);\n          const stringifiedHtml = JSON.stringify(\n            htmlContent.toString(\"utf8\")\n          )\n\n          return {\n            code: templateFn(stringifiedHtml)\n          };\n        }\n      } catch {\n        // we dont know what file can be transformed so we're limiting\n        // to fs-loaded files for now. if there's a PR or some issue, let's see.\n      }\n    },\n\n    configureServer: (server) => {\n      server.middlewares.use(async (req, res, next) => {\n        if (!req.url?.endsWith(\".md\")) {\n          return next();\n        }\n\n        try {\n          const fileContent = await readFile(join(rootPath, req.url));\n          const htmlContent = await compiler.process(fileContent);\n\n          res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n          res.end(htmlContent.toString(\"utf-8\"));\n        } catch {\n          next();\n        }\n      });\n    },\n  };\n}\n"],"names":["html","_temp","_ref","_ref$templates","templates","_ref$remarkPlugins","remarkPlugins","_ref$rehypePlugins","rehypePlugins","_ref$remarkParseOptio","remarkParseOptions","remarkRehypeOptions","_ref$remarkRehypeOpti","rehypeStringifyOptions","_ref$rehypeStringifyO","templateFns","_extends","DEFAULT_TEMPLATES","unifiedPlugins","remarkParse","remarkRehype","rehypeStringify","compiler","unified","use","rootPath","process","cwd","name","configResolved","config","root","transform","mdContent","id","Promise","resolve","_catch","url","URL","pathname","endsWith","templateName","searchParams","get","_url$searchParams$get","then","htmlContent","stringifiedHtml","JSON","stringify","toString","code","templateFn","configureServer","server","middlewares","req","res","next","_req$url","_temp2","readFile","join","fileContent","setHeader","end","e","reject"],"mappings":"mgBAAA,+BAAA,SAAgBA,GAEIA,MAAAA,0FAAAA,EAKlB,wGAAA,QCPF,SAAgBA,GACGA,MAAAA,iDAAAA,EAEjB,uEAAA,SCHF,SAAgBA,GAAmCA,MAAAA,kBAAAA,CAAM,yGC4BjC,SAOHC,GAAA,IAAAC,OAAA,IAAAD,EAAF,CAAE,EAAAA,EAAAE,EAAAD,EANnBE,UAAcC,EAAAH,EACdI,cAAAA,aAAgB,GAAED,EAAAE,EAAAL,EAClBM,cAAAA,aAAgB,GAAED,EAAAE,EAAAP,EAClBQ,mBAAAA,aAAqB,CAAA,QACrBC,oBAAAA,OAAsB,IAAAC,EAAA,CAAA,EACtBC,EAAAA,EAAAA,EAAAA,uBAAAA,OAAsB,IAAAC,EAAG,CAAE,EAAAA,EAEVC,EAAAC,EAAA,CAAA,EACZC,OARI,IAAAd,EAAG,CAAA,EAAEA,GAaMe,EAAA,CAClB,CAACC,EAAAA,QAAaT,WACXJ,EAAa,CAChB,CAACc,EAAAA,QAAcT,IACZH,EACH,CAAA,CAACa,EAAe,QAAER,KAGdS,EAAWC,EAAAA,UAAUC,IAAIN,GAE3BO,EAAWC,QAAQC,MAEvB,MAAO,CACLC,KAAM,4BAENC,eAAc,SAACC,GACbL,EAAWK,EAAOC,IACpB,EAEMC,mBAAUC,EAAWC,GAAE,OAAAC,QAAAC,QAAAC,EAAA,WAEzB,IAAMC,EAAM,IAAIC,IAAIL,EAAI,WAAU,qBAE9BI,EAAIE,SAASC,SAAS,gBAClBC,EAAyC,SAA1BJ,EAAIK,aAAaC,IAAI,OAAKC,EAAI,kBAChC9B,EAAAA,EAAY2B,MAAiB3B,EAAoB,OAAC,uBAE3CO,EAASI,QAAQO,IAAUa,KAAA,SAA/CC,GACN,IAAqBC,EAAGC,KAAKC,UAC3BH,EAAYI,SAAS,SAGvB,MAAO,CACLC,KAAMC,EAAWL,GACjB,EAAA,CAAA,GAEL,EAIH,WAAA,GAAA,EAEAM,gBAAiB,SAACC,GAChBA,EAAOC,YAAYhC,aAAWiC,EAAKC,EAAKC,OACtC,IAAAC,EAAA,GAAK,SAAAH,EAAInB,OAAJsB,EAASnB,SAAS,OACrB,uBAAOkB,KACR,IAAAE,EAAAxB,EAAA,kCAG2ByB,EAAQA,SAACC,EAAIA,KAACtC,EAAUgC,EAAInB,OAAKQ,KAAA,SAArDkB,GACoB1C,OAAAA,QAAAA,QAAAA,EAASI,QAAQsC,IAAYlB,KAAA,SAAjDC,GAENW,EAAIO,UAAU,eAAgB,4BAC9BP,EAAIQ,IAAInB,EAAYI,SAAS,SAAU,IACxC,EAAA,WACCQ,GACD,GACH,OAAAxB,QAAAC,QAAAyB,GAAAA,EAAAf,KAAAe,EAAAf,KAAA,WAAA,QAAA,EACF,CADG,MACHqB,GAAA,OAAAhC,QAAAiC,OAAAD,EAAA,CAAA,EAAA,EAEJ"}