Expand description
The main public crate of the fervid
project.
Here’s how you can use fervid
to generate a module from an SFC:
Warning: This example is very likely to change in the future. Please note that fervid is still unstable.
use swc_core::{common::FileName, ecma::ast::Expr};
let input = r#"
<template><div>hello world</div></template>
"#;
// Parse
let mut parse_errors = vec![];
let mut parser = fervid_parser::SfcParser::new(input, &mut parse_errors);
let sfc = parser.parse_sfc().unwrap();
// Do the necessary transformations
let mut transform_errors = Vec::new();
let transform_options = fervid_transform::TransformSfcOptions {
is_prod: true,
scope_id: "filehash",
filename: "input.vue"
};
let transform_result = fervid_transform::transform_sfc(sfc, transform_options, &mut transform_errors);
// Create the context and generate the template block
let mut ctx = fervid_codegen::CodegenContext::with_bindings_helper(transform_result.bindings_helper);
let template_expr: Option<Expr> = transform_result.template_block.and_then(|template_block| {
ctx.generate_sfc_template(&template_block)
});
// Generate the module code
let sfc_module = ctx.generate_module(
template_expr,
*transform_result.module,
transform_result.exported_obj,
transform_result.setup_fn,
None,
);
// (Optional) Stringify the code
let compiled_code = fervid_codegen::CodegenContext::stringify(input, &sfc_module, FileName::Custom("input.vue".into()), false, false);
Modules§
- error
- errors
- Error definitions for the glue code of
fervid
- parser_
old Deprecated
Macros§
Structs§
- Compile
Emitted Asset - Compile
Emitted Style - Compile
Options - Compile
Result - Conditional
- A wrapper around an
ElementNode
with a condition attached to it. This is used inv-if
andv-else-if
nodes. - Conditional
Node Sequence - This is a synthetic node type only available after AST optimizations. Its purpose is to make conditional code generation trivial.
- Element
Node - Element node is a classic HTML node with some added functionality:
- Interpolation
- A special Vue
{{ expression }}
, which would be rendered as a stringified value of executing said expression. - Patch
Hints - A helper structure attached to
ElementNode
s to handle Patch Flags and contain the list of dynamic props. - SfcCustom
Block - SfcDescriptor
- SfcScript
Block - SfcStyle
Block - SfcTemplate
Block - Starting
Tag - Starting tag represents
ElementNode
’s tag name and attributes - VBind
Directive v-bind
and its shorthand:
- VCustom
Directive - A custom directive defined by a user.
- VFor
Directive v-for
- VModel
Directive v-model
- VOnDirective
v-on
and its shorthand@
- VSlot
Directive v-slot
- VueDirectives
- A structure which stores all the Vue directives of an
ElementNode
.
Enums§
- Attribute
OrBinding - Denotes the basic attributes or bindings of a DOM element
As of directives, this only covers
v-bind
andv-on
, because they bind something to DOM.v-model
is not covered here because its code generation is not as trivial. - Binding
Types - The type of a binding (or identifier) which is used to show where this binding came from,
e.g.
Data
is for Options APIdata()
,SetupRef
if forref
s andcomputed
s in Composition API. - Builtin
Type - Component
Binding - A binding of a component which was found in the template
- Custom
Directive Binding - A binding of a directive which was found in the template
- Element
Kind - Node
- A Node represents a part of the Abstract Syntax Tree (AST).
- Patch
Flags - From https://github.com/vuejs/core/blob/b8fc18c0b23be9a77b05dc41ed452a87a0becf82/packages/shared/src/patchFlags.ts
- SfcScript
Lang - StrOr
Expr - Describes a type which can be either a static &str or a js Expr. This is mostly usable for dynamic binding scenarios.
- Template
Generation Mode - Mode with which the template is attached to the exported SFC object.
- VueImports
Statics§
Functions§
- check_
attribute_ name - Checks whether the attributes name is the same as
expected_name
- compile
- A more general-purpose SFC compilation function. Not production-ready yet.
- compile_
sync_ naive - Naive implementation of the SFC compilation, meaning that:
- is_
from_ default_ slot - Checks whether a Node is from the component’s default slot or not
- is_
html_ tag