herb 0.10.4-x86_64-linux-gnu → 0.11.1-x86_64-linux-gnu
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +16 -6
- data/README.md +36 -119
- data/Rakefile +2 -11
- data/config/action_view_helpers/actioncable/action_cable_helper/action_cable_meta_tag.yml +12 -8
- data/config/action_view_helpers/actionpack/content_security_policy/content_security_policy?.yml +9 -6
- data/config/action_view_helpers/actionpack/content_security_policy/content_security_policy_nonce.yml +9 -6
- data/config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_path.yml +20 -12
- data/config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_url.yml +30 -18
- data/config/action_view_helpers/actionpack/request_forgery_protection/form_authenticity_token.yml +15 -9
- data/config/action_view_helpers/actionpack/request_forgery_protection/protect_against_forgery?.yml +9 -6
- data/config/action_view_helpers/actiontext/content_helper/render_action_text_content.yml +15 -9
- data/config/action_view_helpers/actiontext/content_helper/sanitize_action_text_content.yml +15 -9
- data/config/action_view_helpers/actiontext/tag_helper/rich_textarea_tag.yml +34 -22
- data/config/action_view_helpers/actionview/active_model_helper/error_message.yml +9 -6
- data/config/action_view_helpers/actionview/active_model_helper/error_wrapping.yml +9 -6
- data/config/action_view_helpers/actionview/active_model_helper/object.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/apply_stylesheet_media_default.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/audio_tag.yml +40 -27
- data/config/action_view_helpers/actionview/asset_tag_helper/auto_discovery_link_tag.yml +37 -23
- data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_scripts.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_styles.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/favicon_link_tag.yml +32 -22
- data/config/action_view_helpers/actionview/asset_tag_helper/image_decoding.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/image_loading.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/image_tag.yml +67 -46
- data/config/action_view_helpers/actionview/asset_tag_helper/javascript_include_tag.yml +58 -39
- data/config/action_view_helpers/actionview/asset_tag_helper/picture_tag.yml +22 -14
- data/config/action_view_helpers/actionview/asset_tag_helper/preload_link_tag.yml +45 -30
- data/config/action_view_helpers/actionview/asset_tag_helper/preload_links_header.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/stylesheet_link_tag.yml +49 -30
- data/config/action_view_helpers/actionview/asset_tag_helper/video_tag.yml +53 -35
- data/config/action_view_helpers/actionview/asset_url_helper/asset_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/asset_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/audio_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/audio_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_extname.yml +9 -6
- data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_host.yml +9 -6
- data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_path.yml +9 -6
- data/config/action_view_helpers/actionview/asset_url_helper/font_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/font_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/image_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/image_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/javascript_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/javascript_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/public_compute_asset_path.yml +9 -6
- data/config/action_view_helpers/actionview/asset_url_helper/stylesheet_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/stylesheet_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/video_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/video_url.yml +16 -10
- data/config/action_view_helpers/actionview/atom_feed_helper/atom_feed.yml +52 -27
- data/config/action_view_helpers/actionview/cache_helper/cache.yml +25 -15
- data/config/action_view_helpers/actionview/cache_helper/cache_fragment_name.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/cache_if.yml +20 -12
- data/config/action_view_helpers/actionview/cache_helper/cache_unless.yml +20 -12
- data/config/action_view_helpers/actionview/cache_helper/caching_predicate.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/digest_path_from_template.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/fragment_for.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/fragment_name_with_digest.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/read_fragment_for.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/uncacheable.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/write_fragment_for.yml +9 -6
- data/config/action_view_helpers/actionview/capture_helper/capture.yml +9 -6
- data/config/action_view_helpers/actionview/capture_helper/content_for.yml +20 -12
- data/config/action_view_helpers/actionview/capture_helper/content_for_predicate.yml +15 -9
- data/config/action_view_helpers/actionview/capture_helper/provide.yml +15 -9
- data/config/action_view_helpers/actionview/capture_helper/with_output_buffer.yml +9 -6
- data/config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prepend_content_exfiltration_prevention.yml +9 -6
- data/config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prevent_content_exfiltration.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/action_name.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/assign_controller.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/controller.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/controller_name.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/controller_path.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/cookies.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/flash.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/headers.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/logger.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/params.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/request.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/request_forgery_protection_token.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/response.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/session.yml +9 -6
- data/config/action_view_helpers/actionview/csp_helper/csp_meta_tag.yml +18 -11
- data/config/action_view_helpers/actionview/csrf_helper/csrf_meta_tags.yml +16 -10
- data/config/action_view_helpers/actionview/date_helper/date_select.yml +85 -51
- data/config/action_view_helpers/actionview/date_helper/datetime_select.yml +65 -39
- data/config/action_view_helpers/actionview/date_helper/distance_of_time_in_words.yml +30 -18
- data/config/action_view_helpers/actionview/date_helper/relative_time_in_words.yml +35 -21
- data/config/action_view_helpers/actionview/date_helper/select_date.yml +50 -30
- data/config/action_view_helpers/actionview/date_helper/select_datetime.yml +65 -39
- data/config/action_view_helpers/actionview/date_helper/select_day.yml +40 -24
- data/config/action_view_helpers/actionview/date_helper/select_hour.yml +50 -30
- data/config/action_view_helpers/actionview/date_helper/select_minute.yml +40 -24
- data/config/action_view_helpers/actionview/date_helper/select_month.yml +60 -36
- data/config/action_view_helpers/actionview/date_helper/select_second.yml +35 -21
- data/config/action_view_helpers/actionview/date_helper/select_time.yml +55 -33
- data/config/action_view_helpers/actionview/date_helper/select_year.yml +45 -27
- data/config/action_view_helpers/actionview/date_helper/time_ago_in_words.yml +21 -13
- data/config/action_view_helpers/actionview/date_helper/time_select.yml +60 -36
- data/config/action_view_helpers/actionview/date_helper/time_tag.yml +32 -20
- data/config/action_view_helpers/actionview/debug_helper/debug.yml +15 -9
- data/config/action_view_helpers/actionview/form_builder/button.yml +60 -0
- data/config/action_view_helpers/actionview/form_builder/submit.yml +48 -0
- data/config/action_view_helpers/actionview/form_helper/apply_form_for_options.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/checkbox.yml +41 -25
- data/config/action_view_helpers/actionview/form_helper/color_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/date_field.yml +35 -21
- data/config/action_view_helpers/actionview/form_helper/datetime_field.yml +41 -25
- data/config/action_view_helpers/actionview/form_helper/email_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/emitted_hidden_id.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/fields.yml +37 -18
- data/config/action_view_helpers/actionview/form_helper/fields_for.yml +33 -15
- data/config/action_view_helpers/actionview/form_helper/file_field.yml +45 -27
- data/config/action_view_helpers/actionview/form_helper/form_for.yml +45 -24
- data/config/action_view_helpers/actionview/form_helper/form_with.yml +56 -30
- data/config/action_view_helpers/actionview/form_helper/form_with_generates_ids.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/form_with_generates_remote_forms.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/hidden_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/label.yml +52 -27
- data/config/action_view_helpers/actionview/form_helper/month_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/multipart.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/multiple_file_field_include_hidden.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/number_field.yml +45 -27
- data/config/action_view_helpers/actionview/form_helper/password_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/radio_button.yml +30 -18
- data/config/action_view_helpers/actionview/form_helper/range_field.yml +45 -27
- data/config/action_view_helpers/actionview/form_helper/search_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/telephone_field.yml +26 -16
- data/config/action_view_helpers/actionview/form_helper/text_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/textarea.yml +31 -19
- data/config/action_view_helpers/actionview/form_helper/time_field.yml +40 -24
- data/config/action_view_helpers/actionview/form_helper/url_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/week_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_options_helper/collection_checkboxes.yml +58 -31
- data/config/action_view_helpers/actionview/form_options_helper/collection_radio_buttons.yml +57 -30
- data/config/action_view_helpers/actionview/form_options_helper/collection_select.yml +65 -39
- data/config/action_view_helpers/actionview/form_options_helper/grouped_collection_select.yml +65 -39
- data/config/action_view_helpers/actionview/form_options_helper/grouped_options_for_select.yml +35 -21
- data/config/action_view_helpers/actionview/form_options_helper/option_groups_from_collection_for_select.yml +40 -24
- data/config/action_view_helpers/actionview/form_options_helper/options_for_select.yml +20 -12
- data/config/action_view_helpers/actionview/form_options_helper/options_from_collection_for_select.yml +30 -18
- data/config/action_view_helpers/actionview/form_options_helper/select.yml +60 -36
- data/config/action_view_helpers/actionview/form_options_helper/time_zone_options_for_select.yml +25 -15
- data/config/action_view_helpers/actionview/form_options_helper/time_zone_select.yml +50 -30
- data/config/action_view_helpers/actionview/form_options_helper/weekday_options_for_select.yml +30 -18
- data/config/action_view_helpers/actionview/form_options_helper/weekday_select.yml +30 -18
- data/config/action_view_helpers/actionview/form_tag_helper/button_tag.yml +39 -21
- data/config/action_view_helpers/actionview/form_tag_helper/checkbox_tag.yml +33 -21
- data/config/action_view_helpers/actionview/form_tag_helper/color_field_tag.yml +26 -17
- data/config/action_view_helpers/actionview/form_tag_helper/date_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/datetime_field_tag.yml +28 -18
- data/config/action_view_helpers/actionview/form_tag_helper/default_enforce_utf8.yml +9 -6
- data/config/action_view_helpers/actionview/form_tag_helper/email_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/embed_authenticity_token_in_remote_forms.yml +9 -6
- data/config/action_view_helpers/actionview/form_tag_helper/field_id.yml +30 -18
- data/config/action_view_helpers/actionview/form_tag_helper/field_name.yml +30 -18
- data/config/action_view_helpers/actionview/form_tag_helper/field_set_tag.yml +23 -15
- data/config/action_view_helpers/actionview/form_tag_helper/file_field_tag.yml +35 -22
- data/config/action_view_helpers/actionview/form_tag_helper/form_tag.yml +38 -24
- data/config/action_view_helpers/actionview/form_tag_helper/hidden_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/image_submit_tag.yml +31 -21
- data/config/action_view_helpers/actionview/form_tag_helper/label_tag.yml +33 -17
- data/config/action_view_helpers/actionview/form_tag_helper/month_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/number_field_tag.yml +47 -29
- data/config/action_view_helpers/actionview/form_tag_helper/password_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/radio_button_tag.yml +32 -20
- data/config/action_view_helpers/actionview/form_tag_helper/range_field_tag.yml +47 -29
- data/config/action_view_helpers/actionview/form_tag_helper/search_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/select_tag.yml +47 -29
- data/config/action_view_helpers/actionview/form_tag_helper/submit_tag.yml +33 -21
- data/config/action_view_helpers/actionview/form_tag_helper/telephone_field_tag.yml +28 -18
- data/config/action_view_helpers/actionview/form_tag_helper/text_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/textarea_tag.yml +31 -20
- data/config/action_view_helpers/actionview/form_tag_helper/time_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/url_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/utf8_enforcer_tag.yml +9 -6
- data/config/action_view_helpers/actionview/form_tag_helper/week_field_tag.yml +28 -18
- data/config/action_view_helpers/actionview/javascript_helper/escape_javascript.yml +16 -10
- data/config/action_view_helpers/actionview/javascript_helper/javascript_cdata_section.yml +9 -6
- data/config/action_view_helpers/actionview/javascript_helper/javascript_tag.yml +41 -27
- data/config/action_view_helpers/actionview/number_helper/number_to_currency.yml +29 -18
- data/config/action_view_helpers/actionview/number_helper/number_to_human.yml +25 -15
- data/config/action_view_helpers/actionview/number_helper/number_to_human_size.yml +20 -12
- data/config/action_view_helpers/actionview/number_helper/number_to_percentage.yml +20 -12
- data/config/action_view_helpers/actionview/number_helper/number_to_phone.yml +33 -20
- data/config/action_view_helpers/actionview/number_helper/number_with_delimiter.yml +21 -13
- data/config/action_view_helpers/actionview/number_helper/number_with_precision.yml +25 -15
- data/config/action_view_helpers/actionview/output_safety_helper/raw.yml +15 -9
- data/config/action_view_helpers/actionview/output_safety_helper/safe_join.yml +20 -12
- data/config/action_view_helpers/actionview/output_safety_helper/to_sentence.yml +24 -15
- data/config/action_view_helpers/actionview/record_identifier/dom_class.yml +20 -12
- data/config/action_view_helpers/actionview/record_identifier/dom_id.yml +20 -12
- data/config/action_view_helpers/actionview/record_identifier/dom_target.yml +15 -9
- data/config/action_view_helpers/actionview/record_identifier/model_name_from_record_or_class.yml +9 -6
- data/config/action_view_helpers/actionview/rendering_helper/render.yml +108 -22
- data/config/action_view_helpers/actionview/sanitize_helper/sanitize.yml +25 -15
- data/config/action_view_helpers/actionview/sanitize_helper/sanitize_css.yml +15 -9
- data/config/action_view_helpers/actionview/sanitize_helper/sanitizer_vendor.yml +9 -6
- data/config/action_view_helpers/actionview/sanitize_helper/strip_links.yml +15 -9
- data/config/action_view_helpers/actionview/sanitize_helper/strip_tags.yml +15 -9
- data/config/action_view_helpers/actionview/tag_helper/cdata_section.yml +15 -9
- data/config/action_view_helpers/actionview/tag_helper/content_tag.yml +59 -38
- data/config/action_view_helpers/actionview/tag_helper/escape_once.yml +15 -9
- data/config/action_view_helpers/actionview/tag_helper/tag.yml +54 -31
- data/config/action_view_helpers/actionview/tag_helper/token_list.yml +16 -10
- data/config/action_view_helpers/actionview/text_helper/concat.yml +15 -9
- data/config/action_view_helpers/actionview/text_helper/current_cycle.yml +15 -9
- data/config/action_view_helpers/actionview/text_helper/cycle.yml +23 -14
- data/config/action_view_helpers/actionview/text_helper/excerpt.yml +33 -20
- data/config/action_view_helpers/actionview/text_helper/highlight.yml +37 -18
- data/config/action_view_helpers/actionview/text_helper/pluralize.yml +30 -18
- data/config/action_view_helpers/actionview/text_helper/reset_cycle.yml +15 -9
- data/config/action_view_helpers/actionview/text_helper/safe_concat.yml +9 -6
- data/config/action_view_helpers/actionview/text_helper/simple_format.yml +33 -20
- data/config/action_view_helpers/actionview/text_helper/truncate.yml +38 -23
- data/config/action_view_helpers/actionview/text_helper/word_wrap.yml +25 -15
- data/config/action_view_helpers/actionview/translation_helper/debug_missing_translation.yml +9 -6
- data/config/action_view_helpers/actionview/translation_helper/localize.yml +26 -16
- data/config/action_view_helpers/actionview/translation_helper/translate.yml +31 -19
- data/config/action_view_helpers/actionview/url_helper/button_to.yml +57 -33
- data/config/action_view_helpers/actionview/url_helper/button_to_generates_button_tag.yml +9 -6
- data/config/action_view_helpers/actionview/url_helper/current_page?.yml +25 -15
- data/config/action_view_helpers/actionview/url_helper/link_to.yml +76 -53
- data/config/action_view_helpers/actionview/url_helper/link_to_if.yml +54 -20
- data/config/action_view_helpers/actionview/url_helper/link_to_unless.yml +54 -20
- data/config/action_view_helpers/actionview/url_helper/link_to_unless_current.yml +49 -17
- data/config/action_view_helpers/actionview/url_helper/mail_to.yml +60 -34
- data/config/action_view_helpers/actionview/url_helper/phone_to.yml +40 -22
- data/config/action_view_helpers/actionview/url_helper/sms_to.yml +45 -25
- data/config/action_view_helpers/actionview/url_helper/url_for.yml +15 -9
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_import_module_tag.yml +32 -0
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_importmap_module_preload_tags.yml +39 -0
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_importmap_tags.yml +35 -0
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_inline_importmap_tag.yml +32 -0
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_module_preload_tag.yml +35 -0
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache.yml +9 -6
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache_tag.yml +12 -8
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview.yml +9 -6
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview_tag.yml +12 -8
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload.yml +9 -6
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload_tag.yml +12 -8
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_method_tag.yml +17 -11
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_scroll_tag.yml +17 -11
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refreshes_with.yml +20 -12
- data/config/action_view_helpers/turbo-rails/frames_helper/turbo_frame_tag.yml +54 -33
- data/config/action_view_helpers/turbo-rails/includes_helper/turbo_include_tags.yml +9 -6
- data/config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_action_tag.yml +32 -20
- data/config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_refresh_tag.yml +18 -11
- data/config/action_view_helpers/turbo-rails/streams_helper/turbo_stream.yml +9 -6
- data/config/action_view_helpers/turbo-rails/streams_helper/turbo_stream_from.yml +28 -18
- data/config/html_elements.yml +597 -0
- data/config/options.yml +1 -0
- data/config/slots/components.yml +52 -0
- data/config/state/kind.yml +61 -0
- data/config/state/operators.yml +27 -0
- data/config/state/predicates.yml +39 -0
- data/config/state/transforms.yml +18 -0
- data/config/view_context_methods/actionview/base/annotate_rendered_view_with_filenames.yml +4 -4
- data/config/view_context_methods/actionview/base/assign.yml +4 -4
- data/config/view_context_methods/actionview/base/assigns.yml +4 -4
- data/config/view_context_methods/actionview/base/automatically_disable_submit_tag.yml +4 -4
- data/config/view_context_methods/actionview/base/compiled_method_container.yml +4 -4
- data/config/view_context_methods/actionview/base/config.yml +4 -4
- data/config/view_context_methods/actionview/base/default_form_builder.yml +4 -4
- data/config/view_context_methods/actionview/base/default_formats.yml +4 -4
- data/config/view_context_methods/actionview/base/field_error_proc.yml +4 -4
- data/config/view_context_methods/actionview/base/formats.yml +4 -4
- data/config/view_context_methods/actionview/base/in_rendering_context.yml +4 -4
- data/config/view_context_methods/actionview/base/locale.yml +4 -4
- data/config/view_context_methods/actionview/base/lookup_context.yml +4 -4
- data/config/view_context_methods/actionview/base/output_buffer.yml +4 -4
- data/config/view_context_methods/actionview/base/prefix_partial_path_with_controller_namespace.yml +4 -4
- data/config/view_context_methods/actionview/base/remove_hidden_field_autocomplete.yml +4 -4
- data/config/view_context_methods/actionview/base/streaming_completion_on_exception.yml +4 -4
- data/config/view_context_methods/actionview/base/view_flow.yml +4 -4
- data/config/view_context_methods/actionview/base/view_paths.yml +4 -4
- data/config/view_context_methods/actionview/base/view_renderer.yml +4 -4
- data/config/view_context_methods/actionview/template/local_assigns.yml +4 -4
- data/config/view_context_methods/activemodel/conversion/convert_to_model.yml +4 -4
- data/config/view_context_methods/activesupport/benchmarkable/benchmark.yml +4 -4
- data/config.yml +1243 -790
- data/exe/herb +2 -0
- data/ext/herb/error_helpers.c +355 -17
- data/ext/herb/error_helpers.h +1 -1
- data/ext/herb/extconf.rb +4 -2
- data/ext/herb/extension.c +137 -89
- data/ext/herb/extension_helpers.c +81 -42
- data/ext/herb/extension_helpers.h +4 -1
- data/ext/herb/nodes.c +859 -374
- data/ext/herb/nodes.h +3 -2
- data/ext/herb/parser_options_helpers.c +151 -0
- data/ext/herb/parser_options_helpers.h +14 -0
- data/herb.gemspec +2 -2
- data/lib/herb/3.2/herb.so +0 -0
- data/lib/herb/3.3/herb.so +0 -0
- data/lib/herb/3.4/herb.so +0 -0
- data/lib/herb/4.0/herb.so +0 -0
- data/lib/herb/action_view/helper_registry.rb +1358 -62
- data/lib/herb/analysis/partial_declaration.rb +140 -0
- data/lib/herb/analysis/partial_index.rb +189 -0
- data/lib/herb/analysis/partial_resolution.rb +161 -0
- data/lib/herb/analysis/partial_resolver.rb +144 -0
- data/lib/herb/analysis/project_index.rb +152 -0
- data/lib/herb/{action_view → analysis}/render_analyzer.rb +287 -77
- data/lib/herb/analysis/render_graph/ancestor_chain.rb +27 -0
- data/lib/herb/analysis/render_graph/builder.rb +376 -0
- data/lib/herb/analysis/render_graph/call_frame.rb +9 -0
- data/lib/herb/analysis/render_graph/call_site_location.rb +23 -0
- data/lib/herb/analysis/render_graph/inferred_signature.rb +21 -0
- data/lib/herb/analysis/render_graph/partial_call_site.rb +40 -0
- data/lib/herb/analysis/render_graph/partial_context.rb +46 -0
- data/lib/herb/analysis/render_graph/template_roots.rb +31 -0
- data/lib/herb/analysis/render_graph.rb +285 -0
- data/lib/herb/analysis/ruby_locals_index/local.rb +25 -0
- data/lib/herb/analysis/ruby_locals_index/named_reference.rb +22 -0
- data/lib/herb/analysis/ruby_locals_index/offset_table.rb +44 -0
- data/lib/herb/analysis/ruby_locals_index/reference_collector.rb +80 -0
- data/lib/herb/analysis/ruby_locals_index/state_locals.rb +49 -0
- data/lib/herb/analysis/ruby_locals_index.rb +165 -0
- data/lib/herb/analysis/ruby_reference.rb +67 -0
- data/lib/herb/analysis/template_dependencies/dependency_collector.rb +179 -0
- data/lib/herb/analysis/template_dependencies/node_dependency_collector.rb +309 -0
- data/lib/herb/analysis/template_dependencies.rb +562 -0
- data/lib/herb/ast/erb_render_node.rb +26 -94
- data/lib/herb/ast/helpers.rb +90 -10
- data/lib/herb/ast/herb_directive_node.rb +18 -0
- data/lib/herb/ast/node.rb +32 -2
- data/lib/herb/ast/nodes.rb +1368 -105
- data/lib/herb/backend.rb +73 -0
- data/lib/herb/bootstrap.rb +8 -8
- data/lib/herb/cli.rb +550 -32
- data/lib/herb/colors.rb +14 -0
- data/lib/herb/configuration.rb +71 -35
- data/lib/herb/defaults.yml +2 -1
- data/lib/herb/dev/assets.rb +57 -0
- data/lib/herb/dev/classifier.rb +84 -0
- data/lib/herb/dev/embedded.rb +27 -0
- data/lib/herb/dev/pipeline.rb +305 -0
- data/lib/herb/dev/protocol.rb +221 -0
- data/lib/herb/dev/runner.rb +180 -175
- data/lib/herb/dev/server.rb +89 -26
- data/lib/herb/dev/server_entry.rb +41 -6
- data/lib/herb/dev/watcher.rb +181 -0
- data/lib/herb/dev.rb +163 -0
- data/lib/herb/diagnostic/formatter.rb +88 -0
- data/lib/herb/diagnostic.rb +172 -0
- data/lib/herb/diff/operation.rb +36 -0
- data/lib/herb/diff/result.rb +62 -0
- data/lib/herb/diff.rb +10 -0
- data/lib/herb/engine/collector.rb +62 -0
- data/lib/herb/engine/compiler.rb +387 -113
- data/lib/herb/engine/component_tags/constant_resolver.rb +28 -0
- data/lib/herb/engine/component_tags/partial_resolver.rb +54 -0
- data/lib/herb/engine/component_tags/resolver.rb +32 -0
- data/lib/herb/engine/component_tags/visitor.rb +231 -0
- data/lib/herb/engine/css_inliner/inliner.rb +101 -0
- data/lib/herb/engine/css_inliner/visitor.rb +174 -0
- data/lib/herb/engine/errors.rb +122 -0
- data/lib/herb/engine/helpers.rb +82 -0
- data/lib/herb/engine/inline_render/inliner.rb +122 -0
- data/lib/herb/engine/inline_render/visitor.rb +267 -0
- data/lib/herb/engine/runtime/entry.rb +62 -0
- data/lib/herb/engine/runtime/error_page.rb +362 -0
- data/lib/herb/engine/runtime/html_safe_assertions.rb +217 -0
- data/lib/herb/engine/runtime/journal/summary.rb +227 -0
- data/lib/herb/engine/runtime/journal.rb +379 -0
- data/lib/herb/engine/runtime/middleware.rb +212 -0
- data/lib/herb/engine/runtime/observations.rb +73 -0
- data/lib/herb/engine/runtime/report.rb +204 -0
- data/lib/herb/engine/runtime/session.rb +437 -0
- data/lib/herb/engine/runtime.rb +21 -0
- data/lib/herb/engine/scoped_style/channel.rb +66 -0
- data/lib/herb/engine/scoped_style/collector.rb +74 -0
- data/lib/herb/engine/scoped_style/visitor.rb +533 -0
- data/lib/herb/engine/slots/annotation.rb +98 -0
- data/lib/herb/engine/slots/bindings.rb +61 -0
- data/lib/herb/engine/slots/callee.rb +118 -0
- data/lib/herb/engine/slots/component_definitions.rb +67 -0
- data/lib/herb/engine/slots/components/async.rb +24 -0
- data/lib/herb/engine/slots/components/base.rb +132 -0
- data/lib/herb/engine/slots/components/deferred.rb +81 -0
- data/lib/herb/engine/slots/components/fallback.rb +27 -0
- data/lib/herb/engine/slots/components/fragment.rb +99 -0
- data/lib/herb/engine/slots/components/lazy.rb +24 -0
- data/lib/herb/engine/slots/components.rb +52 -0
- data/lib/herb/engine/slots/dependencies/channel.rb +72 -0
- data/lib/herb/engine/slots/dependencies.rb +269 -0
- data/lib/herb/engine/slots/dynamics_compiler.rb +864 -0
- data/lib/herb/engine/slots/identifier.rb +35 -0
- data/lib/herb/engine/slots/manifest/channel.rb +74 -0
- data/lib/herb/engine/slots/manifest/collector.rb +75 -0
- data/lib/herb/engine/slots/markers.rb +152 -0
- data/lib/herb/engine/slots/render_bindings.rb +141 -0
- data/lib/herb/engine/slots/schema_compiler.rb +94 -0
- data/lib/herb/engine/slots/state_anchor.rb +94 -0
- data/lib/herb/engine/slots/state_compiler.rb +1325 -0
- data/lib/herb/engine/slots/state_directives.rb +854 -0
- data/lib/herb/engine/slots/state_kinds.rb +54 -0
- data/lib/herb/engine/slots/state_operators.rb +36 -0
- data/lib/herb/engine/slots/state_overrides.rb +79 -0
- data/lib/herb/engine/slots/state_predicates.rb +65 -0
- data/lib/herb/engine/slots/state_transforms.rb +42 -0
- data/lib/herb/engine/slots/statics.rb +185 -0
- data/lib/herb/engine/slots/subtree.rb +82 -0
- data/lib/herb/engine/slots/subtree_compiler.rb +255 -0
- data/lib/herb/engine/slots/types.rb +42 -0
- data/lib/herb/engine/slots/visitor.rb +2267 -0
- data/lib/herb/engine/validators/accessibility_validator.rb +3 -3
- data/lib/herb/engine/validators/base.rb +36 -0
- data/lib/herb/engine/validators/generator_template_validator.rb +39 -0
- data/lib/herb/engine/validators/nesting_validator.rb +3 -3
- data/lib/herb/engine/validators/render_validator.rb +13 -33
- data/lib/herb/engine/validators/security_validator.rb +3 -17
- data/lib/herb/engine/validators.rb +43 -0
- data/lib/herb/engine/visitors/auto_close_omitted_tags_visitor.rb +48 -0
- data/lib/herb/engine/visitors/content_for_visitor.rb +127 -0
- data/lib/herb/engine/{debug_visitor.rb → visitors/debug_visitor.rb} +121 -93
- data/lib/herb/engine/visitors/html_safe_assertions_visitor.rb +281 -0
- data/lib/herb/engine/visitors/instrumentation_visitor.rb +290 -0
- data/lib/herb/engine/visitors/optimize_visitor.rb +728 -0
- data/lib/herb/engine/visitors/remove_comments_visitor.rb +106 -0
- data/lib/herb/engine/visitors/source_attribution_visitor.rb +177 -0
- data/lib/herb/engine.rb +218 -259
- data/lib/herb/ensure_installed.rb +43 -0
- data/lib/herb/errors.rb +646 -157
- data/lib/herb/fingerprint.rb +82 -0
- data/lib/herb/html/elements.rb +18 -0
- data/lib/herb/html/util.rb +21 -2
- data/lib/herb/lex_result.rb +0 -10
- data/lib/herb/locate.rb +163 -0
- data/lib/herb/location.rb +20 -0
- data/lib/herb/parse_result.rb +17 -11
- data/lib/herb/parser_options.rb +65 -46
- data/lib/herb/position.rb +19 -0
- data/lib/herb/prism_inspect.rb +1 -4
- data/lib/herb/project.rb +28 -15
- data/lib/herb/range.rb +5 -0
- data/lib/herb/result.rb +2 -2
- data/lib/herb/ruby_program.rb +110 -0
- data/lib/herb/source_path.rb +232 -0
- data/lib/herb/token.rb +14 -3
- data/lib/herb/version.rb +1 -1
- data/lib/herb/visitor/context/origin.rb +52 -0
- data/lib/herb/visitor/context/replacements.rb +59 -0
- data/lib/herb/visitor/context.rb +169 -0
- data/lib/herb/visitor/context_aware.rb +45 -0
- data/lib/herb/visitor/diagnostics.rb +148 -0
- data/lib/herb/visitor/experimental.rb +33 -0
- data/lib/herb/visitor/parser_option_requirements.rb +151 -0
- data/lib/herb/visitor/stack.rb +192 -0
- data/lib/herb/visitor.rb +47 -1
- data/lib/herb/warnings.rb +25 -0
- data/lib/herb.rb +74 -63
- data/sig/herb/action_view/helper_registry.rbs +82 -10
- data/sig/herb/analysis/partial_declaration.rbs +80 -0
- data/sig/herb/analysis/partial_index.rbs +66 -0
- data/sig/herb/analysis/partial_resolution.rbs +57 -0
- data/sig/herb/analysis/partial_resolver.rbs +76 -0
- data/sig/herb/analysis/project_index.rbs +57 -0
- data/sig/herb/{action_view → analysis}/render_analyzer.rbs +25 -4
- data/sig/herb/analysis/render_graph/ancestor_chain.rbs +22 -0
- data/sig/herb/analysis/render_graph/builder.rbs +180 -0
- data/sig/herb/analysis/render_graph/call_frame.rbs +26 -0
- data/sig/herb/analysis/render_graph/call_site_location.rbs +28 -0
- data/sig/herb/analysis/render_graph/inferred_signature.rbs +27 -0
- data/sig/herb/analysis/render_graph/partial_call_site.rbs +36 -0
- data/sig/herb/analysis/render_graph/partial_context.rbs +31 -0
- data/sig/herb/analysis/render_graph/template_roots.rbs +32 -0
- data/sig/herb/analysis/render_graph.rbs +83 -0
- data/sig/herb/analysis/ruby_locals_index/local.rbs +21 -0
- data/sig/herb/analysis/ruby_locals_index/named_reference.rbs +20 -0
- data/sig/herb/analysis/ruby_locals_index/offset_table.rbs +26 -0
- data/sig/herb/analysis/ruby_locals_index/reference_collector.rbs +40 -0
- data/sig/herb/analysis/ruby_locals_index/state_locals.rbs +19 -0
- data/sig/herb/analysis/ruby_locals_index.rbs +62 -0
- data/sig/herb/analysis/ruby_reference.rbs +28 -0
- data/sig/herb/analysis/template_dependencies/dependency_collector.rbs +52 -0
- data/sig/herb/analysis/template_dependencies/node_dependency_collector.rbs +81 -0
- data/sig/herb/analysis/template_dependencies.rbs +125 -0
- data/sig/herb/ast/erb_render_node.rbs +10 -2
- data/sig/herb/ast/helpers.rbs +31 -1
- data/sig/herb/ast/herb_directive_node.rbs +13 -0
- data/sig/herb/ast/node.rbs +9 -0
- data/sig/herb/ast/nodes.rbs +668 -89
- data/sig/herb/backend.rbs +52 -0
- data/sig/herb/bootstrap.rbs +2 -0
- data/sig/herb/colors.rbs +3 -0
- data/sig/herb/configuration.rbs +27 -3
- data/sig/herb/dev/assets.rbs +27 -0
- data/sig/herb/dev/classifier.rbs +57 -0
- data/sig/herb/dev/embedded.rbs +21 -0
- data/sig/herb/dev/pipeline.rbs +118 -0
- data/sig/herb/dev/protocol.rbs +78 -0
- data/sig/herb/dev/runner.rbs +64 -23
- data/sig/herb/dev/server.rbs +49 -22
- data/sig/herb/dev/server_entry.rbs +46 -21
- data/sig/herb/dev/watcher.rbs +84 -0
- data/sig/herb/dev.rbs +58 -0
- data/sig/herb/diagnostic/formatter.rbs +28 -0
- data/sig/herb/diagnostic.rbs +88 -0
- data/sig/herb/diff/operation.rbs +36 -0
- data/sig/herb/diff/result.rbs +36 -0
- data/sig/herb/diff.rbs +6 -0
- data/sig/herb/engine/collector.rbs +48 -0
- data/sig/herb/engine/compiler.rbs +74 -24
- data/sig/herb/engine/component_tags/constant_resolver.rbs +19 -0
- data/sig/herb/engine/component_tags/partial_resolver.rbs +30 -0
- data/sig/herb/engine/component_tags/resolver.rbs +25 -0
- data/sig/herb/engine/component_tags/visitor.rbs +69 -0
- data/sig/herb/engine/css_inliner/inliner.rbs +65 -0
- data/sig/herb/engine/css_inliner/visitor.rbs +87 -0
- data/sig/herb/engine/errors.rbs +68 -0
- data/sig/herb/engine/helpers.rbs +28 -0
- data/sig/herb/engine/inline_render/inliner.rbs +39 -0
- data/sig/herb/engine/inline_render/visitor.rbs +104 -0
- data/sig/herb/engine/runtime/entry.rbs +43 -0
- data/sig/herb/engine/runtime/error_page.rbs +115 -0
- data/sig/herb/engine/runtime/html_safe_assertions.rbs +99 -0
- data/sig/herb/engine/runtime/journal/summary.rbs +172 -0
- data/sig/herb/engine/runtime/journal.rbs +126 -0
- data/sig/herb/engine/runtime/middleware.rbs +96 -0
- data/sig/herb/engine/runtime/observations.rbs +38 -0
- data/sig/herb/engine/runtime/report.rbs +97 -0
- data/sig/herb/engine/runtime/session.rbs +233 -0
- data/sig/herb/engine/runtime.rbs +14 -0
- data/sig/herb/engine/scoped_style/channel.rbs +45 -0
- data/sig/herb/engine/scoped_style/collector.rbs +45 -0
- data/sig/herb/engine/scoped_style/visitor.rbs +220 -0
- data/sig/herb/engine/slots/annotation.rbs +72 -0
- data/sig/herb/engine/slots/bindings.rbs +34 -0
- data/sig/herb/engine/slots/callee.rbs +62 -0
- data/sig/herb/engine/slots/component_definitions.rbs +19 -0
- data/sig/herb/engine/slots/components/async.rbs +20 -0
- data/sig/herb/engine/slots/components/base.rbs +60 -0
- data/sig/herb/engine/slots/components/deferred.rbs +29 -0
- data/sig/herb/engine/slots/components/fallback.rbs +21 -0
- data/sig/herb/engine/slots/components/fragment.rbs +34 -0
- data/sig/herb/engine/slots/components/lazy.rbs +20 -0
- data/sig/herb/engine/slots/components.rbs +30 -0
- data/sig/herb/engine/slots/dependencies/channel.rbs +51 -0
- data/sig/herb/engine/slots/dependencies.rbs +94 -0
- data/sig/herb/engine/slots/dynamics_compiler.rbs +352 -0
- data/sig/herb/engine/slots/identifier.rbs +19 -0
- data/sig/herb/engine/slots/manifest/channel.rbs +49 -0
- data/sig/herb/engine/slots/manifest/collector.rbs +45 -0
- data/sig/herb/engine/slots/markers.rbs +99 -0
- data/sig/herb/engine/slots/render_bindings.rbs +69 -0
- data/sig/herb/engine/slots/schema_compiler.rbs +62 -0
- data/sig/herb/engine/slots/state_anchor.rbs +41 -0
- data/sig/herb/engine/slots/state_compiler.rbs +258 -0
- data/sig/herb/engine/slots/state_directives.rbs +278 -0
- data/sig/herb/engine/slots/state_kinds.rbs +24 -0
- data/sig/herb/engine/slots/state_operators.rbs +19 -0
- data/sig/herb/engine/slots/state_overrides.rbs +33 -0
- data/sig/herb/engine/slots/state_predicates.rbs +16 -0
- data/sig/herb/engine/slots/state_transforms.rbs +15 -0
- data/sig/herb/engine/slots/statics.rbs +67 -0
- data/sig/herb/engine/slots/subtree.rbs +49 -0
- data/sig/herb/engine/slots/subtree_compiler.rbs +130 -0
- data/sig/herb/engine/slots/types.rbs +46 -0
- data/sig/herb/engine/slots/visitor.rbs +603 -0
- data/sig/herb/engine/validators/accessibility_validator.rbs +1 -1
- data/sig/herb/engine/validators/base.rbs +28 -0
- data/sig/herb/engine/validators/generator_template_validator.rbs +19 -0
- data/sig/herb/engine/validators/nesting_validator.rbs +1 -1
- data/sig/herb/engine/validators/render_validator.rbs +2 -6
- data/sig/herb/engine/validators/security_validator.rbs +1 -3
- data/sig/herb/engine/validators.rbs +21 -0
- data/sig/herb/engine/visitors/auto_close_omitted_tags_visitor.rbs +26 -0
- data/sig/herb/engine/visitors/content_for_visitor.rbs +52 -0
- data/sig/herb/engine/{debug_visitor.rbs → visitors/debug_visitor.rbs} +26 -15
- data/sig/herb/engine/visitors/html_safe_assertions_visitor.rbs +100 -0
- data/sig/herb/engine/visitors/instrumentation_visitor.rbs +111 -0
- data/sig/herb/engine/visitors/optimize_visitor.rbs +246 -0
- data/sig/herb/engine/visitors/remove_comments_visitor.rbs +66 -0
- data/sig/herb/engine/visitors/source_attribution_visitor.rbs +90 -0
- data/sig/herb/engine.rbs +47 -41
- data/sig/herb/ensure_installed.rbs +9 -0
- data/sig/herb/errors.rbs +293 -0
- data/sig/herb/fingerprint.rbs +37 -0
- data/sig/herb/html/elements.rbs +19 -0
- data/sig/herb/html/util.rbs +15 -1
- data/sig/herb/lex_result.rbs +0 -6
- data/sig/herb/locate.rbs +89 -0
- data/sig/herb/location.rbs +12 -0
- data/sig/herb/parse_result.rbs +10 -8
- data/sig/herb/parser_options.rbs +47 -21
- data/sig/herb/position.rbs +11 -0
- data/sig/herb/range.rbs +3 -0
- data/sig/herb/ruby_program.rbs +51 -0
- data/sig/herb/source_path.rbs +132 -0
- data/sig/herb/token.rbs +5 -2
- data/sig/herb/visitor/context/origin.rbs +51 -0
- data/sig/herb/visitor/context/replacements.rbs +39 -0
- data/sig/herb/visitor/context.rbs +83 -0
- data/sig/herb/visitor/context_aware.rbs +32 -0
- data/sig/herb/visitor/diagnostics.rbs +82 -0
- data/sig/herb/visitor/experimental.rbs +23 -0
- data/sig/herb/visitor/parser_option_requirements.rbs +76 -0
- data/sig/herb/visitor/stack.rbs +91 -0
- data/sig/herb/visitor.rbs +22 -0
- data/sig/herb/warnings.rbs +10 -0
- data/sig/herb.rbs +27 -10
- data/sig/serialized_ast_errors.rbs +58 -1
- data/sig/serialized_ast_nodes.rbs +59 -2
- data/src/analyze/action_view/attribute_extraction_helpers.c +73 -36
- data/src/analyze/action_view/generated_handlers.c +37 -1
- data/src/analyze/action_view/generated_handlers.h +2 -1
- data/src/analyze/action_view/helper_registry.c +1353 -58
- data/src/analyze/action_view/registry.c +10 -17
- data/src/analyze/action_view/stylesheet_link_tag.c +40 -0
- data/src/analyze/action_view/tag_helper_node_builders.c +63 -3
- data/src/analyze/action_view/tag_helpers.c +497 -111
- data/src/analyze/analyze.c +306 -89
- data/src/analyze/analyze_helpers.c +502 -243
- data/src/analyze/analyzed_ruby.c +2 -0
- data/src/analyze/builders.c +80 -51
- data/src/analyze/conditional_elements.c +13 -8
- data/src/analyze/conditional_open_tags.c +11 -5
- data/src/analyze/control_type.c +30 -5
- data/src/analyze/herb_directives.c +701 -0
- data/src/analyze/invalid_structures.c +11 -7
- data/src/analyze/iteration_nodes.c +306 -0
- data/src/analyze/missing_end.c +116 -32
- data/src/analyze/parse_errors.c +8 -3
- data/src/analyze/postfix_conditionals.c +98 -63
- data/src/analyze/prism_annotate.c +45 -13
- data/src/analyze/render_nodes.c +345 -123
- data/src/analyze/strict_locals.c +30 -26
- data/src/analyze/ternary_conditionals.c +95 -70
- data/src/analyze/transform.c +43 -1
- data/src/ast/ast_node.c +3 -13
- data/src/ast/ast_nodes.c +914 -113
- data/src/ast/ast_pretty_print.c +166 -3
- data/src/diff/herb_diff.c +8 -0
- data/src/diff/herb_diff_attributes.c +1 -0
- data/src/diff/herb_diff_children.c +4 -3
- data/src/diff/herb_diff_helpers.c +7 -1
- data/src/diff/herb_diff_nodes.c +186 -71
- data/src/diff/herb_hash_tree.c +99 -1
- data/src/errors.c +1096 -128
- data/src/extract.c +227 -144
- data/src/herb.c +30 -11
- data/src/include/analyze/action_view/attribute_extraction_helpers.h +1 -1
- data/src/include/analyze/action_view/helper_registry.h +28 -4
- data/src/include/analyze/action_view/tag_helper_handler.h +1 -1
- data/src/include/analyze/action_view/tag_helper_node_builders.h +7 -0
- data/src/include/analyze/analyze.h +11 -22
- data/src/include/analyze/analyzed_ruby.h +25 -0
- data/src/include/analyze/builders.h +16 -0
- data/src/include/analyze/helpers.h +25 -24
- data/src/include/analyze/herb_directive_kinds.h +41 -0
- data/src/include/analyze/herb_directives.h +14 -0
- data/src/include/analyze/iteration_nodes.h +11 -0
- data/src/include/analyze/prism_annotate.h +3 -3
- data/src/include/analyze/ternary_conditionals.h +2 -0
- data/src/include/ast/ast_node.h +1 -5
- data/src/include/ast/ast_nodes.h +78 -3
- data/src/include/ast/ast_pretty_print.h +1 -1
- data/src/include/diff/herb_diff.h +11 -0
- data/src/include/errors.h +156 -39
- data/src/include/extract.h +11 -0
- data/src/include/herb.h +6 -0
- data/src/include/lexer/erb_openers.h +29 -0
- data/src/include/lexer/lexer.h +1 -0
- data/src/include/lexer/lexer_peek_helpers.h +8 -1
- data/src/include/lexer/lexer_struct.h +4 -0
- data/src/include/lexer/token.h +3 -0
- data/src/include/lexer/token_struct.h +8 -6
- data/src/include/lib/hb_allocator.h +2 -1
- data/src/include/lib/hb_array.h +2 -0
- data/src/include/lib/hb_foreach.h +1 -1
- data/src/include/lib/hb_string.h +7 -0
- data/src/include/parser/dot_notation.h +1 -1
- data/src/include/parser/foreign_content_elements.h +32 -0
- data/src/include/parser/parser.h +16 -30
- data/src/include/parser/parser_helpers.h +13 -11
- data/src/include/parser/parser_options.h +41 -0
- data/src/include/prism/herb_prism_node.h +6 -1
- data/src/include/prism/ruby_parser.h +6 -0
- data/src/include/util/html_elements.h +85 -0
- data/src/include/util/html_util.h +1 -0
- data/src/include/version.h +1 -1
- data/src/lexer/lexer_peek_helpers.c +15 -1
- data/src/lexer/token.c +83 -1
- data/src/lexer.c +228 -12
- data/src/lib/hb_allocator.c +2 -0
- data/src/lib/hb_array.c +26 -0
- data/src/lib/hb_string.c +26 -0
- data/src/main.c +1 -1
- data/src/parser/dot_notation.c +4 -3
- data/src/parser/match_tags.c +66 -1
- data/src/parser/parser_helpers.c +69 -37
- data/src/parser.c +606 -383
- data/src/parser_options_defaults.c +30 -0
- data/src/prism/prism_helpers.c +94 -0
- data/src/prism/ruby_parser.c +49 -0
- data/src/util/html_util.c +11 -58
- data/src/visitor.c +77 -1
- data/templates/ext/herb/error_helpers.c.erb +1 -1
- data/templates/ext/herb/nodes.c.erb +19 -14
- data/templates/ext/herb/nodes.h.erb +2 -1
- data/templates/ext/herb/parser_options_helpers.c.erb +69 -0
- data/templates/ext/herb/parser_options_helpers.h.erb +11 -0
- data/templates/java/nodes.c.erb +21 -17
- data/templates/java/nodes.h.erb +3 -2
- data/templates/java/org/herb/ParserOptions.java.erb +24 -0
- data/templates/java/org/herb/ast/HelperRegistry.java.erb +67 -31
- data/templates/java/org/herb/ast/HelperType.java.erb +29 -0
- data/templates/java/org/herb/ast/Nodes.java.erb +11 -7
- data/templates/java/parser_options_helpers.c.erb +45 -0
- data/templates/java/parser_options_helpers.h.erb +10 -0
- data/templates/javascript/packages/client/src/state-kinds.ts.erb +49 -0
- data/templates/javascript/packages/client/src/state-operators.ts.erb +15 -0
- data/templates/javascript/packages/client/src/state-predicates.ts.erb +27 -0
- data/templates/javascript/packages/client/src/state-transforms.ts.erb +19 -0
- data/templates/javascript/packages/core/src/action-view-helpers.ts.erb +47 -0
- data/templates/javascript/packages/core/src/built-in-components.ts.erb +67 -0
- data/templates/javascript/packages/core/src/errors.ts.erb +9 -3
- data/templates/javascript/packages/core/src/foreign-content-elements.ts.erb +18 -0
- data/templates/javascript/packages/core/src/html-constants.ts.erb +32 -0
- data/templates/javascript/packages/core/src/html-elements.ts.erb +41 -0
- data/templates/javascript/packages/core/src/node-type-guards.ts.erb +11 -7
- data/templates/javascript/packages/core/src/nodes.ts.erb +103 -20
- data/templates/javascript/packages/core/src/parser-options.ts.erb +41 -0
- data/templates/javascript/packages/core/src/visitor.ts.erb +1 -1
- data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +3 -3
- data/templates/javascript/packages/node/extension/nodes.cpp.erb +18 -13
- data/templates/javascript/packages/node/extension/nodes.h.erb +3 -3
- data/templates/javascript/packages/node/extension/parser_options_helpers.cpp.erb +41 -0
- data/templates/javascript/packages/node/extension/parser_options_helpers.h.erb +12 -0
- data/templates/lib/herb/action_view/helper_registry.rb.erb +77 -3
- data/templates/lib/herb/ast/nodes.rb.erb +16 -6
- data/templates/lib/herb/engine/slots/component_definitions.rb.erb +38 -0
- data/templates/lib/herb/engine/slots/state_kinds.rb.erb +37 -0
- data/templates/lib/herb/engine/slots/state_operators.rb.erb +26 -0
- data/templates/lib/herb/engine/slots/state_predicates.rb.erb +39 -0
- data/templates/lib/herb/engine/slots/state_transforms.rb.erb +27 -0
- data/templates/lib/herb/errors.rb.erb +34 -6
- data/templates/lib/herb/html/elements.rb.erb +12 -0
- data/templates/lib/herb/parser_options.rb.erb +32 -0
- data/templates/lib/herb/visitor.rb.erb +7 -1
- data/templates/rust/herb-printer/src/printer_visitor.rs.erb +14 -0
- data/templates/rust/src/action_view_helpers.rs.erb +38 -0
- data/templates/rust/src/ast/nodes.rs.erb +21 -31
- data/templates/rust/src/errors.rs.erb +1 -1
- data/templates/rust/src/nodes.rs.erb +58 -26
- data/templates/rust/src/parser_options.rs.erb +16 -0
- data/templates/rust/src/prism/generated_deserialize.rs.erb +109 -0
- data/templates/rust/src/prism/generated_prettyprint.rs.erb +153 -0
- data/templates/rust/src/union_types.rs.erb +7 -1
- data/templates/rust/src/visitor.rs.erb +1 -1
- data/templates/src/analyze/action_view/helper_registry.c.erb +22 -0
- data/templates/src/analyze/missing_end.c.erb +13 -5
- data/templates/src/ast/ast_nodes.c.erb +41 -2
- data/templates/src/diff/herb_diff_nodes.c.erb +44 -8
- data/templates/src/errors.c.erb +8 -3
- data/templates/src/include/analyze/action_view/helper_registry.h.erb +19 -0
- data/templates/src/include/analyze/herb_directive_kinds.h.erb +25 -0
- data/templates/src/include/errors.h.erb +3 -1
- data/templates/src/include/parser/foreign_content_elements.h.erb +23 -0
- data/templates/src/include/parser/parser_options.h.erb +21 -0
- data/templates/src/include/util/html_elements.h.erb +28 -0
- data/templates/src/parser_options_defaults.c.erb +9 -0
- data/templates/template.rb +564 -9
- data/templates/wasm/error_helpers.cpp.erb +4 -4
- data/templates/wasm/nodes.cpp.erb +17 -27
- data/templates/wasm/nodes.h.erb +3 -3
- data/templates/wasm/parser_options_helpers.cpp.erb +25 -0
- data/templates/wasm/parser_options_helpers.h.erb +12 -0
- metadata +306 -27
- data/config/action_view_helpers/actionview/form_helper/button.yml +0 -38
- data/config/action_view_helpers/actionview/form_helper/submit.yml +0 -35
- data/lib/herb/ast.rb +0 -7
- data/lib/herb/diff_operation.rb +0 -34
- data/lib/herb/diff_result.rb +0 -59
- data/lib/herb/engine/error_formatter.rb +0 -432
- data/lib/herb/engine/parser_error_overlay.rb +0 -773
- data/lib/herb/engine/validation_error_overlay.rb +0 -182
- data/lib/herb/engine/validation_errors.rb +0 -65
- data/lib/herb/engine/validator.rb +0 -80
- data/sig/herb/ast.rbs +0 -6
- data/sig/herb/diff_operation.rbs +0 -34
- data/sig/herb/diff_result.rbs +0 -34
- data/sig/herb/engine/debug.rbs +0 -38
- data/sig/herb/engine/error_formatter.rbs +0 -47
- data/sig/herb/engine/parser_error_overlay.rbs +0 -41
- data/sig/herb/engine/validation_error_overlay.rbs +0 -35
- data/sig/herb/engine/validation_errors.rbs +0 -45
- data/sig/herb/engine/validator.rbs +0 -41
- data/sig/herb_c_extension.rbs +0 -10
data/templates/java/nodes.c.erb
CHANGED
|
@@ -9,35 +9,35 @@
|
|
|
9
9
|
|
|
10
10
|
#include <stdlib.h>
|
|
11
11
|
|
|
12
|
-
jobject NodeFromCStruct(JNIEnv* env, AST_NODE_T* node);
|
|
13
|
-
jobject NodesArrayFromCArray(JNIEnv* env, hb_array_T* array);
|
|
12
|
+
jobject NodeFromCStruct(JNIEnv* env, AST_NODE_T* node, const parser_options_T* options);
|
|
13
|
+
jobject NodesArrayFromCArray(JNIEnv* env, hb_array_T* array, const parser_options_T* options);
|
|
14
14
|
|
|
15
15
|
<%- nodes.each do |node| -%>
|
|
16
|
-
jobject <%= node.name %>FromCStruct(JNIEnv* env, <%= node.struct_type %>* <%= node.human
|
|
16
|
+
jobject <%= node.name %>FromCStruct(JNIEnv* env, <%= node.struct_type %>* <%= node.human %>, const parser_options_T* options) {
|
|
17
17
|
if (!<%= node.human %>) { return NULL; }
|
|
18
18
|
|
|
19
19
|
jclass nodeClass = (*env)->FindClass(env, "org/herb/ast/<%= node.name %>");
|
|
20
20
|
if (!nodeClass) { return NULL; }
|
|
21
21
|
|
|
22
22
|
jstring type = (*env)->NewStringUTF(env, "<%= node.name %>");
|
|
23
|
-
jobject location = CreateLocation(env, <%= node.human %>->base.location);
|
|
23
|
+
jobject location = options->track_locations ? CreateLocation(env, <%= node.human %>->base.location) : NULL;
|
|
24
24
|
jobject errors = ErrorsArrayFromCArray(env, <%= node.human %>->base.errors);
|
|
25
25
|
|
|
26
26
|
<%- node.fields.each do |field| -%>
|
|
27
27
|
<%- if field.is_a?(Herb::Template::StringField) -%>
|
|
28
28
|
jstring <%= field.name %> = CreateStringFromHbString(env, <%= node.human %>-><%= field.name %>);
|
|
29
29
|
<%- elsif field.is_a?(Herb::Template::TokenField) -%>
|
|
30
|
-
jobject <%= field.name %> = <%= node.human %>-><%= field.name %> ? CreateToken(env, <%= node.human %>-><%= field.name
|
|
30
|
+
jobject <%= field.name %> = <%= node.human %>-><%= field.name %> ? CreateToken(env, <%= node.human %>-><%= field.name %>, options) : NULL;
|
|
31
31
|
<%- elsif field.is_a?(Herb::Template::BooleanField) -%>
|
|
32
32
|
jboolean <%= field.name %> = <%= node.human %>-><%= field.name %> ? JNI_TRUE : JNI_FALSE;
|
|
33
33
|
<%- elsif field.is_a?(Herb::Template::ArrayField) -%>
|
|
34
|
-
jobject <%= field.name %> = NodesArrayFromCArray(env, <%= node.human %>-><%= field.name
|
|
34
|
+
jobject <%= field.name %> = NodesArrayFromCArray(env, <%= node.human %>-><%= field.name %>, options);
|
|
35
35
|
<%- elsif field.is_a?(Herb::Template::NodeField) || field.is_a?(Herb::Template::BorrowedNodeField) -%>
|
|
36
|
-
jobject <%= field.name %> = <%= node.human %>-><%= field.name %> ? NodeFromCStruct(env, (AST_NODE_T*) <%= node.human %>-><%= field.name
|
|
36
|
+
jobject <%= field.name %> = <%= node.human %>-><%= field.name %> ? NodeFromCStruct(env, (AST_NODE_T*) <%= node.human %>-><%= field.name %>, options) : NULL;
|
|
37
37
|
<%- elsif field.is_a?(Herb::Template::ElementSourceField) -%>
|
|
38
38
|
jstring <%= field.name %> = <%= node.human %>-><%= field.name %>.data ? (*env)->NewStringUTF(env, <%= node.human %>-><%= field.name %>.data) : NULL;
|
|
39
39
|
<%- elsif field.is_a?(Herb::Template::LocationField) -%>
|
|
40
|
-
jobject <%= field.name %> = <%= node.human %>-><%= field.name %> ? CreateLocation(env, *<%= node.human %>-><%= field.name %>) : NULL;
|
|
40
|
+
jobject <%= field.name %> = (options->track_locations && <%= node.human %>-><%= field.name %>) ? CreateLocation(env, *<%= node.human %>-><%= field.name %>) : NULL;
|
|
41
41
|
<%- elsif field.is_a?(Herb::Template::PrismSerializedField) -%>
|
|
42
42
|
jbyteArray <%= field.name %>;
|
|
43
43
|
if (<%= node.human %>-><%= field.name %>.data != NULL && <%= node.human %>-><%= field.name %>.length > 0) {
|
|
@@ -50,7 +50,7 @@ jobject <%= node.name %>FromCStruct(JNIEnv* env, <%= node.struct_type %>* <%= no
|
|
|
50
50
|
jbyteArray <%= field.name %>;
|
|
51
51
|
if (<%= node.human %>-><%= field.name %>.node != NULL && <%= node.human %>-><%= field.name %>.parser != NULL) {
|
|
52
52
|
pm_buffer_t pm_buffer = { 0 };
|
|
53
|
-
|
|
53
|
+
herb_prism_node_serialize(<%= node.human %>-><%= field.name %>, &pm_buffer);
|
|
54
54
|
if (pm_buffer.length > 0) {
|
|
55
55
|
<%= field.name %> = (*env)->NewByteArray(env, (jsize)pm_buffer.length);
|
|
56
56
|
(*env)->SetByteArrayRegion(env, <%= field.name %>, 0, (jsize)pm_buffer.length, (const jbyte*)pm_buffer.value);
|
|
@@ -66,8 +66,8 @@ jobject <%= node.name %>FromCStruct(JNIEnv* env, <%= node.struct_type %>* <%= no
|
|
|
66
66
|
<%- end -%>
|
|
67
67
|
<%- end -%>
|
|
68
68
|
|
|
69
|
-
const char*
|
|
70
|
-
jmethodID constructor = (*env)->GetMethodID(env, nodeClass, "<init>",
|
|
69
|
+
const char* constructor_signature = "(Ljava/lang/String;Lorg/herb/Location;Ljava/util/List;<%- node.fields.each do |f| -%><%- unless f.is_a?(Herb::Template::AnalyzedRubyField) || f.is_a?(Herb::Template::PrismContextField) -%><%- if f.is_a?(Herb::Template::StringField) -%>Ljava/lang/String;<%- elsif f.is_a?(Herb::Template::TokenField) -%>Lorg/herb/Token;<%- elsif f.is_a?(Herb::Template::BooleanField) -%>Z<%- elsif f.is_a?(Herb::Template::ArrayField) -%>Ljava/util/List;<%- elsif f.is_a?(Herb::Template::NodeField) -%>Lorg/herb/ast/<%= f.specific_kind || 'Node' %>;<%- elsif f.is_a?(Herb::Template::ElementSourceField) -%>Ljava/lang/String;<%- elsif f.is_a?(Herb::Template::LocationField) -%>Lorg/herb/Location;<%- elsif f.is_a?(Herb::Template::PrismSerializedField) || f.is_a?(Herb::Template::PrismNodeField) -%>[B<%- end -%><%- end -%><%- end -%>)V";
|
|
70
|
+
jmethodID constructor = (*env)->GetMethodID(env, nodeClass, "<init>", constructor_signature);
|
|
71
71
|
if (!constructor) { return NULL; }
|
|
72
72
|
|
|
73
73
|
jobject result = (*env)->NewObject(env, nodeClass, constructor, type, location, errors<%- node.fields.each do |field| -%><%- unless field.is_a?(Herb::Template::AnalyzedRubyField) || field.is_a?(Herb::Template::PrismContextField) -%>, <%= field.name %><%- end -%><%- end -%>);
|
|
@@ -77,20 +77,20 @@ jobject <%= node.name %>FromCStruct(JNIEnv* env, <%= node.struct_type %>* <%= no
|
|
|
77
77
|
|
|
78
78
|
<%- end -%>
|
|
79
79
|
|
|
80
|
-
jobject NodeFromCStruct(JNIEnv* env, AST_NODE_T* node) {
|
|
80
|
+
jobject NodeFromCStruct(JNIEnv* env, AST_NODE_T* node, const parser_options_T* options) {
|
|
81
81
|
if (!node) { return NULL; }
|
|
82
82
|
|
|
83
83
|
switch (node->type) {
|
|
84
84
|
<%- nodes.each do |node| -%>
|
|
85
85
|
case <%= node.type %>:
|
|
86
|
-
return <%= node.name %>FromCStruct(env, (<%= node.struct_type %>*) node);
|
|
86
|
+
return <%= node.name %>FromCStruct(env, (<%= node.struct_type %>*) node, options);
|
|
87
87
|
<%- end -%>
|
|
88
88
|
default:
|
|
89
89
|
return NULL;
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
jobject NodesArrayFromCArray(JNIEnv* env, hb_array_T* array) {
|
|
93
|
+
jobject NodesArrayFromCArray(JNIEnv* env, hb_array_T* array, const parser_options_T* options) {
|
|
94
94
|
jclass arrayListClass = (*env)->FindClass(env, "java/util/ArrayList");
|
|
95
95
|
jmethodID arrayListConstructor = (*env)->GetMethodID(env, arrayListClass, "<init>", "(I)V");
|
|
96
96
|
jmethodID addMethod = (*env)->GetMethodID(env, arrayListClass, "add", "(Ljava/lang/Object;)Z");
|
|
@@ -105,7 +105,7 @@ jobject NodesArrayFromCArray(JNIEnv* env, hb_array_T* array) {
|
|
|
105
105
|
AST_NODE_T* child_node = (AST_NODE_T*) hb_array_get(array, i);
|
|
106
106
|
|
|
107
107
|
if (child_node) {
|
|
108
|
-
jobject nodeObj = NodeFromCStruct(env, child_node);
|
|
108
|
+
jobject nodeObj = NodeFromCStruct(env, child_node, options);
|
|
109
109
|
(*env)->CallBooleanMethod(env, javaList, addMethod, nodeObj);
|
|
110
110
|
}
|
|
111
111
|
}
|
|
@@ -113,9 +113,13 @@ jobject NodesArrayFromCArray(JNIEnv* env, hb_array_T* array) {
|
|
|
113
113
|
return javaList;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
+
jobject CreateASTNode(JNIEnv* env, AST_NODE_T* node, const parser_options_T* options) {
|
|
117
|
+
return NodeFromCStruct(env, node, options);
|
|
118
|
+
}
|
|
119
|
+
|
|
116
120
|
<%- nodes.each do |node| -%>
|
|
117
|
-
jobject Create<%= node.name %>(JNIEnv* env, <%= node.struct_type %>* <%= node.human
|
|
118
|
-
return <%= node.name %>FromCStruct(env, <%= node.human
|
|
121
|
+
jobject Create<%= node.name %>(JNIEnv* env, <%= node.struct_type %>* <%= node.human %>, const parser_options_T* options) {
|
|
122
|
+
return <%= node.name %>FromCStruct(env, <%= node.human %>, options);
|
|
119
123
|
}
|
|
120
124
|
|
|
121
125
|
<%- end -%>
|
data/templates/java/nodes.h.erb
CHANGED
|
@@ -4,17 +4,18 @@
|
|
|
4
4
|
#include <jni.h>
|
|
5
5
|
|
|
6
6
|
#include "../../src/include/ast/ast_nodes.h"
|
|
7
|
+
#include "../../src/include/parser/parser.h"
|
|
7
8
|
|
|
8
9
|
#ifdef __cplusplus
|
|
9
10
|
extern "C" {
|
|
10
11
|
#endif
|
|
11
12
|
|
|
12
13
|
<%- nodes.each do |node| -%>
|
|
13
|
-
jobject Create<%= node.name %>(JNIEnv* env, <%= node.struct_type %>* node);
|
|
14
|
+
jobject Create<%= node.name %>(JNIEnv* env, <%= node.struct_type %>* node, const parser_options_T* options);
|
|
14
15
|
<%- end -%>
|
|
15
16
|
|
|
16
17
|
jobject CreateErrorNode(JNIEnv* env, AST_NODE_T* error_node);
|
|
17
|
-
jobject CreateASTNode(JNIEnv* env, AST_NODE_T* node);
|
|
18
|
+
jobject CreateASTNode(JNIEnv* env, AST_NODE_T* node, const parser_options_T* options);
|
|
18
19
|
|
|
19
20
|
#ifdef __cplusplus
|
|
20
21
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
package org.herb;
|
|
2
|
+
|
|
3
|
+
public class ParserOptions {
|
|
4
|
+
<%- parser_options.fields_for(:java).each do |field| -%>
|
|
5
|
+
private <%= field.java_type %> <%= field.camel_case %> = <%= field.java_default %>;
|
|
6
|
+
<%- end -%>
|
|
7
|
+
|
|
8
|
+
public ParserOptions() {}
|
|
9
|
+
|
|
10
|
+
<%- parser_options.fields_for(:java).each do |field| -%>
|
|
11
|
+
public ParserOptions <%= field.camel_case %>(<%= field.java_type %> value) {
|
|
12
|
+
this.<%= field.camel_case %> = value;
|
|
13
|
+
return this;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public <%= field.java_type %> <%= field.java_getter %>() {
|
|
17
|
+
return <%= field.camel_case %>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
<%- end -%>
|
|
21
|
+
public static ParserOptions create() {
|
|
22
|
+
return new ParserOptions();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -5,34 +5,6 @@ import java.util.LinkedHashMap;
|
|
|
5
5
|
import java.util.List;
|
|
6
6
|
import java.util.Map;
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* Type enum for all supported Action View tag helpers.
|
|
10
|
-
*/
|
|
11
|
-
public enum HelperType {
|
|
12
|
-
<%- helpers.each_with_index do |helper, index| -%>
|
|
13
|
-
<%= helper.constant_name %>("<%= helper.name %>")<%= index < helpers.size - 1 ? "," : ";" %>
|
|
14
|
-
<%- end -%>
|
|
15
|
-
|
|
16
|
-
private final String name;
|
|
17
|
-
|
|
18
|
-
HelperType(String name) {
|
|
19
|
-
this.name = name;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
public String getName() {
|
|
23
|
-
return name;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
public static HelperType fromName(String name) {
|
|
27
|
-
for (HelperType type : values()) {
|
|
28
|
-
if (type.name.equals(name)) {
|
|
29
|
-
return type;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
8
|
/**
|
|
37
9
|
* Argument metadata for a tag helper.
|
|
38
10
|
*/
|
|
@@ -86,6 +58,28 @@ class HelperOption {
|
|
|
86
58
|
public String getDescription() { return description; }
|
|
87
59
|
}
|
|
88
60
|
|
|
61
|
+
class HelperBlockArgument {
|
|
62
|
+
private final String name;
|
|
63
|
+
private final int position;
|
|
64
|
+
private final String type;
|
|
65
|
+
private final boolean optional;
|
|
66
|
+
private final String description;
|
|
67
|
+
|
|
68
|
+
HelperBlockArgument(String name, int position, String type, boolean optional, String description) {
|
|
69
|
+
this.name = name;
|
|
70
|
+
this.position = position;
|
|
71
|
+
this.type = type;
|
|
72
|
+
this.optional = optional;
|
|
73
|
+
this.description = description;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public String getName() { return name; }
|
|
77
|
+
public int getPosition() { return position; }
|
|
78
|
+
public String getType() { return type; }
|
|
79
|
+
public boolean isOptional() { return optional; }
|
|
80
|
+
public String getDescription() { return description; }
|
|
81
|
+
}
|
|
82
|
+
|
|
89
83
|
/**
|
|
90
84
|
* Implicit attribute metadata for a tag helper.
|
|
91
85
|
*/
|
|
@@ -108,6 +102,31 @@ class HelperImplicitAttribute {
|
|
|
108
102
|
public String getWrapper() { return wrapper; }
|
|
109
103
|
}
|
|
110
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Content metadata describing where a helper takes its rendered content from.
|
|
107
|
+
*/
|
|
108
|
+
class HelperContent {
|
|
109
|
+
private final String source;
|
|
110
|
+
private final Integer argPosition;
|
|
111
|
+
private final boolean skipIfHash;
|
|
112
|
+
private final boolean toSSuffixWhenSingle;
|
|
113
|
+
private final Integer positionalArgumentsWithBlock;
|
|
114
|
+
|
|
115
|
+
HelperContent(String source, Integer argPosition, boolean skipIfHash, boolean toSSuffixWhenSingle, Integer positionalArgumentsWithBlock) {
|
|
116
|
+
this.source = source;
|
|
117
|
+
this.argPosition = argPosition;
|
|
118
|
+
this.skipIfHash = skipIfHash;
|
|
119
|
+
this.toSSuffixWhenSingle = toSSuffixWhenSingle;
|
|
120
|
+
this.positionalArgumentsWithBlock = positionalArgumentsWithBlock;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
public String getSource() { return source; }
|
|
124
|
+
public Integer getArgPosition() { return argPosition; }
|
|
125
|
+
public boolean skipIfHash() { return skipIfHash; }
|
|
126
|
+
public boolean toSSuffixWhenSingle() { return toSSuffixWhenSingle; }
|
|
127
|
+
public Integer getPositionalArgumentsWithBlock() { return positionalArgumentsWithBlock; }
|
|
128
|
+
}
|
|
129
|
+
|
|
111
130
|
/**
|
|
112
131
|
* Registry entry containing all metadata for a single tag helper.
|
|
113
132
|
*/
|
|
@@ -118,6 +137,7 @@ class HelperEntry {
|
|
|
118
137
|
private final String gem;
|
|
119
138
|
private final String output;
|
|
120
139
|
private final String visibility;
|
|
140
|
+
private final String receiver;
|
|
121
141
|
private final String tagName;
|
|
122
142
|
private final boolean isVoid;
|
|
123
143
|
private final boolean supportsBlock;
|
|
@@ -128,16 +148,19 @@ class HelperEntry {
|
|
|
128
148
|
private final String signature;
|
|
129
149
|
private final String documentationUrl;
|
|
130
150
|
private final HelperImplicitAttribute implicitAttribute;
|
|
151
|
+
private final HelperContent content;
|
|
131
152
|
private final List<HelperArgument> arguments;
|
|
132
153
|
private final List<HelperOption> options;
|
|
154
|
+
private final List<HelperBlockArgument> blockArguments;
|
|
133
155
|
private final List<String> specialBehaviors;
|
|
134
156
|
private final List<String> aliases;
|
|
135
157
|
|
|
136
158
|
HelperEntry(
|
|
137
|
-
String name, HelperType type, String source, String gem, String output, String visibility, String tagName,
|
|
159
|
+
String name, HelperType type, String source, String gem, String output, String visibility, String receiver, String tagName,
|
|
138
160
|
boolean isVoid, boolean supportsBlock, boolean preferredForTag, boolean supported, String detectStyle, String description,
|
|
139
|
-
String signature, String documentationUrl, HelperImplicitAttribute implicitAttribute,
|
|
140
|
-
List<HelperArgument> arguments, List<HelperOption> options, List<
|
|
161
|
+
String signature, String documentationUrl, HelperImplicitAttribute implicitAttribute, HelperContent content,
|
|
162
|
+
List<HelperArgument> arguments, List<HelperOption> options, List<HelperBlockArgument> blockArguments,
|
|
163
|
+
List<String> specialBehaviors, List<String> aliases
|
|
141
164
|
) {
|
|
142
165
|
this.name = name;
|
|
143
166
|
this.type = type;
|
|
@@ -145,6 +168,7 @@ class HelperEntry {
|
|
|
145
168
|
this.gem = gem;
|
|
146
169
|
this.output = output;
|
|
147
170
|
this.visibility = visibility;
|
|
171
|
+
this.receiver = receiver;
|
|
148
172
|
this.tagName = tagName;
|
|
149
173
|
this.isVoid = isVoid;
|
|
150
174
|
this.supportsBlock = supportsBlock;
|
|
@@ -155,8 +179,10 @@ class HelperEntry {
|
|
|
155
179
|
this.signature = signature;
|
|
156
180
|
this.documentationUrl = documentationUrl;
|
|
157
181
|
this.implicitAttribute = implicitAttribute;
|
|
182
|
+
this.content = content;
|
|
158
183
|
this.arguments = arguments;
|
|
159
184
|
this.options = options;
|
|
185
|
+
this.blockArguments = blockArguments;
|
|
160
186
|
this.specialBehaviors = specialBehaviors;
|
|
161
187
|
this.aliases = aliases;
|
|
162
188
|
}
|
|
@@ -167,6 +193,7 @@ class HelperEntry {
|
|
|
167
193
|
public String getGem() { return gem; }
|
|
168
194
|
public String getOutput() { return output; }
|
|
169
195
|
public String getVisibility() { return visibility; }
|
|
196
|
+
public String getReceiver() { return receiver; }
|
|
170
197
|
public String getTagName() { return tagName; }
|
|
171
198
|
public boolean isVoid() { return isVoid; }
|
|
172
199
|
public boolean supportsBlock() { return supportsBlock; }
|
|
@@ -177,8 +204,10 @@ class HelperEntry {
|
|
|
177
204
|
public String getSignature() { return signature; }
|
|
178
205
|
public String getDocumentationUrl() { return documentationUrl; }
|
|
179
206
|
public HelperImplicitAttribute getImplicitAttribute() { return implicitAttribute; }
|
|
207
|
+
public HelperContent getContent() { return content; }
|
|
180
208
|
public List<HelperArgument> getArguments() { return arguments; }
|
|
181
209
|
public List<HelperOption> getOptions() { return options; }
|
|
210
|
+
public List<HelperBlockArgument> getBlockArguments() { return blockArguments; }
|
|
182
211
|
public List<String> getSpecialBehaviors() { return specialBehaviors; }
|
|
183
212
|
public List<String> getAliases() { return aliases; }
|
|
184
213
|
}
|
|
@@ -210,6 +239,7 @@ public final class HelperRegistry {
|
|
|
210
239
|
"<%= helper.gem %>",
|
|
211
240
|
"<%= helper.output %>",
|
|
212
241
|
"<%= helper.visibility %>",
|
|
242
|
+
"<%= helper.receiver %>",
|
|
213
243
|
<%= helper.tag_name ? "\"#{helper.tag_name}\"" : "null" %>,
|
|
214
244
|
<%= helper.void? %>,
|
|
215
245
|
<%= helper.supports_block %>,
|
|
@@ -223,9 +253,15 @@ public final class HelperRegistry {
|
|
|
223
253
|
new HelperImplicitAttribute("<%= helper.implicit_attribute.name %>", "<%= helper.implicit_attribute.source %>", <%= helper.implicit_attribute.source_with_block ? "\"#{helper.implicit_attribute.source_with_block}\"" : "null" %>, "<%= helper.implicit_attribute.wrapper %>"),
|
|
224
254
|
<%- else -%>
|
|
225
255
|
null,
|
|
256
|
+
<%- end -%>
|
|
257
|
+
<%- if helper.content? -%>
|
|
258
|
+
new HelperContent("<%= helper.content.source %>", <%= helper.content.arg_position || "null" %>, <%= helper.content.skip_if_hash %>, <%= helper.content.to_s_suffix_when_single %>, <%= helper.content.positional_arguments_with_block || "null" %>),
|
|
259
|
+
<%- else -%>
|
|
260
|
+
null,
|
|
226
261
|
<%- end -%>
|
|
227
262
|
List.of(<%= helper.arguments.map { |arg| "new HelperArgument(\"#{arg.name}\", #{arg.position}, \"#{arg.type_display}\", #{arg.optional}, #{arg.default ? "\"#{arg.escaped_default}\"" : "null"}, #{arg.splat}, \"#{arg.escaped_description}\")" }.join(", ") %>),
|
|
228
263
|
List.of(<%= helper.options.map { |opt| "new HelperOption(\"#{opt.name}\", \"#{opt.type_display}\", #{opt.maps_to ? "\"#{opt.maps_to}\"" : "null"}, \"#{opt.escaped_description}\")" }.join(", ") %>),
|
|
264
|
+
List.of(<%= helper.block_arguments.map { |arg| "new HelperBlockArgument(\"#{arg.name}\", #{arg.position}, \"#{arg.type_display}\", #{arg.optional}, \"#{arg.escaped_description}\")" }.join(", ") %>),
|
|
229
265
|
List.of(<%= helper.special_behaviors.map { |b| "\"#{b}\"" }.join(", ") %>),
|
|
230
266
|
List.of(<%= helper.aliases.map { |a| "\"#{a}\"" }.join(", ") %>)
|
|
231
267
|
);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
package org.herb.ast;
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Type enum for all supported Action View tag helpers.
|
|
5
|
+
*/
|
|
6
|
+
public enum HelperType {
|
|
7
|
+
<%- helpers.each_with_index do |helper, index| -%>
|
|
8
|
+
<%= helper.constant_name %>("<%= helper.name %>")<%= index < helpers.size - 1 ? "," : ";" %>
|
|
9
|
+
<%- end -%>
|
|
10
|
+
|
|
11
|
+
private final String name;
|
|
12
|
+
|
|
13
|
+
HelperType(String name) {
|
|
14
|
+
this.name = name;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public String getName() {
|
|
18
|
+
return name;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public static HelperType fromName(String name) {
|
|
22
|
+
for (HelperType type : values()) {
|
|
23
|
+
if (type.name.equals(name)) {
|
|
24
|
+
return type;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -162,7 +162,7 @@ class <%= node.name %> extends BaseNode {
|
|
|
162
162
|
public String inspect(String source) {
|
|
163
163
|
StringBuilder output = new StringBuilder();
|
|
164
164
|
|
|
165
|
-
output.append("@ <%= node.name %> ").append(
|
|
165
|
+
output.append("@ <%= node.name %> ").append("(location: " + (location != null ? location.toString() : "∅") + ")").append("\n");
|
|
166
166
|
<%- if node.fields.any? -%>
|
|
167
167
|
output.append(inspectErrors("│ "));
|
|
168
168
|
<%- else -%>
|
|
@@ -250,10 +250,16 @@ class <%= node.name %> extends BaseNode {
|
|
|
250
250
|
|
|
251
251
|
@Override
|
|
252
252
|
public List<Node> recursiveErrors() {
|
|
253
|
-
List<Node>
|
|
253
|
+
List<Node> accumulator = new ArrayList<>();
|
|
254
|
+
collectErrors(accumulator);
|
|
254
255
|
|
|
256
|
+
return accumulator;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
@Override
|
|
260
|
+
protected void collectErrors(List<Node> accumulator) {
|
|
255
261
|
if (errors != null) {
|
|
256
|
-
|
|
262
|
+
accumulator.addAll(errors);
|
|
257
263
|
}
|
|
258
264
|
|
|
259
265
|
<%- if node.fields.any? -%>
|
|
@@ -263,21 +269,19 @@ class <%= node.name %> extends BaseNode {
|
|
|
263
269
|
if (<%= field.name %> != null) {
|
|
264
270
|
for (Node child : <%= field.name %>) {
|
|
265
271
|
if (child != null) {
|
|
266
|
-
|
|
272
|
+
((BaseNode) child).collectErrors(accumulator);
|
|
267
273
|
}
|
|
268
274
|
}
|
|
269
275
|
}
|
|
270
276
|
|
|
271
277
|
<%- elsif field.is_a?(Herb::Template::NodeField) || field.is_a?(Herb::Template::BorrowedNodeField) -%>
|
|
272
278
|
if (<%= field.name %> != null) {
|
|
273
|
-
|
|
279
|
+
((BaseNode) <%= field.name %>).collectErrors(accumulator);
|
|
274
280
|
}
|
|
275
281
|
|
|
276
282
|
<%- end -%>
|
|
277
283
|
<%- end -%>
|
|
278
284
|
<%- end -%>
|
|
279
|
-
|
|
280
|
-
return result;
|
|
281
285
|
}
|
|
282
286
|
|
|
283
287
|
@Override
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#include "parser_options_helpers.h"
|
|
2
|
+
|
|
3
|
+
void herb_extract_parser_options(JNIEnv* env, jobject options, parser_options_T* parser_options) {
|
|
4
|
+
if (options == NULL) { return; }
|
|
5
|
+
|
|
6
|
+
jclass optionsClass = (*env)->GetObjectClass(env, options);
|
|
7
|
+
<%- parser_options.extractable_fields_for(:java).each do |field| -%>
|
|
8
|
+
|
|
9
|
+
<%- if field.boolean? -%>
|
|
10
|
+
{
|
|
11
|
+
jmethodID method = (*env)->GetMethodID(env, optionsClass, "<%= field.java_getter %>", "<%= field.java_jni_signature %>");
|
|
12
|
+
|
|
13
|
+
if (method != NULL) {
|
|
14
|
+
jboolean value = (*env)->CallBooleanMethod(env, options, method);
|
|
15
|
+
parser_options-><%= field.c_name %> = (value == JNI_TRUE);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
<%- elsif field.nullable? -%>
|
|
19
|
+
{
|
|
20
|
+
jmethodID method = (*env)->GetMethodID(env, optionsClass, "<%= field.java_getter %>", "<%= field.java_jni_signature %>");
|
|
21
|
+
|
|
22
|
+
if (method != NULL) {
|
|
23
|
+
jobject value = (*env)->CallObjectMethod(env, options, method);
|
|
24
|
+
|
|
25
|
+
if (value == NULL) {
|
|
26
|
+
parser_options-><%= field.c_name %> = <%= field.null_sentinel %>;
|
|
27
|
+
} else {
|
|
28
|
+
jclass integerClass = (*env)->FindClass(env, "java/lang/Integer");
|
|
29
|
+
jmethodID intValue = (*env)->GetMethodID(env, integerClass, "intValue", "()I");
|
|
30
|
+
parser_options-><%= field.c_name %> = (uint32_t) (*env)->CallIntMethod(env, value, intValue);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
<%- else -%>
|
|
35
|
+
{
|
|
36
|
+
jmethodID method = (*env)->GetMethodID(env, optionsClass, "<%= field.java_getter %>", "<%= field.java_jni_signature %>");
|
|
37
|
+
|
|
38
|
+
if (method != NULL) {
|
|
39
|
+
jint value = (*env)->CallIntMethod(env, options, method);
|
|
40
|
+
parser_options-><%= field.c_name %> = (uint32_t) value;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
<%- end -%>
|
|
44
|
+
<%- end -%>
|
|
45
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#ifndef HERB_JAVA_PARSER_OPTIONS_HELPERS_H
|
|
2
|
+
#define HERB_JAVA_PARSER_OPTIONS_HELPERS_H
|
|
3
|
+
|
|
4
|
+
#include "../src/include/parser/parser_options.h"
|
|
5
|
+
|
|
6
|
+
#include <jni.h>
|
|
7
|
+
|
|
8
|
+
void herb_extract_parser_options(JNIEnv* env, jobject options, parser_options_T* parser_options);
|
|
9
|
+
|
|
10
|
+
#endif
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export type StateDefaultKind =
|
|
2
|
+
<%- state_kinds.each do |kind| -%>
|
|
3
|
+
| <%= kind.name.inspect %>
|
|
4
|
+
<%- end -%>
|
|
5
|
+
|
|
6
|
+
export type StateValueKind =
|
|
7
|
+
<%- state_kinds.select(&:value?).each do |kind| -%>
|
|
8
|
+
| <%= kind.name.inspect %>
|
|
9
|
+
<%- end -%>
|
|
10
|
+
|
|
11
|
+
export const STATE_DEFAULT_KINDS: readonly StateDefaultKind[] = [<%= state_kinds.map { |kind| kind.name.inspect }.join(", ") %>]
|
|
12
|
+
|
|
13
|
+
export const LITERAL_STATE_KINDS: ReadonlySet<string> = new Set([<%= state_kinds.select(&:literal?).map { |kind| kind.name.inspect }.join(", ") %>])
|
|
14
|
+
|
|
15
|
+
export const UNKNOWN_STATE_KINDS: ReadonlySet<string> = new Set([<%= state_kinds.select(&:unknown?).map { |kind| kind.name.inspect }.join(", ") %>])
|
|
16
|
+
|
|
17
|
+
export const FALSY_STATE_KINDS: ReadonlySet<string> = new Set([<%= state_kinds.select(&:falsy?).map { |kind| kind.name.inspect }.join(", ") %>])
|
|
18
|
+
|
|
19
|
+
export const NILABLE_STATE_KINDS: ReadonlySet<string> = new Set([<%= state_kinds.select(&:nilable?).map { |kind| kind.name.inspect }.join(", ") %>])
|
|
20
|
+
|
|
21
|
+
export const PRISM_LITERAL_KINDS: Record<string, StateDefaultKind> = {
|
|
22
|
+
<%- state_kinds.select(&:literal?).each do |kind| -%>
|
|
23
|
+
<%- kind.prism_nodes.each do |node| -%>
|
|
24
|
+
<%= node.inspect %>: <%= kind.name.inspect %>,
|
|
25
|
+
<%- end -%>
|
|
26
|
+
<%- end -%>
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const STATE_KIND_ARTICLES: Record<string, string> = {
|
|
30
|
+
<%- state_kinds.each do |kind| -%>
|
|
31
|
+
<%= kind.name.inspect %>: <%= kind.article.inspect %>,
|
|
32
|
+
<%- end -%>
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function stateKindArticle(kind: string): string {
|
|
36
|
+
const known = STATE_KIND_ARTICLES[kind]
|
|
37
|
+
|
|
38
|
+
if (known) {
|
|
39
|
+
return known
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const spelled = kind.charAt(0).toUpperCase() + kind.slice(1)
|
|
43
|
+
|
|
44
|
+
if (spelled === "") {
|
|
45
|
+
return "a value"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return /^[AEIOU]/.test(spelled) ? `an ${spelled}` : `a ${spelled}`
|
|
49
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const MIRRORED_COMPARISONS: Record<string, string> = {
|
|
2
|
+
<%- state_operators.select(&:mirrored).each do |operator| -%>
|
|
3
|
+
<%= operator.operator.inspect %>: <%= operator.mirrored.inspect %>,
|
|
4
|
+
<%- end -%>
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export const NEGATED_COMPARISONS: Record<string, string> = {
|
|
8
|
+
<%- state_operators.each do |operator| -%>
|
|
9
|
+
<%= operator.operator.inspect %>: <%= operator.negated.inspect %>,
|
|
10
|
+
<%- end -%>
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const ORDERED_COMPARISONS: ReadonlySet<string> = new Set([<%= state_operators.select(&:ordered?).map { |operator| operator.operator.inspect }.join(", ") %>])
|
|
14
|
+
|
|
15
|
+
export const COMPARISON_OPERATORS: ReadonlySet<string> = new Set([<%= state_operators.map { |operator| operator.operator.inspect }.join(", ") %>])
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface StatePredicate {
|
|
2
|
+
readonly comparand?: string
|
|
3
|
+
readonly operator?: string
|
|
4
|
+
readonly kinds: string[] | null
|
|
5
|
+
readonly only: string
|
|
6
|
+
readonly rewrite?: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const STATE_PREDICATES: Record<string, StatePredicate> = {
|
|
10
|
+
<%- state_predicates.each do |predicate| -%>
|
|
11
|
+
<%= predicate.literal(predicate.name) %>: {
|
|
12
|
+
<%- if predicate.comparand -%>
|
|
13
|
+
comparand: <%= predicate.literal(predicate.comparand) %>,
|
|
14
|
+
<%- end -%>
|
|
15
|
+
<%- if predicate.operator -%>
|
|
16
|
+
operator: <%= predicate.literal(predicate.operator) %>,
|
|
17
|
+
<%- end -%>
|
|
18
|
+
kinds: <%= predicate.typescript_kinds %>,
|
|
19
|
+
only: <%= predicate.literal(predicate.only) %>,
|
|
20
|
+
<%- if predicate.rewrite -%>
|
|
21
|
+
rewrite: <%= predicate.literal(predicate.rewrite) %>,
|
|
22
|
+
<%- end -%>
|
|
23
|
+
},
|
|
24
|
+
<%- end -%>
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const STATE_PREDICATE_NAMES = Object.keys(STATE_PREDICATES)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface StateTransform {
|
|
2
|
+
readonly operation: string
|
|
3
|
+
readonly kinds: string[] | null
|
|
4
|
+
readonly returns: string
|
|
5
|
+
readonly only: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const STATE_TRANSFORMS: Record<string, StateTransform> = {
|
|
9
|
+
<%- state_transforms.each do |transform| -%>
|
|
10
|
+
<%= transform.name.inspect %>: {
|
|
11
|
+
operation: <%= transform.operation.inspect %>,
|
|
12
|
+
kinds: <%= transform.typescript_kinds %>,
|
|
13
|
+
returns: <%= transform.returns.inspect %>,
|
|
14
|
+
only: <%= transform.only.inspect %>,
|
|
15
|
+
},
|
|
16
|
+
<%- end -%>
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const STATE_TRANSFORM_NAMES = Object.keys(STATE_TRANSFORMS)
|