{"version":3,"file":"index.mjs","names":[],"sources":["../../src/render-repl/sfc.ts","../../src/render-repl/markdown.ts","../../src/render-repl/index.ts"],"sourcesContent":["import type { ComponentProp } from '../render-shared'\nimport type { InputProps, RenderComponentInputComponent } from '../types'\n\nimport { evaluate } from '@unrteljs/eval/browser'\nimport { compileModulesForPreview } from '@velin-dev/source-vue'\nimport { toMarkdown } from '@velin-dev/utils/to-md'\nimport { renderToString } from '@vue/server-renderer'\n\nimport { compileSFC, onlyRender, resolveProps } from '../render-shared'\nimport { normalizeSFCSource } from '../render-shared/sfc'\n\nexport async function evaluateSFC(\n  source: string,\n  _basePath?: string,\n) {\n  const { script } = await compileSFC(source)\n\n  // TODO: evaluate setup when not <script setup>\n  const compiled = compileModulesForPreview({\n    files: {\n      'temp.vue': {\n        code: source,\n        filename: 'temp.vue',\n        compiled: {\n          js: script.content,\n          ssr: script.content,\n          css: '',\n          clientMap: '',\n          ssrMap: '',\n        },\n        hidden: false,\n        language: 'vue',\n      },\n    },\n    mainFile: 'temp.vue',\n  })\n\n  // The compiled code now returns the module's default export directly\n  return evaluate<RenderComponentInputComponent<Record<string, unknown>>>(`\n    const __modules__ = {};\n    return (async function() {\n      ${compiled.join('\\n')}\n    })();\n  `)\n}\n\nexport async function resolvePropsFromString(content: string) {\n  const component = await evaluateSFC(content)\n  if (!component) {\n    return []\n  }\n\n  const renderedComponent = onlyRender(component, {})\n  return resolveProps(renderedComponent as any)\n}\n\nexport async function renderSFC<RawProps = any>(\n  source: string,\n  data?: InputProps<RawProps>,\n  basePath?: string,\n): Promise<{\n  props: ComponentProp[]\n  rendered: string\n}> {\n  const evaluatedComponent = await evaluateSFC(source, basePath)\n  if (!evaluatedComponent) {\n    return {\n      props: [],\n      rendered: '',\n    }\n  }\n\n  const props = resolveProps(evaluatedComponent)\n\n  return {\n    props,\n    rendered: await renderToString(onlyRender(evaluatedComponent, data || {})),\n  }\n}\n\nexport async function renderSFCString<RawProps = any>(\n  source: string,\n  data?: InputProps<RawProps>,\n  basePath?: string,\n): Promise<{\n  props: ComponentProp[]\n  rendered: string\n}> {\n  source = normalizeSFCSource(source)\n\n  const { rendered, props } = await renderSFC(source, data, basePath)\n  return {\n    props,\n    rendered: await toMarkdown(rendered),\n  }\n}\n","import type { ComponentProp } from '../render-shared/props'\nimport type { InputProps } from '../types'\n\nimport { createSFC } from '@velin-dev/source-vue'\nimport { fromMarkdown, scriptFrom } from '@velin-dev/utils/from-md'\nimport { toMarkdown } from '@velin-dev/utils/to-md'\n\nimport { renderSFC } from './sfc'\n\nexport async function renderMarkdownString<RawProps = any>(\n  source: string,\n  data?: InputProps<RawProps>,\n  basePath?: string,\n): Promise<{\n  props: ComponentProp[]\n  rendered: string\n}> {\n  const html = fromMarkdown(source)\n\n  const { script, template, lang } = scriptFrom(html)\n  const sfcString = createSFC(template, script, lang)\n\n  const { props, rendered } = await renderSFC(sfcString, data, basePath)\n  const markdownResult = await toMarkdown(rendered)\n\n  return {\n    props,\n    rendered: markdownResult,\n  }\n}\n","import type { ComponentProp } from '../render-shared/props'\nimport type { InputProps } from '../types'\n\nimport { fromHtml } from 'hast-util-from-html'\n\nimport { renderMarkdownString } from './markdown'\nimport { renderSFCString } from './sfc'\n\nexport * from './sfc'\n\nexport async function render<RawProps = any>(\n  source: string,\n  data?: InputProps<RawProps>,\n  basePath?: string,\n): Promise<{\n  props: ComponentProp[]\n  rendered: string\n}> {\n  const hastRoot = fromHtml(source, { fragment: true })\n\n  const hasTemplate = hastRoot.children.some(node => node.type === 'element' && node.tagName === 'template')\n  const hasScript = hastRoot.children.some(node => node.type === 'element' && node.tagName === 'script')\n\n  if (!hasTemplate && !hasScript && source) {\n    return await renderMarkdownString(source, data, basePath)\n  }\n  if (hasScript && !hasTemplate && source) {\n    return await renderMarkdownString(source, data, basePath)\n  }\n  if (!hasTemplate && !source) {\n    source = `${source}\\n<template><div /></template>`\n  }\n  if (!hasScript) {\n    source = `${source}\\n<script setup>/* EMPTY */</script>`\n  }\n\n  return await renderSFCString(source, data, basePath)\n}\n"],"mappings":";;;;;;;;;AAWA,eAAsB,YACpB,QACA,WACA;CACA,MAAM,EAAE,WAAW,MAAM,WAAW,OAAO;AAuB3C,QAAO,SAAiE;;;QApBvD,yBAAyB;EACxC,OAAO,EACL,YAAY;GACV,MAAM;GACN,UAAU;GACV,UAAU;IACR,IAAI,OAAO;IACX,KAAK,OAAO;IACZ,KAAK;IACL,WAAW;IACX,QAAQ;IACT;GACD,QAAQ;GACR,UAAU;GACX,EACF;EACD,UAAU;EACX,CAMa,CAAC,KAAK,KAAK,CAAC;;IAExB;;AAGJ,eAAsB,uBAAuB,SAAiB;CAC5D,MAAM,YAAY,MAAM,YAAY,QAAQ;AAC5C,KAAI,CAAC,UACH,QAAO,EAAE;AAIX,QAAO,aADmB,WAAW,WAAW,EAAE,CACb,CAAQ;;AAG/C,eAAsB,UACpB,QACA,MACA,UAIC;CACD,MAAM,qBAAqB,MAAM,YAAY,QAAQ,SAAS;AAC9D,KAAI,CAAC,mBACH,QAAO;EACL,OAAO,EAAE;EACT,UAAU;EACX;AAKH,QAAO;EACL,OAHY,aAAa,mBAGpB;EACL,UAAU,MAAM,eAAe,WAAW,oBAAoB,QAAQ,EAAE,CAAC,CAAC;EAC3E;;AAGH,eAAsB,gBACpB,QACA,MACA,UAIC;AACD,UAAS,mBAAmB,OAAO;CAEnC,MAAM,EAAE,UAAU,UAAU,MAAM,UAAU,QAAQ,MAAM,SAAS;AACnE,QAAO;EACL;EACA,UAAU,MAAM,WAAW,SAAS;EACrC;;;;ACrFH,eAAsB,qBACpB,QACA,MACA,UAIC;CAGD,MAAM,EAAE,QAAQ,UAAU,SAAS,WAFtB,aAAa,OAEwB,CAAC;CAGnD,MAAM,EAAE,OAAO,aAAa,MAAM,UAFhB,UAAU,UAAU,QAAQ,KAEO,EAAE,MAAM,SAAS;AAGtE,QAAO;EACL;EACA,UAAU,MAJiB,WAAW,SAAS;EAKhD;;;;AClBH,eAAsB,OACpB,QACA,MACA,UAIC;CACD,MAAM,WAAW,SAAS,QAAQ,EAAE,UAAU,MAAM,CAAC;CAErD,MAAM,cAAc,SAAS,SAAS,MAAK,SAAQ,KAAK,SAAS,aAAa,KAAK,YAAY,WAAW;CAC1G,MAAM,YAAY,SAAS,SAAS,MAAK,SAAQ,KAAK,SAAS,aAAa,KAAK,YAAY,SAAS;AAEtG,KAAI,CAAC,eAAe,CAAC,aAAa,OAChC,QAAO,MAAM,qBAAqB,QAAQ,MAAM,SAAS;AAE3D,KAAI,aAAa,CAAC,eAAe,OAC/B,QAAO,MAAM,qBAAqB,QAAQ,MAAM,SAAS;AAE3D,KAAI,CAAC,eAAe,CAAC,OACnB,UAAS,GAAG,OAAO;AAErB,KAAI,CAAC,UACH,UAAS,GAAG,OAAO;AAGrB,QAAO,MAAM,gBAAgB,QAAQ,MAAM,SAAS"}