Showing preview only (2,053K chars total). Download the full file or copy to clipboard to get everything.
Repository: withastro/compiler
Branch: main
Commit: 41515e454944
Files: 584
Total size: 1.8 MB
Directory structure:
gitextract_v3t26jmm/
├── .changeset/
│ ├── README.md
│ └── config.json
├── .devcontainer/
│ ├── Dockerfile
│ └── devcontainer.json
├── .editorconfig
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── ---01-bug-report.yml
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ ├── ci.yml
│ ├── congrats.yml
│ ├── issue-labeled.yml
│ ├── issue-needs-repro.yml
│ ├── issue-opened.yml
│ └── release.yml
├── .gitignore
├── .gitpod.yml
├── .golangci.yml
├── .prettierignore
├── .vscode/
│ └── settings.json
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── SYNTAX_SPEC.md
├── biome.json
├── cmd/
│ └── astro-wasm/
│ └── astro-wasm.go
├── go.mod
├── go.sum
├── internal/
│ ├── const.go
│ ├── doc.go
│ ├── doctype.go
│ ├── entity.go
│ ├── escape.go
│ ├── foreign.go
│ ├── handler/
│ │ └── handler.go
│ ├── hash.go
│ ├── helpers/
│ │ ├── joiner.go
│ │ └── js_comment_utils.go
│ ├── js_scanner/
│ │ ├── js_scanner.go
│ │ ├── js_scanner_test.go
│ │ └── testdata/
│ │ └── fuzz/
│ │ └── FuzzHoistImport/
│ │ └── ec55358ab2929fbf4deab52587664e42682f0a6ea201a325c5c33f9d18c50456
│ ├── loc/
│ │ ├── diagnostics.go
│ │ └── loc.go
│ ├── node.go
│ ├── parser.go
│ ├── parser_test.go
│ ├── print-to-source.go
│ ├── printer/
│ │ ├── __printer_css__/
│ │ │ ├── scopedStyleStrategy___attribute_.snap
│ │ │ ├── scopedStyleStrategy___class_.snap
│ │ │ └── styles__no_frontmatter_.snap
│ │ ├── __printer_js__/
│ │ │ ├── All_components.snap
│ │ │ ├── Component_is_raw.snap
│ │ │ ├── Component_names_A-Z.snap
│ │ │ ├── Component_siblings_are_siblings.snap
│ │ │ ├── Component_with_await.snap
│ │ │ ├── Empty_attribute_expression.snap
│ │ │ ├── Empty_expression.snap
│ │ │ ├── Empty_expression_with_whitespace.snap
│ │ │ ├── Empty_script.snap
│ │ │ ├── Empty_style.snap
│ │ │ ├── Expression_in_form_followed_by_other_sibling_forms.snap
│ │ │ ├── Fragment.snap
│ │ │ ├── Fragment_literal_only.snap
│ │ │ ├── Fragment_shorthand.snap
│ │ │ ├── Fragment_shorthand_only.snap
│ │ │ ├── Fragment_shorthand_with_await.snap
│ │ │ ├── Fragment_slotted.snap
│ │ │ ├── Fragment_slotted_with_name.snap
│ │ │ ├── Fragment_with_await.snap
│ │ │ ├── Fragment_wrapping_link_with_awaited_href.snap
│ │ │ ├── HTML_comment_in_component_inside_expression_I.snap
│ │ │ ├── HTML_comment_in_component_inside_expression_II.snap
│ │ │ ├── Mixed_style_siblings.snap
│ │ │ ├── Nested_HTML_in_expressions,_wrapped_in_parens.snap
│ │ │ ├── No_extra_script_tag.snap
│ │ │ ├── Parser_can_handle_files___4096_chars.snap
│ │ │ ├── Preserve_namespaces.snap
│ │ │ ├── Preserve_namespaces_for_components.snap
│ │ │ ├── Preserve_namespaces_in_expressions.snap
│ │ │ ├── Preserve_slot_attribute_at_root_level_in_expression.snap
│ │ │ ├── Preserve_slot_attribute_in_conditional_expression_for_custom_element.snap
│ │ │ ├── Preserve_slot_attribute_in_expression_for_custom_element.snap
│ │ │ ├── Preserve_slot_whitespace.snap
│ │ │ ├── Preserve_slots_inside_custom-element.snap
│ │ │ ├── React_framework_example.snap
│ │ │ ├── SVG_styles.snap
│ │ │ ├── Self-closing_components_in_head_can_have_siblings.snap
│ │ │ ├── Self-closing_components_siblings_are_siblings.snap
│ │ │ ├── Self-closing_formatting_elements.snap
│ │ │ ├── Self-closing_formatting_elements_2.snap
│ │ │ ├── Self-closing_script_in_head_works.snap
│ │ │ ├── Self-closing_title.snap
│ │ │ ├── Self-closing_title_II.snap
│ │ │ ├── Use_of_interfaces_within_frontmatter.snap
│ │ │ ├── XElement.snap
│ │ │ ├── _955_ternary_slot_with_elements.snap
│ │ │ ├── _955_ternary_slot_with_text.snap
│ │ │ ├── advanced_svg_expression.snap
│ │ │ ├── anchor_content.snap
│ │ │ ├── anchor_expressions.snap
│ │ │ ├── anchor_inside_expression.snap
│ │ │ ├── attribute_with_template_literal.snap
│ │ │ ├── attribute_with_template_literal_interpolation.snap
│ │ │ ├── backtick_in_HTML_comment.snap
│ │ │ ├── basic__frontmatter_.snap
│ │ │ ├── basic__no_frontmatter_.snap
│ │ │ ├── basic_renderHead.snap
│ │ │ ├── caption_only.snap
│ │ │ ├── class_and_class_list_object.snap
│ │ │ ├── class_and_class_list_set.snap
│ │ │ ├── class_and_class_list_simple_array.snap
│ │ │ ├── class_list.snap
│ │ │ ├── class_list_with_spread.snap
│ │ │ ├── class_with_spread.snap
│ │ │ ├── client_only_component__default_.snap
│ │ │ ├── client_only_component__multiple_.snap
│ │ │ ├── client_only_component__named_.snap
│ │ │ ├── client_only_component__namespace_.snap
│ │ │ ├── client_only_component__namespaced_default_.snap
│ │ │ ├── client_only_component__namespaced_named_.snap
│ │ │ ├── comment_only_expressions_are_removed_I.snap
│ │ │ ├── comment_only_expressions_are_removed_II.snap
│ │ │ ├── comment_only_expressions_are_removed_III.snap
│ │ │ ├── comments_removed_from_attribute_list.snap
│ │ │ ├── complex_nested_template_literal_expression.snap
│ │ │ ├── complex_recursive_component.snap
│ │ │ ├── complex_table.snap
│ │ │ ├── component.snap
│ │ │ ├── component_in_expression_with_its_child_expression_before_its_child_element.snap
│ │ │ ├── component_with_only_a_script.snap
│ │ │ ├── component_with_quoted_attributes.snap
│ │ │ ├── condition_expressions_at_the_top-level.snap
│ │ │ ├── condition_expressions_at_the_top-level_with_head_content.snap
│ │ │ ├── conditional_iframe.snap
│ │ │ ├── conditional_noscript.snap
│ │ │ ├── conditional_render.snap
│ │ │ ├── conditional_rendering_of_title_containing_expression.snap
│ │ │ ├── conditional_slot.snap
│ │ │ ├── css_comment_doesn’t_produce_semicolon.snap
│ │ │ ├── css_imports_are_not_included_in_module_metadata.snap
│ │ │ ├── custom-element.snap
│ │ │ ├── custom_elements.snap
│ │ │ ├── define_vars_on_a_module_script_with_imports.snap
│ │ │ ├── define_vars_on_non-root_elements.snap
│ │ │ ├── define_vars_on_script_with_StaticExpression_turned_on.snap
│ │ │ ├── define_vars_on_style.snap
│ │ │ ├── define_vars_on_style_tag_with_style_empty_attribute_on_element.snap
│ │ │ ├── define_vars_on_style_tag_with_style_expression_attribute_on_element.snap
│ │ │ ├── define_vars_on_style_tag_with_style_quoted_attribute_on_element.snap
│ │ │ ├── define_vars_on_style_tag_with_style_shorthand_attribute_on_element.snap
│ │ │ ├── define_vars_on_style_tag_with_style_template_literal_attribute_on_element.snap
│ │ │ ├── division_inside_expression.snap
│ │ │ ├── doctype.snap
│ │ │ ├── dot_component.snap
│ │ │ ├── dynamic_import.snap
│ │ │ ├── escaped_entity.snap
│ │ │ ├── export_comments_I.snap
│ │ │ ├── export_comments_II.snap
│ │ │ ├── export_member_does_not_panic.snap
│ │ │ ├── expression_returning_multiple_elements.snap
│ │ │ ├── expression_slot.snap
│ │ │ ├── expression_with_leading_whitespace.snap
│ │ │ ├── expressions_with_JS_comments.snap
│ │ │ ├── expressions_with_multiple_curly_braces.snap
│ │ │ ├── function_expression_slots_I.snap
│ │ │ ├── function_expression_slots_II___959_.snap
│ │ │ ├── getStaticPaths__basic_.snap
│ │ │ ├── getStaticPaths__hoisted_.snap
│ │ │ ├── getStaticPaths__hoisted_II_.snap
│ │ │ ├── gets_all_potential_hydrated_components.snap
│ │ │ ├── head_content_with_component_first.snap
│ │ │ ├── head_expression.snap
│ │ │ ├── head_expression_and_conditional_rendering_of_fragment.snap
│ │ │ ├── head_inside_slot.snap
│ │ │ ├── head_slot.snap
│ │ │ ├── head_slot_II.snap
│ │ │ ├── head_slot_III.snap
│ │ │ ├── html5_boilerplate.snap
│ │ │ ├── iframe.snap
│ │ │ ├── import.meta.env.snap
│ │ │ ├── import.meta.snap
│ │ │ ├── import_assertions.snap
│ │ │ ├── import_order.snap
│ │ │ ├── import_to_identifier_named_assert.snap
│ │ │ ├── includes_comments_for_expression_attribute.snap
│ │ │ ├── includes_comments_for_shorthand_attribute.snap
│ │ │ ├── is_raw.snap
│ │ │ ├── jsx_comment_between_doctype_and_html.snap
│ │ │ ├── map_basic.snap
│ │ │ ├── map_nested.snap
│ │ │ ├── map_with_component.snap
│ │ │ ├── map_without_component.snap
│ │ │ ├── maybeRenderHead_not_printed_for_hoisted_scripts.snap
│ │ │ ├── multibyte_character___script.snap
│ │ │ ├── multibyte_character___style.snap
│ │ │ ├── multibyte_characters.snap
│ │ │ ├── multiline_class_attribute_on_component.snap
│ │ │ ├── multiple_define_vars_on_style.snap
│ │ │ ├── namespace_is_preserved_when_inside_an_expression.snap
│ │ │ ├── nested_expressions.snap
│ │ │ ├── nested_expressions_II.snap
│ │ │ ├── nested_expressions_III.snap
│ │ │ ├── nested_expressions_IV.snap
│ │ │ ├── nested_expressions_V.snap
│ │ │ ├── nested_expressions_VI.snap
│ │ │ ├── nested_expressions_VII.snap
│ │ │ ├── nested_expressions_VIII.snap
│ │ │ ├── nested_head_content_stays_in_the_head.snap
│ │ │ ├── nested_template_literal_expression.snap
│ │ │ ├── no_expressions_in_math.snap
│ │ │ ├── noscript_component.snap
│ │ │ ├── noscript_deep_styles.snap
│ │ │ ├── noscript_only.snap
│ │ │ ├── noscript_styles.snap
│ │ │ ├── orphan_slot.snap
│ │ │ ├── passes_escaped_filename_into_createComponent_if_it_contains_single_quotes.snap
│ │ │ ├── passes_filename_into_createComponent_if_passed_into_the_compiler_options.snap
│ │ │ ├── preserve_is_inline_slot.snap
│ │ │ ├── preserve_is_inline_slot_II.snap
│ │ │ ├── script.snap
│ │ │ ├── script_before_elements.snap
│ │ │ ├── script_define_vars_I.snap
│ │ │ ├── script_define_vars_II.snap
│ │ │ ├── script_external.snap
│ │ │ ├── script_external_in_expression.snap
│ │ │ ├── script_hoist_with_frontmatter.snap
│ │ │ ├── script_hoist_without_frontmatter.snap
│ │ │ ├── script_in__head_.snap
│ │ │ ├── script_in_expression.snap
│ │ │ ├── script_inline.snap
│ │ │ ├── script_mixed_handled_and_inline.snap
│ │ │ ├── script_multiple.snap
│ │ │ ├── scriptinline.snap
│ │ │ ├── select_in_form.snap
│ │ │ ├── select_map_expression.snap
│ │ │ ├── select_nested_option.snap
│ │ │ ├── select_option_expression.snap
│ │ │ ├── selectedcontent_element_in_customizable_select.snap
│ │ │ ├── selectedcontent_self-closing_element.snap
│ │ │ ├── self-closing_td.snap
│ │ │ ├── set_html.snap
│ │ │ ├── set_html_and_set_text.snap
│ │ │ ├── set_html_on_Component.snap
│ │ │ ├── set_html_on_Component_with_quoted_attribute.snap
│ │ │ ├── set_html_on_Component_with_template_literal_attribute_with_variable.snap
│ │ │ ├── set_html_on_Component_with_template_literal_attribute_without_variable.snap
│ │ │ ├── set_html_on_Fragment.snap
│ │ │ ├── set_html_on_Fragment_with_quoted_attribute.snap
│ │ │ ├── set_html_on_Fragment_with_template_literal_attribute_with_variable.snap
│ │ │ ├── set_html_on_Fragment_with_template_literal_attribute_without_variable.snap
│ │ │ ├── set_html_on_custom-element.snap
│ │ │ ├── set_html_on_custom-element_with_quoted_attribute.snap
│ │ │ ├── set_html_on_custom-element_with_template_literal_attribute_with_variable.snap
│ │ │ ├── set_html_on_custom-element_with_template_literal_attribute_without_variable.snap
│ │ │ ├── set_html_on_empty_tag.snap
│ │ │ ├── set_html_on_empty_tag_with_quoted_attribute.snap
│ │ │ ├── set_html_on_empty_tag_with_template_literal_attribute_with_variable.snap
│ │ │ ├── set_html_on_empty_tag_with_template_literal_attribute_without_variable.snap
│ │ │ ├── set_html_on_script.snap
│ │ │ ├── set_html_on_script_with_quoted_attribute.snap
│ │ │ ├── set_html_on_script_with_template_literal_attribute_with_variable.snap
│ │ │ ├── set_html_on_script_with_template_literal_attribute_without_variable.snap
│ │ │ ├── set_html_on_self-closing_tag.snap
│ │ │ ├── set_html_on_self-closing_tag_with_quoted_attribute.snap
│ │ │ ├── set_html_on_self-closing_tag_with_template_literal_attribute_with_variable.snap
│ │ │ ├── set_html_on_self-closing_tag_with_template_literal_attribute_without_variable.snap
│ │ │ ├── set_html_on_style.snap
│ │ │ ├── set_html_on_style_with_quoted_attribute.snap
│ │ │ ├── set_html_on_style_with_template_literal_attribute_with_variable.snap
│ │ │ ├── set_html_on_style_with_template_literal_attribute_without_variable.snap
│ │ │ ├── set_html_on_tag_with_children.snap
│ │ │ ├── set_html_on_tag_with_children_and_quoted_attribute.snap
│ │ │ ├── set_html_on_tag_with_children_and_template_literal_attribute_with_variable.snap
│ │ │ ├── set_html_on_tag_with_children_and_template_literal_attribute_without_variable.snap
│ │ │ ├── set_html_on_tag_with_empty_whitespace.snap
│ │ │ ├── set_html_on_tag_with_empty_whitespace_and_quoted_attribute.snap
│ │ │ ├── set_html_on_tag_with_empty_whitespace_and_template_literal_attribute_with_variable.snap
│ │ │ ├── set_html_on_tag_with_empty_whitespace_and_template_literal_attribute_without_variable.snap
│ │ │ ├── set_html_with_other_attributes.snap
│ │ │ ├── set_html_with_quoted_attribute.snap
│ │ │ ├── set_html_with_quoted_attribute_and_other_attributes.snap
│ │ │ ├── set_html_with_template_literal_attribute_with_variable.snap
│ │ │ ├── set_html_with_template_literal_attribute_with_variable_and_other_attributes.snap
│ │ │ ├── set_html_with_template_literal_attribute_without_variable.snap
│ │ │ ├── set_html_with_template_literal_attribute_without_variable_and_other_attributes.snap
│ │ │ ├── set_text.snap
│ │ │ ├── set_text_on_Component.snap
│ │ │ ├── set_text_on_Component_with_quoted_attribute.snap
│ │ │ ├── set_text_on_Component_with_template_literal_attribute_with_variable.snap
│ │ │ ├── set_text_on_Component_with_template_literal_attribute_without_variable.snap
│ │ │ ├── set_text_on_custom-element.snap
│ │ │ ├── set_text_on_custom-element_with_quoted_attribute.snap
│ │ │ ├── set_text_on_custom-element_with_template_literal_attribute_with_variable.snap
│ │ │ ├── set_text_on_custom-element_with_template_literal_attribute_without_variable.snap
│ │ │ ├── set_text_with_quoted_attribute.snap
│ │ │ ├── set_text_with_template_literal_attribute_with_variable.snap
│ │ │ ├── set_text_with_template_literal_attribute_without_variable.snap
│ │ │ ├── sibling_expressions.snap
│ │ │ ├── simple_ternary.snap
│ │ │ ├── slot_inside_of_Base.snap
│ │ │ ├── slot_with_fallback.snap
│ │ │ ├── slot_with_fallback_II.snap
│ │ │ ├── slot_with_fallback_III.snap
│ │ │ ├── slot_with_quoted_attributes.snap
│ │ │ ├── slots__basic_.snap
│ │ │ ├── slots__dynamic_name_.snap
│ │ │ ├── slots__expression_.snap
│ │ │ ├── slots__named_only_.snap
│ │ │ ├── slots__no_comments_.snap
│ │ │ ├── small_expression.snap
│ │ │ ├── solidus_in_template_literal_expression.snap
│ │ │ ├── spread_with_double_quotation_marks.snap
│ │ │ ├── spread_with_style_but_no_explicit_class.snap
│ │ │ ├── spread_without_style_or_class.snap
│ │ │ ├── styles__no_frontmatter_.snap
│ │ │ ├── svg_expressions.snap
│ │ │ ├── table.snap
│ │ │ ├── table_II.snap
│ │ │ ├── table_III.snap
│ │ │ ├── table_IV.snap
│ │ │ ├── table_caption_expression.snap
│ │ │ ├── table_expression_with_trailing_div.snap
│ │ │ ├── table_expressions__no_implicit_tbody_.snap
│ │ │ ├── table_simple_case.snap
│ │ │ ├── table_slot_I.snap
│ │ │ ├── table_slot_II.snap
│ │ │ ├── table_slot_III.snap
│ │ │ ├── table_slot_IV.snap
│ │ │ ├── table_slot_V.snap
│ │ │ ├── table_with_expression_in__th_.snap
│ │ │ ├── tbody_expressions.snap
│ │ │ ├── tbody_expressions_2.snap
│ │ │ ├── tbody_expressions_3.snap
│ │ │ ├── td_expressions.snap
│ │ │ ├── td_expressions_II.snap
│ │ │ ├── template_literal_attribute_on_component.snap
│ │ │ ├── template_literal_attribute_with_variable_on_component.snap
│ │ │ ├── ternary_component.snap
│ │ │ ├── ternary_layout.snap
│ │ │ ├── ternary_slot.snap
│ │ │ ├── text_after_title_expression.snap
│ │ │ ├── text_after_title_expressions.snap
│ │ │ ├── text_only.snap
│ │ │ ├── textarea.snap
│ │ │ ├── textarea_in_form.snap
│ │ │ ├── textarea_inside_expression.snap
│ │ │ ├── th_expressions.snap
│ │ │ ├── tr_only.snap
│ │ │ ├── trailing_expression.snap
│ │ │ ├── transition_animate_on_Component.snap
│ │ │ ├── transition_animate_with_an_expression.snap
│ │ │ ├── transition_name_with_an_expression.snap
│ │ │ ├── transition_name_with_an_template_literal.snap
│ │ │ ├── transition_persist-props_converted_to_a_data_attribute.snap
│ │ │ ├── transition_persist_converted_to_a_data_attribute.snap
│ │ │ ├── transition_persist_uses_transition_name_if_defined.snap
│ │ │ ├── type_import.snap
│ │ │ ├── unusual_line_terminator_I.snap
│ │ │ ├── unusual_line_terminator_II.snap
│ │ │ └── user-defined__implicit__is_printed.snap
│ │ ├── __printer_json__/
│ │ │ ├── Comment.snap
│ │ │ ├── Comment_preserves_whitespace.snap
│ │ │ ├── Component.snap
│ │ │ ├── Doctype.snap
│ │ │ ├── Fragment_Literal.snap
│ │ │ ├── Fragment_Shorthand.snap
│ │ │ ├── Frontmatter.snap
│ │ │ ├── JSON_escape.snap
│ │ │ ├── Preserve_namespaces.snap
│ │ │ ├── basic.snap
│ │ │ ├── custom-element.snap
│ │ │ ├── element_with_unterminated_double_quote_attribute.snap
│ │ │ ├── element_with_unterminated_single_quote_attribute.snap
│ │ │ ├── element_with_unterminated_template_literal_attribute.snap
│ │ │ ├── expression.snap
│ │ │ ├── jsx_comment_between_doctype_and_html.snap
│ │ │ ├── style_after_body_with_component_in_head_and_body.snap
│ │ │ ├── style_after_empty_html.snap
│ │ │ ├── style_after_html.snap
│ │ │ ├── style_after_html_with_component_in_head.snap
│ │ │ ├── style_after_html_with_component_in_head_and_body.snap
│ │ │ ├── style_before_html.snap
│ │ │ ├── style_in_body.snap
│ │ │ └── style_in_html.snap
│ │ ├── print-css.go
│ │ ├── print-to-js.go
│ │ ├── print-to-json.go
│ │ ├── print-to-tsx.go
│ │ ├── print-to-tsx_test.go
│ │ ├── printer.go
│ │ ├── printer_css_test.go
│ │ ├── printer_test.go
│ │ └── utils.go
│ ├── sourcemap/
│ │ └── sourcemap.go
│ ├── t/
│ │ └── t.go
│ ├── test_utils/
│ │ └── test_utils.go
│ ├── token.go
│ ├── token_test.go
│ ├── transform/
│ │ ├── scope-css.go
│ │ ├── scope-css_test.go
│ │ ├── scope-html.go
│ │ ├── scope-html_test.go
│ │ ├── transform.go
│ │ ├── transform_test.go
│ │ └── utils.go
│ └── xxhash/
│ ├── LICENSE.txt
│ ├── xxhash.go
│ └── xxhash_other.go
├── internal_wasm/
│ └── utils/
│ └── utils.go
├── lib/
│ └── esbuild/
│ ├── LICENSE.md
│ ├── ast/
│ │ └── ast.go
│ ├── compat/
│ │ ├── compat.go
│ │ ├── css_table.go
│ │ └── js_table.go
│ ├── config/
│ │ ├── config.go
│ │ └── globals.go
│ ├── css_ast/
│ │ ├── css_ast.go
│ │ └── css_decl_table.go
│ ├── css_lexer/
│ │ ├── css_lexer.go
│ │ └── css_lexer_test.go
│ ├── css_parser/
│ │ ├── css_decls.go
│ │ ├── css_decls_border_radius.go
│ │ ├── css_decls_box.go
│ │ ├── css_decls_box_shadow.go
│ │ ├── css_decls_color.go
│ │ ├── css_decls_font.go
│ │ ├── css_decls_font_family.go
│ │ ├── css_decls_font_weight.go
│ │ ├── css_decls_transform.go
│ │ ├── css_parser.go
│ │ ├── css_parser_selector.go
│ │ ├── css_parser_test.go
│ │ └── css_reduce_calc.go
│ ├── css_printer/
│ │ ├── astro_features.go
│ │ ├── css_printer.go
│ │ └── css_printer_test.go
│ ├── esbuild.go
│ ├── helpers/
│ │ ├── bitset.go
│ │ ├── comment.go
│ │ ├── hash.go
│ │ ├── joiner.go
│ │ ├── mime.go
│ │ ├── path.go
│ │ ├── serializer.go
│ │ ├── stack.go
│ │ ├── timer.go
│ │ ├── typos.go
│ │ └── utf.go
│ ├── logger/
│ │ ├── logger.go
│ │ ├── logger_darwin.go
│ │ ├── logger_linux.go
│ │ ├── logger_other.go
│ │ └── logger_windows.go
│ ├── sourcemap/
│ │ └── sourcemap.go
│ └── test/
│ ├── diff.go
│ └── util.go
├── package.json
├── packages/
│ └── compiler/
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── browser/
│ │ │ ├── index.ts
│ │ │ ├── utils.ts
│ │ │ └── wasm_exec.ts
│ │ ├── node/
│ │ │ ├── index.ts
│ │ │ ├── sync.ts
│ │ │ ├── utils.ts
│ │ │ └── wasm_exec.ts
│ │ └── shared/
│ │ ├── ast.ts
│ │ ├── diagnostics.ts
│ │ └── types.ts
│ ├── sync.d.ts
│ ├── test/
│ │ ├── bad-styles/
│ │ │ ├── sass.ts
│ │ │ └── unclosed-style.ts
│ │ ├── basic/
│ │ │ ├── body-after-head-component.ts
│ │ │ ├── body-expression.ts
│ │ │ ├── comment.ts
│ │ │ ├── component-metadata/
│ │ │ │ └── index.ts
│ │ │ ├── component-name.ts
│ │ │ ├── export.ts
│ │ │ ├── expression-then-node.ts
│ │ │ ├── expressions.ts
│ │ │ ├── fragment.ts
│ │ │ ├── get-static-paths.ts
│ │ │ ├── head-injection.ts
│ │ │ ├── lt-gt-text.ts
│ │ │ ├── null-chars.ts
│ │ │ ├── props-interface.ts
│ │ │ ├── script-before-html.ts
│ │ │ ├── script-fragment.ts
│ │ │ ├── top-level-expressions.ts
│ │ │ ├── trailing-newline.ts
│ │ │ ├── trailing-space.ts
│ │ │ └── trailing-spaces-ii.ts
│ │ ├── client-directive/
│ │ │ ├── special-characters.ts
│ │ │ └── warn.ts
│ │ ├── compact/
│ │ │ └── minify.ts
│ │ ├── css-order/
│ │ │ ├── astro-styles.ts
│ │ │ └── imported-styles.ts
│ │ ├── errors/
│ │ │ ├── client-only-unfound.ts
│ │ │ ├── define-vars.ts
│ │ │ ├── fragment-shorthand.ts
│ │ │ ├── html-comment.ts
│ │ │ ├── invalid-spread.ts
│ │ │ ├── jsx-comment.ts
│ │ │ └── missing-frontmatter-fence.ts
│ │ ├── head-metadata/
│ │ │ ├── with-head.ts
│ │ │ └── without-head.ts
│ │ ├── js-sourcemaps/
│ │ │ ├── complex-frontmatter.ts
│ │ │ ├── deprecated.ts
│ │ │ ├── error.ts
│ │ │ ├── frontmatter.ts
│ │ │ ├── hover.ts
│ │ │ ├── module.ts
│ │ │ ├── script.ts
│ │ │ ├── template.ts
│ │ │ └── windows-linereturns.ts
│ │ ├── parse/
│ │ │ ├── ast.ts
│ │ │ ├── client-component-unfound.ts
│ │ │ ├── escaping.ts
│ │ │ ├── fragment.ts
│ │ │ ├── literal.ts
│ │ │ ├── multibyte-characters.ts
│ │ │ ├── orphan-head.ts
│ │ │ ├── orphan-slot.ts
│ │ │ ├── position.ts
│ │ │ └── serialize.ts
│ │ ├── resolve-path/
│ │ │ └── preserve.ts
│ │ ├── scope/
│ │ │ └── same-source.ts
│ │ ├── scripts/
│ │ │ ├── isinline-hint.ts
│ │ │ └── order.ts
│ │ ├── server-islands/
│ │ │ └── meta.ts
│ │ ├── slot-result/
│ │ │ └── result.ts
│ │ ├── static-extraction/
│ │ │ ├── css.ts
│ │ │ └── hoist-expression.ts
│ │ ├── stress/
│ │ │ └── index.ts
│ │ ├── styles/
│ │ │ ├── define-vars.ts
│ │ │ ├── emit-scope.ts
│ │ │ ├── empty-style.ts
│ │ │ ├── hash.ts
│ │ │ └── sass.ts
│ │ ├── table/
│ │ │ ├── components.ts
│ │ │ ├── expressions.ts
│ │ │ └── in-expression.ts
│ │ ├── teardown/
│ │ │ └── parse.ts
│ │ ├── transition/
│ │ │ ├── data-astro.ts
│ │ │ └── meta.ts
│ │ ├── tsx/
│ │ │ ├── basic.ts
│ │ │ ├── comment-whitespace.ts
│ │ │ ├── complex-generics.ts
│ │ │ ├── escape.ts
│ │ │ ├── line-terminator.ts
│ │ │ ├── literal-style-tag.ts
│ │ │ ├── meta.ts
│ │ │ ├── nested-generics.ts
│ │ │ ├── non-latin.ts
│ │ │ ├── props-and-getStaticPaths.ts
│ │ │ ├── props.ts
│ │ │ ├── raw.ts
│ │ │ ├── script.ts
│ │ │ └── top-level-returns.ts
│ │ ├── tsx-errors/
│ │ │ ├── eof.ts
│ │ │ ├── fragment-shorthand.ts
│ │ │ └── unfinished-component.ts
│ │ ├── tsx-sourcemaps/
│ │ │ ├── 404.ts
│ │ │ ├── attributes.ts
│ │ │ ├── deprecated.ts
│ │ │ ├── error.ts
│ │ │ ├── frontmatter.ts
│ │ │ ├── hover.ts
│ │ │ ├── module.ts
│ │ │ ├── multibyte.ts
│ │ │ ├── script.ts
│ │ │ ├── tags.ts
│ │ │ ├── template-windows.ts
│ │ │ ├── template.ts
│ │ │ └── unfinished-literal.ts
│ │ └── utils.ts
│ ├── tsconfig.json
│ ├── tsup.config.ts
│ ├── types.d.ts
│ └── utils.d.ts
└── pnpm-workspace.yaml
================================================
FILE CONTENTS
================================================
================================================
FILE: .changeset/README.md
================================================
# Changesets
Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
with multi-package repos, or single-package repos to help you version and publish your code. You can
find the full documentation for it [in our repository](https://github.com/changesets/changesets)
We have a quick list of common questions to get you started engaging with this project in
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
================================================
FILE: .changeset/config.json
================================================
{
"$schema": "https://unpkg.com/@changesets/config@1.6.1/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"linked": [],
"access": "public",
"baseBranch": "next",
"updateInternalDependencies": "patch",
"ignore": []
}
================================================
FILE: .devcontainer/Dockerfile
================================================
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.195.0/containers/go/.devcontainer/base.Dockerfile
# [Choice] Go version (use -bullseye variants on local arm64/Apple Silicon): 1, 1.16, 1.17, 1-bullseye, 1.16-bullseye, 1.17-bullseye, 1-buster, 1.16-buster, 1.17-buster
ARG VARIANT=1-bullseye
FROM mcr.microsoft.com/devcontainers/go:0-${VARIANT}
# [Choice] Node.js version: lts/*, 16, 14, 12, 10
ARG NODE_VERSION="lts/*"
RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c ". /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi
# [Optional] Uncomment this section to install additional OS packages.
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
# && apt-get -y install --no-install-recommends <your-package-list-here>
# [Optional] Uncomment the next line to use go get to install anything else you need
# RUN go get -x <your-dependency-or-tool>
# [Optional] Uncomment this line to install global node packages.
RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g pnpm" 2>&1
================================================
FILE: .devcontainer/devcontainer.json
================================================
// For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.195.0/containers/go
{
"name": "Go",
"build": {
"dockerfile": "Dockerfile",
"args": {
// Update the VARIANT arg to pick a version of Go: 1, 1.16, 1.17
// Append -bullseye or -buster to pin to an OS version.
// Use -bullseye variants on local arm64/Apple Silicon.
"VARIANT": "1.19",
// Options
"NODE_VERSION": "16"
}
},
"runArgs": ["--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined"],
// Configure tool-specific properties.
"customizations": {
"vscode": {
"settings": {
"go.toolsManagement.checkForUpdates": "local",
"go.useLanguageServer": true,
"go.gopath": "/go",
"go.goroot": "/usr/local/go"
},
"extensions": ["golang.Go"]
}
},
"remoteUser": "vscode"
}
================================================
FILE: .editorconfig
================================================
root = true
[*.go]
indent_style = tab
indent_size = 2
trim_trailing_whitespace = true
================================================
FILE: .git-blame-ignore-revs
================================================
# chore: format everything (#1020)
402060270f50fe273d5e7387241d7eb36f99ca11
================================================
FILE: .gitattributes
================================================
# Files with the language manually specified, sorted alphabetically.
/internal/**/*.snap linguist-language=Markdown
================================================
FILE: .github/ISSUE_TEMPLATE/---01-bug-report.yml
================================================
name: "\U0001F41B Bug Report"
description: Report an issue or possible bug
title: "\U0001F41B BUG:"
labels: []
assignees: []
body:
- type: markdown
attributes:
value: |
## Quick Checklist
Thank you for taking the time to file a bug report! Please fill out this form as completely as possible.
✅ I am using the **latest version of Astro** and all plugins.
✅ I am using a version of Node that supports ESM (`v12.20.0+`, `v14.13.1+`, or `v16.0.0+`)
- type: input
attributes:
label: What version of `@astrojs/compiler` are you using?
placeholder: 0.0.0
validations:
required: true
- type: input
attributes:
label: What package manager are you using?
placeholder: npm, yarn, pnpm
validations:
required: true
- type: input
attributes:
label: What operating system are you using?
placeholder: Mac, Windows, Linux
validations:
required: true
- type: textarea
attributes:
label: Describe the Bug
description: A clear and concise description of what the bug is.
validations:
required: true
- type: input
attributes:
label: Link to Minimal Reproducible Example
description: 'Please use the following link to create a reproduction: https://astro.new'
placeholder: 'https://stackblitz.com/abcd1234'
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: 🏡 Main Astro Repo
url: https://github.com/withastro/astro
about: Unsure if your bug is related to the compiler? Please open an issue in the main Astro repo!
- name: 👾 Chat
url: https://astro.build/chat
about: Our Discord server is active, come join us!
- name: 💁 Support
url: https://astro.build/chat
about: 'This issue tracker is not for support questions. Join us on Discord for assistance!'
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Changes
- What does this change?
- Be short and concise. Bullet points can help!
- Before/after screenshots can be helpful as well.
## Testing
<!-- How was this change tested? -->
<!-- DON'T DELETE THIS SECTION! If no tests added, explain why. -->
## Docs
<!-- Was public documentation updated? -->
<!-- DON'T DELETE THIS SECTION! If no docs added, explain why (e.g. "bug fix only") -->
================================================
FILE: .github/workflows/ci.yml
================================================
name: Test
on:
workflow_dispatch:
push:
branches: ['main', 'next']
pull_request:
branches: ['main', 'next']
# Automatically cancel in-progress actions on the same branch
concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.ref }}
cancel-in-progress: true
jobs:
test:
timeout-minutes: 3
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
- name: Set up Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: 1.22
- name: Test
run: go test -v -timeout 30s ./internal/...
test-wasm:
timeout-minutes: 10
strategy:
matrix:
OS: [ubuntu-latest, windows-latest]
runs-on: ${{ matrix.OS }}
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
- name: Set up Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: 1.22
- name: Set up PNPM
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
- name: Set up Node.js
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: 24
cache: pnpm
- name: Build WASM
run: make wasm
- name: Install NPM Dependencies
run: pnpm install
env:
CI: true
- name: Build JS
run: pnpm run build:compiler
- name: Test WASM
run: pnpm test:ci
lint:
timeout-minutes: 3
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
- name: golangci-lint
uses: golangci/golangci-lint-action@d6238b002a20823d52840fda27e2d4891c5952dc # v4.0.1
with:
version: latest
env:
GOOS: js
GOARCH: wasm
lint-js:
timeout-minutes: 3
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
- name: Setup Biome
uses: biomejs/setup-biome@454fa0d884737805f48d7dc236c1761a0ac3cc13 # v2.6.0
- name: Run linting
run: biome ci --diagnostic-level=warn
================================================
FILE: .github/workflows/congrats.yml
================================================
name: Congratsbot
on:
push:
branches: [main]
jobs:
congrats:
if: ${{ github.repository_owner == 'withastro' }}
uses: withastro/automation/.github/workflows/congratsbot.yml@main
with:
EMOJIS: '⚙️,🔩,🔧,🛠️,🧰,🗜️,🦺,<:lgtm:1121889033602215966>'
secrets:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_CONGRATS }}
================================================
FILE: .github/workflows/issue-labeled.yml
================================================
name: Issue Labeled
on:
issues:
types: [labeled]
jobs:
reply_labelled:
if: github.repository_owner == 'withastro'
uses: withastro/automation/.github/workflows/issue-labeled.yml@main
================================================
FILE: .github/workflows/issue-needs-repro.yml
================================================
name: Close Issues (needs repro)
on:
schedule:
- cron: "0 0 * * *"
jobs:
close-issues:
if: github.repository == 'withastro/compiler'
runs-on: ubuntu-latest
steps:
- name: needs repro
uses: actions-cool/issues-helper@9861779a695cf1898bd984c727f685f351cfc372 # v3.7.2
with:
actions: "close-issues"
token: ${{ secrets.GITHUB_TOKEN }}
labels: "needs repro"
inactive-day: 3
================================================
FILE: .github/workflows/issue-opened.yml
================================================
name: Label issues
on:
issues:
types:
- reopened
- opened
jobs:
label_issues:
if: github.repository_owner == 'withastro'
uses: withastro/automation/.github/workflows/issue-opened.yml@main
================================================
FILE: .github/workflows/release.yml
================================================
name: Release
permissions: {}
on:
# We trigger the release job when a commit is pushed to these branches
push:
branches: [main, next]
# We trigger the snapshot-release job for comments on PRs
issue_comment:
types: [created]
jobs:
release:
timeout-minutes: 3
if: github.repository_owner == 'withastro' && github.event_name == 'push'
name: Changelog
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
id-token: write
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
with:
persist-credentials: false
- name: Set up Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: 1.22
- name: Set up PNPM
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
- name: Set up Node.js
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: 24.11.1
cache: pnpm
- name: Build WASM
run: make wasm
- name: Install NPM Dependencies
run: pnpm install
- name: Build JS
run: pnpm run build:compiler
- name: Create Release Pull Request or Publish to npm
uses: changesets/action@e0145edc7d9d8679003495b11f87bd8ef63c0cba # v1.5.3
with:
publish: pnpm run release
commit: "[ci] release"
title: "[ci] release"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: "" # See https://github.com/changesets/changesets/issues/1152#issuecomment-3190884868
snapshot-release:
timeout-minutes: 3
name: Create a snapshot release of a pull request
if: github.repository_owner == 'withastro' && github.event_name == 'issue_comment' && github.event.issue.pull_request && startsWith(github.event.comment.body, '!preview')
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
id-token: write
defaults:
run:
shell: bash
steps:
- name: Check if user has admin access (only admins can publish snapshot releases).
id: checkAccess
uses: actions-cool/check-user-permission@7b90a27f92f3961b368376107661682c441f6103 # v2.3.0
with:
require: admin
username: ${{ github.triggering_actor }}
# if the user does not have the required permission, we should return exit code 1 to stop the workflow
- name: Check user permission
if: steps.checkAccess.outputs.require-result == 'false'
run: |
echo "${{ github.triggering_actor }} does not have permissions on this repo."
echo "Current permission level is ${{ steps.checkAccess.outputs.user-permission }}"
echo "Job originally triggered by ${{ github.actor }}"
exit 1
- name: Extract the snapshot name from comment body
id: getSnapshotName
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: |
const splitComment = context.payload.comment.body.split(' ');
splitComment.length !== 2 && (github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: 'Invalid comment format. Expected: "!preview <one-word-snapshot-name>"',
}) || core.setFailed('Invalid comment format. Expected: "!preview <one-word-snapshot-name>"'));
return splitComment[1].trim();
result-encoding: string
- name: resolve pr refs
id: refs
uses: eficode/resolve-pr-refs@f7e14e739786aae2053e162c678cd4c3c2edaa83 # v0.0.4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
with:
persist-credentials: false
ref: ${{ steps.refs.outputs.head_ref }}
- name: Set up Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: 1.22
- name: Setup PNPM
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: 24.11.1
cache: pnpm
- name: Install dependencies
run: pnpm install
- name: Build Packages
run: pnpm run build:all
- name: Bump Package Versions
run: |
pnpm exec changeset version --snapshot ${{ steps.getSnapshotName.outputs.result }} > changesets.output.txt 2>&1
echo ::set-output name=result::`cat changesets.output.txt`
env:
# Needs access to run the script
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish Release
id: publish
run: |
pnpm run release --tag next--${{ steps.getSnapshotName.outputs.result }} > publish.output.txt 2>&1
echo ::set-output name=result::`cat publish.output.txt`
env:
NPM_TOKEN: "" # See https://github.com/changesets/changesets/issues/1152#issuecomment-3190884868
- name: Pull Request Notification
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
MESSAGE: ${{ steps.publish.outputs.result }}
with:
script: |
console.log(process.env.MESSAGE);
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '```\n' + process.env.MESSAGE + '\n```',
})
================================================
FILE: .gitignore
================================================
.DS_Store
.pnpm-store
node_modules
*.wasm
/astro
debug.test
__debug_bin
packages/compiler/sourcemap.mjs
================================================
FILE: .gitpod.yml
================================================
# This configuration file was automatically generated by Gitpod.
# Please adjust to your needs (see https://www.gitpod.io/docs/config-gitpod-file)
# and commit this file to your remote git repository to share the goodness with others.
tasks:
- init: pnpm install && pnpm run build && go get && go build ./... && go test ./... && make
command: go run .
================================================
FILE: .golangci.yml
================================================
issues:
exclude-dirs:
- lib
exclude-files:
- xxhash.go
exclude-rules:
- path: token.go
linters:
- errcheck
- path: escape.go
linters:
- errcheck
- linters:
- staticcheck
text: "SA9003"
================================================
FILE: .prettierignore
================================================
**/dist
pnpm-lock.yaml
================================================
FILE: .vscode/settings.json
================================================
{
"go.toolsEnvVars": {
"GOOS": "js",
"GOARCH": "wasm"
},
"editor.unusualLineTerminators": "off"
}
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
Contributions are welcome to the Go compiler!
## Setup
### Go
[Go][go] `1.20+` is needed to work with this repo. On Macs, installing via [Homebrew][homebrew] is recommended: `brew install go`. For Windows & Linux, you can [follow Go’s installation guide][go] if you don’t have your own preferred method of package installation.
If you use VS Code as your primary editor, installing the [Go extension][go-vscode] is highly recommended.
### Node
You will also need [Node.js][node] installed, as well as PNPM 8.x (`npm i -g pnpm`). More often than not, you won’t need to touch JS in this repo, but in case you do, be sure to run `pnpm install` first.
## Code Structure
A simple explanation of the compiler process is:
1. Tokenizes (`internal/token.go`)
2. Scans (`internal/js_scanner.go`)
3. Prints (`internal/printer/print-to-js.go`)
**Tokenizing** takes the raw `.astro` text and turns it into simple tokens such as `FrontmatterStart`, `FrontmatterEnd`, `TagStart`, `TagEnd`, etc.
**Scanning** does a basic scanning of the JS to pull out imports after the tokenizer has made it clear where JS begins and ends.
**Printing** takes all the output up till now and generates (prints) valid TypeScript that can be executed within Node.
When adding a new feature or debugging an issue, start at the tokenizer, then move onto the scanner, and finally end at the printer. By starting at the lowest level of complexity (tokenizer), it will be easier to reason about.
## Tests
It's important to **run the test from the root of the project**. Doing so, `go` will load all the necessary global information needed to run the tests.
### Run all tests
```shell
go test -v ./internal/...
```
### Run a specific test suite
```shell
go test -v ./internal/printer
```
### Run a specific test case
Many of our test cases are designed like this:
```go
func TestPrintToJSON(t *testing.T) {
tests := []jsonTestcase{
{
name: "basic",
source: `<h1>Hello world!</h1>`,
want: []ASTNode{{Type: "element", Name: "h1", Children: []ASTNode{{Type: "text", Value: "Hello world!"}}}},
},
{
name: "Comment preserves whitespace",
source: `<!-- hello -->`,
want: []ASTNode{{Type: "comment", Value: " hello "}},
}
}
}
```
In this particular instance, the test case is name of the function, a slash `/`, followed by the `name` field. If the test case has spaces, you can use them.
```shell
go test -v ./internal/... -run TestPrintToJSON/basic
go test -v ./internal/... -run TestPrintToJSON/Comment preserves whitespace
```
#### Snapshot testing
We use [go-snaps](https://github.com/gkampitakis/go-snaps) for snapshot testing. Visit their repository for more details on how to use it
#### Update snapshots
Some of our tests use snapshot tests. If some of you changes are expected to update some snapshot tests, you can use the environment variable `UPDATE_SNAPS` to do so:
```shell
UPDATE_SNAPS=true go test -v ./internal/...
```
Instead, if there are some **obsolete snapshots**, you can `UPDATE_SNAPS=clean`:
```shell
UPDATE_SNAPS=clean go test -v ./internal/...
```
### Adding new test cases
The printer tests emit only snapshots. Go to `printer_test.go` and add a new test case:
```go
{
name: "New name for this test"
code: "<div></div>"
}
```
Then run the below command, and a new snapshot named `new_name_for_this_test.snap` should appear in the snapshot folder.
```shell
go test -v ./internal/printer/printer_test.go
```
Other tests, like tokenizer and scanner be found in `internal/token_test.go`, `internal/js_scanner_test.go` and respectively.
Those tests don't emit any snapshot, and you'll have to add a `want` field:
```go
{
name: "New name for this test"
code: "<div></div>",
want: want{
code: "<div></div>"
}
}
```
[homebrew]: https://brew.sh/
[go]: https://golang.org/
[go-vscode]: https://marketplace.visualstudio.com/items?itemName=golang.go
[node]: https://nodejs.org/
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2021 [Astro contributors](https://github.com/withastro/compiler/graphs/contributors)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"""
This license applies to parts of the `internal/` subdirectory originating from
the https://cs.opensource.google/go/x/net/+/master:html/ repository:
Copyright (c) 2009 The Go Authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: Makefile
================================================
GO_FLAGS += "-ldflags=-s -w"
# Avoid embedding the build path in the executable for more reproducible builds
GO_FLAGS += -trimpath
wasm: internal/*/*.go go.mod
CGO_ENABLED=0 GOOS=js GOARCH=wasm go build $(GO_FLAGS) -o ./packages/compiler/wasm/astro.wasm ./cmd/astro-wasm/astro-wasm.go
publish-node:
make wasm
cd packages/compiler && pnpm run build
clean:
git clean -dxf
================================================
FILE: SYNTAX_SPEC.md
================================================
# The `.astro` File Format - Syntax Specification
**Version:** 1.0
**Status:** Draft
**Date:** 2026-02-03
---
## Table of Contents
1. [File Structure](#1-file-structure)
2. [Component Script (Frontmatter)](#2-component-script-frontmatter)
3. [Template](#3-template)
4. [Style Blocks](#4-style-blocks)
5. [Script Blocks](#5-script-blocks)
---
## 1. File Structure
An `.astro` file is composed of up to two sections described below. All are optional. When present, they must appear in this order:
```
┌──────────────────────────────────┐
│ --- │
│ Component Script │
│ --- │
├──────────────────────────────────┤
│ Template │
└──────────────────────────────────┘
```
### 1.1 Minimal examples
```astro
<!-- A comment! -->
<h1>Hello, World!</h1>
```
```astro
---
const greeting = "Hello";
---
<h1>{greeting}, World!</h1>
<style>
h1 { color: royalblue; }
</style>
```
---
## 2. Component Script (Frontmatter)
The region between the two `---` fences.
- The opening and closing fences are not required on their own line. Code may appear on the same line as both fences.
- Only one component script is allowed per file.
- Any amount of whitespace may appear before the opening fence or after the closing fence.
- Any content may appear before the opening fence, but is customarily ignored.
The component script is TypeScript. All standard TypeScript syntax is valid, apart from the exceptions and additions outlined in §2.1.
### 2.1 Top-level return
`return` may be used at the top level:
```astro
---
import { getUser } from "../lib/auth.js";
const user = await getUser();
if (!user) {
return Astro.redirect("/login");
}
---
```
---
## 3. Template
The template is considered to be everything after the closing fence of the component script, or the entire file when there is no component script.
The template mostly follows the [JSX specification](https://facebook.github.io/jsx/), with the differences and additions outlined in §3.2.
### 3.1 Whitespace between the component script and template is ignored
Any amount of whitespace (spaces, tabs, newlines) between the closing fence of the component script and the start of the template is ignored and does not produce text nodes.
```astro
---
const greeting = "Hello";
---
<h1>{greeting}, World!</h1>
```
### 3.2 Differences from JSX
Unless mentioned otherwise, these differences apply both within the template and within expressions inside the template.
#### HTML comments
HTML comments `<!-- … -->` are allowed.
```astro
<!-- This is an HTML comment -->
{
<!-- This is an HTML comment inside an expression -->
}
```
#### <Fragment>
In addition to the standard JSX fragment syntax `<>…</>`, `Fragment` is supported as the tag name for fragments, i.e. `<Fragment>…</Fragment>`.
```astro
<Fragment>
<div>Item 1</div>
<div>Item 2</div>
</Fragment>
```
This form may accept attributes, unlike the shorthand syntax.
#### `is:raw` Directive
The `is:raw` attribute on any element allows the content to be treated as raw text instead of JSX.
```astro
<Component is:raw>{<% non-JS content %>}</Component>
<div is:raw>
{not an expression, just text}
</div>
```
#### HTML doctype
The [HTML doctype declaration](https://html.spec.whatwg.org/multipage/syntax.html#the-doctype) is allowed.
```astro
<!DOCTYPE html>
```
##### Top-level text nodes
Top-level text inside the template is treated as text nodes.
```astro
Hello, World!
```
#### Whitespace in expressions
Whitespace inside expressions `{ }` is preserved as text nodes, unlike JSX, where whitespace inside expression containers is ignored:
```astro
<!-- Whitespace around element -->
{
<div>Hello</div>
}
<!-- Leading/trailing spaces -->
{ <div>test</div> }
<!-- Whitespace-only expression -->
{ }
```
In Astro, all of these produce text nodes for the whitespace, whereas in JSX:
- Whitespace around elements inside `{ }` is ignored
- Whitespace-only expressions result in an empty expression, with no text nodes.
#### Multiple root elements
Unlike JSX, no single root element is required:
```astro
<header>…</header>
<main>…</main>
<footer>…</footer>
<!-- or inside an expression: -->
{
<div>1</div>
<div>2</div>
<div>3</div>
}
```
#### Attribute names
Attribute names [follow the HTML conventions](https://html.spec.whatwg.org/multipage/syntax.html#syntax-attribute-name) and are not required to be valid JavaScript identifiers. For example, characters like hyphens and colons are allowed in attribute names:
```astro
<div @click="handler" x.data="value" :class="my-class" />
```
#### Namespace in component names is not supported
Colons in component names are not treated as namespace separators. For example:
```astro
<Namespace:Component />
```
Will be treated as a single component name (i.e. `Namespace:Component`). Spaces are not allowed in component names, so the following:
```astro
<Namespace : Component />
```
Would result in the component's name being Namespace, an attribute named `:` with no value, and an attribute named `Component` with no value.
#### Attribute shorthand
Attributes can use a shorthand syntax where `{prop}` is equivalent to `prop={prop}`:
```astro
<Component {prop} />
<!-- equivalent to: -->
<Component prop={prop} />
```
#### Template literal attributes
Attributes can use backticks for interpolation without opening an expression:
```astro
<Component attribute=`hello ${value}` />
```
#### Empty expressions inside attributes
Empty expressions `{}` inside attributes are allowed:
```astro
<Component attribute={} />
```
#### Comments inside opening tags
Comments are allowed inside the opening tag of an element:
```astro
<div
{/* Hello */}
class="my-class"
></div>
```
#### Less-than signs in text nodes
Less-than signs `<` in text nodes are parsed following HTML rules, meaning they do not need to be escaped:
```astro
<p>5 < 10</p>
```
#### Non-ASCII tag names are not supported
Tag names must use ASCII characters only. Non-ASCII tag names (e.g. `<日本>`) are not supported and are treated as text nodes.
#### Unquoted attribute values
Attribute values do not need to be quoted if they contain only alphanumeric characters, hyphens, underscores, and periods:
```astro
<Component data-id=12345 class=my-class />
```
#### Unclosed HTML tags
Like HTML, tags do not need to be explicitly closed.
```astro
<p>Hello
<p>World
```
It is up to the parser to optionally try to infer where tags close based on HTML parsing rules, or leave them unclosed.
##### Void elements
HTML void elements do not need to be self-closed:
```astro
<input type="text">
<br>
<img src="image.png">
```
#### Element-specific parsing rules
Certain HTML elements have special parsing rules that differ from the general rules outlined above. These include:
- `<script>` - contains JavaScript/TypeScript (see §5)
- `<style>` - contains CSS (see §4)
##### Elements that disable expression parsing
The following elements disable expression parsing entirely. Inside these elements and their descendants, curly braces `{` and `}` are treated as literal text characters, not expression delimiters:
- `<math>`
- `<iframe>`
- `<noembed>`
- `<noframes>`
- `<plaintext>`
- `<xmp>`
Example with `<math>`:
```astro
<math xmlns="http://www.w3.org/1998/Math/MathML">
<semantics>
<annotation encoding="application/x-tex">
f\colon X \to \mathbb{R}^{2x}
</annotation>
</semantics>
</math>
```
In this example, `{R}` and `{2x}` are treated as literal text, not expressions.
##### Raw text elements that still support expressions
The `<title>` and `<textarea>` elements have special parsing where HTML tags inside them are treated as literal text rather than elements, but expressions still work.
```astro
<title>{pageTitle} - Site with <b>bold</b></title>
<textarea>{defaultValue} with <div>tags</div></textarea>
```
In this example:
- `{pageTitle}` and `{defaultValue}` are expressions that will be evaluated
- The `<b>bold</b>` and `<div>tags</div>` are treated as literal text, not HTML elements
---
## 4. Style Blocks
```astro
<style>
h1 { color: red; }
</style>
```
Multiple `<style>` blocks are allowed per file.
### 4.1 Language
By default, `<style>` blocks can contain CSS. The content adheres to standard CSS syntax as defined by the [CSS Syntax Module](https://www.w3.org/TR/css-syntax-3/).
### 4.2 `lang` attribute
Specifies a preprocessor language:
```astro
<style lang="scss">
$accent: #1d4ed8;
.card { border-color: $accent; }
</style>
```
The syntax then follows the rules of the specified preprocessor instead of standard CSS.
---
## 5. Script Blocks
```astro
<script>
console.log("Hello");
</script>
```
Multiple `<script>` blocks are allowed per file.
### 5.1 Language
A bare `<script>` tag with no attributes can contain TypeScript. The content adheres to standard TypeScript syntax.
```astro
<script>
interface User {
id: number;
name: string;
}
// ...
</script>
```
If any attributes are present, the content instead follows standard [HTML `<script>` element](https://html.spec.whatwg.org/multipage/scripting.html#the-script-element) rules.
```astro
<script defer>
// JavaScript
</script>
<script type="module">
// JavaScript module
import { foo } from "./foo.js";
</script>
<script type="application/json">
{ "key": "value" }
</script>
```
================================================
FILE: biome.json
================================================
{
"$schema": "https://biomejs.dev/schemas/1.8.1/schema.json",
"files": {
"ignore": ["**/dist/**", "**/pnpm-lock.yaml", "wasm_exec.ts"],
"include": ["packages/**"]
},
"formatter": {
"enabled": true,
"indentStyle": "tab",
"indentWidth": 2,
"lineWidth": 100
},
"organizeImports": {
"enabled": true
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"suspicious": {
"noExplicitAny": "info",
"noConsoleLog": "info"
},
"style": {
"useTemplate": {
"level": "error",
"fix": "safe"
},
"noUnusedTemplateLiteral": {
"level": "error",
"fix": "safe"
}
}
}
},
"javascript": {
"formatter": {
"trailingCommas": "es5",
"quoteStyle": "single",
"semicolons": "always"
}
},
"json": {
"parser": {
"allowComments": true,
"allowTrailingCommas": true
},
"formatter": {
"indentStyle": "space",
"trailingCommas": "none"
}
},
"overrides": [
{
"include": ["**/stress/**"],
"linter": {
"rules": {
"suspicious": {
"noConsoleLog": "off"
}
}
}
},
{
"include": ["package.json"],
"json": {
"formatter": {
"lineWidth": 1
}
}
}
]
}
================================================
FILE: cmd/astro-wasm/astro-wasm.go
================================================
//go:build js && wasm
package main
import (
"encoding/base64"
"encoding/json"
"fmt"
"strings"
"sync"
"syscall/js"
"unicode"
"github.com/norunners/vert"
astro "github.com/withastro/compiler/internal"
"github.com/withastro/compiler/internal/handler"
"github.com/withastro/compiler/internal/loc"
"github.com/withastro/compiler/internal/printer"
"github.com/withastro/compiler/internal/sourcemap"
t "github.com/withastro/compiler/internal/t"
"github.com/withastro/compiler/internal/transform"
wasm_utils "github.com/withastro/compiler/internal_wasm/utils"
)
func main() {
js.Global().Set("@astrojs/compiler", js.ValueOf(make(map[string]interface{})))
module := js.Global().Get("@astrojs/compiler")
module.Set("transform", Transform())
module.Set("parse", Parse())
module.Set("convertToTSX", ConvertToTSX())
<-make(chan struct{})
}
func jsString(j js.Value) string {
if j.Equal(js.Undefined()) || j.Equal(js.Null()) {
return ""
}
return j.String()
}
func jsBoolOptional(j js.Value, defaultValue bool) bool {
if j.Equal(js.Undefined()) || j.Equal(js.Null()) {
return defaultValue
}
return j.Bool()
}
func jsBool(j js.Value) bool {
if j.Equal(js.Undefined()) || j.Equal(js.Null()) {
return false
}
return j.Bool()
}
func makeParseOptions(options js.Value) t.ParseOptions {
position := true
pos := options.Get("position")
if !pos.IsNull() && !pos.IsUndefined() {
position = pos.Bool()
}
filename := jsString(options.Get("filename"))
if filename == "" {
filename = "<stdin>"
}
return t.ParseOptions{
Filename: filename,
Position: position,
}
}
func makeTransformOptions(options js.Value) transform.TransformOptions {
filename := jsString(options.Get("filename"))
if filename == "" {
filename = "<stdin>"
}
normalizedFilename := jsString(options.Get("normalizedFilename"))
if normalizedFilename == "" {
normalizedFilename = filename
}
internalURL := jsString(options.Get("internalURL"))
if internalURL == "" {
internalURL = "astro/runtime/server/index.js"
}
sourcemap := jsString(options.Get("sourcemap"))
if sourcemap == "<boolean: true>" {
sourcemap = "both"
}
astroGlobalArgs := jsString(options.Get("astroGlobalArgs"))
compact := false
if jsBool(options.Get("compact")) {
compact = true
}
scopedSlot := false
if jsBool(options.Get("resultScopedSlot")) {
scopedSlot = true
}
transitionsAnimationURL := jsString(options.Get("transitionsAnimationURL"))
if transitionsAnimationURL == "" {
transitionsAnimationURL = "astro/components/viewtransitions.css"
}
annotateSourceFile := false
if jsBool(options.Get("annotateSourceFile")) {
annotateSourceFile = true
}
var resolvePath any = options.Get("resolvePath")
var resolvePathFn func(string) string
if resolvePath.(js.Value).Type() == js.TypeFunction {
resolvePathFn = func(id string) string {
result, _ := wasm_utils.Await(resolvePath.(js.Value).Invoke(id))
if result[0].Equal(js.Undefined()) || result[0].Equal(js.Null()) {
return id
} else {
return result[0].String()
}
}
}
preprocessStyle := options.Get("preprocessStyle")
scopedStyleStrategy := jsString(options.Get("scopedStyleStrategy"))
if scopedStyleStrategy == "" {
scopedStyleStrategy = "where"
}
return transform.TransformOptions{
Filename: filename,
NormalizedFilename: normalizedFilename,
InternalURL: internalURL,
SourceMap: sourcemap,
AstroGlobalArgs: astroGlobalArgs,
Compact: compact,
ResolvePath: resolvePathFn,
PreprocessStyle: preprocessStyle,
ResultScopedSlot: scopedSlot,
ScopedStyleStrategy: scopedStyleStrategy,
TransitionsAnimationURL: transitionsAnimationURL,
AnnotateSourceFile: annotateSourceFile,
}
}
func makeTSXOptions(options js.Value) printer.TSXOptions {
includeScripts := jsBoolOptional(options.Get("includeScripts"), true)
includeStyles := jsBoolOptional(options.Get("includeStyles"), true)
return printer.TSXOptions{
IncludeScripts: includeScripts,
IncludeStyles: includeStyles,
}
}
type RawSourceMap struct {
File string `js:"file"`
Mappings string `js:"mappings"`
Names []string `js:"names"`
Sources []string `js:"sources"`
SourcesContent []string `js:"sourcesContent"`
Version int `js:"version"`
}
type HoistedScript struct {
Code string `js:"code"`
Src string `js:"src"`
Type string `js:"type"`
Map string `js:"map"`
}
type HydratedComponent struct {
ExportName string `js:"exportName"`
LocalName string `js:"localName"`
Specifier string `js:"specifier"`
ResolvedPath string `js:"resolvedPath"`
}
type ParseResult struct {
AST string `js:"ast"`
Diagnostics []loc.DiagnosticMessage `js:"diagnostics"`
}
type TSXResult struct {
Code string `js:"code"`
Map string `js:"map"`
Diagnostics []loc.DiagnosticMessage `js:"diagnostics"`
Ranges printer.TSXRanges `js:"metaRanges"`
}
type TransformResult struct {
Code string `js:"code"`
Diagnostics []loc.DiagnosticMessage `js:"diagnostics"`
Map string `js:"map"`
Scope string `js:"scope"`
CSS []string `js:"css"`
Scripts []HoistedScript `js:"scripts"`
HydratedComponents []HydratedComponent `js:"hydratedComponents"`
ClientOnlyComponents []HydratedComponent `js:"clientOnlyComponents"`
ServerComponents []HydratedComponent `js:"serverComponents"`
ContainsHead bool `js:"containsHead"`
StyleError []string `js:"styleError"`
Propagation bool `js:"propagation"`
}
// This is spawned as a goroutine to preprocess style nodes using an async function passed from JS
func preprocessStyle(i int, style *astro.Node, transformOptions transform.TransformOptions, styleError *[]string, cb func()) {
defer cb()
if style.FirstChild == nil {
return
}
attrs := wasm_utils.GetAttrs(style)
data, _ := wasm_utils.Await(transformOptions.PreprocessStyle.(js.Value).Invoke(style.FirstChild.Data, attrs))
// note: Rollup (and by extension our Astro Vite plugin) allows for "undefined" and "null" responses if a transform wishes to skip this occurrence
if data[0].Equal(js.Undefined()) || data[0].Equal(js.Null()) {
return
}
// If an error return, override the style's CSS so the compiler doesn't hang
// And return a styleError. The caller will use this to know that style processing failed.
if err := jsString(data[0].Get("error")); err != "" {
style.FirstChild.Data = ""
//*styleError = err
*styleError = append(*styleError, err)
return
}
str := jsString(data[0].Get("code"))
if str == "" {
return
}
style.FirstChild.Data = str
}
func Parse() any {
return js.FuncOf(func(this js.Value, args []js.Value) any {
source := jsString(args[0])
parseOptions := makeParseOptions(js.Value(args[1]))
transformOptions := makeTransformOptions(js.Value(args[1]))
transformOptions.Scope = "xxxxxx"
h := handler.NewHandler(source, parseOptions.Filename)
var doc *astro.Node
doc, err := astro.ParseWithOptions(strings.NewReader(source), astro.ParseOptionWithHandler(h), astro.ParseOptionEnableLiteral(true))
if err != nil {
h.AppendError(err)
}
result := printer.PrintToJSON(source, doc, parseOptions)
// AFTER printing, exec transformations to pickup any errors/warnings
transform.Transform(doc, transformOptions, h)
return vert.ValueOf(ParseResult{
AST: string(result.Output),
Diagnostics: h.Diagnostics(),
}).Value
})
}
func ConvertToTSX() any {
return js.FuncOf(func(this js.Value, args []js.Value) any {
source := jsString(args[0])
transformOptions := makeTransformOptions(js.Value(args[1]))
transformOptions.Scope = "xxxxxx"
h := handler.NewHandler(source, transformOptions.Filename)
var doc *astro.Node
doc, err := astro.ParseWithOptions(strings.NewReader(source), astro.ParseOptionWithHandler(h), astro.ParseOptionEnableLiteral(true))
if err != nil {
h.AppendError(err)
}
tsxOptions := makeTSXOptions(js.Value(args[1]))
result := printer.PrintToTSX(source, doc, tsxOptions, transformOptions, h)
// AFTER printing, exec transformations to pickup any errors/warnings
transform.Transform(doc, transformOptions, h)
sourcemapString := createSourceMapString(source, result, transformOptions)
code := string(result.Output)
if transformOptions.SourceMap != "external" {
inlineSourcemap := `//# sourceMappingURL=data:application/json;charset=utf-8;base64,` + base64.StdEncoding.EncodeToString([]byte(sourcemapString))
code += "\n" + inlineSourcemap
}
return vert.ValueOf(TSXResult{
Code: code,
Map: sourcemapString,
Diagnostics: h.Diagnostics(),
Ranges: result.TSXRanges,
}).Value
})
}
func Transform() any {
return js.FuncOf(func(this js.Value, args []js.Value) any {
source := strings.TrimRightFunc(jsString(args[0]), unicode.IsSpace)
transformOptions := makeTransformOptions(js.Value(args[1]))
scopeStr := transformOptions.NormalizedFilename
if scopeStr == "<stdin>" {
scopeStr = source
}
transformOptions.Scope = astro.HashString(scopeStr)
h := handler.NewHandler(source, transformOptions.Filename)
styleError := []string{}
promiseHandle := js.FuncOf(func(this js.Value, args []js.Value) any {
resolve := args[0]
reject := args[1]
go func() {
var doc *astro.Node
defer func() {
if err := recover(); err != nil {
reject.Invoke(wasm_utils.ErrorToJSError(h, err.(error)))
return
}
}()
doc, err := astro.ParseWithOptions(strings.NewReader(source), astro.ParseOptionWithHandler(h))
if err != nil {
reject.Invoke(wasm_utils.ErrorToJSError(h, err))
return
}
// Hoist styles and scripts to the top-level
transform.ExtractStyles(doc, &transformOptions)
// Pre-process styles
// Important! These goroutines need to be spawned from this file or they don't work
var wg sync.WaitGroup
if len(doc.Styles) > 0 {
if transformOptions.PreprocessStyle.(js.Value).Type() == js.TypeFunction {
for i, style := range doc.Styles {
wg.Add(1)
i := i
go preprocessStyle(i, style, transformOptions, &styleError, wg.Done)
}
}
}
// Wait for all the style goroutines to finish
wg.Wait()
// Perform CSS and element scoping as needed
transform.Transform(doc, transformOptions, h)
css := []string{}
scripts := []HoistedScript{}
hydratedComponents := []HydratedComponent{}
clientOnlyComponents := []HydratedComponent{}
serverComponents := []HydratedComponent{}
css_result := printer.PrintCSS(source, doc, transformOptions)
for _, bytes := range css_result.Output {
css = append(css, string(bytes))
}
// Append hoisted scripts
for _, node := range doc.Scripts {
src := astro.GetAttribute(node, "src")
script := HoistedScript{
Src: "",
Code: "",
Type: "",
Map: "",
}
if src != nil {
script.Type = "external"
script.Src = src.Val
} else if node.FirstChild != nil {
script.Type = "inline"
if transformOptions.SourceMap != "" {
isLine := func(r rune) bool { return r == '\r' || r == '\n' }
isNotLine := func(r rune) bool { return !(r == '\r' || r == '\n') }
output := make([]byte, 0)
builder := sourcemap.MakeChunkBuilder(nil, sourcemap.GenerateLineOffsetTables(source, len(strings.Split(source, "\n"))))
sourcesContent, _ := json.Marshal(source)
if len(node.FirstChild.Loc) > 0 {
i := node.FirstChild.Loc[0].Start
nonWS := strings.IndexFunc(node.FirstChild.Data, isNotLine)
i += nonWS
for _, ln := range strings.Split(strings.TrimFunc(node.FirstChild.Data, isLine), "\n") {
content := []byte(ln)
content = append(content, '\n')
for j, b := range content {
if j == 0 || !unicode.IsSpace(rune(b)) {
builder.AddSourceMapping(loc.Loc{Start: i}, output)
}
output = append(output, b)
i += 1
}
}
output = append(output, '\n')
} else {
output = append(output, []byte(strings.TrimSpace(node.FirstChild.Data))...)
}
sourcemap := fmt.Sprintf(
`{ "version": 3, "sources": ["%s"], "sourcesContent": [%s], "mappings": "%s", "names": [] }`,
transformOptions.Filename,
string(sourcesContent),
string(builder.GenerateChunk(output).Buffer),
)
script.Map = sourcemap
script.Code = string(output)
} else {
script.Code = node.FirstChild.Data
}
}
// sourcemapString := createSourceMapString(source, result, transformOptions)
// inlineSourcemap := `//# sourceMappingURL=data:application/json;charset=utf-8;base64,` + base64.StdEncoding.EncodeToString([]byte(sourcemapString))
scripts = append(scripts, script)
}
for _, c := range doc.HydratedComponents {
hydratedComponents = append(hydratedComponents, HydratedComponent{
ExportName: c.ExportName,
Specifier: c.Specifier,
ResolvedPath: c.ResolvedPath,
})
}
for _, c := range doc.ClientOnlyComponents {
clientOnlyComponents = append(clientOnlyComponents, HydratedComponent{
ExportName: c.ExportName,
Specifier: c.Specifier,
ResolvedPath: c.ResolvedPath,
})
}
for _, c := range doc.ServerComponents {
serverComponents = append(serverComponents, HydratedComponent{
ExportName: c.ExportName,
LocalName: c.LocalName,
Specifier: c.Specifier,
ResolvedPath: c.ResolvedPath,
})
}
var value vert.Value
result := printer.PrintToJS(source, doc, len(css), transformOptions, h)
transformResult := &TransformResult{
CSS: css,
Scope: transformOptions.Scope,
Scripts: scripts,
HydratedComponents: hydratedComponents,
ClientOnlyComponents: clientOnlyComponents,
ServerComponents: serverComponents,
ContainsHead: doc.ContainsHead,
StyleError: styleError,
Propagation: doc.HeadPropagation,
}
switch transformOptions.SourceMap {
case "external":
value = createExternalSourceMap(source, transformResult, result, transformOptions)
case "both":
value = createBothSourceMap(source, transformResult, result, transformOptions)
case "inline":
value = createInlineSourceMap(source, transformResult, result, transformOptions)
default:
transformResult.Code = string(result.Output)
transformResult.Map = ""
value = vert.ValueOf(transformResult)
}
value.Set("diagnostics", vert.ValueOf(h.Diagnostics()).Value)
resolve.Invoke(value.Value)
}()
return nil
})
defer promiseHandle.Release()
// Create and return the Promise object
promiseConstructor := js.Global().Get("Promise")
return promiseConstructor.New(promiseHandle)
})
}
func createSourceMapString(source string, result printer.PrintResult, transformOptions transform.TransformOptions) string {
sourcesContent, _ := json.Marshal(source)
sourcemap := RawSourceMap{
Version: 3,
Sources: []string{transformOptions.Filename},
SourcesContent: []string{string(sourcesContent)},
Mappings: string(result.SourceMapChunk.Buffer),
}
return fmt.Sprintf(`{
"version": 3,
"sources": ["%s"],
"sourcesContent": [%s],
"mappings": "%s",
"names": []
}`, sourcemap.Sources[0], sourcemap.SourcesContent[0], sourcemap.Mappings)
}
func createExternalSourceMap(source string, transformResult *TransformResult, result printer.PrintResult, transformOptions transform.TransformOptions) vert.Value {
transformResult.Code = string(result.Output)
transformResult.Map = createSourceMapString(source, result, transformOptions)
return vert.ValueOf(transformResult)
}
func createInlineSourceMap(source string, transformResult *TransformResult, result printer.PrintResult, transformOptions transform.TransformOptions) vert.Value {
sourcemapString := createSourceMapString(source, result, transformOptions)
inlineSourcemap := `//# sourceMappingURL=data:application/json;charset=utf-8;base64,` + base64.StdEncoding.EncodeToString([]byte(sourcemapString))
transformResult.Code = string(result.Output) + "\n" + inlineSourcemap
transformResult.Map = ""
return vert.ValueOf(transformResult)
}
func createBothSourceMap(source string, transformResult *TransformResult, result printer.PrintResult, transformOptions transform.TransformOptions) vert.Value {
sourcemapString := createSourceMapString(source, result, transformOptions)
inlineSourcemap := `//# sourceMappingURL=data:application/json;charset=utf-8;base64,` + base64.StdEncoding.EncodeToString([]byte(sourcemapString))
transformResult.Code = string(result.Output) + "\n" + inlineSourcemap
transformResult.Map = sourcemapString
return vert.ValueOf(transformResult)
}
================================================
FILE: go.mod
================================================
module github.com/withastro/compiler
go 1.21
require (
github.com/gkampitakis/go-snaps v0.5.2
github.com/google/go-cmp v0.5.9
github.com/iancoleman/strcase v0.2.0
github.com/lithammer/dedent v1.1.0
github.com/norunners/vert v0.0.0-20221203075838-106a353d42dd
github.com/tdewolff/parse/v2 v2.6.4
golang.org/x/net v0.0.0-20221004154528-8021a29435af
golang.org/x/sys v0.0.0-20221010170243-090e33056c14
)
require (
github.com/gkampitakis/ciinfo v0.3.0 // indirect
github.com/gkampitakis/go-diff v1.3.2 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/maruel/natural v1.1.1 // indirect
github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/tidwall/gjson v1.17.0 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.1 // indirect
github.com/tidwall/sjson v1.2.5 // indirect
)
================================================
FILE: go.sum
================================================
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/gkampitakis/ciinfo v0.3.0 h1:gWZlOC2+RYYttL0hBqcoQhM7h1qNkVqvRCV1fOvpAv8=
github.com/gkampitakis/ciinfo v0.3.0/go.mod h1:1NIwaOcFChN4fa/B0hEBdAb6npDlFL8Bwx4dfRLRqAo=
github.com/gkampitakis/go-diff v1.3.2 h1:Qyn0J9XJSDTgnsgHRdz9Zp24RaJeKMUHg2+PDZZdC4M=
github.com/gkampitakis/go-diff v1.3.2/go.mod h1:LLgOrpqleQe26cte8s36HTWcTmMEur6OPYerdAAS9tk=
github.com/gkampitakis/go-snaps v0.5.2 h1:ay/6f7WHwRkOgpBec9DjMLRBAApziJommZ21NkOOCwY=
github.com/gkampitakis/go-snaps v0.5.2/go.mod h1:ZABkO14uCuVxBHAXAfKG+bqNz+aa1bGPAg8jkI0Nk8Y=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0=
github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lithammer/dedent v1.1.0 h1:VNzHMVCBNG1j0fh3OrsFRkVUwStdDArbgBWoPAffktY=
github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc=
github.com/maruel/natural v1.1.1 h1:Hja7XhhmvEFhcByqDoHz9QZbkWey+COd9xWfCfn1ioo=
github.com/maruel/natural v1.1.1/go.mod h1:v+Rfd79xlw1AgVBjbO0BEQmptqb5HvL/k9GRHB7ZKEg=
github.com/norunners/vert v0.0.0-20221203075838-106a353d42dd h1:tHn7K76q9eJ2rXLH/OoxHkdprM3l2A+0kdxOrKYcV7U=
github.com/norunners/vert v0.0.0-20221203075838-106a353d42dd/go.mod h1:8iuQLyTSvuzwy6R6l6w6J+i9c/6xPEVoVdcMz9E8FEw=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/tdewolff/parse/v2 v2.6.4 h1:KCkDvNUMof10e3QExio9OPZJT8SbdKojLBumw8YZycQ=
github.com/tdewolff/parse/v2 v2.6.4/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs=
github.com/tdewolff/test v1.0.7 h1:8Vs0142DmPFW/bQeHRP3MV19m1gvndjUb1sn8yy74LM=
github.com/tdewolff/test v1.0.7/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE=
github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM=
github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
golang.org/x/net v0.0.0-20221004154528-8021a29435af h1:wv66FM3rLZGPdxpYL+ApnDe2HzHcTFta3z5nsc13wI4=
golang.org/x/net v0.0.0-20221004154528-8021a29435af/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/sys v0.0.0-20221010170243-090e33056c14 h1:k5II8e6QD8mITdi+okbbmR/cIyEbeXLBhy5Ha4nevyc=
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
================================================
FILE: internal/const.go
================================================
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package astro
import a "golang.org/x/net/html/atom"
// Section 12.2.4.2 of the HTML5 specification says "The following elements
// have varying levels of special parsing rules".
// https://html.spec.whatwg.org/multipage/syntax.html#the-stack-of-open-elements
var isSpecialElementMap = map[string]bool{
"address": true,
"applet": true,
"area": true,
"article": true,
"aside": true,
"base": true,
"basefont": true,
"bgsound": true,
"blockquote": true,
"body": true,
"br": true,
"button": true,
"caption": true,
"center": true,
"col": true,
"colgroup": true,
"dd": true,
"details": true,
"dir": true,
"div": true,
"dl": true,
"dt": true,
"embed": true,
"fieldset": true,
"figcaption": true,
"figure": true,
"footer": true,
"form": true,
"frame": true,
"frameset": true,
"h1": true,
"h2": true,
"h3": true,
"h4": true,
"h5": true,
"h6": true,
"head": true,
"header": true,
"hgroup": true,
"hr": true,
"html": true,
"iframe": true,
"img": true,
"input": true,
"keygen": true, // "keygen" has been removed from the spec, but are kept here for backwards compatibility.
"li": true,
"link": true,
"listing": true,
"main": true,
"marquee": true,
"menu": true,
"meta": true,
"nav": true,
"noembed": true,
"noframes": true,
"noscript": true,
"object": true,
"ol": true,
"p": true,
"param": true,
"plaintext": true,
"pre": true,
"script": true,
"section": true,
"select": true,
"source": true,
"style": true,
"summary": true,
"table": true,
"tbody": true,
"td": true,
"template": true,
"textarea": true,
"tfoot": true,
"th": true,
"thead": true,
"title": true,
"tr": true,
"track": true,
"ul": true,
"wbr": true,
"xmp": true,
}
func isSpecialElement(element *Node) bool {
switch element.Namespace {
case "", "html":
return isSpecialElementMap[element.Data]
case "math":
switch element.Data {
case "mi", "mo", "mn", "ms", "mtext", "annotation-xml":
return true
}
case "svg":
switch element.Data {
case "foreignObject", "desc", "title":
return true
}
}
return false
}
var knownDirectiveMap = map[string]bool{
"client:load": true,
"client:idle": true,
"client:visible": true,
"client:only": true,
"class:list": true,
"set:text": true,
"set:html": true,
}
func IsKnownDirective(element *Node, attr *Attribute) bool {
if knownDirectiveMap[attr.Key] {
return true
}
if element.DataAtom == a.Script {
return attr.Key == "hoist"
}
if element.DataAtom == a.Style {
return attr.Key == "global"
}
return false
}
================================================
FILE: internal/doc.go
================================================
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// This example demonstrates parsing HTML data and walking the resulting tree.
package astro
================================================
FILE: internal/doctype.go
================================================
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package astro
import (
"strings"
)
// parseDoctype parses the data from a DoctypeToken into a name,
// public identifier, and system identifier. It returns a Node whose Type
// is DoctypeNode, whose Data is the name, and which has attributes
// named "system" and "public" for the two identifiers if they were present.
// quirks is whether the document should be parsed in "quirks mode".
func parseDoctype(s string) (n *Node, quirks bool) {
n = &Node{Type: DoctypeNode}
// Find the name.
space := strings.IndexAny(s, whitespace)
if space == -1 {
space = len(s)
}
n.Data = s[:space]
// The comparison to "html" is case-sensitive.
if n.Data != "html" {
quirks = true
}
n.Data = strings.ToLower(n.Data)
s = strings.TrimLeft(s[space:], whitespace)
if len(s) < 6 {
// It can't start with "PUBLIC" or "SYSTEM".
// Ignore the rest of the string.
return n, quirks || s != ""
}
key := strings.ToLower(s[:6])
s = s[6:]
for key == "public" || key == "system" {
s = strings.TrimLeft(s, whitespace)
if s == "" {
break
}
quote := s[0]
if quote != '"' && quote != '\'' {
break
}
s = s[1:]
q := strings.IndexRune(s, rune(quote))
var id string
if q == -1 {
id = s
s = ""
} else {
id = s[:q]
s = s[q+1:]
}
n.Attr = append(n.Attr, Attribute{Key: key, Val: id})
if key == "public" {
key = "system"
} else {
key = ""
}
}
if key != "" || s != "" {
quirks = true
} else if len(n.Attr) > 0 {
if n.Attr[0].Key == "public" {
public := strings.ToLower(n.Attr[0].Val)
switch public {
case "-//w3o//dtd w3 html strict 3.0//en//", "-/w3d/dtd html 4.0 transitional/en", "html":
quirks = true
default:
for _, q := range quirkyIDs {
if strings.HasPrefix(public, q) {
quirks = true
break
}
}
}
// The following two public IDs only cause quirks mode if there is no system ID.
if len(n.Attr) == 1 && (strings.HasPrefix(public, "-//w3c//dtd html 4.01 frameset//") ||
strings.HasPrefix(public, "-//w3c//dtd html 4.01 transitional//")) {
quirks = true
}
}
if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" &&
strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" {
quirks = true
}
}
return n, quirks
}
// quirkyIDs is a list of public doctype identifiers that cause a document
// to be interpreted in quirks mode. The identifiers should be in lower case.
var quirkyIDs = []string{
"+//silmaril//dtd html pro v0r11 19970101//",
"-//advasoft ltd//dtd html 3.0 aswedit + extensions//",
"-//as//dtd html 3.0 aswedit + extensions//",
"-//ietf//dtd html 2.0 level 1//",
"-//ietf//dtd html 2.0 level 2//",
"-//ietf//dtd html 2.0 strict level 1//",
"-//ietf//dtd html 2.0 strict level 2//",
"-//ietf//dtd html 2.0 strict//",
"-//ietf//dtd html 2.0//",
"-//ietf//dtd html 2.1e//",
"-//ietf//dtd html 3.0//",
"-//ietf//dtd html 3.2 final//",
"-//ietf//dtd html 3.2//",
"-//ietf//dtd html 3//",
"-//ietf//dtd html level 0//",
"-//ietf//dtd html level 1//",
"-//ietf//dtd html level 2//",
"-//ietf//dtd html level 3//",
"-//ietf//dtd html strict level 0//",
"-//ietf//dtd html strict level 1//",
"-//ietf//dtd html strict level 2//",
"-//ietf//dtd html strict level 3//",
"-//ietf//dtd html strict//",
"-//ietf//dtd html//",
"-//metrius//dtd metrius presentational//",
"-//microsoft//dtd internet explorer 2.0 html strict//",
"-//microsoft//dtd internet explorer 2.0 html//",
"-//microsoft//dtd internet explorer 2.0 tables//",
"-//microsoft//dtd internet explorer 3.0 html strict//",
"-//microsoft//dtd internet explorer 3.0 html//",
"-//microsoft//dtd internet explorer 3.0 tables//",
"-//netscape comm. corp.//dtd html//",
"-//netscape comm. corp.//dtd strict html//",
"-//o'reilly and associates//dtd html 2.0//",
"-//o'reilly and associates//dtd html extended 1.0//",
"-//o'reilly and associates//dtd html extended relaxed 1.0//",
"-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//",
"-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//",
"-//spyglass//dtd html 2.0 extended//",
"-//sq//dtd html 2.0 hotmetal + extensions//",
"-//sun microsystems corp.//dtd hotjava html//",
"-//sun microsystems corp.//dtd hotjava strict html//",
"-//w3c//dtd html 3 1995-03-24//",
"-//w3c//dtd html 3.2 draft//",
"-//w3c//dtd html 3.2 final//",
"-//w3c//dtd html 3.2//",
"-//w3c//dtd html 3.2s draft//",
"-//w3c//dtd html 4.0 frameset//",
"-//w3c//dtd html 4.0 transitional//",
"-//w3c//dtd html experimental 19960712//",
"-//w3c//dtd html experimental 970421//",
"-//w3c//dtd w3 html//",
"-//w3o//dtd w3 html 3.0//",
"-//webtechs//dtd mozilla html 2.0//",
"-//webtechs//dtd mozilla html//",
}
================================================
FILE: internal/entity.go
================================================
// Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package astro
// All entities that do not end with ';' are 6 or fewer bytes long.
const longestEntityWithoutSemicolon = 6
// entity is a map from HTML entity names to their values. The semicolon matters:
// https://html.spec.whatwg.org/multipage/syntax.html#named-character-references
// lists both "amp" and "amp;" as two separate entries.
//
// Note that the HTML5 list is larger than the HTML4 list at
// http://www.w3.org/TR/html4/sgml/entities.html
var entity = map[string]rune{
"AElig;": '\U000000C6',
"AMP;": '\U00000026',
"Aacute;": '\U000000C1',
"Abreve;": '\U00000102',
"Acirc;": '\U000000C2',
"Acy;": '\U00000410',
"Afr;": '\U0001D504',
"Agrave;": '\U000000C0',
"Alpha;": '\U00000391',
"Amacr;": '\U00000100',
"And;": '\U00002A53',
"Aogon;": '\U00000104',
"Aopf;": '\U0001D538',
"ApplyFunction;": '\U00002061',
"Aring;": '\U000000C5',
"Ascr;": '\U0001D49C',
"Assign;": '\U00002254',
"Atilde;": '\U000000C3',
"Auml;": '\U000000C4',
"Backslash;": '\U00002216',
"Barv;": '\U00002AE7',
"Barwed;": '\U00002306',
"Bcy;": '\U00000411',
"Because;": '\U00002235',
"Bernoullis;": '\U0000212C',
"Beta;": '\U00000392',
"Bfr;": '\U0001D505',
"Bopf;": '\U0001D539',
"Breve;": '\U000002D8',
"Bscr;": '\U0000212C',
"Bumpeq;": '\U0000224E',
"CHcy;": '\U00000427',
"COPY;": '\U000000A9',
"Cacute;": '\U00000106',
"Cap;": '\U000022D2',
"CapitalDifferentialD;": '\U00002145',
"Cayleys;": '\U0000212D',
"Ccaron;": '\U0000010C',
"Ccedil;": '\U000000C7',
"Ccirc;": '\U00000108',
"Cconint;": '\U00002230',
"Cdot;": '\U0000010A',
"Cedilla;": '\U000000B8',
"CenterDot;": '\U000000B7',
"Cfr;": '\U0000212D',
"Chi;": '\U000003A7',
"CircleDot;": '\U00002299',
"CircleMinus;": '\U00002296',
"CirclePlus;": '\U00002295',
"CircleTimes;": '\U00002297',
"ClockwiseContourIntegral;": '\U00002232',
"CloseCurlyDoubleQuote;": '\U0000201D',
"CloseCurlyQuote;": '\U00002019',
"Colon;": '\U00002237',
"Colone;": '\U00002A74',
"Congruent;": '\U00002261',
"Conint;": '\U0000222F',
"ContourIntegral;": '\U0000222E',
"Copf;": '\U00002102',
"Coproduct;": '\U00002210',
"CounterClockwiseContourIntegral;": '\U00002233',
"Cross;": '\U00002A2F',
"Cscr;": '\U0001D49E',
"Cup;": '\U000022D3',
"CupCap;": '\U0000224D',
"DD;": '\U00002145',
"DDotrahd;": '\U00002911',
"DJcy;": '\U00000402',
"DScy;": '\U00000405',
"DZcy;": '\U0000040F',
"Dagger;": '\U00002021',
"Darr;": '\U000021A1',
"Dashv;": '\U00002AE4',
"Dcaron;": '\U0000010E',
"Dcy;": '\U00000414',
"Del;": '\U00002207',
"Delta;": '\U00000394',
"Dfr;": '\U0001D507',
"DiacriticalAcute;": '\U000000B4',
"DiacriticalDot;": '\U000002D9',
"DiacriticalDoubleAcute;": '\U000002DD',
"DiacriticalGrave;": '\U00000060',
"DiacriticalTilde;": '\U000002DC',
"Diamond;": '\U000022C4',
"DifferentialD;": '\U00002146',
"Dopf;": '\U0001D53B',
"Dot;": '\U000000A8',
"DotDot;": '\U000020DC',
"DotEqual;": '\U00002250',
"DoubleContourIntegral;": '\U0000222F',
"DoubleDot;": '\U000000A8',
"DoubleDownArrow;": '\U000021D3',
"DoubleLeftArrow;": '\U000021D0',
"DoubleLeftRightArrow;": '\U000021D4',
"DoubleLeftTee;": '\U00002AE4',
"DoubleLongLeftArrow;": '\U000027F8',
"DoubleLongLeftRightArrow;": '\U000027FA',
"DoubleLongRightArrow;": '\U000027F9',
"DoubleRightArrow;": '\U000021D2',
"DoubleRightTee;": '\U000022A8',
"DoubleUpArrow;": '\U000021D1',
"DoubleUpDownArrow;": '\U000021D5',
"DoubleVerticalBar;": '\U00002225',
"DownArrow;": '\U00002193',
"DownArrowBar;": '\U00002913',
"DownArrowUpArrow;": '\U000021F5',
"DownBreve;": '\U00000311',
"DownLeftRightVector;": '\U00002950',
"DownLeftTeeVector;": '\U0000295E',
"DownLeftVector;": '\U000021BD',
"DownLeftVectorBar;": '\U00002956',
"DownRightTeeVector;": '\U0000295F',
"DownRightVector;": '\U000021C1',
"DownRightVectorBar;": '\U00002957',
"DownTee;": '\U000022A4',
"DownTeeArrow;": '\U000021A7',
"Downarrow;": '\U000021D3',
"Dscr;": '\U0001D49F',
"Dstrok;": '\U00000110',
"ENG;": '\U0000014A',
"ETH;": '\U000000D0',
"Eacute;": '\U000000C9',
"Ecaron;": '\U0000011A',
"Ecirc;": '\U000000CA',
"Ecy;": '\U0000042D',
"Edot;": '\U00000116',
"Efr;": '\U0001D508',
"Egrave;": '\U000000C8',
"Element;": '\U00002208',
"Emacr;": '\U00000112',
"EmptySmallSquare;": '\U000025FB',
"EmptyVerySmallSquare;": '\U000025AB',
"Eogon;": '\U00000118',
"Eopf;": '\U0001D53C',
"Epsilon;": '\U00000395',
"Equal;": '\U00002A75',
"EqualTilde;": '\U00002242',
"Equilibrium;": '\U000021CC',
"Escr;": '\U00002130',
"Esim;": '\U00002A73',
"Eta;": '\U00000397',
"Euml;": '\U000000CB',
"Exists;": '\U00002203',
"ExponentialE;": '\U00002147',
"Fcy;": '\U00000424',
"Ffr;": '\U0001D509',
"FilledSmallSquare;": '\U000025FC',
"FilledVerySmallSquare;": '\U000025AA',
"Fopf;": '\U0001D53D',
"ForAll;": '\U00002200',
"Fouriertrf;": '\U00002131',
"Fscr;": '\U00002131',
"GJcy;": '\U00000403',
"GT;": '\U0000003E',
"Gamma;": '\U00000393',
"Gammad;": '\U000003DC',
"Gbreve;": '\U0000011E',
"Gcedil;": '\U00000122',
"Gcirc;": '\U0000011C',
"Gcy;": '\U00000413',
"Gdot;": '\U00000120',
"Gfr;": '\U0001D50A',
"Gg;": '\U000022D9',
"Gopf;": '\U0001D53E',
"GreaterEqual;": '\U00002265',
"GreaterEqualLess;": '\U000022DB',
"GreaterFullEqual;": '\U00002267',
"GreaterGreater;": '\U00002AA2',
"GreaterLess;": '\U00002277',
"GreaterSlantEqual;": '\U00002A7E',
"GreaterTilde;": '\U00002273',
"Gscr;": '\U0001D4A2',
"Gt;": '\U0000226B',
"HARDcy;": '\U0000042A',
"Hacek;": '\U000002C7',
"Hat;": '\U0000005E',
"Hcirc;": '\U00000124',
"Hfr;": '\U0000210C',
"HilbertSpace;": '\U0000210B',
"Hopf;": '\U0000210D',
"HorizontalLine;": '\U00002500',
"Hscr;": '\U0000210B',
"Hstrok;": '\U00000126',
"HumpDownHump;": '\U0000224E',
"HumpEqual;": '\U0000224F',
"IEcy;": '\U00000415',
"IJlig;": '\U00000132',
"IOcy;": '\U00000401',
"Iacute;": '\U000000CD',
"Icirc;": '\U000000CE',
"Icy;": '\U00000418',
"Idot;": '\U00000130',
"Ifr;": '\U00002111',
"Igrave;": '\U000000CC',
"Im;": '\U00002111',
"Imacr;": '\U0000012A',
"ImaginaryI;": '\U00002148',
"Implies;": '\U000021D2',
"Int;": '\U0000222C',
"Integral;": '\U0000222B',
"Intersection;": '\U000022C2',
"InvisibleComma;": '\U00002063',
"InvisibleTimes;": '\U00002062',
"Iogon;": '\U0000012E',
"Iopf;": '\U0001D540',
"Iota;": '\U00000399',
"Iscr;": '\U00002110',
"Itilde;": '\U00000128',
"Iukcy;": '\U00000406',
"Iuml;": '\U000000CF',
"Jcirc;": '\U00000134',
"Jcy;": '\U00000419',
"Jfr;": '\U0001D50D',
"Jopf;": '\U0001D541',
"Jscr;": '\U0001D4A5',
"Jsercy;": '\U00000408',
"Jukcy;": '\U00000404',
"KHcy;": '\U00000425',
"KJcy;": '\U0000040C',
"Kappa;": '\U0000039A',
"Kcedil;": '\U00000136',
"Kcy;": '\U0000041A',
"Kfr;": '\U0001D50E',
"Kopf;": '\U0001D542',
"Kscr;": '\U0001D4A6',
"LJcy;": '\U00000409',
"LT;": '\U0000003C',
"Lacute;": '\U00000139',
"Lambda;": '\U0000039B',
"Lang;": '\U000027EA',
"Laplacetrf;": '\U00002112',
"Larr;": '\U0000219E',
"Lcaron;": '\U0000013D',
"Lcedil;": '\U0000013B',
"Lcy;": '\U0000041B',
"LeftAngleBracket;": '\U000027E8',
"LeftArrow;": '\U00002190',
"LeftArrowBar;": '\U000021E4',
"LeftArrowRightArrow;": '\U000021C6',
"LeftCeiling;": '\U00002308',
"LeftDoubleBracket;": '\U000027E6',
"LeftDownTeeVector;": '\U00002961',
"LeftDownVector;": '\U000021C3',
"LeftDownVectorBar;": '\U00002959',
"LeftFloor;": '\U0000230A',
"LeftRightArrow;": '\U00002194',
"LeftRightVector;": '\U0000294E',
"LeftTee;": '\U000022A3',
"LeftTeeArrow;": '\U000021A4',
"LeftTeeVector;": '\U0000295A',
"LeftTriangle;": '\U000022B2',
"LeftTriangleBar;": '\U000029CF',
"LeftTriangleEqual;": '\U000022B4',
"LeftUpDownVector;": '\U00002951',
"LeftUpTeeVector;": '\U00002960',
"LeftUpVector;": '\U000021BF',
"LeftUpVectorBar;": '\U00002958',
"LeftVector;": '\U000021BC',
"LeftVectorBar;": '\U00002952',
"Leftarrow;": '\U000021D0',
"Leftrightarrow;": '\U000021D4',
"LessEqualGreater;": '\U000022DA',
"LessFullEqual;": '\U00002266',
"LessGreater;": '\U00002276',
"LessLess;": '\U00002AA1',
"LessSlantEqual;": '\U00002A7D',
"LessTilde;": '\U00002272',
"Lfr;": '\U0001D50F',
"Ll;": '\U000022D8',
"Lleftarrow;": '\U000021DA',
"Lmidot;": '\U0000013F',
"LongLeftArrow;": '\U000027F5',
"LongLeftRightArrow;": '\U000027F7',
"LongRightArrow;": '\U000027F6',
"Longleftarrow;": '\U000027F8',
"Longleftrightarrow;": '\U000027FA',
"Longrightarrow;": '\U000027F9',
"Lopf;": '\U0001D543',
"LowerLeftArrow;": '\U00002199',
"LowerRightArrow;": '\U00002198',
"Lscr;": '\U00002112',
"Lsh;": '\U000021B0',
"Lstrok;": '\U00000141',
"Lt;": '\U0000226A',
"Map;": '\U00002905',
"Mcy;": '\U0000041C',
"MediumSpace;": '\U0000205F',
"Mellintrf;": '\U00002133',
"Mfr;": '\U0001D510',
"MinusPlus;": '\U00002213',
"Mopf;": '\U0001D544',
"Mscr;": '\U00002133',
"Mu;": '\U0000039C',
"NJcy;": '\U0000040A',
"Nacute;": '\U00000143',
"Ncaron;": '\U00000147',
"Ncedil;": '\U00000145',
"Ncy;": '\U0000041D',
"NegativeMediumSpace;": '\U0000200B',
"NegativeThickSpace;": '\U0000200B',
"NegativeThinSpace;": '\U0000200B',
"NegativeVeryThinSpace;": '\U0000200B',
"NestedGreaterGreater;": '\U0000226B',
"NestedLessLess;": '\U0000226A',
"NewLine;": '\U0000000A',
"Nfr;": '\U0001D511',
"NoBreak;": '\U00002060',
"NonBreakingSpace;": '\U000000A0',
"Nopf;": '\U00002115',
"Not;": '\U00002AEC',
"NotCongruent;": '\U00002262',
"NotCupCap;": '\U0000226D',
"NotDoubleVerticalBar;": '\U00002226',
"NotElement;": '\U00002209',
"NotEqual;": '\U00002260',
"NotExists;": '\U00002204',
"NotGreater;": '\U0000226F',
"NotGreaterEqual;": '\U00002271',
"NotGreaterLess;": '\U00002279',
"NotGreaterTilde;": '\U00002275',
"NotLeftTriangle;": '\U000022EA',
"NotLeftTriangleEqual;": '\U000022EC',
"NotLess;": '\U0000226E',
"NotLessEqual;": '\U00002270',
"NotLessGreater;": '\U00002278',
"NotLessTilde;": '\U00002274',
"NotPrecedes;": '\U00002280',
"NotPrecedesSlantEqual;": '\U000022E0',
"NotReverseElement;": '\U0000220C',
"NotRightTriangle;": '\U000022EB',
"NotRightTriangleEqual;": '\U000022ED',
"NotSquareSubsetEqual;": '\U000022E2',
"NotSquareSupersetEqual;": '\U000022E3',
"NotSubsetEqual;": '\U00002288',
"NotSucceeds;": '\U00002281',
"NotSucceedsSlantEqual;": '\U000022E1',
"NotSupersetEqual;": '\U00002289',
"NotTilde;": '\U00002241',
"NotTildeEqual;": '\U00002244',
"NotTildeFullEqual;": '\U00002247',
"NotTildeTilde;": '\U00002249',
"NotVerticalBar;": '\U00002224',
"Nscr;": '\U0001D4A9',
"Ntilde;": '\U000000D1',
"Nu;": '\U0000039D',
"OElig;": '\U00000152',
"Oacute;": '\U000000D3',
"Ocirc;": '\U000000D4',
"Ocy;": '\U0000041E',
"Odblac;": '\U00000150',
"Ofr;": '\U0001D512',
"Ograve;": '\U000000D2',
"Omacr;": '\U0000014C',
"Omega;": '\U000003A9',
"Omicron;": '\U0000039F',
"Oopf;": '\U0001D546',
"OpenCurlyDoubleQuote;": '\U0000201C',
"OpenCurlyQuote;": '\U00002018',
"Or;": '\U00002A54',
"Oscr;": '\U0001D4AA',
"Oslash;": '\U000000D8',
"Otilde;": '\U000000D5',
"Otimes;": '\U00002A37',
"Ouml;": '\U000000D6',
"OverBar;": '\U0000203E',
"OverBrace;": '\U000023DE',
"OverBracket;": '\U000023B4',
"OverParenthesis;": '\U000023DC',
"PartialD;": '\U00002202',
"Pcy;": '\U0000041F',
"Pfr;": '\U0001D513',
"Phi;": '\U000003A6',
"Pi;": '\U000003A0',
"PlusMinus;": '\U000000B1',
"Poincareplane;": '\U0000210C',
"Popf;": '\U00002119',
"Pr;": '\U00002ABB',
"Precedes;": '\U0000227A',
"PrecedesEqual;": '\U00002AAF',
"PrecedesSlantEqual;": '\U0000227C',
"PrecedesTilde;": '\U0000227E',
"Prime;": '\U00002033',
"Product;": '\U0000220F',
"Proportion;": '\U00002237',
"Proportional;": '\U0000221D',
"Pscr;": '\U0001D4AB',
"Psi;": '\U000003A8',
"QUOT;": '\U00000022',
"Qfr;": '\U0001D514',
"Qopf;": '\U0000211A',
"Qscr;": '\U0001D4AC',
"RBarr;": '\U00002910',
"REG;": '\U000000AE',
"Racute;": '\U00000154',
"Rang;": '\U000027EB',
"Rarr;": '\U000021A0',
"Rarrtl;": '\U00002916',
"Rcaron;": '\U00000158',
"Rcedil;": '\U00000156',
"Rcy;": '\U00000420',
"Re;": '\U0000211C',
"ReverseElement;": '\U0000220B',
"ReverseEquilibrium;": '\U000021CB',
"ReverseUpEquilibrium;": '\U0000296F',
"Rfr;": '\U0000211C',
"Rho;": '\U000003A1',
"RightAngleBracket;": '\U000027E9',
"RightArrow;": '\U00002192',
"RightArrowBar;": '\U000021E5',
"RightArrowLeftArrow;": '\U000021C4',
"RightCeiling;": '\U00002309',
"RightDoubleBracket;": '\U000027E7',
"RightDownTeeVector;": '\U0000295D',
"RightDownVector;": '\U000021C2',
"RightDownVectorBar;": '\U00002955',
"RightFloor;": '\U0000230B',
"RightTee;": '\U000022A2',
"RightTeeArrow;": '\U000021A6',
"RightTeeVector;": '\U0000295B',
"RightTriangle;": '\U000022B3',
"RightTriangleBar;": '\U000029D0',
"RightTriangleEqual;": '\U000022B5',
"RightUpDownVector;": '\U0000294F',
"RightUpTeeVector;": '\U0000295C',
"RightUpVector;": '\U000021BE',
"RightUpVectorBar;": '\U00002954',
"RightVector;": '\U000021C0',
"RightVectorBar;": '\U00002953',
"Rightarrow;": '\U000021D2',
"Ropf;": '\U0000211D',
"RoundImplies;": '\U00002970',
"Rrightarrow;": '\U000021DB',
"Rscr;": '\U0000211B',
"Rsh;": '\U000021B1',
"RuleDelayed;": '\U000029F4',
"SHCHcy;": '\U00000429',
"SHcy;": '\U00000428',
"SOFTcy;": '\U0000042C',
"Sacute;": '\U0000015A',
"Sc;": '\U00002ABC',
"Scaron;": '\U00000160',
"Scedil;": '\U0000015E',
"Scirc;": '\U0000015C',
"Scy;": '\U00000421',
"Sfr;": '\U0001D516',
"ShortDownArrow;": '\U00002193',
"ShortLeftArrow;": '\U00002190',
"ShortRightArrow;": '\U00002192',
"ShortUpArrow;": '\U00002191',
"Sigma;": '\U000003A3',
"SmallCircle;": '\U00002218',
"Sopf;": '\U0001D54A',
"Sqrt;": '\U0000221A',
"Square;": '\U000025A1',
"SquareIntersection;": '\U00002293',
"SquareSubset;": '\U0000228F',
"SquareSubsetEqual;": '\U00002291',
"SquareSuperset;": '\U00002290',
"SquareSupersetEqual;": '\U00002292',
"SquareUnion;": '\U00002294',
"Sscr;": '\U0001D4AE',
"Star;": '\U000022C6',
"Sub;": '\U000022D0',
"Subset;": '\U000022D0',
"SubsetEqual;": '\U00002286',
"Succeeds;": '\U0000227B',
"SucceedsEqual;": '\U00002AB0',
"SucceedsSlantEqual;": '\U0000227D',
"SucceedsTilde;": '\U0000227F',
"SuchThat;": '\U0000220B',
"Sum;": '\U00002211',
"Sup;": '\U000022D1',
"Superset;": '\U00002283',
"SupersetEqual;": '\U00002287',
"Supset;": '\U000022D1',
"THORN;": '\U000000DE',
"TRADE;": '\U00002122',
"TSHcy;": '\U0000040B',
"TScy;": '\U00000426',
"Tab;": '\U00000009',
"Tau;": '\U000003A4',
"Tcaron;": '\U00000164',
"Tcedil;": '\U00000162',
"Tcy;": '\U00000422',
"Tfr;": '\U0001D517',
"Therefore;": '\U00002234',
"Theta;": '\U00000398',
"ThinSpace;": '\U00002009',
"Tilde;": '\U0000223C',
"TildeEqual;": '\U00002243',
"TildeFullEqual;": '\U00002245',
"TildeTilde;": '\U00002248',
"Topf;": '\U0001D54B',
"TripleDot;": '\U000020DB',
"Tscr;": '\U0001D4AF',
"Tstrok;": '\U00000166',
"Uacute;": '\U000000DA',
"Uarr;": '\U0000219F',
"Uarrocir;": '\U00002949',
"Ubrcy;": '\U0000040E',
"Ubreve;": '\U0000016C',
"Ucirc;": '\U000000DB',
"Ucy;": '\U00000423',
"Udblac;": '\U00000170',
"Ufr;": '\U0001D518',
"Ugrave;": '\U000000D9',
"Umacr;": '\U0000016A',
"UnderBar;": '\U0000005F',
"UnderBrace;": '\U000023DF',
"UnderBracket;": '\U000023B5',
"UnderParenthesis;": '\U000023DD',
"Union;": '\U000022C3',
"UnionPlus;": '\U0000228E',
"Uogon;": '\U00000172',
"Uopf;": '\U0001D54C',
"UpArrow;": '\U00002191',
"UpArrowBar;": '\U00002912',
"UpArrowDownArrow;": '\U000021C5',
"UpDownArrow;": '\U00002195',
"UpEquilibrium;": '\U0000296E',
"UpTee;": '\U000022A5',
"UpTeeArrow;": '\U000021A5',
"Uparrow;": '\U000021D1',
"Updownarrow;": '\U000021D5',
"UpperLeftArrow;": '\U00002196',
"UpperRightArrow;": '\U00002197',
"Upsi;": '\U000003D2',
"Upsilon;": '\U000003A5',
"Uring;": '\U0000016E',
"Uscr;": '\U0001D4B0',
"Utilde;": '\U00000168',
"Uuml;": '\U000000DC',
"VDash;": '\U000022AB',
"Vbar;": '\U00002AEB',
"Vcy;": '\U00000412',
"Vdash;": '\U000022A9',
"Vdashl;": '\U00002AE6',
"Vee;": '\U000022C1',
"Verbar;": '\U00002016',
"Vert;": '\U00002016',
"VerticalBar;": '\U00002223',
"VerticalLine;": '\U0000007C',
"VerticalSeparator;": '\U00002758',
"VerticalTilde;": '\U00002240',
"VeryThinSpace;": '\U0000200A',
"Vfr;": '\U0001D519',
"Vopf;": '\U0001D54D',
"Vscr;": '\U0001D4B1',
"Vvdash;": '\U000022AA',
"Wcirc;": '\U00000174',
"Wedge;": '\U000022C0',
"Wfr;": '\U0001D51A',
"Wopf;": '\U0001D54E',
"Wscr;": '\U0001D4B2',
"Xfr;": '\U0001D51B',
"Xi;": '\U0000039E',
"Xopf;": '\U0001D54F',
"Xscr;": '\U0001D4B3',
"YAcy;": '\U0000042F',
"YIcy;": '\U00000407',
"YUcy;": '\U0000042E',
"Yacute;": '\U000000DD',
"Ycirc;": '\U00000176',
"Ycy;": '\U0000042B',
"Yfr;": '\U0001D51C',
"Yopf;": '\U0001D550',
"Yscr;": '\U0001D4B4',
"Yuml;": '\U00000178',
"ZHcy;": '\U00000416',
"Zacute;": '\U00000179',
"Zcaron;": '\U0000017D',
"Zcy;": '\U00000417',
"Zdot;": '\U0000017B',
"ZeroWidthSpace;": '\U0000200B',
"Zeta;": '\U00000396',
"Zfr;": '\U00002128',
"Zopf;": '\U00002124',
"Zscr;": '\U0001D4B5',
"aacute;": '\U000000E1',
"abreve;": '\U00000103',
"ac;": '\U0000223E',
"acd;": '\U0000223F',
"acirc;": '\U000000E2',
"acute;": '\U000000B4',
"acy;": '\U00000430',
"aelig;": '\U000000E6',
"af;": '\U00002061',
"afr;": '\U0001D51E',
"agrave;": '\U000000E0',
"alefsym;": '\U00002135',
"aleph;": '\U00002135',
"alpha;": '\U000003B1',
"amacr;": '\U00000101',
"amalg;": '\U00002A3F',
"amp;": '\U00000026',
"and;": '\U00002227',
"andand;": '\U00002A55',
"andd;": '\U00002A5C',
"andslope;": '\U00002A58',
"andv;": '\U00002A5A',
"ang;": '\U00002220',
"ange;": '\U000029A4',
"angle;": '\U00002220',
"angmsd;": '\U00002221',
"angmsdaa;": '\U000029A8',
"angmsdab;": '\U000029A9',
"angmsdac;": '\U000029AA',
"angmsdad;": '\U000029AB',
"angmsdae;": '\U000029AC',
"angmsdaf;": '\U000029AD',
"angmsdag;": '\U000029AE',
"angmsdah;": '\U000029AF',
"angrt;": '\U0000221F',
"angrtvb;": '\U000022BE',
"angrtvbd;": '\U0000299D',
"angsph;": '\U00002222',
"angst;": '\U000000C5',
"angzarr;": '\U0000237C',
"aogon;": '\U00000105',
"aopf;": '\U0001D552',
"ap;": '\U00002248',
"apE;": '\U00002A70',
"apacir;": '\U00002A6F',
"ape;": '\U0000224A',
"apid;": '\U0000224B',
"apos;": '\U00000027',
"approx;": '\U00002248',
"approxeq;": '\U0000224A',
"aring;": '\U000000E5',
"ascr;": '\U0001D4B6',
"ast;": '\U0000002A',
"asymp;": '\U00002248',
"asympeq;": '\U0000224D',
"atilde;": '\U000000E3',
"auml;": '\U000000E4',
"awconint;": '\U00002233',
"awint;": '\U00002A11',
"bNot;": '\U00002AED',
"backcong;": '\U0000224C',
"backepsilon;": '\U000003F6',
"backprime;": '\U00002035',
"backsim;": '\U0000223D',
"backsimeq;": '\U000022CD',
"barvee;": '\U000022BD',
"barwed;": '\U00002305',
"barwedge;": '\U00002305',
"bbrk;": '\U000023B5',
"bbrktbrk;": '\U000023B6',
"bcong;": '\U0000224C',
"bcy;": '\U00000431',
"bdquo;": '\U0000201E',
"becaus;": '\U00002235',
"because;": '\U00002235',
"bemptyv;": '\U000029B0',
"bepsi;": '\U000003F6',
"bernou;": '\U0000212C',
"beta;": '\U000003B2',
"beth;": '\U00002136',
"between;": '\U0000226C',
"bfr;": '\U0001D51F',
"bigcap;": '\U000022C2',
"bigcirc;": '\U000025EF',
"bigcup;": '\U000022C3',
"bigodot;": '\U00002A00',
"bigoplus;": '\U00002A01',
"bigotimes;": '\U00002A02',
"bigsqcup;": '\U00002A06',
"bigstar;": '\U00002605',
"bigtriangledown;": '\U000025BD',
"bigtriangleup;": '\U000025B3',
"biguplus;": '\U00002A04',
"bigvee;": '\U000022C1',
"bigwedge;": '\U000022C0',
"bkarow;": '\U0000290D',
"blacklozenge;": '\U000029EB',
"blacksquare;": '\U000025AA',
"blacktriangle;": '\U000025B4',
"blacktriangledown;": '\U000025BE',
"blacktriangleleft;": '\U000025C2',
"blacktriangleright;": '\U000025B8',
"blank;": '\U00002423',
"blk12;": '\U00002592',
"blk14;": '\U00002591',
"blk34;": '\U00002593',
"block;": '\U00002588',
"bnot;": '\U00002310',
"bopf;": '\U0001D553',
"bot;": '\U000022A5',
"bottom;": '\U000022A5',
"bowtie;": '\U000022C8',
"boxDL;": '\U00002557',
"boxDR;": '\U00002554',
"boxDl;": '\U00002556',
"boxDr;": '\U00002553',
"boxH;": '\U00002550',
"boxHD;": '\U00002566',
"boxHU;": '\U00002569',
"boxHd;": '\U00002564',
"boxHu;": '\U00002567',
"boxUL;": '\U0000255D',
"boxUR;": '\U0000255A',
"boxUl;": '\U0000255C',
"boxUr;": '\U00002559',
"boxV;": '\U00002551',
"boxVH;": '\U0000256C',
"boxVL;": '\U00002563',
"boxVR;": '\U00002560',
"boxVh;": '\U0000256B',
"boxVl;": '\U00002562',
"boxVr;": '\U0000255F',
"boxbox;": '\U000029C9',
"boxdL;": '\U00002555',
"boxdR;": '\U00002552',
"boxdl;": '\U00002510',
"boxdr;": '\U0000250C',
"boxh;": '\U00002500',
"boxhD;": '\U00002565',
"boxhU;": '\U00002568',
"boxhd;": '\U0000252C',
"boxhu;": '\U00002534',
"boxminus;": '\U0000229F',
"boxplus;": '\U0000229E',
"boxtimes;": '\U000022A0',
"boxuL;": '\U0000255B',
"boxuR;": '\U00002558',
"boxul;": '\U00002518',
"boxur;": '\U00002514',
"boxv;": '\U00002502',
"boxvH;": '\U0000256A',
"boxvL;": '\U00002561',
"boxvR;": '\U0000255E',
"boxvh;": '\U0000253C',
"boxvl;": '\U00002524',
"boxvr;": '\U0000251C',
"bprime;": '\U00002035',
"breve;": '\U000002D8',
"brvbar;": '\U000000A6',
"bscr;": '\U0001D4B7',
"bsemi;": '\U0000204F',
"bsim;": '\U0000223D',
"bsime;": '\U000022CD',
"bsol;": '\U0000005C',
"bsolb;": '\U000029C5',
"bsolhsub;": '\U000027C8',
"bull;": '\U00002022',
"bullet;": '\U00002022',
"bump;": '\U0000224E',
"bumpE;": '\U00002AAE',
"bumpe;": '\U0000224F',
"bumpeq;": '\U0000224F',
"cacute;": '\U00000107',
"cap;": '\U00002229',
"capand;": '\U00002A44',
"capbrcup;": '\U00002A49',
"capcap;": '\U00002A4B',
"capcup;": '\U00002A47',
"capdot;": '\U00002A40',
"caret;": '\U00002041',
"caron;": '\U000002C7',
"ccaps;": '\U00002A4D',
"ccaron;": '\U0000010D',
"ccedil;": '\U000000E7',
"ccirc;": '\U00000109',
"ccups;": '\U00002A4C',
"ccupssm;": '\U00002A50',
"cdot;": '\U0000010B',
"cedil;": '\U000000B8',
"cemptyv;": '\U000029B2',
"cent;": '\U000000A2',
"centerdot;": '\U000000B7',
"cfr;": '\U0001D520',
"chcy;": '\U00000447',
"check;": '\U00002713',
"checkmark;": '\U00002713',
"chi;": '\U000003C7',
"cir;": '\U000025CB',
"cirE;": '\U000029C3',
"circ;": '\U000002C6',
"circeq;": '\U00002257',
"circlearrowleft;": '\U000021BA',
"circlearrowright;": '\U000021BB',
"circledR;": '\U000000AE',
"circledS;": '\U000024C8',
"circledast;": '\U0000229B',
"circledcirc;": '\U0000229A',
"circleddash;": '\U0000229D',
"cire;": '\U00002257',
"cirfnint;": '\U00002A10',
"cirmid;": '\U00002AEF',
"cirscir;": '\U000029C2',
"clubs;": '\U00002663',
"clubsuit;": '\U00002663',
"colon;": '\U0000003A',
"colone;": '\U00002254',
"coloneq;": '\U00002254',
"comma;": '\U0000002C',
"commat;": '\U00000040',
"comp;": '\U00002201',
"compfn;": '\U00002218',
"complement;": '\U00002201',
"complexes;": '\U00002102',
"cong;": '\U00002245',
"congdot;": '\U00002A6D',
"conint;": '\U0000222E',
"copf;": '\U0001D554',
"coprod;": '\U00002210',
"copy;": '\U000000A9',
"copysr;": '\U00002117',
"crarr;": '\U000021B5',
"cross;": '\U00002717',
"cscr;": '\U0001D4B8',
"csub;": '\U00002ACF',
"csube;": '\U00002AD1',
"csup;": '\U00002AD0',
"csupe;": '\U00002AD2',
"ctdot;": '\U000022EF',
"cudarrl;": '\U00002938',
"cudarrr;": '\U00002935',
"cuepr;": '\U000022DE',
"cuesc;": '\U000022DF',
"cularr;": '\U000021B6',
"cularrp;": '\U0000293D',
"cup;": '\U0000222A',
"cupbrcap;": '\U00002A48',
"cupcap;": '\U00002A46',
"cupcup;": '\U00002A4A',
"cupdot;": '\U0000228D',
"cupor;": '\U00002A45',
"curarr;": '\U000021B7',
"curarrm;": '\U0000293C',
"curlyeqprec;": '\U000022DE',
"curlyeqsucc;": '\U000022DF',
"curlyvee;": '\U000022CE',
"curlywedge;": '\U000022CF',
"curren;": '\U000000A4',
"curvearrowleft;": '\U000021B6',
"curvearrowright;": '\U000021B7',
"cuvee;": '\U000022CE',
"cuwed;": '\U000022CF',
"cwconint;": '\U00002232',
"cwint;": '\U00002231',
"cylcty;": '\U0000232D',
"dArr;": '\U000021D3',
"dHar;": '\U00002965',
"dagger;": '\U00002020',
"daleth;": '\U00002138',
"darr;": '\U00002193',
"dash;": '\U00002010',
"dashv;": '\U000022A3',
"dbkarow;": '\U0000290F',
"dblac;": '\U000002DD',
"dcaron;": '\U0000010F',
"dcy;": '\U00000434',
"dd;": '\U00002146',
"ddagger;": '\U00002021',
"ddarr;": '\U000021CA',
"ddotseq;": '\U00002A77',
"deg;": '\U000000B0',
"delta;": '\U000003B4',
"demptyv;": '\U000029B1',
"dfisht;": '\U0000297F',
"dfr;": '\U0001D521',
"dharl;": '\U000021C3',
"dharr;": '\U000021C2',
"diam;": '\U000022C4',
"diamond;": '\U000022C4',
"diamondsuit;": '\U00002666',
"diams;": '\U00002666',
"die;": '\U000000A8',
"digamma;": '\U000003DD',
"disin;": '\U000022F2',
"div;": '\U000000F7',
"divide;": '\U000000F7',
"divideontimes;": '\U000022C7',
"divonx;": '\U000022C7',
"djcy;": '\U00000452',
"dlcorn;": '\U0000231E',
"dlcrop;": '\U0000230D',
"dollar;": '\U00000024',
"dopf;": '\U0001D555',
"dot;": '\U000002D9',
"doteq;": '\U00002250',
"doteqdot;": '\U00002251',
"dotminus;": '\U00002238',
"dotplus;": '\U00002214',
"dotsquare;": '\U000022A1',
"doublebarwedge;": '\U00002306',
"downarrow;": '\U00002193',
"downdownarrows;": '\U000021CA',
"downharpoonleft;": '\U000021C3',
"downharpoonright;": '\U000021C2',
"drbkarow;": '\U00002910',
"drcorn;": '\U0000231F',
"drcrop;": '\U0000230C',
"dscr;": '\U0001D4B9',
"dscy;": '\U00000455',
"dsol;": '\U000029F6',
"dstrok;": '\U00000111',
"dtdot;": '\U000022F1',
"dtri;": '\U000025BF',
"dtrif;": '\U000025BE',
"duarr;": '\U000021F5',
"duhar;": '\U0000296F',
"dwangle;": '\U000029A6',
"dzcy;": '\U0000045F',
"dzigrarr;": '\U000027FF',
"eDDot;": '\U00002A77',
"eDot;": '\U00002251',
"eacute;": '\U000000E9',
"easter;": '\U00002A6E',
"ecaron;": '\U0000011B',
"ecir;": '\U00002256',
"ecirc;": '\U000000EA',
"ecolon;": '\U00002255',
"ecy;": '\U0000044D',
"edot;": '\U00000117',
"ee;": '\U00002147',
"efDot;": '\U00002252',
"efr;": '\U0001D522',
"eg;": '\U00002A9A',
"egrave;": '\U000000E8',
"egs;": '\U00002A96',
"egsdot;": '\U00002A98',
"el;": '\U00002A99',
"elinters;": '\U000023E7',
"ell;": '\U00002113',
"els;": '\U00002A95',
"elsdot;": '\U00002A97',
"emacr;": '\U00000113',
"empty;": '\U00002205',
"emptyset;": '\U00002205',
"emptyv;": '\U00002205',
"emsp;": '\U00002003',
"emsp13;": '\U00002004',
"emsp14;": '\U00002005',
"eng;": '\U0000014B',
"ensp;": '\U00002002',
"eogon;": '\U00000119',
"eopf;": '\U0001D556',
"epar;": '\U000022D5',
"eparsl;": '\U000029E3',
"eplus;": '\U00002A71',
"epsi;": '\U000003B5',
"epsilon;": '\U000003B5',
"epsiv;": '\U000003F5',
"eqcirc;": '\U00002256',
"eqcolon;": '\U00002255',
"eqsim;": '\U00002242',
"eqslantgtr;": '\U00002A96',
"eqslantless;": '\U00002A95',
"equals;": '\U0000003D',
"equest;": '\U0000225F',
"equiv;": '\U00002261',
"equivDD;": '\U00002A78',
"eqvparsl;": '\U000029E5',
"erDot;": '\U00002253',
"erarr;": '\U00002971',
"escr;": '\U0000212F',
"esdot;": '\U00002250',
"esim;": '\U00002242',
"eta;": '\U000003B7',
"eth;": '\U000000F0',
"euml;": '\U000000EB',
"euro;": '\U000020AC',
"excl;": '\U00000021',
"exist;": '\U00002203',
"expectation;": '\U00002130',
"exponentiale;": '\U00002147',
"fallingdotseq;": '\U00002252',
"fcy;": '\U00000444',
"female;": '\U00002640',
"ffilig;": '\U0000FB03',
"fflig;": '\U0000FB00',
"ffllig;": '\U0000FB04',
"ffr;": '\U0001D523',
"filig;": '\U0000FB01',
"flat;": '\U0000266D',
"fllig;": '\U0000FB02',
"fltns;": '\U000025B1',
"fnof;": '\U00000192',
"fopf;": '\U0001D557',
"forall;": '\U00002200',
"fork;": '\U000022D4',
"forkv;": '\U00002AD9',
"fpartint;": '\U00002A0D',
"frac12;": '\U000000BD',
"frac13;": '\U00002153',
"frac14;": '\U000000BC',
"frac15;": '\U00002155',
"frac16;": '\U00002159',
"frac18;": '\U0000215B',
"frac23;": '\U00002154',
"frac25;": '\U00002156',
"frac34;": '\U000000BE',
"frac35;": '\U00002157',
"frac38;": '\U0000215C',
"frac45;": '\U00002158',
"frac56;": '\U0000215A',
"frac58;": '\U0000215D',
"frac78;": '\U0000215E',
"frasl;": '\U00002044',
"frown;": '\U00002322',
"fscr;": '\U0001D4BB',
"gE;": '\U00002267',
"gEl;": '\U00002A8C',
"gacute;": '\U000001F5',
"gamma;": '\U000003B3',
"gammad;": '\U000003DD',
"gap;": '\U00002A86',
"gbreve;": '\U0000011F',
"gcirc;": '\U0000011D',
"gcy;": '\U00000433',
"gdot;": '\U00000121',
"ge;": '\U00002265',
"gel;": '\U000022DB',
"geq;": '\U00002265',
"geqq;": '\U00002267',
"geqslant;": '\U00002A7E',
"ges;": '\U00002A7E',
"gescc;": '\U00002AA9',
"gesdot;": '\U00002A80',
"gesdoto;": '\U00002A82',
"gesdotol;": '\U00002A84',
"gesles;": '\U00002A94',
"gfr;": '\U0001D524',
"gg;": '\U0000226B',
"ggg;": '\U000022D9',
"gimel;": '\U00002137',
"gjcy;": '\U00000453',
"gl;": '\U00002277',
"glE;": '\U00002A92',
"gla;": '\U00002AA5',
"glj;": '\U00002AA4',
"gnE;": '\U00002269',
"gnap;": '\U00002A8A',
"gnapprox;": '\U00002A8A',
"gne;": '\U00002A88',
"gneq;": '\U00002A88',
"gneqq;": '\U00002269',
"gnsim;": '\U000022E7',
"gopf;": '\U0001D558',
"grave;": '\U00000060',
"gscr;": '\U0000210A',
"gsim;": '\U00002273',
"gsime;": '\U00002A8E',
"gsiml;": '\U00002A90',
"gt;": '\U0000003E',
"gtcc;": '\U00002AA7',
"gtcir;": '\U00002A7A',
"gtdot;": '\U000022D7',
"gtlPar;": '\U00002995',
"gtquest;": '\U00002A7C',
"gtrapprox;": '\U00002A86',
"gtrarr;": '\U00002978',
"gtrdot;": '\U000022D7',
"gtreqless;": '\U000022DB',
"gtreqqless;": '\U00002A8C',
"gtrless;": '\U00002277',
"gtrsim;": '\U00002273',
"hArr;": '\U000021D4',
"hairsp;": '\U0000200A',
"half;": '\U000000BD',
"hamilt;": '\U0000210B',
"hardcy;": '\U0000044A',
"harr;": '\U00002194',
"harrcir;": '\U00002948',
"harrw;": '\U000021AD',
"hbar;": '\U0000210F',
"hcirc;": '\U00000125',
"hearts;": '\U00002665',
"heartsuit;": '\U00002665',
"hellip;": '\U00002026',
"hercon;": '\U000022B9',
"hfr;": '\U0001D525',
"hksearow;": '\U00002925',
"hkswarow;": '\U00002926',
"hoarr;": '\U000021FF',
"homtht;": '\U0000223B',
"hookleftarrow;": '\U000021A9',
"hookrightarrow;": '\U000021AA',
"hopf;": '\U0001D559',
"horbar;": '\U00002015',
"hscr;": '\U0001D4BD',
"hslash;": '\U0000210F',
"hstrok;": '\U00000127',
"hybull;": '\U00002043',
"hyphen;": '\U00002010',
"iacute;": '\U000000ED',
"ic;": '\U00002063',
"icirc;": '\U000000EE',
"icy;": '\U00000438',
"iecy;": '\U00000435',
"iexcl;": '\U000000A1',
"iff;": '\U000021D4',
"ifr;": '\U0001D526',
"igrave;": '\U000000EC',
"ii;": '\U00002148',
"iiiint;": '\U00002A0C',
"iiint;": '\U0000222D',
"iinfin;": '\U000029DC',
"iiota;": '\U00002129',
"ijlig;": '\U00000133',
"imacr;": '\U0000012B',
"image;": '\U00002111',
"imagline;": '\U00002110',
"imagpart;": '\U00002111',
"imath;": '\U00000131',
"imof;": '\U000022B7',
"imped;": '\U000001B5',
"in;": '\U00002208',
"incare;": '\U00002105',
"infin;": '\U0000221E',
"infintie;": '\U000029DD',
"inodot;": '\U00000131',
"int;": '\U0000222B',
"intcal;": '\U000022BA',
"integers;": '\U00002124',
"intercal;": '\U000022BA',
"intlarhk;": '\U00002A17',
"intprod;": '\U00002A3C',
"iocy;": '\U00000451',
"iogon;": '\U0000012F',
"iopf;": '\U0001D55A',
"iota;": '\U000003B9',
"iprod;": '\U00002A3C',
"iquest;": '\U000000BF',
"iscr;": '\U0001D4BE',
"isin;": '\U00002208',
"isinE;": '\U000022F9',
"isindot;": '\U000022F5',
"isins;": '\U000022F4',
"isinsv;": '\U000022F3',
"isinv;": '\U00002208',
"it;": '\U00002062',
"itilde;": '\U00000129',
"iukcy;": '\U00000456',
"iuml;": '\U000000EF',
"jcirc;": '\U00000135',
"jcy;": '\U00000439',
"jfr;": '\U0001D527',
"jmath;": '\U00000237',
"jopf;": '\U0001D55B',
"jscr;": '\U0001D4BF',
"jsercy;": '\U00000458',
"jukcy;": '\U00000454',
"kappa;": '\U000003BA',
"kappav;": '\U000003F0',
"kcedil;": '\U00000137',
"kcy;": '\U0000043A',
"kfr;": '\U0001D528',
"kgreen;": '\U00000138',
"khcy;": '\U00000445',
"kjcy;": '\U0000045C',
"kopf;": '\U0001D55C',
"kscr;": '\U0001D4C0',
"lAarr;": '\U000021DA',
"lArr;": '\U000021D0',
"lAtail;": '\U0000291B',
"lBarr;": '\U0000290E',
"lE;": '\U00002266',
"lEg;": '\U00002A8B',
"lHar;": '\U00002962',
"lacute;": '\U0000013A',
"laemptyv;": '\U000029B4',
"lagran;": '\U00002112',
"lambda;": '\U000003BB',
"lang;": '\U000027E8',
"langd;": '\U00002991',
"langle;": '\U000027E8',
"lap;": '\U00002A85',
"laquo;": '\U000000AB',
"larr;": '\U00002190',
"larrb;": '\U000021E4',
"larrbfs;": '\U0000291F',
"larrfs;": '\U0000291D',
"larrhk;": '\U000021A9',
"larrlp;": '\U000021AB',
"larrpl;": '\U00002939',
"larrsim;": '\U00002973',
"larrtl;": '\U000021A2',
"lat;": '\U00002AAB',
"latail;": '\U00002919',
"late;": '\U00002AAD',
"lbarr;": '\U0000290C',
"lbbrk;": '\U00002772',
"lbrace;": '\U0000007B',
"lbrack;": '\U0000005B',
"lbrke;": '\U0000298B',
"lbrksld;": '\U0000298F',
"lbrkslu;": '\U0000298D',
"lcaron;": '\U0000013E',
"lcedil;": '\U0000013C',
"lceil;": '\U00002308',
"lcub;": '\U0000007B',
"lcy;": '\U0000043B',
"ldca;": '\U00002936',
"ldquo;": '\U0000201C',
"ldquor;": '\U0000201E',
"ldrdhar;": '\U00002967',
"ldrushar;": '\U0000294B',
"ldsh;": '\U000021B2',
"le;": '\U00002264',
"leftarrow;": '\U00002190',
"leftarrowtail;": '\U000021A2',
"leftharpoondown;": '\U000021BD',
"leftharpoonup;": '\U000021BC',
"leftleftarrows;": '\U000021C7',
"leftrightarrow;": '\U00002194',
"leftrightarrows;": '\U000021C6',
"leftrightharpoons;": '\U000021CB',
"leftrightsquigarrow;": '\U000021AD',
"leftthreetimes;": '\U000022CB',
"leg;": '\U000022DA',
"leq;": '\U00002264',
"leqq;": '\U00002266',
"leqslant;": '\U00002A7D',
"les;": '\U00002A7D',
"lescc;": '\U00002AA8',
"lesdot;": '\U00002A7F',
"lesdoto;": '\U00002A81',
"lesdotor;": '\U00002A83',
"lesges;": '\U00002A93',
"lessapprox;": '\U00002A85',
"lessdot;": '\U000022D6',
"lesseqgtr;": '\U000022DA',
"lesseqqgtr;": '\U00002A8B',
"lessgtr;": '\U00002276',
"lesssim;": '\U00002272',
"lfisht;": '\U0000297C',
"lfloor;": '\U0000230A',
"lfr;": '\U0001D529',
"lg;": '\U00002276',
"lgE;": '\U00002A91',
"lhard;": '\U000021BD',
"lharu;": '\U000021BC',
"lharul;": '\U0000296A',
"lhblk;": '\U00002584',
"ljcy;": '\U00000459',
"ll;": '\U0000226A',
"llarr;": '\U000021C7',
"llcorner;": '\U0000231E',
"llhard;": '\U0000296B',
"lltri;": '\U000025FA',
"lmidot;": '\U00000140',
"lmoust;": '\U000023B0',
"lmoustache;": '\U000023B0',
"lnE;": '\U00002268',
"lnap;": '\U00002A89',
"lnapprox;": '\U00002A89',
"lne;": '\U00002A87',
"lneq;": '\U00002A87',
"lneqq;": '\U00002268',
"lnsim;": '\U000022E6',
"loang;": '\U000027EC',
"loarr;": '\U000021FD',
"lobrk;": '\U000027E6',
"longleftarrow;": '\U000027F5',
"longleftrightarrow;": '\U000027F7',
"longmapsto;": '\U000027FC',
"longrightarrow;": '\U000027F6',
"looparrowleft;": '\U000021AB',
"looparrowright;": '\U000021AC',
"lopar;": '\U00002985',
"lopf;": '\U0001D55D',
"loplus;": '\U00002A2D',
"lotimes;": '\U00002A34',
"lowast;": '\U00002217',
"lowbar;": '\U0000005F',
"loz;": '\U000025CA',
"lozenge;": '\U000025CA',
"lozf;": '\U000029EB',
"lpar;": '\U00000028',
"lparlt;": '\U00002993',
"lrarr;": '\U000021C6',
"lrcorner;": '\U0000231F',
"lrhar;": '\U000021CB',
"lrhard;": '\U0000296D',
"lrm;": '\U0000200E',
"lrtri;": '\U000022BF',
"lsaquo;": '\U00002039',
"lscr;": '\U0001D4C1',
"lsh;": '\U000021B0',
"lsim;": '\U00002272',
"lsime;": '\U00002A8D',
"lsimg;": '\U00002A8F',
"lsqb;": '\U0000005B',
"lsquo;": '\U00002018',
"lsquor;": '\U0000201A',
"lstrok;": '\U00000142',
"lt;": '\U0000003C',
"ltcc;": '\U00002AA6',
"ltcir;": '\U00002A79',
"ltdot;": '\U000022D6',
"lthree;": '\U000022CB',
"ltimes;": '\U000022C9',
"ltlarr;": '\U00002976',
"ltquest;": '\U00002A7B',
"ltrPar;": '\U00002996',
"ltri;": '\U000025C3',
"ltrie;": '\U000022B4',
"ltrif;": '\U000025C2',
"lurdshar;": '\U0000294A',
"luruhar;": '\U00002966',
"mDDot;": '\U0000223A',
"macr;": '\U000000AF',
"male;": '\U00002642',
"malt;": '\U00002720',
"maltese;": '\U00002720',
"map;": '\U000021A6',
"mapsto;": '\U000021A6',
"mapstodown;": '\U000021A7',
"mapstoleft;": '\U000021A4',
"mapstoup;": '\U000021A5',
"marker;": '\U000025AE',
"mcomma;": '\U00002A29',
"mcy;": '\U0000043C',
"mdash;": '\U00002014',
"measuredangle;": '\U00002221',
"mfr;": '\U0001D52A',
"mho;": '\U00002127',
"micro;": '\U000000B5',
"mid;": '\U00002223',
"midast;": '\U0000002A',
"midcir;": '\U00002AF0',
"middot;": '\U000000B7',
"minus;": '\U00002212',
"minusb;": '\U0000229F',
"minusd;": '\U00002238',
"minusdu;": '\U00002A2A',
"mlcp;": '\U00002ADB',
"mldr;": '\U00002026',
"mnplus;": '\U00002213',
"models;": '\U000022A7',
"mopf;": '\U0001D55E',
"mp;": '\U00002213',
"mscr;": '\U0001D4C2',
"mstpos;": '\U0000223E',
"mu;": '\U000003BC',
"multimap;": '\U000022B8',
"mumap;": '\U000022B8',
"nLeftarrow;": '\U000021CD',
"nLeftrightarrow;": '\U000021CE',
"nRightarrow;": '\U000021CF',
"nVDash;": '\U000022AF',
"nVdash;": '\U000022AE',
"nabla;": '\U00002207',
"nacute;": '\U00000144',
"nap;": '\U00002249',
"napos;": '\U00000149',
"napprox;": '\U00002249',
"natur;": '\U0000266E',
"natural;": '\U0000266E',
"naturals;": '\U00002115',
"nbsp;": '\U000000A0',
"ncap;": '\U00002A43',
"ncaron;": '\U00000148',
"ncedil;": '\U00000146',
"ncong;": '\U00002247',
"ncup;": '\U00002A42',
"ncy;": '\U0000043D',
"ndash;": '\U00002013',
"ne;": '\U00002260',
"neArr;": '\U000021D7',
"nearhk;": '\U00002924',
"nearr;": '\U00002197',
"nearrow;": '\U00002197',
"nequiv;": '\U00002262',
"nesear;": '\U00002928',
"nexist;": '\U00002204',
"nexists;": '\U00002204',
"nfr;": '\U0001D52B',
"nge;": '\U00002271',
"ngeq;": '\U00002271',
"ngsim;": '\U00002275',
"ngt;": '\U0000226F',
"ngtr;": '\U0000226F',
"nhArr;": '\U000021CE',
"nharr;": '\U000021AE',
"nhpar;": '\U00002AF2',
"ni;": '\U0000220B',
"nis;": '\U000022FC',
"nisd;": '\U000022FA',
"niv;": '\U0000220B',
"njcy;": '\U0000045A',
"nlArr;": '\U000021CD',
"nlarr;": '\U0000219A',
"nldr;": '\U00002025',
"nle;": '\U00002270',
"nleftarrow;": '\U0000219A',
"nleftrightarrow;": '\U000021AE',
"nleq;": '\U00002270',
"nless;": '\U0000226E',
"nlsim;": '\U00002274',
"nlt;": '\U0000226E',
"nltri;": '\U000022EA',
"nltrie;": '\U000022EC',
"nmid;": '\U00002224',
"nopf;": '\U0001D55F',
"not;": '\U000000AC',
"notin;": '\U00002209',
"notinva;": '\U00002209',
"notinvb;": '\U000022F7',
"notinvc;": '\U000022F6',
"notni;": '\U0000220C',
"notniva;": '\U0000220C',
"notnivb;": '\U000022FE',
"notnivc;": '\U000022FD',
"npar;": '\U00002226',
"nparallel;": '\U00002226',
"npolint;": '\U00002A14',
"npr;": '\U00002280',
"nprcue;": '\U000022E0',
"nprec;": '\U00002280',
"nrArr;": '\U000021CF',
"nrarr;": '\U0000219B',
"nrightarrow;": '\U0000219B',
"nrtri;": '\U000022EB',
"nrtrie;": '\U000022ED',
"nsc;": '\U00002281',
"nsccue;": '\U000022E1',
"nscr;": '\U0001D4C3',
"nshortmid;": '\U00002224',
"nshortparallel;": '\U00002226',
"nsim;": '\U00002241',
"nsime;": '\U00002244',
"nsimeq;": '\U00002244',
"nsmid;": '\U00002224',
"nspar;": '\U00002226',
"nsqsube;": '\U000022E2',
"nsqsupe;": '\U000022E3',
"nsub;": '\U00002284',
"nsube;": '\U00002288',
"nsubseteq;": '\U00002288',
"nsucc;": '\U00002281',
"nsup;": '\U00002285',
"nsupe;": '\U00002289',
"nsupseteq;": '\U00002289',
"ntgl;": '\U00002279',
"ntilde;": '\U000000F1',
"ntlg;": '\U00002278',
"ntriangleleft;": '\U000022EA',
"ntrianglelefteq;": '\U000022EC',
"ntriangleright;": '\U000022EB',
"ntrianglerighteq;": '\U000022ED',
"nu;": '\U000003BD',
"num;": '\U00000023',
"numero;": '\U00002116',
"numsp;": '\U00002007',
"nvDash;": '\U000022AD',
"nvHarr;": '\U00002904',
"nvdash;": '\U000022AC',
"nvinfin;": '\U000029DE',
"nvlArr;": '\U00002902',
"nvrArr;": '\U00002903',
"nwArr;": '\U000021D6',
"nwarhk;": '\U00002923',
"nwarr;": '\U00002196',
"nwarrow;": '\U00002196',
"nwnear;": '\U00002927',
"oS;": '\U000024C8',
"oacute;": '\U000000F3',
"oast;": '\U0000229B',
"ocir;": '\U0000229A',
"ocirc;": '\U000000F4',
"ocy;": '\U0000043E',
"odash;": '\U0000229D',
"odblac;": '\U00000151',
"odiv;": '\U00002A38',
"odot;": '\U00002299',
"odsold;": '\U000029BC',
"oelig;": '\U00000153',
"ofcir;": '\U000029BF',
"ofr;": '\U0001D52C',
"ogon;": '\U000002DB',
"ograve;": '\U000000F2',
"ogt;": '\U000029C1',
"ohbar;": '\U000029B5',
"ohm;": '\U000003A9',
"oint;": '\U0000222E',
"olarr;": '\U000021BA',
"olcir;": '\U000029BE',
"olcross;": '\U000029BB',
"oline;": '\U0000203E',
"olt;": '\U000029C0',
"omacr;": '\U0000014D',
"omega;": '\U000003C9',
"omicron;": '\U000003BF',
"omid;": '\U000029B6',
"ominus;": '\U00002296',
"oopf;": '\U0001D560',
"opar;": '\U000029B7',
"operp;": '\U000029B9',
"oplus;": '\U00002295',
"or;": '\U00002228',
"orarr;": '\U000021BB',
"ord;": '\U00002A5D',
"order;": '\U00002134',
"orderof;": '\U00002134',
"ordf;": '\U000000AA',
"ordm;": '\U000000BA',
"origof;": '\U000022B6',
"oror;": '\U00002A56',
"orslope;": '\U00002A57',
"orv;": '\U00002A5B',
"oscr;": '\U00002134',
"oslash;": '\U000000F8',
"osol;": '\U00002298',
"otilde;": '\U000000F5',
"otimes;": '\U00002297',
"otimesas;": '\U00002A36',
"ouml;": '\U000000F6',
"ovbar;": '\U0000233D',
"par;": '\U00002225',
"para;": '\U000000B6',
"parallel;": '\U00002225',
"parsim;": '\U00002AF3',
"parsl;": '\U00002AFD',
"part;": '\U00002202',
"pcy;": '\U0000043F',
"percnt;": '\U00000025',
"period;": '\U0000002E',
"permil;": '\U00002030',
"perp;": '\U000022A5',
"pertenk;": '\U00002031',
"pfr;": '\U0001D52D',
"phi;": '\U000003C6',
"phiv;": '\U000003D5',
"phmmat;": '\U00002133',
"phone;": '\U0000260E',
"pi;": '\U000003C0',
"pitchfork;": '\U000022D4',
"piv;": '\U000003D6',
"planck;": '\U0000210F',
"planckh;": '\U0000210E',
"plankv;": '\U0000210F',
"plus;": '\U0000002B',
"plusacir;": '\U00002A23',
"plusb;": '\U0000229E',
"pluscir;": '\U00002A22',
"plusdo;": '\U00002214',
"plusdu;": '\U00002A25',
"pluse;": '\U00002A72',
"plusmn;": '\U000000B1',
"plussim;": '\U00002A26',
"plustwo;": '\U00002A27',
"pm;": '\U000000B1',
"pointint;": '\U00002A15',
"popf;": '\U0001D561',
"pound;": '\U000000A3',
"pr;": '\U0000227A',
"prE;": '\U00002AB3',
"prap;": '\U00002AB7',
"prcue;": '\U0000227C',
"pre;": '\U00002AAF',
"prec;": '\U0000227A',
"precapprox;": '\U00002AB7',
"preccurlyeq;": '\U0000227C',
"preceq;": '\U00002AAF',
"precnapprox;": '\U00002AB9',
"precneqq;": '\U00002AB5',
"precnsim;": '\U000022E8',
"precsim;": '\U0000227E',
"prime;": '\U00002032',
"primes;": '\U00002119',
"prnE;": '\U00002AB5',
"prnap;": '\U00002AB9',
"prnsim;": '\U000022E8',
"prod;": '\U0000220F',
"profalar;": '\U0000232E',
"profline;": '\U00002312',
"profsurf;": '\U00002313',
"prop;": '\U0000221D',
"propto;": '\U0000221D',
"prsim;": '\U0000227E',
"prurel;": '\U000022B0',
"pscr;": '\U0001D4C5',
"psi;": '\U000003C8',
"puncsp;": '\U00002008',
"qfr;": '\U0001D52E',
"qint;": '\U00002A0C',
"qopf;": '\U0001D562',
"qprime;": '\U00002057',
"qscr;": '\U0001D4C6',
"quaternions;": '\U0000210D',
"quatint;": '\U00002A16',
"quest;": '\U0000003F',
"questeq;": '\U0000225F',
"quot;": '\U00000022',
"rAarr;": '\U000021DB',
"rArr;": '\U000021D2',
"rAtail;": '\U0000291C',
"rBarr;": '\U0000290F',
"rHar;": '\U00002964',
"racute;": '\U00000155',
"radic;": '\U0000221A',
"raemptyv;": '\U000029B3',
"rang;": '\U000027E9',
"rangd;": '\U00002992',
"range;": '\U000029A5',
"rangle;": '\U000027E9',
"raquo;": '\U000000BB',
"rarr;": '\U00002192',
"rarrap;": '\U00002975',
"rarrb;": '\U000021E5',
"rarrbfs;": '\U00002920',
"rarrc;": '\U00002933',
"rarrfs;": '\U0000291E',
"rarrhk;": '\U000021AA',
"rarrlp;": '\U000021AC',
"rarrpl;": '\U00002945',
"rarrsim;": '\U00002974',
"rarrtl;": '\U000021A3',
"rarrw;": '\U0000219D',
"ratail;": '\U0000291A',
"ratio;": '\U00002236',
"rationals;": '\U0000211A',
"rbarr;": '\U0000290D',
"rbbrk;": '\U00002773',
"rbrace;": '\U0000007D',
"rbrack;": '\U0000005D',
"rbrke;": '\U0000298C',
"rbrksld;": '\U0000298E',
"rbrkslu;": '\U00002990',
"rcaron;": '\U00000159',
"rcedil;": '\U00000157',
"rceil;": '\U00002309',
"rcub;": '\U0000007D',
"rcy;": '\U00000440',
"rdca;": '\U00002937',
"rdldhar;": '\U00002969',
"rdquo;": '\U0000201D',
"rdquor;": '\U0000201D',
"rdsh;": '\U000021B3',
"real;": '\U0000211C',
"realine;": '\U0000211B',
"realpart;": '\U0000211C',
"reals;": '\U0000211D',
"rect;": '\U000025AD',
"reg;": '\U000000AE',
"rfisht;": '\U0000297D',
"rfloor;": '\U0000230B',
"rfr;": '\U0001D52F',
"rhard;": '\U000021C1',
"rharu;": '\U000021C0',
"rharul;": '\U0000296C',
"rho;": '\U000003C1',
"rhov;": '\U000003F1',
"rightarrow;": '\U00002192',
"rightarrowtail;": '\U000021A3',
"rightharpoondown;": '\U000021C1',
"rightharpoonup;": '\U000021C0',
"rightleftarrows;": '\U000021C4',
"rightleftharpoons;": '\U000021CC',
"rightrightarrows;": '\U000021C9',
"rightsquigarrow;": '\U0000219D',
"rightthreetimes;": '\U000022CC',
"ring;": '\U000002DA',
"risingdotseq;": '\U00002253',
"rlarr;": '\U000021C4',
"rlhar;": '\U000021CC',
"rlm;": '\U0000200F',
"rmoust;": '\U000023B1',
"rmoustache;": '\U000023B1',
"rnmid;": '\U00002AEE',
"roang;": '\U000027ED',
"roarr;": '\U000021FE',
"robrk;": '\U000027E7',
"ropar;": '\U00002986',
"ropf;": '\U0001D563',
"roplus;": '\U00002A2E',
"rotimes;": '\U00002A35',
"rpar;": '\U00000029',
"rpargt;": '\U00002994',
"rppolint;": '\U00002A12',
"rrarr;": '\U000021C9',
"rsaquo;": '\U0000203A',
"rscr;": '\U0001D4C7',
"rsh;": '\U000021B1',
"rsqb;": '\U0000005D',
"rsquo;": '\U00002019',
"rsquor;": '\U00002019',
"rthree;": '\U000022CC',
"rtimes;": '\U000022CA',
"rtri;": '\U000025B9',
"rtrie;": '\U000022B5',
"rtrif;": '\U000025B8',
"rtriltri;": '\U000029CE',
"ruluhar;": '\U00002968',
"rx;": '\U0000211E',
"sacute;": '\U0000015B',
"sbquo;": '\U0000201A',
"sc;": '\U0000227B',
"scE;": '\U00002AB4',
"scap;": '\U00002AB8',
"scaron;": '\U00000161',
"sccue;": '\U0000227D',
"sce;": '\U00002AB0',
"scedil;": '\U0000015F',
"scirc;": '\U0000015D',
"scnE;": '\U00002AB6',
"scnap;": '\U00002ABA',
"scnsim;": '\U000022E9',
"scpolint;": '\U00002A13',
"scsim;": '\U0000227F',
"scy;": '\U00000441',
"sdot;": '\U000022C5',
"sdotb;": '\U000022A1',
"sdote;": '\U00002A66',
"seArr;": '\U000021D8',
"searhk;": '\U00002925',
"searr;": '\U00002198',
"searrow;": '\U00002198',
"sect;": '\U000000A7',
"semi;": '\U0000003B',
"seswar;": '\U00002929',
"setminus;": '\U00002216',
"setmn;": '\U00002216',
"sext;": '\U00002736',
"sfr;": '\U0001D530',
"sfrown;": '\U00002322',
"sharp;": '\U0000266F',
"shchcy;": '\U00000449',
"shcy;": '\U00000448',
"shortmid;": '\U00002223',
"shortparallel;": '\U00002225',
"shy;": '\U000000AD',
"sigma;": '\U000003C3',
"sigmaf;": '\U000003C2',
"sigmav;": '\U000003C2',
"sim;": '\U0000223C',
"simdot;": '\U00002A6A',
"sime;": '\U00002243',
"simeq;": '\U00002243',
"simg;": '\U00002A9E',
"simgE;": '\U00002AA0',
"siml;": '\U00002A9D',
"simlE;": '\U00002A9F',
"simne;": '\U00002246',
"simplus;": '\U00002A24',
"simrarr;": '\U00002972',
"slarr;": '\U00002190',
"smallsetminus;": '\U00002216',
"smashp;": '\U00002A33',
"smeparsl;": '\U000029E4',
"smid;": '\U00002223',
"smile;": '\U00002323',
"smt;": '\U00002AAA',
"smte;": '\U00002AAC',
"softcy;": '\U0000044C',
"sol;": '\U0000002F',
"solb;": '\U000029C4',
"solbar;": '\U0000233F',
"sopf;": '\U0001D564',
"spades;": '\U00002660',
"spadesuit;": '\U00002660',
"spar;": '\U00002225',
"sqcap;": '\U00002293',
"sqcup;": '\U00002294',
"sqsub;": '\U0000228F',
"sqsube;": '\U00002291',
"sqsubset;": '\U0000228F',
"sqsubseteq;": '\U00002291',
"sqsup;": '\U00002290',
"sqsupe;": '\U00002292',
"sqsupset;": '\U00002290',
"sqsupseteq;": '\U00002292',
"squ;": '\U000025A1',
"square;": '\U000025A1',
"squarf;": '\U000025AA',
"squf;": '\U000025AA',
"srarr;": '\U00002192',
"sscr;": '\U0001D4C8',
"ssetmn;": '\U00002216',
"ssmile;": '\U00002323',
"sstarf;": '\U000022C6',
"star;": '\U00002606',
"starf;": '\U00002605',
"straightepsilon;": '\U000003F5',
"straightphi;": '\U000003D5',
"strns;": '\U000000AF',
"sub;": '\U00002282',
"subE;": '\U00002AC5',
"subdot;": '\U00002ABD',
"sube;": '\U00002286',
"subedot;": '\U00002AC3',
"submult;": '\U00002AC1',
"subnE;": '\U00002ACB',
"subne;": '\U0000228A',
"subplus;": '\U00002ABF',
"subrarr;": '\U00002979',
"subset;": '\U00002282',
"subseteq;": '\U00002286',
"subseteqq;": '\U00002AC5',
"subsetneq;": '\U0000228A',
"subsetneqq;": '\U00002ACB',
"subsim;": '\U00002AC7',
"subsub;": '\U00002AD5',
"subsup;": '\U00002AD3',
"succ;": '\U0000227B',
"succapprox;": '\U00002AB8',
"succcurlyeq;": '\U0000227D',
"succeq;": '\U00002AB0',
"succnapprox;": '\U00002ABA',
"succneqq;": '\U00002AB6',
"succnsim;": '\U000022E9',
"succsim;": '\U0000227F',
"sum;": '\U00002211',
"sung;": '\U0000266A',
"sup;": '\U00002283',
"sup1;": '\U000000B9',
"sup2;": '\U000000B2',
"sup3;": '\U000000B3',
"supE;": '\U00002AC6',
"supdot;": '\U00002ABE',
"supdsub;": '\U00002AD8',
"supe;": '\U00002287',
"supedot;": '\U00002AC4',
"suphsol;": '\U000027C9',
"suphsub;": '\U00002AD7',
"suplarr;": '\U0000297B',
"supmult;": '\U00002AC2',
"supnE;": '\U00002ACC',
"supne;": '\U0000228B',
"supplus;": '\U00002AC0',
"supset;": '\U00002283',
"supseteq;": '\U00002287',
"supseteqq;": '\U00002AC6',
"supsetneq;": '\U0000228B',
"supsetneqq;": '\U00002ACC',
"supsim;": '\U00002AC8',
"supsub;": '\U00002AD4',
"supsup;": '\U00002AD6',
"swArr;": '\U000021D9',
"swarhk;": '\U00002926',
"swarr;": '\U00002199',
"swarrow;": '\U00002199',
"swnwar;": '\U0000292A',
"szlig;": '\U000000DF',
"target;": '\U00002316',
"tau;": '\U000003C4',
"tbrk;": '\U000023B4',
"tcaron;": '\U00000165',
"tcedil;": '\U00000163',
"tcy;": '\U00000442',
"tdot;": '\U000020DB',
"telrec;": '\U00002315',
"tfr;": '\U0001D531',
"there4;": '\U00002234',
"therefore;": '\U00002234',
"theta;": '\U000003B8',
"thetasym;": '\U000003D1',
"thetav;": '\U000003D1',
"thickapprox;": '\U00002248',
"thicksim;": '\U0000223C',
"thinsp;": '\U00002009',
"thkap;": '\U00002248',
"thksim;": '\U0000223C',
"thorn;": '\U000000FE',
"tilde;": '\U000002DC',
"times;": '\U000000D7',
"timesb;": '\U000022A0',
"timesbar;": '\U00002A31',
"timesd;": '\U00002A30',
"tint;": '\U0000222D',
"toea;": '\U00002928',
"top;": '\U000022A4',
"topbot;": '\U00002336',
"topcir;": '\U00002AF1',
"topf;": '\U0001D565',
"topfork;": '\U00002ADA',
"tosa;": '\U00002929',
"tprime;": '\U00002034',
"trade;": '\U00002122',
"triangle;": '\U000025B5',
"triangledown;": '\U000025BF',
"triangleleft;": '\U000025C3',
"trianglelefteq;": '\U000022B4',
"triangleq;": '\U0000225C',
"triangleright;": '\U000025B9',
"trianglerighteq;": '\U000022B5',
"tridot;": '\U000025EC',
"trie;": '\U0000225C',
"triminus;": '\U00002A3A',
"triplus;": '\U00002A39',
"trisb;": '\U000029CD',
"tritime;": '\U00002A3B',
"trpezium;": '\U000023E2',
"tscr;": '\U0001D4C9',
"tscy;": '\U00000446',
"tshcy;": '\U0000045B',
"tstrok;": '\U00000167',
"twixt;": '\U0000226C',
"twoheadleftarrow;": '\U0000219E',
"twoheadrightarrow;": '\U000021A0',
"uArr;": '\U000021D1',
"uHar;": '\U00002963',
"uacute;": '\U000000FA',
"uarr;": '\U00002191',
"ubrcy;": '\U0000045E',
"ubreve;": '\U0000016D',
"ucirc;": '\U000000FB',
"ucy;": '\U00000443',
"udarr;": '\U000021C5',
"udblac;": '\U00000171',
"udhar;": '\U0000296E',
"ufisht;": '\U0000297E',
"ufr;": '\U0001D532',
"ugrave;": '\U000000F9',
"uharl;": '\U000021BF',
"uharr;": '\U000021BE',
"uhblk;": '\U00002580',
"ulcorn;": '\U0000231C',
"ulcorner;": '\U0000231C',
"ulcrop;": '\U0000230F',
"ultri;": '\U000025F8',
"umacr;": '\U0000016B',
"uml;": '\U000000A8',
"uogon;": '\U00000173',
"uopf;": '\U0001D566',
"uparrow;": '\U00002191',
"updownarrow;": '\U00002195',
"upharpoonleft;": '\U000021BF',
"upharpoonright;": '\U000021BE',
"uplus;": '\U0000228E',
"upsi;": '\U000003C5',
"upsih;": '\U000003D2',
"upsilon;": '\U000003C5',
"upuparrows;": '\U000021C8',
"urcorn;": '\U0000231D',
"urcorner;": '\U0000231D',
"urcrop;": '\U0000230E',
"uring;": '\U0000016F',
"urtri;": '\U000025F9',
"uscr;": '\U0001D4CA',
"utdot;": '\U000022F0',
"utilde;": '\U00000169',
"utri;": '\U000025B5',
"utrif;": '\U000025B4',
"uuarr;": '\U000021C8',
"uuml;": '\U000000FC',
"uwangle;": '\U000029A7',
"vArr;": '\U000021D5',
"vBar;": '\U00002AE8',
"vBarv;": '\U00002AE9',
"vDash;": '\U000022A8',
"vangrt;": '\U0000299C',
"varepsilon;": '\U000003F5',
"varkappa;": '\U000003F0',
"varnothing;": '\U00002205',
"varphi;": '\U000003D5',
"varpi;": '\U000003D6',
"varpropto;": '\U0000221D',
"varr;": '\U00002195',
"varrho;": '\U000003F1',
"varsigma;": '\U000003C2',
"vartheta;": '\U000003D1',
"vartriangleleft;": '\U000022B2',
"vartriangleright;": '\U000022B3',
"vcy;": '\U00000432',
"vdash;": '\U000022A2',
"vee;": '\U00002228',
"veebar;": '\U000022BB',
"veeeq;": '\U0000225A',
"vellip;": '\U000022EE',
"verbar;": '\U0000007C',
"vert;": '\U0000007C',
"vfr;": '\U0001D533',
"vltri;": '\U000022B2',
"vopf;": '\U0001D567',
"vprop;": '\U0000221D',
"vrtri;": '\U000022B3',
"vscr;": '\U0001D4CB',
"vzigzag;": '\U0000299A',
"wcirc;": '\U00000175',
"wedbar;": '\U00002A5F',
"wedge;": '\U00002227',
"wedgeq;": '\U00002259',
"weierp;": '\U00002118',
"wfr;": '\U0001D534',
"wopf;": '\U0001D568',
"wp;": '\U00002118',
"wr;": '\U00002240',
"wreath;": '\U00002240',
"wscr;": '\U0001D4CC',
"xcap;": '\U000022C2',
"xcirc;": '\U000025EF',
"xcup;": '\U000022C3',
"xdtri;": '\U000025BD',
"xfr;": '\U0001D535',
"xhArr;": '\U000027FA',
"xharr;": '\U000027F7',
"xi;": '\U000003BE',
"xlArr;": '\U000027F8',
"xlarr;": '\U000027F5',
"xmap;": '\U000027FC',
"xnis;": '\U000022FB',
"xodot;": '\U00002A00',
"xopf;": '\U0001D569',
"xoplus;": '\U00002A01',
"xotime;": '\U00002A02',
"xrArr;": '\U000027F9',
"xrarr;": '\U000027F6',
"xscr;": '\U0001D4CD',
"xsqcup;": '\U00002A06',
"xuplus;": '\U00002A04',
"xutri;": '\U000025B3',
"xvee;": '\U000022C1',
"xwedge;": '\U000022C0',
"yacute;": '\U000000FD',
"yacy;": '\U0000044F',
"ycirc;": '\U00000177',
"ycy;": '\U0000044B',
"yen;": '\U000000A5',
"yfr;": '\U0001D536',
"yicy;": '\U00000457',
"yopf;": '\U0001D56A',
"yscr;": '\U0001D4CE',
"yucy;": '\U0000044E',
"yuml;": '\U000000FF',
"zacute;": '\U0000017A',
"zcaron;": '\U0000017E',
"zcy;": '\U00000437',
"zdot;": '\U0000017C',
"zeetrf;": '\U00002128',
"zeta;": '\U000003B6',
"zfr;": '\U0001D537',
"zhcy;": '\U00000436',
"zigrarr;": '\U000021DD',
"zopf;": '\U0001D56B',
"zscr;": '\U0001D4CF',
"zwj;": '\U0000200D',
"zwnj;": '\U0000200C',
"AElig": '\U000000C6',
"AMP": '\U00000026',
"Aacute": '\U000000C1',
"Acirc": '\U000000C2',
"Agrave": '\U000000C0',
"Aring": '\U000000C5',
"Atilde": '\U000000C3',
"Auml": '\U000000C4',
"COPY": '\U000000A9',
"Ccedil": '\U000000C7',
"ETH": '\U000000D0',
"Eacute": '\U000000C9',
"Ecirc": '\U000000CA',
"Egrave": '\U000000C8',
"Euml": '\U000000CB',
"GT": '\U0000003E',
"Iacute": '\U000000CD',
"Icirc": '\U000000CE',
"Igrave": '\U000000CC',
"Iuml": '\U000000CF',
"LT": '\U0000003C',
"Ntilde": '\U000000D1',
"Oacute": '\U000000D3',
"Ocirc": '\U000000D4',
"Ograve": '\U000000D2',
"Oslash": '\U000000D8',
"Otilde": '\U000000D5',
"Ouml": '\U000000D6',
"QUOT": '\U00000022',
"REG": '\U000000AE',
"THORN": '\U000000DE',
"Uacute": '\U000000DA',
"Ucirc": '\U000000DB',
"Ugrave": '\U000000D9',
"Uuml": '\U000000DC',
"Yacute": '\U000000DD',
"aacute": '\U000000E1',
"acirc": '\U000000E2',
"acute": '\U000000B4',
"aelig": '\U000000E6',
"agrave": '\U000000E0',
"amp": '\U00000026',
"aring": '\U000000E5',
"atilde": '\U000000E3',
"auml": '\U000000E4',
"brvbar": '\U000000A6',
"ccedil": '\U000000E7',
"cedil": '\U000000B8',
"cent": '\U000000A2',
"copy": '\U000000A9',
"curren": '\U000000A4',
"deg": '\U000000B0',
"divide": '\U000000F7',
"eacute": '\U000000E9',
"ecirc": '\U000000EA',
"egrave": '\U000000E8',
"eth": '\U000000F0',
"euml": '\U000000EB',
"frac12": '\U000000BD',
"frac14": '\U000000BC',
"frac34": '\U000000BE',
"gt": '\U0000003E',
"iacute": '\U000000ED',
"icirc": '\U000000EE',
"iexcl": '\U000000A1',
"igrave": '\U000000EC',
"iquest": '\U000000BF',
"iuml": '\U000000EF',
"laquo": '\U000000AB',
"lt": '\U0000003C',
"macr": '\U000000AF',
"micro": '\U000000B5',
"middot": '\U000000B7',
"nbsp": '\U000000A0',
"not": '\U000000AC',
"ntilde": '\U000000F1',
"oacute": '\U000000F3',
"ocirc": '\U000000F4',
"ograve": '\U000000F2',
"ordf": '\U000000AA',
"ordm": '\U000000BA',
"oslash": '\U000000F8',
"otilde": '\U000000F5',
"ouml": '\U000000F6',
"para": '\U000000B6',
"plusmn": '\U000000B1',
"pound": '\U000000A3',
"quot": '\U00000022',
"raquo": '\U000000BB',
"reg": '\U000000AE',
"sect": '\U000000A7',
"shy": '\U000000AD',
"sup1": '\U000000B9',
"sup2": '\U000000B2',
"sup3": '\U000000B3',
"szlig": '\U000000DF',
"thorn": '\U000000FE',
"times": '\U000000D7',
"uacute": '\U000000FA',
"ucirc": '\U000000FB',
"ugrave": '\U000000F9',
"uml": '\U000000A8',
"uuml": '\U000000FC',
"yacute": '\U000000FD',
"yen": '\U000000A5',
"yuml": '\U000000FF',
}
// HTML entities that are two unicode codepoints.
var entity2 = map[string][2]rune{
// TODO(nigeltao): Handle replacements that are wider than their names.
// "nLt;": {'\u226A', '\u20D2'},
// "nGt;": {'\u226B', '\u20D2'},
"NotEqualTilde;": {'\u2242', '\u0338'},
"NotGreaterFullEqual;": {'\u2267', '\u0338'},
"NotGreaterGreater;": {'\u226B', '\u0338'},
"NotGreaterSlantEqual;": {'\u2A7E', '\u0338'},
"NotHumpDownHump;": {'\u224E', '\u0338'},
"NotHumpEqual;": {'\u224F', '\u0338'},
"NotLeftTriangleBar;": {'\u29CF', '\u0338'},
"NotLessLess;": {'\u226A', '\u0338'},
"NotLessSlantEqual;": {'\u2A7D', '\u0338'},
"NotNestedGreaterGreater;": {'\u2AA2', '\u0338'},
"NotNestedLessLess;": {'\u2AA1', '\u0338'},
"NotPrecedesEqual;": {'\u2AAF', '\u0338'},
"NotRightTriangleBar;": {'\u29D0', '\u0338'},
"NotSquareSubset;": {'\u228F', '\u0338'},
"NotSquareSuperset;": {'\u2290', '\u0338'},
"NotSubset;": {'\u2282', '\u20D2'},
"NotSucceedsEqual;": {'\u2AB0', '\u0338'},
"NotSucceedsTilde;": {'\u227F', '\u0338'},
"NotSuperset;": {'\u2283', '\u20D2'},
"ThickSpace;": {'\u205F', '\u200A'},
"acE;": {'\u223E', '\u0333'},
"bne;": {'\u003D', '\u20E5'},
"bnequiv;": {'\u2261', '\u20E5'},
"caps;": {'\u2229', '\uFE00'},
"cups;": {'\u222A', '\uFE00'},
"fjlig;": {'\u0066', '\u006A'},
"gesl;": {'\u22DB', '\uFE00'},
"gvertneqq;": {'\u2269', '\uFE00'},
"gvnE;": {'\u2269', '\uFE00'},
"lates;": {'\u2AAD', '\uFE00'},
"lesg;": {'\u22DA', '\uFE00'},
"lvertneqq;": {'\u2268', '\uFE00'},
"lvnE;": {'\u2268', '\uFE00'},
"nGg;": {'\u22D9', '\u0338'},
"nGtv;": {'\u226B', '\u0338'},
"nLl;": {'\u22D8', '\u0338'},
"nLtv;": {'\u226A', '\u0338'},
"nang;": {'\u2220', '\u20D2'},
"napE;": {'\u2A70', '\u0338'},
"napid;": {'\u224B', '\u0338'},
"nbump;": {'\u224E', '\u0338'},
"nbumpe;": {'\u224F', '\u0338'},
"ncongdot;": {'\u2A6D', '\u0338'},
"nedot;": {'\u2250', '\u0338'},
"nesim;": {'\u2242', '\u0338'},
"ngE;": {'\u2267', '\u0338'},
"ngeqq;": {'\u2267', '\u0338'},
"ngeqslant;": {'\u2A7E', '\u0338'},
"nges;": {'\u2A7E', '\u0338'},
"nlE;": {'\u2266', '\u0338'},
"nleqq;": {'\u2266', '\u0338'},
"nleqslant;": {'\u2A7D', '\u0338'},
"nles;": {'\u2A7D', '\u0338'},
"notinE;": {'\u22F9', '\u0338'},
"notindot;": {'\u22F5', '\u0338'},
"nparsl;": {'\u2AFD', '\u20E5'},
"npart;": {'\u2202', '\u0338'},
"npre;": {'\u2AAF', '\u0338'},
"npreceq;": {'\u2AAF', '\u0338'},
"nrarrc;": {'\u2933', '\u0338'},
"nrarrw;": {'\u219D', '\u0338'},
"nsce;": {'\u2AB0', '\u0338'},
"nsubE;": {'\u2AC5', '\u0338'},
"nsubset;": {'\u2282', '\u20D2'},
"nsubseteqq;": {'\u2AC5', '\u0338'},
"nsucceq;": {'\u2AB0', '\u0338'},
"nsupE;": {'\u2AC6', '\u0338'},
"nsupset;": {'\u2283', '\u20D2'},
"nsupseteqq;": {'\u2AC6', '\u0338'},
"nvap;": {'\u224D', '\u20D2'},
"nvge;": {'\u2265', '\u20D2'},
"nvgt;": {'\u003E', '\u20D2'},
"nvle;": {'\u2264', '\u20D2'},
"nvlt;": {'\u003C', '\u20D2'},
"nvltrie;": {'\u22B4', '\u20D2'},
"nvrtrie;": {'\u22B5', '\u20D2'},
"nvsim;": {'\u223C', '\u20D2'},
"race;": {'\u223D', '\u0331'},
"smtes;": {'\u2AAC', '\uFE00'},
"sqcaps;": {'\u2293', '\uFE00'},
"sqcups;": {'\u2294', '\uFE00'},
"varsubsetneq;": {'\u228A', '\uFE00'},
"varsubsetneqq;": {'\u2ACB', '\uFE00'},
"varsupsetneq;": {'\u228B', '\uFE00'},
"varsupsetneqq;": {'\u2ACC', '\uFE00'},
"vnsub;": {'\u2282', '\u20D2'},
"vnsup;": {'\u2283', '\u20D2'},
"vsubnE;": {'\u2ACB', '\uFE00'},
"vsubne;": {'\u228A', '\uFE00'},
"vsupnE;": {'\u2ACC', '\uFE00'},
"vsupne;": {'\u228B', '\uFE00'},
}
================================================
FILE: internal/escape.go
================================================
// Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package astro
import (
"bytes"
"io"
"strings"
"unicode/utf8"
)
type writer interface {
io.Writer
io.ByteWriter
WriteString(string) (int, error)
}
// These replacements permit compatibility with old numeric entities that
// assumed Windows-1252 encoding.
// https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference
var replacementTable = [...]rune{
'\u20AC', // First entry is what 0x80 should be replaced with.
'\u0081',
'\u201A',
'\u0192',
'\u201E',
'\u2026',
'\u2020',
'\u2021',
'\u02C6',
'\u2030',
'\u0160',
'\u2039',
'\u0152',
'\u008D',
'\u017D',
'\u008F',
'\u0090',
'\u2018',
'\u2019',
'\u201C',
'\u201D',
'\u2022',
'\u2013',
'\u2014',
'\u02DC',
'\u2122',
'\u0161',
'\u203A',
'\u0153',
'\u009D',
'\u017E',
'\u0178', // Last entry is 0x9F.
// 0x00->'\uFFFD' is handled programmatically.
// 0x0D->'\u000D' is a no-op.
}
// unescapeEntity reads an entity like "<" from b[src:] and writes the
// corresponding "<" to b[dst:], returning the incremented dst and src cursors.
// Precondition: b[src] == '&' && dst <= src.
// attribute should be true if parsing an attribute value.
func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) {
// https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference
// i starts at 1 because we already know that s[0] == '&'.
i, s := 1, b[src:]
if len(s) <= 1 {
b[dst] = b[src]
return dst + 1, src + 1
}
if s[i] == '#' {
if len(s) <= 3 { // We need to have at least "&#.".
b[dst] = b[src]
return dst + 1, src + 1
}
i++
c := s[i]
hex := false
if c == 'x' || c == 'X' {
hex = true
i++
}
x := '\x00'
for i < len(s) {
c = s[i]
i++
if hex {
if '0' <= c && c <= '9' {
x = 16*x + rune(c) - '0'
continue
} else if 'a' <= c && c <= 'f' {
x = 16*x + rune(c) - 'a' + 10
continue
} else if 'A' <= c && c <= 'F' {
x = 16*x + rune(c) - 'A' + 10
continue
}
} else if '0' <= c && c <= '9' {
x = 10*x + rune(c) - '0'
continue
}
if c != ';' {
i--
}
break
}
if i <= 3 { // No characters matched.
b[dst] = b[src]
return dst + 1, src + 1
}
if 0x80 <= x && x <= 0x9F {
// Replace characters from Windows-1252 with UTF-8 equivalents.
x = replacementTable[x-0x80]
} else if x == 0 || (0xD800 <= x && x <= 0xDFFF) || x > 0x10FFFF {
// Replace invalid characters with the replacement character.
x = '\uFFFD'
}
return dst + utf8.EncodeRune(b[dst:], x), src + i
}
// Consume the maximum number of characters possible, with the
// consumed characters matching one of the named references.
for i < len(s) {
c := s[i]
i++
// Lower-cased characters are more common in entities, so we check for them first.
if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' {
continue
}
if c != ';' {
i--
}
break
}
entityName := string(s[1:i])
if entityName == "" {
// No-op.
} else if attribute && entityName[len(entityName)-1] != ';' && len(s) > i && s[i] == '=' {
// No-op.
} else if x := entity[entityName]; x != 0 {
return dst + utf8.EncodeRune(b[dst:], x), src + i
} else if x := entity2[entityName]; x[0] != 0 {
dst1 := dst + utf8.EncodeRune(b[dst:], x[0])
return dst1 + utf8.EncodeRune(b[dst1:], x[1]), src + i
} else if !attribute {
maxLen := len(entityName) - 1
if maxLen > longestEntityWithoutSemicolon {
maxLen = longestEntityWithoutSemicolon
}
for j := maxLen; j > 1; j-- {
if x := entity[entityName[:j]]; x != 0 {
return dst + utf8.EncodeRune(b[dst:], x), src + j + 1
}
}
}
dst1, src1 = dst+i, src+i
copy(b[dst:dst1], b[src:src1])
return dst1, src1
}
// unescape unescapes b's entities in-place, so that "a<b" becomes "a<b".
// attribute should be true if parsing an attribute value.
func unescape(b []byte, attribute bool) []byte {
for i, c := range b {
if c == '&' {
dst, src := unescapeEntity(b, i, i, attribute)
for src < len(b) {
c := b[src]
if c == '&' {
dst, src = unescapeEntity(b, dst, src, attribute)
} else {
b[dst] = c
dst, src = dst+1, src+1
}
}
return b[0:dst]
}
}
return b
}
const escapedChars = "&'<>\"\r"
func escape(w writer, s string) error {
i := strings.IndexAny(s, escapedChars)
for i != -1 {
if _, err := w.WriteString(s[:i]); err != nil {
return err
}
var esc string
switch s[i] {
case '&':
esc = "&"
case '\'':
// "'" is shorter than "'" and apos was not in HTML until HTML5.
esc = "'"
case '<':
esc = "<"
case '>':
esc = ">"
case '"':
// """ is shorter than """.
esc = """
case '\r':
esc = " "
default:
panic("unrecognized escape character")
}
s = s[i+1:]
if _, err := w.WriteString(esc); err != nil {
return err
}
i = strings.IndexAny(s, escapedChars)
}
_, err := w.WriteString(s)
return err
}
// EscapeString escapes special characters like "<" to become "<". It
// escapes only five such characters: <, >, &, ' and ".
// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't
// always true.
func EscapeString(s string) string {
if !strings.ContainsAny(s, escapedChars) {
return s
}
var buf bytes.Buffer
escape(&buf, s)
return buf.String()
}
// UnescapeString unescapes entities like "<" to become "<". It unescapes a
// larger range of entities than EscapeString escapes. For example, "á"
// unescapes to "á", as does "á" and "&xE1;".
// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't
// always true.
func UnescapeString(s string) string {
for _, c := range s {
if c == '&' {
return string(unescape([]byte(s), false))
}
}
return s
}
================================================
FILE: internal/foreign.go
================================================
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package astro
import (
"strings"
)
func adjustAttributeNames(aa []Attribute, nameMap map[string]string) {
for i := range aa {
if newName, ok := nameMap[aa[i].Key]; ok {
aa[i].Key = newName
}
}
}
func adjustForeignAttributes(aa []Attribute) {
for i, a := range aa {
if a.Key == "" || a.Key[0] != 'x' {
continue
}
switch a.Key {
case "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show",
"xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "xmlns:xlink":
j := strings.Index(a.Key, ":")
aa[i].Namespace = a.Key[:j]
aa[i].Key = a.Key[j+1:]
}
}
}
func htmlIntegrationPoint(n *Node) bool {
if n.Type != ElementNode {
return false
}
switch n.Namespace {
case "math":
if n.Data == "annotation-xml" {
for _, a := range n.Attr {
if a.Key == "encoding" {
val := strings.ToLower(a.Val)
if val == "text/html" || val == "application/xhtml+xml" {
return true
}
}
}
}
case "svg":
switch n.Data {
case "desc", "foreignObject", "title":
return true
}
}
return false
}
func mathMLTextIntegrationPoint(n *Node) bool {
if n.Namespace != "math" {
return false
}
switch n.Data {
case "mi", "mo", "mn", "ms", "mtext":
return true
}
return false
}
// Section 12.2.6.5.
var breakout = map[string]bool{
"b": true,
"big": true,
"blockquote": true,
"body": true,
"br": true,
"center": true,
"code": true,
"dd": true,
"div": true,
"dl": true,
"dt": true,
"em": true,
"embed": true,
"h1": true,
"h2": true,
"h3": true,
"h4": true,
"h5": true,
"h6": true,
"head": true,
"hr": true,
"i": true,
"img": true,
"li": true,
"listing": true,
"menu": true,
"meta": true,
"nobr": true,
"ol": true,
"p": true,
"pre": true,
"ruby": true,
"s": true,
"small": true,
"span": true,
"strong": true,
"strike": true,
"sub": true,
"sup": true,
"table": true,
"tt": true,
"u": true,
"ul": true,
"var": true,
}
// Section 12.2.6.5.
var svgTagNameAdjustments = map[string]string{
"altglyph": "altGlyph",
"altglyphdef": "altGlyphDef",
"altglyphitem": "altGlyphItem",
"animatecolor": "animateColor",
"animatemotion": "animateMotion",
"animatetransform": "animateTransform",
"clippath": "clipPath",
"feblend": "feBlend",
"fecolormatrix": "feColorMatrix",
"fecomponenttransfer": "feComponentTransfer",
"fecomposite": "feComposite",
"feconvolvematrix": "feConvolveMatrix",
"fediffuselighting": "feDiffuseLighting",
"fedisplacementmap": "feDisplacementMap",
"fedistantlight": "feDistantLight",
"feflood": "feFlood",
"fefunca": "feFuncA",
"fefuncb": "feFuncB",
"fefuncg": "feFuncG",
"fefuncr": "feFuncR",
"fegaussianblur": "feGaussianBlur",
"feimage": "feImage",
"femerge": "feMerge",
"femergenode": "feMergeNode",
"femorphology": "feMorphology",
"feoffset": "feOffset",
"fepointlight": "fePointLight",
"fespecularlighting": "feSpecularLighting",
"fespotlight": "feSpotLight",
"fetile": "feTile",
"feturbulence": "feTurbulence",
"foreignobject": "foreignObject",
"glyphref": "glyphRef",
"lineargradient": "linearGradient",
"radialgradient": "radialGradient",
"textpath": "textPath",
}
// Section 12.2.6.1
var mathMLAttributeAdjustments = map[string]string{
"definitionurl": "definitionURL",
}
var svgAttributeAdjustments = map[string]string{
"attributename": "attributeName",
"attributetype": "attributeType",
"basefrequency": "baseFrequency",
"baseprofile": "baseProfile",
"calcmode": "calcMode",
"clippathunits": "clipPathUnits",
"diffuseconstant": "diffuseConstant",
"edgemode": "edgeMode",
"filterunits": "filterUnits",
"glyphref": "glyphRef",
"gradienttransform": "gradientTransform",
"gradientunits": "gradientUnits",
"kernelmatrix": "kernelMatrix",
"kernelunitlength": "kernelUnitLength",
"keypoints": "keyPoints",
"keysplines": "keySplines",
"keytimes": "keyTimes",
"lengthadjust": "lengthAdjust",
"limitingconeangle": "limitingConeAngle",
"markerheight": "markerHeight",
"markerunits": "markerUnits",
"markerwidth": "markerWidth",
"maskcontentunits": "maskContentUnits",
"maskunits": "maskUnits",
"numoctaves": "numOctaves",
"pathlength": "pathLength",
"patterncontentunits": "patternContentUnits",
"patterntransform": "patternTransform",
"patternunits": "patternUnits",
"pointsatx": "pointsAtX",
"pointsaty": "pointsAtY",
"pointsatz": "pointsAtZ",
"preservealpha": "preserveAlpha",
"preserveaspectratio": "preserveAspectRatio",
"primitiveunits": "primitiveUnits",
"refx": "refX",
"refy": "refY",
"repeatcount": "repeatCount",
"repeatdur": "repeatDur",
"requiredextensions": "requiredExtensions",
"requiredfeatures": "requiredFeatures",
"specularconstant": "specularConstant",
"specularexponent": "specularExponent",
"spreadmethod": "spreadMethod",
"startoffset": "startOffset",
"stddeviation": "stdDeviation",
"stitchtiles": "stitchTiles",
"surfacescale": "surfaceScale",
"systemlanguage": "systemLanguage",
"tablevalues": "tableValues",
"targetx": "targetX",
"targety": "targetY",
"textlength": "textLength",
"viewbox": "viewBox",
"viewtarget": "viewTarget",
"xchannelselector": "xChannelSelector",
"ychannelselector": "yChannelSelector",
"zoomandpan": "zoomAndPan",
}
================================================
FILE: internal/handler/handler.go
================================================
package handler
import (
"errors"
"strings"
"github.com/withastro/compiler/internal/loc"
"github.com/withastro/compiler/internal/sourcemap"
)
type Handler struct {
sourcetext string
filename string
builder sourcemap.ChunkBuilder
errors []error
warnings []error
infos []error
hints []error
}
func NewHandler(sourcetext string, filename string) *Handler {
return &Handler{
sourcetext: sourcetext,
filename: filename,
builder: sourcemap.MakeChunkBuilder(nil, sourcemap.GenerateLineOffsetTables(sourcetext, len(strings.Split(sourcetext, "\n")))),
errors: make([]error, 0),
warnings: make([]error, 0),
infos: make([]error, 0),
hints: make([]error, 0),
}
}
func (h *Handler) HasErrors() bool {
return len(h.errors) > 0
}
func (h *Handler) AppendError(err error) {
h.errors = append(h.errors, err)
}
func (h *Handler) AppendWarning(err error) {
h.warnings = append(h.warnings, err)
}
func (h *Handler) AppendInfo(err error) {
h.infos = append(h.infos, err)
}
func (h *Handler) AppendHint(err error) {
h.hints = append(h.hints, err)
}
func (h *Handler) Errors() []loc.DiagnosticMessage {
msgs := make([]loc.DiagnosticMessage, 0)
for _, err := range h.errors {
if err != nil {
msgs = append(msgs, ErrorToMessage(h, loc.ErrorType, err))
}
}
return msgs
}
func (h *Handler) Warnings() []loc.DiagnosticMessage {
msgs := make([]loc.DiagnosticMessage, 0)
for _, err := range h.warnings {
if err != nil {
msgs = append(msgs, ErrorToMessage(h, loc.WarningType, err))
}
}
return msgs
}
func (h *Handler) Diagnostics() []loc.DiagnosticMessage {
msgs := make([]loc.DiagnosticMessage, 0)
for _, err := range h.errors {
if err != nil {
msgs = append(msgs, ErrorToMessage(h, loc.ErrorType, err))
}
}
for _, err := range h.warnings {
if err != nil {
msgs = append(msgs, ErrorToMessage(h, loc.WarningType, err))
}
}
for _, err := range h.infos {
if err != nil {
msgs = append(msgs, ErrorToMessage(h, loc.InformationType, err))
}
}
for _, err := range h.hints {
if err != nil {
msgs = append(msgs, ErrorToMessage(h, loc.HintType, err))
}
}
return msgs
}
func ErrorToMessage(h *Handler, severity loc.DiagnosticSeverity, err error) loc.DiagnosticMessage {
var rangedError *loc.ErrorWithRange
switch {
case errors.As(err, &rangedError):
pos := h.builder.GetLineAndColumnForLocation(rangedError.Range.Loc)
location := &loc.DiagnosticLocation{
File: h.filename,
Line: pos[0],
Column: pos[1],
Length: rangedError.Range.Len,
}
message := rangedError.ToMessage(location)
message.Severity = int(severity)
return message
default:
return loc.DiagnosticMessage{Text: err.Error()}
}
}
================================================
FILE: internal/hash.go
================================================
package astro
import (
"encoding/base32"
"strings"
"github.com/withastro/compiler/internal/xxhash"
)
func HashString(str string) string {
h := xxhash.New()
//nolint
h.Write([]byte(str))
hashBytes := h.Sum(nil)
return strings.ToLower(base32.StdEncoding.EncodeToString(hashBytes)[:8])
}
================================================
FILE: internal/helpers/joiner.go
================================================
package helpers
import (
"bytes"
"strings"
)
// This provides an efficient way to join lots of big string and byte slices
// together. It avoids the cost of repeatedly reallocating as the buffer grows
// by measuring exactly how big the buffer should be and then allocating once.
// This is a measurable speedup.
type Joiner struct {
lastByte byte
strings []joinerString
bytes []joinerBytes
length uint32
}
type joinerString struct {
data string
offset uint32
}
type joinerBytes struct {
data []byte
offset uint32
}
func (j *Joiner) AddString(data string) {
if len(data) > 0 {
j.lastByte = data[len(data)-1]
}
j.strings = append(j.strings, joinerString{data, j.length})
j.length += uint32(len(data))
}
func (j *Joiner) AddBytes(data []byte) {
if len(data) > 0 {
j.lastByte = data[len(data)-1]
}
j.bytes = append(j.bytes, joinerBytes{data, j.length})
j.length += uint32(len(data))
}
func (j *Joiner) LastByte() byte {
return j.lastByte
}
func (j *Joiner) Length() uint32 {
return j.length
}
func (j *Joiner) EnsureNewlineAtEnd() {
if j.length > 0 && j.lastByte != '\n' {
j.AddString("\n")
}
}
func (j *Joiner) Done() []byte {
if len(j.strings) == 0 && len(j.bytes) == 1 && j.bytes[0].offset == 0 {
// No need to allocate if there was only a single byte array written
return j.bytes[0].data
}
buffer := make([]byte, j.length)
for _,
gitextract_v3t26jmm/ ├── .changeset/ │ ├── README.md │ └── config.json ├── .devcontainer/ │ ├── Dockerfile │ └── devcontainer.json ├── .editorconfig ├── .git-blame-ignore-revs ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── ---01-bug-report.yml │ │ └── config.yml │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── ci.yml │ ├── congrats.yml │ ├── issue-labeled.yml │ ├── issue-needs-repro.yml │ ├── issue-opened.yml │ └── release.yml ├── .gitignore ├── .gitpod.yml ├── .golangci.yml ├── .prettierignore ├── .vscode/ │ └── settings.json ├── CONTRIBUTING.md ├── LICENSE ├── Makefile ├── SYNTAX_SPEC.md ├── biome.json ├── cmd/ │ └── astro-wasm/ │ └── astro-wasm.go ├── go.mod ├── go.sum ├── internal/ │ ├── const.go │ ├── doc.go │ ├── doctype.go │ ├── entity.go │ ├── escape.go │ ├── foreign.go │ ├── handler/ │ │ └── handler.go │ ├── hash.go │ ├── helpers/ │ │ ├── joiner.go │ │ └── js_comment_utils.go │ ├── js_scanner/ │ │ ├── js_scanner.go │ │ ├── js_scanner_test.go │ │ └── testdata/ │ │ └── fuzz/ │ │ └── FuzzHoistImport/ │ │ └── ec55358ab2929fbf4deab52587664e42682f0a6ea201a325c5c33f9d18c50456 │ ├── loc/ │ │ ├── diagnostics.go │ │ └── loc.go │ ├── node.go │ ├── parser.go │ ├── parser_test.go │ ├── print-to-source.go │ ├── printer/ │ │ ├── __printer_css__/ │ │ │ ├── scopedStyleStrategy___attribute_.snap │ │ │ ├── scopedStyleStrategy___class_.snap │ │ │ └── styles__no_frontmatter_.snap │ │ ├── __printer_js__/ │ │ │ ├── All_components.snap │ │ │ ├── Component_is_raw.snap │ │ │ ├── Component_names_A-Z.snap │ │ │ ├── Component_siblings_are_siblings.snap │ │ │ ├── Component_with_await.snap │ │ │ ├── Empty_attribute_expression.snap │ │ │ ├── Empty_expression.snap │ │ │ ├── Empty_expression_with_whitespace.snap │ │ │ ├── Empty_script.snap │ │ │ ├── Empty_style.snap │ │ │ ├── Expression_in_form_followed_by_other_sibling_forms.snap │ │ │ ├── Fragment.snap │ │ │ ├── Fragment_literal_only.snap │ │ │ ├── Fragment_shorthand.snap │ │ │ ├── Fragment_shorthand_only.snap │ │ │ ├── Fragment_shorthand_with_await.snap │ │ │ ├── Fragment_slotted.snap │ │ │ ├── Fragment_slotted_with_name.snap │ │ │ ├── Fragment_with_await.snap │ │ │ ├── Fragment_wrapping_link_with_awaited_href.snap │ │ │ ├── HTML_comment_in_component_inside_expression_I.snap │ │ │ ├── HTML_comment_in_component_inside_expression_II.snap │ │ │ ├── Mixed_style_siblings.snap │ │ │ ├── Nested_HTML_in_expressions,_wrapped_in_parens.snap │ │ │ ├── No_extra_script_tag.snap │ │ │ ├── Parser_can_handle_files___4096_chars.snap │ │ │ ├── Preserve_namespaces.snap │ │ │ ├── Preserve_namespaces_for_components.snap │ │ │ ├── Preserve_namespaces_in_expressions.snap │ │ │ ├── Preserve_slot_attribute_at_root_level_in_expression.snap │ │ │ ├── Preserve_slot_attribute_in_conditional_expression_for_custom_element.snap │ │ │ ├── Preserve_slot_attribute_in_expression_for_custom_element.snap │ │ │ ├── Preserve_slot_whitespace.snap │ │ │ ├── Preserve_slots_inside_custom-element.snap │ │ │ ├── React_framework_example.snap │ │ │ ├── SVG_styles.snap │ │ │ ├── Self-closing_components_in_head_can_have_siblings.snap │ │ │ ├── Self-closing_components_siblings_are_siblings.snap │ │ │ ├── Self-closing_formatting_elements.snap │ │ │ ├── Self-closing_formatting_elements_2.snap │ │ │ ├── Self-closing_script_in_head_works.snap │ │ │ ├── Self-closing_title.snap │ │ │ ├── Self-closing_title_II.snap │ │ │ ├── Use_of_interfaces_within_frontmatter.snap │ │ │ ├── XElement.snap │ │ │ ├── _955_ternary_slot_with_elements.snap │ │ │ ├── _955_ternary_slot_with_text.snap │ │ │ ├── advanced_svg_expression.snap │ │ │ ├── anchor_content.snap │ │ │ ├── anchor_expressions.snap │ │ │ ├── anchor_inside_expression.snap │ │ │ ├── attribute_with_template_literal.snap │ │ │ ├── attribute_with_template_literal_interpolation.snap │ │ │ ├── backtick_in_HTML_comment.snap │ │ │ ├── basic__frontmatter_.snap │ │ │ ├── basic__no_frontmatter_.snap │ │ │ ├── basic_renderHead.snap │ │ │ ├── caption_only.snap │ │ │ ├── class_and_class_list_object.snap │ │ │ ├── class_and_class_list_set.snap │ │ │ ├── class_and_class_list_simple_array.snap │ │ │ ├── class_list.snap │ │ │ ├── class_list_with_spread.snap │ │ │ ├── class_with_spread.snap │ │ │ ├── client_only_component__default_.snap │ │ │ ├── client_only_component__multiple_.snap │ │ │ ├── client_only_component__named_.snap │ │ │ ├── client_only_component__namespace_.snap │ │ │ ├── client_only_component__namespaced_default_.snap │ │ │ ├── client_only_component__namespaced_named_.snap │ │ │ ├── comment_only_expressions_are_removed_I.snap │ │ │ ├── comment_only_expressions_are_removed_II.snap │ │ │ ├── comment_only_expressions_are_removed_III.snap │ │ │ ├── comments_removed_from_attribute_list.snap │ │ │ ├── complex_nested_template_literal_expression.snap │ │ │ ├── complex_recursive_component.snap │ │ │ ├── complex_table.snap │ │ │ ├── component.snap │ │ │ ├── component_in_expression_with_its_child_expression_before_its_child_element.snap │ │ │ ├── component_with_only_a_script.snap │ │ │ ├── component_with_quoted_attributes.snap │ │ │ ├── condition_expressions_at_the_top-level.snap │ │ │ ├── condition_expressions_at_the_top-level_with_head_content.snap │ │ │ ├── conditional_iframe.snap │ │ │ ├── conditional_noscript.snap │ │ │ ├── conditional_render.snap │ │ │ ├── conditional_rendering_of_title_containing_expression.snap │ │ │ ├── conditional_slot.snap │ │ │ ├── css_comment_doesn’t_produce_semicolon.snap │ │ │ ├── css_imports_are_not_included_in_module_metadata.snap │ │ │ ├── custom-element.snap │ │ │ ├── custom_elements.snap │ │ │ ├── define_vars_on_a_module_script_with_imports.snap │ │ │ ├── define_vars_on_non-root_elements.snap │ │ │ ├── define_vars_on_script_with_StaticExpression_turned_on.snap │ │ │ ├── define_vars_on_style.snap │ │ │ ├── define_vars_on_style_tag_with_style_empty_attribute_on_element.snap │ │ │ ├── define_vars_on_style_tag_with_style_expression_attribute_on_element.snap │ │ │ ├── define_vars_on_style_tag_with_style_quoted_attribute_on_element.snap │ │ │ ├── define_vars_on_style_tag_with_style_shorthand_attribute_on_element.snap │ │ │ ├── define_vars_on_style_tag_with_style_template_literal_attribute_on_element.snap │ │ │ ├── division_inside_expression.snap │ │ │ ├── doctype.snap │ │ │ ├── dot_component.snap │ │ │ ├── dynamic_import.snap │ │ │ ├── escaped_entity.snap │ │ │ ├── export_comments_I.snap │ │ │ ├── export_comments_II.snap │ │ │ ├── export_member_does_not_panic.snap │ │ │ ├── expression_returning_multiple_elements.snap │ │ │ ├── expression_slot.snap │ │ │ ├── expression_with_leading_whitespace.snap │ │ │ ├── expressions_with_JS_comments.snap │ │ │ ├── expressions_with_multiple_curly_braces.snap │ │ │ ├── function_expression_slots_I.snap │ │ │ ├── function_expression_slots_II___959_.snap │ │ │ ├── getStaticPaths__basic_.snap │ │ │ ├── getStaticPaths__hoisted_.snap │ │ │ ├── getStaticPaths__hoisted_II_.snap │ │ │ ├── gets_all_potential_hydrated_components.snap │ │ │ ├── head_content_with_component_first.snap │ │ │ ├── head_expression.snap │ │ │ ├── head_expression_and_conditional_rendering_of_fragment.snap │ │ │ ├── head_inside_slot.snap │ │ │ ├── head_slot.snap │ │ │ ├── head_slot_II.snap │ │ │ ├── head_slot_III.snap │ │ │ ├── html5_boilerplate.snap │ │ │ ├── iframe.snap │ │ │ ├── import.meta.env.snap │ │ │ ├── import.meta.snap │ │ │ ├── import_assertions.snap │ │ │ ├── import_order.snap │ │ │ ├── import_to_identifier_named_assert.snap │ │ │ ├── includes_comments_for_expression_attribute.snap │ │ │ ├── includes_comments_for_shorthand_attribute.snap │ │ │ ├── is_raw.snap │ │ │ ├── jsx_comment_between_doctype_and_html.snap │ │ │ ├── map_basic.snap │ │ │ ├── map_nested.snap │ │ │ ├── map_with_component.snap │ │ │ ├── map_without_component.snap │ │ │ ├── maybeRenderHead_not_printed_for_hoisted_scripts.snap │ │ │ ├── multibyte_character___script.snap │ │ │ ├── multibyte_character___style.snap │ │ │ ├── multibyte_characters.snap │ │ │ ├── multiline_class_attribute_on_component.snap │ │ │ ├── multiple_define_vars_on_style.snap │ │ │ ├── namespace_is_preserved_when_inside_an_expression.snap │ │ │ ├── nested_expressions.snap │ │ │ ├── nested_expressions_II.snap │ │ │ ├── nested_expressions_III.snap │ │ │ ├── nested_expressions_IV.snap │ │ │ ├── nested_expressions_V.snap │ │ │ ├── nested_expressions_VI.snap │ │ │ ├── nested_expressions_VII.snap │ │ │ ├── nested_expressions_VIII.snap │ │ │ ├── nested_head_content_stays_in_the_head.snap │ │ │ ├── nested_template_literal_expression.snap │ │ │ ├── no_expressions_in_math.snap │ │ │ ├── noscript_component.snap │ │ │ ├── noscript_deep_styles.snap │ │ │ ├── noscript_only.snap │ │ │ ├── noscript_styles.snap │ │ │ ├── orphan_slot.snap │ │ │ ├── passes_escaped_filename_into_createComponent_if_it_contains_single_quotes.snap │ │ │ ├── passes_filename_into_createComponent_if_passed_into_the_compiler_options.snap │ │ │ ├── preserve_is_inline_slot.snap │ │ │ ├── preserve_is_inline_slot_II.snap │ │ │ ├── script.snap │ │ │ ├── script_before_elements.snap │ │ │ ├── script_define_vars_I.snap │ │ │ ├── script_define_vars_II.snap │ │ │ ├── script_external.snap │ │ │ ├── script_external_in_expression.snap │ │ │ ├── script_hoist_with_frontmatter.snap │ │ │ ├── script_hoist_without_frontmatter.snap │ │ │ ├── script_in__head_.snap │ │ │ ├── script_in_expression.snap │ │ │ ├── script_inline.snap │ │ │ ├── script_mixed_handled_and_inline.snap │ │ │ ├── script_multiple.snap │ │ │ ├── scriptinline.snap │ │ │ ├── select_in_form.snap │ │ │ ├── select_map_expression.snap │ │ │ ├── select_nested_option.snap │ │ │ ├── select_option_expression.snap │ │ │ ├── selectedcontent_element_in_customizable_select.snap │ │ │ ├── selectedcontent_self-closing_element.snap │ │ │ ├── self-closing_td.snap │ │ │ ├── set_html.snap │ │ │ ├── set_html_and_set_text.snap │ │ │ ├── set_html_on_Component.snap │ │ │ ├── set_html_on_Component_with_quoted_attribute.snap │ │ │ ├── set_html_on_Component_with_template_literal_attribute_with_variable.snap │ │ │ ├── set_html_on_Component_with_template_literal_attribute_without_variable.snap │ │ │ ├── set_html_on_Fragment.snap │ │ │ ├── set_html_on_Fragment_with_quoted_attribute.snap │ │ │ ├── set_html_on_Fragment_with_template_literal_attribute_with_variable.snap │ │ │ ├── set_html_on_Fragment_with_template_literal_attribute_without_variable.snap │ │ │ ├── set_html_on_custom-element.snap │ │ │ ├── set_html_on_custom-element_with_quoted_attribute.snap │ │ │ ├── set_html_on_custom-element_with_template_literal_attribute_with_variable.snap │ │ │ ├── set_html_on_custom-element_with_template_literal_attribute_without_variable.snap │ │ │ ├── set_html_on_empty_tag.snap │ │ │ ├── set_html_on_empty_tag_with_quoted_attribute.snap │ │ │ ├── set_html_on_empty_tag_with_template_literal_attribute_with_variable.snap │ │ │ ├── set_html_on_empty_tag_with_template_literal_attribute_without_variable.snap │ │ │ ├── set_html_on_script.snap │ │ │ ├── set_html_on_script_with_quoted_attribute.snap │ │ │ ├── set_html_on_script_with_template_literal_attribute_with_variable.snap │ │ │ ├── set_html_on_script_with_template_literal_attribute_without_variable.snap │ │ │ ├── set_html_on_self-closing_tag.snap │ │ │ ├── set_html_on_self-closing_tag_with_quoted_attribute.snap │ │ │ ├── set_html_on_self-closing_tag_with_template_literal_attribute_with_variable.snap │ │ │ ├── set_html_on_self-closing_tag_with_template_literal_attribute_without_variable.snap │ │ │ ├── set_html_on_style.snap │ │ │ ├── set_html_on_style_with_quoted_attribute.snap │ │ │ ├── set_html_on_style_with_template_literal_attribute_with_variable.snap │ │ │ ├── set_html_on_style_with_template_literal_attribute_without_variable.snap │ │ │ ├── set_html_on_tag_with_children.snap │ │ │ ├── set_html_on_tag_with_children_and_quoted_attribute.snap │ │ │ ├── set_html_on_tag_with_children_and_template_literal_attribute_with_variable.snap │ │ │ ├── set_html_on_tag_with_children_and_template_literal_attribute_without_variable.snap │ │ │ ├── set_html_on_tag_with_empty_whitespace.snap │ │ │ ├── set_html_on_tag_with_empty_whitespace_and_quoted_attribute.snap │ │ │ ├── set_html_on_tag_with_empty_whitespace_and_template_literal_attribute_with_variable.snap │ │ │ ├── set_html_on_tag_with_empty_whitespace_and_template_literal_attribute_without_variable.snap │ │ │ ├── set_html_with_other_attributes.snap │ │ │ ├── set_html_with_quoted_attribute.snap │ │ │ ├── set_html_with_quoted_attribute_and_other_attributes.snap │ │ │ ├── set_html_with_template_literal_attribute_with_variable.snap │ │ │ ├── set_html_with_template_literal_attribute_with_variable_and_other_attributes.snap │ │ │ ├── set_html_with_template_literal_attribute_without_variable.snap │ │ │ ├── set_html_with_template_literal_attribute_without_variable_and_other_attributes.snap │ │ │ ├── set_text.snap │ │ │ ├── set_text_on_Component.snap │ │ │ ├── set_text_on_Component_with_quoted_attribute.snap │ │ │ ├── set_text_on_Component_with_template_literal_attribute_with_variable.snap │ │ │ ├── set_text_on_Component_with_template_literal_attribute_without_variable.snap │ │ │ ├── set_text_on_custom-element.snap │ │ │ ├── set_text_on_custom-element_with_quoted_attribute.snap │ │ │ ├── set_text_on_custom-element_with_template_literal_attribute_with_variable.snap │ │ │ ├── set_text_on_custom-element_with_template_literal_attribute_without_variable.snap │ │ │ ├── set_text_with_quoted_attribute.snap │ │ │ ├── set_text_with_template_literal_attribute_with_variable.snap │ │ │ ├── set_text_with_template_literal_attribute_without_variable.snap │ │ │ ├── sibling_expressions.snap │ │ │ ├── simple_ternary.snap │ │ │ ├── slot_inside_of_Base.snap │ │ │ ├── slot_with_fallback.snap │ │ │ ├── slot_with_fallback_II.snap │ │ │ ├── slot_with_fallback_III.snap │ │ │ ├── slot_with_quoted_attributes.snap │ │ │ ├── slots__basic_.snap │ │ │ ├── slots__dynamic_name_.snap │ │ │ ├── slots__expression_.snap │ │ │ ├── slots__named_only_.snap │ │ │ ├── slots__no_comments_.snap │ │ │ ├── small_expression.snap │ │ │ ├── solidus_in_template_literal_expression.snap │ │ │ ├── spread_with_double_quotation_marks.snap │ │ │ ├── spread_with_style_but_no_explicit_class.snap │ │ │ ├── spread_without_style_or_class.snap │ │ │ ├── styles__no_frontmatter_.snap │ │ │ ├── svg_expressions.snap │ │ │ ├── table.snap │ │ │ ├── table_II.snap │ │ │ ├── table_III.snap │ │ │ ├── table_IV.snap │ │ │ ├── table_caption_expression.snap │ │ │ ├── table_expression_with_trailing_div.snap │ │ │ ├── table_expressions__no_implicit_tbody_.snap │ │ │ ├── table_simple_case.snap │ │ │ ├── table_slot_I.snap │ │ │ ├── table_slot_II.snap │ │ │ ├── table_slot_III.snap │ │ │ ├── table_slot_IV.snap │ │ │ ├── table_slot_V.snap │ │ │ ├── table_with_expression_in__th_.snap │ │ │ ├── tbody_expressions.snap │ │ │ ├── tbody_expressions_2.snap │ │ │ ├── tbody_expressions_3.snap │ │ │ ├── td_expressions.snap │ │ │ ├── td_expressions_II.snap │ │ │ ├── template_literal_attribute_on_component.snap │ │ │ ├── template_literal_attribute_with_variable_on_component.snap │ │ │ ├── ternary_component.snap │ │ │ ├── ternary_layout.snap │ │ │ ├── ternary_slot.snap │ │ │ ├── text_after_title_expression.snap │ │ │ ├── text_after_title_expressions.snap │ │ │ ├── text_only.snap │ │ │ ├── textarea.snap │ │ │ ├── textarea_in_form.snap │ │ │ ├── textarea_inside_expression.snap │ │ │ ├── th_expressions.snap │ │ │ ├── tr_only.snap │ │ │ ├── trailing_expression.snap │ │ │ ├── transition_animate_on_Component.snap │ │ │ ├── transition_animate_with_an_expression.snap │ │ │ ├── transition_name_with_an_expression.snap │ │ │ ├── transition_name_with_an_template_literal.snap │ │ │ ├── transition_persist-props_converted_to_a_data_attribute.snap │ │ │ ├── transition_persist_converted_to_a_data_attribute.snap │ │ │ ├── transition_persist_uses_transition_name_if_defined.snap │ │ │ ├── type_import.snap │ │ │ ├── unusual_line_terminator_I.snap │ │ │ ├── unusual_line_terminator_II.snap │ │ │ └── user-defined__implicit__is_printed.snap │ │ ├── __printer_json__/ │ │ │ ├── Comment.snap │ │ │ ├── Comment_preserves_whitespace.snap │ │ │ ├── Component.snap │ │ │ ├── Doctype.snap │ │ │ ├── Fragment_Literal.snap │ │ │ ├── Fragment_Shorthand.snap │ │ │ ├── Frontmatter.snap │ │ │ ├── JSON_escape.snap │ │ │ ├── Preserve_namespaces.snap │ │ │ ├── basic.snap │ │ │ ├── custom-element.snap │ │ │ ├── element_with_unterminated_double_quote_attribute.snap │ │ │ ├── element_with_unterminated_single_quote_attribute.snap │ │ │ ├── element_with_unterminated_template_literal_attribute.snap │ │ │ ├── expression.snap │ │ │ ├── jsx_comment_between_doctype_and_html.snap │ │ │ ├── style_after_body_with_component_in_head_and_body.snap │ │ │ ├── style_after_empty_html.snap │ │ │ ├── style_after_html.snap │ │ │ ├── style_after_html_with_component_in_head.snap │ │ │ ├── style_after_html_with_component_in_head_and_body.snap │ │ │ ├── style_before_html.snap │ │ │ ├── style_in_body.snap │ │ │ └── style_in_html.snap │ │ ├── print-css.go │ │ ├── print-to-js.go │ │ ├── print-to-json.go │ │ ├── print-to-tsx.go │ │ ├── print-to-tsx_test.go │ │ ├── printer.go │ │ ├── printer_css_test.go │ │ ├── printer_test.go │ │ └── utils.go │ ├── sourcemap/ │ │ └── sourcemap.go │ ├── t/ │ │ └── t.go │ ├── test_utils/ │ │ └── test_utils.go │ ├── token.go │ ├── token_test.go │ ├── transform/ │ │ ├── scope-css.go │ │ ├── scope-css_test.go │ │ ├── scope-html.go │ │ ├── scope-html_test.go │ │ ├── transform.go │ │ ├── transform_test.go │ │ └── utils.go │ └── xxhash/ │ ├── LICENSE.txt │ ├── xxhash.go │ └── xxhash_other.go ├── internal_wasm/ │ └── utils/ │ └── utils.go ├── lib/ │ └── esbuild/ │ ├── LICENSE.md │ ├── ast/ │ │ └── ast.go │ ├── compat/ │ │ ├── compat.go │ │ ├── css_table.go │ │ └── js_table.go │ ├── config/ │ │ ├── config.go │ │ └── globals.go │ ├── css_ast/ │ │ ├── css_ast.go │ │ └── css_decl_table.go │ ├── css_lexer/ │ │ ├── css_lexer.go │ │ └── css_lexer_test.go │ ├── css_parser/ │ │ ├── css_decls.go │ │ ├── css_decls_border_radius.go │ │ ├── css_decls_box.go │ │ ├── css_decls_box_shadow.go │ │ ├── css_decls_color.go │ │ ├── css_decls_font.go │ │ ├── css_decls_font_family.go │ │ ├── css_decls_font_weight.go │ │ ├── css_decls_transform.go │ │ ├── css_parser.go │ │ ├── css_parser_selector.go │ │ ├── css_parser_test.go │ │ └── css_reduce_calc.go │ ├── css_printer/ │ │ ├── astro_features.go │ │ ├── css_printer.go │ │ └── css_printer_test.go │ ├── esbuild.go │ ├── helpers/ │ │ ├── bitset.go │ │ ├── comment.go │ │ ├── hash.go │ │ ├── joiner.go │ │ ├── mime.go │ │ ├── path.go │ │ ├── serializer.go │ │ ├── stack.go │ │ ├── timer.go │ │ ├── typos.go │ │ └── utf.go │ ├── logger/ │ │ ├── logger.go │ │ ├── logger_darwin.go │ │ ├── logger_linux.go │ │ ├── logger_other.go │ │ └── logger_windows.go │ ├── sourcemap/ │ │ └── sourcemap.go │ └── test/ │ ├── diff.go │ └── util.go ├── package.json ├── packages/ │ └── compiler/ │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── browser/ │ │ │ ├── index.ts │ │ │ ├── utils.ts │ │ │ └── wasm_exec.ts │ │ ├── node/ │ │ │ ├── index.ts │ │ │ ├── sync.ts │ │ │ ├── utils.ts │ │ │ └── wasm_exec.ts │ │ └── shared/ │ │ ├── ast.ts │ │ ├── diagnostics.ts │ │ └── types.ts │ ├── sync.d.ts │ ├── test/ │ │ ├── bad-styles/ │ │ │ ├── sass.ts │ │ │ └── unclosed-style.ts │ │ ├── basic/ │ │ │ ├── body-after-head-component.ts │ │ │ ├── body-expression.ts │ │ │ ├── comment.ts │ │ │ ├── component-metadata/ │ │ │ │ └── index.ts │ │ │ ├── component-name.ts │ │ │ ├── export.ts │ │ │ ├── expression-then-node.ts │ │ │ ├── expressions.ts │ │ │ ├── fragment.ts │ │ │ ├── get-static-paths.ts │ │ │ ├── head-injection.ts │ │ │ ├── lt-gt-text.ts │ │ │ ├── null-chars.ts │ │ │ ├── props-interface.ts │ │ │ ├── script-before-html.ts │ │ │ ├── script-fragment.ts │ │ │ ├── top-level-expressions.ts │ │ │ ├── trailing-newline.ts │ │ │ ├── trailing-space.ts │ │ │ └── trailing-spaces-ii.ts │ │ ├── client-directive/ │ │ │ ├── special-characters.ts │ │ │ └── warn.ts │ │ ├── compact/ │ │ │ └── minify.ts │ │ ├── css-order/ │ │ │ ├── astro-styles.ts │ │ │ └── imported-styles.ts │ │ ├── errors/ │ │ │ ├── client-only-unfound.ts │ │ │ ├── define-vars.ts │ │ │ ├── fragment-shorthand.ts │ │ │ ├── html-comment.ts │ │ │ ├── invalid-spread.ts │ │ │ ├── jsx-comment.ts │ │ │ └── missing-frontmatter-fence.ts │ │ ├── head-metadata/ │ │ │ ├── with-head.ts │ │ │ └── without-head.ts │ │ ├── js-sourcemaps/ │ │ │ ├── complex-frontmatter.ts │ │ │ ├── deprecated.ts │ │ │ ├── error.ts │ │ │ ├── frontmatter.ts │ │ │ ├── hover.ts │ │ │ ├── module.ts │ │ │ ├── script.ts │ │ │ ├── template.ts │ │ │ └── windows-linereturns.ts │ │ ├── parse/ │ │ │ ├── ast.ts │ │ │ ├── client-component-unfound.ts │ │ │ ├── escaping.ts │ │ │ ├── fragment.ts │ │ │ ├── literal.ts │ │ │ ├── multibyte-characters.ts │ │ │ ├── orphan-head.ts │ │ │ ├── orphan-slot.ts │ │ │ ├── position.ts │ │ │ └── serialize.ts │ │ ├── resolve-path/ │ │ │ └── preserve.ts │ │ ├── scope/ │ │ │ └── same-source.ts │ │ ├── scripts/ │ │ │ ├── isinline-hint.ts │ │ │ └── order.ts │ │ ├── server-islands/ │ │ │ └── meta.ts │ │ ├── slot-result/ │ │ │ └── result.ts │ │ ├── static-extraction/ │ │ │ ├── css.ts │ │ │ └── hoist-expression.ts │ │ ├── stress/ │ │ │ └── index.ts │ │ ├── styles/ │ │ │ ├── define-vars.ts │ │ │ ├── emit-scope.ts │ │ │ ├── empty-style.ts │ │ │ ├── hash.ts │ │ │ └── sass.ts │ │ ├── table/ │ │ │ ├── components.ts │ │ │ ├── expressions.ts │ │ │ └── in-expression.ts │ │ ├── teardown/ │ │ │ └── parse.ts │ │ ├── transition/ │ │ │ ├── data-astro.ts │ │ │ └── meta.ts │ │ ├── tsx/ │ │ │ ├── basic.ts │ │ │ ├── comment-whitespace.ts │ │ │ ├── complex-generics.ts │ │ │ ├── escape.ts │ │ │ ├── line-terminator.ts │ │ │ ├── literal-style-tag.ts │ │ │ ├── meta.ts │ │ │ ├── nested-generics.ts │ │ │ ├── non-latin.ts │ │ │ ├── props-and-getStaticPaths.ts │ │ │ ├── props.ts │ │ │ ├── raw.ts │ │ │ ├── script.ts │ │ │ └── top-level-returns.ts │ │ ├── tsx-errors/ │ │ │ ├── eof.ts │ │ │ ├── fragment-shorthand.ts │ │ │ └── unfinished-component.ts │ │ ├── tsx-sourcemaps/ │ │ │ ├── 404.ts │ │ │ ├── attributes.ts │ │ │ ├── deprecated.ts │ │ │ ├── error.ts │ │ │ ├── frontmatter.ts │ │ │ ├── hover.ts │ │ │ ├── module.ts │ │ │ ├── multibyte.ts │ │ │ ├── script.ts │ │ │ ├── tags.ts │ │ │ ├── template-windows.ts │ │ │ ├── template.ts │ │ │ └── unfinished-literal.ts │ │ └── utils.ts │ ├── tsconfig.json │ ├── tsup.config.ts │ ├── types.d.ts │ └── utils.d.ts └── pnpm-workspace.yaml
SYMBOL INDEX (1884 symbols across 154 files)
FILE: cmd/astro-wasm/astro-wasm.go
function main (line 25) | func main() {
function jsString (line 35) | func jsString(j js.Value) string {
function jsBoolOptional (line 42) | func jsBoolOptional(j js.Value, defaultValue bool) bool {
function jsBool (line 49) | func jsBool(j js.Value) bool {
function makeParseOptions (line 56) | func makeParseOptions(options js.Value) t.ParseOptions {
function makeTransformOptions (line 75) | func makeTransformOptions(options js.Value) transform.TransformOptions {
function makeTSXOptions (line 154) | func makeTSXOptions(options js.Value) printer.TSXOptions {
type RawSourceMap (line 164) | type RawSourceMap struct
type HoistedScript (line 173) | type HoistedScript struct
type HydratedComponent (line 180) | type HydratedComponent struct
type ParseResult (line 187) | type ParseResult struct
type TSXResult (line 192) | type TSXResult struct
type TransformResult (line 199) | type TransformResult struct
function preprocessStyle (line 215) | func preprocessStyle(i int, style *astro.Node, transformOptions transfor...
function Parse (line 241) | func Parse() any {
function ConvertToTSX (line 266) | func ConvertToTSX() any {
function Transform (line 302) | func Transform() any {
function createSourceMapString (line 488) | func createSourceMapString(source string, result printer.PrintResult, tr...
function createExternalSourceMap (line 505) | func createExternalSourceMap(source string, transformResult *TransformRe...
function createInlineSourceMap (line 511) | func createInlineSourceMap(source string, transformResult *TransformResu...
function createBothSourceMap (line 519) | func createBothSourceMap(source string, transformResult *TransformResult...
FILE: internal/const.go
function isSpecialElement (line 97) | func isSpecialElement(element *Node) bool {
function IsKnownDirective (line 125) | func IsKnownDirective(element *Node, attr *Attribute) bool {
FILE: internal/doctype.go
function parseDoctype (line 16) | func parseDoctype(s string) (n *Node, quirks bool) {
FILE: internal/entity.go
constant longestEntityWithoutSemicolon (line 8) | longestEntityWithoutSemicolon = 6
FILE: internal/escape.go
type writer (line 14) | type writer interface
function unescapeEntity (line 64) | func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 ...
function unescape (line 174) | func unescape(b []byte, attribute bool) []byte {
constant escapedChars (line 193) | escapedChars = "&'<>\"\r"
function escape (line 195) | func escape(w writer, s string) error {
function EscapeString (line 234) | func EscapeString(s string) string {
function UnescapeString (line 248) | func UnescapeString(s string) string {
FILE: internal/foreign.go
function adjustAttributeNames (line 11) | func adjustAttributeNames(aa []Attribute, nameMap map[string]string) {
function adjustForeignAttributes (line 19) | func adjustForeignAttributes(aa []Attribute) {
function htmlIntegrationPoint (line 34) | func htmlIntegrationPoint(n *Node) bool {
function mathMLTextIntegrationPoint (line 59) | func mathMLTextIntegrationPoint(n *Node) bool {
FILE: internal/handler/handler.go
type Handler (line 11) | type Handler struct
method HasErrors (line 33) | func (h *Handler) HasErrors() bool {
method AppendError (line 37) | func (h *Handler) AppendError(err error) {
method AppendWarning (line 41) | func (h *Handler) AppendWarning(err error) {
method AppendInfo (line 45) | func (h *Handler) AppendInfo(err error) {
method AppendHint (line 49) | func (h *Handler) AppendHint(err error) {
method Errors (line 53) | func (h *Handler) Errors() []loc.DiagnosticMessage {
method Warnings (line 63) | func (h *Handler) Warnings() []loc.DiagnosticMessage {
method Diagnostics (line 73) | func (h *Handler) Diagnostics() []loc.DiagnosticMessage {
function NewHandler (line 21) | func NewHandler(sourcetext string, filename string) *Handler {
function ErrorToMessage (line 98) | func ErrorToMessage(h *Handler, severity loc.DiagnosticSeverity, err err...
FILE: internal/hash.go
function HashString (line 10) | func HashString(str string) string {
FILE: internal/helpers/joiner.go
type Joiner (line 12) | type Joiner struct
method AddString (line 29) | func (j *Joiner) AddString(data string) {
method AddBytes (line 37) | func (j *Joiner) AddBytes(data []byte) {
method LastByte (line 45) | func (j *Joiner) LastByte() byte {
method Length (line 49) | func (j *Joiner) Length() uint32 {
method EnsureNewlineAtEnd (line 53) | func (j *Joiner) EnsureNewlineAtEnd() {
method Done (line 59) | func (j *Joiner) Done() []byte {
method Contains (line 74) | func (j *Joiner) Contains(s string, b []byte) bool {
type joinerString (line 19) | type joinerString struct
type joinerBytes (line 24) | type joinerBytes struct
FILE: internal/helpers/js_comment_utils.go
function peekIs (line 7) | func peekIs(input string, cur int, assert byte) bool {
function RemoveComments (line 12) | func RemoveComments(input string) string {
FILE: internal/js_scanner/js_scanner.go
function FindTopLevelReturns (line 21) | func FindTopLevelReturns(source []byte) []int {
type HoistedScripts (line 215) | type HoistedScripts struct
function HoistExports (line 222) | func HoistExports(source []byte) HoistedScripts {
function isKeyword (line 428) | func isKeyword(value []byte) bool {
function isPropsAliasing (line 434) | func isPropsAliasing(idents []string) bool {
function HoistImports (line 438) | func HoistImports(source []byte) HoistedScripts {
function HasGetStaticPaths (line 461) | func HasGetStaticPaths(source []byte) bool {
type Props (line 476) | type Props struct
function GetPropsType (line 482) | func GetPropsType(source []byte) Props {
function IsIdentifier (line 647) | func IsIdentifier(value []byte) bool {
function GetObjectKeys (line 664) | func GetObjectKeys(source []byte) [][]byte {
type Import (line 735) | type Import struct
type ImportStatement (line 742) | type ImportStatement struct
type ImportState (line 751) | type ImportState
constant ImportDefault (line 754) | ImportDefault ImportState = iota
constant ImportNamed (line 755) | ImportNamed
function NextImportStatement (line 758) | func NextImportStatement(source []byte, pos int) (int, ImportStatement) {
function ExtractComponentExportName (line 935) | func ExtractComponentExportName(data string, imported Import) (string, b...
FILE: internal/js_scanner/js_scanner_test.go
type testcase (line 14) | type testcase struct
function TestFindTopLevelReturns (line 22) | func TestFindTopLevelReturns(t *testing.T) {
function fixturesHoistImport (line 177) | func fixturesHoistImport() []testcase {
function TestHoistImport (line 366) | func TestHoistImport(t *testing.T) {
function FuzzHoistImport (line 391) | func FuzzHoistImport(f *testing.F) {
function TestHoistExport (line 409) | func TestHoistExport(t *testing.T) {
type keytestcase (line 855) | type keytestcase struct
function TestGetObjectKeys (line 862) | func TestGetObjectKeys(t *testing.T) {
type propsTestCase (line 937) | type propsTestCase struct
function makeProps (line 944) | func makeProps(ident string, statement string, generics string) Props {
function getPropsTypeTestCases (line 953) | func getPropsTypeTestCases() []propsTestCase {
function assertPropsEqual (line 1010) | func assertPropsEqual(t *testing.T, got, want Props, source string) {
function TestGetPropsType (line 1025) | func TestGetPropsType(t *testing.T) {
FILE: internal/loc/diagnostics.go
type DiagnosticCode (line 3) | type DiagnosticCode
constant ERROR (line 6) | ERROR DiagnosticCode = 1000
constant ERROR_UNTERMINATED_JS_COMMENT (line 7) | ERROR_UNTERMINATED_JS_COMMENT DiagnosticCode = 1001
constant ERROR_FRAGMENT_SHORTHAND_ATTRS (line 8) | ERROR_FRAGMENT_SHORTHAND_ATTRS DiagnosticCode = 1002
constant ERROR_UNMATCHED_IMPORT (line 9) | ERROR_UNMATCHED_IMPORT DiagnosticCode = 1003
constant ERROR_UNSUPPORTED_SLOT_ATTRIBUTE (line 10) | ERROR_UNSUPPORTED_SLOT_ATTRIBUTE DiagnosticCode = 1004
constant ERROR_UNTERMINATED_STRING (line 11) | ERROR_UNTERMINATED_STRING DiagnosticCode = 1005
constant ERROR_MISSING_FRONTMATTER_FENCE (line 12) | ERROR_MISSING_FRONTMATTER_FENCE DiagnosticCode = 1006
constant WARNING (line 13) | WARNING DiagnosticCode = 2000
constant WARNING_UNTERMINATED_HTML_COMMENT (line 14) | WARNING_UNTERMINATED_HTML_COMMENT DiagnosticCode = 2001
constant WARNING_UNCLOSED_HTML_TAG (line 15) | WARNING_UNCLOSED_HTML_TAG DiagnosticCode = 2002
constant WARNING_DEPRECATED_DIRECTIVE (line 16) | WARNING_DEPRECATED_DIRECTIVE DiagnosticCode = 2003
constant WARNING_IGNORED_DIRECTIVE (line 17) | WARNING_IGNORED_DIRECTIVE DiagnosticCode = 2004
constant WARNING_UNSUPPORTED_EXPRESSION (line 18) | WARNING_UNSUPPORTED_EXPRESSION DiagnosticCode = 2005
constant WARNING_SET_WITH_CHILDREN (line 19) | WARNING_SET_WITH_CHILDREN DiagnosticCode = 2006
constant WARNING_CANNOT_DEFINE_VARS (line 20) | WARNING_CANNOT_DEFINE_VARS DiagnosticCode = 2007
constant WARNING_INVALID_SPREAD (line 21) | WARNING_INVALID_SPREAD DiagnosticCode = 2008
constant WARNING_UNEXPECTED_CHARACTER (line 22) | WARNING_UNEXPECTED_CHARACTER DiagnosticCode = 2009
constant WARNING_CANNOT_RERUN (line 23) | WARNING_CANNOT_RERUN DiagnosticCode = 2010
constant INFO (line 24) | INFO DiagnosticCode = 3000
constant HINT (line 25) | HINT DiagnosticCode = 4000
FILE: internal/loc/loc.go
type Loc (line 3) | type Loc struct
type Range (line 8) | type Range struct
method End (line 13) | func (r Range) End() int {
type Span (line 19) | type Span struct
type TSXRange (line 23) | type TSXRange struct
type DiagnosticSeverity (line 29) | type DiagnosticSeverity
constant ErrorType (line 32) | ErrorType DiagnosticSeverity = 1
constant WarningType (line 33) | WarningType DiagnosticSeverity = 2
constant InformationType (line 34) | InformationType DiagnosticSeverity = 3
constant HintType (line 35) | HintType DiagnosticSeverity = 4
type DiagnosticMessage (line 38) | type DiagnosticMessage struct
type DiagnosticLocation (line 46) | type DiagnosticLocation struct
type ErrorWithRange (line 53) | type ErrorWithRange struct
method Error (line 60) | func (e *ErrorWithRange) Error() string {
method ToMessage (line 64) | func (e *ErrorWithRange) ToMessage(location *DiagnosticLocation) Diagn...
FILE: internal/node.go
type NodeType (line 13) | type NodeType
method String (line 34) | func (t NodeType) String() string {
constant ErrorNode (line 16) | ErrorNode NodeType = iota
constant TextNode (line 17) | TextNode
constant DocumentNode (line 18) | DocumentNode
constant ElementNode (line 19) | ElementNode
constant CommentNode (line 20) | CommentNode
constant DoctypeNode (line 21) | DoctypeNode
constant RawNode (line 26) | RawNode
constant scopeMarkerNode (line 27) | scopeMarkerNode
constant FrontmatterNode (line 29) | FrontmatterNode
constant ExpressionNode (line 30) | ExpressionNode
constant RenderHeadNode (line 31) | RenderHeadNode
constant ImplicitNodeMarker (line 58) | ImplicitNodeMarker = "\x00implicit"
type HydratedComponentMetadata (line 66) | type HydratedComponentMetadata struct
type Node (line 82) | type Node struct
method InsertBefore (line 119) | func (n *Node) InsertBefore(newChild, oldChild *Node) {
method AppendChild (line 147) | func (n *Node) AppendChild(c *Node) {
method RemoveChild (line 166) | func (n *Node) RemoveChild(c *Node) {
method Closest (line 187) | func (n *Node) Closest(check func(*Node) bool) *Node {
method RemoveAttribute (line 210) | func (n *Node) RemoveAttribute(key string) {
method clone (line 233) | func (n *Node) clone() *Node {
function GetAttribute (line 201) | func GetAttribute(n *Node, key string) *Attribute {
function reparentChildren (line 220) | func reparentChildren(dst, src *Node) {
type nodeStack (line 249) | type nodeStack
method pop (line 252) | func (s *nodeStack) pop() *Node {
method top (line 263) | func (s *nodeStack) top() *Node {
method index (line 272) | func (s *nodeStack) index(n *Node) int {
method contains (line 282) | func (s *nodeStack) contains(a atom.Atom) bool {
method insert (line 292) | func (s *nodeStack) insert(i int, n *Node) {
method remove (line 299) | func (s *nodeStack) remove(n *Node) {
type insertionModeStack (line 310) | type insertionModeStack
method pop (line 312) | func (s *insertionModeStack) pop() (im insertionMode) {
method top (line 319) | func (s *insertionModeStack) top() insertionMode {
FILE: internal/parser.go
type parser (line 20) | type parser struct
method top (line 66) | func (p *parser) top() *Node {
method popUntil (line 111) | func (p *parser) popUntil(s scope, matchTags ...a.Atom) bool {
method indexOfElementInScope (line 122) | func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) i...
method elementInScope (line 168) | func (p *parser) elementInScope(s scope, matchTags ...a.Atom) bool {
method clearStackToContext (line 174) | func (p *parser) clearStackToContext(s scope) {
method parseGenericRawTextElement (line 204) | func (p *parser) parseGenericRawTextElement() {
method generateLoc (line 210) | func (p *parser) generateLoc() []loc.Loc {
method addLoc (line 222) | func (p *parser) addLoc() {
method generateImpliedEndTags (line 232) | func (p *parser) generateImpliedEndTags(exceptions ...string) {
method addChild (line 257) | func (p *parser) addChild(n *Node) {
method shouldFosterParent (line 271) | func (p *parser) shouldFosterParent() bool {
method fosterParent (line 283) | func (p *parser) fosterParent(n *Node) {
method addText (line 331) | func (p *parser) addText(text string) {
method addFrontmatter (line 357) | func (p *parser) addFrontmatter(empty bool) {
method addExpression (line 383) | func (p *parser) addExpression() {
method isInsideHead (line 418) | func (p *parser) isInsideHead() bool {
method addElement (line 430) | func (p *parser) addElement() {
method addFormattingElement (line 445) | func (p *parser) addFormattingElement() {
method clearActiveFormattingElements (line 492) | func (p *parser) clearActiveFormattingElements() {
method reconstructActiveFormattingElements (line 501) | func (p *parser) reconstructActiveFormattingElements() {
method acknowledgeSelfClosingTag (line 530) | func (p *parser) acknowledgeSelfClosingTag() {
method setOriginalIM (line 543) | func (p *parser) setOriginalIM() {
method resetInsertionMode (line 551) | func (p *parser) resetInsertionMode() {
method inTemplateFragmentContext (line 1611) | func (p *parser) inTemplateFragmentContext() bool {
method inBodyEndTagFormatting (line 1615) | func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom, tagName string) {
method inBodyEndTagOther (line 1771) | func (p *parser) inBodyEndTagOther(tagAtom a.Atom, tagName string) {
method adjustedCurrentNode (line 2985) | func (p *parser) adjustedCurrentNode() *Node {
method inForeignContent (line 2993) | func (p *parser) inForeignContent() bool {
method parseImpliedToken (line 3023) | func (p *parser) parseImpliedToken(t TokenType, dataAtom a.Atom, data ...
method parseCurrentToken (line 3038) | func (p *parser) parseCurrentToken() {
method parse (line 3062) | func (p *parser) parse() error {
type scope (line 82) | type scope
constant defaultScope (line 85) | defaultScope scope = iota
constant listItemScope (line 86) | listItemScope
constant buttonScope (line 87) | buttonScope
constant tableScope (line 88) | tableScope
constant tableRowScope (line 89) | tableRowScope
constant tableBodyScope (line 90) | tableBodyScope
constant selectScope (line 91) | selectScope
function isFragment (line 399) | func isFragment(data string) bool {
function isSlot (line 403) | func isSlot(data string) bool {
function isComponent (line 407) | func isComponent(data string) bool {
function isCustomElement (line 414) | func isCustomElement(data string) bool {
type insertionMode (line 538) | type insertionMode
constant whitespace (line 622) | whitespace = " \t\r\n\f"
function initialIM (line 625) | func initialIM(p *parser) bool {
function beforeHTMLIM (line 660) | func beforeHTMLIM(p *parser) bool {
function beforeHeadIM (line 729) | func beforeHeadIM(p *parser) bool {
function inHeadIM (line 784) | func inHeadIM(p *parser) bool {
function inHeadNoscriptIM (line 971) | func inHeadNoscriptIM(p *parser) bool {
function afterHeadIM (line 1020) | func afterHeadIM(p *parser) bool {
function copyAttributes (line 1091) | func copyAttributes(dst *Node, src Token) {
function removeImplicitMarker (line 1110) | func removeImplicitMarker(n *Node) {
function inBodyIM (line 1120) | func inBodyIM(p *parser) bool {
function textIM (line 1797) | func textIM(p *parser) bool {
function inTableIM (line 1837) | func inTableIM(p *parser) bool {
function inCaptionIM (line 1972) | func inCaptionIM(p *parser) bool {
function inColumnGroupIM (line 2032) | func inColumnGroupIM(p *parser) bool {
function inTableBodyIM (line 2108) | func inTableBodyIM(p *parser) bool {
function inRowIM (line 2177) | func inRowIM(p *parser) bool {
function inCellIM (line 2243) | func inCellIM(p *parser) bool {
function inSelectIM (line 2309) | func inSelectIM(p *parser) bool {
function inSelectInTableIM (line 2420) | func inSelectInTableIM(p *parser) bool {
function inTemplateIM (line 2447) | func inTemplateIM(p *parser) bool {
function afterBodyIM (line 2520) | func afterBodyIM(p *parser) bool {
function inFramesetIM (line 2564) | func inFramesetIM(p *parser) bool {
function afterFramesetIM (line 2615) | func afterFramesetIM(p *parser) bool {
function afterAfterBodyIM (line 2655) | func afterAfterBodyIM(p *parser) bool {
function afterAfterFramesetIM (line 2685) | func afterAfterFramesetIM(p *parser) bool {
function frontmatterIM (line 2722) | func frontmatterIM(p *parser) bool {
function inLiteralIM (line 2775) | func inLiteralIM(p *parser) bool {
function inExpressionIM (line 2816) | func inExpressionIM(p *parser) bool {
function ignoreTheRemainingTokens (line 2878) | func ignoreTheRemainingTokens(p *parser) bool {
function getExitLiteralFunc (line 2883) | func getExitLiteralFunc(p *parser) func() bool {
constant whitespaceOrNUL (line 2890) | whitespaceOrNUL = whitespace + "\x00"
function parseForeignContent (line 2893) | func parseForeignContent(p *parser) bool {
function Parse (line 3095) | func Parse(r io.Reader) (*Node, error) {
type ParseOption (line 3100) | type ParseOption
function ParseOptionWithHandler (line 3102) | func ParseOptionWithHandler(h *handler.Handler) ParseOption {
function ParseOptionEnableScripting (line 3113) | func ParseOptionEnableScripting(enable bool) ParseOption {
function ParseOptionEnableLiteral (line 3119) | func ParseOptionEnableLiteral(enable bool) ParseOption {
function ParseWithOptions (line 3126) | func ParseWithOptions(r io.Reader, opts ...ParseOption) (*Node, error) {
function ParseFragmentWithOptions (line 3152) | func ParseFragmentWithOptions(r io.Reader, context *Node, opts ...ParseO...
FILE: internal/parser_test.go
type ParserLocTest (line 12) | type ParserLocTest struct
function TestParserLocation (line 18) | func TestParserLocation(t *testing.T) {
function runParserLocTest (line 74) | func runParserLocTest(t *testing.T, suite []ParserLocTest) {
function walk (line 103) | func walk(doc *Node, cb func(*Node)) {
function findTargetNode (line 114) | func findTargetNode(doc *Node) *Node {
FILE: internal/print-to-source.go
function PrintToSource (line 8) | func PrintToSource(buf *strings.Builder, node *Node) {
FILE: internal/printer/print-css.go
type PrintCSSResult (line 11) | type PrintCSSResult struct
function PrintCSS (line 16) | func PrintCSS(sourcetext string, doc *Node, opts transform.TransformOpti...
FILE: internal/printer/print-to-js.go
function PrintToJS (line 48) | func PrintToJS(sourcetext string, n *Node, cssLen int, opts transform.Tr...
type RenderOptions (line 58) | type RenderOptions struct
type ExtractedStatement (line 68) | type ExtractedStatement struct
function printToJs (line 73) | func printToJs(p *printer, n *Node, cssLen int, opts transform.Transform...
constant whitespace (line 92) | whitespace = " \t\r\n\f"
function expressionOnlyHasComment (line 95) | func expressionOnlyHasComment(n *Node) bool {
function emptyTextNodeWithoutSiblings (line 109) | func emptyTextNodeWithoutSiblings(n *Node) bool {
function render1 (line 120) | func render1(p *printer, n *Node, opts RenderOptions) {
FILE: internal/printer/print-to-json.go
type ASTPosition (line 15) | type ASTPosition struct
type ASTPoint (line 20) | type ASTPoint struct
type ASTNode (line 26) | type ASTNode struct
method String (line 56) | func (n ASTNode) String() string {
function escapeForJSON (line 40) | func escapeForJSON(value string) string {
function PrintToJSON (line 108) | func PrintToJSON(sourcetext string, n *Node, opts t.ParseOptions) PrintR...
function locToPoint (line 121) | func locToPoint(p *printer, loc loc.Loc) ASTPoint {
function positionAt (line 134) | func positionAt(p *printer, n *Node, opts t.ParseOptions) ASTPosition {
function attrPositionAt (line 177) | func attrPositionAt(p *printer, n *Attribute, opts t.ParseOptions) ASTPo...
function renderNode (line 190) | func renderNode(p *printer, parent *ASTNode, n *Node, opts t.ParseOption...
FILE: internal/printer/print-to-tsx.go
function getTSXPrefix (line 20) | func getTSXPrefix() string {
type TSXOptions (line 24) | type TSXOptions struct
function PrintToTSX (line 29) | func PrintToTSX(sourcetext string, n *Node, opts TSXOptions, transformOp...
function finalizeRanges (line 45) | func finalizeRanges(content string, ranges TSXRanges) TSXRanges {
type TSXRanges (line 63) | type TSXRanges struct
function getStyleLangFromAttrs (line 158) | func getStyleLangFromAttrs(attrs []astro.Attribute) string {
function getScriptTypeFromAttrs (line 178) | func getScriptTypeFromAttrs(attrs []astro.Attribute) string {
type TSXExtractedTag (line 217) | type TSXExtractedTag struct
function isScript (line 224) | func isScript(p *astro.Node) bool {
function isStyle (line 228) | func isStyle(p *astro.Node) bool {
function isRawText (line 233) | func isRawText(p *astro.Node) bool {
function isValidTSXAttribute (line 259) | func isValidTSXAttribute(a Attribute) bool {
function isValidFirstRune (line 285) | func isValidFirstRune(r rune) bool {
type TextType (line 296) | type TextType
constant RawText (line 299) | RawText TextType = iota
constant Text (line 300) | Text
constant ScriptText (line 301) | ScriptText
constant JsonScriptText (line 302) | JsonScriptText
constant UnknownScriptText (line 303) | UnknownScriptText
constant StyleText (line 304) | StyleText
function getTextType (line 307) | func getTextType(n *astro.Node) TextType {
function renderTsx (line 333) | func renderTsx(p *printer, n *Node, o *TSXOptions) {
FILE: internal/printer/print-to-tsx_test.go
function BenchmarkPrintToTSX (line 13) | func BenchmarkPrintToTSX(b *testing.B) {
FILE: internal/printer/printer.go
type PrintResult (line 19) | type PrintResult struct
type printer (line 26) | type printer struct
method print (line 65) | func (p *printer) print(text string) {
method printf (line 69) | func (p *printer) printf(format string, a ...interface{}) {
method println (line 73) | func (p *printer) println(text string) {
method setTSXFrontmatterRange (line 77) | func (p *printer) setTSXFrontmatterRange(frontmatterRange loc.TSXRange) {
method setTSXBodyRange (line 81) | func (p *printer) setTSXBodyRange(componentRange loc.TSXRange) {
method addTSXScript (line 85) | func (p *printer) addTSXScript(start int, end int, content string, scr...
method addTSXStyle (line 96) | func (p *printer) addTSXStyle(start int, end int, content string, styl...
method getAsyncFuncPrefix (line 108) | func (p *printer) getAsyncFuncPrefix() string {
method printTextWithSourcemap (line 117) | func (p *printer) printTextWithSourcemap(text string, l loc.Loc) {
method printEscapedJSXTextWithSourcemap (line 142) | func (p *printer) printEscapedJSXTextWithSourcemap(text string, l loc....
method printInternalImports (line 177) | func (p *printer) printInternalImports(importSpecifier string, opts *R...
method printCSSImports (line 232) | func (p *printer) printCSSImports(cssLen int) {
method printRenderHead (line 251) | func (p *printer) printRenderHead() {
method printMaybeRenderHead (line 256) | func (p *printer) printMaybeRenderHead() {
method printReturnOpen (line 261) | func (p *printer) printReturnOpen() {
method printReturnClose (line 267) | func (p *printer) printReturnClose() {
method printTemplateLiteralOpen (line 273) | func (p *printer) printTemplateLiteralOpen() {
method printTemplateLiteralClose (line 278) | func (p *printer) printTemplateLiteralClose() {
method printDefineVarsOpen (line 291) | func (p *printer) printDefineVarsOpen(n *astro.Node) {
method printDefineVarsClose (line 329) | func (p *printer) printDefineVarsClose(n *astro.Node) {
method printFuncPrelude (line 342) | func (p *printer) printFuncPrelude(opts transform.TransformOptions, pr...
method printFuncSuffix (line 359) | func (p *printer) printFuncSuffix(opts transform.TransformOptions, n *...
method printAttributesToObject (line 394) | func (p *printer) printAttributesToObject(n *astro.Node) {
method printAttribute (line 455) | func (p *printer) printAttribute(attr astro.Attribute, n *astro.Node) {
method addSourceMapping (line 538) | func (p *printer) addSourceMapping(location loc.Loc) {
method addNilSourceMapping (line 547) | func (p *printer) addNilSourceMapping() {
method printTopLevelAstro (line 551) | func (p *printer) printTopLevelAstro(opts transform.TransformOptions) {
method printComponentMetadata (line 604) | func (p *printer) printComponentMetadata(doc *astro.Node, opts transfo...
function isTypeModuleScript (line 283) | func isTypeModuleScript(n *astro.Node) bool {
function remove (line 555) | func remove(slice []*astro.Node, node *astro.Node) []*astro.Node {
function maybeConvertTransition (line 565) | func maybeConvertTransition(n *astro.Node) {
FILE: internal/printer/printer_css_test.go
type testcase_css (line 13) | type testcase_css struct
function TestPrinterCSS (line 19) | func TestPrinterCSS(t *testing.T) {
FILE: internal/printer/printer_test.go
type testcase (line 49) | type testcase struct
type jsonTestcase (line 57) | type jsonTestcase struct
function TestPrinter (line 63) | func TestPrinter(t *testing.T) {
function TestPrintToJSON (line 2128) | func TestPrintToJSON(t *testing.T) {
FILE: internal/printer/utils.go
function escapeText (line 14) | func escapeText(src string) string {
function escapeBraces (line 22) | func escapeBraces(src string) string {
function escapeStarSlash (line 28) | func escapeStarSlash(src string) string {
function getTSXComponentName (line 32) | func getTSXComponentName(filename string) string {
function getComponentName (line 52) | func getComponentName(filename string) string {
function escapeExistingEscapes (line 68) | func escapeExistingEscapes(src string) string {
function escapeTSXExpressions (line 72) | func escapeTSXExpressions(src string) string {
function escapeInterpolation (line 78) | func escapeInterpolation(src string) string {
function escapeBackticks (line 84) | func escapeBackticks(src string) string {
function escapeSingleQuote (line 89) | func escapeSingleQuote(str string) string {
function escapeDoubleQuote (line 93) | func escapeDoubleQuote(str string) string {
function escapeNewlines (line 97) | func escapeNewlines(str string) string {
function encodeDoubleQuote (line 103) | func encodeDoubleQuote(str string) string {
function convertAttributeValue (line 107) | func convertAttributeValue(n *astro.Node, attrName string) string {
FILE: internal/sourcemap/sourcemap.go
type Mapping (line 11) | type Mapping struct
type SourceMap (line 20) | type SourceMap struct
method Find (line 38) | func (sm *SourceMap) Find(line int, column int) *Mapping {
type SourceContent (line 26) | type SourceContent struct
function EncodeVLQ (line 81) | func EncodeVLQ(value int) []byte {
function DecodeVLQ (line 116) | func DecodeVLQ(encoded []byte, start int) (int, int) {
function DecodeVLQUTF16 (line 146) | func DecodeVLQUTF16(encoded []uint16) (int, int, bool) {
type LineColumnOffset (line 184) | type LineColumnOffset struct
method ComesBefore (line 189) | func (a LineColumnOffset) ComesBefore(b LineColumnOffset) bool {
method Add (line 193) | func (a *LineColumnOffset) Add(b LineColumnOffset) {
method AdvanceBytes (line 202) | func (offset *LineColumnOffset) AdvanceBytes(bytes []byte) {
method AdvanceString (line 230) | func (offset *LineColumnOffset) AdvanceString(text string) {
type SourceMapPieces (line 256) | type SourceMapPieces struct
method HasContent (line 262) | func (pieces SourceMapPieces) HasContent() bool {
method Finalize (line 271) | func (pieces SourceMapPieces) Finalize(shifts []SourceMapShift) []byte {
type SourceMapShift (line 266) | type SourceMapShift struct
type SourceMapState (line 370) | type SourceMapState struct
function AppendSourceMapChunk (line 390) | func AppendSourceMapChunk(j *helpers.Joiner, prevEndState SourceMapState...
function appendMappingToBuffer (line 431) | func appendMappingToBuffer(buffer []byte, lastByte byte, prevState Sourc...
type LineOffsetTable (line 456) | type LineOffsetTable struct
function GenerateLineOffsetTables (line 474) | func GenerateLineOffsetTables(contents string, approximateLineCount int)...
type Chunk (line 560) | type Chunk struct
type ChunkBuilder (line 575) | type ChunkBuilder struct
method GetLineAndColumnForLocation (line 618) | func (b *ChunkBuilder) GetLineAndColumnForLocation(location loc.Loc) [...
method OffsetAt (line 651) | func (b *ChunkBuilder) OffsetAt(location loc.Loc) int {
method AddSourceMapping (line 667) | func (b *ChunkBuilder) AddSourceMapping(location loc.Loc, output []byt...
method GenerateChunk (line 735) | func (b *ChunkBuilder) GenerateChunk(output []byte) Chunk {
method updateGeneratedLineAndColumn (line 754) | func (b *ChunkBuilder) updateGeneratedLineAndColumn(output []byte) {
method appendMapping (line 799) | func (b *ChunkBuilder) appendMapping(currentState SourceMapState) {
method appendMappingWithoutRemapping (line 819) | func (b *ChunkBuilder) appendMappingWithoutRemapping(currentState Sour...
function MakeChunkBuilder (line 597) | func MakeChunkBuilder(inputSourceMap *SourceMap, lineOffsetTables []Line...
FILE: internal/t/t.go
type ParseOptions (line 3) | type ParseOptions struct
FILE: internal/test_utils/test_utils.go
function RemoveNewlines (line 13) | func RemoveNewlines(input string) string {
function Dedent (line 17) | func Dedent(input string) string {
function ANSIDiff (line 27) | func ANSIDiff(x, y interface{}, opts ...cmp.Option) string {
function RedactTestName (line 48) | func RedactTestName(testCaseName string) string {
type OutputKind (line 65) | type OutputKind
constant JsOutput (line 68) | JsOutput = iota
constant JsonOutput (line 69) | JsonOutput
constant CssOutput (line 70) | CssOutput
constant HtmlOutput (line 71) | HtmlOutput
constant JsxOutput (line 72) | JsxOutput
type SnapshotOptions (line 83) | type SnapshotOptions struct
function MakeSnapshot (line 99) | func MakeSnapshot(options *SnapshotOptions) {
FILE: internal/token.go
type TokenType (line 22) | type TokenType
method String (line 93) | func (t TokenType) String() string {
constant ErrorToken (line 26) | ErrorToken TokenType = iota
constant TextToken (line 28) | TextToken
constant StartTagToken (line 30) | StartTagToken
constant EndTagToken (line 32) | EndTagToken
constant SelfClosingTagToken (line 34) | SelfClosingTagToken
constant CommentToken (line 36) | CommentToken
constant DoctypeToken (line 38) | DoctypeToken
constant FrontmatterFenceToken (line 42) | FrontmatterFenceToken
constant StartExpressionToken (line 45) | StartExpressionToken
constant EndExpressionToken (line 47) | EndExpressionToken
type FrontmatterState (line 51) | type FrontmatterState
method String (line 119) | func (fm FrontmatterState) String() string {
constant FrontmatterInitial (line 54) | FrontmatterInitial FrontmatterState = iota
constant FrontmatterOpen (line 55) | FrontmatterOpen
constant FrontmatterClosed (line 56) | FrontmatterClosed
type AttributeType (line 60) | type AttributeType
method String (line 62) | func (t AttributeType) String() string {
constant QuotedAttribute (line 81) | QuotedAttribute AttributeType = iota
constant EmptyAttribute (line 82) | EmptyAttribute
constant ExpressionAttribute (line 83) | ExpressionAttribute
constant SpreadAttribute (line 84) | SpreadAttribute
constant ShorthandAttribute (line 85) | ShorthandAttribute
constant TemplateLiteralAttribute (line 86) | TemplateLiteralAttribute
type Attribute (line 137) | type Attribute struct
type Expression (line 147) | type Expression struct
type Token (line 158) | type Token struct
method tagString (line 167) | func (t Token) tagString() string {
method String (line 212) | func (t Token) String() string {
type Tokenizer (line 239) | type Tokenizer struct
method AllowCDATA (line 316) | func (z *Tokenizer) AllowCDATA(allowCDATA bool) {
method NextIsNotRawText (line 347) | func (z *Tokenizer) NextIsNotRawText() {
method Err (line 355) | func (z *Tokenizer) Err() error {
method readByte (line 366) | func (z *Tokenizer) readByte() byte {
method Buffered (line 377) | func (z *Tokenizer) Buffered() []byte {
method skipWhiteSpace (line 382) | func (z *Tokenizer) skipWhiteSpace() {
method readRawOrRCDATA (line 411) | func (z *Tokenizer) readRawOrRCDATA() {
method readRawEndTag (line 468) | func (z *Tokenizer) readRawEndTag() bool {
method readScript (line 506) | func (z *Tokenizer) readScript() {
method readHTMLComment (line 895) | func (z *Tokenizer) readHTMLComment() {
method readUntilCloseAngle (line 951) | func (z *Tokenizer) readUntilCloseAngle() {
method readString (line 967) | func (z *Tokenizer) readString(c byte) {
method readUntilChar (line 985) | func (z *Tokenizer) readUntilChar(chars []byte) {
method readCommentOrRegExp (line 1017) | func (z *Tokenizer) readCommentOrRegExp(boundaryChars []byte) {
method readMarkupDeclaration (line 1059) | func (z *Tokenizer) readMarkupDeclaration() TokenType {
method readDoctype (line 1088) | func (z *Tokenizer) readDoctype() bool {
method readCDATA (line 1113) | func (z *Tokenizer) readCDATA() bool {
method startTagIn (line 1152) | func (z *Tokenizer) startTagIn(ss ...string) bool {
method hasAttribute (line 1169) | func (z *Tokenizer) hasAttribute(s string) bool {
method readStartTag (line 1182) | func (z *Tokenizer) readStartTag() TokenType {
method readUnclosedTag (line 1252) | func (z *Tokenizer) readUnclosedTag() bool {
method readTag (line 1290) | func (z *Tokenizer) readTag(saveAttr bool) {
method readTagName (line 1353) | func (z *Tokenizer) readTagName() {
method readTagAttrKey (line 1375) | func (z *Tokenizer) readTagAttrKey() {
method readTagAttrVal (line 1419) | func (z *Tokenizer) readTagAttrVal() {
method allTagAttrExpressionsClosed (line 1558) | func (z *Tokenizer) allTagAttrExpressionsClosed() bool {
method readTagAttrExpression (line 1568) | func (z *Tokenizer) readTagAttrExpression() {
method Loc (line 1630) | func (z *Tokenizer) Loc() loc.Loc {
method isAtExpressionBoundary (line 1636) | func (z *Tokenizer) isAtExpressionBoundary() bool {
method trackExpressionElementStack (line 1643) | func (z *Tokenizer) trackExpressionElementStack() {
method Next (line 1676) | func (z *Tokenizer) Next() TokenType {
method Raw (line 2107) | func (z *Tokenizer) Raw() []byte {
method Text (line 2118) | func (z *Tokenizer) Text() []byte {
method TagName (line 2140) | func (z *Tokenizer) TagName() (name []byte, hasAttr bool) {
method TagAttr (line 2156) | func (z *Tokenizer) TagAttr() (key []byte, keyLoc loc.Loc, val []byte,...
method Token (line 2183) | func (z *Tokenizer) Token() Token {
function NewTokenizer (line 2216) | func NewTokenizer(r io.Reader) *Tokenizer {
function NewTokenizerFragment (line 2228) | func NewTokenizerFragment(r io.Reader, contextTag string) *Tokenizer {
FILE: internal/token_test.go
type TokenTypeTest (line 11) | type TokenTypeTest struct
type AttributeTest (line 17) | type AttributeTest struct
type LocTest (line 23) | type LocTest struct
function TestBasic (line 29) | func TestBasic(t *testing.T) {
function TestFrontmatter (line 518) | func TestFrontmatter(t *testing.T) {
function TestExpressions (line 703) | func TestExpressions(t *testing.T) {
function TestAttributes (line 871) | func TestAttributes(t *testing.T) {
function TestLoc (line 978) | func TestLoc(t *testing.T) {
function runTokenTypeTest (line 1013) | func runTokenTypeTest(t *testing.T, suite []TokenTypeTest) {
function runAttributeTypeTest (line 1034) | func runAttributeTypeTest(t *testing.T, suite []AttributeTest) {
function runTokenLocTest (line 1058) | func runTokenLocTest(t *testing.T, suite []LocTest) {
FILE: internal/transform/scope-css.go
function ScopeStyle (line 18) | func ScopeStyle(styles []*astro.Node, opts TransformOptions) bool {
function GetDefineVars (line 61) | func GetDefineVars(styles []*astro.Node) []string {
FILE: internal/transform/scope-css_test.go
function TestScopeStyle (line 11) | func TestScopeStyle(t *testing.T) {
FILE: internal/transform/scope-html.go
function ScopeElement (line 11) | func ScopeElement(n *astro.Node, opts TransformOptions) {
function AddDefineVars (line 19) | func AddDefineVars(n *astro.Node, values []string) bool {
function AnnotateElement (line 31) | func AnnotateElement(n *astro.Node, opts TransformOptions) {
function annotateElement (line 60) | func annotateElement(n *astro.Node, opts TransformOptions) {
function injectDefineVars (line 71) | func injectDefineVars(n *astro.Node, values []string) {
function injectScopedClass (line 116) | func injectScopedClass(n *astro.Node, opts TransformOptions) {
FILE: internal/transform/scope-html_test.go
function tests (line 13) | func tests() []struct {
function TestScopeHTML (line 102) | func TestScopeHTML(t *testing.T) {
function FuzzScopeHTML (line 131) | func FuzzScopeHTML(f *testing.F) {
FILE: internal/transform/transform.go
constant TRANSITION_ANIMATE (line 16) | TRANSITION_ANIMATE = "transition:animate"
constant TRANSITION_NAME (line 17) | TRANSITION_NAME = "transition:name"
constant TRANSITION_PERSIST (line 18) | TRANSITION_PERSIST = "transition:persist"
constant DATA_ASTRO_RELOAD (line 19) | DATA_ASTRO_RELOAD = "data-astro-reload"
constant TRANSITION_PERSIST_PROPS (line 20) | TRANSITION_PERSIST_PROPS = "transition:persist-props"
constant SERVER_DEFER (line 21) | SERVER_DEFER = "server:defer"
type TransformOptions (line 23) | type TransformOptions struct
function Transform (line 39) | func Transform(doc *astro.Node, opts TransformOptions, h *handler.Handle...
function ExtractStyles (line 114) | func ExtractStyles(doc *astro.Node, opts *TransformOptions) {
function removeNodeWithTrailingWhitespace (line 137) | func removeNodeWithTrailingWhitespace(n *astro.Node) {
function NormalizeSetDirectives (line 163) | func NormalizeSetDirectives(doc *astro.Node, h *handler.Handler) {
function TrimTrailingSpace (line 265) | func TrimTrailingSpace(doc *astro.Node) {
function isRawElement (line 294) | func isRawElement(n *astro.Node) bool {
function isWhitespaceInsensitiveElement (line 312) | func isWhitespaceInsensitiveElement(n *astro.Node) bool {
function collapseWhitespace (line 316) | func collapseWhitespace(doc *astro.Node) {
function WarnAboutMisplacedReload (line 385) | func WarnAboutMisplacedReload(n *astro.Node, h *handler.Handler) {
function WarnAboutRerunOnExternalESMs (line 404) | func WarnAboutRerunOnExternalESMs(n *astro.Node, h *handler.Handler) {
function ExtractScript (line 425) | func ExtractScript(doc *astro.Node, n *astro.Node, opts *TransformOption...
function HintAboutImplicitInlineDirective (line 481) | func HintAboutImplicitInlineDirective(n *astro.Node, h *handler.Handler) {
function AddComponentProps (line 494) | func AddComponentProps(doc *astro.Node, n *astro.Node, opts *TransformOp...
type ImportMatch (line 589) | type ImportMatch struct
function matchNodeToImportStatement (line 594) | func matchNodeToImportStatement(doc *astro.Node, n *astro.Node) *ImportM...
function ResolveIdForMatch (line 614) | func ResolveIdForMatch(id string, opts *TransformOptions) string {
function eachImportStatement (line 625) | func eachImportStatement(doc *astro.Node, cb func(stmt js_scanner.Import...
function walk (line 638) | func walk(doc *astro.Node, cb func(*astro.Node)) {
function mergeClassList (line 650) | func mergeClassList(doc *astro.Node, n *astro.Node, opts *TransformOptio...
function remove (line 688) | func remove(slice []astro.Attribute, s int) []astro.Attribute {
function getOrCreateTransitionScope (line 692) | func getOrCreateTransitionScope(n *astro.Node, opts *TransformOptions, i...
FILE: internal/transform/transform_test.go
function transformScopingFixtures (line 13) | func transformScopingFixtures() []struct {
function TestTransformScoping (line 175) | func TestTransformScoping(t *testing.T) {
function FuzzTransformScoping (line 205) | func FuzzTransformScoping(f *testing.F) {
function TestFullTransform (line 232) | func TestFullTransform(t *testing.T) {
function TestTransformTransitionAndHeadPropagationFlags (line 317) | func TestTransformTransitionAndHeadPropagationFlags(t *testing.T) {
function TestTransformTrailingSpace (line 365) | func TestTransformTrailingSpace(t *testing.T) {
function TestCompactTransform (line 420) | func TestCompactTransform(t *testing.T) {
function TestAnnotation (line 541) | func TestAnnotation(t *testing.T) {
function TestClassAndClassListMerging (line 587) | func TestClassAndClassListMerging(t *testing.T) {
FILE: internal/transform/utils.go
function hasTruthyAttr (line 8) | func hasTruthyAttr(n *astro.Node, key string) bool {
function HasSetDirective (line 20) | func HasSetDirective(n *astro.Node) bool {
function HasInlineDirective (line 24) | func HasInlineDirective(n *astro.Node) bool {
function AttrIndex (line 28) | func AttrIndex(n *astro.Node, key string) int {
function HasAttr (line 37) | func HasAttr(n *astro.Node, key string) bool {
function GetAttr (line 41) | func GetAttr(n *astro.Node, key string) *astro.Attribute {
function IsHoistable (line 50) | func IsHoistable(n *astro.Node, renderScript bool) bool {
function IsImplicitNode (line 62) | func IsImplicitNode(n *astro.Node) bool {
function IsImplicitNodeMarker (line 66) | func IsImplicitNodeMarker(attr astro.Attribute) bool {
function IsTopLevel (line 70) | func IsTopLevel(n *astro.Node) bool {
function GetQuotedAttr (line 87) | func GetQuotedAttr(n *astro.Node, key string) string {
FILE: internal/xxhash/xxhash.go
constant prime1 (line 12) | prime1 uint64 = 11400714785074694791
constant prime2 (line 13) | prime2 uint64 = 14029467366897019727
constant prime3 (line 14) | prime3 uint64 = 1609587929392839161
constant prime4 (line 15) | prime4 uint64 = 9650029242287828579
constant prime5 (line 16) | prime5 uint64 = 2870177450012600261
type Digest (line 34) | type Digest struct
method Reset (line 52) | func (d *Digest) Reset() {
method Size (line 62) | func (d *Digest) Size() int { return 8 }
method BlockSize (line 65) | func (d *Digest) BlockSize() int { return 32 }
method Write (line 68) | func (d *Digest) Write(b []byte) (n int, err error) {
method Sum (line 104) | func (d *Digest) Sum(b []byte) []byte {
method Sum64 (line 120) | func (d *Digest) Sum64() uint64 {
method MarshalBinary (line 168) | func (d *Digest) MarshalBinary() ([]byte, error) {
method UnmarshalBinary (line 182) | func (d *Digest) UnmarshalBinary(b []byte) error {
function New (line 45) | func New() *Digest {
constant magic (line 163) | magic = "xxh\x06"
constant marshaledSize (line 164) | marshaledSize = len(magic) + 8*5 + 32
function appendUint64 (line 200) | func appendUint64(b []byte, x uint64) []byte {
function consumeUint64 (line 206) | func consumeUint64(b []byte) ([]byte, uint64) {
function u64 (line 211) | func u64(b []byte) uint64 { return binary.LittleEndian.Uint64(b) }
function u32 (line 212) | func u32(b []byte) uint32 { return binary.LittleEndian.Uint32(b) }
function round (line 214) | func round(acc, input uint64) uint64 {
function mergeRound (line 221) | func mergeRound(acc, val uint64) uint64 {
function rol1 (line 228) | func rol1(x uint64) uint64 { return bits.RotateLeft64(x, 1) }
function rol7 (line 229) | func rol7(x uint64) uint64 { return bits.RotateLeft64(x, 7) }
function rol11 (line 230) | func rol11(x uint64) uint64 { return bits.RotateLeft64(x, 11) }
function rol12 (line 231) | func rol12(x uint64) uint64 { return bits.RotateLeft64(x, 12) }
function rol18 (line 232) | func rol18(x uint64) uint64 { return bits.RotateLeft64(x, 18) }
function rol23 (line 233) | func rol23(x uint64) uint64 { return bits.RotateLeft64(x, 23) }
function rol27 (line 234) | func rol27(x uint64) uint64 { return bits.RotateLeft64(x, 27) }
function rol31 (line 235) | func rol31(x uint64) uint64 { return bits.RotateLeft64(x, 31) }
FILE: internal/xxhash/xxhash_other.go
function Sum64 (line 4) | func Sum64(b []byte) uint64 {
function writeBlocks (line 62) | func writeBlocks(d *Digest, b []byte) int {
FILE: internal_wasm/utils/utils.go
function Await (line 16) | func Await(awaitable js.Value) ([]js.Value, []js.Value) {
function GetAttrs (line 47) | func GetAttrs(n *astro.Node) js.Value {
type JSError (line 60) | type JSError struct
method Value (line 65) | func (err *JSError) Value() js.Value {
function ErrorToJSError (line 69) | func ErrorToJSError(h *handler.Handler, err error) js.Value {
FILE: lib/esbuild/ast/ast.go
type ImportKind (line 9) | type ImportKind
method StringForMetafile (line 37) | func (kind ImportKind) StringForMetafile() string {
method IsFromCSS (line 58) | func (kind ImportKind) IsFromCSS() bool {
constant ImportEntryPoint (line 13) | ImportEntryPoint ImportKind = iota
constant ImportStmt (line 16) | ImportStmt
constant ImportRequire (line 19) | ImportRequire
constant ImportDynamic (line 22) | ImportDynamic
constant ImportRequireResolve (line 25) | ImportRequireResolve
constant ImportAt (line 28) | ImportAt
constant ImportAtConditional (line 31) | ImportAtConditional
constant ImportURL (line 34) | ImportURL
type ImportRecordFlags (line 62) | type ImportRecordFlags
method Has (line 115) | func (flags ImportRecordFlags) Has(flag ImportRecordFlags) bool {
constant IsUnused (line 68) | IsUnused ImportRecordFlags = 1 << iota
constant ContainsImportStar (line 73) | ContainsImportStar
constant ContainsDefaultAlias (line 77) | ContainsDefaultAlias
constant ContainsESModuleAlias (line 81) | ContainsESModuleAlias
constant CallsRunTimeReExportFn (line 85) | CallsRunTimeReExportFn
constant WrapWithToESM (line 88) | WrapWithToESM
constant WrapWithToCJS (line 91) | WrapWithToCJS
constant CallRuntimeRequire (line 94) | CallRuntimeRequire
constant HandlesImportErrors (line 106) | HandlesImportErrors
constant WasOriginallyBareImport (line 109) | WasOriginallyBareImport
constant IsExternalWithoutSideEffects (line 112) | IsExternalWithoutSideEffects
type ImportRecord (line 119) | type ImportRecord struct
type AssertEntry (line 136) | type AssertEntry struct
type Index32 (line 147) | type Index32 struct
method IsValid (line 155) | func (i Index32) IsValid() bool {
method GetIndex (line 159) | func (i Index32) GetIndex() uint32 {
function MakeIndex32 (line 151) | func MakeIndex32(index uint32) Index32 {
FILE: lib/esbuild/compat/compat.go
type v (line 3) | type v struct
function compareVersions (line 12) | func compareVersions(a v, b []int) int {
type versionRange (line 33) | type versionRange struct
function isVersionSupported (line 38) | func isVersionSupported(ranges []versionRange, version []int) bool {
FILE: lib/esbuild/compat/css_table.go
type CSSFeature (line 3) | type CSSFeature
method Has (line 21) | func (features CSSFeature) Has(feature CSSFeature) bool {
constant HexRGBA (line 6) | HexRGBA CSSFeature = 1 << iota
constant RebeccaPurple (line 8) | RebeccaPurple
constant Modern_RGB_HSL (line 15) | Modern_RGB_HSL
constant InsetProperty (line 17) | InsetProperty
constant Nesting (line 18) | Nesting
function UnsupportedCSSFeatures (line 63) | func UnsupportedCSSFeatures(constraints map[Engine][]int) (unsupported C...
FILE: lib/esbuild/compat/js_table.go
type Engine (line 5) | type Engine
method String (line 19) | func (e Engine) String() string {
constant Chrome (line 8) | Chrome Engine = iota
constant Edge (line 9) | Edge
constant ES (line 10) | ES
constant Firefox (line 11) | Firefox
constant IE (line 12) | IE
constant IOS (line 13) | IOS
constant Node (line 14) | Node
constant Opera (line 15) | Opera
constant Safari (line 16) | Safari
type JSFeature (line 43) | type JSFeature
method Has (line 94) | func (features JSFeature) Has(feature JSFeature) bool {
constant ArbitraryModuleNamespaceNames (line 46) | ArbitraryModuleNamespaceNames JSFeature = 1 << iota
constant ArraySpread (line 47) | ArraySpread
constant Arrow (line 48) | Arrow
constant AsyncAwait (line 49) | AsyncAwait
constant AsyncGenerator (line 50) | AsyncGenerator
constant BigInt (line 51) | BigInt
constant Class (line 52) | Class
constant ClassField (line 53) | ClassField
constant ClassPrivateAccessor (line 54) | ClassPrivateAccessor
constant ClassPrivateBrandCheck (line 55) | ClassPrivateBrandCheck
constant ClassPrivateField (line 56) | ClassPrivateField
constant ClassPrivateMethod (line 57) | ClassPrivateMethod
constant ClassPrivateStaticAccessor (line 58) | ClassPrivateStaticAccessor
constant ClassPrivateStaticField (line 59) | ClassPrivateStaticField
constant ClassPrivateStaticMethod (line 60) | ClassPrivateStaticMethod
constant ClassStaticBlocks (line 61) | ClassStaticBlocks
constant ClassStaticField (line 62) | ClassStaticField
constant Const (line 63) | Const
constant DefaultArgument (line 64) | DefaultArgument
constant Destructuring (line 65) | Destructuring
constant DynamicImport (line 66) | DynamicImport
constant ExponentOperator (line 67) | ExponentOperator
constant ExportStarAs (line 68) | ExportStarAs
constant ForAwait (line 69) | ForAwait
constant ForOf (line 70) | ForOf
constant Generator (line 71) | Generator
constant Hashbang (line 72) | Hashbang
constant ImportAssertions (line 73) | ImportAssertions
constant ImportMeta (line 74) | ImportMeta
constant Let (line 75) | Let
constant LogicalAssignment (line 76) | LogicalAssignment
constant NestedRestBinding (line 77) | NestedRestBinding
constant NewTarget (line 78) | NewTarget
constant NodeColonPrefixImport (line 79) | NodeColonPrefixImport
constant NodeColonPrefixRequire (line 80) | NodeColonPrefixRequire
constant NullishCoalescing (line 81) | NullishCoalescing
constant ObjectAccessors (line 82) | ObjectAccessors
constant ObjectExtensions (line 83) | ObjectExtensions
constant ObjectRestSpread (line 84) | ObjectRestSpread
constant OptionalCatchBinding (line 85) | OptionalCatchBinding
constant OptionalChain (line 86) | OptionalChain
constant RestArgument (line 87) | RestArgument
constant TemplateLiteral (line 88) | TemplateLiteral
constant TopLevelAwait (line 89) | TopLevelAwait
constant TypeofExoticObjectIsObject (line 90) | TypeofExoticObjectIsObject
constant UnicodeEscapes (line 91) | UnicodeEscapes
function UnsupportedJSFeatures (line 525) | func UnsupportedJSFeatures(constraints map[Engine][]int) (unsupported JS...
FILE: lib/esbuild/config/config.go
type JSXOptions (line 14) | type JSXOptions struct
type JSXExpr (line 21) | type JSXExpr struct
type TSOptions (line 25) | type TSOptions struct
type Platform (line 30) | type Platform
constant PlatformBrowser (line 33) | PlatformBrowser Platform = iota
constant PlatformNode (line 34) | PlatformNode
constant PlatformNeutral (line 35) | PlatformNeutral
type SourceMap (line 38) | type SourceMap
constant SourceMapNone (line 41) | SourceMapNone SourceMap = iota
constant SourceMapInline (line 42) | SourceMapInline
constant SourceMapLinkedWithComment (line 43) | SourceMapLinkedWithComment
constant SourceMapExternalWithoutComment (line 44) | SourceMapExternalWithoutComment
constant SourceMapInlineAndExternal (line 45) | SourceMapInlineAndExternal
type LegalComments (line 48) | type LegalComments
method HasExternalFile (line 58) | func (lc LegalComments) HasExternalFile() bool {
constant LegalCommentsInline (line 51) | LegalCommentsInline LegalComments = iota
constant LegalCommentsNone (line 52) | LegalCommentsNone
constant LegalCommentsEndOfFile (line 53) | LegalCommentsEndOfFile
constant LegalCommentsLinkedWithComment (line 54) | LegalCommentsLinkedWithComment
constant LegalCommentsExternalWithoutComment (line 55) | LegalCommentsExternalWithoutComment
type Loader (line 62) | type Loader
method IsTypeScript (line 81) | func (loader Loader) IsTypeScript() bool {
method CanHaveSourceMap (line 90) | func (loader Loader) CanHaveSourceMap() bool {
constant LoaderNone (line 65) | LoaderNone Loader = iota
constant LoaderJS (line 66) | LoaderJS
constant LoaderJSX (line 67) | LoaderJSX
constant LoaderTS (line 68) | LoaderTS
constant LoaderTSNoAmbiguousLessThan (line 69) | LoaderTSNoAmbiguousLessThan
constant LoaderTSX (line 70) | LoaderTSX
constant LoaderJSON (line 71) | LoaderJSON
constant LoaderText (line 72) | LoaderText
constant LoaderBase64 (line 73) | LoaderBase64
constant LoaderDataURL (line 74) | LoaderDataURL
constant LoaderFile (line 75) | LoaderFile
constant LoaderBinary (line 76) | LoaderBinary
constant LoaderCSS (line 77) | LoaderCSS
constant LoaderDefault (line 78) | LoaderDefault
type Format (line 99) | type Format
method KeepES6ImportExportSyntax (line 138) | func (f Format) KeepES6ImportExportSyntax() bool {
method String (line 142) | func (f Format) String() string {
constant FormatPreserve (line 105) | FormatPreserve Format = iota
constant FormatIIFE (line 121) | FormatIIFE
constant FormatCommonJS (line 128) | FormatCommonJS
constant FormatESModule (line 135) | FormatESModule
type StdinInfo (line 154) | type StdinInfo struct
type WildcardPattern (line 161) | type WildcardPattern struct
type ExternalMatchers (line 166) | type ExternalMatchers struct
method HasMatchers (line 171) | func (matchers ExternalMatchers) HasMatchers() bool {
type ExternalSettings (line 175) | type ExternalSettings struct
type Mode (line 180) | type Mode
constant ModePassThrough (line 183) | ModePassThrough Mode = iota
constant ModeConvertFormat (line 184) | ModeConvertFormat
constant ModeBundle (line 185) | ModeBundle
type MaybeBool (line 188) | type MaybeBool
constant Unspecified (line 191) | Unspecified MaybeBool = iota
constant True (line 192) | True
constant False (line 193) | False
type Options (line 196) | type Options struct
type TargetFromAPI (line 289) | type TargetFromAPI
constant TargetWasUnconfigured (line 293) | TargetWasUnconfigured TargetFromAPI = iota
constant TargetWasConfigured (line 296) | TargetWasConfigured
constant TargetWasConfiguredIncludingESNext (line 299) | TargetWasConfiguredIncludingESNext
type UnusedImportsTS (line 302) | type UnusedImportsTS
constant UnusedImportsRemoveStmt (line 306) | UnusedImportsRemoveStmt UnusedImportsTS = iota
constant UnusedImportsKeepStmtRemoveValues (line 309) | UnusedImportsKeepStmtRemoveValues
constant UnusedImportsKeepValues (line 312) | UnusedImportsKeepValues
function UnusedImportsFromTsconfigValues (line 315) | func UnusedImportsFromTsconfigValues(preserveImportsNotUsedAsValues bool...
type TSTarget (line 325) | type TSTarget struct
type PathPlaceholder (line 332) | type PathPlaceholder
constant NoPlaceholder (line 335) | NoPlaceholder PathPlaceholder = iota
constant DirPlaceholder (line 339) | DirPlaceholder
constant NamePlaceholder (line 343) | NamePlaceholder
constant HashPlaceholder (line 347) | HashPlaceholder
constant ExtPlaceholder (line 351) | ExtPlaceholder
type PathTemplate (line 354) | type PathTemplate struct
type PathPlaceholders (line 359) | type PathPlaceholders struct
method Get (line 366) | func (placeholders PathPlaceholders) Get(placeholder PathPlaceholder) ...
function TemplateToString (line 380) | func TemplateToString(template []PathTemplate) string {
function HasPlaceholder (line 402) | func HasPlaceholder(template []PathTemplate, placeholder PathPlaceholder...
function SubstituteTemplate (line 411) | func SubstituteTemplate(template []PathTemplate, placeholders PathPlaceh...
function ShouldCallRuntimeRequire (line 442) | func ShouldCallRuntimeRequire(mode Mode, outputFormat Format) bool {
type InjectedDefine (line 446) | type InjectedDefine struct
type InjectedFile (line 451) | type InjectedFile struct
type InjectableExport (line 457) | type InjectableExport struct
function compileFilter (line 465) | func compileFilter(filter string) (result *regexp.Regexp) {
function CompileFilterForPlugin (line 500) | func CompileFilterForPlugin(pluginName string, kind string, filter strin...
function PluginAppliesToPath (line 513) | func PluginAppliesToPath(path logger.Path, filter *regexp.Regexp, namesp...
type Plugin (line 520) | type Plugin struct
type OnStart (line 527) | type OnStart struct
type OnStartResult (line 532) | type OnStartResult struct
type OnResolve (line 537) | type OnResolve struct
type OnResolveArgs (line 544) | type OnResolveArgs struct
type OnResolveResult (line 552) | type OnResolveResult struct
type OnLoad (line 567) | type OnLoad struct
type OnLoadArgs (line 574) | type OnLoadArgs struct
type OnLoadResult (line 579) | type OnLoadResult struct
FILE: lib/esbuild/config/globals.go
type DefineData (line 822) | type DefineData struct
function mergeDefineData (line 841) | func mergeDefineData(old DefineData, new DefineData) DefineData {
type DotDefine (line 851) | type DotDefine struct
function arePartsEqual (line 856) | func arePartsEqual(a []string, b []string) bool {
FILE: lib/esbuild/css_ast/css_ast.go
type AST (line 26) | type AST struct
type Token (line 37) | type Token struct
method Equal (line 82) | func (a Token) Equal(b Token) bool {
method EqualIgnoringWhitespace (line 122) | func (a Token) EqualIgnoringWhitespace(b Token) bool {
method FractionForPercentage (line 160) | func (t Token) FractionForPercentage() (float64, bool) {
method TurnLengthIntoNumberIfZero (line 178) | func (t *Token) TurnLengthIntoNumberIfZero() bool {
method TurnLengthOrPercentageIntoNumberIfZero (line 187) | func (t *Token) TurnLengthOrPercentageIntoNumberIfZero() bool {
method PercentageValue (line 196) | func (t Token) PercentageValue() string {
method DimensionValue (line 200) | func (t Token) DimensionValue() string {
method DimensionUnit (line 204) | func (t Token) DimensionUnit() string {
method DimensionUnitIsSafeLength (line 208) | func (t Token) DimensionUnitIsSafeLength() bool {
method IsZero (line 218) | func (t Token) IsZero() bool {
method IsOne (line 222) | func (t Token) IsOne() bool {
method IsAngle (line 226) | func (t Token) IsAngle() bool {
type WhitespaceFlags (line 75) | type WhitespaceFlags
constant WhitespaceBefore (line 78) | WhitespaceBefore WhitespaceFlags = 1 << iota
constant WhitespaceAfter (line 79) | WhitespaceAfter
function TokensEqual (line 96) | func TokensEqual(a []Token, b []Token) bool {
function HashTokens (line 108) | func HashTokens(hash uint32, tokens []Token) uint32 {
function TokensEqualIgnoringWhitespace (line 136) | func TokensEqualIgnoringWhitespace(a []Token, b []Token) bool {
function TokensAreCommaSeparated (line 148) | func TokensAreCommaSeparated(tokens []Token) bool {
function CloneTokensWithImportRecords (line 234) | func CloneTokensWithImportRecords(
type Rule (line 259) | type Rule struct
type R (line 264) | type R interface
function RulesEqual (line 269) | func RulesEqual(a []Rule, b []Rule) bool {
function HashRules (line 281) | func HashRules(hash uint32, rules []Rule) uint32 {
type RAtCharset (line 293) | type RAtCharset struct
method Equal (line 297) | func (a *RAtCharset) Equal(rule R) bool {
method Hash (line 302) | func (r *RAtCharset) Hash() (uint32, bool) {
type RAtImport (line 308) | type RAtImport struct
method Equal (line 313) | func (*RAtImport) Equal(rule R) bool {
method Hash (line 317) | func (r *RAtImport) Hash() (uint32, bool) {
type RAtKeyframes (line 321) | type RAtKeyframes struct
method Equal (line 332) | func (a *RAtKeyframes) Equal(rule R) bool {
method Hash (line 353) | func (r *RAtKeyframes) Hash() (uint32, bool) {
type KeyframeBlock (line 327) | type KeyframeBlock struct
type RKnownAt (line 368) | type RKnownAt struct
method Equal (line 374) | func (a *RKnownAt) Equal(rule R) bool {
method Hash (line 379) | func (r *RKnownAt) Hash() (uint32, bool) {
type RUnknownAt (line 387) | type RUnknownAt struct
method Equal (line 393) | func (a *RUnknownAt) Equal(rule R) bool {
method Hash (line 398) | func (r *RUnknownAt) Hash() (uint32, bool) {
type RSelector (line 406) | type RSelector struct
method Equal (line 412) | func (a *RSelector) Equal(rule R) bool {
method Hash (line 426) | func (r *RSelector) Hash() (uint32, bool) {
type RQualified (line 448) | type RQualified struct
method Equal (line 453) | func (a *RQualified) Equal(rule R) bool {
method Hash (line 458) | func (r *RQualified) Hash() (uint32, bool) {
type RDeclaration (line 465) | type RDeclaration struct
method Equal (line 473) | func (a *RDeclaration) Equal(rule R) bool {
method Hash (line 478) | func (r *RDeclaration) Hash() (uint32, bool) {
type RBadDeclaration (line 485) | type RBadDeclaration struct
method Equal (line 489) | func (a *RBadDeclaration) Equal(rule R) bool {
method Hash (line 494) | func (r *RBadDeclaration) Hash() (uint32, bool) {
type RComment (line 500) | type RComment struct
method Equal (line 504) | func (a *RComment) Equal(rule R) bool {
method Hash (line 509) | func (r *RComment) Hash() (uint32, bool) {
type RAtLayer (line 515) | type RAtLayer struct
method Equal (line 520) | func (a *RAtLayer) Equal(rule R) bool {
method Hash (line 540) | func (r *RAtLayer) Hash() (uint32, bool) {
type ComplexSelector (line 553) | type ComplexSelector struct
method Equal (line 557) | func (a ComplexSelector) Equal(b ComplexSelector) bool {
type NestingSelector (line 587) | type NestingSelector
constant NestingSelectorNone (line 590) | NestingSelectorNone NestingSelector = iota
constant NestingSelectorPrefix (line 591) | NestingSelectorPrefix
constant NestingSelectorPresentButNotPrefix (line 592) | NestingSelectorPresentButNotPrefix
type CompoundSelector (line 595) | type CompoundSelector struct
type NameToken (line 602) | type NameToken struct
type NamespacedName (line 607) | type NamespacedName struct
method Equal (line 615) | func (a NamespacedName) Equal(b NamespacedName) bool {
type SS (line 620) | type SS interface
type SSHash (line 625) | type SSHash struct
method Equal (line 629) | func (a *SSHash) Equal(ss SS) bool {
method Hash (line 634) | func (ss *SSHash) Hash() uint32 {
type SSClass (line 640) | type SSClass struct
method Equal (line 644) | func (a *SSClass) Equal(ss SS) bool {
method Hash (line 649) | func (ss *SSClass) Hash() uint32 {
type SSAttribute (line 655) | type SSAttribute struct
method Equal (line 662) | func (a *SSAttribute) Equal(ss SS) bool {
method Hash (line 668) | func (ss *SSAttribute) Hash() uint32 {
type SSPseudoClass (line 676) | type SSPseudoClass struct
method Equal (line 682) | func (a *SSPseudoClass) Equal(ss SS) bool {
method Hash (line 687) | func (ss *SSPseudoClass) Hash() uint32 {
FILE: lib/esbuild/css_ast/css_decl_table.go
type D (line 10) | type D
constant DUnknown (line 13) | DUnknown D = iota
constant DAlignContent (line 14) | DAlignContent
constant DAlignItems (line 15) | DAlignItems
constant DAlignSelf (line 16) | DAlignSelf
constant DAlignmentBaseline (line 17) | DAlignmentBaseline
constant DAll (line 18) | DAll
constant DAnimation (line 19) | DAnimation
constant DAnimationDelay (line 20) | DAnimationDelay
constant DAnimationDirection (line 21) | DAnimationDirection
constant DAnimationDuration (line 22) | DAnimationDuration
constant DAnimationFillMode (line 23) | DAnimationFillMode
constant DAnimationIterationCount (line 24) | DAnimationIterationCount
constant DAnimationName (line 25) | DAnimationName
constant DAnimationPlayState (line 26) | DAnimationPlayState
constant DAnimationTimingFunction (line 27) | DAnimationTimingFunction
constant DBackfaceVisibility (line 28) | DBackfaceVisibility
constant DBackground (line 29) | DBackground
constant DBackgroundAttachment (line 30) | DBackgroundAttachment
constant DBackgroundClip (line 31) | DBackgroundClip
constant DBackgroundColor (line 32) | DBackgroundColor
constant DBackgroundImage (line 33) | DBackgroundImage
constant DBackgroundOrigin (line 34) | DBackgroundOrigin
constant DBackgroundPosition (line 35) | DBackgroundPosition
constant DBackgroundPositionX (line 36) | DBackgroundPositionX
constant DBackgroundPositionY (line 37) | DBackgroundPositionY
constant DBackgroundRepeat (line 38) | DBackgroundRepeat
constant DBackgroundSize (line 39) | DBackgroundSize
constant DBaselineShift (line 40) | DBaselineShift
constant DBlockSize (line 41) | DBlockSize
constant DBorder (line 42) | DBorder
constant DBorderBlockEnd (line 43) | DBorderBlockEnd
constant DBorderBlockEndColor (line 44) | DBorderBlockEndColor
constant DBorderBlockEndStyle (line 45) | DBorderBlockEndStyle
constant DBorderBlockEndWidth (line 46) | DBorderBlockEndWidth
constant DBorderBlockStart (line 47) | DBorderBlockStart
constant DBorderBlockStartColor (line 48) | DBorderBlockStartColor
constant DBorderBlockStartStyle (line 49) | DBorderBlockStartStyle
constant DBorderBlockStartWidth (line 50) | DBorderBlockStartWidth
constant DBorderBottom (line 51) | DBorderBottom
constant DBorderBottomColor (line 52) | DBorderBottomColor
constant DBorderBottomLeftRadius (line 53) | DBorderBottomLeftRadius
constant DBorderBottomRightRadius (line 54) | DBorderBottomRightRadius
constant DBorderBottomStyle (line 55) | DBorderBottomStyle
constant DBorderBottomWidth (line 56) | DBorderBottomWidth
constant DBorderCollapse (line 57) | DBorderCollapse
constant DBorderColor (line 58) | DBorderColor
constant DBorderImage (line 59) | DBorderImage
constant DBorderImageOutset (line 60) | DBorderImageOutset
constant DBorderImageRepeat (line 61) | DBorderImageRepeat
constant DBorderImageSlice (line 62) | DBorderImageSlice
constant DBorderImageSource (line 63) | DBorderImageSource
constant DBorderImageWidth (line 64) | DBorderImageWidth
constant DBorderInlineEnd (line 65) | DBorderInlineEnd
constant DBorderInlineEndColor (line 66) | DBorderInlineEndColor
constant DBorderInlineEndStyle (line 67) | DBorderInlineEndStyle
constant DBorderInlineEndWidth (line 68) | DBorderInlineEndWidth
constant DBorderInlineStart (line 69) | DBorderInlineStart
constant DBorderInlineStartColor (line 70) | DBorderInlineStartColor
constant DBorderInlineStartStyle (line 71) | DBorderInlineStartStyle
constant DBorderInlineStartWidth (line 72) | DBorderInlineStartWidth
constant DBorderLeft (line 73) | DBorderLeft
constant DBorderLeftColor (line 74) | DBorderLeftColor
constant DBorderLeftStyle (line 75) | DBorderLeftStyle
constant DBorderLeftWidth (line 76) | DBorderLeftWidth
constant DBorderRadius (line 77) | DBorderRadius
constant DBorderRight (line 78) | DBorderRight
constant DBorderRightColor (line 79) | DBorderRightColor
constant DBorderRightStyle (line 80) | DBorderRightStyle
constant DBorderRightWidth (line 81) | DBorderRightWidth
constant DBorderSpacing (line 82) | DBorderSpacing
constant DBorderStyle (line 83) | DBorderStyle
constant DBorderTop (line 84) | DBorderTop
constant DBorderTopColor (line 85) | DBorderTopColor
constant DBorderTopLeftRadius (line 86) | DBorderTopLeftRadius
constant DBorderTopRightRadius (line 87) | DBorderTopRightRadius
constant DBorderTopStyle (line 88) | DBorderTopStyle
constant DBorderTopWidth (line 89) | DBorderTopWidth
constant DBorderWidth (line 90) | DBorderWidth
constant DBottom (line 91) | DBottom
constant DBoxShadow (line 92) | DBoxShadow
constant DBoxSizing (line 93) | DBoxSizing
constant DBreakAfter (line 94) | DBreakAfter
constant DBreakBefore (line 95) | DBreakBefore
constant DBreakInside (line 96) | DBreakInside
constant DCaptionSide (line 97) | DCaptionSide
constant DCaretColor (line 98) | DCaretColor
constant DClear (line 99) | DClear
constant DClip (line 100) | DClip
constant DClipPath (line 101) | DClipPath
constant DClipRule (line 102) | DClipRule
constant DColor (line 103) | DColor
constant DColorInterpolation (line 104) | DColorInterpolation
constant DColorInterpolationFilters (line 105) | DColorInterpolationFilters
constant DColumnCount (line 106) | DColumnCount
constant DColumnFill (line 107) | DColumnFill
constant DColumnGap (line 108) | DColumnGap
constant DColumnRule (line 109) | DColumnRule
constant DColumnRuleColor (line 110) | DColumnRuleColor
constant DColumnRuleStyle (line 111) | DColumnRuleStyle
constant DColumnRuleWidth (line 112) | DColumnRuleWidth
constant DColumnSpan (line 113) | DColumnSpan
constant DColumnWidth (line 114) | DColumnWidth
constant DColumns (line 115) | DColumns
constant DContent (line 116) | DContent
constant DCounterIncrement (line 117) | DCounterIncrement
constant DCounterReset (line 118) | DCounterReset
constant DCssFloat (line 119) | DCssFloat
constant DCssText (line 120) | DCssText
constant DCursor (line 121) | DCursor
constant DDirection (line 122) | DDirection
constant DDisplay (line 123) | DDisplay
constant DDominantBaseline (line 124) | DDominantBaseline
constant DEmptyCells (line 125) | DEmptyCells
constant DFill (line 126) | DFill
constant DFillOpacity (line 127) | DFillOpacity
constant DFillRule (line 128) | DFillRule
constant DFilter (line 129) | DFilter
constant DFlex (line 130) | DFlex
constant DFlexBasis (line 131) | DFlexBasis
constant DFlexDirection (line 132) | DFlexDirection
constant DFlexFlow (line 133) | DFlexFlow
constant DFlexGrow (line 134) | DFlexGrow
constant DFlexShrink (line 135) | DFlexShrink
constant DFlexWrap (line 136) | DFlexWrap
constant DFloat (line 137) | DFloat
constant DFloodColor (line 138) | DFloodColor
constant DFloodOpacity (line 139) | DFloodOpacity
constant DFont (line 140) | DFont
constant DFontFamily (line 141) | DFontFamily
constant DFontFeatureSettings (line 142) | DFontFeatureSettings
constant DFontKerning (line 143) | DFontKerning
constant DFontSize (line 144) | DFontSize
constant DFontSizeAdjust (line 145) | DFontSizeAdjust
constant DFontStretch (line 146) | DFontStretch
constant DFontStyle (line 147) | DFontStyle
constant DFontSynthesis (line 148) | DFontSynthesis
constant DFontVariant (line 149) | DFontVariant
constant DFontVariantCaps (line 150) | DFontVariantCaps
constant DFontVariantEastAsian (line 151) | DFontVariantEastAsian
constant DFontVariantLigatures (line 152) | DFontVariantLigatures
constant DFontVariantNumeric (line 153) | DFontVariantNumeric
constant DFontVariantPosition (line 154) | DFontVariantPosition
constant DFontWeight (line 155) | DFontWeight
constant DGap (line 156) | DGap
constant DGlyphOrientationVertical (line 157) | DGlyphOrientationVertical
constant DGrid (line 158) | DGrid
constant DGridArea (line 159) | DGridArea
constant DGridAutoColumns (line 160) | DGridAutoColumns
constant DGridAutoFlow (line 161) | DGridAutoFlow
constant DGridAutoRows (line 162) | DGridAutoRows
constant DGridColumn (line 163) | DGridColumn
constant DGridColumnEnd (line 164) | DGridColumnEnd
constant DGridColumnGap (line 165) | DGridColumnGap
constant DGridColumnStart (line 166) | DGridColumnStart
constant DGridGap (line 167) | DGridGap
constant DGridRow (line 168) | DGridRow
constant DGridRowEnd (line 169) | DGridRowEnd
constant DGridRowGap (line 170) | DGridRowGap
constant DGridRowStart (line 171) | DGridRowStart
constant DGridTemplate (line 172) | DGridTemplate
constant DGridTemplateAreas (line 173) | DGridTemplateAreas
constant DGridTemplateColumns (line 174) | DGridTemplateColumns
constant DGridTemplateRows (line 175) | DGridTemplateRows
constant DHeight (line 176) | DHeight
constant DHyphens (line 177) | DHyphens
constant DImageOrientation (line 178) | DImageOrientation
constant DImageRendering (line 179) | DImageRendering
constant DInlineSize (line 180) | DInlineSize
constant DInset (line 181) | DInset
constant DJustifyContent (line 182) | DJustifyContent
constant DJustifyItems (line 183) | DJustifyItems
constant DJustifySelf (line 184) | DJustifySelf
constant DLeft (line 185) | DLeft
constant DLetterSpacing (line 186) | DLetterSpacing
constant DLightingColor (line 187) | DLightingColor
constant DLineBreak (line 188) | DLineBreak
constant DLineHeight (line 189) | DLineHeight
constant DListStyle (line 190) | DListStyle
constant DListStyleImage (line 191) | DListStyleImage
constant DListStylePosition (line 192) | DListStylePosition
constant DListStyleType (line 193) | DListStyleType
constant DMargin (line 194) | DMargin
constant DMarginBlockEnd (line 195) | DMarginBlockEnd
constant DMarginBlockStart (line 196) | DMarginBlockStart
constant DMarginBottom (line 197) | DMarginBottom
constant DMarginInlineEnd (line 198) | DMarginInlineEnd
constant DMarginInlineStart (line 199) | DMarginInlineStart
constant DMarginLeft (line 200) | DMarginLeft
constant DMarginRight (line 201) | DMarginRight
constant DMarginTop (line 202) | DMarginTop
constant DMarker (line 203) | DMarker
constant DMarkerEnd (line 204) | DMarkerEnd
constant DMarkerMid (line 205) | DMarkerMid
constant DMarkerStart (line 206) | DMarkerStart
constant DMask (line 207) | DMask
constant DMaskComposite (line 208) | DMaskComposite
constant DMaskImage (line 209) | DMaskImage
constant DMaskPosition (line 210) | DMaskPosition
constant DMaskRepeat (line 211) | DMaskRepeat
constant DMaskSize (line 212) | DMaskSize
constant DMaskType (line 213) | DMaskType
constant DMaxBlockSize (line 214) | DMaxBlockSize
constant DMaxHeight (line 215) | DMaxHeight
constant DMaxInlineSize (line 216) | DMaxInlineSize
constant DMaxWidth (line 217) | DMaxWidth
constant DMinBlockSize (line 218) | DMinBlockSize
constant DMinHeight (line 219) | DMinHeight
constant DMinInlineSize (line 220) | DMinInlineSize
constant DMinWidth (line 221) | DMinWidth
constant DObjectFit (line 222) | DObjectFit
constant DObjectPosition (line 223) | DObjectPosition
constant DOpacity (line 224) | DOpacity
constant DOrder (line 225) | DOrder
constant DOrphans (line 226) | DOrphans
constant DOutline (line 227) | DOutline
constant DOutlineColor (line 228) | DOutlineColor
constant DOutlineOffset (line 229) | DOutlineOffset
constant DOutlineStyle (line 230) | DOutlineStyle
constant DOutlineWidth (line 231) | DOutlineWidth
constant DOverflow (line 232) | DOverflow
constant DOverflowAnchor (line 233) | DOverflowAnchor
constant DOverflowWrap (line 234) | DOverflowWrap
constant DOverflowX (line 235) | DOverflowX
constant DOverflowY (line 236) | DOverflowY
constant DOverscrollBehavior (line 237) | DOverscrollBehavior
constant DOverscrollBehaviorBlock (line 238) | DOverscrollBehaviorBlock
constant DOverscrollBehaviorInline (line 239) | DOverscrollBehaviorInline
constant DOverscrollBehaviorX (line 240) | DOverscrollBehaviorX
constant DOverscrollBehaviorY (line 241) | DOverscrollBehaviorY
constant DPadding (line 242) | DPadding
constant DPaddingBlockEnd (line 243) | DPaddingBlockEnd
constant DPaddingBlockStart (line 244) | DPaddingBlockStart
constant DPaddingBottom (line 245) | DPaddingBottom
constant DPaddingInlineEnd (line 246) | DPaddingInlineEnd
constant DPaddingInlineStart (line 247) | DPaddingInlineStart
constant DPaddingLeft (line 248) | DPaddingLeft
constant DPaddingRight (line 249) | DPaddingRight
constant DPaddingTop (line 250) | DPaddingTop
constant DPageBreakAfter (line 251) | DPageBreakAfter
constant DPageBreakBefore (line 252) | DPageBreakBefore
constant DPageBreakInside (line 253) | DPageBreakInside
constant DPaintOrder (line 254) | DPaintOrder
constant DPerspective (line 255) | DPerspective
constant DPerspectiveOrigin (line 256) | DPerspectiveOrigin
constant DPlaceContent (line 257) | DPlaceContent
constant DPlaceItems (line 258) | DPlaceItems
constant DPlaceSelf (line 259) | DPlaceSelf
constant DPointerEvents (line 260) | DPointerEvents
constant DPosition (line 261) | DPosition
constant DQuotes (line 262) | DQuotes
constant DResize (line 263) | DResize
constant DRight (line 264) | DRight
constant DRotate (line 265) | DRotate
constant DRowGap (line 266) | DRowGap
constant DRubyAlign (line 267) | DRubyAlign
constant DRubyPosition (line 268) | DRubyPosition
constant DScale (line 269) | DScale
constant DScrollBehavior (line 270) | DScrollBehavior
constant DShapeRendering (line 271) | DShapeRendering
constant DStopColor (line 272) | DStopColor
constant DStopOpacity (line 273) | DStopOpacity
constant DStroke (line 274) | DStroke
constant DStrokeDasharray (line 275) | DStrokeDasharray
constant DStrokeDashoffset (line 276) | DStrokeDashoffset
constant DStrokeLinecap (line 277) | DStrokeLinecap
constant DStrokeLinejoin (line 278) | DStrokeLinejoin
constant DStrokeMiterlimit (line 279) | DStrokeMiterlimit
constant DStrokeOpacity (line 280) | DStrokeOpacity
constant DStrokeWidth (line 281) | DStrokeWidth
constant DTabSize (line 282) | DTabSize
constant DTableLayout (line 283) | DTableLayout
constant DTextAlign (line 284) | DTextAlign
constant DTextAlignLast (line 285) | DTextAlignLast
constant DTextAnchor (line 286) | DTextAnchor
constant DTextCombineUpright (line 287) | DTextCombineUpright
constant DTextDecoration (line 288) | DTextDecoration
constant DTextDecorationColor (line 289) | DTextDecorationColor
constant DTextDecorationLine (line 290) | DTextDecorationLine
constant DTextDecorationStyle (line 291) | DTextDecorationStyle
constant DTextEmphasis (line 292) | DTextEmphasis
constant DTextEmphasisColor (line 293) | DTextEmphasisColor
constant DTextEmphasisPosition (line 294) | DTextEmphasisPosition
constant DTextEmphasisStyle (line 295) | DTextEmphasisStyle
constant DTextIndent (line 296) | DTextIndent
constant DTextJustify (line 297) | DTextJustify
constant DTextOrientation (line 298) | DTextOrientation
constant DTextOverflow (line 299) | DTextOverflow
constant DTextRendering (line 300) | DTextRendering
constant DTextShadow (line 301) | DTextShadow
constant DTextTransform (line 302) | DTextTransform
constant DTextUnderlinePosition (line 303) | DTextUnderlinePosition
constant DTop (line 304) | DTop
constant DTouchAction (line 305) | DTouchAction
constant DTransform (line 306) | DTransform
constant DTransformBox (line 307) | DTransformBox
constant DTransformOrigin (line 308) | DTransformOrigin
constant DTransformStyle (line 309) | DTransformStyle
constant DTransition (line 310) | DTransition
constant DTransitionDelay (line 311) | DTransitionDelay
constant DTransitionDuration (line 312) | DTransitionDuration
constant DTransitionProperty (line 313) | DTransitionProperty
constant DTransitionTimingFunction (line 314) | DTransitionTimingFunction
constant DTranslate (line 315) | DTranslate
constant DUnicodeBidi (line 316) | DUnicodeBidi
constant DUserSelect (line 317) | DUserSelect
constant DVerticalAlign (line 318) | DVerticalAlign
constant DVisibility (line 319) | DVisibility
constant DWhiteSpace (line 320) | DWhiteSpace
constant DWidows (line 321) | DWidows
constant DWidth (line 322) | DWidth
constant DWillChange (line 323) | DWillChange
constant DWordBreak (line 324) | DWordBreak
constant DWordSpacing (line 325) | DWordSpacing
constant DWordWrap (line 326) | DWordWrap
constant DWritingMode (line 327) | DWritingMode
constant DZIndex (line 328) | DZIndex
constant DZoom (line 329) | DZoom
function MaybeCorrectDeclarationTypo (line 654) | func MaybeCorrectDeclarationTypo(text string) (string, bool) {
FILE: lib/esbuild/css_lexer/css_lexer.go
type T (line 15) | type T
method String (line 102) | func (t T) String() string {
method IsNumeric (line 106) | func (t T) IsNumeric() bool {
constant eof (line 17) | eof = -1
constant TEndOfFile (line 20) | TEndOfFile T = iota
constant TAtKeyword (line 22) | TAtKeyword
constant TBadString (line 23) | TBadString
constant TBadURL (line 24) | TBadURL
constant TCDC (line 25) | TCDC
constant TCDO (line 26) | TCDO
constant TCloseBrace (line 27) | TCloseBrace
constant TCloseBracket (line 28) | TCloseBracket
constant TCloseParen (line 29) | TCloseParen
constant TColon (line 30) | TColon
constant TComma (line 31) | TComma
constant TDelim (line 32) | TDelim
constant TDelimAmpersand (line 33) | TDelimAmpersand
constant TDelimAsterisk (line 34) | TDelimAsterisk
constant TDelimBar (line 35) | TDelimBar
constant TDelimCaret (line 36) | TDelimCaret
constant TDelimDollar (line 37) | TDelimDollar
constant TDelimDot (line 38) | TDelimDot
constant TDelimEquals (line 39) | TDelimEquals
constant TDelimExclamation (line 40) | TDelimExclamation
constant TDelimGreaterThan (line 41) | TDelimGreaterThan
constant TDelimMinus (line 42) | TDelimMinus
constant TDelimPlus (line 43) | TDelimPlus
constant TDelimSlash (line 44) | TDelimSlash
constant TDelimTilde (line 45) | TDelimTilde
constant TDimension (line 46) | TDimension
constant TFunction (line 47) | TFunction
constant THash (line 48) | THash
constant TIdent (line 49) | TIdent
constant TNumber (line 50) | TNumber
constant TOpenBrace (line 51) | TOpenBrace
constant TOpenBracket (line 52) | TOpenBracket
constant TOpenParen (line 53) | TOpenParen
constant TPercentage (line 54) | TPercentage
constant TSemicolon (line 55) | TSemicolon
constant TString (line 56) | TString
constant TURL (line 57) | TURL
constant TWhitespace (line 58) | TWhitespace
type TokenFlags (line 110) | type TokenFlags
constant IsID (line 113) | IsID TokenFlags = 1 << iota
constant DidWarnAboutSingleLineComment (line 114) | DidWarnAboutSingleLineComment
type Token (line 120) | type Token struct
method DecodedText (line 127) | func (token Token) DecodedText(contents string) string {
type lexer (line 161) | type lexer struct
method step (line 234) | func (lexer *lexer) step() {
method next (line 257) | func (lexer *lexer) next() {
method consumeToEndOfMultiLineComment (line 471) | func (lexer *lexer) consumeToEndOfMultiLineComment(startRange logger.R...
method isValidEscape (line 535) | func (lexer *lexer) isValidEscape() bool {
method wouldStartIdentifier (line 543) | func (lexer *lexer) wouldStartIdentifier() bool {
method wouldStartNumber (line 587) | func (lexer *lexer) wouldStartNumber() bool {
method consumeName (line 613) | func (lexer *lexer) consumeName() string {
method consumeEscape (line 640) | func (lexer *lexer) consumeEscape() rune {
method consumeIdentLike (line 671) | func (lexer *lexer) consumeIdentLike() T {
method consumeURL (line 693) | func (lexer *lexer) consumeURL() T {
method consumeString (line 757) | func (lexer *lexer) consumeString() T {
method consumeNumeric (line 797) | func (lexer *lexer) consumeNumeric() T {
type Comment (line 174) | type Comment struct
type TokenizeResult (line 180) | type TokenizeResult struct
function Tokenize (line 187) | func Tokenize(log logger.Log, source logger.Source) TokenizeResult {
function containsAtPreserveOrAtLicense (line 526) | func containsAtPreserveOrAtLicense(text string) bool {
function WouldStartIdentifierWithoutEscapes (line 566) | func WouldStartIdentifierWithoutEscapes(text string) bool {
function IsNameStart (line 853) | func IsNameStart(c rune) bool {
function IsNameContinue (line 857) | func IsNameContinue(c rune) bool {
function isNewline (line 861) | func isNewline(c rune) bool {
function isWhitespace (line 869) | func isWhitespace(c rune) bool {
function isHex (line 877) | func isHex(c rune) (int, bool) {
function isNonPrintable (line 890) | func isNonPrintable(c rune) bool {
function decodeEscapesInToken (line 894) | func decodeEscapesInToken(inner string) string {
FILE: lib/esbuild/css_lexer/css_lexer_test.go
function lexToken (line 10) | func lexToken(contents string) (T, string) {
function lexerError (line 20) | func lexerError(contents string) string {
function TestTokens (line 30) | func TestTokens(t *testing.T) {
function TestStringParsing (line 84) | func TestStringParsing(t *testing.T) {
function TestURLParsing (line 106) | func TestURLParsing(t *testing.T) {
function TestComment (line 124) | func TestComment(t *testing.T) {
function TestString (line 131) | func TestString(t *testing.T) {
function TestBOM (line 140) | func TestBOM(t *testing.T) {
FILE: lib/esbuild/css_parser/css_decls.go
method commaToken (line 9) | func (p *parser) commaToken() css_ast.Token {
function expandTokenQuad (line 20) | func expandTokenQuad(tokens []css_ast.Token, allowedIdent string) (resul...
function compactTokenQuad (line 54) | func compactTokenQuad(a css_ast.Token, b css_ast.Token, c css_ast.Token,...
method processDeclarations (line 80) | func (p *parser) processDeclarations(rules []css_ast.Rule) []css_ast.Rule {
FILE: lib/esbuild/css_parser/css_decls_border_radius.go
constant borderRadiusTopLeft (line 10) | borderRadiusTopLeft = iota
constant borderRadiusTopRight (line 11) | borderRadiusTopRight
constant borderRadiusBottomRight (line 12) | borderRadiusBottomRight
constant borderRadiusBottomLeft (line 13) | borderRadiusBottomLeft
type borderRadiusCorner (line 16) | type borderRadiusCorner struct
type borderRadiusTracker (line 24) | type borderRadiusTracker struct
method updateCorner (line 29) | func (borderRadius *borderRadiusTracker) updateCorner(rules []css_ast....
method mangleCorners (line 38) | func (borderRadius *borderRadiusTracker) mangleCorners(rules []css_ast...
method mangleCorner (line 108) | func (borderRadius *borderRadiusTracker) mangleCorner(rules []css_ast....
method compactRules (line 157) | func (borderRadius *borderRadiusTracker) compactRules(rules []css_ast....
FILE: lib/esbuild/css_parser/css_decls_box.go
constant boxTop (line 10) | boxTop = iota
constant boxRight (line 11) | boxRight
constant boxBottom (line 12) | boxBottom
constant boxLeft (line 13) | boxLeft
type boxSide (line 16) | type boxSide struct
type boxTracker (line 23) | type boxTracker struct
method updateSide (line 86) | func (box *boxTracker) updateSide(rules []css_ast.Rule, side int, new ...
method mangleSides (line 95) | func (box *boxTracker) mangleSides(rules []css_ast.Rule, decl *css_ast...
method mangleSide (line 130) | func (box *boxTracker) mangleSide(rules []css_ast.Rule, decl *css_ast....
method compactRules (line 160) | func (box *boxTracker) compactRules(rules []css_ast.Rule, keyRange log...
type unitSafetyStatus (line 31) | type unitSafetyStatus
constant unitSafe (line 34) | unitSafe unitSafetyStatus = iota
constant unitUnsafeSingle (line 35) | unitUnsafeSingle
constant unitUnsafeMixed (line 36) | unitUnsafeMixed
type unitSafetyTracker (line 52) | type unitSafetyTracker struct
method isSafeWith (line 57) | func (a unitSafetyTracker) isSafeWith(b unitSafetyTracker) bool {
method includeUnitOf (line 61) | func (t *unitSafetyTracker) includeUnitOf(token css_ast.Token) {
FILE: lib/esbuild/css_parser/css_decls_box_shadow.go
method mangleBoxShadow (line 8) | func (p *parser) mangleBoxShadow(tokens []css_ast.Token) []css_ast.Token {
method mangleBoxShadows (line 78) | func (p *parser) mangleBoxShadows(tokens []css_ast.Token) []css_ast.Token {
FILE: lib/esbuild/css_parser/css_decls_color.go
function parseHex (line 200) | func parseHex(text string) (uint32, bool) {
function compactHex (line 219) | func compactHex(v uint32) uint32 {
function expandHex (line 224) | func expandHex(v uint32) uint32 {
function hexR (line 228) | func hexR(v uint32) int { return int(v >> 24) }
function hexG (line 229) | func hexG(v uint32) int { return int((v >> 16) & 255) }
function hexB (line 230) | func hexB(v uint32) int { return int((v >> 8) & 255) }
function hexA (line 231) | func hexA(v uint32) int { return int(v & 255) }
function floatToStringForColor (line 233) | func floatToStringForColor(a float64) string {
function degreesForAngle (line 244) | func degreesForAngle(token css_ast.Token) (float64, bool) {
function lowerAlphaPercentageToNumber (line 268) | func lowerAlphaPercentageToNumber(token css_ast.Token) css_ast.Token {
method lowerColor (line 279) | func (p *parser) lowerColor(token css_ast.Token) css_ast.Token {
function parseColor (line 416) | func parseColor(token css_ast.Token) (uint32, bool) {
function hueToRgb (line 548) | func hueToRgb(t1 float64, t2 float64, hue float64) uint32 {
function parseAlphaByte (line 570) | func parseAlphaByte(token css_ast.Token) (uint32, bool) {
function parseColorByte (line 577) | func parseColorByte(token css_ast.Token, scale float64) (uint32, bool) {
method mangleColor (line 603) | func (p *parser) mangleColor(token css_ast.Token, hex uint32) css_ast.To...
constant alphaFractionTable (line 653) | alphaFractionTable string = "" +
FILE: lib/esbuild/css_parser/css_decls_font.go
method mangleFont (line 13) | func (p *parser) mangleFont(tokens []css_ast.Token) []css_ast.Token {
function isFontSize (line 122) | func isFontSize(token css_ast.Token) bool {
FILE: lib/esbuild/css_parser/css_decls_font_family.go
method mangleFontFamily (line 35) | func (p *parser) mangleFontFamily(tokens []css_ast.Token) ([]css_ast.Tok...
method mangleFamilyNameOrGenericName (line 55) | func (p *parser) mangleFamilyNameOrGenericName(result []css_ast.Token, t...
function isValidCustomIdent (line 115) | func isValidCustomIdent(text string, predefinedKeywords map[string]bool)...
FILE: lib/esbuild/css_parser/css_decls_font_weight.go
method mangleFontWeight (line 10) | func (p *parser) mangleFontWeight(token css_ast.Token) css_ast.Token {
FILE: lib/esbuild/css_parser/css_decls_transform.go
function turnPercentIntoNumberIfShorter (line 10) | func turnPercentIntoNumberIfShorter(t *css_ast.Token) {
method mangleTransforms (line 21) | func (p *parser) mangleTransforms(tokens []css_ast.Token) []css_ast.Token {
FILE: lib/esbuild/css_parser/css_parser.go
type parser (line 17) | type parser struct
method advance (line 64) | func (p *parser) advance() {
method at (line 70) | func (p *parser) at(index int) css_lexer.Token {
method current (line 86) | func (p *parser) current() css_lexer.Token {
method next (line 90) | func (p *parser) next() css_lexer.Token {
method raw (line 94) | func (p *parser) raw() string {
method decoded (line 99) | func (p *parser) decoded() string {
method peek (line 103) | func (p *parser) peek(kind css_lexer.T) bool {
method eat (line 107) | func (p *parser) eat(kind css_lexer.T) bool {
method expect (line 115) | func (p *parser) expect(kind css_lexer.T) bool {
method unexpected (line 157) | func (p *parser) unexpected() {
method parseListOfRules (line 179) | func (p *parser) parseListOfRules(context ruleContext) []css_ast.Rule {
method parseListOfDeclarations (line 286) | func (p *parser) parseListOfDeclarations() (list []css_ast.Rule) {
method shouldParseNestedSelector (line 320) | func (p *parser) shouldParseNestedSelector() bool {
method parseURLOrString (line 595) | func (p *parser) parseURLOrString() (string, logger.Range, bool) {
method expectURLOrString (line 622) | func (p *parser) expectURLOrString() (url string, r logger.Range, ok b...
method parseAtRule (line 722) | func (p *parser) parseAtRule(context atRuleContext) css_ast.Rule {
method expectValidLayerNameIdent (line 1097) | func (p *parser) expectValidLayerNameIdent() (string, bool) {
method convertTokens (line 1112) | func (p *parser) convertTokens(tokens []css_lexer.Token) []css_ast.Tok...
method convertTokensHelper (line 1123) | func (p *parser) convertTokensHelper(tokens []css_lexer.Token, close c...
method parseSelectorRuleFrom (line 1459) | func (p *parser) parseSelectorRuleFrom(preludeStart int, opts parseSel...
method parseQualifiedRuleFrom (line 1492) | func (p *parser) parseQualifiedRuleFrom(preludeStart int, isAlreadyInv...
method parseDeclaration (line 1520) | func (p *parser) parseDeclaration() css_ast.Rule {
method parseComponentValue (line 1611) | func (p *parser) parseComponentValue() {
method parseBlock (line 1633) | func (p *parser) parseBlock(open css_lexer.T, close css_lexer.T) {
type Options (line 32) | type Options struct
function Parse (line 39) | func Parse(log logger.Log, source logger.Source, options Options) css_as...
type ruleContext (line 174) | type ruleContext struct
function mangleRules (line 330) | func mangleRules(rules []css_ast.Rule) []css_ast.Rule {
function isSafeSelectors (line 541) | func isSafeSelectors(complexSelectors []css_ast.ComplexSelector) bool {
type atRuleKind (line 630) | type atRuleKind
constant atRuleUnknown (line 633) | atRuleUnknown atRuleKind = iota
constant atRuleDeclarations (line 634) | atRuleDeclarations
constant atRuleInheritContext (line 635) | atRuleInheritContext
constant atRuleQualifiedOrEmpty (line 636) | atRuleQualifiedOrEmpty
constant atRuleEmpty (line 637) | atRuleEmpty
type atRuleValidity (line 706) | type atRuleValidity
constant atRuleInvalid (line 709) | atRuleInvalid atRuleValidity = iota
constant atRuleValid (line 710) | atRuleValid
constant atRuleInvalidAfter (line 711) | atRuleInvalidAfter
type atRuleContext (line 714) | type atRuleContext struct
type convertTokensOpts (line 1117) | type convertTokensOpts struct
function shiftDot (line 1359) | func shiftDot(text string, dotOffset int) (string, bool) {
function mangleDimension (line 1410) | func mangleDimension(value string, unit string) (string, string, bool) {
function mangleNumber (line 1431) | func mangleNumber(t string) (string, bool) {
FILE: lib/esbuild/css_parser/css_parser_selector.go
method parseSelectorList (line 12) | func (p *parser) parseSelectorList(opts parseSelectorOpts) (list []css_a...
type parseSelectorOpts (line 51) | type parseSelectorOpts struct
method parseComplexSelector (line 56) | func (p *parser) parseComplexSelector(opts parseSelectorOpts) (result cs...
method nameToken (line 101) | func (p *parser) nameToken() css_ast.NameToken {
method maybeWarnAboutNesting (line 108) | func (p *parser) maybeWarnAboutNesting(r logger.Range, opts parseSelecto...
method parseCompoundSelector (line 120) | func (p *parser) parseCompoundSelector(opts parseSelectorOpts) (sel css_...
method parseAttributeSelector (line 232) | func (p *parser) parseAttributeSelector() (attr css_ast.SSAttribute, ok ...
method parsePseudoClassSelector (line 321) | func (p *parser) parsePseudoClassSelector() css_ast.SSPseudoClass {
method parseAnyValue (line 340) | func (p *parser) parseAnyValue() []css_lexer.Token {
method parseCombinator (line 381) | func (p *parser) parseCombinator() string {
FILE: lib/esbuild/css_parser/css_parser_test.go
function expectParseError (line 14) | func expectParseError(t *testing.T, contents string, expected string) {
function expectPrintedCommon (line 29) | func expectPrintedCommon(t *testing.T, name string, contents string, exp...
function expectPrinted (line 54) | func expectPrinted(t *testing.T, contents string, expected string) {
function expectPrintedLower (line 59) | func expectPrintedLower(t *testing.T, contents string, expected string) {
function expectPrintedMinify (line 66) | func expectPrintedMinify(t *testing.T, contents string, expected string) {
function expectPrintedMangle (line 73) | func expectPrintedMangle(t *testing.T, contents string, expected string) {
function expectPrintedLowerMangle (line 80) | func expectPrintedLowerMangle(t *testing.T, contents string, expected st...
function expectPrintedMangleMinify (line 88) | func expectPrintedMangleMinify(t *testing.T, contents string, expected s...
function TestSingleLineComment (line 96) | func TestSingleLineComment(t *testing.T) {
function TestEscapes (line 107) | func TestEscapes(t *testing.T) {
function TestString (line 266) | func TestString(t *testing.T) {
function TestNumber (line 298) | func TestNumber(t *testing.T) {
function TestHexColor (line 344) | func TestHexColor(t *testing.T) {
function TestColorNames (line 470) | func TestColorNames(t *testing.T) {
function TestColorRGBA (line 493) | func TestColorRGBA(t *testing.T) {
function TestColorHSLA (line 509) | func TestColorHSLA(t *testing.T) {
function TestLowerColor (line 528) | func TestLowerColor(t *testing.T) {
function TestDeclaration (line 563) | func TestDeclaration(t *testing.T) {
function TestSelector (line 581) | func TestSelector(t *testing.T) {
function TestNestedSelector (line 691) | func TestNestedSelector(t *testing.T) {
function TestBadQualifiedRules (line 748) | func TestBadQualifiedRules(t *testing.T) {
function TestAtRule (line 758) | func TestAtRule(t *testing.T) {
function TestAtCharset (line 855) | func TestAtCharset(t *testing.T) {
function TestAtImport (line 903) | func TestAtImport(t *testing.T) {
function TestLegalComment (line 932) | func TestLegalComment(t *testing.T) {
function TestAtKeyframes (line 955) | func TestAtKeyframes(t *testing.T) {
function TestAtRuleValidation (line 1007) | func TestAtRuleValidation(t *testing.T) {
function TestAtLayer (line 1017) | func TestAtLayer(t *testing.T) {
function TestEmptyRule (line 1077) | func TestEmptyRule(t *testing.T) {
function TestMarginAndPaddingAndInset (line 1104) | func TestMarginAndPaddingAndInset(t *testing.T) {
function TestBorderRadius (line 1225) | func TestBorderRadius(t *testing.T) {
function TestBoxShadow (line 1299) | func TestBoxShadow(t *testing.T) {
function TestDeduplicateRules (line 1318) | func TestDeduplicateRules(t *testing.T) {
function TestMangleTime (line 1347) | func TestMangleTime(t *testing.T) {
function TestCalc (line 1385) | func TestCalc(t *testing.T) {
function TestMinifyCalc (line 1412) | func TestMinifyCalc(t *testing.T) {
function TestMangleCalc (line 1419) | func TestMangleCalc(t *testing.T) {
function TestTransform (line 1504) | func TestTransform(t *testing.T) {
function TestMangleAlpha (line 1671) | func TestMangleAlpha(t *testing.T) {
function TestMangleDuplicateSelectorRules (line 1699) | func TestMangleDuplicateSelectorRules(t *testing.T) {
function TestFontWeight (line 1735) | func TestFontWeight(t *testing.T) {
function TestFontFamily (line 1745) | func TestFontFamily(t *testing.T) {
function TestFont (line 1767) | func TestFont(t *testing.T) {
function TestWarningUnexpectedCloseBrace (line 1787) | func TestWarningUnexpectedCloseBrace(t *testing.T) {
function TestPropertyTypoWarning (line 1804) | func TestPropertyTypoWarning(t *testing.T) {
FILE: lib/esbuild/css_parser/css_reduce_calc.go
method tryToReduceCalcExpression (line 13) | func (p *parser) tryToReduceCalcExpression(token css_ast.Token) css_ast....
type calcTerm (line 32) | type calcTerm interface
type calcSum (line 37) | type calcSum struct
method convertToToken (line 91) | func (c *calcSum) convertToToken(whitespace css_ast.WhitespaceFlags) (...
method partiallySimplify (line 278) | func (c *calcSum) partiallySimplify() calcTerm {
type calcProduct (line 41) | type calcProduct struct
method convertToToken (line 171) | func (c *calcProduct) convertToToken(whitespace css_ast.WhitespaceFlag...
method partiallySimplify (line 323) | func (c *calcProduct) partiallySimplify() calcTerm {
type calcNegate (line 45) | type calcNegate struct
method convertToToken (line 214) | func (c *calcNegate) convertToToken(whitespace css_ast.WhitespaceFlags...
method partiallySimplify (line 401) | func (c *calcNegate) partiallySimplify() calcTerm {
type calcInvert (line 49) | type calcInvert struct
method convertToToken (line 231) | func (c *calcInvert) convertToToken(whitespace css_ast.WhitespaceFlags...
method partiallySimplify (line 420) | func (c *calcInvert) partiallySimplify() calcTerm {
type calcNumeric (line 53) | type calcNumeric struct
method convertToToken (line 248) | func (c *calcNumeric) convertToToken(whitespace css_ast.WhitespaceFlag...
method partiallySimplify (line 439) | func (c *calcNumeric) partiallySimplify() calcTerm {
type calcValue (line 58) | type calcValue struct
method convertToToken (line 272) | func (c *calcValue) convertToToken(whitespace css_ast.WhitespaceFlags)...
method partiallySimplify (line 443) | func (c *calcValue) partiallySimplify() calcTerm {
function floatToStringForCalc (line 63) | func floatToStringForCalc(a float64) (string, bool) {
function tryToParseCalcTerm (line 447) | func tryToParseCalcTerm(tokens []css_ast.Token) calcTerm {
FILE: lib/esbuild/css_printer/astro_features.go
method printScopedSelector (line 10) | func (p *printer) printScopedSelector() bool {
method printCompoundSelector (line 23) | func (p *printer) printCompoundSelector(sel css_ast.CompoundSelector, is...
method printPseudoClassSelector (line 169) | func (p *printer) printPseudoClassSelector(pseudo css_ast.SSPseudoClass,...
FILE: lib/esbuild/css_printer/css_printer.go
constant quoteForURL (line 16) | quoteForURL byte = 0
type printer (line 18) | type printer struct
method printRule (line 74) | func (p *printer) printRule(rule css_ast.Rule, indent int32, omitTrail...
method printIndentedComment (line 279) | func (p *printer) printIndentedComment(indent int32, text string) {
method printRuleBlock (line 298) | func (p *printer) printRuleBlock(rules []css_ast.Rule, indent int32) {
method printComplexSelectors (line 316) | func (p *printer) printComplexSelectors(selectors []css_ast.ComplexSel...
method printNamespacedName (line 346) | func (p *printer) printNamespacedName(nsName css_ast.NamespacedName, w...
method print (line 372) | func (p *printer) print(text string) {
method printQuoted (line 414) | func (p *printer) printQuoted(text string) {
method printWithEscape (line 426) | func (p *printer) printWithEscape(c rune, escape escapeKind, remaining...
method printQuotedWithQuote (line 465) | func (p *printer) printQuotedWithQuote(text string, quote byte) {
method printIdent (line 522) | func (p *printer) printIdent(text string, mode identMode, whitespace t...
method printIndent (line 572) | func (p *printer) printIndent(indent int32) {
method printTokens (line 583) | func (p *printer) printTokens(tokens []css_ast.Token, opts printTokens...
type ScopeStrategy (line 27) | type ScopeStrategy
constant ScopeStrategyWhere (line 30) | ScopeStrategyWhere ScopeStrategy = iota
constant ScopeStrategyClass (line 31) | ScopeStrategyClass
constant ScopeStrategyAttribute (line 32) | ScopeStrategyAttribute ScopeStrategy = iota
type Options (line 35) | type Options struct
type PrintResult (line 52) | type PrintResult struct
function Print (line 58) | func Print(tree css_ast.AST, options Options) PrintResult {
function bestQuoteCharForString (line 376) | func bestQuoteCharForString(text string, forURL bool) byte {
type escapeKind (line 418) | type escapeKind
constant escapeNone (line 421) | escapeNone escapeKind = iota
constant escapeBackslash (line 422) | escapeBackslash
constant escapeHex (line 423) | escapeHex
type identMode (line 507) | type identMode
constant identNormal (line 510) | identNormal identMode = iota
constant identHash (line 511) | identHash
constant identDimensionUnit (line 512) | identDimensionUnit
type trailingWhitespace (line 515) | type trailingWhitespace
constant mayNeedWhitespaceAfter (line 518) | mayNeedWhitespaceAfter trailingWhitespace = iota
constant canDiscardWhitespaceAfter (line 519) | canDiscardWhitespaceAfter
type printTokensOpts (line 578) | type printTokensOpts struct
FILE: lib/esbuild/css_printer/css_printer_test.go
function assertEqual (line 11) | func assertEqual(t *testing.T, a interface{}, b interface{}) {
function expectPrintedCommon (line 18) | func expectPrintedCommon(t *testing.T, name string, contents string, exp...
function expectPrinted (line 39) | func expectPrinted(t *testing.T, contents string, expected string) {
function expectPrintedMinify (line 44) | func expectPrintedMinify(t *testing.T, contents string, expected string) {
function expectPrintedASCII (line 51) | func expectPrintedASCII(t *testing.T, contents string, expected string) {
function expectPrintedString (line 58) | func expectPrintedString(t *testing.T, stringValue string, expected stri...
function TestStringQuote (line 68) | func TestStringQuote(t *testing.T) {
function TestURLQuote (line 100) | func TestURLQuote(t *testing.T) {
function TestImportant (line 110) | func TestImportant(t *testing.T) {
function TestSelector (line 122) | func TestSelector(t *testing.T) {
function TestNestedSelector (line 140) | func TestNestedSelector(t *testing.T) {
function TestBadQualifiedRules (line 147) | func TestBadQualifiedRules(t *testing.T) {
function TestDeclaration (line 166) | func TestDeclaration(t *testing.T) {
function TestVerbatimWhitespace (line 193) | func TestVerbatimWhitespace(t *testing.T) {
function TestAtRule (line 293) | func TestAtRule(t *testing.T) {
function TestAtCharset (line 312) | func TestAtCharset(t *testing.T) {
function TestAtImport (line 317) | func TestAtImport(t *testing.T) {
function TestAtKeyframes (line 331) | func TestAtKeyframes(t *testing.T) {
function TestAtMedia (line 338) | func TestAtMedia(t *testing.T) {
function TestAtFontFace (line 345) | func TestAtFontFace(t *testing.T) {
function TestAtPage (line 352) | func TestAtPage(t *testing.T) {
function TestAtStartingStyle (line 359) | func TestAtStartingStyle(t *testing.T) {
function TestMsGridColumnsWhitespace (line 366) | func TestMsGridColumnsWhitespace(t *testing.T) {
function TestASCII (line 374) | func TestASCII(t *testing.T) {
FILE: lib/esbuild/helpers/bitset.go
type BitSet (line 5) | type BitSet struct
method HasBit (line 13) | func (bs BitSet) HasBit(bit uint) bool {
method SetBit (line 17) | func (bs BitSet) SetBit(bit uint) {
method Equals (line 21) | func (bs BitSet) Equals(other BitSet) bool {
method String (line 25) | func (bs BitSet) String() string {
function NewBitSet (line 9) | func NewBitSet(bitCount uint) BitSet {
FILE: lib/esbuild/helpers/comment.go
function RemoveMultiLineCommentIndent (line 8) | func RemoveMultiLineCommentIndent(prefix string, text string) string {
function EscapeClosingTag (line 70) | func EscapeClosingTag(text string, slashTag string) string {
FILE: lib/esbuild/helpers/hash.go
function HashCombine (line 4) | func HashCombine(seed uint32, hash uint32) uint32 {
function HashCombineString (line 8) | func HashCombineString(seed uint32, text string) uint32 {
FILE: lib/esbuild/helpers/joiner.go
type Joiner (line 12) | type Joiner struct
method AddString (line 29) | func (j *Joiner) AddString(data string) {
method AddBytes (line 37) | func (j *Joiner) AddBytes(data []byte) {
method LastByte (line 45) | func (j *Joiner) LastByte() byte {
method Length (line 49) | func (j *Joiner) Length() uint32 {
method EnsureNewlineAtEnd (line 53) | func (j *Joiner) EnsureNewlineAtEnd() {
method Done (line 59) | func (j *Joiner) Done() []byte {
method Contains (line 74) | func (j *Joiner) Contains(s string, b []byte) bool {
type joinerString (line 19) | type joinerString struct
type joinerBytes (line 24) | type joinerBytes struct
FILE: lib/esbuild/helpers/mime.go
function MimeTypeByExtension (line 25) | func MimeTypeByExtension(ext string) string {
FILE: lib/esbuild/helpers/path.go
function IsInsideNodeModules (line 5) | func IsInsideNodeModules(path string) bool {
FILE: lib/esbuild/helpers/serializer.go
type Serializer (line 6) | type Serializer struct
method Enter (line 18) | func (s *Serializer) Enter(i int) {
method Leave (line 24) | func (s *Serializer) Leave(i int) {
function MakeSerializer (line 10) | func MakeSerializer(count int) Serializer {
FILE: lib/esbuild/helpers/stack.go
function PrettyPrintedStack (line 8) | func PrettyPrintedStack() string {
FILE: lib/esbuild/helpers/timer.go
type Timer (line 12) | type Timer struct
method Begin (line 23) | func (t *Timer) Begin(name string) {
method End (line 32) | func (t *Timer) End(name string) {
method Fork (line 42) | func (t *Timer) Fork() *Timer {
method Join (line 49) | func (t *Timer) Join(other *Timer) {
method Log (line 57) | func (t *Timer) Log(log logger.Log) {
type timerData (line 17) | type timerData struct
FILE: lib/esbuild/helpers/typos.go
type TypoDetector (line 5) | type TypoDetector struct
method MaybeCorrectTypo (line 24) | func (detector TypoDetector) MaybeCorrectTypo(typo string) (string, bo...
function MakeTypoDetector (line 9) | func MakeTypoDetector(valid []string) TypoDetector {
FILE: lib/esbuild/helpers/utf.go
function ContainsNonBMPCodePoint (line 8) | func ContainsNonBMPCodePoint(text string) bool {
function ContainsNonBMPCodePointUTF16 (line 18) | func ContainsNonBMPCodePointUTF16(text []uint16) bool {
function StringToUTF16 (line 33) | func StringToUTF16(text string) []uint16 {
function UTF16ToString (line 46) | func UTF16ToString(text []uint16) string {
function UTF16ToStringWithValidation (line 64) | func UTF16ToStringWithValidation(text []uint16) (string, uint16, bool) {
function UTF16EqualsString (line 91) | func UTF16EqualsString(text []uint16, str string) bool {
function UTF16EqualsUTF16 (line 121) | func UTF16EqualsUTF16(a []uint16, b []uint16) bool {
function encodeWTF8Rune (line 135) | func encodeWTF8Rune(p []byte, r rune) int {
function DecodeWTF8Rune (line 168) | func DecodeWTF8Rune(s string) (rune, int) {
FILE: lib/esbuild/logger/logger.go
constant defaultTerminalWidth (line 19) | defaultTerminalWidth = 80
type Log (line 21) | type Log struct
method Add (line 1601) | func (log Log) Add(kind MsgKind, tracker *LineColumnTracker, r Range, ...
method AddWithNotes (line 1608) | func (log Log) AddWithNotes(kind MsgKind, tracker *LineColumnTracker, ...
type LogLevel (line 35) | type LogLevel
constant LevelNone (line 38) | LevelNone LogLevel = iota
constant LevelVerbose (line 39) | LevelVerbose
constant LevelDebug (line 40) | LevelDebug
constant LevelInfo (line 41) | LevelInfo
constant LevelWarning (line 42) | LevelWarning
constant LevelError (line 43) | LevelError
constant LevelSilent (line 44) | LevelSilent
type MsgKind (line 47) | type MsgKind
method String (line 58) | func (kind MsgKind) String() string {
method Icon (line 77) | func (kind MsgKind) Icon() string {
constant Error (line 50) | Error MsgKind = iota
constant Warning (line 51) | Warning
constant Info (line 52) | Info
constant Note (line 53) | Note
constant Debug (line 54) | Debug
constant Verbose (line 55) | Verbose
function isProbablyWindowsCommandPrompt (line 122) | func isProbablyWindowsCommandPrompt() bool {
type Msg (line 147) | type Msg struct
method String (line 988) | func (msg Msg) String(options OutputOptions, terminalInfo TerminalInfo...
type MsgData (line 154) | type MsgData struct
type MsgLocation (line 164) | type MsgLocation struct
type Loc (line 174) | type Loc struct
type Range (line 179) | type Range struct
method End (line 184) | func (r Range) End() int32 {
type Span (line 188) | type Span struct
type SortableMsgs (line 194) | type SortableMsgs
method Len (line 196) | func (a SortableMsgs) Len() int { return len(a) }
method Swap (line 197) | func (a SortableMsgs) Swap(i int, j int) { a[i], a[j] = a[j], a[i] }
method Less (line 199) | func (a SortableMsgs) Less(i int, j int) bool {
type Path (line 226) | type Path struct
method IsDisabled (line 246) | func (p Path) IsDisabled() bool {
method ComesBeforeInSortedOrder (line 250) | func (a Path) ComesBeforeInSortedOrder(b Path) bool {
type PathFlags (line 239) | type PathFlags
constant PathDisabled (line 243) | PathDisabled PathFlags = 1 << iota
function hasNoColorEnvironmentVariable (line 260) | func hasNoColorEnvironmentVariable() bool {
function PlatformIndependentPathDirBaseExt (line 276) | func PlatformIndependentPathDirBaseExt(path string) (dir string, base st...
type Source (line 304) | type Source struct
method TextForRange (line 337) | func (s *Source) TextForRange(r Range) string {
method LocBeforeWhitespace (line 341) | func (s *Source) LocBeforeWhitespace(loc Loc) Loc {
method RangeOfOperatorBefore (line 352) | func (s *Source) RangeOfOperatorBefore(loc Loc, op string) Range {
method RangeOfOperatorAfter (line 361) | func (s *Source) RangeOfOperatorAfter(loc Loc, op string) Range {
method RangeOfString (line 370) | func (s *Source) RangeOfString(loc Loc) Range {
method RangeOfNumber (line 392) | func (s *Source) RangeOfNumber(loc Loc) (r Range) {
method RangeOfLegacyOctalEscape (line 411) | func (s *Source) RangeOfLegacyOctalEscape(loc Loc) (r Range) {
function plural (line 428) | func plural(prefix string, count int, shown int, someAreMissing bool) st...
function errorAndWarningSummary (line 443) | func errorAndWarningSummary(errors int, warnings int, shownErrors int, s...
type APIKind (line 457) | type APIKind
constant GoAPI (line 460) | GoAPI APIKind = iota
constant CLIAPI (line 461) | CLIAPI
constant JSAPI (line 462) | JSAPI
type TerminalInfo (line 468) | type TerminalInfo struct
function NewStderrLog (line 475) | func NewStderrLog(options OutputOptions) Log {
function PrintErrorToStderr (line 612) | func PrintErrorToStderr(osArgs []string, text string) {
function OutputOptionsForArgs (line 616) | func OutputOptionsForArgs(osArgs []string) OutputOptions {
function PrintMessageToStderr (line 641) | func PrintMessageToStderr(osArgs []string, msg Msg) {
type Colors (line 647) | type Colors struct
function PrintText (line 705) | func PrintText(file *os.File, level LogLevel, osArgs []string, callback ...
function PrintTextWithColor (line 716) | func PrintTextWithColor(file *os.File, useColor UseColor, callback func(...
type SummaryTableEntry (line 734) | type SummaryTableEntry struct
type SummaryTable (line 743) | type SummaryTable
method Len (line 745) | func (t SummaryTable) Len() int { return len(t) }
method Swap (line 746) | func (t SummaryTable) Swap(i int, j int) { t[i], t[j] = t[j], t[i] }
method Less (line 748) | func (t SummaryTable) Less(i int, j int) bool {
constant sizeWarningThreshold (line 781) | sizeWarningThreshold = 1024 * 1024
function PrintSummary (line 783) | func PrintSummary(useColor UseColor, table SummaryTable, start *time.Tim...
type DeferLogKind (line 928) | type DeferLogKind
constant DeferLogAll (line 931) | DeferLogAll DeferLogKind = iota
constant DeferLogNoVerboseOrDebug (line 932) | DeferLogNoVerboseOrDebug
function NewDeferLog (line 935) | func NewDeferLog(kind DeferLogKind) Log {
type UseColor (line 973) | type UseColor
constant ColorIfTerminal (line 976) | ColorIfTerminal UseColor = iota
constant ColorNever (line 977) | ColorNever
constant ColorAlways (line 978) | ColorAlways
type OutputOptions (line 981) | type OutputOptions struct
constant extraMarginChars (line 1010) | extraMarginChars = 9
function marginWithLineText (line 1012) | func marginWithLineText(maxMargin int, line int) string {
function emptyMarginText (line 1017) | func emptyMarginText(maxMargin int, isLast bool) string {
function msgString (line 1025) | func msgString(includeSource bool, terminalInfo TerminalInfo, kind MsgKi...
function linkifyText (line 1132) | func linkifyText(text string, underline string, reset string) string {
function wrapWordsInString (line 1175) | func wrapWordsInString(text string, width int) []string {
type MsgDetail (line 1232) | type MsgDetail struct
type LineColumnTracker (line 1265) | type LineColumnTracker struct
method MsgData (line 1292) | func (tracker *LineColumnTracker) MsgData(r Range, text string) MsgData {
method scanTo (line 1299) | func (t *LineColumnTracker) scanTo(offset int32) {
method computeLineAndColumn (line 1362) | func (t *LineColumnTracker) computeLineAndColumn(offset int) (lineCoun...
method MsgLocationOrNil (line 1399) | func (tracker *LineColumnTracker) MsgLocationOrNil(r Range) *MsgLocati...
function MakeLineColumnTracker (line 1277) | func MakeLineColumnTracker(source *Source) LineColumnTracker {
function detailStruct (line 1416) | func detailStruct(data MsgData, terminalInfo TerminalInfo, maxMargin int...
function estimateWidthInTerminal (line 1561) | func estimateWidthInTerminal(text string) int {
function renderTabStops (line 1577) | func renderTabStops(withTabs string, spacesPerTab int) string {
FILE: lib/esbuild/logger/logger_darwin.go
constant SupportsColorEscapes (line 12) | SupportsColorEscapes = true
function GetTerminalInfo (line 14) | func GetTerminalInfo(file *os.File) (info TerminalInfo) {
function writeStringWithColor (line 32) | func writeStringWithColor(file *os.File, text string) {
FILE: lib/esbuild/logger/logger_linux.go
constant SupportsColorEscapes (line 12) | SupportsColorEscapes = true
function GetTerminalInfo (line 14) | func GetTerminalInfo(file *os.File) (info TerminalInfo) {
function writeStringWithColor (line 32) | func writeStringWithColor(file *os.File, text string) {
FILE: lib/esbuild/logger/logger_other.go
constant SupportsColorEscapes (line 8) | SupportsColorEscapes = false
function GetTerminalInfo (line 10) | func GetTerminalInfo(*os.File) TerminalInfo {
function writeStringWithColor (line 14) | func writeStringWithColor(file *os.File, text string) {
FILE: lib/esbuild/logger/logger_windows.go
constant SupportsColorEscapes (line 13) | SupportsColorEscapes = true
type consoleScreenBufferInfo (line 20) | type consoleScreenBufferInfo struct
function GetTerminalInfo (line 34) | func GetTerminalInfo(file *os.File) TerminalInfo {
constant FOREGROUND_BLUE (line 54) | FOREGROUND_BLUE uint8 = 1 << iota
constant FOREGROUND_GREEN (line 55) | FOREGROUND_GREEN
constant FOREGROUND_RED (line 56) | FOREGROUND_RED
constant FOREGROUND_INTENSITY (line 57) | FOREGROUND_INTENSITY
constant BACKGROUND_BLUE (line 58) | BACKGROUND_BLUE
constant BACKGROUND_GREEN (line 59) | BACKGROUND_GREEN
constant BACKGROUND_RED (line 60) | BACKGROUND_RED
constant BACKGROUND_INTENSITY (line 61) | BACKGROUND_INTENSITY
function writeStringWithColor (line 95) | func writeStringWithColor(file *os.File, text string) {
FILE: lib/esbuild/sourcemap/sourcemap.go
type Mapping (line 11) | type Mapping struct
type SourceMap (line 20) | type SourceMap struct
method Find (line 38) | func (sm *SourceMap) Find(line int32, column int32) *Mapping {
type SourceContent (line 26) | type SourceContent struct
function EncodeVLQ (line 82) | func EncodeVLQ(value int) []byte {
function DecodeVLQ (line 117) | func DecodeVLQ(encoded []byte, start int) (int, int) {
function DecodeVLQUTF16 (line 147) | func DecodeVLQUTF16(encoded []uint16) (int, int, bool) {
type LineColumnOffset (line 185) | type LineColumnOffset struct
method ComesBefore (line 190) | func (a LineColumnOffset) ComesBefore(b LineColumnOffset) bool {
method Add (line 194) | func (a *LineColumnOffset) Add(b LineColumnOffset) {
method AdvanceBytes (line 203) | func (offset *LineColumnOffset) AdvanceBytes(bytes []byte) {
method AdvanceString (line 231) | func (offset *LineColumnOffset) AdvanceString(text string) {
type SourceMapPieces (line 257) | type SourceMapPieces struct
method HasContent (line 263) | func (pieces SourceMapPieces) HasContent() bool {
method Finalize (line 272) | func (pieces SourceMapPieces) Finalize(shifts []SourceMapShift) []byte {
type SourceMapShift (line 267) | type SourceMapShift struct
type SourceMapState (line 371) | type SourceMapState struct
function AppendSourceMapChunk (line 391) | func AppendSourceMapChunk(j *helpers.Joiner, prevEndState SourceMapState...
function appendMappingToBuffer (line 432) | func appendMappingToBuffer(buffer []byte, lastByte byte, prevState Sourc...
type LineOffsetTable (line 457) | type LineOffsetTable struct
function GenerateLineOffsetTables (line 474) | func GenerateLineOffsetTables(contents string, approximateLineCount int3...
type Chunk (line 552) | type Chunk struct
type ChunkBuilder (line 567) | type ChunkBuilder struct
method AddSourceMapping (line 610) | func (b *ChunkBuilder) AddSourceMapping(loc logger.Loc, output []byte) {
method GenerateChunk (line 664) | func (b *ChunkBuilder) GenerateChunk(output []byte) Chunk {
method updateGeneratedLineAndColumn (line 683) | func (b *ChunkBuilder) updateGeneratedLineAndColumn(output []byte) {
method appendMapping (line 728) | func (b *ChunkBuilder) appendMapping(currentState SourceMapState) {
method appendMappingWithoutRemapping (line 748) | func (b *ChunkBuilder) appendMappingWithoutRemapping(currentState Sour...
function MakeChunkBuilder (line 589) | func MakeChunkBuilder(inputSourceMap *SourceMap, lineOffsetTables []Line...
FILE: lib/esbuild/test/diff.go
function diff (line 10) | func diff(old string, new string, color bool) string {
function diffRec (line 15) | func diffRec(result []string, old []string, new []string, color bool) []...
function lcSubstr (line 51) | func lcSubstr(S []string, T []string) (int, int, int) {
FILE: lib/esbuild/test/util.go
function AssertEqual (line 10) | func AssertEqual(t *testing.T, observed interface{}, expected interface{...
function AssertEqualWithDiff (line 17) | func AssertEqualWithDiff(t *testing.T, observed interface{}, expected in...
function SourceForTest (line 27) | func SourceForTest(contents string) logger.Source {
FILE: packages/compiler/src/browser/index.ts
type Service (line 16) | interface Service {
FILE: packages/compiler/src/browser/utils.ts
type Visitor (line 18) | type Visitor = (node: Node, parent?: ParentNode, index?: number) => void...
function guard (line 20) | function guard<Type extends Node>(type: string) {
method parent (line 25) | parent(node: Node): node is ParentNode {
method literal (line 28) | literal(node: Node): node is LiteralNode {
method tag (line 31) | tag(node: Node): node is TagLikeNode {
method whitespace (line 39) | whitespace(node: Node): node is TextNode {
class Walker (line 54) | class Walker {
method constructor (line 55) | constructor(private callback: Visitor) {}
method visit (line 56) | async visit(node: Node, parent?: ParentNode, index?: number): Promise<...
function walk (line 69) | function walk(node: ParentNode, callback: Visitor): void {
function walkAsync (line 74) | function walkAsync(node: ParentNode, callback: Visitor): Promise<void> {
function serializeAttributes (line 79) | function serializeAttributes(node: TagLikeNode): string {
type SerializeOptions (line 113) | interface SerializeOptions {
type SerializeOtions (line 117) | type SerializeOtions = SerializeOptions;
function serialize (line 119) | function serialize(root: Node, opts: SerializeOptions = { selfClose: tru...
FILE: packages/compiler/src/browser/wasm_exec.ts
method writeSync (line 25) | writeSync(fd, buf) {
method write (line 34) | write(fd, buf, offset, length, position, callback) {
method chmod (line 42) | chmod(path, mode, callback) {
method chown (line 45) | chown(path, uid, gid, callback) {
method close (line 48) | close(fd, callback) {
method fchmod (line 51) | fchmod(fd, mode, callback) {
method fchown (line 54) | fchown(fd, uid, gid, callback) {
method fstat (line 57) | fstat(fd, callback) {
method fsync (line 60) | fsync(fd, callback) {
method ftruncate (line 63) | ftruncate(fd, length, callback) {
method lchown (line 66) | lchown(path, uid, gid, callback) {
method link (line 69) | link(path, link, callback) {
method lstat (line 72) | lstat(path, callback) {
method mkdir (line 75) | mkdir(path, perm, callback) {
method open (line 78) | open(path, flags, mode, callback) {
method read (line 81) | read(fd, buffer, offset, length, position, callback) {
method readdir (line 84) | readdir(path, callback) {
method readlink (line 87) | readlink(path, callback) {
method rename (line 90) | rename(from, to, callback) {
method rmdir (line 93) | rmdir(path, callback) {
method stat (line 96) | stat(path, callback) {
method symlink (line 99) | symlink(path, link, callback) {
method truncate (line 102) | truncate(path, length, callback) {
method unlink (line 105) | unlink(path, callback) {
method utimes (line 108) | utimes(path, atime, mtime, callback) {
method getuid (line 113) | getuid() {
method getgid (line 116) | getgid() {
method geteuid (line 119) | geteuid() {
method getegid (line 122) | getegid() {
method getgroups (line 125) | getgroups() {
method umask (line 130) | umask() {
method cwd (line 133) | cwd() {
method chdir (line 136) | chdir() {
class Go (line 156) | class Go {
method constructor (line 158) | constructor() {
method run (line 523) | async run(instance) {
method _resume (line 594) | private _resume() {
method _makeFuncWrapper (line 604) | private _makeFuncWrapper(id) {
FILE: packages/compiler/src/node/index.ts
type Service (line 33) | interface Service {
FILE: packages/compiler/src/node/sync.ts
type UnwrappedPromise (line 6) | type UnwrappedPromise<T> = T extends (...params: any) => Promise<infer R...
type Service (line 10) | interface Service {
function getService (line 16) | function getService(): Service {
function startRunningService (line 36) | function startRunningService(): Service {
function instantiateWASM (line 75) | function instantiateWASM(wasmURL: string, importObject: Record<string, a...
FILE: packages/compiler/src/node/utils.ts
type Visitor (line 18) | type Visitor = (node: Node, parent?: ParentNode, index?: number) => void...
function guard (line 20) | function guard<Type extends Node>(type: string) {
method parent (line 25) | parent(node: Node): node is ParentNode {
method literal (line 28) | literal(node: Node): node is LiteralNode {
method tag (line 31) | tag(node: Node): node is TagLikeNode {
method whitespace (line 39) | whitespace(node: Node): node is TextNode {
class Walker (line 54) | class Walker {
method constructor (line 55) | constructor(private callback: Visitor) {}
method visit (line 56) | async visit(node: Node, parent?: ParentNode, index?: number): Promise<...
function walk (line 69) | function walk(node: ParentNode, callback: Visitor): void {
function walkAsync (line 74) | function walkAsync(node: ParentNode, callback: Visitor): Promise<void> {
function serializeAttributes (line 79) | function serializeAttributes(node: TagLikeNode): string {
type SerializeOptions (line 113) | interface SerializeOptions {
type SerializeOtions (line 117) | type SerializeOtions = SerializeOptions;
function serialize (line 119) | function serialize(root: Node, opts: SerializeOptions = { selfClose: tru...
FILE: packages/compiler/src/node/wasm_exec.ts
method getRandomValues (line 29) | getRandomValues(b) {
method now (line 39) | now() {
class Go (line 52) | class Go {
method constructor (line 54) | constructor() {
method run (line 419) | async run(instance) {
method _resume (line 490) | private _resume() {
method _makeFuncWrapper (line 500) | private _makeFuncWrapper(id) {
FILE: packages/compiler/src/shared/ast.ts
type ParentNode (line 1) | type ParentNode =
type LiteralNode (line 8) | type LiteralNode = TextNode | DoctypeNode | CommentNode | FrontmatterNode;
type Node (line 10) | type Node =
type Position (line 22) | interface Position {
type Point (line 26) | interface Point {
type BaseNode (line 34) | interface BaseNode {
type ParentLikeNode (line 39) | interface ParentLikeNode extends BaseNode {
type ValueNode (line 44) | interface ValueNode extends BaseNode {
type RootNode (line 48) | interface RootNode extends ParentLikeNode {
type AttributeNode (line 52) | interface AttributeNode extends BaseNode {
type TextNode (line 60) | interface TextNode extends ValueNode {
type ElementNode (line 64) | interface ElementNode extends ParentLikeNode {
type FragmentNode (line 70) | interface FragmentNode extends ParentLikeNode {
type ComponentNode (line 76) | interface ComponentNode extends ParentLikeNode {
type CustomElementNode (line 82) | interface CustomElementNode extends ParentLikeNode {
type TagLikeNode (line 88) | type TagLikeNode = ElementNode | FragmentNode | ComponentNode | CustomEl...
type DoctypeNode (line 90) | interface DoctypeNode extends ValueNode {
type CommentNode (line 94) | interface CommentNode extends ValueNode {
type FrontmatterNode (line 98) | interface FrontmatterNode extends ValueNode {
type ExpressionNode (line 102) | interface ExpressionNode extends ParentLikeNode {
FILE: packages/compiler/src/shared/diagnostics.ts
type DiagnosticCode (line 1) | enum DiagnosticCode {
FILE: packages/compiler/src/shared/types.ts
type PreprocessorResult (line 5) | interface PreprocessorResult {
type PreprocessorError (line 10) | interface PreprocessorError {
type ParseOptions (line 14) | interface ParseOptions {
type DiagnosticSeverity (line 18) | enum DiagnosticSeverity {
type DiagnosticMessage (line 25) | interface DiagnosticMessage {
type DiagnosticLocation (line 33) | interface DiagnosticLocation {
type TransformOptions (line 42) | interface TransformOptions {
type ConvertToTSXOptions (line 64) | type ConvertToTSXOptions = Pick<
type HoistedScript (line 78) | type HoistedScript = { type: string } & (
type HydratedComponent (line 90) | interface HydratedComponent {
type TransformResult (line 97) | interface TransformResult {
type SourceMap (line 112) | interface SourceMap {
type TSXLocation (line 125) | interface TSXLocation {
type TSXExtractedTag (line 130) | interface TSXExtractedTag {
type TSXExtractedScript (line 135) | interface TSXExtractedScript extends TSXExtractedTag {
type TSXExtractedStyle (line 139) | interface TSXExtractedStyle extends TSXExtractedTag {
type TSXResult (line 154) | interface TSXResult {
type ParseResult (line 166) | interface ParseResult {
type InitializeOptions (line 210) | interface InitializeOptions {
FILE: packages/compiler/test/bad-styles/sass.ts
constant FIXTURE (line 5) | const FIXTURE = `
method preprocessStyle (line 21) | async preprocessStyle() {
FILE: packages/compiler/test/basic/body-after-head-component.ts
constant FIXTURE (line 5) | const FIXTURE = `---
FILE: packages/compiler/test/basic/body-expression.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/basic/comment.ts
constant FIXTURE (line 5) | const FIXTURE = `---
FILE: packages/compiler/test/basic/component-metadata/index.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/basic/component-name.ts
constant FIXTURE (line 5) | const FIXTURE = '<div>Hello world!</div>';
FILE: packages/compiler/test/basic/expression-then-node.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/basic/fragment.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/basic/head-injection.ts
constant FIXTURE (line 5) | const FIXTURE = '<html><head><title>Ah</title></head></html>';
FILE: packages/compiler/test/basic/lt-gt-text.ts
constant FIXTURE (line 5) | const FIXTURE = `---
FILE: packages/compiler/test/basic/null-chars.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/basic/props-interface.ts
constant FIXTURE (line 5) | const FIXTURE = `---
FILE: packages/compiler/test/basic/script-before-html.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/basic/script-fragment.ts
constant FIXTURE (line 5) | const FIXTURE = `<script src={Astro.resolve("../scripts/no_hoist_nonmodu...
FILE: packages/compiler/test/basic/top-level-expressions.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/basic/trailing-newline.ts
constant FIXTURE (line 5) | const FIXTURE = `{
FILE: packages/compiler/test/basic/trailing-space.ts
constant FIXTURE (line 5) | const FIXTURE = `---
FILE: packages/compiler/test/basic/trailing-spaces-ii.ts
constant FIXTURE (line 5) | const FIXTURE = `---
FILE: packages/compiler/test/client-directive/special-characters.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/client-directive/warn.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/compact/minify.ts
function minify (line 5) | async function minify(input: string) {
FILE: packages/compiler/test/css-order/astro-styles.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/css-order/imported-styles.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/errors/client-only-unfound.ts
constant FIXTURE (line 5) | const FIXTURE = `---
FILE: packages/compiler/test/errors/fragment-shorthand.ts
constant FIXTURE (line 5) | const FIXTURE = `<html>
FILE: packages/compiler/test/errors/html-comment.ts
constant FIXTURE (line 5) | const FIXTURE = `<html>
FILE: packages/compiler/test/errors/jsx-comment.ts
constant FIXTURE (line 5) | const FIXTURE = `<html>
FILE: packages/compiler/test/errors/missing-frontmatter-fence.ts
constant FIXTURE (line 6) | const FIXTURE = `import BaseLayout from '@/layouts/BaseLayout.astro';
FILE: packages/compiler/test/head-metadata/with-head.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/head-metadata/without-head.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/parse/ast.ts
constant FIXTURE (line 6) | const FIXTURE = `
FILE: packages/compiler/test/parse/client-component-unfound.ts
constant FIXTURE (line 5) | const FIXTURE = `{
FILE: packages/compiler/test/parse/escaping.ts
constant STYLE (line 5) | const STYLE = 'div { & span { color: red; }}';
constant FIXTURE (line 6) | const FIXTURE = `<style>${STYLE}</style>`;
FILE: packages/compiler/test/parse/fragment.ts
constant FIXTURE (line 6) | const FIXTURE = '<>Hello</><Fragment>World</Fragment>';
FILE: packages/compiler/test/parse/multibyte-characters.ts
constant FIXTURE (line 5) | const FIXTURE = '{foo},';
FILE: packages/compiler/test/parse/orphan-head.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/parse/orphan-slot.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/parse/serialize.ts
constant FIXTURE (line 6) | const FIXTURE = `---
FILE: packages/compiler/test/resolve-path/preserve.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/scope/same-source.ts
constant FIXTURE (line 5) | const FIXTURE = `
function grabAstroScope (line 20) | function grabAstroScope(code: string) {
FILE: packages/compiler/test/server-islands/meta.ts
constant FIXTURE (line 6) | const FIXTURE = `
FILE: packages/compiler/test/slot-result/result.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/static-extraction/css.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/static-extraction/hoist-expression.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/stress/index.ts
function run (line 3) | async function run() {
constant MAX_CONCURRENT_RENDERS (line 197) | const MAX_CONCURRENT_RENDERS = 25;
constant MAX_RENDERS (line 198) | const MAX_RENDERS = 1e4;
function test (line 200) | async function test() {
FILE: packages/compiler/test/styles/emit-scope.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/styles/empty-style.ts
constant FIXTURE (line 6) | const FIXTURE = `
FILE: packages/compiler/test/styles/hash.ts
constant FIXTURE_A (line 5) | const FIXTURE_A = `
constant FIXTURE_B (line 12) | const FIXTURE_B = `
constant FIXTURE_C (line 19) | const FIXTURE_C = `
constant FIXTURE_D (line 26) | const FIXTURE_D = `
FILE: packages/compiler/test/styles/sass.ts
constant FIXTURE (line 6) | const FIXTURE = `
FILE: packages/compiler/test/teardown/parse.ts
constant FIXTURE (line 5) | const FIXTURE = '<div>hello</div>';
FILE: packages/compiler/test/transition/data-astro.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/transition/meta.ts
constant FIXTURE (line 5) | const FIXTURE = `
FILE: packages/compiler/test/tsx-errors/eof.ts
constant FIXTURE (line 6) | const FIXTURE = `<html>
FILE: packages/compiler/test/tsx-errors/fragment-shorthand.ts
constant FIXTURE (line 6) | const FIXTURE = `<html>
FILE: packages/compiler/test/tsx-errors/unfinished-component.ts
constant FIXTURE (line 6) | const FIXTURE = '<div class={';
FILE: packages/compiler/test/tsx/props-and-getStaticPaths.ts
function getPrefix (line 6) | function getPrefix({
function getSuffix (line 23) | function getSuffix() {
FILE: packages/compiler/test/utils.ts
function preprocessStyle (line 5) | async function preprocessStyle(value: any, attrs: any): Promise<any> {
function transformSass (line 15) | function transformSass(value: string) {
function getPositionFor (line 28) | function getPositionFor(input: string, snippet: string) {
function testTSXSourcemap (line 46) | async function testTSXSourcemap(input: string, snippet: string) {
function testJSSourcemap (line 70) | async function testJSSourcemap(input: string, snippet: string) {
Condensed preview — 584 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,150K chars).
[
{
"path": ".changeset/README.md",
"chars": 510,
"preview": "# Changesets\n\nHello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that wo"
},
{
"path": ".changeset/config.json",
"chars": 256,
"preview": "{\n \"$schema\": \"https://unpkg.com/@changesets/config@1.6.1/schema.json\",\n \"changelog\": \"@changesets/cli/changelog\",\n \""
},
{
"path": ".devcontainer/Dockerfile",
"chars": 1081,
"preview": "# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.195.0/containers/go/.devcontai"
},
{
"path": ".devcontainer/devcontainer.json",
"chars": 953,
"preview": "// For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:\n// https://github.co"
},
{
"path": ".editorconfig",
"chars": 87,
"preview": "root = true\n\n[*.go]\nindent_style = tab\nindent_size = 2\ntrim_trailing_whitespace = true\n"
},
{
"path": ".git-blame-ignore-revs",
"chars": 76,
"preview": "# chore: format everything (#1020)\n402060270f50fe273d5e7387241d7eb36f99ca11\n"
},
{
"path": ".gitattributes",
"chars": 115,
"preview": "# Files with the language manually specified, sorted alphabetically.\n/internal/**/*.snap linguist-language=Markdown"
},
{
"path": ".github/ISSUE_TEMPLATE/---01-bug-report.yml",
"chars": 1406,
"preview": "name: \"\\U0001F41B Bug Report\"\ndescription: Report an issue or possible bug\ntitle: \"\\U0001F41B BUG:\"\nlabels: []\nassignees"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 475,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: 🏡 Main Astro Repo\n url: https://github.com/withastro/astro\n a"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 395,
"preview": "## Changes\n\n- What does this change?\n- Be short and concise. Bullet points can help!\n- Before/after screenshots can be h"
},
{
"path": ".github/workflows/ci.yml",
"chars": 2337,
"preview": "name: Test\n\non:\n workflow_dispatch:\n push:\n branches: ['main', 'next']\n pull_request:\n branches: ['main', 'next"
},
{
"path": ".github/workflows/congrats.yml",
"chars": 342,
"preview": "name: Congratsbot\n\non:\n push:\n branches: [main]\n\njobs:\n congrats:\n if: ${{ github.repository_owner == 'withastro"
},
{
"path": ".github/workflows/issue-labeled.yml",
"chars": 200,
"preview": "name: Issue Labeled\n\non:\n issues:\n types: [labeled]\n\njobs:\n reply_labelled:\n if: github.repository_owner == 'wit"
},
{
"path": ".github/workflows/issue-needs-repro.yml",
"chars": 453,
"preview": "name: Close Issues (needs repro)\n\non:\n schedule:\n - cron: \"0 0 * * *\"\n\njobs:\n close-issues:\n if: github.reposito"
},
{
"path": ".github/workflows/issue-opened.yml",
"chars": 217,
"preview": "name: Label issues\non:\n issues:\n types:\n - reopened\n - opened\n\njobs:\n label_issues:\n if: github.reposi"
},
{
"path": ".github/workflows/release.yml",
"chars": 5857,
"preview": "name: Release\npermissions: {}\n\non:\n # We trigger the release job when a commit is pushed to these branches\n push:\n "
},
{
"path": ".gitignore",
"chars": 104,
"preview": ".DS_Store\n.pnpm-store\nnode_modules\n*.wasm\n/astro\ndebug.test\n__debug_bin\npackages/compiler/sourcemap.mjs\n"
},
{
"path": ".gitpod.yml",
"chars": 359,
"preview": "# This configuration file was automatically generated by Gitpod.\n# Please adjust to your needs (see https://www.gitpod.i"
},
{
"path": ".golangci.yml",
"chars": 254,
"preview": "issues:\n exclude-dirs:\n - lib\n exclude-files:\n - xxhash.go\n exclude-rules:\n - path: token.go\n linters:\n"
},
{
"path": ".prettierignore",
"chars": 23,
"preview": "**/dist\npnpm-lock.yaml\n"
},
{
"path": ".vscode/settings.json",
"chars": 112,
"preview": "{\n \"go.toolsEnvVars\": {\n \"GOOS\": \"js\",\n \"GOARCH\": \"wasm\"\n },\n \"editor.unusualLineTerminators\": \"off\"\n}\n"
},
{
"path": "CONTRIBUTING.md",
"chars": 3966,
"preview": "# Contributing\n\nContributions are welcome to the Go compiler!\n\n## Setup\n\n### Go\n\n[Go][go] `1.20+` is needed to work with"
},
{
"path": "LICENSE",
"chars": 2770,
"preview": "MIT License\n\nCopyright (c) 2021 [Astro contributors](https://github.com/withastro/compiler/graphs/contributors)\n\nPermiss"
},
{
"path": "Makefile",
"chars": 380,
"preview": "GO_FLAGS += \"-ldflags=-s -w\"\n\n# Avoid embedding the build path in the executable for more reproducible builds\nGO_FLAGS +"
},
{
"path": "SYNTAX_SPEC.md",
"chars": 9445,
"preview": "# The `.astro` File Format - Syntax Specification\n\n**Version:** 1.0\n**Status:** Draft\n**Date:** 2026-02-03\n\n---\n\n## Tabl"
},
{
"path": "biome.json",
"chars": 1389,
"preview": "{\n \"$schema\": \"https://biomejs.dev/schemas/1.8.1/schema.json\",\n \"files\": {\n \"ignore\": [\"**/dist/**\", \"**/pnpm-lock."
},
{
"path": "cmd/astro-wasm/astro-wasm.go",
"chars": 17253,
"preview": "//go:build js && wasm\n\npackage main\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall/js"
},
{
"path": "go.mod",
"chars": 886,
"preview": "module github.com/withastro/compiler\n\ngo 1.21\n\nrequire (\n\tgithub.com/gkampitakis/go-snaps v0.5.2\n\tgithub.com/google/go-c"
},
{
"path": "go.sum",
"chars": 3837,
"preview": "github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=\ngithub.com/gkampitakis/ciinfo v0.3.0"
},
{
"path": "internal/const.go",
"chars": 3126,
"preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "internal/doc.go",
"chars": 253,
"preview": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "internal/doctype.go",
"chars": 4926,
"preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "internal/entity.go",
"chars": 114595,
"preview": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "internal/escape.go",
"chars": 5940,
"preview": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "internal/foreign.go",
"chars": 6363,
"preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "internal/handler/handler.go",
"chars": 2729,
"preview": "package handler\n\nimport (\n\t\"errors\"\n\t\"strings\"\n\n\t\"github.com/withastro/compiler/internal/loc\"\n\t\"github.com/withastro/com"
},
{
"path": "internal/hash.go",
"chars": 296,
"preview": "package astro\n\nimport (\n\t\"encoding/base32\"\n\t\"strings\"\n\n\t\"github.com/withastro/compiler/internal/xxhash\"\n)\n\nfunc HashStri"
},
{
"path": "internal/helpers/joiner.go",
"chars": 1802,
"preview": "package helpers\n\nimport (\n\t\"bytes\"\n\t\"strings\"\n)\n\n// This provides an efficient way to join lots of big string and byte s"
},
{
"path": "internal/helpers/js_comment_utils.go",
"chars": 893,
"preview": "package helpers\n\nimport (\n\t\"strings\"\n)\n\nfunc peekIs(input string, cur int, assert byte) bool {\n\treturn cur+1 < len(input"
},
{
"path": "internal/js_scanner/js_scanner.go",
"chars": 25925,
"preview": "package js_scanner\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\n\t\"github.com/iancoleman/strcase\"\n\t\"github.com/tdewolff/pa"
},
{
"path": "internal/js_scanner/js_scanner_test.go",
"chars": 24851,
"preview": "package js_scanner\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n\t\"testing\"\n\t\"unicode/utf8\"\n\n\t\"github.com/withas"
},
{
"path": "internal/js_scanner/testdata/fuzz/FuzzHoistImport/ec55358ab2929fbf4deab52587664e42682f0a6ea201a325c5c33f9d18c50456",
"chars": 49,
"preview": "go test fuzz v1\nstring(\"import\\\"\\nimport \\\"\\\";\")\n"
},
{
"path": "internal/loc/diagnostics.go",
"chars": 1188,
"preview": "package loc\n\ntype DiagnosticCode int\n\nconst (\n\tERROR DiagnosticCode = 1000\n\tERROR_UNTERMINAT"
},
{
"path": "internal/loc/loc.go",
"chars": 1440,
"preview": "package loc\n\ntype Loc struct {\n\t// This is the 0-based index of this location from the start of the file, in bytes\n\tStar"
},
{
"path": "internal/node.go",
"chars": 7775,
"preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "internal/parser.go",
"chars": 78193,
"preview": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "internal/parser_test.go",
"chars": 2442,
"preview": "package astro\n\nimport (\n\t\"reflect\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/withastro/compiler/internal/loc\"\n\t\"github.com/wit"
},
{
"path": "internal/print-to-source.go",
"chars": 2003,
"preview": "package astro\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\nfunc PrintToSource(buf *strings.Builder, node *Node) {\n\tswitch node.Type {\n"
},
{
"path": "internal/printer/__printer_css__/scopedStyleStrategy___attribute_.snap",
"chars": 473,
"preview": "\n[TestPrinterCSS/scopedStyleStrategy:_'attribute' - 1]\n## Input\n\n```\n<style>\n .title {\n font-family:"
},
{
"path": "internal/printer/__printer_css__/scopedStyleStrategy___class_.snap",
"chars": 449,
"preview": "\n[TestPrinterCSS/scopedStyleStrategy:_'class' - 1]\n## Input\n\n```\n<style>\n .title {\n font-family: fan"
},
{
"path": "internal/printer/__printer_css__/styles__no_frontmatter_.snap",
"chars": 460,
"preview": "\n[TestPrinterCSS/styles_(no_frontmatter) - 1]\n## Input\n\n```\n<style>\n .title {\n font-family: fantasy;"
},
{
"path": "internal/printer/__printer_js__/All_components.snap",
"chars": 1730,
"preview": "\n[TestPrinter/All_components - 1]\n## Input\n\n```\n/-/-/-/\nimport { Container, Col, Row } from 'react-bootstrap';\n/-/-/-/\n<"
},
{
"path": "internal/printer/__printer_js__/Component_is_raw.snap",
"chars": 1225,
"preview": "\n[TestPrinter/Component_is:raw - 1]\n## Input\n\n```\n<Component is:raw>{<% awesome %>}</Component>\n```\n\n## Output\n\n```js\nim"
},
{
"path": "internal/printer/__printer_js__/Component_names_A-Z.snap",
"chars": 1804,
"preview": "\n[TestPrinter/Component_names_A-Z - 1]\n## Input\n\n```\n/-/-/-/\nimport AComponent from '../components/AComponent.jsx';\nimpo"
},
{
"path": "internal/printer/__printer_js__/Component_siblings_are_siblings.snap",
"chars": 1204,
"preview": "\n[TestPrinter/Component_siblings_are_siblings - 1]\n## Input\n\n```\n<BaseHead></BaseHead><link href=\"test\">\n```\n\n## Output\n"
},
{
"path": "internal/printer/__printer_js__/Component_with_await.snap",
"chars": 1335,
"preview": "\n[TestPrinter/Component_with_await - 1]\n## Input\n\n```\n<body><Component> { await Promise.resolve(\"Awaited\") } </Component"
},
{
"path": "internal/printer/__printer_js__/Empty_attribute_expression.snap",
"chars": 1188,
"preview": "\n[TestPrinter/Empty_attribute_expression - 1]\n## Input\n\n```\n<body attr={}></body>\n```\n\n## Output\n\n```js\nimport {\n Fragm"
},
{
"path": "internal/printer/__printer_js__/Empty_expression.snap",
"chars": 1152,
"preview": "\n[TestPrinter/Empty_expression - 1]\n## Input\n\n```\n<body>({})</body>\n```\n\n## Output\n\n```js\nimport {\n Fragment,\n render "
},
{
"path": "internal/printer/__printer_js__/Empty_expression_with_whitespace.snap",
"chars": 1174,
"preview": "\n[TestPrinter/Empty_expression_with_whitespace - 1]\n## Input\n\n```\n<body>({ })</body>\n```\n\n## Output\n\n```js\nimport {\n "
},
{
"path": "internal/printer/__printer_js__/Empty_script.snap",
"chars": 1162,
"preview": "\n[TestPrinter/Empty_script - 1]\n## Input\n\n```\n<script hoist></script>\n```\n\n## Output\n\n```js\nimport {\n Fragment,\n rende"
},
{
"path": "internal/printer/__printer_js__/Empty_style.snap",
"chars": 1193,
"preview": "\n[TestPrinter/Empty_style - 1]\n## Input\n\n```\n<style define:vars={{ color: \"Gainsboro\" }}></style>\n```\n\n## Output\n\n```js\n"
},
{
"path": "internal/printer/__printer_js__/Expression_in_form_followed_by_other_sibling_forms.snap",
"chars": 1919,
"preview": "\n[TestPrinter/Expression_in_form_followed_by_other_sibling_forms - 1]\n## Input\n\n```\n<form><p>No expression here. So the "
},
{
"path": "internal/printer/__printer_js__/Fragment.snap",
"chars": 1300,
"preview": "\n[TestPrinter/Fragment - 1]\n## Input\n\n```\n<body><Fragment><div>Default</div><div>Named</div></Fragment></body>\n```\n\n## O"
},
{
"path": "internal/printer/__printer_js__/Fragment_literal_only.snap",
"chars": 1199,
"preview": "\n[TestPrinter/Fragment_literal_only - 1]\n## Input\n\n```\n<Fragment>world</Fragment>\n```\n\n## Output\n\n```js\nimport {\n Fragm"
},
{
"path": "internal/printer/__printer_js__/Fragment_shorthand.snap",
"chars": 1294,
"preview": "\n[TestPrinter/Fragment_shorthand - 1]\n## Input\n\n```\n<body><><div>Default</div><div>Named</div></></body>\n```\n\n## Output\n"
},
{
"path": "internal/printer/__printer_js__/Fragment_shorthand_only.snap",
"chars": 1185,
"preview": "\n[TestPrinter/Fragment_shorthand_only - 1]\n## Input\n\n```\n<>Hello</>\n```\n\n## Output\n\n```js\nimport {\n Fragment,\n render "
},
{
"path": "internal/printer/__printer_js__/Fragment_shorthand_with_await.snap",
"chars": 1324,
"preview": "\n[TestPrinter/Fragment_shorthand_with_await - 1]\n## Input\n\n```\n<body><> { await Promise.resolve(\"Awaited\") } </></body>\n"
},
{
"path": "internal/printer/__printer_js__/Fragment_slotted.snap",
"chars": 1401,
"preview": "\n[TestPrinter/Fragment_slotted - 1]\n## Input\n\n```\n<body><Component><><div>Default</div><div>Named</div></></Component></"
},
{
"path": "internal/printer/__printer_js__/Fragment_slotted_with_name.snap",
"chars": 1450,
"preview": "\n[TestPrinter/Fragment_slotted_with_name - 1]\n## Input\n\n```\n<body><Component><Fragment slot=named><div>Default</div><div"
},
{
"path": "internal/printer/__printer_js__/Fragment_with_await.snap",
"chars": 1330,
"preview": "\n[TestPrinter/Fragment_with_await - 1]\n## Input\n\n```\n<body><Fragment> { await Promise.resolve(\"Awaited\") } </Fragment></"
},
{
"path": "internal/printer/__printer_js__/Fragment_wrapping_link_with_awaited_href.snap",
"chars": 1492,
"preview": "\n[TestPrinter/Fragment_wrapping_link_with_awaited_href - 1]\n## Input\n\n```\n<head><Fragment><link rel=\"preload\" href={(awa"
},
{
"path": "internal/printer/__printer_js__/HTML_comment_in_component_inside_expression_I.snap",
"chars": 1229,
"preview": "\n[TestPrinter/HTML_comment_in_component_inside_expression_I - 1]\n## Input\n\n```\n{(() => <Component><!--Hi--></Component>)"
},
{
"path": "internal/printer/__printer_js__/HTML_comment_in_component_inside_expression_II.snap",
"chars": 1246,
"preview": "\n[TestPrinter/HTML_comment_in_component_inside_expression_II - 1]\n## Input\n\n```\n{list.map(() => <Component><!--Hi--></Co"
},
{
"path": "internal/printer/__printer_js__/Mixed_style_siblings.snap",
"chars": 1318,
"preview": "\n[TestPrinter/Mixed_style_siblings - 1]\n## Input\n\n```\n<head>\n <style is:global>div { color: red }</style>\n <style "
},
{
"path": "internal/printer/__printer_js__/Nested_HTML_in_expressions,_wrapped_in_parens.snap",
"chars": 1477,
"preview": "\n[TestPrinter/Nested_HTML_in_expressions,_wrapped_in_parens - 1]\n## Input\n\n```\n/-/-/-/\nconst image = './penguin.png';\nco"
},
{
"path": "internal/printer/__printer_js__/No_extra_script_tag.snap",
"chars": 4019,
"preview": "\n[TestPrinter/No_extra_script_tag - 1]\n## Input\n\n```\n<!-- Global Metadata -->\n<meta charset=\"utf-8\">\n<meta name=\"viewpor"
},
{
"path": "internal/printer/__printer_js__/Parser_can_handle_files___4096_chars.snap",
"chars": 9124,
"preview": "\n[TestPrinter/Parser_can_handle_files_>_4096_chars - 1]\n## Input\n\n```\n<html><body>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL"
},
{
"path": "internal/printer/__printer_js__/Preserve_namespaces.snap",
"chars": 1343,
"preview": "\n[TestPrinter/Preserve_namespaces - 1]\n## Input\n\n```\n<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3."
},
{
"path": "internal/printer/__printer_js__/Preserve_namespaces_for_components.snap",
"chars": 1204,
"preview": "\n[TestPrinter/Preserve_namespaces_for_components - 1]\n## Input\n\n```\n<Component some:thing=\"foobar\">\n```\n\n## Output\n\n```j"
},
{
"path": "internal/printer/__printer_js__/Preserve_namespaces_in_expressions.snap",
"chars": 1396,
"preview": "\n[TestPrinter/Preserve_namespaces_in_expressions - 1]\n## Input\n\n```\n<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink="
},
{
"path": "internal/printer/__printer_js__/Preserve_slot_attribute_at_root_level_in_expression.snap",
"chars": 1404,
"preview": "\n[TestPrinter/Preserve_slot_attribute_at_root_level_in_expression - 1]\n## Input\n\n```\n{!href ? <button slot={slotName}>Bu"
},
{
"path": "internal/printer/__printer_js__/Preserve_slot_attribute_in_conditional_expression_for_custom_element.snap",
"chars": 1399,
"preview": "\n[TestPrinter/Preserve_slot_attribute_in_conditional_expression_for_custom_element - 1]\n## Input\n\n```\n<body><my-element>"
},
{
"path": "internal/printer/__printer_js__/Preserve_slot_attribute_in_expression_for_custom_element.snap",
"chars": 1550,
"preview": "\n[TestPrinter/Preserve_slot_attribute_in_expression_for_custom_element - 1]\n## Input\n\n```\n<body><my-element>{!href ? <bu"
},
{
"path": "internal/printer/__printer_js__/Preserve_slot_whitespace.snap",
"chars": 1312,
"preview": "\n[TestPrinter/Preserve_slot_whitespace - 1]\n## Input\n\n```\n<Component>\n <p>Paragraph 1</p>\n <p>Paragraph 2</p>\n</Compon"
},
{
"path": "internal/printer/__printer_js__/Preserve_slots_inside_custom-element.snap",
"chars": 1358,
"preview": "\n[TestPrinter/Preserve_slots_inside_custom-element - 1]\n## Input\n\n```\n<body><my-element><div slot=name>Name</div><div>De"
},
{
"path": "internal/printer/__printer_js__/React_framework_example.snap",
"chars": 3229,
"preview": "\n[TestPrinter/React_framework_example - 1]\n## Input\n\n```\n/-/-/-/\n// Component Imports\nimport Counter from '../components"
},
{
"path": "internal/printer/__printer_js__/SVG_styles.snap",
"chars": 1193,
"preview": "\n[TestPrinter/SVG_styles - 1]\n## Input\n\n```\n<svg><style>path { fill: red; }</style></svg>\n```\n\n## Output\n\n```js\nimport {"
},
{
"path": "internal/printer/__printer_js__/Self-closing_components_in_head_can_have_siblings.snap",
"chars": 1289,
"preview": "\n[TestPrinter/Self-closing_components_in_head_can_have_siblings - 1]\n## Input\n\n```\n<html><head><BaseHead /><link href=\"t"
},
{
"path": "internal/printer/__printer_js__/Self-closing_components_siblings_are_siblings.snap",
"chars": 1209,
"preview": "\n[TestPrinter/Self-closing_components_siblings_are_siblings - 1]\n## Input\n\n```\n<BaseHead /><link href=\"test\">\n```\n\n## Ou"
},
{
"path": "internal/printer/__printer_js__/Self-closing_formatting_elements.snap",
"chars": 1266,
"preview": "\n[TestPrinter/Self-closing_formatting_elements - 1]\n## Input\n\n```\n<div id=\"1\"><div id=\"2\"><div id=\"3\"><i/><i/><i/></div>"
},
{
"path": "internal/printer/__printer_js__/Self-closing_formatting_elements_2.snap",
"chars": 1575,
"preview": "\n[TestPrinter/Self-closing_formatting_elements_2 - 1]\n## Input\n\n```\n<body>\n <div id=\"1\"><div id=\"2\"><div id=\"3\"><i id=\""
},
{
"path": "internal/printer/__printer_js__/Self-closing_script_in_head_works.snap",
"chars": 1209,
"preview": "\n[TestPrinter/Self-closing_script_in_head_works - 1]\n## Input\n\n```\n<html><head><script is:inline /></head><html>\n```\n\n##"
},
{
"path": "internal/printer/__printer_js__/Self-closing_title.snap",
"chars": 1105,
"preview": "\n[TestPrinter/Self-closing_title - 1]\n## Input\n\n```\n<title />\n```\n\n## Output\n\n```js\nimport {\n Fragment,\n render as $$r"
},
{
"path": "internal/printer/__printer_js__/Self-closing_title_II.snap",
"chars": 1211,
"preview": "\n[TestPrinter/Self-closing_title_II - 1]\n## Input\n\n```\n<html><head><title /></head><body></body></html>\n```\n\n## Output\n\n"
},
{
"path": "internal/printer/__printer_js__/Use_of_interfaces_within_frontmatter.snap",
"chars": 1663,
"preview": "\n[TestPrinter/Use_of_interfaces_within_frontmatter - 1]\n## Input\n\n```\n/-/-/-/\ninterface MarkdownFrontmatter {\n date: "
},
{
"path": "internal/printer/__printer_js__/XElement.snap",
"chars": 1291,
"preview": "\n[TestPrinter/XElement - 1]\n## Input\n\n```\n<XElement {...attrs}></XElement>{onLoadString ? <script data-something></scrip"
},
{
"path": "internal/printer/__printer_js__/_955_ternary_slot_with_elements.snap",
"chars": 1352,
"preview": "\n[TestPrinter/#955_ternary_slot_with_elements - 1]\n## Input\n\n```\n<Component><div>{isLeaf ? <p>Leaf</p> : <p>Branch</p>}<"
},
{
"path": "internal/printer/__printer_js__/_955_ternary_slot_with_text.snap",
"chars": 1346,
"preview": "\n[TestPrinter/#955_ternary_slot_with_text - 1]\n## Input\n\n```\n<Component>Hello{isLeaf ? <p>Leaf</p> : <p>Branch</p>}world"
},
{
"path": "internal/printer/__printer_js__/advanced_svg_expression.snap",
"chars": 1289,
"preview": "\n[TestPrinter/advanced_svg_expression - 1]\n## Input\n\n```\n/-/-/-/\nconst title = 'icon';\n/-/-/-/\n<svg>{title ? <title>{tit"
},
{
"path": "internal/printer/__printer_js__/anchor_content.snap",
"chars": 1210,
"preview": "\n[TestPrinter/anchor_content - 1]\n## Input\n\n```\n<a><div><h3></h3><ul><li>{expr}</li></ul></div></a>\n```\n\n## Output\n\n```j"
},
{
"path": "internal/printer/__printer_js__/anchor_expressions.snap",
"chars": 1138,
"preview": "\n[TestPrinter/anchor_expressions - 1]\n## Input\n\n```\n<a>{expr}</a>\n```\n\n## Output\n\n```js\nimport {\n Fragment,\n render as"
},
{
"path": "internal/printer/__printer_js__/anchor_inside_expression.snap",
"chars": 1170,
"preview": "\n[TestPrinter/anchor_inside_expression - 1]\n## Input\n\n```\n{true && <a>expr</a>}\n```\n\n## Output\n\n```js\nimport {\n Fragmen"
},
{
"path": "internal/printer/__printer_js__/attribute_with_template_literal.snap",
"chars": 1180,
"preview": "\n[TestPrinter/attribute_with_template_literal - 1]\n## Input\n\n```\n<a :href=\"`/home`\">Home</a>\n```\n\n## Output\n\n```js\nimpor"
},
{
"path": "internal/printer/__printer_js__/attribute_with_template_literal_interpolation.snap",
"chars": 1199,
"preview": "\n[TestPrinter/attribute_with_template_literal_interpolation - 1]\n## Input\n\n```\n<a :href=\"`/${url}`\">Home</a>\n```\n\n## Out"
},
{
"path": "internal/printer/__printer_js__/backtick_in_HTML_comment.snap",
"chars": 1201,
"preview": "\n[TestPrinter/backtick_in_HTML_comment - 1]\n## Input\n\n```\n<body><!-- `npm install astro` --></body>\n```\n\n## Output\n\n```j"
},
{
"path": "internal/printer/__printer_js__/basic__frontmatter_.snap",
"chars": 1242,
"preview": "\n[TestPrinter/basic_(frontmatter) - 1]\n## Input\n\n```\n/-/-/-/\nconst href = '/about';\n/-/-/-/\n<a href={href}>About</a>\n```"
},
{
"path": "internal/printer/__printer_js__/basic__no_frontmatter_.snap",
"chars": 1159,
"preview": "\n[TestPrinter/basic_(no_frontmatter) - 1]\n## Input\n\n```\n<button>Click</button>\n```\n\n## Output\n\n```js\nimport {\n Fragment"
},
{
"path": "internal/printer/__printer_js__/basic_renderHead.snap",
"chars": 1190,
"preview": "\n[TestPrinter/basic_renderHead - 1]\n## Input\n\n```\n<html><head><title>Ah</title></head></html>\n```\n\n## Output\n\n```js\nimpo"
},
{
"path": "internal/printer/__printer_js__/caption_only.snap",
"chars": 1167,
"preview": "\n[TestPrinter/caption_only - 1]\n## Input\n\n```\n<caption>Hello world!</caption>\n```\n\n## Output\n\n```js\nimport {\n Fragment,"
},
{
"path": "internal/printer/__printer_js__/class_and_class_list_object.snap",
"chars": 1312,
"preview": "\n[TestPrinter/class_and_class_list_object - 1]\n## Input\n\n```\n<div class=\"two three\" class:list={['hello goodbye', { hell"
},
{
"path": "internal/printer/__printer_js__/class_and_class_list_set.snap",
"chars": 1297,
"preview": "\n[TestPrinter/class_and_class_list_set - 1]\n## Input\n\n```\n<div class=\"two three\" class:list={[ new Set([{hello: true, wo"
},
{
"path": "internal/printer/__printer_js__/class_and_class_list_simple_array.snap",
"chars": 1250,
"preview": "\n[TestPrinter/class_and_class_list_simple_array - 1]\n## Input\n\n```\n<div class=\"two\" class:list={['one', 'variable']} />\n"
},
{
"path": "internal/printer/__printer_js__/class_list.snap",
"chars": 1206,
"preview": "\n[TestPrinter/class_list - 1]\n## Input\n\n```\n<div class:list={['one', 'variable']} />\n```\n\n## Output\n\n```js\nimport {\n Fr"
},
{
"path": "internal/printer/__printer_js__/class_list_with_spread.snap",
"chars": 1387,
"preview": "\n[TestPrinter/class:list_with_spread - 1]\n## Input\n\n```\n<div class:list=\"something\" {...Astro.props} />\n```\n\n## Output\n\n"
},
{
"path": "internal/printer/__printer_js__/class_with_spread.snap",
"chars": 1372,
"preview": "\n[TestPrinter/class_with_spread - 1]\n## Input\n\n```\n<div class=\"something\" {...Astro.props} />\n```\n\n## Output\n\n```js\nimpo"
},
{
"path": "internal/printer/__printer_js__/client_only_component__default_.snap",
"chars": 1640,
"preview": "\n[TestPrinter/client:only_component_(default) - 1]\n## Input\n\n```\n/-/-/-/\nimport Component from '../components';\n/-/-/-/\n"
},
{
"path": "internal/printer/__printer_js__/client_only_component__multiple_.snap",
"chars": 2183,
"preview": "\n[TestPrinter/client:only_component_(multiple) - 1]\n## Input\n\n```\n/-/-/-/\nimport Component from '../components';\n/-/-/-/"
},
{
"path": "internal/printer/__printer_js__/client_only_component__named_.snap",
"chars": 1648,
"preview": "\n[TestPrinter/client:only_component_(named) - 1]\n## Input\n\n```\n/-/-/-/\nimport { Component } from '../components';\n/-/-/-"
},
{
"path": "internal/printer/__printer_js__/client_only_component__namespace_.snap",
"chars": 1654,
"preview": "\n[TestPrinter/client:only_component_(namespace) - 1]\n## Input\n\n```\n/-/-/-/\nimport * as components from '../components';\n"
},
{
"path": "internal/printer/__printer_js__/client_only_component__namespaced_default_.snap",
"chars": 1714,
"preview": "\n[TestPrinter/client:only_component_(namespaced_default) - 1]\n## Input\n\n```\n/-/-/-/\nimport defaultImport from '../compon"
},
{
"path": "internal/printer/__printer_js__/client_only_component__namespaced_named_.snap",
"chars": 1716,
"preview": "\n[TestPrinter/client:only_component_(namespaced_named) - 1]\n## Input\n\n```\n/-/-/-/\nimport { namedImport } from '../compon"
},
{
"path": "internal/printer/__printer_js__/comment_only_expressions_are_removed_I.snap",
"chars": 1196,
"preview": "\n[TestPrinter/comment_only_expressions_are_removed_I - 1]\n## Input\n\n```\n{/* a comment 1 */}<h1>{/* a comment 2*/}Hello</"
},
{
"path": "internal/printer/__printer_js__/comment_only_expressions_are_removed_II.snap",
"chars": 1338,
"preview": "\n[TestPrinter/comment_only_expressions_are_removed_II - 1]\n## Input\n\n```\n{\n list.map((i) => (\n <Component>\n "
},
{
"path": "internal/printer/__printer_js__/comment_only_expressions_are_removed_III.snap",
"chars": 1342,
"preview": "\n[TestPrinter/comment_only_expressions_are_removed_III - 1]\n## Input\n\n```\n{\n list.map((i) => (\n <Component>\n "
},
{
"path": "internal/printer/__printer_js__/comments_removed_from_attribute_list.snap",
"chars": 1361,
"preview": "\n[TestPrinter/comments_removed_from_attribute_list - 1]\n## Input\n\n```\n<div><h1 {/* comment 1 */} value=\"1\" {/* comment 2"
},
{
"path": "internal/printer/__printer_js__/complex_nested_template_literal_expression.snap",
"chars": 1292,
"preview": "\n[TestPrinter/complex_nested_template_literal_expression - 1]\n## Input\n\n```\n<div value={`${attr ? `a/b ${`c ${`d ${cool}"
},
{
"path": "internal/printer/__printer_js__/complex_recursive_component.snap",
"chars": 2017,
"preview": "\n[TestPrinter/complex_recursive_component - 1]\n## Input\n\n```\n{(<Fragment><Fragment set:html={`<${Node.tag} ${stringifyAt"
},
{
"path": "internal/printer/__printer_js__/complex_table.snap",
"chars": 4220,
"preview": "\n[TestPrinter/complex_table - 1]\n## Input\n\n```\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <met"
},
{
"path": "internal/printer/__printer_js__/component.snap",
"chars": 1587,
"preview": "\n[TestPrinter/component - 1]\n## Input\n\n```\n/-/-/-/\nimport VueComponent from '../components/Vue.vue';\n/-/-/-/\n<html>\n <h"
},
{
"path": "internal/printer/__printer_js__/component_in_expression_with_its_child_expression_before_its_child_element.snap",
"chars": 1358,
"preview": "\n[TestPrinter/component_in_expression_with_its_child_expression_before_its_child_element - 1]\n## Input\n\n```\n{list.map(()"
},
{
"path": "internal/printer/__printer_js__/component_with_only_a_script.snap",
"chars": 1255,
"preview": "\n[TestPrinter/component_with_only_a_script - 1]\n## Input\n\n```\n<script>console.log('hello world');</script>\n```\n\n## Outpu"
},
{
"path": "internal/printer/__printer_js__/component_with_quoted_attributes.snap",
"chars": 1190,
"preview": "\n[TestPrinter/component_with_quoted_attributes - 1]\n## Input\n\n```\n<Component is='\"cool\"' />\n```\n\n## Output\n\n```js\nimport"
},
{
"path": "internal/printer/__printer_js__/condition_expressions_at_the_top-level.snap",
"chars": 1253,
"preview": "\n[TestPrinter/condition_expressions_at_the_top-level - 1]\n## Input\n\n```\n{cond && <span></span>}{cond && <strong></strong"
},
{
"path": "internal/printer/__printer_js__/condition_expressions_at_the_top-level_with_head_content.snap",
"chars": 1267,
"preview": "\n[TestPrinter/condition_expressions_at_the_top-level_with_head_content - 1]\n## Input\n\n```\n{cond && <meta charset=utf8>}{"
},
{
"path": "internal/printer/__printer_js__/conditional_iframe.snap",
"chars": 1222,
"preview": "\n[TestPrinter/conditional_iframe - 1]\n## Input\n\n```\n{bool && <iframe src=\"something\">content</iframe>}\n```\n\n## Output\n\n`"
},
{
"path": "internal/printer/__printer_js__/conditional_noscript.snap",
"chars": 1230,
"preview": "\n[TestPrinter/conditional_noscript - 1]\n## Input\n\n```\n{mode === \"production\" && <noscript>Hello</noscript>}\n```\n\n## Outp"
},
{
"path": "internal/printer/__printer_js__/conditional_render.snap",
"chars": 1236,
"preview": "\n[TestPrinter/conditional_render - 1]\n## Input\n\n```\n<body>{false ? <div>#f</div> : <div>#t</div>}</body>\n```\n\n## Output\n"
},
{
"path": "internal/printer/__printer_js__/conditional_rendering_of_title_containing_expression.snap",
"chars": 1622,
"preview": "\n[TestPrinter/conditional_rendering_of_title_containing_expression - 1]\n## Input\n\n```\n{\n props.title && (\n <>\n "
},
{
"path": "internal/printer/__printer_js__/conditional_slot.snap",
"chars": 1288,
"preview": "\n[TestPrinter/conditional_slot - 1]\n## Input\n\n```\n<Component>{value && <div slot=\"test\">foo</div>}</Component>\n```\n\n## O"
},
{
"path": "internal/printer/__printer_js__/css_comment_doesn’t_produce_semicolon.snap",
"chars": 1283,
"preview": "\n[TestPrinter/css_comment_doesn’t_produce_semicolon - 1]\n## Input\n\n```\n<style>/* comment */.container {\n padding: 2re"
},
{
"path": "internal/printer/__printer_js__/css_imports_are_not_included_in_module_metadata.snap",
"chars": 1191,
"preview": "\n[TestPrinter/css_imports_are_not_included_in_module_metadata - 1]\n## Input\n\n```\n/-/-/-/\n import './styles.cs"
},
{
"path": "internal/printer/__printer_js__/custom-element.snap",
"chars": 1228,
"preview": "\n[TestPrinter/custom-element - 1]\n## Input\n\n```\n{show && <client-only-element></client-only-element>}\n```\n\n## Output\n\n``"
},
{
"path": "internal/printer/__printer_js__/custom_elements.snap",
"chars": 1296,
"preview": "\n[TestPrinter/custom_elements - 1]\n## Input\n\n```\n/-/-/-/\nimport 'test';\n/-/-/-/\n<my-element></my-element>\n```\n\n## Output"
},
{
"path": "internal/printer/__printer_js__/define_vars_on_a_module_script_with_imports.snap",
"chars": 1291,
"preview": "\n[TestPrinter/define:vars_on_a_module_script_with_imports - 1]\n## Input\n\n```\n<script type=\"module\" define:vars={{foo:'ba"
},
{
"path": "internal/printer/__printer_js__/define_vars_on_non-root_elements.snap",
"chars": 1473,
"preview": "\n[TestPrinter/define:vars_on_non-root_elements - 1]\n## Input\n\n```\n<style define:vars={{color:'green'}}>h1{color:var(--co"
},
{
"path": "internal/printer/__printer_js__/define_vars_on_script_with_StaticExpression_turned_on.snap",
"chars": 1628,
"preview": "\n[TestPrinter/define:vars_on_script_with_StaticExpression_turned_on - 1]\n## Input\n\n```\n<script is:inline>var one = 'one'"
},
{
"path": "internal/printer/__printer_js__/define_vars_on_style.snap",
"chars": 1367,
"preview": "\n[TestPrinter/define:vars_on_style - 1]\n## Input\n\n```\n<style>h1{color:green;}</style><style define:vars={{color:'green'}"
},
{
"path": "internal/printer/__printer_js__/define_vars_on_style_tag_with_style_empty_attribute_on_element.snap",
"chars": 1384,
"preview": "\n[TestPrinter/define:vars_on_style_tag_with_style_empty_attribute_on_element - 1]\n## Input\n\n```\n<style define:vars={{col"
},
{
"path": "internal/printer/__printer_js__/define_vars_on_style_tag_with_style_expression_attribute_on_element.snap",
"chars": 1418,
"preview": "\n[TestPrinter/define:vars_on_style_tag_with_style_expression_attribute_on_element - 1]\n## Input\n\n```\n<style define:vars="
},
{
"path": "internal/printer/__printer_js__/define_vars_on_style_tag_with_style_quoted_attribute_on_element.snap",
"chars": 1428,
"preview": "\n[TestPrinter/define:vars_on_style_tag_with_style_quoted_attribute_on_element - 1]\n## Input\n\n```\n<style define:vars={{co"
},
{
"path": "internal/printer/__printer_js__/define_vars_on_style_tag_with_style_shorthand_attribute_on_element.snap",
"chars": 1405,
"preview": "\n[TestPrinter/define:vars_on_style_tag_with_style_shorthand_attribute_on_element - 1]\n## Input\n\n```\n<style define:vars={"
},
{
"path": "internal/printer/__printer_js__/define_vars_on_style_tag_with_style_template_literal_attribute_on_element.snap",
"chars": 1442,
"preview": "\n[TestPrinter/define:vars_on_style_tag_with_style_template_literal_attribute_on_element - 1]\n## Input\n\n```\n<style define"
},
{
"path": "internal/printer/__printer_js__/division_inside_expression.snap",
"chars": 1158,
"preview": "\n[TestPrinter/division_inside_expression - 1]\n## Input\n\n```\n<div>{16 / 4}</div>\n```\n\n## Output\n\n```js\nimport {\n Fragmen"
},
{
"path": "internal/printer/__printer_js__/doctype.snap",
"chars": 1132,
"preview": "\n[TestPrinter/doctype - 1]\n## Input\n\n```\n<!DOCTYPE html><div/>\n```\n\n## Output\n\n```js\nimport {\n Fragment,\n render as $$"
},
{
"path": "internal/printer/__printer_js__/dot_component.snap",
"chars": 1549,
"preview": "\n[TestPrinter/dot_component - 1]\n## Input\n\n```\n/-/-/-/\nimport * as ns from '../components';\n/-/-/-/\n<html>\n <head>\n "
},
{
"path": "internal/printer/__printer_js__/dynamic_import.snap",
"chars": 1535,
"preview": "\n[TestPrinter/dynamic_import - 1]\n## Input\n\n```\n/-/-/-/\nconst markdownDocs = await Astro.glob('../markdown/*.md')\nconst "
},
{
"path": "internal/printer/__printer_js__/escaped_entity.snap",
"chars": 1197,
"preview": "\n[TestPrinter/escaped_entity - 1]\n## Input\n\n```\n<img alt=\"A person saying "hello"\">\n```\n\n## Output\n\n```js\nimpo"
},
{
"path": "internal/printer/__printer_js__/export_comments_I.snap",
"chars": 1165,
"preview": "\n[TestPrinter/export_comments_I - 1]\n## Input\n\n```\n/-/-/-/\n// hmm\nexport const foo = 0\n/*\n*/\n/-/-/-/\n```\n\n## Output\n\n```"
},
{
"path": "internal/printer/__printer_js__/export_comments_II.snap",
"chars": 1168,
"preview": "\n[TestPrinter/export_comments_II - 1]\n## Input\n\n```\n/-/-/-/\n// hmm\nexport const foo = 0;\n/*\n*/\n/-/-/-/\n```\n\n## Output\n\n`"
},
{
"path": "internal/printer/__printer_js__/export_member_does_not_panic.snap",
"chars": 1184,
"preview": "\n[TestPrinter/export_member_does_not_panic - 1]\n## Input\n\n```\n/-/-/-/\nmod.export();\n/-/-/-/\n<div />\n```\n\n## Output\n\n```j"
},
{
"path": "internal/printer/__printer_js__/expression_returning_multiple_elements.snap",
"chars": 2713,
"preview": "\n[TestPrinter/expression_returning_multiple_elements - 1]\n## Input\n\n```\n<Layout title=\"Welcome to Astro.\">\n <main>\n "
},
{
"path": "internal/printer/__printer_js__/expression_slot.snap",
"chars": 1363,
"preview": "\n[TestPrinter/expression_slot - 1]\n## Input\n\n```\n<Component>{true && <div slot=\"a\">A</div>}{false && <div slot=\"b\">B</di"
},
{
"path": "internal/printer/__printer_js__/expression_with_leading_whitespace.snap",
"chars": 1548,
"preview": "\n[TestPrinter/expression_with_leading_whitespace - 1]\n## Input\n\n```\n<section>\n<ul class=\"font-mono text-sm flex flex-col"
},
{
"path": "internal/printer/__printer_js__/expressions_with_JS_comments.snap",
"chars": 1630,
"preview": "\n[TestPrinter/expressions_with_JS_comments - 1]\n## Input\n\n```\n/-/-/-/\nconst items = ['red', 'yellow', 'blue'];\n/-/-/-/\n<"
},
{
"path": "internal/printer/__printer_js__/expressions_with_multiple_curly_braces.snap",
"chars": 1528,
"preview": "\n[TestPrinter/expressions_with_multiple_curly_braces - 1]\n## Input\n\n```\n<div>\n{\n () => {\n let generate = (inpu"
},
{
"path": "internal/printer/__printer_js__/function_expression_slots_I.snap",
"chars": 1552,
"preview": "\n[TestPrinter/function_expression_slots_I - 1]\n## Input\n\n```\n<Component>\n{() => { switch (value) {\ncase 'a': return <div"
},
{
"path": "internal/printer/__printer_js__/function_expression_slots_II___959_.snap",
"chars": 2234,
"preview": "\n[TestPrinter/function_expression_slots_II_(#959) - 1]\n## Input\n\n```\n<Layout title=\"Welcome to Astro.\">\n <main>\n "
},
{
"path": "internal/printer/__printer_js__/getStaticPaths__basic_.snap",
"chars": 1295,
"preview": "\n[TestPrinter/getStaticPaths_(basic) - 1]\n## Input\n\n```\n/-/-/-/\nexport const getStaticPaths = async () => {\n return {"
},
{
"path": "internal/printer/__printer_js__/getStaticPaths__hoisted_.snap",
"chars": 1324,
"preview": "\n[TestPrinter/getStaticPaths_(hoisted) - 1]\n## Input\n\n```\n/-/-/-/\nconst a = 0;\nexport const getStaticPaths = async () =>"
},
{
"path": "internal/printer/__printer_js__/getStaticPaths__hoisted_II_.snap",
"chars": 1348,
"preview": "\n[TestPrinter/getStaticPaths_(hoisted_II) - 1]\n## Input\n\n```\n/-/-/-/\nconst a = 0;\nexport async function getStaticPaths()"
},
{
"path": "internal/printer/__printer_js__/gets_all_potential_hydrated_components.snap",
"chars": 2129,
"preview": "\n[TestPrinter/gets_all_potential_hydrated_components - 1]\n## Input\n\n```\n/-/-/-/\nimport One from 'one';\nimport Two from '"
},
{
"path": "internal/printer/__printer_js__/head_content_with_component_first.snap",
"chars": 1577,
"preview": "\n[TestPrinter/head_content_with_component_first - 1]\n## Input\n\n```\n/-/-/-/\nimport Analytics from '../components/Analytic"
},
{
"path": "internal/printer/__printer_js__/head_expression.snap",
"chars": 1364,
"preview": "\n[TestPrinter/head_expression - 1]\n## Input\n\n```\n/-/-/-/\nconst name = \"world\";\n/-/-/-/\n<html>\n <head>\n <title>Hello "
},
{
"path": "internal/printer/__printer_js__/head_expression_and_conditional_rendering_of_fragment.snap",
"chars": 1756,
"preview": "\n[TestPrinter/head_expression_and_conditional_rendering_of_fragment - 1]\n## Input\n\n```\n/-/-/-/\nconst testBool = true;\n/-"
},
{
"path": "internal/printer/__printer_js__/head_inside_slot.snap",
"chars": 1224,
"preview": "\n[TestPrinter/head_inside_slot - 1]\n## Input\n\n```\n<html><slot><head></head></slot></html>\n```\n\n## Output\n\n```js\nimport {"
},
{
"path": "internal/printer/__printer_js__/head_slot.snap",
"chars": 1194,
"preview": "\n[TestPrinter/head_slot - 1]\n## Input\n\n```\n<html><head><slot /></html>\n```\n\n## Output\n\n```js\nimport {\n Fragment,\n rend"
},
{
"path": "internal/printer/__printer_js__/head_slot_II.snap",
"chars": 1250,
"preview": "\n[TestPrinter/head_slot_II - 1]\n## Input\n\n```\n<html><head><slot /></head><body class=\"a\"></body></html>\n```\n\n## Output\n\n"
},
{
"path": "internal/printer/__printer_js__/head_slot_III.snap",
"chars": 1328,
"preview": "\n[TestPrinter/head_slot_III - 1]\n## Input\n\n```\n<html><head><slot name=\"baseHeadExtension\"><meta property=\"test2\" content"
},
{
"path": "internal/printer/__printer_js__/html5_boilerplate.snap",
"chars": 3012,
"preview": "\n[TestPrinter/html5_boilerplate - 1]\n## Input\n\n```\n<!doctype html>\n\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <"
},
{
"path": "internal/printer/__printer_js__/iframe.snap",
"chars": 1158,
"preview": "\n[TestPrinter/iframe - 1]\n## Input\n\n```\n<iframe src=\"something\" />\n```\n\n## Output\n\n```js\nimport {\n Fragment,\n render a"
},
{
"path": "internal/printer/__printer_js__/import.meta.env.snap",
"chars": 4247,
"preview": "\n[TestPrinter/import.meta.env - 1]\n## Input\n\n```\n/-/-/-/\nimport Header from '../../components/Header.jsx'\nimport Footer "
},
{
"path": "internal/printer/__printer_js__/import.meta.snap",
"chars": 1264,
"preview": "\n[TestPrinter/import.meta - 1]\n## Input\n\n```\n/-/-/-/\nconst components = import.meta.glob(\"../components/*.astro\", {\n im"
},
{
"path": "internal/printer/__printer_js__/import_assertions.snap",
"chars": 1313,
"preview": "\n[TestPrinter/import_assertions - 1]\n## Input\n\n```\n/-/-/-/\nimport data from \"test\" assert { type: 'json' };\n/-/-/-/\n```\n"
},
{
"path": "internal/printer/__printer_js__/import_order.snap",
"chars": 1362,
"preview": "\n[TestPrinter/import_order - 1]\n## Input\n\n```\n/-/-/-/\nlet testWord = \"Test\"\n// comment\nimport data from \"test\";\n/-/-/-/\n"
},
{
"path": "internal/printer/__printer_js__/import_to_identifier_named_assert.snap",
"chars": 1253,
"preview": "\n[TestPrinter/import_to_identifier_named_assert - 1]\n## Input\n\n```\n/-/-/-/\nimport assert from 'test';\n/-/-/-/\n```\n\n## Ou"
},
{
"path": "internal/printer/__printer_js__/includes_comments_for_expression_attribute.snap",
"chars": 1488,
"preview": "\n[TestPrinter/includes_comments_for_expression_attribute - 1]\n## Input\n\n```\n<div><h1 attr={/* comment 1 */ isTrue ? 1 : "
},
{
"path": "internal/printer/__printer_js__/includes_comments_for_shorthand_attribute.snap",
"chars": 1425,
"preview": "\n[TestPrinter/includes_comments_for_shorthand_attribute - 1]\n## Input\n\n```\n<div><h1 {/* comment 1 */ id /* comment 2 */}"
},
{
"path": "internal/printer/__printer_js__/is_raw.snap",
"chars": 1170,
"preview": "\n[TestPrinter/is:raw - 1]\n## Input\n\n```\n<article is:raw><% awesome %></article>\n```\n\n## Output\n\n```js\nimport {\n Fragmen"
},
{
"path": "internal/printer/__printer_js__/jsx_comment_between_doctype_and_html.snap",
"chars": 1311,
"preview": "\n[TestPrinter/jsx_comment_between_doctype_and_html - 1]\n## Input\n\n```\n<!doctype html>\n{/* Comment */}\n<html lang=\"en\">\n "
},
{
"path": "internal/printer/__printer_js__/map_basic.snap",
"chars": 1331,
"preview": "\n[TestPrinter/map_basic - 1]\n## Input\n\n```\n/-/-/-/\nconst items = [0, 1, 2];\n/-/-/-/\n<ul>\n {items.map(item => {\n "
},
{
"path": "internal/printer/__printer_js__/map_nested.snap",
"chars": 1561,
"preview": "\n[TestPrinter/map_nested - 1]\n## Input\n\n```\n/-/-/-/\nconst groups = [[0, 1, 2], [3, 4, 5]];\n/-/-/-/\n<div>\n {groups.map"
},
{
"path": "internal/printer/__printer_js__/map_with_component.snap",
"chars": 1369,
"preview": "\n[TestPrinter/map_with_component - 1]\n## Input\n\n```\n<header><nav>{menu.map((item) => <a href={item.href}>{item.title}</a"
},
{
"path": "internal/printer/__printer_js__/map_without_component.snap",
"chars": 1317,
"preview": "\n[TestPrinter/map_without_component - 1]\n## Input\n\n```\n<header><nav>{menu.map((item) => <a href={item.href}>{item.title}"
},
{
"path": "internal/printer/__printer_js__/maybeRenderHead_not_printed_for_hoisted_scripts.snap",
"chars": 1329,
"preview": "\n[TestPrinter/maybeRenderHead_not_printed_for_hoisted_scripts - 1]\n## Input\n\n```\n<script></script><Layout></Layout>\n```\n"
},
{
"path": "internal/printer/__printer_js__/multibyte_character___script.snap",
"chars": 1309,
"preview": "\n[TestPrinter/multibyte_character_+_script - 1]\n## Input\n\n```\n<script>console.log('foo')</script><a class=\"test\">ツ</a>\n`"
},
{
"path": "internal/printer/__printer_js__/multibyte_character___style.snap",
"chars": 1214,
"preview": "\n[TestPrinter/multibyte_character_+_style - 1]\n## Input\n\n```\n<style>a { font-size: 16px; }</style><a class=\"test\">ツ</a>\n"
},
{
"path": "internal/printer/__printer_js__/multibyte_characters.snap",
"chars": 1157,
"preview": "\n[TestPrinter/multibyte_characters - 1]\n## Input\n\n```\n/-/-/-/\n/-/-/-/\n<h1>こんにちは</h1>\n```\n\n## Output\n\n```js\nimport {\n Fr"
},
{
"path": "internal/printer/__printer_js__/multiline_class_attribute_on_component.snap",
"chars": 1325,
"preview": "\n[TestPrinter/multiline_class_attribute_on_component - 1]\n## Input\n\n```\n<Component class=\"some-class\n another-class\n t"
},
{
"path": "internal/printer/__printer_js__/multiple_define_vars_on_style.snap",
"chars": 1504,
"preview": "\n[TestPrinter/multiple_define:vars_on_style - 1]\n## Input\n\n```\n<style define:vars={{color:'green'}}>h1{color:var(--color"
},
{
"path": "internal/printer/__printer_js__/namespace_is_preserved_when_inside_an_expression.snap",
"chars": 1202,
"preview": "\n[TestPrinter/namespace_is_preserved_when_inside_an_expression - 1]\n## Input\n\n```\n<svg>{<image />}</svg>\n```\n\n## Output\n"
}
]
// ... and 384 more files (download for full content)
About this extraction
This page contains the full source code of the withastro/compiler GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 584 files (1.8 MB), approximately 572.2k tokens, and a symbol index with 1884 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.