fervid 0.0.2

Vue SFC compiler written in Rust
Documentation

[Real File Compile Result]

import { defineComponent, ref } from 'vue'

const __sfc__ = defineComponent({
  setup() {
    return {
      inputModel: ref(''),
      modelValue: ref(''),
      list: [1, 2, 3]
    }
  },
})

import { createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, createVNode as _createVNode, Fragment as _Fragment, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, openBlock as _openBlock, renderList as _renderList, resolveComponent as _resolveComponent, resolveDirective as _resolveDirective, toDisplayString as _toDisplayString, vModelText as _vModelText, vShow as _vShow, withCtx as _withCtx, withDirectives as _withDirectives, withModifiers as _withModifiers } from "vue"

function render(_ctx, _cache, $props, $setup, $data, $options) {
  const _component_abc_def = _resolveComponent("abc-def")
  const _component_another_element = _resolveComponent("another-element")
  const _directive_directive = _resolveDirective("directive")
  const _directive_test_directive = _resolveDirective("test-directive")

  return _withDirectives((_openBlock(), _createBlock(_component_abc_def, {
    modelValue: _ctx.modelValue,
    "onUpdate:modelValue": $event => ((_ctx.modelValue) = $event),
    modelModifiers: {lazy: true},
    "another-model-value": _ctx.modelValue,
    "onUpdate:anotherModelValue": $event => ((_ctx.modelValue) = $event),
    "another-model-valueModifiers": {trim: true},
    "test-bound": _ctx.bar+_ctx.baz,
    disabled: "disabled",
    onClick: _withModifiers(() => {}, ["prevent"]),
    onHello: _ctx.world,
    class: ""
  }, {
    "test-slot": _withCtx(({ value, another: renamed }) => [_createTextVNode(" test " + _toDisplayString(value) + " " + _toDisplayString(renamed), 1 /* TEXT */)]),
    "custom-slot": _withCtx(({ prop }) => [
      _createElementVNode("span", {
        class: "span-class"
      }, " Span text ", -1 /* HOISTED */),
      _createTextVNode(" " + _toDisplayString(prop), 1 /* TEXT */)
    ]),
    default: _withCtx(() => [
      _createTextVNode(" The text of the node " + _toDisplayString(_ctx.dynamicValue) + " ", 1 /* TEXT */),
      _createCommentVNode(" Comment "),
      _createVNode(_component_another_element),
      _createTextVNode(" yet another text ", 1 /* TEXT */),
      _withDirectives(_createElementVNode("input", null, null, -1 /* HOISTED */), [
        [_vModelText, _ctx.inputModel]
        [
          _directive_directive,
          _ctx.baz,
          "foo",
          {
            bar: true,
            buzz: true
          }
        ]
      ]),
      _createCommentVNode(" Todo remove space between these elements, otherwise it breaks the invariant in conditional codegen "),
      true
        ? (_openBlock(), _createElementBlock("div", null, "if div", -1 /* HOISTED */))
        : false
          ? (_openBlock(), _createElementBlock("span", null, "else-if span", -1 /* HOISTED */))
          : _createCommentVNode("v-if", true),
      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(list, (i) => (
        (_openBlock(), _createElementBlock("span", {
          key: i
        }, "hey", -1 /* HOISTED */))
      )), 128 /* KEYED_FRAGMENT */)),
      _withDirectives(_createElementVNode("br", null, null, -1 /* HOISTED */), [
        [_vShow, false]
      ]),
      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(3, (i) => (
        (_openBlock(), _createBlock(_component_another_element, {
          key: i
        })
      )), 128 /* KEYED_FRAGMENT */)),
      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(list, ([item1, item2], index) => (
        (_openBlock(), _createElementBlock(_Fragment, null, [
          _createTextVNode(" hey ", 1 /* TEXT */),
          _createElementVNode("span", {
            key: index
          }, _toDisplayString(item1) + _toDisplayString(index), -1 /* HOISTED */),
          _createElementVNode("div", {
            key: index,
            class: _normalizeClass(["both regular and bound", [item2,index]])
          }, null, -1 /* HOISTED */),
          _createElementVNode("div", {
            key: index,
            class: "just regular class"
          }, null, -1 /* HOISTED */),
          _createElementVNode("div", {
            key: index,
            class: _normalizeClass([_ctx.member.expr,_ctx.globalIdent,item2,index])
          }, null, -1 /* HOISTED */)
        ], -1 /* HOISTED */))
      )), 256 /* UNKEYED_FRAGMENT */)),
      false
        ? (_openBlock(), _createElementBlock(_Fragment, null, [_createTextVNode(" this is a v-if template ", 1 /* TEXT */)], -1 /* HOISTED */))
        : true
          ? (_openBlock(), _createElementBlock(_Fragment, null, [_createTextVNode(" another v-else-if template ", 1 /* TEXT */)], -1 /* HOISTED */))
          : (_openBlock(), _createElementBlock(_Fragment, null, [_createTextVNode(" else template ", 1 /* TEXT */)], -1 /* HOISTED */)),
      _createElementVNode("div", {
        style: _normalizeStyle([{"background-color":"red",color:"#000",content:"''","grid-template-column":"repeat(1fr, min(auto-fit, 100px))"}, {backgroundColor:_ctx.v?"yellow":undefined})]
      }, null, -1 /* HOISTED */)
    ])
  })), [
    [
      _directive_test_directive,
      _ctx.foo-_ctx.bar,
      "test-argument",
      {
        foo: true,
        bar: true
      }
    ]
  ])
}
__sfc__.render = render
export default __sfc__
Time took: 423.033µs

[Synthetic Compile Result]

const __sfc__ = {
  name: 'TestComponent'
}
import { createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, createVNode as _createVNode, openBlock as _openBlock, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString } from "vue"

function render(_ctx, _cache, $props, $setup, $data, $options) {
  const _component_CustomComponent = _resolveComponent("CustomComponent")

  return (_openBlock(), _createElementBlock("span", {
    class: "yes"
  }, [
    _createTextVNode("Hello world" + _toDisplayString(_ctx.testRef) + "yes yes", 1 /* TEXT */),
    _createElementVNode("i", null, "italics, mm" + _toDisplayString(_ctx.hey), -1 /* HOISTED */),
    _createVNode(_component_CustomComponent, null, {
      default: _withCtx(() => [_createTextVNode("italics, mm" + _toDisplayString(_ctx.hey), 1 /* TEXT */)])
    }),
    _createTextVNode("end of span node", 1 /* TEXT */)
  ], -1 /* HOISTED */))
}
__sfc__.render = render
export default __sfc__
Time took: 38.902µs

SWC result: [_ctx.a,_ctx.b,_ctx.c,{d:_ctx.d}]
Time took for transform: 43.721µs