├── .editorconfig ├── LICENSE.md ├── README.md ├── composer.json └── src ├── MemoizedClientRepository.php ├── MemoizedRepository.php ├── MemoizedTokenRepository.php ├── OctaneOperationTerminatedListener.php └── ServiceProvider.php /.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | charset = utf-8 3 | end_of_line = lf 4 | indent_size = 4 5 | indent_style = space 6 | insert_final_newline = true 7 | max_line_length = 175 8 | tab_width = 4 9 | trim_trailing_whitespace = true 10 | ij_continuation_indent_size = 8 11 | ij_formatter_off_tag = @formatter:off 12 | ij_formatter_on_tag = @formatter:on 13 | ij_formatter_tags_enabled = true 14 | ij_smart_tabs = false 15 | ij_visual_guides = 16 | ij_wrap_on_typing = false 17 | 18 | [*.blade.php] 19 | ij_blade_keep_indents_on_empty_lines = false 20 | 21 | [*.css] 22 | ij_css_align_closing_brace_with_properties = false 23 | ij_css_blank_lines_around_nested_selector = 1 24 | ij_css_blank_lines_between_blocks = 1 25 | ij_css_block_comment_add_space = false 26 | ij_css_brace_placement = end_of_line 27 | ij_css_enforce_quotes_on_format = false 28 | ij_css_hex_color_long_format = true 29 | ij_css_hex_color_lower_case = true 30 | ij_css_hex_color_short_format = false 31 | ij_css_hex_color_upper_case = false 32 | ij_css_keep_blank_lines_in_code = 2 33 | ij_css_keep_indents_on_empty_lines = false 34 | ij_css_keep_single_line_blocks = false 35 | 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 36 | ij_css_space_after_colon = true 37 | ij_css_space_before_opening_brace = true 38 | ij_css_use_double_quotes = true 39 | ij_css_value_alignment = do_not_align 40 | 41 | [*.less] 42 | ij_continuation_indent_size = 4 43 | ij_less_align_closing_brace_with_properties = false 44 | ij_less_blank_lines_around_nested_selector = 1 45 | ij_less_blank_lines_between_blocks = 1 46 | ij_less_block_comment_add_space = false 47 | ij_less_brace_placement = 0 48 | ij_less_enforce_quotes_on_format = false 49 | ij_less_hex_color_long_format = false 50 | ij_less_hex_color_lower_case = false 51 | ij_less_hex_color_short_format = false 52 | ij_less_hex_color_upper_case = false 53 | ij_less_keep_blank_lines_in_code = 2 54 | ij_less_keep_indents_on_empty_lines = false 55 | ij_less_keep_single_line_blocks = false 56 | ij_less_line_comment_add_space = false 57 | ij_less_line_comment_at_first_column = false 58 | 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 59 | ij_less_space_after_colon = true 60 | ij_less_space_before_opening_brace = true 61 | ij_less_use_double_quotes = true 62 | ij_less_value_alignment = 0 63 | 64 | [*.sass] 65 | indent_size = 2 66 | ij_sass_align_closing_brace_with_properties = false 67 | ij_sass_blank_lines_around_nested_selector = 1 68 | ij_sass_blank_lines_between_blocks = 1 69 | ij_sass_brace_placement = 0 70 | ij_sass_enforce_quotes_on_format = false 71 | ij_sass_hex_color_long_format = false 72 | ij_sass_hex_color_lower_case = false 73 | ij_sass_hex_color_short_format = false 74 | ij_sass_hex_color_upper_case = false 75 | ij_sass_keep_blank_lines_in_code = 2 76 | ij_sass_keep_indents_on_empty_lines = false 77 | ij_sass_keep_single_line_blocks = false 78 | ij_sass_line_comment_add_space = false 79 | ij_sass_line_comment_at_first_column = false 80 | 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 81 | ij_sass_space_after_colon = true 82 | ij_sass_space_before_opening_brace = true 83 | ij_sass_use_double_quotes = true 84 | ij_sass_value_alignment = 0 85 | 86 | [*.scss] 87 | ij_scss_align_closing_brace_with_properties = false 88 | ij_scss_blank_lines_around_nested_selector = 1 89 | ij_scss_blank_lines_between_blocks = 1 90 | ij_scss_block_comment_add_space = false 91 | ij_scss_brace_placement = 0 92 | ij_scss_enforce_quotes_on_format = false 93 | ij_scss_hex_color_long_format = false 94 | ij_scss_hex_color_lower_case = false 95 | ij_scss_hex_color_short_format = false 96 | ij_scss_hex_color_upper_case = false 97 | ij_scss_keep_blank_lines_in_code = 2 98 | ij_scss_keep_indents_on_empty_lines = false 99 | ij_scss_keep_single_line_blocks = false 100 | ij_scss_line_comment_add_space = false 101 | ij_scss_line_comment_at_first_column = false 102 | 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 103 | ij_scss_space_after_colon = true 104 | ij_scss_space_before_opening_brace = true 105 | ij_scss_use_double_quotes = true 106 | ij_scss_value_alignment = 0 107 | 108 | [*.twig] 109 | ij_twig_keep_indents_on_empty_lines = false 110 | ij_twig_spaces_inside_comments_delimiters = true 111 | ij_twig_spaces_inside_delimiters = true 112 | ij_twig_spaces_inside_variable_delimiters = true 113 | 114 | [*.vue] 115 | ij_continuation_indent_size = 4 116 | ij_visual_guides = 175 117 | ij_vue_indent_children_of_top_level = template,script,style 118 | ij_vue_interpolation_new_line_after_start_delimiter = false 119 | ij_vue_interpolation_new_line_before_end_delimiter = false 120 | ij_vue_interpolation_wrap = off 121 | ij_vue_keep_indents_on_empty_lines = false 122 | ij_vue_spaces_within_interpolation_expressions = true 123 | 124 | [.editorconfig] 125 | ij_editorconfig_align_group_field_declarations = false 126 | ij_editorconfig_space_after_colon = false 127 | ij_editorconfig_space_after_comma = true 128 | ij_editorconfig_space_before_colon = false 129 | ij_editorconfig_space_before_comma = false 130 | ij_editorconfig_spaces_around_assignment_operators = true 131 | 132 | [{*.ant,*.fxml,*.jhm,*.jnlp,*.jrxml,*.rng,*.tld,*.wsdl,*.xml,*.xsd,*.xsl,*.xslt,*.xul,phpunit.xml.dist}] 133 | ij_xml_align_attributes = true 134 | ij_xml_align_text = false 135 | ij_xml_attribute_wrap = normal 136 | ij_xml_block_comment_add_space = false 137 | ij_xml_block_comment_at_first_column = true 138 | ij_xml_keep_blank_lines = 2 139 | ij_xml_keep_indents_on_empty_lines = false 140 | ij_xml_keep_line_breaks = true 141 | ij_xml_keep_line_breaks_in_text = true 142 | ij_xml_keep_whitespaces = false 143 | ij_xml_keep_whitespaces_around_cdata = preserve 144 | ij_xml_keep_whitespaces_inside_cdata = false 145 | ij_xml_line_comment_at_first_column = true 146 | ij_xml_space_after_tag_name = false 147 | ij_xml_space_around_equals_in_attribute = false 148 | ij_xml_space_inside_empty_tag = false 149 | ij_xml_text_wrap = normal 150 | 151 | [{*.ats,*.cts,*.mts,*.ts}] 152 | ij_continuation_indent_size = 4 153 | ij_visual_guides = 175 154 | ij_typescript_align_imports = false 155 | ij_typescript_align_multiline_array_initializer_expression = false 156 | ij_typescript_align_multiline_binary_operation = false 157 | ij_typescript_align_multiline_chained_methods = false 158 | ij_typescript_align_multiline_extends_list = false 159 | ij_typescript_align_multiline_for = true 160 | ij_typescript_align_multiline_parameters = true 161 | ij_typescript_align_multiline_parameters_in_calls = false 162 | ij_typescript_align_multiline_ternary_operation = false 163 | ij_typescript_align_object_properties = 0 164 | ij_typescript_align_union_types = false 165 | ij_typescript_align_var_statements = 0 166 | ij_typescript_array_initializer_new_line_after_left_brace = false 167 | ij_typescript_array_initializer_right_brace_on_new_line = false 168 | ij_typescript_array_initializer_wrap = off 169 | ij_typescript_assignment_wrap = off 170 | ij_typescript_binary_operation_sign_on_next_line = false 171 | ij_typescript_binary_operation_wrap = off 172 | ij_typescript_blacklist_imports = rxjs/Rx,node_modules/**,**/node_modules/**,@angular/material,@angular/material/typings/** 173 | ij_typescript_blank_lines_after_imports = 1 174 | ij_typescript_blank_lines_around_class = 1 175 | ij_typescript_blank_lines_around_field = 0 176 | ij_typescript_blank_lines_around_field_in_interface = 0 177 | ij_typescript_blank_lines_around_function = 1 178 | ij_typescript_blank_lines_around_method = 1 179 | ij_typescript_blank_lines_around_method_in_interface = 1 180 | ij_typescript_block_brace_style = end_of_line 181 | ij_typescript_block_comment_add_space = false 182 | ij_typescript_block_comment_at_first_column = true 183 | ij_typescript_call_parameters_new_line_after_left_paren = false 184 | ij_typescript_call_parameters_right_paren_on_new_line = false 185 | ij_typescript_call_parameters_wrap = off 186 | ij_typescript_catch_on_new_line = false 187 | ij_typescript_chained_call_dot_on_new_line = true 188 | ij_typescript_class_brace_style = end_of_line 189 | ij_typescript_comma_on_new_line = false 190 | ij_typescript_do_while_brace_force = never 191 | ij_typescript_else_on_new_line = false 192 | ij_typescript_enforce_trailing_comma = whenmultiline 193 | ij_typescript_enum_constants_wrap = on_every_item 194 | ij_typescript_extends_keyword_wrap = off 195 | ij_typescript_extends_list_wrap = off 196 | ij_typescript_field_prefix = _ 197 | ij_typescript_file_name_style = relaxed 198 | ij_typescript_finally_on_new_line = false 199 | ij_typescript_for_brace_force = never 200 | ij_typescript_for_statement_new_line_after_left_paren = false 201 | ij_typescript_for_statement_right_paren_on_new_line = false 202 | ij_typescript_for_statement_wrap = off 203 | ij_typescript_force_quote_style = true 204 | ij_typescript_force_semicolon_style = true 205 | ij_typescript_function_expression_brace_style = end_of_line 206 | ij_typescript_if_brace_force = never 207 | ij_typescript_import_merge_members = global 208 | ij_typescript_import_prefer_absolute_path = global 209 | ij_typescript_import_sort_members = true 210 | ij_typescript_import_sort_module_name = false 211 | ij_typescript_import_use_node_resolution = true 212 | ij_typescript_imports_wrap = on_every_item 213 | ij_typescript_indent_case_from_switch = true 214 | ij_typescript_indent_chained_calls = true 215 | ij_typescript_indent_package_children = 0 216 | ij_typescript_jsdoc_include_types = false 217 | ij_typescript_jsx_attribute_value = braces 218 | ij_typescript_keep_blank_lines_in_code = 2 219 | ij_typescript_keep_first_column_comment = true 220 | ij_typescript_keep_indents_on_empty_lines = false 221 | ij_typescript_keep_line_breaks = true 222 | ij_typescript_keep_simple_blocks_in_one_line = false 223 | ij_typescript_keep_simple_methods_in_one_line = false 224 | ij_typescript_line_comment_add_space = true 225 | ij_typescript_line_comment_at_first_column = false 226 | ij_typescript_method_brace_style = end_of_line 227 | ij_typescript_method_call_chain_wrap = off 228 | ij_typescript_method_parameters_new_line_after_left_paren = false 229 | ij_typescript_method_parameters_right_paren_on_new_line = false 230 | ij_typescript_method_parameters_wrap = off 231 | ij_typescript_object_literal_wrap = on_every_item 232 | ij_typescript_object_types_wrap = on_every_item 233 | ij_typescript_parentheses_expression_new_line_after_left_paren = false 234 | ij_typescript_parentheses_expression_right_paren_on_new_line = false 235 | ij_typescript_place_assignment_sign_on_next_line = false 236 | ij_typescript_prefer_as_type_cast = false 237 | ij_typescript_prefer_explicit_types_function_expression_returns = false 238 | ij_typescript_prefer_explicit_types_function_returns = false 239 | ij_typescript_prefer_explicit_types_vars_fields = false 240 | ij_typescript_prefer_parameters_wrap = false 241 | ij_typescript_property_prefix = 242 | ij_typescript_reformat_c_style_comments = false 243 | ij_typescript_space_after_colon = true 244 | ij_typescript_space_after_comma = true 245 | ij_typescript_space_after_dots_in_rest_parameter = false 246 | ij_typescript_space_after_generator_mult = true 247 | ij_typescript_space_after_property_colon = true 248 | ij_typescript_space_after_quest = true 249 | ij_typescript_space_after_type_colon = true 250 | ij_typescript_space_after_unary_not = false 251 | ij_typescript_space_before_async_arrow_lparen = true 252 | ij_typescript_space_before_catch_keyword = true 253 | ij_typescript_space_before_catch_left_brace = true 254 | ij_typescript_space_before_catch_parentheses = true 255 | ij_typescript_space_before_class_lbrace = true 256 | ij_typescript_space_before_class_left_brace = true 257 | ij_typescript_space_before_colon = true 258 | ij_typescript_space_before_comma = false 259 | ij_typescript_space_before_do_left_brace = true 260 | ij_typescript_space_before_else_keyword = true 261 | ij_typescript_space_before_else_left_brace = true 262 | ij_typescript_space_before_finally_keyword = true 263 | ij_typescript_space_before_finally_left_brace = true 264 | ij_typescript_space_before_for_left_brace = true 265 | ij_typescript_space_before_for_parentheses = true 266 | ij_typescript_space_before_for_semicolon = false 267 | ij_typescript_space_before_function_left_parenth = false 268 | ij_typescript_space_before_generator_mult = false 269 | ij_typescript_space_before_if_left_brace = true 270 | ij_typescript_space_before_if_parentheses = true 271 | ij_typescript_space_before_method_call_parentheses = false 272 | ij_typescript_space_before_method_left_brace = true 273 | ij_typescript_space_before_method_parentheses = false 274 | ij_typescript_space_before_property_colon = false 275 | ij_typescript_space_before_quest = true 276 | ij_typescript_space_before_switch_left_brace = true 277 | ij_typescript_space_before_switch_parentheses = true 278 | ij_typescript_space_before_try_left_brace = true 279 | ij_typescript_space_before_type_colon = false 280 | ij_typescript_space_before_unary_not = false 281 | ij_typescript_space_before_while_keyword = true 282 | ij_typescript_space_before_while_left_brace = true 283 | ij_typescript_space_before_while_parentheses = true 284 | ij_typescript_spaces_around_additive_operators = true 285 | ij_typescript_spaces_around_arrow_function_operator = true 286 | ij_typescript_spaces_around_assignment_operators = true 287 | ij_typescript_spaces_around_bitwise_operators = true 288 | ij_typescript_spaces_around_equality_operators = true 289 | ij_typescript_spaces_around_logical_operators = true 290 | ij_typescript_spaces_around_multiplicative_operators = true 291 | ij_typescript_spaces_around_relational_operators = true 292 | ij_typescript_spaces_around_shift_operators = true 293 | ij_typescript_spaces_around_unary_operator = false 294 | ij_typescript_spaces_within_array_initializer_brackets = false 295 | ij_typescript_spaces_within_brackets = false 296 | ij_typescript_spaces_within_catch_parentheses = false 297 | ij_typescript_spaces_within_for_parentheses = false 298 | ij_typescript_spaces_within_if_parentheses = false 299 | ij_typescript_spaces_within_imports = false 300 | ij_typescript_spaces_within_interpolation_expressions = false 301 | ij_typescript_spaces_within_method_call_parentheses = false 302 | ij_typescript_spaces_within_method_parentheses = false 303 | ij_typescript_spaces_within_object_literal_braces = false 304 | ij_typescript_spaces_within_object_type_braces = false 305 | ij_typescript_spaces_within_parentheses = false 306 | ij_typescript_spaces_within_switch_parentheses = false 307 | ij_typescript_spaces_within_type_assertion = false 308 | ij_typescript_spaces_within_union_types = true 309 | ij_typescript_spaces_within_while_parentheses = false 310 | ij_typescript_special_else_if_treatment = true 311 | ij_typescript_ternary_operation_signs_on_next_line = false 312 | ij_typescript_ternary_operation_wrap = off 313 | ij_typescript_union_types_wrap = on_every_item 314 | ij_typescript_use_chained_calls_group_indents = false 315 | ij_typescript_use_double_quotes = false 316 | ij_typescript_use_explicit_js_extension = auto 317 | ij_typescript_use_path_mapping = always 318 | ij_typescript_use_public_modifier = false 319 | ij_typescript_use_semicolon_after_statement = true 320 | ij_typescript_var_declaration_wrap = normal 321 | ij_typescript_while_brace_force = never 322 | ij_typescript_while_on_new_line = false 323 | ij_typescript_wrap_comments = false 324 | 325 | [{*.bash,*.sh,*.zsh}] 326 | indent_size = 2 327 | tab_width = 2 328 | ij_shell_binary_ops_start_line = false 329 | ij_shell_keep_column_alignment_padding = false 330 | ij_shell_minify_program = false 331 | ij_shell_redirect_followed_by_space = false 332 | ij_shell_switch_cases_indented = false 333 | ij_shell_use_unix_line_separator = true 334 | 335 | [{*.cjs,*.js}] 336 | ij_continuation_indent_size = 4 337 | ij_visual_guides = 175 338 | ij_javascript_align_imports = false 339 | ij_javascript_align_multiline_array_initializer_expression = false 340 | ij_javascript_align_multiline_binary_operation = false 341 | ij_javascript_align_multiline_chained_methods = false 342 | ij_javascript_align_multiline_extends_list = false 343 | ij_javascript_align_multiline_for = true 344 | ij_javascript_align_multiline_parameters = true 345 | ij_javascript_align_multiline_parameters_in_calls = false 346 | ij_javascript_align_multiline_ternary_operation = false 347 | ij_javascript_align_object_properties = 1 348 | ij_javascript_align_union_types = false 349 | ij_javascript_align_var_statements = 2 350 | ij_javascript_array_initializer_new_line_after_left_brace = false 351 | ij_javascript_array_initializer_right_brace_on_new_line = false 352 | ij_javascript_array_initializer_wrap = off 353 | ij_javascript_assignment_wrap = off 354 | ij_javascript_binary_operation_sign_on_next_line = false 355 | ij_javascript_binary_operation_wrap = off 356 | ij_javascript_blacklist_imports = rxjs/Rx,node_modules/**,**/node_modules/**,@angular/material,@angular/material/typings/** 357 | ij_javascript_blank_lines_after_imports = 1 358 | ij_javascript_blank_lines_around_class = 1 359 | ij_javascript_blank_lines_around_field = 0 360 | ij_javascript_blank_lines_around_function = 1 361 | ij_javascript_blank_lines_around_method = 1 362 | ij_javascript_block_brace_style = end_of_line 363 | ij_javascript_block_comment_add_space = false 364 | ij_javascript_block_comment_at_first_column = true 365 | ij_javascript_call_parameters_new_line_after_left_paren = false 366 | ij_javascript_call_parameters_right_paren_on_new_line = false 367 | ij_javascript_call_parameters_wrap = off 368 | ij_javascript_catch_on_new_line = false 369 | ij_javascript_chained_call_dot_on_new_line = true 370 | ij_javascript_class_brace_style = end_of_line 371 | ij_javascript_comma_on_new_line = false 372 | ij_javascript_do_while_brace_force = never 373 | ij_javascript_else_on_new_line = false 374 | ij_javascript_enforce_trailing_comma = whenmultiline 375 | ij_javascript_extends_keyword_wrap = off 376 | ij_javascript_extends_list_wrap = off 377 | ij_javascript_field_prefix = _ 378 | ij_javascript_file_name_style = relaxed 379 | ij_javascript_finally_on_new_line = false 380 | ij_javascript_for_brace_force = never 381 | ij_javascript_for_statement_new_line_after_left_paren = false 382 | ij_javascript_for_statement_right_paren_on_new_line = false 383 | ij_javascript_for_statement_wrap = off 384 | ij_javascript_force_quote_style = true 385 | ij_javascript_force_semicolon_style = true 386 | ij_javascript_function_expression_brace_style = end_of_line 387 | ij_javascript_if_brace_force = never 388 | ij_javascript_import_merge_members = global 389 | ij_javascript_import_prefer_absolute_path = global 390 | ij_javascript_import_sort_members = true 391 | ij_javascript_import_sort_module_name = false 392 | ij_javascript_import_use_node_resolution = true 393 | ij_javascript_imports_wrap = on_every_item 394 | ij_javascript_indent_case_from_switch = true 395 | ij_javascript_indent_chained_calls = true 396 | ij_javascript_indent_package_children = 0 397 | ij_javascript_jsx_attribute_value = braces 398 | ij_javascript_keep_blank_lines_in_code = 2 399 | ij_javascript_keep_first_column_comment = true 400 | ij_javascript_keep_indents_on_empty_lines = false 401 | ij_javascript_keep_line_breaks = true 402 | ij_javascript_keep_simple_blocks_in_one_line = false 403 | ij_javascript_keep_simple_methods_in_one_line = false 404 | ij_javascript_line_comment_add_space = true 405 | ij_javascript_line_comment_at_first_column = false 406 | ij_javascript_method_brace_style = end_of_line 407 | ij_javascript_method_call_chain_wrap = off 408 | ij_javascript_method_parameters_new_line_after_left_paren = false 409 | ij_javascript_method_parameters_right_paren_on_new_line = false 410 | ij_javascript_method_parameters_wrap = off 411 | ij_javascript_object_literal_wrap = on_every_item 412 | ij_javascript_object_types_wrap = on_every_item 413 | ij_javascript_parentheses_expression_new_line_after_left_paren = false 414 | ij_javascript_parentheses_expression_right_paren_on_new_line = false 415 | ij_javascript_place_assignment_sign_on_next_line = false 416 | ij_javascript_prefer_as_type_cast = false 417 | ij_javascript_prefer_explicit_types_function_expression_returns = false 418 | ij_javascript_prefer_explicit_types_function_returns = false 419 | ij_javascript_prefer_explicit_types_vars_fields = false 420 | ij_javascript_prefer_parameters_wrap = false 421 | ij_javascript_property_prefix = 422 | ij_javascript_reformat_c_style_comments = false 423 | ij_javascript_space_after_colon = true 424 | ij_javascript_space_after_comma = true 425 | ij_javascript_space_after_dots_in_rest_parameter = false 426 | ij_javascript_space_after_generator_mult = true 427 | ij_javascript_space_after_property_colon = true 428 | ij_javascript_space_after_quest = true 429 | ij_javascript_space_after_type_colon = true 430 | ij_javascript_space_after_unary_not = false 431 | ij_javascript_space_before_async_arrow_lparen = true 432 | ij_javascript_space_before_catch_keyword = true 433 | ij_javascript_space_before_catch_left_brace = true 434 | ij_javascript_space_before_catch_parentheses = true 435 | ij_javascript_space_before_class_lbrace = true 436 | ij_javascript_space_before_class_left_brace = true 437 | ij_javascript_space_before_colon = true 438 | ij_javascript_space_before_comma = false 439 | ij_javascript_space_before_do_left_brace = true 440 | ij_javascript_space_before_else_keyword = true 441 | ij_javascript_space_before_else_left_brace = true 442 | ij_javascript_space_before_finally_keyword = true 443 | ij_javascript_space_before_finally_left_brace = true 444 | ij_javascript_space_before_for_left_brace = true 445 | ij_javascript_space_before_for_parentheses = true 446 | ij_javascript_space_before_for_semicolon = false 447 | ij_javascript_space_before_function_left_parenth = false 448 | ij_javascript_space_before_generator_mult = false 449 | ij_javascript_space_before_if_left_brace = true 450 | ij_javascript_space_before_if_parentheses = true 451 | ij_javascript_space_before_method_call_parentheses = false 452 | ij_javascript_space_before_method_left_brace = true 453 | ij_javascript_space_before_method_parentheses = false 454 | ij_javascript_space_before_property_colon = false 455 | ij_javascript_space_before_quest = true 456 | ij_javascript_space_before_switch_left_brace = true 457 | ij_javascript_space_before_switch_parentheses = true 458 | ij_javascript_space_before_try_left_brace = true 459 | ij_javascript_space_before_type_colon = false 460 | ij_javascript_space_before_unary_not = false 461 | ij_javascript_space_before_while_keyword = true 462 | ij_javascript_space_before_while_left_brace = true 463 | ij_javascript_space_before_while_parentheses = true 464 | ij_javascript_spaces_around_additive_operators = true 465 | ij_javascript_spaces_around_arrow_function_operator = true 466 | ij_javascript_spaces_around_assignment_operators = true 467 | ij_javascript_spaces_around_bitwise_operators = true 468 | ij_javascript_spaces_around_equality_operators = true 469 | ij_javascript_spaces_around_logical_operators = true 470 | ij_javascript_spaces_around_multiplicative_operators = true 471 | ij_javascript_spaces_around_relational_operators = true 472 | ij_javascript_spaces_around_shift_operators = true 473 | ij_javascript_spaces_around_unary_operator = false 474 | ij_javascript_spaces_within_array_initializer_brackets = false 475 | ij_javascript_spaces_within_brackets = false 476 | ij_javascript_spaces_within_catch_parentheses = false 477 | ij_javascript_spaces_within_for_parentheses = false 478 | ij_javascript_spaces_within_if_parentheses = false 479 | ij_javascript_spaces_within_imports = false 480 | ij_javascript_spaces_within_interpolation_expressions = false 481 | ij_javascript_spaces_within_method_call_parentheses = false 482 | ij_javascript_spaces_within_method_parentheses = false 483 | ij_javascript_spaces_within_object_literal_braces = false 484 | ij_javascript_spaces_within_object_type_braces = false 485 | ij_javascript_spaces_within_parentheses = false 486 | ij_javascript_spaces_within_switch_parentheses = false 487 | ij_javascript_spaces_within_type_assertion = false 488 | ij_javascript_spaces_within_union_types = true 489 | ij_javascript_spaces_within_while_parentheses = false 490 | ij_javascript_special_else_if_treatment = true 491 | ij_javascript_ternary_operation_signs_on_next_line = false 492 | ij_javascript_ternary_operation_wrap = off 493 | ij_javascript_union_types_wrap = on_every_item 494 | ij_javascript_use_chained_calls_group_indents = false 495 | ij_javascript_use_double_quotes = false 496 | ij_javascript_use_explicit_js_extension = auto 497 | ij_javascript_use_path_mapping = always 498 | ij_javascript_use_public_modifier = false 499 | ij_javascript_use_semicolon_after_statement = true 500 | ij_javascript_var_declaration_wrap = normal 501 | ij_javascript_while_brace_force = never 502 | ij_javascript_while_on_new_line = false 503 | ij_javascript_wrap_comments = false 504 | 505 | [{*.ctp,*.hphp,*.inc,*.module,*.php,*.php4,*.php5,*.phtml,*.stub,.php_cs}] 506 | max_line_length = 500 507 | ij_continuation_indent_size = 4 508 | ij_smart_tabs = true 509 | ij_php_align_assignments = true 510 | ij_php_align_class_constants = true 511 | ij_php_align_enum_cases = true 512 | ij_php_align_group_field_declarations = true 513 | ij_php_align_inline_comments = true 514 | ij_php_align_key_value_pairs = true 515 | ij_php_align_match_arm_bodies = true 516 | ij_php_align_multiline_array_initializer_expression = true 517 | ij_php_align_multiline_binary_operation = true 518 | ij_php_align_multiline_chained_methods = true 519 | ij_php_align_multiline_extends_list = true 520 | ij_php_align_multiline_for = false 521 | ij_php_align_multiline_parameters = false 522 | ij_php_align_multiline_parameters_in_calls = false 523 | ij_php_align_multiline_ternary_operation = true 524 | ij_php_align_named_arguments = false 525 | ij_php_align_phpdoc_comments = true 526 | ij_php_align_phpdoc_param_names = true 527 | ij_php_anonymous_brace_style = next_line 528 | ij_php_api_weight = 28 529 | ij_php_array_initializer_new_line_after_left_brace = true 530 | ij_php_array_initializer_right_brace_on_new_line = true 531 | ij_php_array_initializer_wrap = on_every_item 532 | ij_php_assignment_wrap = off 533 | ij_php_attributes_wrap = off 534 | ij_php_author_weight = 28 535 | ij_php_binary_operation_sign_on_next_line = false 536 | ij_php_binary_operation_wrap = off 537 | ij_php_blank_lines_after_class_header = 0 538 | ij_php_blank_lines_after_function = 1 539 | ij_php_blank_lines_after_imports = 1 540 | ij_php_blank_lines_after_opening_tag = 0 541 | ij_php_blank_lines_after_package = 1 542 | ij_php_blank_lines_around_class = 1 543 | ij_php_blank_lines_around_constants = 0 544 | ij_php_blank_lines_around_enum_cases = 0 545 | ij_php_blank_lines_around_field = 0 546 | ij_php_blank_lines_around_method = 0 547 | ij_php_blank_lines_before_class_end = 0 548 | ij_php_blank_lines_before_imports = 1 549 | ij_php_blank_lines_before_method_body = 0 550 | ij_php_blank_lines_before_package = 1 551 | ij_php_blank_lines_before_return_statement = 0 552 | ij_php_blank_lines_between_imports = 0 553 | ij_php_block_brace_style = end_of_line 554 | ij_php_call_parameters_new_line_after_left_paren = false 555 | ij_php_call_parameters_right_paren_on_new_line = false 556 | ij_php_call_parameters_wrap = normal 557 | ij_php_catch_on_new_line = false 558 | ij_php_category_weight = 28 559 | ij_php_class_brace_style = next_line 560 | ij_php_comma_after_last_argument = true 561 | ij_php_comma_after_last_array_element = true 562 | ij_php_comma_after_last_closure_use_var = true 563 | ij_php_comma_after_last_match_arm = true 564 | ij_php_comma_after_last_parameter = true 565 | ij_php_concat_spaces = true 566 | ij_php_copyright_weight = 28 567 | ij_php_deprecated_weight = 28 568 | ij_php_do_while_brace_force = always 569 | ij_php_else_if_style = combine 570 | ij_php_else_on_new_line = false 571 | ij_php_example_weight = 28 572 | ij_php_extends_keyword_wrap = off 573 | ij_php_extends_list_wrap = off 574 | ij_php_fields_default_visibility = private 575 | ij_php_filesource_weight = 28 576 | ij_php_finally_on_new_line = false 577 | ij_php_for_brace_force = always 578 | ij_php_for_statement_new_line_after_left_paren = true 579 | ij_php_for_statement_right_paren_on_new_line = true 580 | ij_php_for_statement_wrap = off 581 | ij_php_force_empty_methods_in_one_line = true 582 | ij_php_force_short_declaration_array_style = true 583 | ij_php_getters_setters_naming_style = camel_case 584 | ij_php_getters_setters_order_style = getters_first 585 | ij_php_global_weight = 28 586 | ij_php_group_use_wrap = on_every_item 587 | ij_php_if_brace_force = always 588 | ij_php_if_lparen_on_next_line = false 589 | ij_php_if_rparen_on_next_line = false 590 | ij_php_ignore_weight = 28 591 | ij_php_import_sorting = by_length 592 | ij_php_indent_break_from_case = true 593 | ij_php_indent_case_from_switch = true 594 | ij_php_indent_code_in_php_tags = false 595 | ij_php_internal_weight = 28 596 | ij_php_keep_blank_lines_after_lbrace = 2 597 | ij_php_keep_blank_lines_before_right_brace = 1 598 | ij_php_keep_blank_lines_in_code = 2 599 | ij_php_keep_blank_lines_in_declarations = 2 600 | ij_php_keep_control_statement_in_one_line = false 601 | ij_php_keep_first_column_comment = true 602 | ij_php_keep_indents_on_empty_lines = false 603 | ij_php_keep_line_breaks = true 604 | ij_php_keep_rparen_and_lbrace_on_one_line = true 605 | ij_php_keep_simple_classes_in_one_line = false 606 | ij_php_keep_simple_methods_in_one_line = false 607 | ij_php_lambda_brace_style = end_of_line 608 | ij_php_license_weight = 28 609 | ij_php_line_comment_add_space = false 610 | ij_php_line_comment_at_first_column = true 611 | ij_php_link_weight = 28 612 | ij_php_lower_case_boolean_const = true 613 | ij_php_lower_case_keywords = true 614 | ij_php_lower_case_null_const = true 615 | ij_php_method_brace_style = next_line 616 | ij_php_method_call_chain_wrap = off 617 | ij_php_method_parameters_new_line_after_left_paren = true 618 | ij_php_method_parameters_right_paren_on_new_line = true 619 | ij_php_method_parameters_wrap = on_every_item 620 | ij_php_method_weight = 28 621 | ij_php_modifier_list_wrap = false 622 | ij_php_multiline_chained_calls_semicolon_on_new_line = false 623 | ij_php_namespace_brace_style = 1 624 | ij_php_new_line_after_php_opening_tag = true 625 | ij_php_null_type_position = in_the_end 626 | ij_php_package_weight = 28 627 | ij_php_param_weight = 0 628 | ij_php_parameters_attributes_wrap = off 629 | ij_php_parentheses_expression_new_line_after_left_paren = true 630 | ij_php_parentheses_expression_right_paren_on_new_line = true 631 | ij_php_phpdoc_blank_line_before_tags = false 632 | ij_php_phpdoc_blank_lines_around_parameters = true 633 | ij_php_phpdoc_keep_blank_lines = true 634 | ij_php_phpdoc_param_spaces_between_name_and_description = 1 635 | ij_php_phpdoc_param_spaces_between_tag_and_type = 1 636 | ij_php_phpdoc_param_spaces_between_type_and_name = 1 637 | ij_php_phpdoc_use_fqcn = true 638 | ij_php_phpdoc_wrap_long_lines = true 639 | ij_php_place_assignment_sign_on_next_line = false 640 | ij_php_place_parens_for_constructor = 0 641 | ij_php_property_read_weight = 28 642 | ij_php_property_weight = 28 643 | ij_php_property_write_weight = 28 644 | ij_php_return_type_on_new_line = false 645 | ij_php_return_weight = 2 646 | ij_php_see_weight = 28 647 | ij_php_since_weight = 28 648 | ij_php_sort_phpdoc_elements = true 649 | ij_php_space_after_colon = true 650 | ij_php_space_after_colon_in_enum_backed_type = true 651 | ij_php_space_after_colon_in_named_argument = true 652 | ij_php_space_after_colon_in_return_type = true 653 | ij_php_space_after_comma = true 654 | ij_php_space_after_for_semicolon = true 655 | ij_php_space_after_quest = true 656 | ij_php_space_after_type_cast = false 657 | ij_php_space_after_unary_not = false 658 | ij_php_space_before_array_initializer_left_brace = false 659 | ij_php_space_before_catch_keyword = true 660 | ij_php_space_before_catch_left_brace = true 661 | ij_php_space_before_catch_parentheses = true 662 | ij_php_space_before_class_left_brace = true 663 | ij_php_space_before_closure_left_parenthesis = true 664 | ij_php_space_before_colon = true 665 | ij_php_space_before_colon_in_enum_backed_type = false 666 | ij_php_space_before_colon_in_named_argument = false 667 | ij_php_space_before_colon_in_return_type = false 668 | ij_php_space_before_comma = false 669 | ij_php_space_before_do_left_brace = true 670 | ij_php_space_before_else_keyword = true 671 | ij_php_space_before_else_left_brace = true 672 | ij_php_space_before_finally_keyword = true 673 | ij_php_space_before_finally_left_brace = true 674 | ij_php_space_before_for_left_brace = true 675 | ij_php_space_before_for_parentheses = true 676 | ij_php_space_before_for_semicolon = false 677 | ij_php_space_before_if_left_brace = true 678 | ij_php_space_before_if_parentheses = true 679 | ij_php_space_before_method_call_parentheses = false 680 | ij_php_space_before_method_left_brace = true 681 | ij_php_space_before_method_parentheses = false 682 | ij_php_space_before_quest = true 683 | ij_php_space_before_short_closure_left_parenthesis = true 684 | ij_php_space_before_switch_left_brace = true 685 | ij_php_space_before_switch_parentheses = true 686 | ij_php_space_before_try_left_brace = true 687 | ij_php_space_before_unary_not = false 688 | ij_php_space_before_while_keyword = true 689 | ij_php_space_before_while_left_brace = true 690 | ij_php_space_before_while_parentheses = true 691 | ij_php_space_between_ternary_quest_and_colon = false 692 | ij_php_spaces_around_additive_operators = true 693 | ij_php_spaces_around_arrow = false 694 | ij_php_spaces_around_assignment_in_declare = false 695 | ij_php_spaces_around_assignment_operators = true 696 | ij_php_spaces_around_bitwise_operators = true 697 | ij_php_spaces_around_equality_operators = true 698 | ij_php_spaces_around_logical_operators = true 699 | ij_php_spaces_around_multiplicative_operators = true 700 | ij_php_spaces_around_null_coalesce_operator = true 701 | ij_php_spaces_around_pipe_in_union_type = false 702 | ij_php_spaces_around_relational_operators = true 703 | ij_php_spaces_around_shift_operators = true 704 | ij_php_spaces_around_unary_operator = false 705 | ij_php_spaces_around_var_within_brackets = false 706 | ij_php_spaces_within_array_initializer_braces = false 707 | ij_php_spaces_within_brackets = false 708 | ij_php_spaces_within_catch_parentheses = false 709 | ij_php_spaces_within_for_parentheses = false 710 | ij_php_spaces_within_if_parentheses = false 711 | ij_php_spaces_within_method_call_parentheses = false 712 | ij_php_spaces_within_method_parentheses = false 713 | ij_php_spaces_within_parentheses = false 714 | ij_php_spaces_within_short_echo_tags = true 715 | ij_php_spaces_within_switch_parentheses = false 716 | ij_php_spaces_within_while_parentheses = false 717 | ij_php_special_else_if_treatment = true 718 | ij_php_subpackage_weight = 28 719 | ij_php_ternary_operation_signs_on_next_line = false 720 | ij_php_ternary_operation_wrap = off 721 | ij_php_throws_weight = 1 722 | ij_php_todo_weight = 28 723 | ij_php_treat_multiline_arrays_and_lambdas_multiline = false 724 | ij_php_unknown_tag_weight = 28 725 | ij_php_upper_case_boolean_const = false 726 | ij_php_upper_case_null_const = false 727 | ij_php_uses_weight = 28 728 | ij_php_var_weight = 28 729 | ij_php_variable_naming_style = camel_case 730 | ij_php_version_weight = 28 731 | ij_php_while_brace_force = always 732 | ij_php_while_on_new_line = false 733 | 734 | [{*.graphqlconfig,*.graphqlrc,*.har,*.jsb2,*.jsb3,*.json,.babelrc,.eslintrc,.stylelintrc,bowerrc,composer.lock,jest.config}] 735 | ij_json_array_wrapping = split_into_lines 736 | ij_json_keep_blank_lines_in_code = 0 737 | ij_json_keep_indents_on_empty_lines = false 738 | ij_json_keep_line_breaks = true 739 | ij_json_keep_trailing_comma = false 740 | ij_json_object_wrapping = split_into_lines 741 | ij_json_property_alignment = do_not_align 742 | ij_json_space_after_colon = true 743 | ij_json_space_after_comma = true 744 | ij_json_space_before_colon = false 745 | ij_json_space_before_comma = false 746 | ij_json_spaces_within_braces = false 747 | ij_json_spaces_within_brackets = false 748 | ij_json_wrap_long_lines = false 749 | 750 | [{*.htm,*.html,*.html.bin,*.ng,*.sht,*.shtm,*.shtml}] 751 | ij_continuation_indent_size = 4 752 | ij_visual_guides = 175 753 | ij_html_add_new_line_before_tags = body,div,p,form,h1,h2,h3 754 | ij_html_align_attributes = true 755 | ij_html_align_text = false 756 | ij_html_attribute_wrap = normal 757 | ij_html_block_comment_add_space = false 758 | ij_html_block_comment_at_first_column = true 759 | ij_html_do_not_align_children_of_min_lines = 0 760 | ij_html_do_not_break_if_inline_tags = title,h1,h2,h3,h4,h5,h6,p 761 | ij_html_do_not_indent_children_of_tags = 762 | ij_html_enforce_quotes = true 763 | 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 764 | ij_html_keep_blank_lines = 2 765 | ij_html_keep_indents_on_empty_lines = false 766 | ij_html_keep_line_breaks = true 767 | ij_html_keep_line_breaks_in_text = true 768 | ij_html_keep_whitespaces = false 769 | ij_html_keep_whitespaces_inside = span,pre,textarea 770 | ij_html_line_comment_at_first_column = true 771 | ij_html_new_line_after_last_attribute = never 772 | ij_html_new_line_before_first_attribute = never 773 | ij_html_quote_style = double 774 | ij_html_remove_new_line_before_tags = br 775 | ij_html_space_after_tag_name = false 776 | ij_html_space_around_equality_in_attribute = false 777 | ij_html_space_inside_empty_tag = true 778 | ij_html_text_wrap = normal 779 | 780 | [{*.http,*.rest}] 781 | indent_size = 0 782 | ij_continuation_indent_size = 4 783 | ij_http-request_call_parameters_wrap = normal 784 | ij_http-request_method_parameters_wrap = split_into_lines 785 | ij_http-request_space_before_comma = true 786 | ij_http-request_spaces_around_assignment_operators = true 787 | 788 | [{*.markdown,*.md}] 789 | ij_markdown_force_one_space_after_blockquote_symbol = true 790 | ij_markdown_force_one_space_after_header_symbol = true 791 | ij_markdown_force_one_space_after_list_bullet = true 792 | ij_markdown_force_one_space_between_words = true 793 | ij_markdown_format_tables = true 794 | ij_markdown_insert_quote_arrows_on_wrap = true 795 | ij_markdown_keep_indents_on_empty_lines = false 796 | ij_markdown_keep_line_breaks_inside_text_blocks = true 797 | ij_markdown_max_lines_around_block_elements = 1 798 | ij_markdown_max_lines_around_header = 1 799 | ij_markdown_max_lines_between_paragraphs = 1 800 | ij_markdown_min_lines_around_block_elements = 1 801 | ij_markdown_min_lines_around_header = 1 802 | ij_markdown_min_lines_between_paragraphs = 1 803 | ij_markdown_wrap_text_if_long = true 804 | ij_markdown_wrap_text_inside_blockquotes = true 805 | 806 | [{*.toml,Cargo.lock,Cargo.toml.orig,Gopkg.lock,Pipfile,poetry.lock}] 807 | ij_toml_keep_indents_on_empty_lines = false 808 | 809 | [{*.yaml,*.yml}] 810 | indent_size = 2 811 | ij_yaml_align_values_properties = do_not_align 812 | ij_yaml_autoinsert_sequence_marker = true 813 | ij_yaml_block_mapping_on_new_line = false 814 | ij_yaml_indent_sequence_value = true 815 | ij_yaml_keep_indents_on_empty_lines = false 816 | ij_yaml_keep_line_breaks = true 817 | ij_yaml_sequence_on_new_line = false 818 | ij_yaml_space_before_colon = false 819 | ij_yaml_spaces_within_braces = true 820 | ij_yaml_spaces_within_brackets = true 821 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2022 Alex Bouma 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Laravel Passport Memoized 2 | 3 | [![Latest Version](https://img.shields.io/github/release/stayallive/laravel-passport-memoized.svg?style=flat-square)](https://github.com/stayallive/laravel-passport-memoized/releases) 4 | [![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md) 5 | [![Build Status](https://img.shields.io/github/actions/workflow/status/stayallive/laravel-passport-memoized/ci.yaml?branch=master&style=flat-square)](https://github.com/stayallive/laravel-passport-memoized/actions/workflows/ci.yaml) 6 | [![Total Downloads](https://img.shields.io/packagist/dt/stayallive/laravel-passport-memoized.svg?style=flat-square)](https://packagist.org/packages/stayallive/laravel-passport-memoized) 7 | 8 | [Laravel Passport](https://github.com/laravel/passport) comes with repositories for the underlying [oauth2-server](https://github.com/thephpleague/oauth2-server) that result in 9 | multiple queries to retrieve the same exact object from the database in a single request. With a good database engine this will have a small impact in the range of 10 | milliseconds but this is still unacceptable and should be avoided if possible. 11 | 12 | With a typical Passport token authenticated request you will see that the token is retrieved 3 times and the client is retrieved twice. 13 | 14 | This might be patched in future [Laravel Passport](https://github.com/laravel/passport) releases, but until that time you can install this package. 15 | 16 | This package replaces the client and token repositories with ones that memoize the results of certain calls that perform database queries to remove the duplicate queries. 17 | 18 | It's safe to use with [Laravel Octane](https://github.com/laravel/octane) since we make sure that the memoize cache is cleared after each request to prevent stale caches. 19 | 20 | ## Why a package? 21 | 22 | And not a PR to [Laravel Passport](https://github.com/laravel/passport)? This was [attempted](https://github.com/laravel/passport/pull/1433) (although not a perfect solution yet) in the past but it was decided to not be changed so this package was created as an alternative. See also [this](https://github.com/laravel/passport/issues/382) pinned issue for more information and [another package](https://github.com/overtrue/laravel-passport-cache-token) if you are looking for an alternative solution. 23 | 24 | ## Installation 25 | 26 | ```bash 27 | composer require stayallive/laravel-passport-memoized 28 | ``` 29 | 30 | ## Usage 31 | 32 | You should only have to install this package to benefit, unless you have disable package auto discovery, in that case you will need to add the service provider to 33 | your `config/app.php` manually. 34 | 35 | ## Security Vulnerabilities 36 | 37 | If you discover a security vulnerability within this package, please send an e-mail to Alex Bouma at `alex+security@bouma.me`. All security vulnerabilities will be swiftly 38 | addressed. 39 | 40 | ## License 41 | 42 | This package is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT). 43 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stayallive/laravel-passport-memoized", 3 | "type": "library", 4 | "description": "Laravel Passport memoized repositories.", 5 | "keywords": [ 6 | "laravel", 7 | "passport", 8 | "memoized" 9 | ], 10 | "homepage": "https://github.com/stayallive/laravel-passport-memoized", 11 | "license": "MIT", 12 | "authors": [ 13 | { 14 | "name": "Alex Bouma", 15 | "email": "alex@bouma.me" 16 | } 17 | ], 18 | "require": { 19 | "php": "^8.0.2", 20 | "laravel/framework": "^9|^10|^11|^12", 21 | "laravel/passport": "^10|^11|^12" 22 | }, 23 | "autoload": { 24 | "psr-4": { 25 | "Stayallive\\Laravel\\Passport\\Memoized\\": "src/" 26 | } 27 | }, 28 | "extra": { 29 | "laravel": { 30 | "providers": [ 31 | "Stayallive\\Laravel\\Passport\\Memoized\\ServiceProvider" 32 | ] 33 | } 34 | }, 35 | "require-dev": { 36 | "friendsofphp/php-cs-fixer": "^3.14", 37 | "laravel/octane": "^1.2|^2", 38 | "orchestra/testbench": "^8|^9|^10", 39 | "phpunit/phpunit": "^10|^11" 40 | }, 41 | "autoload-dev": { 42 | "psr-4": { 43 | "Tests\\": "tests/" 44 | } 45 | }, 46 | "scripts": { 47 | "test": "vendor/bin/phpunit --stop-on-failure", 48 | "test:ci": "vendor/bin/phpunit", 49 | "phpcs": "vendor/bin/php-cs-fixer fix", 50 | "phpcs:ci": "vendor/bin/php-cs-fixer fix --dry-run --diff" 51 | }, 52 | "config": { 53 | "sort-packages": true, 54 | "preferred-install": "dist", 55 | "optimize-autoloader": true 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/MemoizedClientRepository.php: -------------------------------------------------------------------------------- 1 | cache[$id])) { 15 | $this->cache[$id] = parent::find($id); 16 | } 17 | 18 | return $this->cache[$id]; 19 | } 20 | 21 | public function findForUser($clientId, $userId): ?Client 22 | { 23 | $client = $this->find($clientId); 24 | 25 | return $client !== null && $client->user_id === $userId 26 | ? $client 27 | : null; 28 | } 29 | 30 | public function update(Client $client, $name, $redirect): Client 31 | { 32 | $client = parent::update($client, $name, $redirect); 33 | 34 | $this->cache[$client->id] = $client; 35 | 36 | return $client; 37 | } 38 | 39 | public function regenerateSecret(Client $client): Client 40 | { 41 | $client = parent::regenerateSecret($client); 42 | 43 | $this->cache[$client->id] = $client; 44 | 45 | return $client; 46 | } 47 | 48 | public function delete(Client $client): void 49 | { 50 | unset($this->cache[$client->id]); 51 | 52 | parent::delete($client); 53 | } 54 | 55 | public function clearInternalCache(): void 56 | { 57 | $this->cache = []; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/MemoizedRepository.php: -------------------------------------------------------------------------------- 1 | cache[$id])) { 15 | $this->cache[$id] = parent::find($id); 16 | } 17 | 18 | return $this->cache[$id]; 19 | } 20 | 21 | public function findForUser($id, $userId): ?Token 22 | { 23 | $token = $this->find($id); 24 | 25 | return $token !== null && $token->user_id === $userId 26 | ? $token 27 | : null; 28 | } 29 | 30 | public function save(Token $token): void 31 | { 32 | parent::save($token); 33 | 34 | $this->cache[$token->id] = $token; 35 | } 36 | 37 | public function revokeAccessToken($id): bool 38 | { 39 | unset($this->cache[$id]); 40 | 41 | return parent::revokeAccessToken($id); 42 | } 43 | 44 | public function clearInternalCache(): void 45 | { 46 | $this->cache = []; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/OctaneOperationTerminatedListener.php: -------------------------------------------------------------------------------- 1 | app()->make(TokenRepository::class), 15 | $event->app()->make(ClientRepository::class), 16 | ]; 17 | 18 | foreach ($repositories as $repository) { 19 | if ($repository instanceof MemoizedRepository) { 20 | $repository->clearInternalCache(); 21 | } 22 | } 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/ServiceProvider.php: -------------------------------------------------------------------------------- 1 | listen([ 18 | TickTerminated::class, 19 | TaskTerminated::class, 20 | RequestTerminated::class, 21 | ], OctaneOperationTerminatedListener::class); 22 | } 23 | 24 | public function register(): void 25 | { 26 | $this->app->singleton(TokenRepository::class, MemoizedTokenRepository::class); 27 | $this->app->extend( 28 | ClientRepository::class, 29 | static fn (ClientRepository $repository) => new MemoizedClientRepository( 30 | $repository->getPersonalAccessClientId(), 31 | $repository->getPersonalAccessClientSecret(), 32 | ), 33 | ); 34 | } 35 | } 36 | --------------------------------------------------------------------------------