diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000000..83f43e36661
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,902 @@
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 4
+indent_style = space
+insert_final_newline = false
+max_line_length = 160
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_formatter_off_tag = @formatter:off
+ij_formatter_on_tag = @formatter:on
+ij_formatter_tags_enabled = false
+ij_smart_tabs = false
+ij_visual_guides = none
+ij_wrap_on_typing = false
+
+[*.blade.php]
+ij_blade_keep_indents_on_empty_lines = false
+
+[*.css]
+ij_css_align_closing_brace_with_properties = false
+ij_css_blank_lines_around_nested_selector = 1
+ij_css_blank_lines_between_blocks = 1
+ij_css_block_comment_add_space = false
+ij_css_brace_placement = end_of_line
+ij_css_enforce_quotes_on_format = false
+ij_css_hex_color_long_format = false
+ij_css_hex_color_lower_case = false
+ij_css_hex_color_short_format = false
+ij_css_hex_color_upper_case = false
+ij_css_keep_blank_lines_in_code = 2
+ij_css_keep_indents_on_empty_lines = false
+ij_css_keep_single_line_blocks = false
+ij_css_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
+ij_css_space_after_colon = true
+ij_css_space_before_opening_brace = true
+ij_css_use_double_quotes = true
+ij_css_value_alignment = do_not_align
+
+[*.feature]
+indent_size = 2
+ij_gherkin_keep_indents_on_empty_lines = false
+
+[*.haml]
+indent_size = 2
+ij_haml_keep_indents_on_empty_lines = false
+
+[*.less]
+indent_size = 2
+ij_less_align_closing_brace_with_properties = false
+ij_less_blank_lines_around_nested_selector = 1
+ij_less_blank_lines_between_blocks = 1
+ij_less_block_comment_add_space = false
+ij_less_brace_placement = 0
+ij_less_enforce_quotes_on_format = false
+ij_less_hex_color_long_format = false
+ij_less_hex_color_lower_case = false
+ij_less_hex_color_short_format = false
+ij_less_hex_color_upper_case = false
+ij_less_keep_blank_lines_in_code = 2
+ij_less_keep_indents_on_empty_lines = false
+ij_less_keep_single_line_blocks = false
+ij_less_line_comment_add_space = false
+ij_less_line_comment_at_first_column = false
+ij_less_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
+ij_less_space_after_colon = true
+ij_less_space_before_opening_brace = true
+ij_less_use_double_quotes = true
+ij_less_value_alignment = 0
+
+[*.sass]
+indent_size = 2
+ij_sass_align_closing_brace_with_properties = false
+ij_sass_blank_lines_around_nested_selector = 1
+ij_sass_blank_lines_between_blocks = 1
+ij_sass_brace_placement = 0
+ij_sass_enforce_quotes_on_format = false
+ij_sass_hex_color_long_format = false
+ij_sass_hex_color_lower_case = false
+ij_sass_hex_color_short_format = false
+ij_sass_hex_color_upper_case = false
+ij_sass_keep_blank_lines_in_code = 2
+ij_sass_keep_indents_on_empty_lines = false
+ij_sass_keep_single_line_blocks = false
+ij_sass_line_comment_add_space = false
+ij_sass_line_comment_at_first_column = false
+ij_sass_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
+ij_sass_space_after_colon = true
+ij_sass_space_before_opening_brace = true
+ij_sass_use_double_quotes = true
+ij_sass_value_alignment = 0
+
+[*.scss]
+indent_size = 2
+ij_scss_align_closing_brace_with_properties = false
+ij_scss_blank_lines_around_nested_selector = 1
+ij_scss_blank_lines_between_blocks = 1
+ij_scss_block_comment_add_space = false
+ij_scss_brace_placement = 0
+ij_scss_enforce_quotes_on_format = false
+ij_scss_hex_color_long_format = false
+ij_scss_hex_color_lower_case = false
+ij_scss_hex_color_short_format = false
+ij_scss_hex_color_upper_case = false
+ij_scss_keep_blank_lines_in_code = 2
+ij_scss_keep_indents_on_empty_lines = false
+ij_scss_keep_single_line_blocks = false
+ij_scss_line_comment_add_space = false
+ij_scss_line_comment_at_first_column = false
+ij_scss_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
+ij_scss_space_after_colon = true
+ij_scss_space_before_opening_brace = true
+ij_scss_use_double_quotes = true
+ij_scss_value_alignment = 0
+
+[*.twig]
+ij_twig_keep_indents_on_empty_lines = false
+ij_twig_spaces_inside_comments_delimiters = true
+ij_twig_spaces_inside_delimiters = true
+ij_twig_spaces_inside_variable_delimiters = true
+
+[*.vue]
+indent_size = 2
+tab_width = 2
+ij_continuation_indent_size = 4
+ij_vue_indent_children_of_top_level = template
+ij_vue_interpolation_new_line_after_start_delimiter = true
+ij_vue_interpolation_new_line_before_end_delimiter = true
+ij_vue_interpolation_wrap = off
+ij_vue_keep_indents_on_empty_lines = false
+ij_vue_spaces_within_interpolation_expressions = true
+
+[.editorconfig]
+ij_editorconfig_align_group_field_declarations = false
+ij_editorconfig_space_after_colon = false
+ij_editorconfig_space_after_comma = true
+ij_editorconfig_space_before_colon = false
+ij_editorconfig_space_before_comma = false
+ij_editorconfig_spaces_around_assignment_operators = true
+
+[{*.ant,*.fxml,*.jhm,*.jnlp,*.jrxml,*.rng,*.tld,*.wsdl,*.xml,*.xsd,*.xsl,*.xslt,*.xul,phpunit.xml.dist}]
+ij_xml_align_attributes = true
+ij_xml_align_text = false
+ij_xml_attribute_wrap = normal
+ij_xml_block_comment_add_space = false
+ij_xml_block_comment_at_first_column = true
+ij_xml_keep_blank_lines = 2
+ij_xml_keep_indents_on_empty_lines = false
+ij_xml_keep_line_breaks = true
+ij_xml_keep_line_breaks_in_text = true
+ij_xml_keep_whitespaces = false
+ij_xml_keep_whitespaces_around_cdata = preserve
+ij_xml_keep_whitespaces_inside_cdata = false
+ij_xml_line_comment_at_first_column = true
+ij_xml_space_after_tag_name = false
+ij_xml_space_around_equals_in_attribute = false
+ij_xml_space_inside_empty_tag = false
+ij_xml_text_wrap = normal
+
+[{*.ats,*.cts,*.mts,*.ts}]
+ij_continuation_indent_size = 4
+ij_typescript_align_imports = false
+ij_typescript_align_multiline_array_initializer_expression = false
+ij_typescript_align_multiline_binary_operation = false
+ij_typescript_align_multiline_chained_methods = false
+ij_typescript_align_multiline_extends_list = false
+ij_typescript_align_multiline_for = true
+ij_typescript_align_multiline_parameters = true
+ij_typescript_align_multiline_parameters_in_calls = false
+ij_typescript_align_multiline_ternary_operation = false
+ij_typescript_align_object_properties = 0
+ij_typescript_align_union_types = false
+ij_typescript_align_var_statements = 0
+ij_typescript_array_initializer_new_line_after_left_brace = false
+ij_typescript_array_initializer_right_brace_on_new_line = false
+ij_typescript_array_initializer_wrap = off
+ij_typescript_assignment_wrap = off
+ij_typescript_binary_operation_sign_on_next_line = false
+ij_typescript_binary_operation_wrap = off
+ij_typescript_blacklist_imports = rxjs/Rx,node_modules/**,**/node_modules/**,@angular/material,@angular/material/typings/**
+ij_typescript_blank_lines_after_imports = 1
+ij_typescript_blank_lines_around_class = 1
+ij_typescript_blank_lines_around_field = 0
+ij_typescript_blank_lines_around_field_in_interface = 0
+ij_typescript_blank_lines_around_function = 1
+ij_typescript_blank_lines_around_method = 1
+ij_typescript_blank_lines_around_method_in_interface = 1
+ij_typescript_block_brace_style = end_of_line
+ij_typescript_block_comment_add_space = false
+ij_typescript_block_comment_at_first_column = true
+ij_typescript_call_parameters_new_line_after_left_paren = false
+ij_typescript_call_parameters_right_paren_on_new_line = false
+ij_typescript_call_parameters_wrap = off
+ij_typescript_catch_on_new_line = false
+ij_typescript_chained_call_dot_on_new_line = true
+ij_typescript_class_brace_style = end_of_line
+ij_typescript_comma_on_new_line = false
+ij_typescript_do_while_brace_force = never
+ij_typescript_else_on_new_line = false
+ij_typescript_enforce_trailing_comma = keep
+ij_typescript_enum_constants_wrap = on_every_item
+ij_typescript_extends_keyword_wrap = off
+ij_typescript_extends_list_wrap = off
+ij_typescript_field_prefix = _
+ij_typescript_file_name_style = relaxed
+ij_typescript_finally_on_new_line = false
+ij_typescript_for_brace_force = never
+ij_typescript_for_statement_new_line_after_left_paren = false
+ij_typescript_for_statement_right_paren_on_new_line = false
+ij_typescript_for_statement_wrap = off
+ij_typescript_force_quote_style = false
+ij_typescript_force_semicolon_style = false
+ij_typescript_function_expression_brace_style = end_of_line
+ij_typescript_if_brace_force = never
+ij_typescript_import_merge_members = global
+ij_typescript_import_prefer_absolute_path = global
+ij_typescript_import_sort_members = true
+ij_typescript_import_sort_module_name = false
+ij_typescript_import_use_node_resolution = true
+ij_typescript_imports_wrap = on_every_item
+ij_typescript_indent_case_from_switch = true
+ij_typescript_indent_chained_calls = true
+ij_typescript_indent_package_children = 0
+ij_typescript_jsdoc_include_types = false
+ij_typescript_jsx_attribute_value = braces
+ij_typescript_keep_blank_lines_in_code = 2
+ij_typescript_keep_first_column_comment = true
+ij_typescript_keep_indents_on_empty_lines = false
+ij_typescript_keep_line_breaks = true
+ij_typescript_keep_simple_blocks_in_one_line = false
+ij_typescript_keep_simple_methods_in_one_line = false
+ij_typescript_line_comment_add_space = true
+ij_typescript_line_comment_at_first_column = false
+ij_typescript_method_brace_style = end_of_line
+ij_typescript_method_call_chain_wrap = off
+ij_typescript_method_parameters_new_line_after_left_paren = false
+ij_typescript_method_parameters_right_paren_on_new_line = false
+ij_typescript_method_parameters_wrap = off
+ij_typescript_object_literal_wrap = on_every_item
+ij_typescript_parentheses_expression_new_line_after_left_paren = false
+ij_typescript_parentheses_expression_right_paren_on_new_line = false
+ij_typescript_place_assignment_sign_on_next_line = false
+ij_typescript_prefer_as_type_cast = false
+ij_typescript_prefer_explicit_types_function_expression_returns = false
+ij_typescript_prefer_explicit_types_function_returns = false
+ij_typescript_prefer_explicit_types_vars_fields = false
+ij_typescript_prefer_parameters_wrap = false
+ij_typescript_reformat_c_style_comments = false
+ij_typescript_space_after_colon = true
+ij_typescript_space_after_comma = true
+ij_typescript_space_after_dots_in_rest_parameter = false
+ij_typescript_space_after_generator_mult = true
+ij_typescript_space_after_property_colon = true
+ij_typescript_space_after_quest = true
+ij_typescript_space_after_type_colon = true
+ij_typescript_space_after_unary_not = false
+ij_typescript_space_before_async_arrow_lparen = true
+ij_typescript_space_before_catch_keyword = true
+ij_typescript_space_before_catch_left_brace = true
+ij_typescript_space_before_catch_parentheses = true
+ij_typescript_space_before_class_lbrace = true
+ij_typescript_space_before_class_left_brace = true
+ij_typescript_space_before_colon = true
+ij_typescript_space_before_comma = false
+ij_typescript_space_before_do_left_brace = true
+ij_typescript_space_before_else_keyword = true
+ij_typescript_space_before_else_left_brace = true
+ij_typescript_space_before_finally_keyword = true
+ij_typescript_space_before_finally_left_brace = true
+ij_typescript_space_before_for_left_brace = true
+ij_typescript_space_before_for_parentheses = true
+ij_typescript_space_before_for_semicolon = false
+ij_typescript_space_before_function_left_parenth = true
+ij_typescript_space_before_generator_mult = false
+ij_typescript_space_before_if_left_brace = true
+ij_typescript_space_before_if_parentheses = true
+ij_typescript_space_before_method_call_parentheses = false
+ij_typescript_space_before_method_left_brace = true
+ij_typescript_space_before_method_parentheses = false
+ij_typescript_space_before_property_colon = false
+ij_typescript_space_before_quest = true
+ij_typescript_space_before_switch_left_brace = true
+ij_typescript_space_before_switch_parentheses = true
+ij_typescript_space_before_try_left_brace = true
+ij_typescript_space_before_type_colon = false
+ij_typescript_space_before_unary_not = false
+ij_typescript_space_before_while_keyword = true
+ij_typescript_space_before_while_left_brace = true
+ij_typescript_space_before_while_parentheses = true
+ij_typescript_spaces_around_additive_operators = true
+ij_typescript_spaces_around_arrow_function_operator = true
+ij_typescript_spaces_around_assignment_operators = true
+ij_typescript_spaces_around_bitwise_operators = true
+ij_typescript_spaces_around_equality_operators = true
+ij_typescript_spaces_around_logical_operators = true
+ij_typescript_spaces_around_multiplicative_operators = true
+ij_typescript_spaces_around_relational_operators = true
+ij_typescript_spaces_around_shift_operators = true
+ij_typescript_spaces_around_unary_operator = false
+ij_typescript_spaces_within_array_initializer_brackets = false
+ij_typescript_spaces_within_brackets = false
+ij_typescript_spaces_within_catch_parentheses = false
+ij_typescript_spaces_within_for_parentheses = false
+ij_typescript_spaces_within_if_parentheses = false
+ij_typescript_spaces_within_imports = false
+ij_typescript_spaces_within_interpolation_expressions = false
+ij_typescript_spaces_within_method_call_parentheses = false
+ij_typescript_spaces_within_method_parentheses = false
+ij_typescript_spaces_within_object_literal_braces = false
+ij_typescript_spaces_within_object_type_braces = true
+ij_typescript_spaces_within_parentheses = false
+ij_typescript_spaces_within_switch_parentheses = false
+ij_typescript_spaces_within_type_assertion = false
+ij_typescript_spaces_within_union_types = true
+ij_typescript_spaces_within_while_parentheses = false
+ij_typescript_special_else_if_treatment = true
+ij_typescript_ternary_operation_signs_on_next_line = false
+ij_typescript_ternary_operation_wrap = off
+ij_typescript_union_types_wrap = on_every_item
+ij_typescript_use_chained_calls_group_indents = false
+ij_typescript_use_double_quotes = true
+ij_typescript_use_explicit_js_extension = auto
+ij_typescript_use_path_mapping = always
+ij_typescript_use_public_modifier = false
+ij_typescript_use_semicolon_after_statement = true
+ij_typescript_var_declaration_wrap = normal
+ij_typescript_while_brace_force = never
+ij_typescript_while_on_new_line = false
+ij_typescript_wrap_comments = false
+
+[{*.bash,*.sh,*.zsh}]
+indent_size = 2
+tab_width = 2
+ij_shell_binary_ops_start_line = false
+ij_shell_keep_column_alignment_padding = false
+ij_shell_minify_program = false
+ij_shell_redirect_followed_by_space = false
+ij_shell_switch_cases_indented = false
+ij_shell_use_unix_line_separator = true
+
+[{*.cjs,*.js}]
+ij_continuation_indent_size = 4
+ij_javascript_align_imports = false
+ij_javascript_align_multiline_array_initializer_expression = false
+ij_javascript_align_multiline_binary_operation = false
+ij_javascript_align_multiline_chained_methods = false
+ij_javascript_align_multiline_extends_list = false
+ij_javascript_align_multiline_for = true
+ij_javascript_align_multiline_parameters = true
+ij_javascript_align_multiline_parameters_in_calls = false
+ij_javascript_align_multiline_ternary_operation = false
+ij_javascript_align_object_properties = 0
+ij_javascript_align_union_types = false
+ij_javascript_align_var_statements = 0
+ij_javascript_array_initializer_new_line_after_left_brace = false
+ij_javascript_array_initializer_right_brace_on_new_line = false
+ij_javascript_array_initializer_wrap = off
+ij_javascript_assignment_wrap = off
+ij_javascript_binary_operation_sign_on_next_line = false
+ij_javascript_binary_operation_wrap = off
+ij_javascript_blacklist_imports = rxjs/Rx,node_modules/**,**/node_modules/**,@angular/material,@angular/material/typings/**
+ij_javascript_blank_lines_after_imports = 1
+ij_javascript_blank_lines_around_class = 1
+ij_javascript_blank_lines_around_field = 0
+ij_javascript_blank_lines_around_function = 1
+ij_javascript_blank_lines_around_method = 1
+ij_javascript_block_brace_style = end_of_line
+ij_javascript_block_comment_add_space = false
+ij_javascript_block_comment_at_first_column = true
+ij_javascript_call_parameters_new_line_after_left_paren = false
+ij_javascript_call_parameters_right_paren_on_new_line = false
+ij_javascript_call_parameters_wrap = off
+ij_javascript_catch_on_new_line = false
+ij_javascript_chained_call_dot_on_new_line = true
+ij_javascript_class_brace_style = end_of_line
+ij_javascript_comma_on_new_line = false
+ij_javascript_do_while_brace_force = never
+ij_javascript_else_on_new_line = false
+ij_javascript_enforce_trailing_comma = keep
+ij_javascript_extends_keyword_wrap = off
+ij_javascript_extends_list_wrap = off
+ij_javascript_field_prefix = _
+ij_javascript_file_name_style = relaxed
+ij_javascript_finally_on_new_line = false
+ij_javascript_for_brace_force = never
+ij_javascript_for_statement_new_line_after_left_paren = false
+ij_javascript_for_statement_right_paren_on_new_line = false
+ij_javascript_for_statement_wrap = off
+ij_javascript_force_quote_style = false
+ij_javascript_force_semicolon_style = false
+ij_javascript_function_expression_brace_style = end_of_line
+ij_javascript_if_brace_force = never
+ij_javascript_import_merge_members = global
+ij_javascript_import_prefer_absolute_path = global
+ij_javascript_import_sort_members = true
+ij_javascript_import_sort_module_name = false
+ij_javascript_import_use_node_resolution = true
+ij_javascript_imports_wrap = on_every_item
+ij_javascript_indent_case_from_switch = true
+ij_javascript_indent_chained_calls = true
+ij_javascript_indent_package_children = 0
+ij_javascript_jsx_attribute_value = braces
+ij_javascript_keep_blank_lines_in_code = 2
+ij_javascript_keep_first_column_comment = true
+ij_javascript_keep_indents_on_empty_lines = false
+ij_javascript_keep_line_breaks = true
+ij_javascript_keep_simple_blocks_in_one_line = false
+ij_javascript_keep_simple_methods_in_one_line = false
+ij_javascript_line_comment_add_space = true
+ij_javascript_line_comment_at_first_column = false
+ij_javascript_method_brace_style = end_of_line
+ij_javascript_method_call_chain_wrap = off
+ij_javascript_method_parameters_new_line_after_left_paren = false
+ij_javascript_method_parameters_right_paren_on_new_line = false
+ij_javascript_method_parameters_wrap = off
+ij_javascript_object_literal_wrap = on_every_item
+ij_javascript_parentheses_expression_new_line_after_left_paren = false
+ij_javascript_parentheses_expression_right_paren_on_new_line = false
+ij_javascript_place_assignment_sign_on_next_line = false
+ij_javascript_prefer_as_type_cast = false
+ij_javascript_prefer_explicit_types_function_expression_returns = false
+ij_javascript_prefer_explicit_types_function_returns = false
+ij_javascript_prefer_explicit_types_vars_fields = false
+ij_javascript_prefer_parameters_wrap = false
+ij_javascript_reformat_c_style_comments = false
+ij_javascript_space_after_colon = true
+ij_javascript_space_after_comma = true
+ij_javascript_space_after_dots_in_rest_parameter = false
+ij_javascript_space_after_generator_mult = true
+ij_javascript_space_after_property_colon = true
+ij_javascript_space_after_quest = true
+ij_javascript_space_after_type_colon = true
+ij_javascript_space_after_unary_not = false
+ij_javascript_space_before_async_arrow_lparen = true
+ij_javascript_space_before_catch_keyword = true
+ij_javascript_space_before_catch_left_brace = true
+ij_javascript_space_before_catch_parentheses = true
+ij_javascript_space_before_class_lbrace = true
+ij_javascript_space_before_class_left_brace = true
+ij_javascript_space_before_colon = true
+ij_javascript_space_before_comma = false
+ij_javascript_space_before_do_left_brace = true
+ij_javascript_space_before_else_keyword = true
+ij_javascript_space_before_else_left_brace = true
+ij_javascript_space_before_finally_keyword = true
+ij_javascript_space_before_finally_left_brace = true
+ij_javascript_space_before_for_left_brace = true
+ij_javascript_space_before_for_parentheses = true
+ij_javascript_space_before_for_semicolon = false
+ij_javascript_space_before_function_left_parenth = true
+ij_javascript_space_before_generator_mult = false
+ij_javascript_space_before_if_left_brace = true
+ij_javascript_space_before_if_parentheses = true
+ij_javascript_space_before_method_call_parentheses = false
+ij_javascript_space_before_method_left_brace = true
+ij_javascript_space_before_method_parentheses = false
+ij_javascript_space_before_property_colon = false
+ij_javascript_space_before_quest = true
+ij_javascript_space_before_switch_left_brace = true
+ij_javascript_space_before_switch_parentheses = true
+ij_javascript_space_before_try_left_brace = true
+ij_javascript_space_before_type_colon = false
+ij_javascript_space_before_unary_not = false
+ij_javascript_space_before_while_keyword = true
+ij_javascript_space_before_while_left_brace = true
+ij_javascript_space_before_while_parentheses = true
+ij_javascript_spaces_around_additive_operators = true
+ij_javascript_spaces_around_arrow_function_operator = true
+ij_javascript_spaces_around_assignment_operators = true
+ij_javascript_spaces_around_bitwise_operators = true
+ij_javascript_spaces_around_equality_operators = true
+ij_javascript_spaces_around_logical_operators = true
+ij_javascript_spaces_around_multiplicative_operators = true
+ij_javascript_spaces_around_relational_operators = true
+ij_javascript_spaces_around_shift_operators = true
+ij_javascript_spaces_around_unary_operator = false
+ij_javascript_spaces_within_array_initializer_brackets = false
+ij_javascript_spaces_within_brackets = false
+ij_javascript_spaces_within_catch_parentheses = false
+ij_javascript_spaces_within_for_parentheses = false
+ij_javascript_spaces_within_if_parentheses = false
+ij_javascript_spaces_within_imports = false
+ij_javascript_spaces_within_interpolation_expressions = false
+ij_javascript_spaces_within_method_call_parentheses = false
+ij_javascript_spaces_within_method_parentheses = false
+ij_javascript_spaces_within_object_literal_braces = false
+ij_javascript_spaces_within_object_type_braces = true
+ij_javascript_spaces_within_parentheses = false
+ij_javascript_spaces_within_switch_parentheses = false
+ij_javascript_spaces_within_type_assertion = false
+ij_javascript_spaces_within_union_types = true
+ij_javascript_spaces_within_while_parentheses = false
+ij_javascript_special_else_if_treatment = true
+ij_javascript_ternary_operation_signs_on_next_line = false
+ij_javascript_ternary_operation_wrap = off
+ij_javascript_union_types_wrap = on_every_item
+ij_javascript_use_chained_calls_group_indents = false
+ij_javascript_use_double_quotes = true
+ij_javascript_use_explicit_js_extension = auto
+ij_javascript_use_path_mapping = always
+ij_javascript_use_public_modifier = false
+ij_javascript_use_semicolon_after_statement = true
+ij_javascript_var_declaration_wrap = normal
+ij_javascript_while_brace_force = never
+ij_javascript_while_on_new_line = false
+ij_javascript_wrap_comments = false
+
+[{*.cjsx,*.coffee}]
+indent_size = 2
+tab_width = 2
+ij_continuation_indent_size = 2
+ij_coffeescript_align_function_body = false
+ij_coffeescript_align_imports = false
+ij_coffeescript_align_multiline_array_initializer_expression = true
+ij_coffeescript_align_multiline_parameters = true
+ij_coffeescript_align_multiline_parameters_in_calls = false
+ij_coffeescript_align_object_properties = 0
+ij_coffeescript_align_union_types = false
+ij_coffeescript_align_var_statements = 0
+ij_coffeescript_array_initializer_new_line_after_left_brace = false
+ij_coffeescript_array_initializer_right_brace_on_new_line = false
+ij_coffeescript_array_initializer_wrap = normal
+ij_coffeescript_blacklist_imports = rxjs/Rx,node_modules/**,**/node_modules/**,@angular/material,@angular/material/typings/**
+ij_coffeescript_blank_lines_around_function = 1
+ij_coffeescript_call_parameters_new_line_after_left_paren = false
+ij_coffeescript_call_parameters_right_paren_on_new_line = false
+ij_coffeescript_call_parameters_wrap = normal
+ij_coffeescript_chained_call_dot_on_new_line = true
+ij_coffeescript_comma_on_new_line = false
+ij_coffeescript_enforce_trailing_comma = keep
+ij_coffeescript_field_prefix = _
+ij_coffeescript_file_name_style = relaxed
+ij_coffeescript_force_quote_style = false
+ij_coffeescript_force_semicolon_style = false
+ij_coffeescript_function_expression_brace_style = end_of_line
+ij_coffeescript_import_merge_members = global
+ij_coffeescript_import_prefer_absolute_path = global
+ij_coffeescript_import_sort_members = true
+ij_coffeescript_import_sort_module_name = false
+ij_coffeescript_import_use_node_resolution = true
+ij_coffeescript_imports_wrap = on_every_item
+ij_coffeescript_indent_chained_calls = true
+ij_coffeescript_indent_package_children = 0
+ij_coffeescript_jsx_attribute_value = braces
+ij_coffeescript_keep_blank_lines_in_code = 2
+ij_coffeescript_keep_first_column_comment = true
+ij_coffeescript_keep_indents_on_empty_lines = false
+ij_coffeescript_keep_line_breaks = true
+ij_coffeescript_keep_simple_methods_in_one_line = false
+ij_coffeescript_method_parameters_new_line_after_left_paren = false
+ij_coffeescript_method_parameters_right_paren_on_new_line = false
+ij_coffeescript_method_parameters_wrap = off
+ij_coffeescript_object_literal_wrap = on_every_item
+ij_coffeescript_prefer_as_type_cast = false
+ij_coffeescript_prefer_explicit_types_function_expression_returns = false
+ij_coffeescript_prefer_explicit_types_function_returns = false
+ij_coffeescript_prefer_explicit_types_vars_fields = false
+ij_coffeescript_reformat_c_style_comments = false
+ij_coffeescript_space_after_comma = true
+ij_coffeescript_space_after_dots_in_rest_parameter = false
+ij_coffeescript_space_after_generator_mult = true
+ij_coffeescript_space_after_property_colon = true
+ij_coffeescript_space_after_type_colon = true
+ij_coffeescript_space_after_unary_not = false
+ij_coffeescript_space_before_async_arrow_lparen = true
+ij_coffeescript_space_before_class_lbrace = true
+ij_coffeescript_space_before_comma = false
+ij_coffeescript_space_before_function_left_parenth = true
+ij_coffeescript_space_before_generator_mult = false
+ij_coffeescript_space_before_property_colon = false
+ij_coffeescript_space_before_type_colon = false
+ij_coffeescript_space_before_unary_not = false
+ij_coffeescript_spaces_around_additive_operators = true
+ij_coffeescript_spaces_around_arrow_function_operator = true
+ij_coffeescript_spaces_around_assignment_operators = true
+ij_coffeescript_spaces_around_bitwise_operators = true
+ij_coffeescript_spaces_around_equality_operators = true
+ij_coffeescript_spaces_around_logical_operators = true
+ij_coffeescript_spaces_around_multiplicative_operators = true
+ij_coffeescript_spaces_around_relational_operators = true
+ij_coffeescript_spaces_around_shift_operators = true
+ij_coffeescript_spaces_around_unary_operator = false
+ij_coffeescript_spaces_within_array_initializer_braces = false
+ij_coffeescript_spaces_within_array_initializer_brackets = false
+ij_coffeescript_spaces_within_imports = false
+ij_coffeescript_spaces_within_index_brackets = false
+ij_coffeescript_spaces_within_interpolation_expressions = false
+ij_coffeescript_spaces_within_method_call_parentheses = false
+ij_coffeescript_spaces_within_method_parentheses = false
+ij_coffeescript_spaces_within_object_braces = false
+ij_coffeescript_spaces_within_object_literal_braces = false
+ij_coffeescript_spaces_within_object_type_braces = true
+ij_coffeescript_spaces_within_range_brackets = false
+ij_coffeescript_spaces_within_type_assertion = false
+ij_coffeescript_spaces_within_union_types = true
+ij_coffeescript_union_types_wrap = on_every_item
+ij_coffeescript_use_chained_calls_group_indents = false
+ij_coffeescript_use_double_quotes = true
+ij_coffeescript_use_explicit_js_extension = auto
+ij_coffeescript_use_path_mapping = always
+ij_coffeescript_use_public_modifier = false
+ij_coffeescript_use_semicolon_after_statement = false
+ij_coffeescript_var_declaration_wrap = normal
+
+[{*.ctp,*.hphp,*.inc,*.module,*.php,*.php4,*.php5,*.phtml}]
+ij_continuation_indent_size = 4
+ij_php_align_assignments = true
+ij_php_align_class_constants = true
+ij_php_align_group_field_declarations = false
+ij_php_align_inline_comments = false
+ij_php_align_key_value_pairs = true
+ij_php_align_match_arm_bodies = false
+ij_php_align_multiline_array_initializer_expression = true
+ij_php_align_multiline_binary_operation = false
+ij_php_align_multiline_chained_methods = true
+ij_php_align_multiline_extends_list = true
+ij_php_align_multiline_for = true
+ij_php_align_multiline_parameters = false
+ij_php_align_multiline_parameters_in_calls = true
+ij_php_align_multiline_ternary_operation = true
+ij_php_align_named_arguments = false
+ij_php_align_phpdoc_comments = false
+ij_php_align_phpdoc_param_names = false
+ij_php_anonymous_brace_style = end_of_line
+ij_php_api_weight = 28
+ij_php_array_initializer_new_line_after_left_brace = true
+ij_php_array_initializer_right_brace_on_new_line = true
+ij_php_array_initializer_wrap = on_every_item
+ij_php_assignment_wrap = off
+ij_php_attributes_wrap = off
+ij_php_author_weight = 28
+ij_php_binary_operation_sign_on_next_line = false
+ij_php_binary_operation_wrap = off
+ij_php_blank_lines_after_class_header = 0
+ij_php_blank_lines_after_function = 1
+ij_php_blank_lines_after_imports = 1
+ij_php_blank_lines_after_opening_tag = 1
+ij_php_blank_lines_after_package = 1
+ij_php_blank_lines_around_class = 1
+ij_php_blank_lines_around_constants = 0
+ij_php_blank_lines_around_field = 0
+ij_php_blank_lines_around_method = 1
+ij_php_blank_lines_before_class_end = 0
+ij_php_blank_lines_before_imports = 1
+ij_php_blank_lines_before_method_body = 0
+ij_php_blank_lines_before_package = 1
+ij_php_blank_lines_before_return_statement = 0
+ij_php_blank_lines_between_imports = 1
+ij_php_block_brace_style = end_of_line
+ij_php_call_parameters_new_line_after_left_paren = true
+ij_php_call_parameters_right_paren_on_new_line = true
+ij_php_call_parameters_wrap = on_every_item
+ij_php_catch_on_new_line = false
+ij_php_category_weight = 28
+ij_php_class_brace_style = next_line
+ij_php_comma_after_last_argument = false
+ij_php_comma_after_last_array_element = false
+ij_php_comma_after_last_closure_use_var = false
+ij_php_comma_after_last_parameter = false
+ij_php_concat_spaces = true
+ij_php_copyright_weight = 28
+ij_php_deprecated_weight = 28
+ij_php_do_while_brace_force = always
+ij_php_else_if_style = combine
+ij_php_else_on_new_line = false
+ij_php_example_weight = 28
+ij_php_extends_keyword_wrap = off
+ij_php_extends_list_wrap = on_every_item
+ij_php_fields_default_visibility = private
+ij_php_filesource_weight = 28
+ij_php_finally_on_new_line = false
+ij_php_for_brace_force = always
+ij_php_for_statement_new_line_after_left_paren = true
+ij_php_for_statement_right_paren_on_new_line = true
+ij_php_for_statement_wrap = off
+ij_php_force_empty_methods_in_one_line = false
+ij_php_force_short_declaration_array_style = false
+ij_php_getters_setters_naming_style = camel_case
+ij_php_getters_setters_order_style = getters_first
+ij_php_global_weight = 28
+ij_php_group_use_wrap = on_every_item
+ij_php_if_brace_force = always
+ij_php_if_lparen_on_next_line = false
+ij_php_if_rparen_on_next_line = false
+ij_php_ignore_weight = 28
+ij_php_import_sorting = alphabetic
+ij_php_indent_break_from_case = true
+ij_php_indent_case_from_switch = true
+ij_php_indent_code_in_php_tags = false
+ij_php_internal_weight = 28
+ij_php_keep_blank_lines_after_lbrace = 0
+ij_php_keep_blank_lines_before_right_brace = 0
+ij_php_keep_blank_lines_in_code = 2
+ij_php_keep_blank_lines_in_declarations = 2
+ij_php_keep_control_statement_in_one_line = true
+ij_php_keep_first_column_comment = true
+ij_php_keep_indents_on_empty_lines = false
+ij_php_keep_line_breaks = true
+ij_php_keep_rparen_and_lbrace_on_one_line = true
+ij_php_keep_simple_classes_in_one_line = false
+ij_php_keep_simple_methods_in_one_line = false
+ij_php_lambda_brace_style = end_of_line
+ij_php_license_weight = 28
+ij_php_line_comment_add_space = false
+ij_php_line_comment_at_first_column = true
+ij_php_link_weight = 28
+ij_php_lower_case_boolean_const = true
+ij_php_lower_case_keywords = true
+ij_php_lower_case_null_const = true
+ij_php_method_brace_style = next_line
+ij_php_method_call_chain_wrap = off
+ij_php_method_parameters_new_line_after_left_paren = true
+ij_php_method_parameters_right_paren_on_new_line = true
+ij_php_method_parameters_wrap = on_every_item
+ij_php_method_weight = 28
+ij_php_modifier_list_wrap = false
+ij_php_multiline_chained_calls_semicolon_on_new_line = false
+ij_php_namespace_brace_style = 1
+ij_php_new_line_after_php_opening_tag = true
+ij_php_null_type_position = in_the_end
+ij_php_package_weight = 28
+ij_php_param_weight = 0
+ij_php_parameters_attributes_wrap = off
+ij_php_parentheses_expression_new_line_after_left_paren = false
+ij_php_parentheses_expression_right_paren_on_new_line = false
+ij_php_phpdoc_blank_line_before_tags = false
+ij_php_phpdoc_blank_lines_around_parameters = false
+ij_php_phpdoc_keep_blank_lines = true
+ij_php_phpdoc_param_spaces_between_name_and_description = 1
+ij_php_phpdoc_param_spaces_between_tag_and_type = 1
+ij_php_phpdoc_param_spaces_between_type_and_name = 1
+ij_php_phpdoc_use_fqcn = false
+ij_php_phpdoc_wrap_long_lines = false
+ij_php_place_assignment_sign_on_next_line = false
+ij_php_place_parens_for_constructor = 0
+ij_php_property_read_weight = 28
+ij_php_property_weight = 28
+ij_php_property_write_weight = 28
+ij_php_return_type_on_new_line = false
+ij_php_return_weight = 1
+ij_php_see_weight = 28
+ij_php_since_weight = 28
+ij_php_sort_phpdoc_elements = true
+ij_php_space_after_colon = true
+ij_php_space_after_colon_in_enum_backed_type = true
+ij_php_space_after_colon_in_named_argument = true
+ij_php_space_after_colon_in_return_type = true
+ij_php_space_after_comma = true
+ij_php_space_after_for_semicolon = true
+ij_php_space_after_quest = true
+ij_php_space_after_type_cast = false
+ij_php_space_after_unary_not = false
+ij_php_space_before_array_initializer_left_brace = false
+ij_php_space_before_catch_keyword = true
+ij_php_space_before_catch_left_brace = true
+ij_php_space_before_catch_parentheses = true
+ij_php_space_before_class_left_brace = true
+ij_php_space_before_closure_left_parenthesis = true
+ij_php_space_before_colon = true
+ij_php_space_before_colon_in_enum_backed_type = false
+ij_php_space_before_colon_in_named_argument = false
+ij_php_space_before_colon_in_return_type = false
+ij_php_space_before_comma = false
+ij_php_space_before_do_left_brace = true
+ij_php_space_before_else_keyword = true
+ij_php_space_before_else_left_brace = true
+ij_php_space_before_finally_keyword = true
+ij_php_space_before_finally_left_brace = true
+ij_php_space_before_for_left_brace = true
+ij_php_space_before_for_parentheses = true
+ij_php_space_before_for_semicolon = false
+ij_php_space_before_if_left_brace = true
+ij_php_space_before_if_parentheses = true
+ij_php_space_before_method_call_parentheses = false
+ij_php_space_before_method_left_brace = true
+ij_php_space_before_method_parentheses = false
+ij_php_space_before_quest = true
+ij_php_space_before_short_closure_left_parenthesis = false
+ij_php_space_before_switch_left_brace = true
+ij_php_space_before_switch_parentheses = true
+ij_php_space_before_try_left_brace = true
+ij_php_space_before_unary_not = false
+ij_php_space_before_while_keyword = true
+ij_php_space_before_while_left_brace = true
+ij_php_space_before_while_parentheses = true
+ij_php_space_between_ternary_quest_and_colon = false
+ij_php_spaces_around_additive_operators = true
+ij_php_spaces_around_arrow = false
+ij_php_spaces_around_assignment_in_declare = false
+ij_php_spaces_around_assignment_operators = true
+ij_php_spaces_around_bitwise_operators = true
+ij_php_spaces_around_equality_operators = true
+ij_php_spaces_around_logical_operators = true
+ij_php_spaces_around_multiplicative_operators = true
+ij_php_spaces_around_null_coalesce_operator = true
+ij_php_spaces_around_pipe_in_union_type = false
+ij_php_spaces_around_relational_operators = true
+ij_php_spaces_around_shift_operators = true
+ij_php_spaces_around_unary_operator = false
+ij_php_spaces_around_var_within_brackets = false
+ij_php_spaces_within_array_initializer_braces = false
+ij_php_spaces_within_brackets = false
+ij_php_spaces_within_catch_parentheses = false
+ij_php_spaces_within_for_parentheses = false
+ij_php_spaces_within_if_parentheses = false
+ij_php_spaces_within_method_call_parentheses = false
+ij_php_spaces_within_method_parentheses = false
+ij_php_spaces_within_parentheses = false
+ij_php_spaces_within_short_echo_tags = true
+ij_php_spaces_within_switch_parentheses = false
+ij_php_spaces_within_while_parentheses = false
+ij_php_special_else_if_treatment = false
+ij_php_subpackage_weight = 28
+ij_php_ternary_operation_signs_on_next_line = false
+ij_php_ternary_operation_wrap = off
+ij_php_throws_weight = 2
+ij_php_todo_weight = 28
+ij_php_treat_multiline_arrays_and_lambdas_multiline = false
+ij_php_unknown_tag_weight = 28
+ij_php_upper_case_boolean_const = false
+ij_php_upper_case_null_const = false
+ij_php_uses_weight = 28
+ij_php_var_weight = 28
+ij_php_variable_naming_style = mixed
+ij_php_version_weight = 28
+ij_php_while_brace_force = always
+ij_php_while_on_new_line = false
+
+[{*.har,*.jsb2,*.jsb3,*.json,.babelrc,.eslintrc,.stylelintrc,bowerrc,composer.lock,jest.config}]
+indent_size = 2
+ij_json_array_wrapping = split_into_lines
+ij_json_keep_blank_lines_in_code = 0
+ij_json_keep_indents_on_empty_lines = false
+ij_json_keep_line_breaks = true
+ij_json_keep_trailing_comma = false
+ij_json_object_wrapping = split_into_lines
+ij_json_property_alignment = do_not_align
+ij_json_space_after_colon = true
+ij_json_space_after_comma = true
+ij_json_space_before_colon = false
+ij_json_space_before_comma = false
+ij_json_spaces_within_braces = false
+ij_json_spaces_within_brackets = false
+ij_json_wrap_long_lines = false
+
+[{*.htm,*.html,*.ng,*.sht,*.shtm,*.shtml}]
+ij_html_add_new_line_before_tags = body,div,p,form,h1,h2,h3
+ij_html_align_attributes = true
+ij_html_align_text = false
+ij_html_attribute_wrap = normal
+ij_html_block_comment_add_space = false
+ij_html_block_comment_at_first_column = true
+ij_html_do_not_align_children_of_min_lines = 0
+ij_html_do_not_break_if_inline_tags = title,h1,h2,h3,h4,h5,h6,p
+ij_html_do_not_indent_children_of_tags = html,body,thead,tbody,tfoot
+ij_html_enforce_quotes = false
+ij_html_inline_tags = a,abbr,acronym,b,basefont,bdo,big,br,cite,cite,code,dfn,em,font,i,img,input,kbd,label,q,s,samp,select,small,span,strike,strong,sub,sup,textarea,tt,u,var
+ij_html_keep_blank_lines = 2
+ij_html_keep_indents_on_empty_lines = false
+ij_html_keep_line_breaks = true
+ij_html_keep_line_breaks_in_text = true
+ij_html_keep_whitespaces = false
+ij_html_keep_whitespaces_inside = span,pre,textarea
+ij_html_line_comment_at_first_column = true
+ij_html_new_line_after_last_attribute = never
+ij_html_new_line_before_first_attribute = never
+ij_html_quote_style = double
+ij_html_remove_new_line_before_tags = br
+ij_html_space_after_tag_name = false
+ij_html_space_around_equality_in_attribute = false
+ij_html_space_inside_empty_tag = false
+ij_html_text_wrap = normal
+
+[{*.markdown,*.md}]
+ij_markdown_force_one_space_after_blockquote_symbol = true
+ij_markdown_force_one_space_after_header_symbol = true
+ij_markdown_force_one_space_after_list_bullet = true
+ij_markdown_force_one_space_between_words = true
+ij_markdown_insert_quote_arrows_on_wrap = true
+ij_markdown_keep_indents_on_empty_lines = false
+ij_markdown_keep_line_breaks_inside_text_blocks = true
+ij_markdown_max_lines_around_block_elements = 1
+ij_markdown_max_lines_around_header = 1
+ij_markdown_max_lines_between_paragraphs = 1
+ij_markdown_min_lines_around_block_elements = 1
+ij_markdown_min_lines_around_header = 1
+ij_markdown_min_lines_between_paragraphs = 1
+ij_markdown_wrap_text_if_long = true
+ij_markdown_wrap_text_inside_blockquotes = true
+
+[{*.yaml,*.yml}]
+indent_size = 2
+ij_yaml_align_values_properties = do_not_align
+ij_yaml_autoinsert_sequence_marker = true
+ij_yaml_block_mapping_on_new_line = false
+ij_yaml_indent_sequence_value = true
+ij_yaml_keep_indents_on_empty_lines = false
+ij_yaml_keep_line_breaks = true
+ij_yaml_sequence_on_new_line = false
+ij_yaml_space_before_colon = false
+ij_yaml_spaces_within_braces = true
+ij_yaml_spaces_within_brackets = true
diff --git a/blah/123.md b/blah/123.md
new file mode 100644
index 00000000000..c1f19b8ab37
--- /dev/null
+++ b/blah/123.md
@@ -0,0 +1,8 @@
+---
+__canonical: 123
+__createdAt: 2022-11-16 11:32:52
+f1: 123
+f2: 456
+f3: 789
+---
+Raw MD text ...
diff --git a/blah/aaa.md b/blah/aaa.md
new file mode 100644
index 00000000000..b098ae172e8
--- /dev/null
+++ b/blah/aaa.md
@@ -0,0 +1,8 @@
+---
+__canonical: aaa
+__createdAt: 2022-11-16 11:33:05
+f1: aaa
+f2: bbb
+f3: ccc
+---
+Raw MD text ...
diff --git a/blah/abc.md b/blah/abc.md
new file mode 100644
index 00000000000..2391eba6522
--- /dev/null
+++ b/blah/abc.md
@@ -0,0 +1,8 @@
+---
+__canonical: abc
+__createdAt: 2022-11-16 11:32:36
+f1: abc
+f2: def
+f3: ghi
+---
+Raw MD text ...
diff --git a/blah/schema.json b/blah/schema.json
new file mode 100644
index 00000000000..1deae36440d
--- /dev/null
+++ b/blah/schema.json
@@ -0,0 +1,30 @@
+{
+ "name": "blah",
+ "canonicalField": "f1",
+ "sortField": "__createdAt",
+ "sortDirection": "DESC",
+ "pagesize": 0,
+ "prevNextLinks": true,
+ "detailTemplate": "blah_detail.blade.php",
+ "listTemplate": "blah_list.blade.php",
+ "fields": [
+ {
+ "name": "f1",
+ "min": "0",
+ "max": "0",
+ "type": "string"
+ },
+ {
+ "name": "f2",
+ "min": "0",
+ "max": "0",
+ "type": "string"
+ },
+ {
+ "name": "f3",
+ "min": "0",
+ "max": "0",
+ "type": "string"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/composer.json b/composer.json
index b77dc442181..6a855cc93ee 100644
--- a/composer.json
+++ b/composer.json
@@ -1,65 +1,77 @@
{
- "name": "hyde/hyde",
- "description": "Static Site Generator to rapidly create Blogs, Documentation, and more, using Markdown and Blade.",
- "keywords": ["framework", "hyde", "hyde framework"],
- "homepage": "https://hydephp.com",
- "type": "project",
- "license": "MIT",
- "support": {
- "issues": "https://github.com/hydephp/hyde/issues",
- "source": "https://github.com/hydephp/hyde"
- },
- "authors": [
- {
- "name": "Caen De Silva",
- "email": "caen@desilva.se"
- }
- ],
- "require": {
- "php": "^8.1",
- "hyde/framework": "dev-master",
- "laravel-zero/framework": "^9.1"
- },
- "require-dev": {
- "hyde/realtime-compiler": "dev-master",
- "hyde/testing": "dev-master",
- "laravel/tinker": "^2.7",
- "php-parallel-lint/php-parallel-lint": "^1.3",
- "phpstan/phpstan": "^1.8",
- "squizlabs/php_codesniffer": "^3.7",
- "vimeo/psalm": "^4.24"
- },
- "autoload": {
- "psr-4": {
- "App\\": "app/"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "Tests\\": "tests/"
- }
- },
- "scripts": {
- "post-autoload-dump": [
- "@php -r \"@unlink('./storage/framework/cache/packages.php');\"",
- "@php hyde package:discover --ansi"
- ]
- },
- "config": {
- "preferred-install": "dist",
- "sort-packages": true,
- "optimize-autoloader": false,
- "allow-plugins": {
- "pestphp/pest-plugin": true
- }
- },
- "minimum-stability": "dev",
- "prefer-stable": true,
- "bin": ["hyde"],
- "repositories": [
- {
- "type": "path",
- "url": "./packages/*"
- }
+ "name": "hyde/hyde",
+ "description": "Static Site Generator to rapidly create Blogs, Documentation, and more, using Markdown and Blade.",
+ "keywords": [
+ "framework",
+ "hyde",
+ "hyde framework"
+ ],
+ "homepage": "https://hydephp.com",
+ "type": "project",
+ "license": "MIT",
+ "support": {
+ "issues": "https://github.com/hydephp/hyde/issues",
+ "source": "https://github.com/hydephp/hyde"
+ },
+ "authors": [
+ {
+ "name": "Caen De Silva",
+ "email": "caen@desilva.se"
+ }
+ ],
+ "require": {
+ "php": "^8.1",
+ "hyde/framework": "dev-master",
+ "illuminate/validation": "^9.0.0",
+ "laravel-zero/framework": "^9.1",
+ "rgasch/illuminate-collection-extended": "^1.0",
+ "thecodingmachine/safe": "^2.4"
+ },
+ "require-dev": {
+ "driftingly/rector-laravel": "^0.14.0",
+ "hyde/realtime-compiler": "dev-master",
+ "hyde/testing": "dev-master",
+ "laravel/tinker": "^2.7",
+ "php-parallel-lint/php-parallel-lint": "^1.3",
+ "phpstan/phpstan": "^1.8",
+ "rector/rector": "^0.14.6",
+ "squizlabs/php_codesniffer": "^3.7",
+ "thecodingmachine/phpstan-safe-rule": "^1.2",
+ "vimeo/psalm": "^4.24"
+ },
+ "autoload": {
+ "psr-4": {
+ "App\\": "app/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Tests\\": "tests/"
+ }
+ },
+ "scripts": {
+ "post-autoload-dump": [
+ "@php -r \"@unlink('./storage/framework/cache/packages.php');\"",
+ "@php hyde package:discover --ansi"
]
+ },
+ "config": {
+ "preferred-install": "dist",
+ "sort-packages": true,
+ "optimize-autoloader": false,
+ "allow-plugins": {
+ "pestphp/pest-plugin": true
+ }
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true,
+ "bin": [
+ "hyde"
+ ],
+ "repositories": [
+ {
+ "type": "path",
+ "url": "./packages/*"
+ }
+ ]
}
diff --git a/composer.lock b/composer.lock
index da4f7b9b416..66794ed2645 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "2ac2aceff68548ae63bdcb9ef19842ae",
+ "content-hash": "05f4ea5218839f90bfacbc74d44350df",
"packages": [
{
"name": "brick/math",
@@ -64,16 +64,16 @@
},
{
"name": "dflydev/dot-access-data",
- "version": "v3.0.1",
+ "version": "v3.0.2",
"source": {
"type": "git",
"url": "https://github.com/dflydev/dflydev-dot-access-data.git",
- "reference": "0992cc19268b259a39e86f296da5f0677841f42c"
+ "reference": "f41715465d65213d644d3141a6a93081be5d3549"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c",
- "reference": "0992cc19268b259a39e86f296da5f0677841f42c",
+ "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549",
+ "reference": "f41715465d65213d644d3141a6a93081be5d3549",
"shasum": ""
},
"require": {
@@ -84,7 +84,7 @@
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.3",
"scrutinizer/ocular": "1.6.0",
"squizlabs/php_codesniffer": "^3.5",
- "vimeo/psalm": "^3.14"
+ "vimeo/psalm": "^4.0.0"
},
"type": "library",
"extra": {
@@ -133,9 +133,9 @@
],
"support": {
"issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
- "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1"
+ "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2"
},
- "time": "2021-08-13T13:06:58+00:00"
+ "time": "2022-10-27T11:44:00+00:00"
},
{
"name": "doctrine/inflector",
@@ -228,6 +228,82 @@
],
"time": "2022-10-20T09:10:12+00:00"
},
+ {
+ "name": "doctrine/lexer",
+ "version": "1.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229",
+ "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9.0",
+ "phpstan/phpstan": "^1.3",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.11"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/1.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-02-28T11:07:21+00:00"
+ },
{
"name": "dragonmantank/cron-expression",
"version": "v3.3.2",
@@ -289,18 +365,86 @@
],
"time": "2022-09-10T18:51:20+00:00"
},
+ {
+ "name": "egulias/email-validator",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/egulias/EmailValidator.git",
+ "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715",
+ "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "^1.2",
+ "php": ">=7.2",
+ "symfony/polyfill-intl-idn": "^1.15"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpunit/phpunit": "^8.5.8|^9.3.3",
+ "vimeo/psalm": "^4"
+ },
+ "suggest": {
+ "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Egulias\\EmailValidator\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eduardo Gulias Davis"
+ }
+ ],
+ "description": "A library for validating emails against several RFCs",
+ "homepage": "https://github.com/egulias/EmailValidator",
+ "keywords": [
+ "email",
+ "emailvalidation",
+ "emailvalidator",
+ "validation",
+ "validator"
+ ],
+ "support": {
+ "issues": "https://github.com/egulias/EmailValidator/issues",
+ "source": "https://github.com/egulias/EmailValidator/tree/3.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/egulias",
+ "type": "github"
+ }
+ ],
+ "time": "2022-06-18T20:57:19+00:00"
+ },
{
"name": "filp/whoops",
- "version": "2.14.5",
+ "version": "2.14.6",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
- "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc"
+ "reference": "f7948baaa0330277c729714910336383286305da"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
- "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/f7948baaa0330277c729714910336383286305da",
+ "reference": "f7948baaa0330277c729714910336383286305da",
"shasum": ""
},
"require": {
@@ -350,7 +494,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
- "source": "https://github.com/filp/whoops/tree/2.14.5"
+ "source": "https://github.com/filp/whoops/tree/2.14.6"
},
"funding": [
{
@@ -358,7 +502,7 @@
"type": "github"
}
],
- "time": "2022-01-07T12:00:00+00:00"
+ "time": "2022-11-02T16:23:29+00:00"
},
{
"name": "fruitcake/php-cors",
@@ -830,7 +974,7 @@
"dist": {
"type": "path",
"url": "./packages/framework",
- "reference": "6d64cb61b879f53097eda4cf1ae4ad9845ba7390"
+ "reference": "d798597286187fa0bb7163f498909f1a0b976f24"
},
"require": {
"illuminate/support": "^9.5",
@@ -876,16 +1020,16 @@
},
{
"name": "illuminate/bus",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/bus.git",
- "reference": "baccdba32ec4e7d3492cfd991806a8ead397f77f"
+ "reference": "91f8c74ea873f552681b9f1961df808d2a37def2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/bus/zipball/baccdba32ec4e7d3492cfd991806a8ead397f77f",
- "reference": "baccdba32ec4e7d3492cfd991806a8ead397f77f",
+ "url": "https://api.github.com/repos/illuminate/bus/zipball/91f8c74ea873f552681b9f1961df808d2a37def2",
+ "reference": "91f8c74ea873f552681b9f1961df808d2a37def2",
"shasum": ""
},
"require": {
@@ -925,11 +1069,11 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2022-09-16T19:09:47+00:00"
+ "time": "2022-11-03T13:05:20+00:00"
},
{
"name": "illuminate/cache",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/cache.git",
@@ -989,16 +1133,16 @@
},
{
"name": "illuminate/collections",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/collections.git",
- "reference": "32e3cd051cf1d12c1e7d5f7bb5a52d0dae8b7a8b"
+ "reference": "1729899f8e37840738d1c37bb110da5b09509990"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/collections/zipball/32e3cd051cf1d12c1e7d5f7bb5a52d0dae8b7a8b",
- "reference": "32e3cd051cf1d12c1e7d5f7bb5a52d0dae8b7a8b",
+ "url": "https://api.github.com/repos/illuminate/collections/zipball/1729899f8e37840738d1c37bb110da5b09509990",
+ "reference": "1729899f8e37840738d1c37bb110da5b09509990",
"shasum": ""
},
"require": {
@@ -1040,11 +1184,11 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2022-10-06T14:13:23+00:00"
+ "time": "2022-11-07T11:40:33+00:00"
},
{
"name": "illuminate/conditionable",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/conditionable.git",
@@ -1090,7 +1234,7 @@
},
{
"name": "illuminate/config",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/config.git",
@@ -1138,16 +1282,16 @@
},
{
"name": "illuminate/console",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/console.git",
- "reference": "a8a91de48aa316259b36079b4eec536690a80d7d"
+ "reference": "a3627c454e0e97c3cb0b45c998f4481448706766"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/console/zipball/a8a91de48aa316259b36079b4eec536690a80d7d",
- "reference": "a8a91de48aa316259b36079b4eec536690a80d7d",
+ "url": "https://api.github.com/repos/illuminate/console/zipball/a3627c454e0e97c3cb0b45c998f4481448706766",
+ "reference": "a3627c454e0e97c3cb0b45c998f4481448706766",
"shasum": ""
},
"require": {
@@ -1196,11 +1340,11 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2022-10-17T18:39:13+00:00"
+ "time": "2022-11-07T14:46:16+00:00"
},
{
"name": "illuminate/container",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/container.git",
@@ -1251,16 +1395,16 @@
},
{
"name": "illuminate/contracts",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/contracts.git",
- "reference": "d57130115694b4f6a98d064bea31cdb09d7784f8"
+ "reference": "c7cc6e6198cac6dfdead111f9758de25413188b7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/contracts/zipball/d57130115694b4f6a98d064bea31cdb09d7784f8",
- "reference": "d57130115694b4f6a98d064bea31cdb09d7784f8",
+ "url": "https://api.github.com/repos/illuminate/contracts/zipball/c7cc6e6198cac6dfdead111f9758de25413188b7",
+ "reference": "c7cc6e6198cac6dfdead111f9758de25413188b7",
"shasum": ""
},
"require": {
@@ -1295,11 +1439,11 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2022-09-15T13:31:42+00:00"
+ "time": "2022-10-31T22:25:40+00:00"
},
{
"name": "illuminate/events",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/events.git",
@@ -1354,7 +1498,7 @@
},
{
"name": "illuminate/filesystem",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/filesystem.git",
@@ -1416,16 +1560,16 @@
},
{
"name": "illuminate/http",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/http.git",
- "reference": "211d9d77707adc1773ead9dba30537ad571c3c8e"
+ "reference": "db30eb18605b9fb387e6abe4650edb09cdae37c5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/http/zipball/211d9d77707adc1773ead9dba30537ad571c3c8e",
- "reference": "211d9d77707adc1773ead9dba30537ad571c3c8e",
+ "url": "https://api.github.com/repos/illuminate/http/zipball/db30eb18605b9fb387e6abe4650edb09cdae37c5",
+ "reference": "db30eb18605b9fb387e6abe4650edb09cdae37c5",
"shasum": ""
},
"require": {
@@ -1471,11 +1615,11 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2022-10-24T13:29:55+00:00"
+ "time": "2022-10-31T13:48:14+00:00"
},
{
"name": "illuminate/macroable",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/macroable.git",
@@ -1521,7 +1665,7 @@
},
{
"name": "illuminate/pipeline",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/pipeline.git",
@@ -1569,16 +1713,16 @@
},
{
"name": "illuminate/session",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/session.git",
- "reference": "f62b89cee04d93852365d606040790ce90701fdf"
+ "reference": "97d27f60c0860e2850b86b57a5cd14b31c8b7833"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/session/zipball/f62b89cee04d93852365d606040790ce90701fdf",
- "reference": "f62b89cee04d93852365d606040790ce90701fdf",
+ "url": "https://api.github.com/repos/illuminate/session/zipball/97d27f60c0860e2850b86b57a5cd14b31c8b7833",
+ "reference": "97d27f60c0860e2850b86b57a5cd14b31c8b7833",
"shasum": ""
},
"require": {
@@ -1621,20 +1765,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2022-09-29T14:02:36+00:00"
+ "time": "2022-10-25T18:53:21+00:00"
},
{
"name": "illuminate/support",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/support.git",
- "reference": "f194a3b1435ed4f2542d127efb8652c7d41980ea"
+ "reference": "e613ecd3e9351328e64b7e748804aaf85f4a48c1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/support/zipball/f194a3b1435ed4f2542d127efb8652c7d41980ea",
- "reference": "f194a3b1435ed4f2542d127efb8652c7d41980ea",
+ "url": "https://api.github.com/repos/illuminate/support/zipball/e613ecd3e9351328e64b7e748804aaf85f4a48c1",
+ "reference": "e613ecd3e9351328e64b7e748804aaf85f4a48c1",
"shasum": ""
},
"require": {
@@ -1691,20 +1835,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2022-10-24T09:54:34+00:00"
+ "time": "2022-11-02T13:45:32+00:00"
},
{
"name": "illuminate/testing",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/testing.git",
- "reference": "86e6618722fefa1059fb32518268199e6f267782"
+ "reference": "5466e79da52edeeea960b1d87b6474003ddc79b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/testing/zipball/86e6618722fefa1059fb32518268199e6f267782",
- "reference": "86e6618722fefa1059fb32518268199e6f267782",
+ "url": "https://api.github.com/repos/illuminate/testing/zipball/5466e79da52edeeea960b1d87b6474003ddc79b4",
+ "reference": "5466e79da52edeeea960b1d87b6474003ddc79b4",
"shasum": ""
},
"require": {
@@ -1749,20 +1893,132 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2022-10-25T13:12:24+00:00"
+ "time": "2022-11-03T21:24:23+00:00"
+ },
+ {
+ "name": "illuminate/translation",
+ "version": "v9.39.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/translation.git",
+ "reference": "53d0cd548a8ad64eaf12d539bf39ee4189dcee56"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/translation/zipball/53d0cd548a8ad64eaf12d539bf39ee4189dcee56",
+ "reference": "53d0cd548a8ad64eaf12d539bf39ee4189dcee56",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/collections": "^9.0",
+ "illuminate/contracts": "^9.0",
+ "illuminate/filesystem": "^9.0",
+ "illuminate/macroable": "^9.0",
+ "illuminate/support": "^9.0",
+ "php": "^8.0.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Translation\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Translation package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-10-09T13:21:28+00:00"
+ },
+ {
+ "name": "illuminate/validation",
+ "version": "v9.39.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/validation.git",
+ "reference": "89dba4d3a6fdb867796773c6c227554bbf0e0580"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/validation/zipball/89dba4d3a6fdb867796773c6c227554bbf0e0580",
+ "reference": "89dba4d3a6fdb867796773c6c227554bbf0e0580",
+ "shasum": ""
+ },
+ "require": {
+ "egulias/email-validator": "^3.2.1",
+ "ext-json": "*",
+ "illuminate/collections": "^9.0",
+ "illuminate/container": "^9.0",
+ "illuminate/contracts": "^9.0",
+ "illuminate/macroable": "^9.0",
+ "illuminate/support": "^9.0",
+ "illuminate/translation": "^9.0",
+ "php": "^8.0.2",
+ "symfony/http-foundation": "^6.0",
+ "symfony/mime": "^6.0"
+ },
+ "suggest": {
+ "ext-bcmath": "Required to use the multiple_of validation rule.",
+ "illuminate/database": "Required to use the database presence verifier (^9.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Validation\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Validation package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-10-07T19:07:25+00:00"
},
{
"name": "illuminate/view",
- "version": "v9.37.0",
+ "version": "v9.39.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/view.git",
- "reference": "935608accf327a1c1cb20376a831aa419bcc64e5"
+ "reference": "0d8094e3f826220d26d1d509d154beb114ee7bea"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/view/zipball/935608accf327a1c1cb20376a831aa419bcc64e5",
- "reference": "935608accf327a1c1cb20376a831aa419bcc64e5",
+ "url": "https://api.github.com/repos/illuminate/view/zipball/0d8094e3f826220d26d1d509d154beb114ee7bea",
+ "reference": "0d8094e3f826220d26d1d509d154beb114ee7bea",
"shasum": ""
},
"require": {
@@ -1803,7 +2059,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2022-10-19T13:21:05+00:00"
+ "time": "2022-11-02T15:46:09+00:00"
},
{
"name": "jolicode/jolinotif",
@@ -2014,16 +2270,16 @@
},
{
"name": "league/commonmark",
- "version": "2.3.5",
+ "version": "2.3.7",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
- "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257"
+ "reference": "a36bd2be4f5387c0f3a8792a0d76b7d68865abbf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/84d74485fdb7074f4f9dd6f02ab957b1de513257",
- "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/a36bd2be4f5387c0f3a8792a0d76b7d68865abbf",
+ "reference": "a36bd2be4f5387c0f3a8792a0d76b7d68865abbf",
"shasum": ""
},
"require": {
@@ -2043,7 +2299,7 @@
"erusev/parsedown": "^1.0",
"ext-json": "*",
"github/gfm": "0.29.0",
- "michelf/php-markdown": "^1.4",
+ "michelf/php-markdown": "^1.4 || ^2.0",
"nyholm/psr7": "^1.5",
"phpstan/phpstan": "^1.8.2",
"phpunit/phpunit": "^9.5.21",
@@ -2116,7 +2372,7 @@
"type": "tidelift"
}
],
- "time": "2022-07-29T10:59:45+00:00"
+ "time": "2022-11-03T17:29:46+00:00"
},
{
"name": "league/config",
@@ -2877,16 +3133,16 @@
},
{
"name": "nunomaduro/termwind",
- "version": "v1.14.1",
+ "version": "v1.14.2",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/termwind.git",
- "reference": "86fc30eace93b9b6d4c844ba6de76db84184e01b"
+ "reference": "9a8218511eb1a0965629ff820dda25985440aefc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/86fc30eace93b9b6d4c844ba6de76db84184e01b",
- "reference": "86fc30eace93b9b6d4c844ba6de76db84184e01b",
+ "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/9a8218511eb1a0965629ff820dda25985440aefc",
+ "reference": "9a8218511eb1a0965629ff820dda25985440aefc",
"shasum": ""
},
"require": {
@@ -2943,7 +3199,7 @@
],
"support": {
"issues": "https://github.com/nunomaduro/termwind/issues",
- "source": "https://github.com/nunomaduro/termwind/tree/v1.14.1"
+ "source": "https://github.com/nunomaduro/termwind/tree/v1.14.2"
},
"funding": [
{
@@ -2959,7 +3215,7 @@
"type": "github"
}
],
- "time": "2022-10-17T15:20:29+00:00"
+ "time": "2022-10-28T22:51:32+00:00"
},
{
"name": "phpoption/phpoption",
@@ -3525,21 +3781,20 @@
},
{
"name": "ramsey/uuid",
- "version": "4.5.1",
+ "version": "4.6.0",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
- "reference": "a161a26d917604dc6d3aa25100fddf2556e9f35d"
+ "reference": "ad63bc700e7d021039e30ce464eba384c4a1d40f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/a161a26d917604dc6d3aa25100fddf2556e9f35d",
- "reference": "a161a26d917604dc6d3aa25100fddf2556e9f35d",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/ad63bc700e7d021039e30ce464eba384c4a1d40f",
+ "reference": "ad63bc700e7d021039e30ce464eba384c4a1d40f",
"shasum": ""
},
"require": {
"brick/math": "^0.8.8 || ^0.9 || ^0.10",
- "ext-ctype": "*",
"ext-json": "*",
"php": "^8.0",
"ramsey/collection": "^1.0"
@@ -3571,7 +3826,6 @@
},
"suggest": {
"ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
- "ext-ctype": "Enables faster processing of character classification using ctype functions.",
"ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
"ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
"paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
@@ -3603,7 +3857,7 @@
],
"support": {
"issues": "https://github.com/ramsey/uuid/issues",
- "source": "https://github.com/ramsey/uuid/tree/4.5.1"
+ "source": "https://github.com/ramsey/uuid/tree/4.6.0"
},
"funding": [
{
@@ -3615,7 +3869,60 @@
"type": "tidelift"
}
],
- "time": "2022-09-16T03:22:46+00:00"
+ "time": "2022-11-05T23:03:38+00:00"
+ },
+ {
+ "name": "rgasch/illuminate-collection-extended",
+ "version": "v1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/rgasch/illuminate-collection-extended.git",
+ "reference": "9be1e1cf4cbd996e24c07f7cde7a9a5ec28ab709"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/rgasch/illuminate-collection-extended/zipball/9be1e1cf4cbd996e24c07f7cde7a9a5ec28ab709",
+ "reference": "9be1e1cf4cbd996e24c07f7cde7a9a5ec28ab709",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/support": "^9.0",
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "nunomaduro/larastan": "^2.2",
+ "pestphp/pest": "^1.16",
+ "pestphp/pest-plugin-laravel": "^1.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Rgasch\\Collection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Robert Gasch",
+ "email": "rgasch@gmail.com"
+ }
+ ],
+ "description": "Extension class for Laravel's Collection class with some extra functionality.",
+ "homepage": "https://github.com/rgasch/illuminate-collection-extended",
+ "keywords": [
+ "collection",
+ "framework",
+ "illuminate",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/rgasch/illuminate-collection-extended/issues",
+ "source": "https://github.com/rgasch/illuminate-collection-extended/tree/v1.0.1"
+ },
+ "time": "2022-11-08T09:13:24+00:00"
},
{
"name": "spatie/yaml-front-matter",
@@ -3681,16 +3988,16 @@
},
{
"name": "symfony/console",
- "version": "v6.1.6",
+ "version": "v6.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "7fa3b9cf17363468795e539231a5c91b02b608fc"
+ "reference": "a1282bd0c096e0bdb8800b104177e2ce404d8815"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/7fa3b9cf17363468795e539231a5c91b02b608fc",
- "reference": "7fa3b9cf17363468795e539231a5c91b02b608fc",
+ "url": "https://api.github.com/repos/symfony/console/zipball/a1282bd0c096e0bdb8800b104177e2ce404d8815",
+ "reference": "a1282bd0c096e0bdb8800b104177e2ce404d8815",
"shasum": ""
},
"require": {
@@ -3757,7 +4064,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.1.6"
+ "source": "https://github.com/symfony/console/tree/v6.1.7"
},
"funding": [
{
@@ -3773,7 +4080,7 @@
"type": "tidelift"
}
],
- "time": "2022-10-07T08:04:03+00:00"
+ "time": "2022-10-26T21:42:49+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -3844,16 +4151,16 @@
},
{
"name": "symfony/error-handler",
- "version": "v6.1.6",
+ "version": "v6.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "49f718e41f1b6f0fd5730895ca5b1c37defd828d"
+ "reference": "699a26ce5ec656c198bf6e26398b0f0818c7e504"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/49f718e41f1b6f0fd5730895ca5b1c37defd828d",
- "reference": "49f718e41f1b6f0fd5730895ca5b1c37defd828d",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/699a26ce5ec656c198bf6e26398b0f0818c7e504",
+ "reference": "699a26ce5ec656c198bf6e26398b0f0818c7e504",
"shasum": ""
},
"require": {
@@ -3895,7 +4202,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/error-handler/tree/v6.1.6"
+ "source": "https://github.com/symfony/error-handler/tree/v6.1.7"
},
"funding": [
{
@@ -3911,7 +4218,7 @@
"type": "tidelift"
}
],
- "time": "2022-10-07T08:04:03+00:00"
+ "time": "2022-10-28T16:23:08+00:00"
},
{
"name": "symfony/event-dispatcher",
@@ -4141,16 +4448,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v6.1.6",
+ "version": "v6.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "3ae8e9c57155fc48930493a629da293b32efbde0"
+ "reference": "792a1856d2b95273f0e1c3435785f1d01a60ecc6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3ae8e9c57155fc48930493a629da293b32efbde0",
- "reference": "3ae8e9c57155fc48930493a629da293b32efbde0",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/792a1856d2b95273f0e1c3435785f1d01a60ecc6",
+ "reference": "792a1856d2b95273f0e1c3435785f1d01a60ecc6",
"shasum": ""
},
"require": {
@@ -4196,7 +4503,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v6.1.6"
+ "source": "https://github.com/symfony/http-foundation/tree/v6.1.7"
},
"funding": [
{
@@ -4212,20 +4519,20 @@
"type": "tidelift"
}
],
- "time": "2022-10-02T08:30:52+00:00"
+ "time": "2022-10-12T09:44:59+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v6.1.6",
+ "version": "v6.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "102f99bf81799e93f61b9a73b2f38b309c587a94"
+ "reference": "8fc1ffe753948c47a103a809cdd6a4a8458b3254"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/102f99bf81799e93f61b9a73b2f38b309c587a94",
- "reference": "102f99bf81799e93f61b9a73b2f38b309c587a94",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8fc1ffe753948c47a103a809cdd6a4a8458b3254",
+ "reference": "8fc1ffe753948c47a103a809cdd6a4a8458b3254",
"shasum": ""
},
"require": {
@@ -4306,7 +4613,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-kernel/tree/v6.1.6"
+ "source": "https://github.com/symfony/http-kernel/tree/v6.1.7"
},
"funding": [
{
@@ -4322,20 +4629,20 @@
"type": "tidelift"
}
],
- "time": "2022-10-12T07:48:47+00:00"
+ "time": "2022-10-28T18:06:36+00:00"
},
{
"name": "symfony/mime",
- "version": "v6.1.6",
+ "version": "v6.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "5ae192b9a39730435cfec025a499f79d05ac68a3"
+ "reference": "f440f066d57691088d998d6e437ce98771144618"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/5ae192b9a39730435cfec025a499f79d05ac68a3",
- "reference": "5ae192b9a39730435cfec025a499f79d05ac68a3",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/f440f066d57691088d998d6e437ce98771144618",
+ "reference": "f440f066d57691088d998d6e437ce98771144618",
"shasum": ""
},
"require": {
@@ -4347,8 +4654,7 @@
"egulias/email-validator": "~3.0.0",
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
- "symfony/mailer": "<5.4",
- "symfony/serializer": "<5.4.14|>=6.0,<6.0.14|>=6.1,<6.1.6"
+ "symfony/mailer": "<5.4"
},
"require-dev": {
"egulias/email-validator": "^2.1.10|^3.1",
@@ -4356,7 +4662,7 @@
"symfony/dependency-injection": "^5.4|^6.0",
"symfony/property-access": "^5.4|^6.0",
"symfony/property-info": "^5.4|^6.0",
- "symfony/serializer": "^5.4.14|~6.0.14|^6.1.6"
+ "symfony/serializer": "^5.2|^6.0"
},
"type": "library",
"autoload": {
@@ -4388,7 +4694,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v6.1.6"
+ "source": "https://github.com/symfony/mime/tree/v6.1.7"
},
"funding": [
{
@@ -4404,7 +4710,7 @@
"type": "tidelift"
}
],
- "time": "2022-10-07T08:04:03+00:00"
+ "time": "2022-10-19T08:10:53+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -5209,16 +5515,16 @@
},
{
"name": "symfony/string",
- "version": "v6.1.6",
+ "version": "v6.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "7e7e0ff180d4c5a6636eaad57b65092014b61864"
+ "reference": "823f143370880efcbdfa2dbca946b3358c4707e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/7e7e0ff180d4c5a6636eaad57b65092014b61864",
- "reference": "7e7e0ff180d4c5a6636eaad57b65092014b61864",
+ "url": "https://api.github.com/repos/symfony/string/zipball/823f143370880efcbdfa2dbca946b3358c4707e5",
+ "reference": "823f143370880efcbdfa2dbca946b3358c4707e5",
"shasum": ""
},
"require": {
@@ -5274,7 +5580,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.1.6"
+ "source": "https://github.com/symfony/string/tree/v6.1.7"
},
"funding": [
{
@@ -5631,6 +5937,145 @@
],
"time": "2022-10-07T08:04:03+00:00"
},
+ {
+ "name": "thecodingmachine/safe",
+ "version": "v2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thecodingmachine/safe.git",
+ "reference": "e788f3d09dcd36f806350aedb77eac348fafadd3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/e788f3d09dcd36f806350aedb77eac348fafadd3",
+ "reference": "e788f3d09dcd36f806350aedb77eac348fafadd3",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.5",
+ "phpunit/phpunit": "^9.5",
+ "squizlabs/php_codesniffer": "^3.2",
+ "thecodingmachine/phpstan-strict-rules": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "deprecated/apc.php",
+ "deprecated/array.php",
+ "deprecated/datetime.php",
+ "deprecated/libevent.php",
+ "deprecated/misc.php",
+ "deprecated/password.php",
+ "deprecated/mssql.php",
+ "deprecated/stats.php",
+ "deprecated/strings.php",
+ "lib/special_cases.php",
+ "deprecated/mysqli.php",
+ "generated/apache.php",
+ "generated/apcu.php",
+ "generated/array.php",
+ "generated/bzip2.php",
+ "generated/calendar.php",
+ "generated/classobj.php",
+ "generated/com.php",
+ "generated/cubrid.php",
+ "generated/curl.php",
+ "generated/datetime.php",
+ "generated/dir.php",
+ "generated/eio.php",
+ "generated/errorfunc.php",
+ "generated/exec.php",
+ "generated/fileinfo.php",
+ "generated/filesystem.php",
+ "generated/filter.php",
+ "generated/fpm.php",
+ "generated/ftp.php",
+ "generated/funchand.php",
+ "generated/gettext.php",
+ "generated/gmp.php",
+ "generated/gnupg.php",
+ "generated/hash.php",
+ "generated/ibase.php",
+ "generated/ibmDb2.php",
+ "generated/iconv.php",
+ "generated/image.php",
+ "generated/imap.php",
+ "generated/info.php",
+ "generated/inotify.php",
+ "generated/json.php",
+ "generated/ldap.php",
+ "generated/libxml.php",
+ "generated/lzf.php",
+ "generated/mailparse.php",
+ "generated/mbstring.php",
+ "generated/misc.php",
+ "generated/mysql.php",
+ "generated/network.php",
+ "generated/oci8.php",
+ "generated/opcache.php",
+ "generated/openssl.php",
+ "generated/outcontrol.php",
+ "generated/pcntl.php",
+ "generated/pcre.php",
+ "generated/pgsql.php",
+ "generated/posix.php",
+ "generated/ps.php",
+ "generated/pspell.php",
+ "generated/readline.php",
+ "generated/rpminfo.php",
+ "generated/rrd.php",
+ "generated/sem.php",
+ "generated/session.php",
+ "generated/shmop.php",
+ "generated/sockets.php",
+ "generated/sodium.php",
+ "generated/solr.php",
+ "generated/spl.php",
+ "generated/sqlsrv.php",
+ "generated/ssdeep.php",
+ "generated/ssh2.php",
+ "generated/stream.php",
+ "generated/strings.php",
+ "generated/swoole.php",
+ "generated/uodbc.php",
+ "generated/uopz.php",
+ "generated/url.php",
+ "generated/var.php",
+ "generated/xdiff.php",
+ "generated/xml.php",
+ "generated/xmlrpc.php",
+ "generated/yaml.php",
+ "generated/yaz.php",
+ "generated/zip.php",
+ "generated/zlib.php"
+ ],
+ "classmap": [
+ "lib/DateTime.php",
+ "lib/DateTimeImmutable.php",
+ "lib/Exceptions/",
+ "deprecated/Exceptions/",
+ "generated/Exceptions/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
+ "support": {
+ "issues": "https://github.com/thecodingmachine/safe/issues",
+ "source": "https://github.com/thecodingmachine/safe/tree/v2.4.0"
+ },
+ "time": "2022-10-07T14:02:17+00:00"
+ },
{
"name": "torchlight/torchlight-commonmark",
"version": "v0.5.5",
@@ -6210,16 +6655,16 @@
},
{
"name": "composer/pcre",
- "version": "3.0.0",
+ "version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
- "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd"
+ "reference": "4482b6409ca6bfc2af043a5711cd21ac3e7a8dfb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd",
- "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/4482b6409ca6bfc2af043a5711cd21ac3e7a8dfb",
+ "reference": "4482b6409ca6bfc2af043a5711cd21ac3e7a8dfb",
"shasum": ""
},
"require": {
@@ -6261,7 +6706,7 @@
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
- "source": "https://github.com/composer/pcre/tree/3.0.0"
+ "source": "https://github.com/composer/pcre/tree/3.0.2"
},
"funding": [
{
@@ -6277,7 +6722,7 @@
"type": "tidelift"
}
],
- "time": "2022-02-25T20:21:48+00:00"
+ "time": "2022-11-03T20:24:16+00:00"
},
{
"name": "composer/semver",
@@ -6582,6 +7027,55 @@
],
"time": "2022-03-03T08:28:38+00:00"
},
+ {
+ "name": "driftingly/rector-laravel",
+ "version": "0.14.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/driftingly/rector-laravel.git",
+ "reference": "077a1d72aef3166216f632b273d449235c6e8866"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/driftingly/rector-laravel/zipball/077a1d72aef3166216f632b273d449235c6e8866",
+ "reference": "077a1d72aef3166216f632b273d449235c6e8866",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.8.2",
+ "phpstan/phpstan-strict-rules": "^1.2",
+ "phpstan/phpstan-webmozart-assert": "^1.1",
+ "phpunit/phpunit": "^9.5",
+ "rector/phpstan-rules": "^0.6",
+ "rector/rector": "^0.14.7",
+ "rector/rector-debugging": "dev-main",
+ "symplify/easy-coding-standard": "^11.0",
+ "symplify/phpstan-extensions": "^11.0",
+ "symplify/phpstan-rules": "^11.0",
+ "symplify/rule-doc-generator": "^11.0",
+ "symplify/vendor-patches": "^11.0"
+ },
+ "type": "rector-extension",
+ "autoload": {
+ "psr-4": {
+ "RectorLaravel\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Rector upgrades rules for Laravel Framework",
+ "support": {
+ "issues": "https://github.com/driftingly/rector-laravel/issues",
+ "source": "https://github.com/driftingly/rector-laravel/tree/0.14.1"
+ },
+ "time": "2022-11-05T17:05:59+00:00"
+ },
{
"name": "felixfbecker/advanced-json-rpc",
"version": "v3.2.1",
@@ -6740,7 +7234,7 @@
"dist": {
"type": "path",
"url": "./packages/realtime-compiler",
- "reference": "26180f50d68466f8a256fbf61b5386be830ecc54"
+ "reference": "905709e5320f7bfc053dea8e5eac64ebd8ec320f"
},
"require": {
"desilva/microserve": "^1.0",
@@ -6778,7 +7272,7 @@
"dist": {
"type": "path",
"url": "./packages/testing",
- "reference": "676a590d21664501707bf4d214ad532ab26a2061"
+ "reference": "05ca2f663e04439be77799bf5e1e1701faaf23c3"
},
"require": {
"illuminate/support": "^9.5",
@@ -7838,16 +8332,16 @@
},
{
"name": "phpstan/phpstan",
- "version": "1.8.11",
+ "version": "1.9.1",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "46e223dd68a620da18855c23046ddb00940b4014"
+ "reference": "a59c8b5bfd4a236f27efc8b5ce72c313c2b54b5f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/46e223dd68a620da18855c23046ddb00940b4014",
- "reference": "46e223dd68a620da18855c23046ddb00940b4014",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a59c8b5bfd4a236f27efc8b5ce72c313c2b54b5f",
+ "reference": "a59c8b5bfd4a236f27efc8b5ce72c313c2b54b5f",
"shasum": ""
},
"require": {
@@ -7877,7 +8371,7 @@
],
"support": {
"issues": "https://github.com/phpstan/phpstan/issues",
- "source": "https://github.com/phpstan/phpstan/tree/1.8.11"
+ "source": "https://github.com/phpstan/phpstan/tree/1.9.1"
},
"funding": [
{
@@ -7893,20 +8387,20 @@
"type": "tidelift"
}
],
- "time": "2022-10-24T15:45:13+00:00"
+ "time": "2022-11-04T13:35:59+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "9.2.17",
+ "version": "9.2.18",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8"
+ "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8",
- "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/12fddc491826940cf9b7e88ad9664cf51f0f6d0a",
+ "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a",
"shasum": ""
},
"require": {
@@ -7962,7 +8456,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.18"
},
"funding": [
{
@@ -7970,7 +8464,7 @@
"type": "github"
}
],
- "time": "2022-08-30T12:24:04+00:00"
+ "time": "2022-10-27T13:35:33+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -8215,16 +8709,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "9.5.25",
+ "version": "9.5.26",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d"
+ "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
- "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2",
+ "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2",
"shasum": ""
},
"require": {
@@ -8297,7 +8791,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.25"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.26"
},
"funding": [
{
@@ -8313,20 +8807,20 @@
"type": "tidelift"
}
],
- "time": "2022-09-25T03:44:45+00:00"
+ "time": "2022-10-28T06:00:21+00:00"
},
{
"name": "psy/psysh",
- "version": "v0.11.8",
+ "version": "v0.11.9",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "f455acf3645262ae389b10e9beba0c358aa6994e"
+ "reference": "1acec99d6684a54ff92f8b548a4e41b566963778"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/f455acf3645262ae389b10e9beba0c358aa6994e",
- "reference": "f455acf3645262ae389b10e9beba0c358aa6994e",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/1acec99d6684a54ff92f8b548a4e41b566963778",
+ "reference": "1acec99d6684a54ff92f8b548a4e41b566963778",
"shasum": ""
},
"require": {
@@ -8387,9 +8881,66 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.11.8"
+ "source": "https://github.com/bobthecow/psysh/tree/v0.11.9"
+ },
+ "time": "2022-11-06T15:29:46+00:00"
+ },
+ {
+ "name": "rector/rector",
+ "version": "0.14.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/rectorphp/rector.git",
+ "reference": "3553aaba0e820083fc6d7f0dc78d8d789226a398"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/3553aaba0e820083fc6d7f0dc78d8d789226a398",
+ "reference": "3553aaba0e820083fc6d7f0dc78d8d789226a398",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2|^8.0",
+ "phpstan/phpstan": "^1.9.0"
+ },
+ "conflict": {
+ "rector/rector-doctrine": "*",
+ "rector/rector-downgrade-php": "*",
+ "rector/rector-php-parser": "*",
+ "rector/rector-phpoffice": "*",
+ "rector/rector-phpunit": "*",
+ "rector/rector-symfony": "*"
+ },
+ "bin": [
+ "bin/rector"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "0.14-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Instant Upgrade and Automated Refactoring of any PHP code",
+ "support": {
+ "issues": "https://github.com/rectorphp/rector/issues",
+ "source": "https://github.com/rectorphp/rector/tree/0.14.7"
},
- "time": "2022-07-28T14:25:11+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/tomasvotruba",
+ "type": "github"
+ }
+ ],
+ "time": "2022-11-04T08:48:40+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -9411,6 +9962,63 @@
},
"time": "2022-06-18T07:21:10+00:00"
},
+ {
+ "name": "thecodingmachine/phpstan-safe-rule",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thecodingmachine/phpstan-safe-rule.git",
+ "reference": "8a7b88e0d54f209a488095085f183e9174c40e1e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thecodingmachine/phpstan-safe-rule/zipball/8a7b88e0d54f209a488095085f183e9174c40e1e",
+ "reference": "8a7b88e0d54f209a488095085f183e9174c40e1e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0",
+ "phpstan/phpstan": "^1.0",
+ "thecodingmachine/safe": "^1.0 || ^2.0"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^7.5.2 || ^8.0",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "type": "phpstan-extension",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ },
+ "phpstan": {
+ "includes": [
+ "phpstan-safe-rule.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "TheCodingMachine\\Safe\\PHPStan\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "David Négrier",
+ "email": "d.negrier@thecodingmachine.com"
+ }
+ ],
+ "description": "A PHPStan rule to detect safety issues. Must be used in conjunction with thecodingmachine/safe",
+ "support": {
+ "issues": "https://github.com/thecodingmachine/phpstan-safe-rule/issues",
+ "source": "https://github.com/thecodingmachine/phpstan-safe-rule/tree/v1.2.0"
+ },
+ "time": "2022-01-17T10:12:29+00:00"
+ },
{
"name": "theseer/tokenizer",
"version": "1.2.1",
@@ -9463,16 +10071,16 @@
},
{
"name": "vimeo/psalm",
- "version": "4.29.0",
+ "version": "4.30.0",
"source": {
"type": "git",
"url": "https://github.com/vimeo/psalm.git",
- "reference": "7ec5ffbd5f68ae03782d7fd33fff0c45a69f95b3"
+ "reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vimeo/psalm/zipball/7ec5ffbd5f68ae03782d7fd33fff0c45a69f95b3",
- "reference": "7ec5ffbd5f68ae03782d7fd33fff0c45a69f95b3",
+ "url": "https://api.github.com/repos/vimeo/psalm/zipball/d0bc6e25d89f649e4f36a534f330f8bb4643dd69",
+ "reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69",
"shasum": ""
},
"require": {
@@ -9565,9 +10173,9 @@
],
"support": {
"issues": "https://github.com/vimeo/psalm/issues",
- "source": "https://github.com/vimeo/psalm/tree/4.29.0"
+ "source": "https://github.com/vimeo/psalm/tree/4.30.0"
},
- "time": "2022-10-11T17:09:17+00:00"
+ "time": "2022-11-06T20:37:08+00:00"
},
{
"name": "webmozart/path-util",
@@ -9634,5 +10242,5 @@
"php": "^8.1"
},
"platform-dev": [],
- "plugin-api-version": "2.1.0"
+ "plugin-api-version": "2.2.0"
}
diff --git a/config/app.php b/config/app.php
index ec63c67c2d6..73118d116fc 100644
--- a/config/app.php
+++ b/config/app.php
@@ -78,6 +78,8 @@
'providers' => [
App\Providers\AppServiceProvider::class,
+ Illuminate\Translation\TranslationServiceProvider::class,
+ Illuminate\Validation\ValidationServiceProvider::class,
Hyde\Framework\HydeServiceProvider::class,
],
diff --git a/packages/framework/resources/views/layouts/pubtype.blade.php b/packages/framework/resources/views/layouts/pubtype.blade.php
new file mode 100644
index 00000000000..08f49411951
--- /dev/null
+++ b/packages/framework/resources/views/layouts/pubtype.blade.php
@@ -0,0 +1,9 @@
+{{-- The Post Page Layout --}}
+@extends('hyde::layouts.app')
+@section('content')
+
+
+ @include($component, ['publication' => $publication])
+
+
+@endsection
\ No newline at end of file
diff --git a/packages/framework/resources/views/pubtypes/blah_detail.blade.php b/packages/framework/resources/views/pubtypes/blah_detail.blade.php
new file mode 100644
index 00000000000..eb16077ef12
--- /dev/null
+++ b/packages/framework/resources/views/pubtypes/blah_detail.blade.php
@@ -0,0 +1 @@
+It works DETAIL!!!!
diff --git a/packages/framework/resources/views/pubtypes/blah_list.blade.php b/packages/framework/resources/views/pubtypes/blah_list.blade.php
new file mode 100644
index 00000000000..e8a2a3d418c
--- /dev/null
+++ b/packages/framework/resources/views/pubtypes/blah_list.blade.php
@@ -0,0 +1 @@
+It works LIST!!!!
diff --git a/packages/framework/src/Console/Commands/BuildPublicationsCommand.php b/packages/framework/src/Console/Commands/BuildPublicationsCommand.php
new file mode 100644
index 00000000000..82c8142963f
--- /dev/null
+++ b/packages/framework/src/Console/Commands/BuildPublicationsCommand.php
@@ -0,0 +1,205 @@
+title('Building your static site!');
+
+ $this->service = new BuildService($this->output);
+
+ $this->runPreBuildActions();
+
+ $this->service->cleanOutputDirectory();
+
+ $this->service->transferMediaAssets();
+
+ // FIXME: refactor
+ $this->build();
+
+ $this->runPostBuildActions();
+
+ $this->printFinishMessage($time_start);
+
+ $this->output->writeln('Max memory used: ' . memory_get_peak_usage() / 1024 / 1024 . ' MB');
+
+ return Command::SUCCESS;
+ }
+
+ // Warning: This is extremely hacky ...
+ protected function build(): void
+ {
+ $pubTypes = HydeHelper::getPublicationTypes();
+ foreach ($pubTypes as $dir => $pubType) {
+ $targetDirectory = "_site/$dir";
+ @mkdir($targetDirectory);
+ $publications = HydeHelper::getPublicationsForPubType($pubType);
+ $this->info("Building [$pubType->name] into [$targetDirectory] ...");
+ $this->buildDetailPages($targetDirectory, $pubType, $publications);
+ $this->buildListPage($targetDirectory, $pubType, $publications);
+ }
+ }
+
+ protected function buildDetailPages(string $targetDirectory, Collection $pubType, Collection $publications): void
+ {
+ $template = $pubType->detailTemplate;
+
+ // Mock a page
+ $page = new MarkdownPage($template);
+ view()->share('page', $page);
+ view()->share('currentPage', $template);
+ view()->share('currentRoute', $page->getRoute());
+
+ $detailTemplate = "hyde::pubtypes." . $template;
+ foreach ($publications as $publication) {
+ $slug = $publication->matter->__slug;
+ $this->info(" Building [$slug] ...");
+ $html = view('hyde::layouts.pubtype')->with(['component' => $detailTemplate, 'publication' => $publication])->render();
+ file_put_contents("$targetDirectory/{$slug}.html", $html);
+ }
+ }
+
+ protected function buildListPage(string $targetDirectory, Collection $pubType, Collection $publications): void
+ {
+ $template = "hyde::pubtypes." . $pubType->listTemplate;
+ $this->info(" Building list page ...");
+ $html = view($template)->with('publications', $publications)->render();
+ file_put_contents("$targetDirectory/index.html", $html);
+ }
+
+ protected function runPreBuildActions(): void
+ {
+ if ($this->option('no-api')) {
+ $this->info('Disabling external API calls');
+ $this->newLine();
+ $config = config('hyde.features');
+ unset($config[array_search('torchlight', $config)]);
+ Config::set(['hyde.features' => $config]);
+ }
+
+ if ($this->option('pretty-urls')) {
+ $this->info('Generating site with pretty URLs');
+ $this->newLine();
+ Config::set(['site.pretty_urls' => true]);
+ }
+ }
+
+ public function runPostBuildActions(): void
+ {
+ $service = new BuildTaskService($this->output);
+
+ if ($this->option('run-prettier')) {
+ $this->runNodeCommand(
+ 'npx prettier ' . Hyde::pathToRelative(Hyde::sitePath()) . '/**/*.html --write --bracket-same-line',
+ 'Prettifying code!',
+ 'prettify code'
+ );
+ }
+
+ if ($this->option('run-dev')) {
+ $this->runNodeCommand('npm run dev', 'Building frontend assets for development!');
+ }
+
+ if ($this->option('run-prod')) {
+ $this->runNodeCommand('npm run prod', 'Building frontend assets for production!');
+ }
+
+ $service->runIf(GenerateSitemap::class, $this->canGenerateSitemap());
+ $service->runIf(GenerateRssFeed::class, $this->canGenerateFeed());
+ $service->runIf(GenerateSearch::class, $this->canGenerateSearch());
+
+ $service->runPostBuildTasks();
+ }
+
+ protected function printFinishMessage(float $time_start): void
+ {
+ $execution_time = (microtime(true) - $time_start);
+ $this->info(
+ sprintf(
+ 'All done! Finished in %s seconds. (%sms)',
+ number_format($execution_time, 2),
+ number_format($execution_time * 1000, 2)
+ )
+ );
+
+ $this->info('Congratulations! 🎉 Your static site has been built!');
+ $this->line(
+ 'Your new homepage is stored here -> ' .
+ DiscoveryService::createClickableFilepath(Hyde::sitePath('index.html'))
+ );
+ }
+
+ protected function runNodeCommand(string $command, string $message, ?string $actionMessage = null): void
+ {
+ $this->info($message . ' This may take a second.');
+
+ $output = shell_exec(
+ sprintf(
+ '%s%s',
+ app()->environment() === 'testing' ? 'echo ' : '',
+ $command
+ )
+ );
+
+ $this->line(
+ $output ?? sprintf(
+ 'Could not %s! Is NPM installed?>',
+ $actionMessage ?? 'run script'
+ )
+ );
+ }
+
+ protected function canGenerateSitemap(): bool
+ {
+ return Features::sitemap();
+ }
+
+ protected function canGenerateFeed(): bool
+ {
+ return Features::rss();
+ }
+
+ protected function canGenerateSearch(): bool
+ {
+ return Features::hasDocumentationSearch();
+ }
+}
diff --git a/packages/framework/src/Console/Commands/Interfaces/CommandHandleInterface.php b/packages/framework/src/Console/Commands/Interfaces/CommandHandleInterface.php
new file mode 100644
index 00000000000..3673cbd785c
--- /dev/null
+++ b/packages/framework/src/Console/Commands/Interfaces/CommandHandleInterface.php
@@ -0,0 +1,8 @@
+title('Creating a new Publication Item!');
+
+ $pubTypes = HydeHelper::getPublicationTypes();
+ if ($pubTypes->isEmpty()) {
+ $this->output->error("Unable to locate any publication-types ... did you create any?");
+ return Command::FAILURE;
+ }
+
+ $pubType = $this->argument('publicationType');
+ if (!$pubType) {
+ $this->output->writeln('Now please choose the Publication Type to create an item for:>');
+ $offset = 0;
+ foreach ($pubTypes as $pubType) {
+ $offset++;
+ $this->line(" $offset: $pubType->name");
+ }
+ $selected = (int)HydeHelper::askWithValidation($this, 'selected', "Publication type (1-$offset)", ['required', 'integer', "between:1,$offset"]);
+ $pubType = $pubTypes->{$pubTypes->keys()[$selected - 1]};
+ }
+
+ $mediaFiles = HydeHelper::getMediaForPubType($pubType);
+ $fieldData = Collection::create();
+ $this->output->writeln('Now please enter the field data:>');
+ foreach ($pubType->fields as $field) {
+ $fieldData->{$field->name} = $this->captureFieldInput($field, $mediaFiles);
+ }
+
+ try {
+ $creator = new CreatesNewPublicationFile($pubType, $fieldData);
+ $creator->create();
+ } catch (\InvalidArgumentException $e) { // FIXME: provide a properly typed exception
+ $msg = $e->getMessage();
+ // Useful for debugging
+ //$this->output->writeln("xxx " . $e->getTraceAsString());
+ $this->output->writeln("$msg>");
+ $overwrite = HydeHelper::askWithValidation(
+ $this,
+ 'overwrite',
+ 'Do you wish to overwrite the existing file (y/n)',
+ ['required', 'string', "in:y,n"],
+ 'n'
+ );
+ if (strtolower($overwrite) == 'y') {
+ $creator = new CreatesNewPublicationFile($pubType, $fieldData, true);
+ $creator->create();
+ } else {
+ $this->output->writeln('Existing without overwriting existing publication file!>');
+ }
+ } catch (\Exception $e) {
+ $this->error("Error: " . $e->getMessage() . " at " . $e->getFile() . ':' . $e->getLine());
+ return Command::FAILURE;
+ }
+
+ return Command::SUCCESS;
+ }
+
+
+ private function captureFieldInput(Collection $field, Collection $mediaFiles): string|array
+ {
+ $rulesPerType = $this->getValidationRulesPerType();
+
+ if ($field->type === 'text') {
+ $lines = [];
+ $this->output->writeln($field->name . " (end with a line containing only '<<<')");
+ do {
+ $line = Str::replace("\n", '', fgets(STDIN));
+ if ($line === '<<<') {
+ break;
+ }
+ $lines[] = $line;
+ } while (true);
+
+ return implode("\n", $lines);
+ }
+
+ if ($field->type === 'array') {
+ $lines = [];
+ $this->output->writeln($field->name . " (end with an empty line)");
+ do {
+ $line = Str::replace("\n", '', fgets(STDIN));
+ if ($line === '') {
+ break;
+ }
+ $lines[] = $line;
+ } while (true);
+
+ return $lines;
+ }
+
+ if ($field->type === 'image') {
+ $this->output->writeln($field->name . " (end with an empty line)");
+ foreach ($mediaFiles as $k => $file) {
+ $offset = $k + 1;
+ $this->output->writeln(" $offset: $file");
+ }
+ $selected = HydeHelper::askWithValidation($this, $field->name, $field->name, ['required', 'integer', "between:1,$offset"]);
+ $file = $mediaFiles->{$selected - 1};
+ return '_media/' . Str::of($file)->after('media/')->toString();
+ }
+
+ // Fields which are not of type array, text or image
+ $fieldRules = $rulesPerType->{$field->type};
+ if ($fieldRules->contains('between')) {
+ $fieldRules->forget($fieldRules->search('between'));
+ if ($field->min && $field->max) {
+ switch ($field->type) {
+ case 'string':
+ case 'integer':
+ case 'float':
+ $fieldRules->add("between:$field->min,$field->max");
+ break;
+ case 'datetime':
+ $fieldRules->add("after:$field->min");
+ $fieldRules->add("before:$field->max");
+ break;
+ }
+ }
+ }
+
+ return HydeHelper::askWithValidation($this, $field->name, $field->name, $fieldRules);
+ }
+
+
+ private function getValidationRulesPerType(): Collection
+ {
+ static $rulesPerType = null;
+ if (!$rulesPerType) {
+ $rulesPerType = Collection::create(
+ [
+ 'string' => ['required', 'string', 'between'],
+ 'boolean' => ['required', 'boolean'],
+ 'integer' => ['required', 'integer', 'between'],
+ 'float' => ['required', 'numeric', 'between'],
+ 'datetime' => ['required', 'datetime', 'between'],
+ 'url' => ['required', 'url'],
+ 'text' => ['required', 'string', 'between'],
+ ]
+ );
+ }
+
+ return $rulesPerType;
+ }
+}
diff --git a/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php b/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php
new file mode 100644
index 00000000000..34bdd4bff06
--- /dev/null
+++ b/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php
@@ -0,0 +1,150 @@
+title('Creating a new Publication Type!');
+
+ $title = $this->argument('title');
+ if (!$title) {
+ $title = trim(HydeHelper::askWithValidation($this, 'nanme', 'Publication type name', ['required', 'string']));
+ $dirname = HydeHelper::formatNameForStorage($title);
+ if (file_exists($dirname)) {
+ throw new \InvalidArgumentException("Storage path [$dirname] already exists");
+ }
+ }
+
+ $fields = $this->captureFieldsDefinitions();
+
+ $this->output->writeln('Choose the default field you wish to sort by:>');
+ $this->line(" 0: dateCreated (meta field)");
+ foreach ($fields as $k => $v) {
+ $offset = $k + 1;
+ $this->line(" $offset: $v[name]");
+ }
+ $selected = (int)HydeHelper::askWithValidation($this, 'selected', "Sort field (0-$offset)", ['required', 'integer', "between:0,$offset"], 0);
+ $sortField = $selected ? $fields[$selected - 1]['name'] : '__createdAt';
+
+ $this->output->writeln('Choose the default sort direction:>');
+ $this->line(' 1 - Ascending (oldest items first if sorting by dateCreated)');
+ $this->line(' 2 - Descending (newest items first if sorting by dateCreated)');
+ $selected = (int)HydeHelper::askWithValidation($this, 'selected', "Sort field (1-2)", ['required', 'integer', "between:1,2"], 2);
+ $sortDirection = match ($selected) {
+ 1 => 'ASC',
+ 2 => 'DESC',
+ };
+
+ $pagesize = (int)HydeHelper::askWithValidation(
+ $this,
+ 'pagesize',
+ "Enter the pagesize (0 for no limit)",
+ ['required', 'integer', 'between:0,100'],
+ 25
+ );
+ $prevNextLinks = (bool)HydeHelper::askWithValidation(
+ $this,
+ 'prevNextLinks',
+ 'Generate previous/next links in detail view (y/n)',
+ ['required', 'string', "in:y,n"],
+ 'y'
+ );
+
+ $this->output->writeln('Choose a canonical name field (the values of this field have to be unique!):>');
+ foreach ($fields as $k => $v) {
+ if ($fields->type != 'image') {
+ $offset = $k + 1;
+ $this->line(" $offset: $v->name");
+ }
+ }
+ $selected = (int)HydeHelper::askWithValidation($this, 'selected', "Canonical field (1-$offset)", ['required', 'integer', "between:1,$offset"], 1);
+ $canonicalField = $fields[$selected - 1]['name'];
+
+ try {
+ $creator = new CreatesNewPublicationTypeSchema($title, $fields, $canonicalField, $sortField, $sortDirection, $pagesize, $prevNextLinks);
+ $creator->create();
+ } catch (\Exception $e) {
+ $this->error("Error: " . $e->getMessage() . " at " . $e->getFile() . ':' . $e->getLine());
+ return Command::FAILURE;
+ }
+
+ return Command::SUCCESS;
+ }
+
+
+ private function captureFieldsDefinitions(): Collection
+ {
+ $this->output->writeln('You now need to define the fields in your publication type:>');
+ $count = 1;
+ $fields = Collection::create();
+ do {
+ $this->line('');
+ $this->output->writeln("Field #$count:>");
+
+ $field = Collection::create();
+ $field->name = HydeHelper::askWithValidation($this, 'name', 'Field name', ['required']);
+ $this->line('Field type:');
+ $this->line(' 1 - String');
+ $this->line(' 2 - Boolean ');
+ $this->line(' 3 - Integer');
+ $this->line(' 4 - Float');
+ $this->line(' 5 - Datetime');
+ $this->line(' 6 - URL');
+ $this->line(' 7 - Array');
+ $this->line(' 8 - Text');
+ $this->line(' 9 - Local Image');
+ $type = (int)HydeHelper::askWithValidation($this, 'type', 'Field type (1-7)', ['required', 'integer', 'between:1,9'], 1);
+ do {
+ $field->min = HydeHelper::askWithValidation($this, 'min', 'Min value (for strings, this refers to string length)', ['required', 'string'], 0);
+ $field->max = HydeHelper::askWithValidation($this, 'max', 'Max value (for strings, this refers to string length)', ['required', 'string'], 0);
+ $lengthsValid = true;
+ if ($field->max < $field->min) {
+ $lengthsValid = false;
+ $this->output->warning("Field length [max] must be [>=] than [min]");
+ }
+ } while (!$lengthsValid);
+ $addAnother = HydeHelper::askWithValidation($this, 'addAnother', 'Add another field (y/n)', ['required', 'string', "in:y,n"], 'y');
+
+ // map field choice to actual field type
+ $field->type = match ($type) {
+ 1 => 'string',
+ 2 => 'boolean',
+ 3 => 'integer',
+ 4 => 'float',
+ 5 => 'datetime',
+ 6 => 'url',
+ 7 => 'array',
+ 8 => 'text',
+ 9 => 'image',
+ };
+
+ $fields->add($field);
+ $count++;
+ } while (strtolower($addAnother) != 'n');
+
+ return $fields;
+ }
+}
diff --git a/packages/framework/src/Console/HydeConsoleServiceProvider.php b/packages/framework/src/Console/HydeConsoleServiceProvider.php
index 8099e7526c7..ff954a4d160 100644
--- a/packages/framework/src/Console/HydeConsoleServiceProvider.php
+++ b/packages/framework/src/Console/HydeConsoleServiceProvider.php
@@ -16,25 +16,30 @@ class HydeConsoleServiceProvider extends ServiceProvider
*/
public function register(): void
{
- $this->commands([
- Commands\BuildRssFeedCommand::class,
- Commands\BuildSearchCommand::class,
- Commands\BuildSiteCommand::class,
- Commands\BuildSitemapCommand::class,
- Commands\RebuildStaticSiteCommand::class,
+ $this->commands(
+ [
+ Commands\BuildPublicationsCommand::class,
+ Commands\BuildRssFeedCommand::class,
+ Commands\BuildSearchCommand::class,
+ Commands\BuildSiteCommand::class,
+ Commands\BuildSitemapCommand::class,
+ Commands\RebuildStaticSiteCommand::class,
- Commands\MakePageCommand::class,
- Commands\MakePostCommand::class,
+ Commands\MakePageCommand::class,
+ Commands\MakePostCommand::class,
+ Commands\MakePublicationTypeCommand::class,
+ Commands\MakePublicationCommand::class,
- Commands\PublishHomepageCommand::class,
- Commands\PublishViewsCommand::class,
- Commands\UpdateConfigsCommand::class,
- Commands\PackageDiscoverCommand::class,
+ Commands\PublishHomepageCommand::class,
+ Commands\PublishViewsCommand::class,
+ Commands\UpdateConfigsCommand::class,
+ Commands\PackageDiscoverCommand::class,
- Commands\RouteListCommand::class,
- Commands\ValidateCommand::class,
- Commands\ServeCommand::class,
- Commands\DebugCommand::class,
- ]);
+ Commands\RouteListCommand::class,
+ Commands\ValidateCommand::class,
+ Commands\ServeCommand::class,
+ Commands\DebugCommand::class,
+ ]
+ );
}
}
diff --git a/packages/framework/src/Framework/Actions/CreatesNewPublicationFile.php b/packages/framework/src/Framework/Actions/CreatesNewPublicationFile.php
new file mode 100644
index 00000000000..6fc4206c359
--- /dev/null
+++ b/packages/framework/src/Framework/Actions/CreatesNewPublicationFile.php
@@ -0,0 +1,85 @@
+pubType->schemaFile);
+ $canonicalFieldName = $this->pubType->canonicalField;
+ $canonicalFieldDef = $this->pubType->fields->filter(fn($f) => $f->name === $canonicalFieldName)->first();
+ $canonicalValue = $canonicalFieldDef->type != 'array' ? $this->fieldData->{$canonicalFieldName} : $this->fieldData->{$canonicalFieldName}[0];
+ $canonicalStr = Str::of($canonicalValue)->substr(0, 64);
+ $slug = $canonicalStr->slug()->toString();
+ $fileName = HydeHelper::formatNameForStorage($slug);
+ $outFile = "$dir/$fileName.md";
+ if (file_exists($outFile) && !$this->force) {
+ throw new \InvalidArgumentException("File [$outFile] already exists");
+ }
+
+ $now = date('Y-m-d H:i:s');
+ $output = "---\n";
+ $output .= "__createdAt: {$now}\n";
+ foreach ($this->fieldData as $k => $v) {
+ $field = $this->pubType->fields->where('name', $k)->first();
+
+ if ($field->type == 'text') {
+ $output .= "{$k}: |\n";
+ foreach ($v as $line) {
+ $output .= " $line\n";
+ }
+ continue;
+ }
+
+ if ($field->type == 'array') {
+ $output .= "{$k}:\n";
+ foreach ($v as $item) {
+ $output .= " - \"$item\"\n";
+ }
+ continue;
+ }
+
+ $output .= "{$k}: {$v}\n";
+ }
+ $output .= "---\n";
+ $output .= "Raw MD text ...\n";
+
+ $this->result = $output;
+ print "Saving publication data to [$outFile]\n";
+
+ file_put_contents($outFile, $output);
+ }
+
+ public function getResult(): string
+ {
+ return $this->result;
+ }
+}
diff --git a/packages/framework/src/Framework/Actions/CreatesNewPublicationTypeSchema.php b/packages/framework/src/Framework/Actions/CreatesNewPublicationTypeSchema.php
new file mode 100644
index 00000000000..9d6ff4bdc3f
--- /dev/null
+++ b/packages/framework/src/Framework/Actions/CreatesNewPublicationTypeSchema.php
@@ -0,0 +1,67 @@
+name);
+ $outFile = "$dirName/schema.json";
+ mkdir($dirName);
+
+ $data = [];
+ $data['name'] = $this->name;
+ $data['canonicalField'] = $this->canonicalField;
+ $data['sortField'] = $this->sortField;
+ $data['sortDirection'] = $this->sortDirection;
+ $data['pagesize'] = $this->pagesize;
+ $data['prevNextLinks'] = $this->prevNextLinks;
+ $data['detailTemplate'] = "{$dirName}_detail";
+ $data['listTemplate'] = "{$dirName}_list";
+ $data['fields'] = $this->fields;
+ $json = json_encode($data, JSON_PRETTY_PRINT);
+ $this->result = $json;
+
+ print "Saving publicationType data to [$outFile]\n";
+
+ file_put_contents($outFile, $json);
+ }
+
+ public function getResult(): string
+ {
+ return $this->result;
+ }
+}
diff --git a/packages/framework/src/Framework/Actions/Interfaces/CreateActionInterface.php b/packages/framework/src/Framework/Actions/Interfaces/CreateActionInterface.php
new file mode 100644
index 00000000000..1ff4f524e93
--- /dev/null
+++ b/packages/framework/src/Framework/Actions/Interfaces/CreateActionInterface.php
@@ -0,0 +1,8 @@
+toArray();
+ }
+
+ $answer = $command->ask($message, $default);
+ $factory = app(ValidationFactory::class);
+ $validator = $factory->make([$name => $answer], [$name => $rules]);
+
+ if ($validator->passes()) {
+ return $answer;
+ }
+
+ foreach ($validator->errors()->all() as $error) {
+ $command->error($error);
+ }
+
+ return self::askWithValidation($command, $name, $message, $rules);
+ }
+
+ /**
+ * Get the available HydeKernel instance.
+ *
+ * @return \Hyde\Foundation\HydeKernel
+ */
+ public static function getKernel(): HydeKernel
+ {
+ return app(HydeKernel::class);
+ }
+
+ /**
+ * Format the publication type name to a suitable representation for file storage
+ *
+ * @param string $pubTypeNameRaw
+ * @return string
+ */
+ public static function formatNameForStorage(string $pubTypeNameRaw)
+ {
+ return Str::slug($pubTypeNameRaw);
+ }
+
+ /**
+ * Return a collection of all defined publication types, indexed by the directory name.
+ *
+ * @return Collection
+ * @throws \Exception
+ */
+ public static function getPublicationTypes(): Collection
+ {
+ $root = base_path();
+ $schemaFiles = glob("$root/*/schema.json", GLOB_BRACE);
+
+ $pubTypes = Collection::create();
+ foreach ($schemaFiles as $schemaFile) {
+ $fileData = file_get_contents($schemaFile);
+ if (!$fileData) {
+ throw new \Exception("No data read from [$schemaFile]");
+ }
+ $dirName = Collection::create(explode('/', dirname($schemaFile)))->last();
+ $schema = Collection::create(json_decode($fileData, true));
+ $schema->directory = $dirName;
+ $schema->schemaFile = $schemaFile;
+ $pubTypes->{$schema->directory} = $schema;
+ }
+
+ return $pubTypes;
+ }
+
+ /**
+ * Return all publications for a given pub type, optionally sorted by the publication's sortField.
+ *
+ * @param Collection $pubType
+ * @return Collection
+ * @throws \Safe\Exceptions\FilesystemException
+ */
+ public static function getPublicationsForPubType(Collection $pubType, $sort = true): Collection
+ {
+ $root = base_path();
+ $files = glob("$root/{$pubType->directory}/*.md");
+
+ $publications = Collection::create();
+ foreach ($files as $file) {
+ $publications->add(self::getPublicationData($file));
+ }
+
+ if ($sort) {
+ return $publications->sortBy(function ($publication) use ($pubType) {
+ return $publication->matter->{$pubType->sortField};
+ });
+ }
+
+ return $publications;
+ }
+
+
+ /**
+ * Return all media items for a given publication type
+ *
+ * @param Collection $pubType
+ * @return Collection
+ * @throws \Safe\Exceptions\FilesystemException
+ */
+ public static function getMediaForPubType(Collection $pubType, $sort = true): Collection
+ {
+ $root = base_path();
+ $files = glob("$root/_media/{$pubType->directory}/*.{jpg,jpeg,png,gif,pdf}", GLOB_BRACE);
+
+ $media = Collection::create();
+ foreach ($files as $file) {
+ $media->add($file);
+ }
+
+ if ($sort) {
+ return $media->sort()->values();
+ }
+
+ return $media;
+ }
+
+
+ /**
+ * Read an MD file and return the parsed data.
+ *
+ * @param string $fileData
+ * @return Collection
+ */
+ public static function getPublicationData(string $mdFileName): Collection
+ {
+ $fileData = file_get_contents($mdFileName);
+ if (!$fileData) {
+ throw new \Exception("No data read from [$mdFileName]");
+ }
+
+ $parsedFileData = YamlFrontMatter::markdownCompatibleParse($fileData);
+ $matter = $parsedFileData->matter();
+ $markdown = $parsedFileData->body();
+ $matter['__slug'] = basename($mdFileName, '.md');
+ $matter['__createdDatetime'] = Carbon::createFromTimestamp($matter['__createdAt']);
+
+ return Collection::create(['matter' => $matter, 'markdown' => $markdown]);
+ }
+
+ /**
+ * Check whether a given publication type exists.
+ *
+ * @param string $pubTypeName
+ * @param bool $isRaw
+ * @return bool
+ * @throws \Exception
+ */
+ public static function publicationTypeExists(string $pubTypeName, bool $isRaw = true): bool
+ {
+ if ($isRaw) {
+ $pubTypeName = self::formatNameForStorage($pubTypeName);
+ }
+
+ return self::getPublicationTypes()->has($pubTypeName);
+ }
+
+ /**
+ * Remove trailing slashes from the start and end of a string.
+ *
+ * @param string $string
+ * @return string
+ */
+ public static function unslash(string $string): string
+ {
+ return trim($string, '/\\');
+ }
+}
diff --git a/phpstan.neon b/phpstan.neon
new file mode 100644
index 00000000000..01679b5aadc
--- /dev/null
+++ b/phpstan.neon
@@ -0,0 +1,9 @@
+parameters:
+ level: 6
+ paths:
+ - packages
+ - tests
+
+includes:
+ - vendor/thecodingmachine/phpstan-safe-rule/phpstan-safe-rule.neon
+
diff --git a/rector.php b/rector.php
index 96e58900fce..535dfab3613 100644
--- a/rector.php
+++ b/rector.php
@@ -6,10 +6,12 @@
use Rector\Laravel\Set\LaravelSetList;
return static function (RectorConfig $rectorConfig): void {
- $rectorConfig->paths([__DIR__.'/packages/framework/src']);
+ $rectorConfig->paths([__DIR__ . '/packages']);
$rectorConfig->sets([
- LaravelSetList::LARAVEL_90,
- \Rector\Set\ValueObject\SetList::PHP_80,
- \Rector\Set\ValueObject\SetList::PHP_81,
- ]);
+ LaravelSetList::LARAVEL_90,
+ \Rector\Set\ValueObject\SetList::PHP_80,
+ \Rector\Set\ValueObject\SetList::PHP_81,
+ ]);
+ $rectorConfig->rule(Rector\Php80\Rector\Class_\ClassPropertyAssignToConstructorPromotionRector::class);
};
+