├── .editorconfig ├── .github └── workflows │ └── automate-projects.yml ├── .gitignore ├── COMMITERS.md ├── CONTRIBUTING.md ├── GOVERNANCE.md ├── README.md ├── ROADMAP.md ├── SUPPORT.md ├── docs ├── 404.html ├── ACCESS_TOKENS.md ├── DEPENDABOT.md ├── DEPLOYMENT.md ├── DEVELOPING.md ├── GITHUB_ACTIONS.md ├── GOVERNANCE.md ├── HOME.md ├── MISSION-COMPAS.md ├── MONITORING.md ├── PULL_REQUESTS.md ├── RELEASES.md ├── STYLEGUIDE.md ├── _config.yml ├── _includes │ ├── git-logo.html │ ├── head.html │ └── sidebar.html ├── _layouts │ ├── default.html │ └── page.html ├── blob-files │ └── CoMPAS_Technical_Charter_2020-06-07.pdf └── public │ ├── LFEnergy-slack.svg │ ├── LFEnergy-slack.svg.license │ ├── apple-touch-icon-144-precomposed.png │ ├── apple-touch-icon-144-precomposed.png.license │ ├── compas-horizontal-color.svg │ ├── compas-horizontal-color.svg.license │ ├── css │ ├── gitbutton.css │ ├── hyde.css │ ├── poole.css │ └── syntax.css │ ├── favicon.ico │ ├── favicon.ico.license │ ├── kibana-screenshot-1.png │ ├── kibana-screenshot-2.png │ └── kibana-screenshot-3.png ├── presentations ├── 230321 SGTech Week 2023 Sander Jansen.pptx ├── 231109 CoMPAS introduction for Seapath.pptx ├── CoMPAS - CEATI presentation 17 November 2020 Sander Jansen.PPTX └── LFEnergy_SpringSummit_talk_2021.pptx └── roadmap-docs ├── CoMPAS Initial Roadmap - final version.pptx ├── CoMPAS architecture overview 2023.pptx ├── CoMPAS architecture overview 2023[20230912].odp ├── CoMPAS architecture overview 2023[20230912].png ├── CoMPAS functional block diagram v1.svg └── LICENSE /.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | charset = utf-8 3 | end_of_line = lf 4 | indent_size = 4 5 | indent_style = space 6 | insert_final_newline = false 7 | max_line_length = 120 8 | tab_width = 4 9 | ij_continuation_indent_size = 8 10 | ij_formatter_off_tag = @formatter:off 11 | ij_formatter_on_tag = @formatter:on 12 | ij_formatter_tags_enabled = true 13 | ij_smart_tabs = false 14 | ij_visual_guides = none 15 | ij_wrap_on_typing = false 16 | 17 | [*.css] 18 | ij_css_align_closing_brace_with_properties = false 19 | ij_css_blank_lines_around_nested_selector = 1 20 | ij_css_blank_lines_between_blocks = 1 21 | ij_css_block_comment_add_space = false 22 | ij_css_brace_placement = end_of_line 23 | ij_css_enforce_quotes_on_format = false 24 | ij_css_hex_color_long_format = false 25 | ij_css_hex_color_lower_case = false 26 | ij_css_hex_color_short_format = false 27 | ij_css_hex_color_upper_case = false 28 | ij_css_keep_blank_lines_in_code = 2 29 | ij_css_keep_indents_on_empty_lines = false 30 | ij_css_keep_single_line_blocks = false 31 | 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 32 | ij_css_space_after_colon = true 33 | ij_css_space_before_opening_brace = true 34 | ij_css_use_double_quotes = true 35 | ij_css_value_alignment = do_not_align 36 | 37 | [*.feature] 38 | indent_size = 2 39 | ij_gherkin_keep_indents_on_empty_lines = false 40 | 41 | [*.java] 42 | ij_java_align_consecutive_assignments = false 43 | ij_java_align_consecutive_variable_declarations = false 44 | ij_java_align_group_field_declarations = false 45 | ij_java_align_multiline_annotation_parameters = false 46 | ij_java_align_multiline_array_initializer_expression = false 47 | ij_java_align_multiline_assignment = false 48 | ij_java_align_multiline_binary_operation = false 49 | ij_java_align_multiline_chained_methods = false 50 | ij_java_align_multiline_deconstruction_list_components = true 51 | ij_java_align_multiline_extends_list = false 52 | ij_java_align_multiline_for = true 53 | ij_java_align_multiline_method_parentheses = false 54 | ij_java_align_multiline_parameters = true 55 | ij_java_align_multiline_parameters_in_calls = false 56 | ij_java_align_multiline_parenthesized_expression = false 57 | ij_java_align_multiline_records = true 58 | ij_java_align_multiline_resources = true 59 | ij_java_align_multiline_ternary_operation = false 60 | ij_java_align_multiline_text_blocks = false 61 | ij_java_align_multiline_throws_list = false 62 | ij_java_align_subsequent_simple_methods = false 63 | ij_java_align_throws_keyword = false 64 | ij_java_align_types_in_multi_catch = true 65 | ij_java_annotation_parameter_wrap = off 66 | ij_java_array_initializer_new_line_after_left_brace = false 67 | ij_java_array_initializer_right_brace_on_new_line = false 68 | ij_java_array_initializer_wrap = off 69 | ij_java_assert_statement_colon_on_next_line = false 70 | ij_java_assert_statement_wrap = off 71 | ij_java_assignment_wrap = off 72 | ij_java_binary_operation_sign_on_next_line = false 73 | ij_java_binary_operation_wrap = off 74 | ij_java_blank_lines_after_anonymous_class_header = 0 75 | ij_java_blank_lines_after_class_header = 0 76 | ij_java_blank_lines_after_imports = 1 77 | ij_java_blank_lines_after_package = 1 78 | ij_java_blank_lines_around_class = 1 79 | ij_java_blank_lines_around_field = 0 80 | ij_java_blank_lines_around_field_in_interface = 0 81 | ij_java_blank_lines_around_initializer = 1 82 | ij_java_blank_lines_around_method = 1 83 | ij_java_blank_lines_around_method_in_interface = 1 84 | ij_java_blank_lines_before_class_end = 0 85 | ij_java_blank_lines_before_imports = 1 86 | ij_java_blank_lines_before_method_body = 0 87 | ij_java_blank_lines_before_package = 0 88 | ij_java_block_brace_style = end_of_line 89 | ij_java_block_comment_add_space = false 90 | ij_java_block_comment_at_first_column = true 91 | ij_java_builder_methods = none 92 | ij_java_call_parameters_new_line_after_left_paren = false 93 | ij_java_call_parameters_right_paren_on_new_line = false 94 | ij_java_call_parameters_wrap = off 95 | ij_java_case_statement_on_separate_line = true 96 | ij_java_catch_on_new_line = false 97 | ij_java_class_annotation_wrap = split_into_lines 98 | ij_java_class_brace_style = end_of_line 99 | ij_java_class_count_to_use_import_on_demand = 5 100 | ij_java_class_names_in_javadoc = 1 101 | ij_java_deconstruction_list_wrap = normal 102 | ij_java_do_not_indent_top_level_class_members = false 103 | ij_java_do_not_wrap_after_single_annotation = false 104 | ij_java_do_not_wrap_after_single_annotation_in_parameter = false 105 | ij_java_do_while_brace_force = never 106 | ij_java_doc_add_blank_line_after_description = true 107 | ij_java_doc_add_blank_line_after_param_comments = false 108 | ij_java_doc_add_blank_line_after_return = false 109 | ij_java_doc_add_p_tag_on_empty_lines = true 110 | ij_java_doc_align_exception_comments = true 111 | ij_java_doc_align_param_comments = true 112 | ij_java_doc_do_not_wrap_if_one_line = false 113 | ij_java_doc_enable_formatting = true 114 | ij_java_doc_enable_leading_asterisks = true 115 | ij_java_doc_indent_on_continuation = false 116 | ij_java_doc_keep_empty_lines = true 117 | ij_java_doc_keep_empty_parameter_tag = true 118 | ij_java_doc_keep_empty_return_tag = true 119 | ij_java_doc_keep_empty_throws_tag = true 120 | ij_java_doc_keep_invalid_tags = true 121 | ij_java_doc_param_description_on_new_line = false 122 | ij_java_doc_preserve_line_breaks = false 123 | ij_java_doc_use_throws_not_exception_tag = true 124 | ij_java_else_on_new_line = false 125 | ij_java_entity_dd_suffix = EJB 126 | ij_java_entity_eb_suffix = Bean 127 | ij_java_entity_hi_suffix = Home 128 | ij_java_entity_lhi_prefix = Local 129 | ij_java_entity_lhi_suffix = Home 130 | ij_java_entity_li_prefix = Local 131 | ij_java_entity_pk_class = java.lang.String 132 | ij_java_entity_vo_suffix = VO 133 | ij_java_enum_constants_wrap = off 134 | ij_java_extends_keyword_wrap = off 135 | ij_java_extends_list_wrap = off 136 | ij_java_field_annotation_wrap = split_into_lines 137 | ij_java_finally_on_new_line = false 138 | ij_java_for_brace_force = never 139 | ij_java_for_statement_new_line_after_left_paren = false 140 | ij_java_for_statement_right_paren_on_new_line = false 141 | ij_java_for_statement_wrap = off 142 | ij_java_generate_final_locals = false 143 | ij_java_generate_final_parameters = false 144 | ij_java_if_brace_force = never 145 | ij_java_imports_layout = *,|,javax.**,java.**,|,$* 146 | ij_java_indent_case_from_switch = true 147 | ij_java_insert_inner_class_imports = false 148 | ij_java_insert_override_annotation = true 149 | ij_java_keep_blank_lines_before_right_brace = 2 150 | ij_java_keep_blank_lines_between_package_declaration_and_header = 2 151 | ij_java_keep_blank_lines_in_code = 2 152 | ij_java_keep_blank_lines_in_declarations = 2 153 | ij_java_keep_builder_methods_indents = false 154 | ij_java_keep_control_statement_in_one_line = true 155 | ij_java_keep_first_column_comment = true 156 | ij_java_keep_indents_on_empty_lines = false 157 | ij_java_keep_line_breaks = true 158 | ij_java_keep_multiple_expressions_in_one_line = false 159 | ij_java_keep_simple_blocks_in_one_line = false 160 | ij_java_keep_simple_classes_in_one_line = false 161 | ij_java_keep_simple_lambdas_in_one_line = false 162 | ij_java_keep_simple_methods_in_one_line = false 163 | ij_java_label_indent_absolute = false 164 | ij_java_label_indent_size = 0 165 | ij_java_lambda_brace_style = end_of_line 166 | ij_java_layout_static_imports_separately = true 167 | ij_java_line_comment_add_space = false 168 | ij_java_line_comment_add_space_on_reformat = false 169 | ij_java_line_comment_at_first_column = true 170 | ij_java_message_dd_suffix = EJB 171 | ij_java_message_eb_suffix = Bean 172 | ij_java_method_annotation_wrap = split_into_lines 173 | ij_java_method_brace_style = end_of_line 174 | ij_java_method_call_chain_wrap = off 175 | ij_java_method_parameters_new_line_after_left_paren = false 176 | ij_java_method_parameters_right_paren_on_new_line = false 177 | ij_java_method_parameters_wrap = off 178 | ij_java_modifier_list_wrap = false 179 | ij_java_multi_catch_types_wrap = normal 180 | ij_java_names_count_to_use_import_on_demand = 3 181 | ij_java_new_line_after_lparen_in_annotation = false 182 | ij_java_new_line_after_lparen_in_deconstruction_pattern = true 183 | ij_java_new_line_after_lparen_in_record_header = false 184 | ij_java_packages_to_use_import_on_demand = java.awt.*,javax.swing.* 185 | ij_java_parameter_annotation_wrap = off 186 | ij_java_parentheses_expression_new_line_after_left_paren = false 187 | ij_java_parentheses_expression_right_paren_on_new_line = false 188 | ij_java_place_assignment_sign_on_next_line = false 189 | ij_java_prefer_longer_names = true 190 | ij_java_prefer_parameters_wrap = false 191 | ij_java_record_components_wrap = normal 192 | ij_java_repeat_synchronized = true 193 | ij_java_replace_instanceof_and_cast = false 194 | ij_java_replace_null_check = true 195 | ij_java_replace_sum_lambda_with_method_ref = true 196 | ij_java_resource_list_new_line_after_left_paren = false 197 | ij_java_resource_list_right_paren_on_new_line = false 198 | ij_java_resource_list_wrap = off 199 | ij_java_rparen_on_new_line_in_annotation = false 200 | ij_java_rparen_on_new_line_in_deconstruction_pattern = true 201 | ij_java_rparen_on_new_line_in_record_header = false 202 | ij_java_session_dd_suffix = EJB 203 | ij_java_session_eb_suffix = Bean 204 | ij_java_session_hi_suffix = Home 205 | ij_java_session_lhi_prefix = Local 206 | ij_java_session_lhi_suffix = Home 207 | ij_java_session_li_prefix = Local 208 | ij_java_session_si_suffix = Service 209 | ij_java_space_after_closing_angle_bracket_in_type_argument = false 210 | ij_java_space_after_colon = true 211 | ij_java_space_after_comma = true 212 | ij_java_space_after_comma_in_type_arguments = true 213 | ij_java_space_after_for_semicolon = true 214 | ij_java_space_after_quest = true 215 | ij_java_space_after_type_cast = true 216 | ij_java_space_before_annotation_array_initializer_left_brace = false 217 | ij_java_space_before_annotation_parameter_list = false 218 | ij_java_space_before_array_initializer_left_brace = false 219 | ij_java_space_before_catch_keyword = true 220 | ij_java_space_before_catch_left_brace = true 221 | ij_java_space_before_catch_parentheses = true 222 | ij_java_space_before_class_left_brace = true 223 | ij_java_space_before_colon = true 224 | ij_java_space_before_colon_in_foreach = true 225 | ij_java_space_before_comma = false 226 | ij_java_space_before_deconstruction_list = false 227 | ij_java_space_before_do_left_brace = true 228 | ij_java_space_before_else_keyword = true 229 | ij_java_space_before_else_left_brace = true 230 | ij_java_space_before_finally_keyword = true 231 | ij_java_space_before_finally_left_brace = true 232 | ij_java_space_before_for_left_brace = true 233 | ij_java_space_before_for_parentheses = true 234 | ij_java_space_before_for_semicolon = false 235 | ij_java_space_before_if_left_brace = true 236 | ij_java_space_before_if_parentheses = true 237 | ij_java_space_before_method_call_parentheses = false 238 | ij_java_space_before_method_left_brace = true 239 | ij_java_space_before_method_parentheses = false 240 | ij_java_space_before_opening_angle_bracket_in_type_parameter = false 241 | ij_java_space_before_quest = true 242 | ij_java_space_before_switch_left_brace = true 243 | ij_java_space_before_switch_parentheses = true 244 | ij_java_space_before_synchronized_left_brace = true 245 | ij_java_space_before_synchronized_parentheses = true 246 | ij_java_space_before_try_left_brace = true 247 | ij_java_space_before_try_parentheses = true 248 | ij_java_space_before_type_parameter_list = false 249 | ij_java_space_before_while_keyword = true 250 | ij_java_space_before_while_left_brace = true 251 | ij_java_space_before_while_parentheses = true 252 | ij_java_space_inside_one_line_enum_braces = false 253 | ij_java_space_within_empty_array_initializer_braces = false 254 | ij_java_space_within_empty_method_call_parentheses = false 255 | ij_java_space_within_empty_method_parentheses = false 256 | ij_java_spaces_around_additive_operators = true 257 | ij_java_spaces_around_annotation_eq = true 258 | ij_java_spaces_around_assignment_operators = true 259 | ij_java_spaces_around_bitwise_operators = true 260 | ij_java_spaces_around_equality_operators = true 261 | ij_java_spaces_around_lambda_arrow = true 262 | ij_java_spaces_around_logical_operators = true 263 | ij_java_spaces_around_method_ref_dbl_colon = false 264 | ij_java_spaces_around_multiplicative_operators = true 265 | ij_java_spaces_around_relational_operators = true 266 | ij_java_spaces_around_shift_operators = true 267 | ij_java_spaces_around_type_bounds_in_type_parameters = true 268 | ij_java_spaces_around_unary_operator = false 269 | ij_java_spaces_within_angle_brackets = false 270 | ij_java_spaces_within_annotation_parentheses = false 271 | ij_java_spaces_within_array_initializer_braces = false 272 | ij_java_spaces_within_braces = false 273 | ij_java_spaces_within_brackets = false 274 | ij_java_spaces_within_cast_parentheses = false 275 | ij_java_spaces_within_catch_parentheses = false 276 | ij_java_spaces_within_deconstruction_list = false 277 | ij_java_spaces_within_for_parentheses = false 278 | ij_java_spaces_within_if_parentheses = false 279 | ij_java_spaces_within_method_call_parentheses = false 280 | ij_java_spaces_within_method_parentheses = false 281 | ij_java_spaces_within_parentheses = false 282 | ij_java_spaces_within_record_header = false 283 | ij_java_spaces_within_switch_parentheses = false 284 | ij_java_spaces_within_synchronized_parentheses = false 285 | ij_java_spaces_within_try_parentheses = false 286 | ij_java_spaces_within_while_parentheses = false 287 | ij_java_special_else_if_treatment = true 288 | ij_java_subclass_name_suffix = Impl 289 | ij_java_ternary_operation_signs_on_next_line = false 290 | ij_java_ternary_operation_wrap = off 291 | ij_java_test_name_suffix = Test 292 | ij_java_throws_keyword_wrap = off 293 | ij_java_throws_list_wrap = off 294 | ij_java_use_external_annotations = false 295 | ij_java_use_fq_class_names = false 296 | ij_java_use_relative_indents = false 297 | ij_java_use_single_class_imports = true 298 | ij_java_variable_annotation_wrap = off 299 | ij_java_visibility = public 300 | ij_java_while_brace_force = never 301 | ij_java_while_on_new_line = false 302 | ij_java_wrap_comments = false 303 | ij_java_wrap_first_method_in_call_chain = false 304 | ij_java_wrap_long_lines = false 305 | 306 | [*.less] 307 | indent_size = 2 308 | ij_less_align_closing_brace_with_properties = false 309 | ij_less_blank_lines_around_nested_selector = 1 310 | ij_less_blank_lines_between_blocks = 1 311 | ij_less_block_comment_add_space = false 312 | ij_less_brace_placement = 0 313 | ij_less_enforce_quotes_on_format = false 314 | ij_less_hex_color_long_format = false 315 | ij_less_hex_color_lower_case = false 316 | ij_less_hex_color_short_format = false 317 | ij_less_hex_color_upper_case = false 318 | ij_less_keep_blank_lines_in_code = 2 319 | ij_less_keep_indents_on_empty_lines = false 320 | ij_less_keep_single_line_blocks = false 321 | ij_less_line_comment_add_space = false 322 | ij_less_line_comment_at_first_column = false 323 | 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 324 | ij_less_space_after_colon = true 325 | ij_less_space_before_opening_brace = true 326 | ij_less_use_double_quotes = true 327 | ij_less_value_alignment = 0 328 | 329 | [*.proto] 330 | indent_size = 2 331 | tab_width = 2 332 | ij_continuation_indent_size = 4 333 | ij_protobuf_keep_blank_lines_in_code = 2 334 | ij_protobuf_keep_indents_on_empty_lines = false 335 | ij_protobuf_keep_line_breaks = true 336 | ij_protobuf_space_after_comma = true 337 | ij_protobuf_space_before_comma = false 338 | ij_protobuf_spaces_around_assignment_operators = true 339 | ij_protobuf_spaces_within_braces = false 340 | ij_protobuf_spaces_within_brackets = false 341 | 342 | [*.sass] 343 | indent_size = 2 344 | ij_sass_align_closing_brace_with_properties = false 345 | ij_sass_blank_lines_around_nested_selector = 1 346 | ij_sass_blank_lines_between_blocks = 1 347 | ij_sass_brace_placement = 0 348 | ij_sass_enforce_quotes_on_format = false 349 | ij_sass_hex_color_long_format = false 350 | ij_sass_hex_color_lower_case = false 351 | ij_sass_hex_color_short_format = false 352 | ij_sass_hex_color_upper_case = false 353 | ij_sass_keep_blank_lines_in_code = 2 354 | ij_sass_keep_indents_on_empty_lines = false 355 | ij_sass_keep_single_line_blocks = false 356 | ij_sass_line_comment_add_space = false 357 | ij_sass_line_comment_at_first_column = false 358 | 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 359 | ij_sass_space_after_colon = true 360 | ij_sass_space_before_opening_brace = true 361 | ij_sass_use_double_quotes = true 362 | ij_sass_value_alignment = 0 363 | 364 | [*.scss] 365 | indent_size = 2 366 | ij_scss_align_closing_brace_with_properties = false 367 | ij_scss_blank_lines_around_nested_selector = 1 368 | ij_scss_blank_lines_between_blocks = 1 369 | ij_scss_block_comment_add_space = false 370 | ij_scss_brace_placement = 0 371 | ij_scss_enforce_quotes_on_format = false 372 | ij_scss_hex_color_long_format = false 373 | ij_scss_hex_color_lower_case = false 374 | ij_scss_hex_color_short_format = false 375 | ij_scss_hex_color_upper_case = false 376 | ij_scss_keep_blank_lines_in_code = 2 377 | ij_scss_keep_indents_on_empty_lines = false 378 | ij_scss_keep_single_line_blocks = false 379 | ij_scss_line_comment_add_space = false 380 | ij_scss_line_comment_at_first_column = false 381 | 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 382 | ij_scss_space_after_colon = true 383 | ij_scss_space_before_opening_brace = true 384 | ij_scss_use_double_quotes = true 385 | ij_scss_value_alignment = 0 386 | 387 | [*.vue] 388 | indent_size = 2 389 | tab_width = 2 390 | ij_continuation_indent_size = 4 391 | ij_vue_indent_children_of_top_level = template 392 | ij_vue_interpolation_new_line_after_start_delimiter = true 393 | ij_vue_interpolation_new_line_before_end_delimiter = true 394 | ij_vue_interpolation_wrap = off 395 | ij_vue_keep_indents_on_empty_lines = false 396 | ij_vue_spaces_within_interpolation_expressions = true 397 | 398 | [.editorconfig] 399 | ij_editorconfig_align_group_field_declarations = false 400 | ij_editorconfig_space_after_colon = false 401 | ij_editorconfig_space_after_comma = true 402 | ij_editorconfig_space_before_colon = false 403 | ij_editorconfig_space_before_comma = false 404 | ij_editorconfig_spaces_around_assignment_operators = true 405 | 406 | [{*.ant,*.fxml,*.icd,*.jhm,*.jnlp,*.jrxml,*.pom,*.rng,*.scd,*.scl,*.ssd,*.std,*.tld,*.wadl,*.wsdl,*.xml,*.xsd,*.xsl,*.xslt,*.xul}] 407 | ij_xml_align_attributes = true 408 | ij_xml_align_text = false 409 | ij_xml_attribute_wrap = normal 410 | ij_xml_block_comment_add_space = false 411 | ij_xml_block_comment_at_first_column = true 412 | ij_xml_keep_blank_lines = 2 413 | ij_xml_keep_indents_on_empty_lines = false 414 | ij_xml_keep_line_breaks = true 415 | ij_xml_keep_line_breaks_in_text = true 416 | ij_xml_keep_whitespaces = false 417 | ij_xml_keep_whitespaces_around_cdata = preserve 418 | ij_xml_keep_whitespaces_inside_cdata = false 419 | ij_xml_line_comment_at_first_column = true 420 | ij_xml_space_after_tag_name = false 421 | ij_xml_space_around_equals_in_attribute = false 422 | ij_xml_space_inside_empty_tag = false 423 | ij_xml_text_wrap = normal 424 | ij_xml_use_custom_settings = false 425 | 426 | [{*.ats,*.cts,*.mts,*.ts}] 427 | ij_continuation_indent_size = 4 428 | ij_typescript_align_imports = false 429 | ij_typescript_align_multiline_array_initializer_expression = false 430 | ij_typescript_align_multiline_binary_operation = false 431 | ij_typescript_align_multiline_chained_methods = false 432 | ij_typescript_align_multiline_extends_list = false 433 | ij_typescript_align_multiline_for = true 434 | ij_typescript_align_multiline_parameters = true 435 | ij_typescript_align_multiline_parameters_in_calls = false 436 | ij_typescript_align_multiline_ternary_operation = false 437 | ij_typescript_align_object_properties = 0 438 | ij_typescript_align_union_types = false 439 | ij_typescript_align_var_statements = 0 440 | ij_typescript_array_initializer_new_line_after_left_brace = false 441 | ij_typescript_array_initializer_right_brace_on_new_line = false 442 | ij_typescript_array_initializer_wrap = off 443 | ij_typescript_assignment_wrap = off 444 | ij_typescript_binary_operation_sign_on_next_line = false 445 | ij_typescript_binary_operation_wrap = off 446 | ij_typescript_blacklist_imports = rxjs/Rx,node_modules/**,**/node_modules/**,@angular/material,@angular/material/typings/** 447 | ij_typescript_blank_lines_after_imports = 1 448 | ij_typescript_blank_lines_around_class = 1 449 | ij_typescript_blank_lines_around_field = 0 450 | ij_typescript_blank_lines_around_field_in_interface = 0 451 | ij_typescript_blank_lines_around_function = 1 452 | ij_typescript_blank_lines_around_method = 1 453 | ij_typescript_blank_lines_around_method_in_interface = 1 454 | ij_typescript_block_brace_style = end_of_line 455 | ij_typescript_block_comment_add_space = false 456 | ij_typescript_block_comment_at_first_column = true 457 | ij_typescript_call_parameters_new_line_after_left_paren = false 458 | ij_typescript_call_parameters_right_paren_on_new_line = false 459 | ij_typescript_call_parameters_wrap = off 460 | ij_typescript_catch_on_new_line = false 461 | ij_typescript_chained_call_dot_on_new_line = true 462 | ij_typescript_class_brace_style = end_of_line 463 | ij_typescript_comma_on_new_line = false 464 | ij_typescript_do_while_brace_force = never 465 | ij_typescript_else_on_new_line = false 466 | ij_typescript_enforce_trailing_comma = keep 467 | ij_typescript_enum_constants_wrap = on_every_item 468 | ij_typescript_extends_keyword_wrap = off 469 | ij_typescript_extends_list_wrap = off 470 | ij_typescript_field_prefix = _ 471 | ij_typescript_file_name_style = relaxed 472 | ij_typescript_finally_on_new_line = false 473 | ij_typescript_for_brace_force = never 474 | ij_typescript_for_statement_new_line_after_left_paren = false 475 | ij_typescript_for_statement_right_paren_on_new_line = false 476 | ij_typescript_for_statement_wrap = off 477 | ij_typescript_force_quote_style = false 478 | ij_typescript_force_semicolon_style = false 479 | ij_typescript_function_expression_brace_style = end_of_line 480 | ij_typescript_if_brace_force = never 481 | ij_typescript_import_merge_members = global 482 | ij_typescript_import_prefer_absolute_path = global 483 | ij_typescript_import_sort_members = true 484 | ij_typescript_import_sort_module_name = false 485 | ij_typescript_import_use_node_resolution = true 486 | ij_typescript_imports_wrap = on_every_item 487 | ij_typescript_indent_case_from_switch = true 488 | ij_typescript_indent_chained_calls = true 489 | ij_typescript_indent_package_children = 0 490 | ij_typescript_jsdoc_include_types = false 491 | ij_typescript_jsx_attribute_value = braces 492 | ij_typescript_keep_blank_lines_in_code = 2 493 | ij_typescript_keep_first_column_comment = true 494 | ij_typescript_keep_indents_on_empty_lines = false 495 | ij_typescript_keep_line_breaks = true 496 | ij_typescript_keep_simple_blocks_in_one_line = false 497 | ij_typescript_keep_simple_methods_in_one_line = false 498 | ij_typescript_line_comment_add_space = true 499 | ij_typescript_line_comment_at_first_column = false 500 | ij_typescript_method_brace_style = end_of_line 501 | ij_typescript_method_call_chain_wrap = off 502 | ij_typescript_method_parameters_new_line_after_left_paren = false 503 | ij_typescript_method_parameters_right_paren_on_new_line = false 504 | ij_typescript_method_parameters_wrap = off 505 | ij_typescript_object_literal_wrap = on_every_item 506 | ij_typescript_object_types_wrap = on_every_item 507 | ij_typescript_parentheses_expression_new_line_after_left_paren = false 508 | ij_typescript_parentheses_expression_right_paren_on_new_line = false 509 | ij_typescript_place_assignment_sign_on_next_line = false 510 | ij_typescript_prefer_as_type_cast = false 511 | ij_typescript_prefer_explicit_types_function_expression_returns = false 512 | ij_typescript_prefer_explicit_types_function_returns = false 513 | ij_typescript_prefer_explicit_types_vars_fields = false 514 | ij_typescript_prefer_parameters_wrap = false 515 | ij_typescript_reformat_c_style_comments = false 516 | ij_typescript_space_after_colon = true 517 | ij_typescript_space_after_comma = true 518 | ij_typescript_space_after_dots_in_rest_parameter = false 519 | ij_typescript_space_after_generator_mult = true 520 | ij_typescript_space_after_property_colon = true 521 | ij_typescript_space_after_quest = true 522 | ij_typescript_space_after_type_colon = true 523 | ij_typescript_space_after_unary_not = false 524 | ij_typescript_space_before_async_arrow_lparen = true 525 | ij_typescript_space_before_catch_keyword = true 526 | ij_typescript_space_before_catch_left_brace = true 527 | ij_typescript_space_before_catch_parentheses = true 528 | ij_typescript_space_before_class_lbrace = true 529 | ij_typescript_space_before_class_left_brace = true 530 | ij_typescript_space_before_colon = true 531 | ij_typescript_space_before_comma = false 532 | ij_typescript_space_before_do_left_brace = true 533 | ij_typescript_space_before_else_keyword = true 534 | ij_typescript_space_before_else_left_brace = true 535 | ij_typescript_space_before_finally_keyword = true 536 | ij_typescript_space_before_finally_left_brace = true 537 | ij_typescript_space_before_for_left_brace = true 538 | ij_typescript_space_before_for_parentheses = true 539 | ij_typescript_space_before_for_semicolon = false 540 | ij_typescript_space_before_function_left_parenth = true 541 | ij_typescript_space_before_generator_mult = false 542 | ij_typescript_space_before_if_left_brace = true 543 | ij_typescript_space_before_if_parentheses = true 544 | ij_typescript_space_before_method_call_parentheses = false 545 | ij_typescript_space_before_method_left_brace = true 546 | ij_typescript_space_before_method_parentheses = false 547 | ij_typescript_space_before_property_colon = false 548 | ij_typescript_space_before_quest = true 549 | ij_typescript_space_before_switch_left_brace = true 550 | ij_typescript_space_before_switch_parentheses = true 551 | ij_typescript_space_before_try_left_brace = true 552 | ij_typescript_space_before_type_colon = false 553 | ij_typescript_space_before_unary_not = false 554 | ij_typescript_space_before_while_keyword = true 555 | ij_typescript_space_before_while_left_brace = true 556 | ij_typescript_space_before_while_parentheses = true 557 | ij_typescript_spaces_around_additive_operators = true 558 | ij_typescript_spaces_around_arrow_function_operator = true 559 | ij_typescript_spaces_around_assignment_operators = true 560 | ij_typescript_spaces_around_bitwise_operators = true 561 | ij_typescript_spaces_around_equality_operators = true 562 | ij_typescript_spaces_around_logical_operators = true 563 | ij_typescript_spaces_around_multiplicative_operators = true 564 | ij_typescript_spaces_around_relational_operators = true 565 | ij_typescript_spaces_around_shift_operators = true 566 | ij_typescript_spaces_around_unary_operator = false 567 | ij_typescript_spaces_within_array_initializer_brackets = false 568 | ij_typescript_spaces_within_brackets = false 569 | ij_typescript_spaces_within_catch_parentheses = false 570 | ij_typescript_spaces_within_for_parentheses = false 571 | ij_typescript_spaces_within_if_parentheses = false 572 | ij_typescript_spaces_within_imports = false 573 | ij_typescript_spaces_within_interpolation_expressions = false 574 | ij_typescript_spaces_within_method_call_parentheses = false 575 | ij_typescript_spaces_within_method_parentheses = false 576 | ij_typescript_spaces_within_object_literal_braces = false 577 | ij_typescript_spaces_within_object_type_braces = true 578 | ij_typescript_spaces_within_parentheses = false 579 | ij_typescript_spaces_within_switch_parentheses = false 580 | ij_typescript_spaces_within_type_assertion = false 581 | ij_typescript_spaces_within_union_types = true 582 | ij_typescript_spaces_within_while_parentheses = false 583 | ij_typescript_special_else_if_treatment = true 584 | ij_typescript_ternary_operation_signs_on_next_line = false 585 | ij_typescript_ternary_operation_wrap = off 586 | ij_typescript_union_types_wrap = on_every_item 587 | ij_typescript_use_chained_calls_group_indents = false 588 | ij_typescript_use_double_quotes = true 589 | ij_typescript_use_explicit_js_extension = auto 590 | ij_typescript_use_path_mapping = always 591 | ij_typescript_use_public_modifier = false 592 | ij_typescript_use_semicolon_after_statement = true 593 | ij_typescript_var_declaration_wrap = normal 594 | ij_typescript_while_brace_force = never 595 | ij_typescript_while_on_new_line = false 596 | ij_typescript_wrap_comments = false 597 | 598 | [{*.bash,*.sh,*.zsh}] 599 | indent_size = 2 600 | tab_width = 2 601 | ij_shell_binary_ops_start_line = false 602 | ij_shell_keep_column_alignment_padding = false 603 | ij_shell_minify_program = false 604 | ij_shell_redirect_followed_by_space = false 605 | ij_shell_switch_cases_indented = false 606 | ij_shell_use_unix_line_separator = true 607 | 608 | [{*.cjs,*.js}] 609 | ij_continuation_indent_size = 4 610 | ij_javascript_align_imports = false 611 | ij_javascript_align_multiline_array_initializer_expression = false 612 | ij_javascript_align_multiline_binary_operation = false 613 | ij_javascript_align_multiline_chained_methods = false 614 | ij_javascript_align_multiline_extends_list = false 615 | ij_javascript_align_multiline_for = true 616 | ij_javascript_align_multiline_parameters = true 617 | ij_javascript_align_multiline_parameters_in_calls = false 618 | ij_javascript_align_multiline_ternary_operation = false 619 | ij_javascript_align_object_properties = 0 620 | ij_javascript_align_union_types = false 621 | ij_javascript_align_var_statements = 0 622 | ij_javascript_array_initializer_new_line_after_left_brace = false 623 | ij_javascript_array_initializer_right_brace_on_new_line = false 624 | ij_javascript_array_initializer_wrap = off 625 | ij_javascript_assignment_wrap = off 626 | ij_javascript_binary_operation_sign_on_next_line = false 627 | ij_javascript_binary_operation_wrap = off 628 | ij_javascript_blacklist_imports = rxjs/Rx,node_modules/**,**/node_modules/**,@angular/material,@angular/material/typings/** 629 | ij_javascript_blank_lines_after_imports = 1 630 | ij_javascript_blank_lines_around_class = 1 631 | ij_javascript_blank_lines_around_field = 0 632 | ij_javascript_blank_lines_around_function = 1 633 | ij_javascript_blank_lines_around_method = 1 634 | ij_javascript_block_brace_style = end_of_line 635 | ij_javascript_block_comment_add_space = false 636 | ij_javascript_block_comment_at_first_column = true 637 | ij_javascript_call_parameters_new_line_after_left_paren = false 638 | ij_javascript_call_parameters_right_paren_on_new_line = false 639 | ij_javascript_call_parameters_wrap = off 640 | ij_javascript_catch_on_new_line = false 641 | ij_javascript_chained_call_dot_on_new_line = true 642 | ij_javascript_class_brace_style = end_of_line 643 | ij_javascript_comma_on_new_line = false 644 | ij_javascript_do_while_brace_force = never 645 | ij_javascript_else_on_new_line = false 646 | ij_javascript_enforce_trailing_comma = keep 647 | ij_javascript_extends_keyword_wrap = off 648 | ij_javascript_extends_list_wrap = off 649 | ij_javascript_field_prefix = _ 650 | ij_javascript_file_name_style = relaxed 651 | ij_javascript_finally_on_new_line = false 652 | ij_javascript_for_brace_force = never 653 | ij_javascript_for_statement_new_line_after_left_paren = false 654 | ij_javascript_for_statement_right_paren_on_new_line = false 655 | ij_javascript_for_statement_wrap = off 656 | ij_javascript_force_quote_style = false 657 | ij_javascript_force_semicolon_style = false 658 | ij_javascript_function_expression_brace_style = end_of_line 659 | ij_javascript_if_brace_force = never 660 | ij_javascript_import_merge_members = global 661 | ij_javascript_import_prefer_absolute_path = global 662 | ij_javascript_import_sort_members = true 663 | ij_javascript_import_sort_module_name = false 664 | ij_javascript_import_use_node_resolution = true 665 | ij_javascript_imports_wrap = on_every_item 666 | ij_javascript_indent_case_from_switch = true 667 | ij_javascript_indent_chained_calls = true 668 | ij_javascript_indent_package_children = 0 669 | ij_javascript_jsx_attribute_value = braces 670 | ij_javascript_keep_blank_lines_in_code = 2 671 | ij_javascript_keep_first_column_comment = true 672 | ij_javascript_keep_indents_on_empty_lines = false 673 | ij_javascript_keep_line_breaks = true 674 | ij_javascript_keep_simple_blocks_in_one_line = false 675 | ij_javascript_keep_simple_methods_in_one_line = false 676 | ij_javascript_line_comment_add_space = true 677 | ij_javascript_line_comment_at_first_column = false 678 | ij_javascript_method_brace_style = end_of_line 679 | ij_javascript_method_call_chain_wrap = off 680 | ij_javascript_method_parameters_new_line_after_left_paren = false 681 | ij_javascript_method_parameters_right_paren_on_new_line = false 682 | ij_javascript_method_parameters_wrap = off 683 | ij_javascript_object_literal_wrap = on_every_item 684 | ij_javascript_object_types_wrap = on_every_item 685 | ij_javascript_parentheses_expression_new_line_after_left_paren = false 686 | ij_javascript_parentheses_expression_right_paren_on_new_line = false 687 | ij_javascript_place_assignment_sign_on_next_line = false 688 | ij_javascript_prefer_as_type_cast = false 689 | ij_javascript_prefer_explicit_types_function_expression_returns = false 690 | ij_javascript_prefer_explicit_types_function_returns = false 691 | ij_javascript_prefer_explicit_types_vars_fields = false 692 | ij_javascript_prefer_parameters_wrap = false 693 | ij_javascript_reformat_c_style_comments = false 694 | ij_javascript_space_after_colon = true 695 | ij_javascript_space_after_comma = true 696 | ij_javascript_space_after_dots_in_rest_parameter = false 697 | ij_javascript_space_after_generator_mult = true 698 | ij_javascript_space_after_property_colon = true 699 | ij_javascript_space_after_quest = true 700 | ij_javascript_space_after_type_colon = true 701 | ij_javascript_space_after_unary_not = false 702 | ij_javascript_space_before_async_arrow_lparen = true 703 | ij_javascript_space_before_catch_keyword = true 704 | ij_javascript_space_before_catch_left_brace = true 705 | ij_javascript_space_before_catch_parentheses = true 706 | ij_javascript_space_before_class_lbrace = true 707 | ij_javascript_space_before_class_left_brace = true 708 | ij_javascript_space_before_colon = true 709 | ij_javascript_space_before_comma = false 710 | ij_javascript_space_before_do_left_brace = true 711 | ij_javascript_space_before_else_keyword = true 712 | ij_javascript_space_before_else_left_brace = true 713 | ij_javascript_space_before_finally_keyword = true 714 | ij_javascript_space_before_finally_left_brace = true 715 | ij_javascript_space_before_for_left_brace = true 716 | ij_javascript_space_before_for_parentheses = true 717 | ij_javascript_space_before_for_semicolon = false 718 | ij_javascript_space_before_function_left_parenth = true 719 | ij_javascript_space_before_generator_mult = false 720 | ij_javascript_space_before_if_left_brace = true 721 | ij_javascript_space_before_if_parentheses = true 722 | ij_javascript_space_before_method_call_parentheses = false 723 | ij_javascript_space_before_method_left_brace = true 724 | ij_javascript_space_before_method_parentheses = false 725 | ij_javascript_space_before_property_colon = false 726 | ij_javascript_space_before_quest = true 727 | ij_javascript_space_before_switch_left_brace = true 728 | ij_javascript_space_before_switch_parentheses = true 729 | ij_javascript_space_before_try_left_brace = true 730 | ij_javascript_space_before_type_colon = false 731 | ij_javascript_space_before_unary_not = false 732 | ij_javascript_space_before_while_keyword = true 733 | ij_javascript_space_before_while_left_brace = true 734 | ij_javascript_space_before_while_parentheses = true 735 | ij_javascript_spaces_around_additive_operators = true 736 | ij_javascript_spaces_around_arrow_function_operator = true 737 | ij_javascript_spaces_around_assignment_operators = true 738 | ij_javascript_spaces_around_bitwise_operators = true 739 | ij_javascript_spaces_around_equality_operators = true 740 | ij_javascript_spaces_around_logical_operators = true 741 | ij_javascript_spaces_around_multiplicative_operators = true 742 | ij_javascript_spaces_around_relational_operators = true 743 | ij_javascript_spaces_around_shift_operators = true 744 | ij_javascript_spaces_around_unary_operator = false 745 | ij_javascript_spaces_within_array_initializer_brackets = false 746 | ij_javascript_spaces_within_brackets = false 747 | ij_javascript_spaces_within_catch_parentheses = false 748 | ij_javascript_spaces_within_for_parentheses = false 749 | ij_javascript_spaces_within_if_parentheses = false 750 | ij_javascript_spaces_within_imports = false 751 | ij_javascript_spaces_within_interpolation_expressions = false 752 | ij_javascript_spaces_within_method_call_parentheses = false 753 | ij_javascript_spaces_within_method_parentheses = false 754 | ij_javascript_spaces_within_object_literal_braces = false 755 | ij_javascript_spaces_within_object_type_braces = true 756 | ij_javascript_spaces_within_parentheses = false 757 | ij_javascript_spaces_within_switch_parentheses = false 758 | ij_javascript_spaces_within_type_assertion = false 759 | ij_javascript_spaces_within_union_types = true 760 | ij_javascript_spaces_within_while_parentheses = false 761 | ij_javascript_special_else_if_treatment = true 762 | ij_javascript_ternary_operation_signs_on_next_line = false 763 | ij_javascript_ternary_operation_wrap = off 764 | ij_javascript_union_types_wrap = on_every_item 765 | ij_javascript_use_chained_calls_group_indents = false 766 | ij_javascript_use_double_quotes = true 767 | ij_javascript_use_explicit_js_extension = auto 768 | ij_javascript_use_path_mapping = always 769 | ij_javascript_use_public_modifier = false 770 | ij_javascript_use_semicolon_after_statement = true 771 | ij_javascript_var_declaration_wrap = normal 772 | ij_javascript_while_brace_force = never 773 | ij_javascript_while_on_new_line = false 774 | ij_javascript_wrap_comments = false 775 | 776 | [{*.ft,*.vm,*.vsl}] 777 | ij_vtl_keep_indents_on_empty_lines = false 778 | 779 | [{*.gant,*.groovy,*.gy}] 780 | ij_groovy_align_group_field_declarations = false 781 | ij_groovy_align_multiline_array_initializer_expression = false 782 | ij_groovy_align_multiline_assignment = false 783 | ij_groovy_align_multiline_binary_operation = false 784 | ij_groovy_align_multiline_chained_methods = false 785 | ij_groovy_align_multiline_extends_list = false 786 | ij_groovy_align_multiline_for = true 787 | ij_groovy_align_multiline_list_or_map = true 788 | ij_groovy_align_multiline_method_parentheses = false 789 | ij_groovy_align_multiline_parameters = true 790 | ij_groovy_align_multiline_parameters_in_calls = false 791 | ij_groovy_align_multiline_resources = true 792 | ij_groovy_align_multiline_ternary_operation = false 793 | ij_groovy_align_multiline_throws_list = false 794 | ij_groovy_align_named_args_in_map = true 795 | ij_groovy_align_throws_keyword = false 796 | ij_groovy_array_initializer_new_line_after_left_brace = false 797 | ij_groovy_array_initializer_right_brace_on_new_line = false 798 | ij_groovy_array_initializer_wrap = off 799 | ij_groovy_assert_statement_wrap = off 800 | ij_groovy_assignment_wrap = off 801 | ij_groovy_binary_operation_wrap = off 802 | ij_groovy_blank_lines_after_class_header = 0 803 | ij_groovy_blank_lines_after_imports = 1 804 | ij_groovy_blank_lines_after_package = 1 805 | ij_groovy_blank_lines_around_class = 1 806 | ij_groovy_blank_lines_around_field = 0 807 | ij_groovy_blank_lines_around_field_in_interface = 0 808 | ij_groovy_blank_lines_around_method = 1 809 | ij_groovy_blank_lines_around_method_in_interface = 1 810 | ij_groovy_blank_lines_before_imports = 1 811 | ij_groovy_blank_lines_before_method_body = 0 812 | ij_groovy_blank_lines_before_package = 0 813 | ij_groovy_block_brace_style = end_of_line 814 | ij_groovy_block_comment_add_space = false 815 | ij_groovy_block_comment_at_first_column = true 816 | ij_groovy_call_parameters_new_line_after_left_paren = false 817 | ij_groovy_call_parameters_right_paren_on_new_line = false 818 | ij_groovy_call_parameters_wrap = off 819 | ij_groovy_catch_on_new_line = false 820 | ij_groovy_class_annotation_wrap = split_into_lines 821 | ij_groovy_class_brace_style = end_of_line 822 | ij_groovy_class_count_to_use_import_on_demand = 5 823 | ij_groovy_do_while_brace_force = never 824 | ij_groovy_else_on_new_line = false 825 | ij_groovy_enable_groovydoc_formatting = true 826 | ij_groovy_enum_constants_wrap = off 827 | ij_groovy_extends_keyword_wrap = off 828 | ij_groovy_extends_list_wrap = off 829 | ij_groovy_field_annotation_wrap = split_into_lines 830 | ij_groovy_finally_on_new_line = false 831 | ij_groovy_for_brace_force = never 832 | ij_groovy_for_statement_new_line_after_left_paren = false 833 | ij_groovy_for_statement_right_paren_on_new_line = false 834 | ij_groovy_for_statement_wrap = off 835 | ij_groovy_ginq_general_clause_wrap_policy = 2 836 | ij_groovy_ginq_having_wrap_policy = 1 837 | ij_groovy_ginq_indent_having_clause = true 838 | ij_groovy_ginq_indent_on_clause = true 839 | ij_groovy_ginq_on_wrap_policy = 1 840 | ij_groovy_ginq_space_after_keyword = true 841 | ij_groovy_if_brace_force = never 842 | ij_groovy_import_annotation_wrap = 2 843 | ij_groovy_imports_layout = *,|,javax.**,java.**,|,$* 844 | ij_groovy_indent_case_from_switch = true 845 | ij_groovy_indent_label_blocks = true 846 | ij_groovy_insert_inner_class_imports = false 847 | ij_groovy_keep_blank_lines_before_right_brace = 2 848 | ij_groovy_keep_blank_lines_in_code = 2 849 | ij_groovy_keep_blank_lines_in_declarations = 2 850 | ij_groovy_keep_control_statement_in_one_line = true 851 | ij_groovy_keep_first_column_comment = true 852 | ij_groovy_keep_indents_on_empty_lines = false 853 | ij_groovy_keep_line_breaks = true 854 | ij_groovy_keep_multiple_expressions_in_one_line = false 855 | ij_groovy_keep_simple_blocks_in_one_line = false 856 | ij_groovy_keep_simple_classes_in_one_line = true 857 | ij_groovy_keep_simple_lambdas_in_one_line = true 858 | ij_groovy_keep_simple_methods_in_one_line = true 859 | ij_groovy_label_indent_absolute = false 860 | ij_groovy_label_indent_size = 0 861 | ij_groovy_lambda_brace_style = end_of_line 862 | ij_groovy_layout_static_imports_separately = true 863 | ij_groovy_line_comment_add_space = false 864 | ij_groovy_line_comment_add_space_on_reformat = false 865 | ij_groovy_line_comment_at_first_column = true 866 | ij_groovy_method_annotation_wrap = split_into_lines 867 | ij_groovy_method_brace_style = end_of_line 868 | ij_groovy_method_call_chain_wrap = off 869 | ij_groovy_method_parameters_new_line_after_left_paren = false 870 | ij_groovy_method_parameters_right_paren_on_new_line = false 871 | ij_groovy_method_parameters_wrap = off 872 | ij_groovy_modifier_list_wrap = false 873 | ij_groovy_names_count_to_use_import_on_demand = 3 874 | ij_groovy_packages_to_use_import_on_demand = java.awt.*,javax.swing.* 875 | ij_groovy_parameter_annotation_wrap = off 876 | ij_groovy_parentheses_expression_new_line_after_left_paren = false 877 | ij_groovy_parentheses_expression_right_paren_on_new_line = false 878 | ij_groovy_prefer_parameters_wrap = false 879 | ij_groovy_resource_list_new_line_after_left_paren = false 880 | ij_groovy_resource_list_right_paren_on_new_line = false 881 | ij_groovy_resource_list_wrap = off 882 | ij_groovy_space_after_assert_separator = true 883 | ij_groovy_space_after_colon = true 884 | ij_groovy_space_after_comma = true 885 | ij_groovy_space_after_comma_in_type_arguments = true 886 | ij_groovy_space_after_for_semicolon = true 887 | ij_groovy_space_after_quest = true 888 | ij_groovy_space_after_type_cast = true 889 | ij_groovy_space_before_annotation_parameter_list = false 890 | ij_groovy_space_before_array_initializer_left_brace = false 891 | ij_groovy_space_before_assert_separator = false 892 | ij_groovy_space_before_catch_keyword = true 893 | ij_groovy_space_before_catch_left_brace = true 894 | ij_groovy_space_before_catch_parentheses = true 895 | ij_groovy_space_before_class_left_brace = true 896 | ij_groovy_space_before_closure_left_brace = true 897 | ij_groovy_space_before_colon = true 898 | ij_groovy_space_before_comma = false 899 | ij_groovy_space_before_do_left_brace = true 900 | ij_groovy_space_before_else_keyword = true 901 | ij_groovy_space_before_else_left_brace = true 902 | ij_groovy_space_before_finally_keyword = true 903 | ij_groovy_space_before_finally_left_brace = true 904 | ij_groovy_space_before_for_left_brace = true 905 | ij_groovy_space_before_for_parentheses = true 906 | ij_groovy_space_before_for_semicolon = false 907 | ij_groovy_space_before_if_left_brace = true 908 | ij_groovy_space_before_if_parentheses = true 909 | ij_groovy_space_before_method_call_parentheses = false 910 | ij_groovy_space_before_method_left_brace = true 911 | ij_groovy_space_before_method_parentheses = false 912 | ij_groovy_space_before_quest = true 913 | ij_groovy_space_before_record_parentheses = false 914 | ij_groovy_space_before_switch_left_brace = true 915 | ij_groovy_space_before_switch_parentheses = true 916 | ij_groovy_space_before_synchronized_left_brace = true 917 | ij_groovy_space_before_synchronized_parentheses = true 918 | ij_groovy_space_before_try_left_brace = true 919 | ij_groovy_space_before_try_parentheses = true 920 | ij_groovy_space_before_while_keyword = true 921 | ij_groovy_space_before_while_left_brace = true 922 | ij_groovy_space_before_while_parentheses = true 923 | ij_groovy_space_in_named_argument = true 924 | ij_groovy_space_in_named_argument_before_colon = false 925 | ij_groovy_space_within_empty_array_initializer_braces = false 926 | ij_groovy_space_within_empty_method_call_parentheses = false 927 | ij_groovy_spaces_around_additive_operators = true 928 | ij_groovy_spaces_around_assignment_operators = true 929 | ij_groovy_spaces_around_bitwise_operators = true 930 | ij_groovy_spaces_around_equality_operators = true 931 | ij_groovy_spaces_around_lambda_arrow = true 932 | ij_groovy_spaces_around_logical_operators = true 933 | ij_groovy_spaces_around_multiplicative_operators = true 934 | ij_groovy_spaces_around_regex_operators = true 935 | ij_groovy_spaces_around_relational_operators = true 936 | ij_groovy_spaces_around_shift_operators = true 937 | ij_groovy_spaces_within_annotation_parentheses = false 938 | ij_groovy_spaces_within_array_initializer_braces = false 939 | ij_groovy_spaces_within_braces = true 940 | ij_groovy_spaces_within_brackets = false 941 | ij_groovy_spaces_within_cast_parentheses = false 942 | ij_groovy_spaces_within_catch_parentheses = false 943 | ij_groovy_spaces_within_for_parentheses = false 944 | ij_groovy_spaces_within_gstring_injection_braces = false 945 | ij_groovy_spaces_within_if_parentheses = false 946 | ij_groovy_spaces_within_list_or_map = false 947 | ij_groovy_spaces_within_method_call_parentheses = false 948 | ij_groovy_spaces_within_method_parentheses = false 949 | ij_groovy_spaces_within_parentheses = false 950 | ij_groovy_spaces_within_switch_parentheses = false 951 | ij_groovy_spaces_within_synchronized_parentheses = false 952 | ij_groovy_spaces_within_try_parentheses = false 953 | ij_groovy_spaces_within_tuple_expression = false 954 | ij_groovy_spaces_within_while_parentheses = false 955 | ij_groovy_special_else_if_treatment = true 956 | ij_groovy_ternary_operation_wrap = off 957 | ij_groovy_throws_keyword_wrap = off 958 | ij_groovy_throws_list_wrap = off 959 | ij_groovy_use_flying_geese_braces = false 960 | ij_groovy_use_fq_class_names = false 961 | ij_groovy_use_fq_class_names_in_javadoc = true 962 | ij_groovy_use_relative_indents = false 963 | ij_groovy_use_single_class_imports = true 964 | ij_groovy_variable_annotation_wrap = off 965 | ij_groovy_while_brace_force = never 966 | ij_groovy_while_on_new_line = false 967 | ij_groovy_wrap_chain_calls_after_dot = false 968 | ij_groovy_wrap_long_lines = false 969 | 970 | [{*.har,*.jsb2,*.jsb3,*.json,.babelrc,.eslintrc,.prettierrc,.stylelintrc,bowerrc,jest.config}] 971 | indent_size = 2 972 | ij_json_array_wrapping = split_into_lines 973 | ij_json_keep_blank_lines_in_code = 0 974 | ij_json_keep_indents_on_empty_lines = false 975 | ij_json_keep_line_breaks = true 976 | ij_json_keep_trailing_comma = false 977 | ij_json_object_wrapping = split_into_lines 978 | ij_json_property_alignment = do_not_align 979 | ij_json_space_after_colon = true 980 | ij_json_space_after_comma = true 981 | ij_json_space_before_colon = false 982 | ij_json_space_before_comma = false 983 | ij_json_spaces_within_braces = false 984 | ij_json_spaces_within_brackets = false 985 | ij_json_wrap_long_lines = false 986 | 987 | [{*.htm,*.html,*.ng,*.sht,*.shtm,*.shtml}] 988 | ij_html_add_new_line_before_tags = body,div,p,form,h1,h2,h3 989 | ij_html_align_attributes = true 990 | ij_html_align_text = false 991 | ij_html_attribute_wrap = normal 992 | ij_html_block_comment_add_space = false 993 | ij_html_block_comment_at_first_column = true 994 | ij_html_do_not_align_children_of_min_lines = 0 995 | ij_html_do_not_break_if_inline_tags = title,h1,h2,h3,h4,h5,h6,p 996 | ij_html_do_not_indent_children_of_tags = html,body,thead,tbody,tfoot 997 | ij_html_enforce_quotes = false 998 | 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 999 | ij_html_keep_blank_lines = 2 1000 | ij_html_keep_indents_on_empty_lines = false 1001 | ij_html_keep_line_breaks = true 1002 | ij_html_keep_line_breaks_in_text = true 1003 | ij_html_keep_whitespaces = false 1004 | ij_html_keep_whitespaces_inside = span,pre,textarea 1005 | ij_html_line_comment_at_first_column = true 1006 | ij_html_new_line_after_last_attribute = never 1007 | ij_html_new_line_before_first_attribute = never 1008 | ij_html_quote_style = double 1009 | ij_html_remove_new_line_before_tags = br 1010 | ij_html_space_after_tag_name = false 1011 | ij_html_space_around_equality_in_attribute = false 1012 | ij_html_space_inside_empty_tag = false 1013 | ij_html_text_wrap = normal 1014 | 1015 | [{*.http,*.rest}] 1016 | indent_size = 0 1017 | ij_continuation_indent_size = 4 1018 | ij_http request_call_parameters_wrap = normal 1019 | 1020 | [{*.jsf,*.jsp,*.jspf,*.tag,*.tagf,*.xjsp}] 1021 | ij_jsp_jsp_prefer_comma_separated_import_list = false 1022 | ij_jsp_keep_indents_on_empty_lines = false 1023 | 1024 | [{*.jspx,*.tagx}] 1025 | ij_jspx_keep_indents_on_empty_lines = false 1026 | 1027 | [{*.kt,*.kts}] 1028 | ij_kotlin_align_in_columns_case_branch = false 1029 | ij_kotlin_align_multiline_binary_operation = false 1030 | ij_kotlin_align_multiline_extends_list = false 1031 | ij_kotlin_align_multiline_method_parentheses = false 1032 | ij_kotlin_align_multiline_parameters = true 1033 | ij_kotlin_align_multiline_parameters_in_calls = false 1034 | ij_kotlin_allow_trailing_comma = false 1035 | ij_kotlin_allow_trailing_comma_on_call_site = false 1036 | ij_kotlin_assignment_wrap = off 1037 | ij_kotlin_blank_lines_after_class_header = 0 1038 | ij_kotlin_blank_lines_around_block_when_branches = 0 1039 | ij_kotlin_blank_lines_before_declaration_with_comment_or_annotation_on_separate_line = 1 1040 | ij_kotlin_block_comment_add_space = false 1041 | ij_kotlin_block_comment_at_first_column = true 1042 | ij_kotlin_call_parameters_new_line_after_left_paren = false 1043 | ij_kotlin_call_parameters_right_paren_on_new_line = false 1044 | ij_kotlin_call_parameters_wrap = off 1045 | ij_kotlin_catch_on_new_line = false 1046 | ij_kotlin_class_annotation_wrap = split_into_lines 1047 | ij_kotlin_continuation_indent_for_chained_calls = true 1048 | ij_kotlin_continuation_indent_for_expression_bodies = true 1049 | ij_kotlin_continuation_indent_in_argument_lists = true 1050 | ij_kotlin_continuation_indent_in_elvis = true 1051 | ij_kotlin_continuation_indent_in_if_conditions = true 1052 | ij_kotlin_continuation_indent_in_parameter_lists = true 1053 | ij_kotlin_continuation_indent_in_supertype_lists = true 1054 | ij_kotlin_else_on_new_line = false 1055 | ij_kotlin_enum_constants_wrap = off 1056 | ij_kotlin_extends_list_wrap = off 1057 | ij_kotlin_field_annotation_wrap = split_into_lines 1058 | ij_kotlin_finally_on_new_line = false 1059 | ij_kotlin_if_rparen_on_new_line = false 1060 | ij_kotlin_import_nested_classes = false 1061 | ij_kotlin_imports_layout = *,java.**,javax.**,kotlin.**,^ 1062 | ij_kotlin_insert_whitespaces_in_simple_one_line_method = true 1063 | ij_kotlin_keep_blank_lines_before_right_brace = 2 1064 | ij_kotlin_keep_blank_lines_in_code = 2 1065 | ij_kotlin_keep_blank_lines_in_declarations = 2 1066 | ij_kotlin_keep_first_column_comment = true 1067 | ij_kotlin_keep_indents_on_empty_lines = false 1068 | ij_kotlin_keep_line_breaks = true 1069 | ij_kotlin_lbrace_on_next_line = false 1070 | ij_kotlin_line_break_after_multiline_when_entry = true 1071 | ij_kotlin_line_comment_add_space = false 1072 | ij_kotlin_line_comment_add_space_on_reformat = false 1073 | ij_kotlin_line_comment_at_first_column = true 1074 | ij_kotlin_method_annotation_wrap = split_into_lines 1075 | ij_kotlin_method_call_chain_wrap = off 1076 | ij_kotlin_method_parameters_new_line_after_left_paren = false 1077 | ij_kotlin_method_parameters_right_paren_on_new_line = false 1078 | ij_kotlin_method_parameters_wrap = off 1079 | ij_kotlin_name_count_to_use_star_import = 5 1080 | ij_kotlin_name_count_to_use_star_import_for_members = 3 1081 | ij_kotlin_packages_to_use_import_on_demand = java.util.*,kotlinx.android.synthetic.**,io.ktor.** 1082 | ij_kotlin_parameter_annotation_wrap = off 1083 | ij_kotlin_space_after_comma = true 1084 | ij_kotlin_space_after_extend_colon = true 1085 | ij_kotlin_space_after_type_colon = true 1086 | ij_kotlin_space_before_catch_parentheses = true 1087 | ij_kotlin_space_before_comma = false 1088 | ij_kotlin_space_before_extend_colon = true 1089 | ij_kotlin_space_before_for_parentheses = true 1090 | ij_kotlin_space_before_if_parentheses = true 1091 | ij_kotlin_space_before_lambda_arrow = true 1092 | ij_kotlin_space_before_type_colon = false 1093 | ij_kotlin_space_before_when_parentheses = true 1094 | ij_kotlin_space_before_while_parentheses = true 1095 | ij_kotlin_spaces_around_additive_operators = true 1096 | ij_kotlin_spaces_around_assignment_operators = true 1097 | ij_kotlin_spaces_around_equality_operators = true 1098 | ij_kotlin_spaces_around_function_type_arrow = true 1099 | ij_kotlin_spaces_around_logical_operators = true 1100 | ij_kotlin_spaces_around_multiplicative_operators = true 1101 | ij_kotlin_spaces_around_range = false 1102 | ij_kotlin_spaces_around_relational_operators = true 1103 | ij_kotlin_spaces_around_unary_operator = false 1104 | ij_kotlin_spaces_around_when_arrow = true 1105 | ij_kotlin_variable_annotation_wrap = off 1106 | ij_kotlin_while_on_new_line = false 1107 | ij_kotlin_wrap_elvis_expressions = 1 1108 | ij_kotlin_wrap_expression_body_functions = 0 1109 | ij_kotlin_wrap_first_method_in_call_chain = false 1110 | 1111 | [{*.markdown,*.md}] 1112 | ij_markdown_force_one_space_after_blockquote_symbol = true 1113 | ij_markdown_force_one_space_after_header_symbol = true 1114 | ij_markdown_force_one_space_after_list_bullet = true 1115 | ij_markdown_force_one_space_between_words = true 1116 | ij_markdown_format_tables = true 1117 | ij_markdown_insert_quote_arrows_on_wrap = true 1118 | ij_markdown_keep_indents_on_empty_lines = false 1119 | ij_markdown_keep_line_breaks_inside_text_blocks = true 1120 | ij_markdown_max_lines_around_block_elements = 1 1121 | ij_markdown_max_lines_around_header = 1 1122 | ij_markdown_max_lines_between_paragraphs = 1 1123 | ij_markdown_min_lines_around_block_elements = 1 1124 | ij_markdown_min_lines_around_header = 1 1125 | ij_markdown_min_lines_between_paragraphs = 1 1126 | ij_markdown_wrap_text_if_long = true 1127 | ij_markdown_wrap_text_inside_blockquotes = true 1128 | 1129 | [{*.pb,*.textproto}] 1130 | indent_size = 2 1131 | tab_width = 2 1132 | ij_continuation_indent_size = 4 1133 | ij_prototext_keep_blank_lines_in_code = 2 1134 | ij_prototext_keep_indents_on_empty_lines = false 1135 | ij_prototext_keep_line_breaks = true 1136 | ij_prototext_space_after_colon = true 1137 | ij_prototext_space_after_comma = true 1138 | ij_prototext_space_before_colon = false 1139 | ij_prototext_space_before_comma = false 1140 | ij_prototext_spaces_within_braces = true 1141 | ij_prototext_spaces_within_brackets = false 1142 | 1143 | [{*.properties,spring.handlers,spring.schemas}] 1144 | ij_properties_align_group_field_declarations = false 1145 | ij_properties_keep_blank_lines = false 1146 | ij_properties_key_value_delimiter = equals 1147 | ij_properties_spaces_around_key_value_delimiter = false 1148 | 1149 | [{*.qute.htm,*.qute.html,*.qute.json,*.qute.txt,*.qute.yaml,*.qute.yml}] 1150 | ij_qute_keep_indents_on_empty_lines = false 1151 | 1152 | [{*.toml,Cargo.lock,Cargo.toml.orig,Gopkg.lock,Pipfile,poetry.lock}] 1153 | ij_toml_keep_indents_on_empty_lines = false 1154 | 1155 | [{*.yaml,*.yml}] 1156 | indent_size = 2 1157 | ij_yaml_align_values_properties = do_not_align 1158 | ij_yaml_autoinsert_sequence_marker = true 1159 | ij_yaml_block_mapping_on_new_line = false 1160 | ij_yaml_indent_sequence_value = true 1161 | ij_yaml_keep_indents_on_empty_lines = false 1162 | ij_yaml_keep_line_breaks = true 1163 | ij_yaml_sequence_on_new_line = false 1164 | ij_yaml_space_before_colon = false 1165 | ij_yaml_spaces_within_braces = true 1166 | ij_yaml_spaces_within_brackets = true 1167 | -------------------------------------------------------------------------------- /.github/workflows/automate-projects.yml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2022 Alliander N.V. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | name: Add issues and pull request to project boards 6 | 7 | on: [ issues, pull_request, pull_request_target ] 8 | 9 | jobs: 10 | github-actions-automate-projects: 11 | runs-on: ubuntu-latest 12 | 13 | if: ${{ (github.event_name != 'pull_request_target' && github.actor != 'dependabot[bot]') || (github.actor == 'dependabot[bot]' && github.event_name == 'pull_request_target') }} 14 | steps: 15 | - name: add-new-issues-to-organization-based-project-column 16 | if: github.event_name == 'issues' && github.event.action == 'opened' 17 | uses: alex-page/github-project-automation-plus@v0.8.1 18 | with: 19 | project: CoMPAS Issues Overview Board 20 | column: To do 21 | repo-token: ${{ secrets.ORG_GITHUB_ACTION_SECRET }} 22 | - name: add-new-pull-request-to-organization-based-project-column 23 | if: (github.event_name == 'pull_request' || github.event_name == 'pull_request_target') && github.event.action == 'opened' 24 | uses: alex-page/github-project-automation-plus@v0.8.1 25 | with: 26 | project: CoMPAS Pull Request Overview Board 27 | column: To do 28 | repo-token: ${{ secrets.ORG_GITHUB_ACTION_SECRET }} 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2021 Alliander N.V. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # IDE specific 6 | .vscode/ 7 | .idea 8 | 9 | # General 10 | .DS_Store 11 | target 12 | *.iml 13 | .settings 14 | .project 15 | .classpath 16 | out 17 | lib 18 | bin 19 | .java-version 20 | *.orig 21 | *.rej 22 | *.swp 23 | *.swo 24 | .cache 25 | build 26 | 27 | -------------------------------------------------------------------------------- /COMMITERS.md: -------------------------------------------------------------------------------- 1 | Please find hereunder our work division: 2 | 3 | **.github** 4 | - Review: [Sander3003](https://github.com/Sander3003) and [FredFousPro](https://github.com/FredFousPro) 5 | 6 | **contributing** 7 | - Review: [Sander3003](https://github.com/Sander3003) and [FredFousPro](https://github.com/FredFousPro) 8 | 9 | **compas-architecture** 10 | - Review: all committers 11 | 12 | **compas-core** 13 | - Review: all committers 14 | - Release: all committers 15 | 16 | **compas-scl-data-service** 17 | - Review: all committers 18 | - Release: all committers 19 | 20 | **compas-cim-mapping** 21 | - Review: all committers 22 | - Release: all committers 23 | 24 | **compas-sct** 25 | - Review: [Flurb](https://github.com/Flurb), [legrosjf](https://github.com/legrosjf), [AliouDIAITE](https://github.com/AliouDIAITE) and [FredFousPro](https://github.com/FredFousPro) 26 | - Release: [legrosjf](https://github.com/legrosjf), [AliouDIAITE](https://github.com/AliouDIAITE) and [FredFousPro](https://github.com/FredFousPro) 27 | 28 | 29 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to CoMPAS 2 | 3 | Go to the site [Contribution to CoMPAS](https://com-pas.github.io/contributing/) 4 | 5 | -------------------------------------------------------------------------------- /GOVERNANCE.md: -------------------------------------------------------------------------------- 1 | # Governance 2 | 3 | Go to the site [Governance](https://com-pas.github.io/contributing/GOVERNANCE.html) 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CoMPAS - (Co)nfiguration (M)odules for (P)ower industry (A)utomation (S)ystems 2 | 3 | [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5925/badge)](https://bestpractices.coreinfrastructure.org/projects/5925) 4 | 5 | ## Mission 6 | 7 | For the mission go to [CoMPAS Mission](https://com-pas.github.io/contributing/MISSION-COMPAS.html). 8 | 9 | ## Presentations 10 | 11 | CoMPAS presentations can be added to the presentations for re-use. 12 | 13 | ## Contributing 14 | 15 | Interested in contributing? Please read carefully the [Contribution to CoMPAS](https://com-pas.github.io/contributing/). 16 | -------------------------------------------------------------------------------- /ROADMAP.md: -------------------------------------------------------------------------------- 1 | # Roadmap 2 | 3 | [Initial Roadmap slides from the LF Energy Design Team on "61850 model implementation and configuration"](/roadmap-docs/CoMPAS%20Initial%20Roadmap%20-%20final%20version.pptx) 4 | 5 | -------------------------------------------------------------------------------- /SUPPORT.md: -------------------------------------------------------------------------------- 1 | # Support 2 | 3 | ## _Key Links_ 4 | 5 | - Website: [CoMPAS - LF Energy](https://www.lfenergy.org/projects/compas/) 6 | - [Artwork](https://github.com/lf-energy/artwork/tree/main/projects/compas) 7 | - Mailing lists: 8 | - [CoMPAS](https://lists.lfenergy.org/g/CoMPAS) 9 | - [CoMPAS-dev](https://lists.lfenergy.org/g/CoMPAS-dev) 10 | - [CoMPAS-tsc](https://lists.lfenergy.org/g/CoMPAS-tsc) 11 | - [slack](https://lfenergy.slack.com/) 12 | -------------------------------------------------------------------------------- /docs/404.html: -------------------------------------------------------------------------------- 1 | 6 |
7 |

404: Page not found

8 |

Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. Head back home to try finding it again.

9 |
10 | -------------------------------------------------------------------------------- /docs/ACCESS_TOKENS.md: -------------------------------------------------------------------------------- 1 | # Access Tokens 2 | 3 | In all parts of the development process we are using Tokens to access other systems then GitHub. To connect to these 4 | systems we often use Access Token to authorize access. These access tokens are personal access token from members of 5 | the CoMPAS Organization. To keep track we keep a list of access token used and who created the access token. This way 6 | we know when they expire and if someone leaves the CoMPAS Organization which ones to replace. 7 | 8 | ## Overview Access Tokens 9 | 10 | Below tokens are all registered under the CoMPAS Organisation as Action Secret. 11 | 12 | | Token Name | Owner | Expire Date | 13 | |--------------------------|-----------------|-------------| 14 | | DOCKER_HUB_USERNAME | LF Energy User | - | 15 | | DOCKER_HUB_TOKEN | LF Energy User | - | 16 | | ORG_GITHUB_ACTION_SECRET | Benjamin Massif | 03/06/2024 | 17 | | SONAR_TOKEN | Pascal Wilbrink | - | 18 | 19 | Below tokens are all registered under the CoMPAS Organisation as Dependabot Secret. 20 | 21 | | Token Name | Owner | Expire Date | 22 | |--------------------------|-----------------|-------------| 23 | | DB_GITHUB_PACKAGES | Pascal Wilbrink | 30/06/2023 | 24 | | ORG_GITHUB_ACTION_SECRET | Benjamin Massif | 03/06/2024 | 25 | | SONAR_TOKEN | Pascal Wilbrink | - | 26 | 27 | Currently, there are no GIT Repository specific secrets registered. Some access tokens are limited to a list of GIT 28 | Repositories allowed to use it. 29 | -------------------------------------------------------------------------------- /docs/DEPENDABOT.md: -------------------------------------------------------------------------------- 1 | # Dependabot 2 | 3 | ## Configure Dependabot Settings 4 | 5 | The first step is that we want to enable Alerts from Dependabot. This needs to be done for every repository that 6 | uses Dependabot. Go to the settings of the repository and select "Security & analysis". Next enable "Dependabot alerts" 7 | and "Dependabot security updates". 8 | 9 | Also remember to give the repository access to the secret DB_GITHUB_PACKAGES at organization level. 10 | 11 | ## Configure Dependabot (yaml) 12 | 13 | Next step is to add a configuration file to the repository that will enable Dependabot. In the repository create a 14 | file "dependabot.yml" in the directory ".github". The basic content will be something like 15 | 16 | ```yaml 17 | version: 2 18 | 19 | registries: #(1) 20 | maven-github: 21 | type: maven-repository 22 | url: https://maven.pkg.github.com/com-pas/* 23 | username: OWNER 24 | password: ${{ secrets.DB_GITHUB_PACKAGES }} 25 | 26 | updates: 27 | # Maintain dependencies for GitHub Actions 28 | - package-ecosystem: "github-actions" #(2) 29 | directory: "/" 30 | schedule: 31 | interval: "daily" 32 | open-pull-requests-limit: 5 33 | 34 | # Maintain dependencies for Maven 35 | - package-ecosystem: "maven" #(3) 36 | directory: "/" 37 | registries: 38 | - maven-github 39 | schedule: 40 | interval: "daily" 41 | open-pull-requests-limit: 5 42 | ``` 43 | 44 | - (1): This configures the GitHub Maven Repository that Dependabot can use to search for new versions of CoMPAS Dependencies. 45 | - (2): This will check if the newest versions of GitHub Actions are used. Default it will scan the directory ".github/workflows" 46 | under the directory defined here (in this case "/"). 47 | - (3): This will scan the Maven Plugins and Dependencies defined in the pom.xml files. The GitHub Maven Repository is also 48 | defined here. 49 | 50 | Both scans are executed daily and create a maximum of 5 pull request. After a pull request is handled it will create the 51 | next one if there is one. 52 | 53 | The configuration can be fine-tuned further. For instance with some libraries it isn't possible to use the latest version. 54 | Below is an example how to prevent Dependabot from creating pull request for these dependencies. In the example 55 | the JAXB Implementation can't higher. 56 | 57 | ```yaml 58 | # Maintain dependencies for Maven 59 | - package-ecosystem: "maven" 60 | directory: "/" 61 | registries: 62 | - maven-github 63 | schedule: 64 | interval: "daily" 65 | open-pull-requests-limit: 5 66 | ignore: 67 | # Next two dependencies shouldn't be upgrade, because RestEasy isn't using newer version. (2.3.X) 68 | - dependency-name: jakarta.xml.bind:jakarta.xml.bind-api 69 | versions: [ "[3.0,)" ] 70 | - dependency-name: com.sun.xml.bind:jaxb-impl 71 | versions: [ "[3.0,)" ] 72 | ``` 73 | 74 | Dependabot uses the configuration found in the default branch (often 'develop'), so to make it effective use a 75 | pull request to merge it into the default branch. 76 | 77 | ## Adding Dependabot Secret DB_GITHUB_PACKAGES 78 | 79 | To access GitHub Packages a secret DB_GITHUB_PACKAGES needs to be created. 80 | - First create a new personal access token from https://github.com/settings/tokens. Tokens can only be created as personal tokens. 81 | The token also must have the right "read:packages". 82 | - Next create a new organisation secret from https://github.com/organizations/com-pas/settings/secrets/dependabot with the value of 83 | personal access token you created above. Name the secret DB_GITHUB_PACKAGES. Make it available to the repositories that have 84 | Dependabot configured. 85 | 86 | Now Dependabot can use this secret to access GitHub Packages. 87 | 88 | ## Handling the pull request 89 | 90 | Pull request created by Dependabot can be handled just like other pull request, but there is 1 issue to know. 91 | Some GitHub Actions, like SonarCloud and AutomateProjects, will fail if they are started by the pull request from 92 | Dependabot. This is caused by a security issues that was fixed. These actions can't access Secrets when started by a Bot. 93 | For some of these actions it maybe solved in some way, but if that is not possible just manually re-run the action. 94 | The action will then succeed. 95 | -------------------------------------------------------------------------------- /docs/DEPLOYMENT.md: -------------------------------------------------------------------------------- 1 | # Deployment of CoMPAS 2 | We deploy the (native) Docker image of all CoMPAS services to Docker Hub. This way, it can be pulled and deployed into environments of your choice (OpenShift for example). 3 | 4 | ## Quick Deployment instructions (under construction) 5 | The following instructions are terminal instructions for publishing a Quarkus docker image to Docker Hub. This should be done by a GitHub Action in the future. 6 | 7 | ``` 8 | docker login # Creating a Docker session 9 | ``` 10 | In order to publish it to Docker Hub, you have to login first and create a session. 11 | 12 | ``` 13 | ./gradlew clean build -Pnative -Dquarkus.native.container-build=true -Dquarkus.container-image.build=true -Dquarkus.container-image.group=group -Dquarkus.container-image.name=name -Dquarkus.container-image.push=true 14 | ``` 15 | Few points in this single command: 16 | - `-Pnative` creates a native executable (this needs some prework, see the Building Native Image [documentation](https://quarkus.io/guides/building-native-image)). 17 | - `-Dquarkus.native.container-build=true` creates a Linux executable without GraalVM being installed (only necessary if GraalVM is not installed). 18 | - `-Dquarkus.container-image.build=true` creates a container image with the native executable in it. 19 | - `-Dquarkus.container-image.group=group` defining the group name. Standard it's the system user name. 20 | - `-Dquarkus.container-image.name=name` defining the name of the image. Standard it's 'app'. 21 | - `-Dquarkus.container-image.push=true` deploys to docker image to Docker Hub. 22 | 23 | # Sources 24 | 25 | [Full documentation about deploying Quarkus application to Docker Hub](https://dev.to/marcuspaulo/tutorial-publish-a-quarkus-application-in-kubernetes-minikube-and-dockerhub-36nd) -------------------------------------------------------------------------------- /docs/DEVELOPING.md: -------------------------------------------------------------------------------- 1 | # Developing for CoMPAS 2 | 3 | #### Table Of Contents 4 | 5 | * [CoMPAS components](#compas-components) 6 | * [Local development](#local-development) 7 | * [Tooling](#tooling) 8 | * [IDEs](#ides) 9 | * [GitHub Actions](#github-actions) 10 | * [Others](#others) 11 | 12 | ## CoMPAS components 13 | 14 | CoMPAS is composed of multiple components, each designed to fulfill a specific role within the project. The following is an overview of these components, their description, and their associated repositories. 15 | 16 | - **CoMPAS Open SCD** 17 | *Description*: Provides a web-based tool for editing and validating Substation Configuration Description (SCD) files. 18 | *Technologies*: TypeScript, JavaScript 19 | *Repository*: [https://github.com/com-pas/compas-open-scd](https://github.com/com-pas/compas-open-scd) 20 | 21 | - **CoMPAS SCL Data Service** 22 | *Description*: Manages SCL data storage and retrieval. 23 | *Technologies*: Java, Quarkus, Maven, PostgreSQL 24 | *Repository*: [https://github.com/com-pas/compas-scl-data-service](https://github.com/com-pas/compas-scl-data-service) 25 | 26 | - **CoMPAS CIM Mapping** 27 | *Description*: Handles mapping between IEC CIM and IEC 61850. 28 | *Technologies*: Java, Quarkus, Maven 29 | *Repository*: [https://github.com/com-pas/compas-cim-mapping](https://github.com/com-pas/compas-cim-mapping) 30 | 31 | - **CoMPAS SCL Validator** 32 | *Description*: Validates SCL files to ensure compliance with standards. 33 | *Technologies*: Java, Quarkus, Maven 34 | *Repository*: [https://github.com/com-pas/compas-scl-validator](https://github.com/com-pas/compas-scl-validator) 35 | 36 | - **CoMPAS SCL Auto Alignment** 37 | *Description*: Automatically aligns SCL files without coordinates. 38 | *Technologies*: Java, Quarkus, Maven 39 | *Repository*: [https://github.com/com-pas/compas-scl-auto-alignment](https://github.com/com-pas/compas-scl-auto-alignment) 40 | 41 | - **CoMPAS Core** 42 | *Description*: Provides core utilities and shared functionality for other CoMPAS services. 43 | *Technologies*: Java, Quarkus, Maven 44 | *Repository*: [https://github.com/com-pas/compas-core](https://github.com/com-pas/compas-core) 45 | 46 | - **CoMPAS SCT** 47 | *Description*: A library for generating SCD files based on the IEC 61850 standard. 48 | *Technologies*: Java, Quarkus, Maven 49 | *Repository*: [https://github.com/com-pas/compas-sct](https://github.com/com-pas/compas-sct) 50 | 51 | - **CoMPAS SCL XSD** 52 | *Description*: Contains the official IEC 61850-6 SCL XSD schemas. 53 | *Technologies*: Java, Quarkus, Maven 54 | *Repository*: [https://github.com/com-pas/compas-scl-xsd](https://github.com/com-pas/compas-scl-xsd) 55 | 56 | - **CoMPAS Deployment** 57 | *Description*: Provides tools and configurations for deploying CoMPAS services. 58 | *Repository*: [https://github.com/com-pas/compas-deployment](https://github.com/com-pas/compas-deployment) 59 | 60 | - **CoMPAS Architecture** 61 | *Description*: Contains architectural documentation and diagrams for the CoMPAS project. 62 | *Repository*: [https://github.com/com-pas/compas-architecture](https://github.com/com-pas/compas-architecture) 63 | 64 | ## Local development 65 | 66 | This section provides instructions for setting up a local development environment and running the CoMPAS stack or individual services. 67 | 68 | ### Prerequisites 69 | 70 | Ensure the following tools are installed on your system: 71 | - [Docker](https://www.docker.com/) 72 | - [Docker Compose](https://docs.docker.com/compose/) 73 | 74 | ### Running the CoMPAS stack locally 75 | 76 | To run the entire CoMPAS stack locally, you can use the [compas-deployment](https://github.com/com-pas/compas-deployment) repository, which provides a pre-configured `docker-compose-postgresql.yml` file. Follow these steps: 77 | 78 | 1. Clone the `compas-deployment` repository: 79 | 80 | ```bash 81 | git clone https://github.com/com-pas/compas-deployment.git 82 | cd compas-deployment 83 | ``` 84 | 85 | 2. To build and start all services run: 86 | 87 | ```bash 88 | docker-compose --env-file compas/.env -f compas/docker-compose-postgresql.yml up -d --build 89 | ``` 90 | 91 | 3. Use the `./bin/docker-wait-on-containers.sh` script to wait for all containers to be fully initialised. Once all containers are ready, it will print a message indicating that no containers are in the health=starting state. 92 | 93 | ```bash 94 | ./bin/docker-wait-on-containers.sh 95 | ``` 96 | 97 | 4. Once the stack is running, the application will be available at [http://localhost](http://localhost). You can log in using the credentials configured in the Keycloak demo setup. For more information on the Keycloak users that are created, refer to the [Keycloak Demo Configuration documentation](https://github.com/com-pas/compas-deployment/tree/main?tab=readme-ov-file#keycloak-demo-configuration). If you encounter any issues, refer to the [Known Issues section](https://github.com/com-pas/compas-deployment/tree/main?tab=readme-ov-file#known-issue-with-docker-compose) in the compas-deployment repository. 98 | 99 | 5. To stop the stack, run: 100 | 101 | ```bash 102 | # Stop all containers 103 | docker-compose -f compas/docker-compose-postgresql.yml down 104 | ``` 105 | or 106 | 107 | ```bash 108 | # Stop all containers and remove the volumes. 109 | docker-compose -f compas/docker-compose-postgresql.yml down -v 110 | ``` 111 | 112 | ### Running an individual service locally 113 | 114 | Each repository contains the relevant and most up-to-date information on setting up the development environment and running the service locally. Refer to the `DEVELOPMENT.md` file or equivalent documentation in the respective repository for detailed instructions. 115 | 116 | | Component | Development Guide | 117 | |-------------------------------|-------------------------------------------------------------------------------------------------------| 118 | | **CoMPAS Open SCD** | [Development Guide](https://github.com/com-pas/compas-open-scd/blob/main/packages/compas-open-scd/DEVELOPMENT.md) | 119 | | **CoMPAS SCL Data Service** | [Development Guide](https://github.com/com-pas/compas-scl-data-service/blob/main/doc/postgresql.md) | 120 | | **CoMPAS CIM Mapping** | [Development Guide](https://github.com/com-pas/compas-cim-mapping/blob/main/DEVELOPMENT.md) | 121 | | **CoMPAS SCL Validator** | [Development Guide](https://github.com/com-pas/compas-scl-validator/blob/main/DEVELOPMENT.md) | 122 | | **CoMPAS SCL Auto Alignment** | [Development Guide](https://github.com/com-pas/compas-scl-auto-alignment/blob/main/DEVELOPMENT.md) | 123 | | **CoMPAS Core** | Not available | 124 | | **CoMPAS SCT** | Not available | 125 | | **CoMPAS SCL XSD** | Not available | 126 | | **CoMPAS Deployment** | [Development Guide](https://github.com/com-pas/compas-deployment/blob/main/README.md) | 127 | 128 | ## Tooling 129 | 130 | ### GitHub 131 | What's GitHub? It's where you're looking right now! (Joking!). 132 | 133 | We are using GitHub for hosting our Git repositories. GitHub is being used for creating issues and creating Pull 134 | Requests to review / merge each other's code. 135 | 136 | #### GitHub User Settings 137 | We noticed that there are sometimes problems with the DCO Check. This can be caused by an email setting of the user. 138 | It's about keeping the email address private. 139 | 140 | Go to Settings of your account and select the option `Emails`. Here you will find the setting `Keep my email addresses 141 | private`. Uncheck this setting. When checked there are cases that the DCO Check will fail, because the `github.com` 142 | email address is used in the Web interface. When failing it will cause a lot of work to fix it. 143 | 144 | ### LFX Security Tool 145 | For checking potential security issues, we use the [LFX Security Tool](https://security.lfx.linuxfoundation.org/#/a092M00001IkJTLQA3/overview). 146 | The LFX Security Tool scans selected repositories for potential security issues in dependencies. 147 | It also scans every license that is being used within a repository and checks if they are compatible within open source projects. 148 | 149 | ### SonarCloud 150 | CoMPAS is using [SonarCloud](https://sonarcloud.io/organizations/com-pas/projects) for static code analysis. 151 | Every GitHub repository has a GitHub Action which automatically pushes the code to SonarCloud with a frequency of the given 152 | GitHub Action (most of the time on each push). 153 | 154 | A Pull Request can't be merged before all SonarCloud issues are being fixed! 155 | 156 | ### GitHub Packages 157 | To make artifacts available between the different GIT repositories we are using GitHub Packages to distribute these. 158 | Every GIT repository can build its artifacts and publish these to GitHub Packages. 159 | Other GIT repositories can then add GitHub Packages as Maven repository to their build tool. 160 | See below how to do both action for the specific tools. 161 | 162 | To use GitHub Packages a username and token is needed. The username is your GitHub username. The token can be generated 163 | in GitHub by going to your settings, Developer settings, Personal access tokens. 164 | Generate a new token here and make sure that the scope "read:packages" is enabled. Use this token below to configure the build tools. 165 | 166 | ### Basic Maven 167 | The project uses Maven to manage the build. Most projects use multi-module structures to build all code. A basic command to run Maven is: 168 | ``` 169 | $ maven clean verify 170 | ``` 171 | 172 | #### GitHub Packages in Maven 173 | To use GitHub Packages in Maven an extra repository need to be added to the build process. 174 | ```xml 175 | 176 | 177 | github-packages-compas 178 | GitHub Packages CoMPAS 179 | https://maven.pkg.github.com/com-pas/* 180 | 181 | 182 | ``` 183 | Because credentials are needed for GitHub Packages, these will be passed by using the Settings.xml file. 184 | 185 | #### Maven Local Settings.xml for GitHub Packages 186 | Edit (or create if not already exists) the `~/.m2/settings.xml` file and add the following content: 187 | ```xml 188 | 192 | 193 | 194 | 195 | github-packages-compas 196 | username 197 | password 198 | 199 | 200 | 201 | 202 | ``` 203 | 204 | Add this server section. The ID of the server must be the same as the ID found in the previous repository ID, it should map. 205 | Username should be your GitHub username, password can both be your own [encrypted password](https://maven.apache.org/guides/mini/guide-encryption.html) 206 | or a [Personal Access Token](https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token). 207 | 208 | 209 | ## IDEs 210 | If your IDE is supported by SonarLint (both IntelliJ IDEA and the Eclipse IDE are supported), it is recommended to install it. 211 | It provides immediate feedback on most sonar issues. Running tests individually is often possible in IDEs without invoking maven. 212 | Please consult the documentation of your IDE for setting up the project through maven integration. 213 | 214 | For MapStruct there are plugins available for both IDEs mentioned below. See this [page](https://mapstruct.org/documentation/ide-support/). 215 | 216 | ### Intellij IDEA 217 | Import the project using IDEA's maven integration in the GUI. Install SonarLint. Code! 218 | 219 | ### Eclipse IDE 220 | Eclipse IDE has two ways to import maven projects: the eclipse GUI component m2e that understands maven or the maven CLI component maven-eclipse-plugin. 221 | 222 | Using maven-eclipse-plugin, it is possible to recreate all the necessary eclipse files from scratch. A practical way to use it and get deterministic results is to remove all existing eclipse files, delete all eclipse projects from the workspace, regenerate all the eclipse files and reimport everything into eclipse as "existing eclipse projects". If all your projects are checked out outside of the eclipse workspace on the file system, then deleting all the projects is even simpler because you can just delete the whole workspace. The whole cycle takes only a few seconds. 223 | ``` 224 | # Ensure that eclipse is not running 225 | # delete the projects in the GUI, or "rm -rf" all eclipse projects from the workspace 226 | # delete all eclipse files from the file system 227 | $ find . -name .project -o .classpath -o -name .settings -exec rm -rf '{}' \; 228 | # regenerate eclipse files 229 | $ mvn package eclipse:eclipse 230 | # import as existing eclipse projects in the GUI (alternatively, use eclim's :ProjectImportDiscover directly from ViM) 231 | ``` 232 | 233 | After importing the projects with either method, install SonarLint for quicker feedback on potential sonar issues. 234 | 235 | ## Others 236 | 237 | ### Adding custom badges to your README 238 | Badges are great for quickly checking several status reports of a specific repository. 239 | Sometimes a application doesn't serve badges ([LFX Security tool](https://security.lfx.linuxfoundation.org/) for example), and you need to do it yourself. 240 | We use [shields.io](https://shields.io/) for this problem. 241 | 242 | In case of the LFX Security Tool, we used the following: 243 | - Go to [shields.io](https://shields.io/). 244 | - Go to the 'Dynamic' section. 245 | - Choose JSON as data type. 246 | - Insert 'LFX Security Tool' as the label. 247 | - Insert the API to use, in case of our LFX Security tool projects we use [this API](https://api.security.lfx.linuxfoundation.org/v1/project/e8b6fdf9-2686-44c5-bbaa-6965d04ad3e1/issues). 248 | - Now you can query using JsonPath. To get all open high issues from the 'CoMPAS Core' project, use `issues[?(@['repository-name'] == 'compas-core')]['high-open-issues']`. 249 | - Choose a color and a pre- or suffix text. 250 | -------------------------------------------------------------------------------- /docs/GITHUB_ACTIONS.md: -------------------------------------------------------------------------------- 1 | # GitHub Actions 2 | Every repository within the CoMPAS GitHub organization need a default set of GitHub Actions. 3 | [GitHub Actions](https://github.com/features/actions) are CI/CD steps within a GitHub Repository that you can configure. This way, you can ensure that certain steps (like building) are always triggered on for example a commit push. 4 | 5 | Within CoMPAS, we define the following 'must have' GitHub Actions: 6 | - [Building](#building) 7 | - [REUSE check](#reuse-check) 8 | - [SonarCloud](#sonarcloud) 9 | - [Docker Hub Deployment](#docker-hub-deployment) 10 | 11 | More to follow. 12 | 13 | GitHub Actions are configured using YAML files. These files are stored in the `.github/workflows` directory of a specific repository. 14 | 15 | ## Maven settings.xml during GitHub Action for GitHub Packages 16 | During multiple GitHub Actions (like building and SonarCloud analysis), the custom `settings.xml` file is needed because it needs access to the GitHub Packages 17 | to download certain artifacts. We can do this by adding the following step **before** the GitHub Packages repository is needed. 18 | 19 | ```yaml 20 | - name: Create custom Maven Settings.xml 21 | uses: whelk-io/maven-settings-xml-action@v18 22 | with: 23 | output_file: custom_maven_settings.xml 24 | servers: '[{ "id": "github-packages-compas", "username": "OWNER", "password": "${{ secrets.GITHUB_TOKEN }}" }]' 25 | ``` 26 | 27 | This basically creates a custom `settings.xml` at location `custom_maven_settings.xml`. This file can be passed to maven in the next step 28 | by using `mvn -s custom_maven_settings.xml` and perhaps some extra parameters you wish for. 29 | 30 | For the `servers` part, we again have the `github-packages-compas` ID that needs to be the same. We have an `OWNER` username (this is the default, because 31 | it needs to have a username) and a password which is the GITHUB_TOKEN that's always available. 32 | 33 | ## Building 34 | All source code repositories need some kind of building step. 35 | By default, all source code repositories use Maven as the build tool. 36 | 37 | This building step is pretty easy to configure. Just create a `maven_build.yml` file in the `.github/workflows` directory containing the following source code: 38 | 39 | ```yaml 40 | name: Maven Build 41 | 42 | on: push #(1) 43 | 44 | jobs: 45 | build: 46 | name: Build 47 | runs-on: ubuntu-latest 48 | timeout-minutes: 15 49 | 50 | steps: 51 | - uses: actions/checkout@v2 52 | - name: Set up JDK 1.11 53 | uses: actions/setup-java@v2.3.0 54 | with: 55 | distribution: 'zulu' 56 | java-version: '11' 57 | - name: Create custom Maven Settings.xml #(2) 58 | uses: whelk-io/maven-settings-xml-action@v18 59 | with: 60 | output_file: custom_maven_settings.xml 61 | servers: '[{ "id": "github-packages-compas", "username": "OWNER", "password": "${{ secrets.GITHUB_TOKEN }}" }]' 62 | - name: Build with Maven 63 | run: mvn -s custom_maven_settings.xml -B clean verify #(3) 64 | ``` 65 | 66 | A few points to remember: 67 | - (1): By default, all actions are triggered on a push action. 68 | - (2): This step creates a custom settings.xml for authenticating for GitHub Packages. For more information, 69 | check the [Contributing file](https://github.com/com-pas/contributing/blob/master/CONTRIBUTING.md). 70 | - (3): This is a default for building a Maven project. It may differ in some cases, please feel free to adjust it. 71 | 72 | ## REUSE check 73 | For keeping our copyright and licensing information up to date and correct, we use [REUSE](https://reuse.software/) to check this. This is also configured for every separate repository in an easy manner: just create a `reuse.yml` file in the `.github/workflows` directory containing the following source code: 74 | 75 | ```yaml 76 | name: REUSE Compliance Check 77 | 78 | on: push #(1) 79 | 80 | jobs: 81 | test: 82 | runs-on: ubuntu-latest 83 | steps: 84 | - uses: actions/checkout@v2 85 | - name: REUSE Compliance Check 86 | uses: fsfe/reuse-action@v1 87 | ``` 88 | 89 | A few points to remember: 90 | - (1): By default, all actions are triggered on a push action. 91 | 92 | This is the only thing that has to be done. After this, it will be checked on every push. 93 | 94 | ### REUSE badge 95 | For transparency, CoMPAS repositories also include a REUSE badge in their README for fast checking the REUSE compliance. 96 | 97 | Two steps are needed to get a REUSE badge to work: 98 | 99 | 1. Register the Repository at the [REUSE website](https://api.reuse.software/register). For name and email, check the [Slack channel](https://app.slack.com/client/TLU68MTML). 100 | 2. Add the following code to the README: 101 | 102 | ```md 103 | [![REUSE status](https://api.reuse.software/badge/github.com/com-pas/repoName)](https://api.reuse.software/info/github.com/com-pas/repoName) 104 | ``` 105 | 106 | There is one steps left: Replace `repoName` with the name of the specific repository (as stated in the URL). 107 | 108 | After doing all these steps, everything is set up for the REUSE check. 109 | 110 | ## SonarCloud 111 | For static code analysis, CoMPAS is using [SonarCloud](https://sonarcloud.io/). To configure this, there are several steps that needs to be done. 112 | 113 | 1. Go to the [CoMPAS GitHub organization settings](https://github.com/organizations/com-pas/settings/profile), and click on "Installed GitHub Apps". SonarCloud is listed here already (because we are already using it). Click on the 'configure' button next to it. 114 | 2. In the "Repository access" section, select the repository you want to add. By default, not every repository is added as an extra check. 115 | 3. Create a new project in [SonarCloud](https://sonarcloud.io/projects/create). 116 | 4. Select the repository to be analyzed, click Set Up. 117 | 5. Choose the Analysis Method "With GitHub Actions". 118 | 6. It first tells you to create a SONAR_TOKEN secret in your repo. Go to your repository -> Settings - Secrets -> New repository secret -> Name: SONAR_TOKEN. Value: Copy the value from the SonarCloud website into here. Then save the secret 119 | 7. Select Maven as the option that best describes our build and **remember the projectKey**. and create a `sonarcloud_analysis.yml` file in the `.github/workflows` directory containing the following source code running. 120 | 121 | ```yaml 122 | name: SonarCloud Analysis 123 | 124 | on: push #(1) 125 | 126 | jobs: 127 | build: 128 | name: Build 129 | runs-on: ubuntu-latest 130 | timeout-minutes: 15 131 | 132 | steps: 133 | - uses: actions/checkout@v2 134 | with: 135 | fetch-depth: 0 136 | - name: Set up JDK 1.11 137 | uses: actions/setup-java@v2.3.0 138 | with: 139 | distribution: 'zulu' 140 | java-version: '11' 141 | - name: Cache SonarCloud packages 142 | uses: actions/cache@v2.1.6 143 | with: 144 | path: ~/.sonar/cache 145 | key: ${{ runner.os }}-sonar 146 | restore-keys: ${{ runner.os }}-sonar 147 | - name: Cache Maven packages 148 | uses: actions/cache@v2.1.6 149 | with: 150 | path: ~/.m2 151 | key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} 152 | restore-keys: ${{ runner.os }}-m2 153 | - name: Create custom Maven Settings.xml #(2) 154 | uses: whelk-io/maven-settings-xml-action@v18 155 | with: 156 | output_file: custom_maven_settings.xml 157 | servers: '[{ "id": "github-packages-compas", "username": "OWNER", "password": "${{ secrets.GITHUB_TOKEN }}" }]' 158 | - name: Build and analyze 159 | env: 160 | SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} 161 | run: | #(3) 162 | mvn -s custom_maven_settings.xml -B -Psonar \ 163 | -Dsonar.projectKey= \ 164 | -Dsonar.organization=com-pas \ 165 | -Dsonar.host.url=https://sonarcloud.io \ 166 | verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar 167 | ``` 168 | 169 | A few points to remember: 170 | - (1): By default, all actions are triggered on a push action. 171 | - (2): Creates a custom `settings.xml` having the credentials for the GitHub Packages. 172 | For more information, check our [Contributing](https://github.com/com-pas/contributing/blob/master/CONTRIBUTING.md). 173 | - (3): Replace the `` with the project key you copied. 174 | 175 | Once this is set, it's all done! 176 | 177 | ## Docker Hub Deployment 178 | For automatic deployment of our microservices, CoMPAS uses Docker Hub as the central docker image repository. This way, all Docker images can be pulled from a central image repository. 179 | 180 | This step is easy to configure. Just create a `dockerhub_deployment.yml` file in the `.github/workflows` directory containing the following source code: 181 | 182 | ```yaml 183 | name: Docker Hub Deployment 184 | 185 | on: 186 | release: 187 | types: [released] #(1) 188 | 189 | jobs: 190 | push_to_registry: 191 | name: Build and publish 192 | runs-on: ubuntu-latest 193 | steps: 194 | - uses: actions/checkout@v2 195 | - name: Login to Docker Hub #(2) 196 | uses: docker/login-action@v1 197 | with: 198 | username: ${{ secrets.DOCKER_HUB_USERNAME }} 199 | password: ${{ secrets.DOCKER_HUB_PASSWORD }} 200 | - name: Extract tag name #(3) 201 | id: extract_tagname 202 | shell: bash 203 | # Extra the tagname form the git reference, value of GITHUB_REF will be something like refs/tags/. 204 | run: echo "##[set-output name=tagname;]$(echo ${GITHUB_REF##*/})" 205 | - name: Set up JDK 11 206 | uses: actions/setup-java@v2.3.0 207 | with: 208 | distribution: 'zulu' 209 | java-version: '11' 210 | - name: Create custom Maven Settings.xml 211 | uses: whelk-io/maven-settings-xml-action@v18 212 | with: 213 | output_file: custom_maven_settings.xml #(4) 214 | servers: '[{ "id": "github-packages-compas", "username": "OWNER", "password": "${{ secrets.GITHUB_TOKEN }}" }]' 215 | - name: Set version with Maven 216 | run: mvn -B versions:set -DprocessAllModules=true -DnewVersion=${{ steps.extract_tagname.outputs.tagname }} 217 | - name: Deploy with Maven to GitHub Packages and Docker Hub #(5) 218 | run: ./mvnw -B -s custom_maven_settings.xml -Prelease,native clean deploy 219 | ``` 220 | 221 | A few points to remember: 222 | - (1): By default, the docker image is only deployed on release. This way we have a strict deployment flow, and versions always have the same content. For more information about types of releases, check the [GitHub Actions documentation](https://docs.github.com/en/actions/reference/events-that-trigger-workflows#release). 223 | - (2): Before deploying to Docker Hub, we need to login first. This can be done by executing a GitHub Action. In this example, `DOCKER_HUB_USERNAME` and `DOCKER_HUB_PASSWORD` are used, which are secrets stored at [CoMPAS organization](https://github.com/organizations/com-pas/settings/secrets/actions). For more information about the username and password, ask in the the [Slack channel](https://app.slack.com/client/TLU68MTML). 224 | - (3): Extract the tag name from Git and use that as version to be set with Maven (${{ steps.extract_tagname.outputs.tagname }}). 225 | - (4): Creates a custom `settings.xml` having the credentials for the GitHub Packages. 226 | For more information, check our [Contributing](https://github.com/com-pas/contributing/blob/master/CONTRIBUTING.md). 227 | - (5): Building and publishing the docker image is build tool / framework specific. By default, CoMPAS services are using Quarkus and Maven. Deploying to Docker Hub is quite easy using Quarkus and maven, it's just a matter of building in combination with setting some properties. In this example, we use the `quarkus-profile` parameter instead of including all the parameters. This way, we can define profile specific properties in our `application.properties` file (For more information about this, check our [Docker Hub Deployment page](./DEPLOYMENT.md)): 228 | 229 | ```ini 230 | %publishNativeImage.quarkus.native.container-build=true 231 | %publishNativeImage.quarkus.container-image.build=true 232 | %publishNativeImage.quarkus.container-image.group=lfenergycompas 233 | %publishNativeImage.quarkus.container-image.name=compas-scl-data-service 234 | %publishNativeImage.quarkus.container-image.push=true 235 | ``` 236 | -------------------------------------------------------------------------------- /docs/GOVERNANCE.md: -------------------------------------------------------------------------------- 1 | # Governance 2 | 3 | #### Table Of Contents 4 | 5 | * [Project Owner](#project-owner) 6 | * [Technical Charter](#technical-charter) 7 | * [Committers](#committers) 8 | * [Responsibilities](#responsibilities) 9 | * [Technical Steering Committee](#technical-steering-committee) 10 | * [Contributors](#contributors) 11 | 12 | ## Project Owner 13 | 14 | CoMPAS is part of the [LF Energy Foundation](https://www.lfenergy.org/), a project of The Linux Foundation that supports 15 | open source innovation projects within the energy and electricity sectors. 16 | 17 | ## Technical Charter 18 | 19 | The Project's [Technical Charter](blob-files/CoMPAS_Technical_Charter_2020-06-07.pdf) sets forth the responsibilities and 20 | procedures for technical contribution to, and oversight of, the COMPAS Project. 21 | 22 | ## Committers 23 | 24 | Committers are contributors who have made several valuable contributions to the project and are now relied upon to both 25 | write code directly to the repository and screen the contributions of others. In many cases they are programmers, 26 | but it is also possible that they contribute in a different role. Typically, a committer will focus on a specific aspect 27 | of the project, and will bring a level of expertise and understanding that earns them the respect of the community and the project owner. 28 | 29 | ## Responsibilities 30 | 31 | The project is split into several repositories. There is at least one Committer in charge of each repository. 32 | By "in charge", we mean: 33 | - best effort to review the pull request, 34 | - best effort to resolve issues, 35 | - building and publishing the releases, including writing the release notes and informing the community, 36 | - in case of inability to perform the above tasks, the Committer in charge has to ask the TSC through the list 37 | [CoMPAS-tsc@lists.lfenergy.org](mailto:CoMPAS-tsc@lists.lfenergy.org) to find another Committer to review the pull request, 38 | resolve the issue or build and publish the release. 39 | 40 | Please refer to our [commiters file](https://github.com/com-pas/contributing/blob/master/COMMITERS.md) for more details about our work division. 41 | 42 | ## Technical Steering Committee 43 | 44 | The Technical Steering Committee (TSC) is composed of voting members elected by the active Committers as described in the 45 | project’s Technical Charter. The TSC is responsible for the technical direction of the project. 46 | 47 | ### Members 48 | 49 | CoMPAS TSC voting members can be fond the LFX project center. https://projectadmin.lfx.linuxfoundation.org/ and look for the CoMPAS project 50 | 51 | ### Voting 52 | 53 | While the Project aims to operate as a consensus-based community, if any TSC decision requires a vote to move the Project 54 | forward, the voting members of the TSC will vote on a one vote per voting member basis. The simple majority is needed to approve proposals. 55 | The preferred way to vote is to create a poll [here](https://lists.lfenergy.org/g/CoMPAS-tsc/addpoll). 56 | 57 | ## Contributors 58 | 59 | Contributors include anyone in the technical community that contributes code, documentation, or other technical artifacts to the Project. 60 | 61 | Anyone can become a contributor. There is no expectation of commitment to the project, no specific skill requirements and no selection process. 62 | To become a contributor, a community member simply has to perform one or more actions that are beneficial to the project. 63 | -------------------------------------------------------------------------------- /docs/HOME.md: -------------------------------------------------------------------------------- 1 | # Contributing to CoMPAS 2 | 3 | First off, thanks for taking the time to contribute! 4 | 5 | The following is a set of guidelines for contributing to the CoMPAS project. These are mostly guidelines, sometimes rules. 6 | Use your best judgment, and feel free to propose changes to this document in a pull request. 7 | 8 | #### Table Of Contents 9 | 10 | [Code of Conduct](#code-of-conduct) 11 | 12 | [License and Developer Certificate of Origin](#license-and-developer-certificate-of-origin) 13 | 14 | [How Can I Contribute?](#how-can-i-contribute) 15 | * [Community refinements](#community-refinements) 16 | * [Reporting Bugs and Suggesting Enhancements](#reporting-bugs-and-suggesting-enhancements) 17 | * [Contributing Code](#contributing-code) 18 | * [Tools to contribute](#tools-to-contribute) 19 | * [Definition of Done](#definition-of-done) 20 | * [Copyright Guidelines](#definition-of-done) 21 | * [How-to begin](#how-to-begin) 22 | * [Copyright and Licensing](#copyright-and-licensing) 23 | * [GitHub Project Boards](#github-project-boards) 24 | 25 | [GitHub Pages](#github-pages) 26 | 27 | 28 | ## Code of Conduct 29 | 30 | This project applies the [LF Energy Code of Conduct](https://www.lfenergy.org/about/code-of-conduct/). 31 | By participating, you are expected to uphold this code. Please report unacceptable behavior to the project's 32 | Technical Steering Committee [CoMPAS-tsc@lists.lfenergy.org](mailto:CoMPAS-tsc@lists.lfenergy.org). 33 | 34 | ## License and Developer Certificate of Origin 35 | 36 | By contributing to the CoMPAS project, you accept and agree to the following terms and conditions for your present and future contributions submitted to CoMPAS. 37 | 38 | All contributions to this project are licensed under the license stipulated at the corresponding sub-repository. 39 | Except where otherwise explicitly indicated, CoMPAS is an open source project licensed under the [Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0/). 40 | 41 | The project requires the use of the [Developer Certificate of Origin (DCO)](https://developercertificate.org/). 42 | The DCO is a legally binding statement asserting that you are you have the right to submit your contribution and to license it under the project's applicable license. 43 | 44 | Contributors sign-off that they adhere to the term of the DCO by adding a ``Signed-off-by`` line to commit messages. The DCO sign-off must be attached to every contribution made by every contributor. 45 | 46 | Here is an example ``Signed-off-by`` line, that indicates the contributor accepts the DCO: 47 | 48 | ```` 49 | This is my commit message. 50 | 51 | Signed-off-by: Name Surname 52 | ```` 53 | You can write it manually but Git even has a -s command line option to append this automatically to your commit message: 54 | ```` 55 | $ git commit -s -m 'This is my commit message' 56 | ```` 57 | 58 | Note that checks will be performed during the integration in order to require that commits in a Pull Request contain valid ``Signed-off-by`` lines. 59 | 60 | ## How Can I Contribute? 61 | 62 | ## Community refinements 63 | 64 | Online community refinement sessions can be scheduled ad-hoc e.g. via Slack. Feedback on stories/features can be put in the Github issue. 65 | 66 | ### Prepared topics 67 | 68 | Topics to refine can be shared and published on the #compas channel on our [LFEnergy Slack](https://lfenergy.slack.com/). You can ask feedback upfront as well. 69 | 70 | ### Add your own topics 71 | 72 | Everybody can suggest topics for the refinement. To do this, join the [LFEnergy Slack](https://lfenergy.slack.com/) if not already, and put your topics in the #compas channel. You can just do this by writing a message like "I want to add something to the refinement this Monday, namely..." or add a comment to the already prepared topics if available (see [Prepared topics](#prepared-topics)). 73 | 74 | ### Reporting Bugs and Suggesting Enhancements 75 | 76 | Bugs and enhancement suggestions are tracked as [GitHub issues](https://guides.github.com/features/issues/). Create an issue in the repository where it belongs (an issue about the CIM to IEC 61850 mapping belongs in the [CIM Mapping repository](https://github.com/com-pas/compas-cim-mapping) for example) and provide the following information by filling in the template, which is either an issue or a bug. 77 | 78 | When an issue is created, it is automatically being added to the `To do` column of the specific repository. This means it's added, but not yet refined. Every monday at 10AM CET, there is a Community Refinement (see our mailing list [calendar](https://lists.lfenergy.org/g/CoMPAS/calendar), everybody can join) where issues are being discussed that are not refined yet. Your issue is one of them. 79 | Once it's accepted and refined, it goes to the `Ready for development` column and it's ready to be implemented/fixed. 80 | 81 | Before creating bug reports or suggesting enhancement, please **perform a [cursory search](https://github.com/search?q=+is%3Aissue+user%3Acom-pas)** 82 | to see if the problem has already been reported. You can add a search term to the upper left search bar. If it has **and the issue is still open**, add a comment to the existing issue instead of opening a new one. 83 | 84 | When in doubt, ask your question on our [LFEnergy slack](https://lfenergy.slack.com/) in the `#compas` channel. Or you can contact the team directly to talk about your ideas at [CoMPAS-dev@lists.lfenergy.org](mailto:CoMPAS@lists.lfenergy.org). 85 | 86 | > **Note:** If you find a **Closed** issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one. 87 | 88 | ### Contributing Code 89 | 90 | Code Contribution is tracked as [GitHub Pull Requests](https://help.github.com/en/articles/about-pull-requests). 91 | Crafting a good pull request takes time and energy, but we will help as much as we can, but be prepared to follow our iterative process. 92 | The iterative process has several goals: 93 | 94 | - maintain the software quality, 95 | - fix problems that are important to users, 96 | - engage the community in working toward the best possible software features, 97 | - enable a sustainable system for maintainers to review contributions. 98 | 99 | Please follow these steps to have your contribution considered by the maintainers: 100 | 101 | 1. Follow all instructions in the [pull requests section](PULL_REQUESTS.md) 102 | 2. Follow the [styleguides](STYLEGUIDE.md) 103 | 3. After you submit your pull request, verify that all [status checks](https://help.github.com/articles/about-status-checks/) are passing. 104 | 5. Request a GitHub review by one of the projects' Committers 105 | 6. Follow their instructions or discuss the requested changes. Please don't take criticism personally, it is normal to iterate on this step several times. 106 | 7. Repeat step 6 until the pull request is merged! 107 | 108 | Continuous integration is set up to run on all branches automatically and will often report problems, so don't worry about getting everything perfect on the first try 109 | (SonarCloud Analysis is a notorious problem source). Until you add a reviewer, you can trigger as many builds as you want by amending your commits. The status checks enforce the following: 110 | 111 | - All tests in the test suite pass. 112 | - Checkstyle and SonarCloud report no violations. 113 | - The code coverage is high enough (currently about 80%). 114 | 115 | ### Tools to contribute 116 | 117 | Continuous integration is setup automatically on all contributions. However, it's faster to iterate locally to fix problems than waiting for the status checks to finish. 118 | There are many tools that can be used to do the verifications that are enforced by all status checks. The most simple and universal tool is maven, but IDE integrations 119 | can be used to get more immediate feedback. Most of the team uses IntelliJ IDEA, but others IDEs can be used, for example the Eclipse IDE. 120 | 121 | ### Definition of Done 122 | 123 | Before finishing a requirement, you need to check if everything is done for that particular requirement. 124 | For that, we have a Definition of Done; the DoD decides when a requirement is really done. 125 | 126 | Note: A Definition of Done is not a static list. It can be modified any time, if people feel like corrections should be made. 127 | 128 | Current Definition of Done: 129 | - Assumptions of requirements are met. 130 | - Required documentation is done. 131 | - (Software) Requirement is accepted and got a thumbs up from the Maintainer via an accepted Pull Request. 132 | - (Software) The build succeeds without failures. 133 | - (Software) All tests in the test suite pass. 134 | - (Software) Code style checks report no violations. 135 | - (Software) Code coverage is high enough (a minimum of 80% is covered). 136 | - (Software) If applicable, the added Unit Test is written, executed and passed. 137 | - (Software) Security analysis (vulnerability detection) doesn't spot unaddressed issues. 138 | 139 | ### How-to begin 140 | 141 | Before you start your coding journey within the CoMPAS project, there are some things we have to talk about. 142 | Some things that will make your start a little easier! 143 | On the [developing](DEVELOPING.md) page information about tooling can be found. 144 | 145 | #### Agenda 146 | 147 | Meetings related to the CoMPAS project can be found here: [CoMPAS calender](https://zoom-lfx.platform.linuxfoundation.org/meetings/compas) 148 | 149 | #### Slack channel 150 | 151 | One of the first important things, is to meet the community. Feel free to introduce yourself by joining the channel 'compas' on [LF Energy Slack](https://slack.lfenergy.org/)! 152 | 153 | The Slack channel is the first communication platform within the CoMPAS project (besides email and the GitHub platform), so if you need help for example you can use Slack! 154 | 155 | #### Documenting 156 | A good (open source) project requires documentation. We have two places for our documentation 157 | 158 | ##### LF Energy Wiki 159 | 160 | LF Energy has it's own [CoMPAS specific Wiki](https://wiki.lfenergy.org/display/HOME/CoMPAS). This is the place for documenation 161 | about CoMPAS in general (like roadmap and the community call agendas). 162 | 163 | #### Architecture and technologies 164 | 165 | For all architecture and technology choices (for example frameworks, build tools, database choices, etcetera), 166 | please check the source code (duh!) and our [CoMPAS Architecture GitHub Pages](https://com-pas.github.io/compas-architecture/). 167 | 168 | ### Copyright and Licensing 169 | 170 | Copyright and license information is done on per-file basis. We use the specification of [REUSE](https://reuse.software/spec/) 171 | to ensure that copyright information of the project is clear and can be analyzed in an automated fashion. 172 | 173 | Every source code repository within CoMPAS has a GitHub Action for checking against the REUSE specification. 174 | 175 | For more information, check the [Copyright Guidelines](STYLEGUIDE.md#copyright-guidelines) section. 176 | 177 | ### GitHub Project Boards 178 | 179 | For managing the CoMPAS issues created in all the separate repositories, we use the [Projects Board](https://github.com/orgs/com-pas/projects) of Github. 180 | CoMPAS uses 2 different Project Boards: One for [Pull Requests](https://github.com/orgs/com-pas/projects/2) and one for the [Issues](https://github.com/orgs/com-pas/projects/1). 181 | 182 | When creating Pull Requests or Issues, it will automatically create issues or Pull Requests on the Project Boards. 183 | This is done by the Automate Projects GitHub Action (take a look at the [action from the Data Service](https://github.com/com-pas/compas-core/blob/master/.github/workflows/automate-projects.yml) for example). 184 | Changing the status of Issues / Pull Requests is also handled automatically by the GitHub Action. 185 | 186 | Issues and Pull Requests can be moved on both the Project Boards and on the boards of the specific repository itself. It synchronizes automatically. 187 | 188 | ## GitHub Pages 189 | 190 | This site is provided as a [GitHub pages site](https://com-pas.github.io/contributing/). 191 | The content is maintained and edited on [GitHub](https://github.com/com-pas/contributing) in the directory "docs". 192 | Contributors are only allowed to contribute by editing the content on GitHub and must do so by presenting their modifications as *pull-request* to the community. 193 | The diagrams on this page are created using [DrawIO](https://github.com/jgraph/drawio-desktop/releases) 194 | and follow [Unified Modeling Language (UML)](https://www.omg.org/spec/UML/). 195 | The drawIO design file is available on this site: [/blob-files/CoMPAS.drawio](blob-files/CoMPAS.drawio). 196 | Modification made to UML diagrams on this site must be made in this file and the modified file must be part of the pull request. 197 | -------------------------------------------------------------------------------- /docs/MISSION-COMPAS.md: -------------------------------------------------------------------------------- 1 | # Mission 2 | 3 | ## CoMPAS - (Co)nfiguration (M)odules for (P)ower industry (A)utomation (S)ystems 4 | 5 | The mission of the **CoMPAS** project is to **develop open source software components** related to **IEC 61850 model implementation 6 | (profile management) and configuration** of a power industry Protection Automation and Control System (PACS). 7 | 8 | The project seeks to: 9 | - leverage multi-vendor and multi-end-user development resources and 61850 competences to accelerate the development of 10 | common software blocks; 11 | - promote top-down configuration processes and common model implementation choices (thus also accelerate the conformity to 12 | IEC 61850 through software implementation); 13 | - deliver and maintain a production grade and reference implementation of the standard. 14 | 15 | *The project strives not to duplicate works already carried out in standardization groups. When the rules and principles 16 | from the standard are not comprehensive enough or subject to interpretation or still work in progress, the project may 17 | have to take choices for the implementation. In such case it should strive to a configurable implementation.* 18 | 19 | 20 | ## Background 21 | 22 | Due to the Energy Transition the use of power transmission and distribution grids is changing. The control architecture of 23 | power grids needs to be swiftly adapted to take account of infeed at lower grid levels, higher dynamics in flow patterns and 24 | more distributed controls (both internal controls and grid flexibility services from third parties). 25 | 26 | In this context TSOs and DSOs require a new generation of Digital Substation Automation Systems (DSAS) allowing for 27 | more dynamic protection settings and adaptive automation functions. Moreover, data management gets significant, 28 | both for administration of deployed automation and protection functions as well as operational grid data. 29 | 30 | The design of the new DSAS will have to allow for a drastically higher level of modularity, interoperability and scalability 31 | compared to the previous generations. An open source collaboration is essential to meet those requirements in a cost-efficient way 32 | by sharing the effort through a leveraged development approach that involves all stakeholders from equipment manufacturers 33 | to end-users, fostering vendor-agnostic implementations and convergence of utility practices. 34 | -------------------------------------------------------------------------------- /docs/MONITORING.md: -------------------------------------------------------------------------------- 1 | # Monitoring 2 | ## Table of contents 3 | * [Frontend monitoring](#introduction) 4 | 1. [Getting your APM Server URL](#1-getting-your-apm-server-url) 5 | 2. [Using the /public/init-js script](#2-using-the-publicinit-js-script) 6 | 3. [References](#3-references) 7 | 8 | 9 | ## Frontend monitoring 10 | This section suggests an approach for using Elastic's Real User Monitoring (RUM) in order to capture user interactions with our client-side application CoMPAS-OpenSCD. The following instructions assume you/your organization already count on a hosted Elasticsearch Service deployment or an Elastic Cloud organization account with Kibana as the frontend of your monitoring stack and a URL to access it. Also it is assumed that you deploy `compas-open-scd` by using Kubernetes (and [the compas-open-scd docker public docker image](https://hub.docker.com/r/lfenergy/compas-open-scd) or your own generated image). 11 | 12 | ### 1. Getting your APM Server URL 13 | Navigate to your Kibana URL and select the space that you would like to associate with your frontend app (default if you don't have several spaces in Kibana). Then open the drawer menu and navigate to `APM`: 14 | 15 | 16 | Navigation instructions to APM in Kibana 17 | 18 | In the top right corner of this page click on `Add data`: 19 | 20 | Navigation instructions to the Add data button in APM 21 | 22 | Then scroll down to APM Agents and select `RUM (JS)`: 23 | 24 | Navigation instructions to the RUM Agent 25 | 26 | There are two suggested code blocks for setting up the RUM Agent, find in any of them the `serverUrl` param and copy/paste it somewhere in your notes, we will use this URL later in a posterior step. 27 | 28 | *Note: You have two options for getting your init script, you either install the `@elastic/apm-rum` dependency in your project or you set up the agent with ` 35 | ``` 36 | 37 | This init javascript file has the purpose to allow for dynamic configuration of each compas-open-scd deployment. 38 | 39 | Make sure to include in your `init.js` file the following code: 40 | 41 | ```js 42 | const script = document.createElement('script'); 43 | script.type = 'text/javascript'; 44 | // download and host your preffered RUM Agent version minified from https://github.com/elastic/apm-agent-rum-js/releases 45 | script.src = 'https://your-cdn-host.com/path/to/elastic-apm-rum.umd.min.js'; 46 | script.async = true; 47 | script.crossorigin = "anonymous"; // provides support for CORS 48 | script.onload = function () { 49 | elasticApm.init({ 50 | serviceName: 'compas-open-scd', // or preferred name, this will be used to filter out results in Kibana 51 | serverUrl: 'https://your-own-serverUrl.with.a.specific:port', // replace with serverUrl found in Step 1 52 | environment: 'test', // The environment where the service being monitored is deployed, e.g. 'production', 'development', 'test', etc. Default: '' 53 | }); 54 | } 55 | document.querySelector('head').appendChild(script); 56 | ``` 57 | 58 | ### 3. References 59 | 60 | * [Full documentation about APM Real User Monitoring JavaScript Agent](https://www.elastic.co/guide/en/apm/agent/rum-js/5.x/intro.html) 61 | 62 | * [Full APM Guide](https://www.elastic.co/guide/en/apm/guide/8.6/apm-quick-start.html) 63 | 64 | * [@stefvnf's medium blog post about cloning git repos using Kubernetes initContainers and Secrets](https://stefvnf.medium.com/cloning-git-repos-using-kubernetes-initcontainers-and-secrets-8609e3b2d238) -------------------------------------------------------------------------------- /docs/PULL_REQUESTS.md: -------------------------------------------------------------------------------- 1 | # Pull requests 2 | 3 | To add code to the different repositories the code is build in a feature branch and merged back to the branch ``develop`` 4 | using a pull request. No direct committing is allowed to the branches ``develop`` and ``main``. 5 | When a release is created the branch ``develop`` is merged to the branch ``main`` using a pull request. 6 | In some repositories the branch ``develop`` is skipped and not there. Feature branches are merged directly to the branch 7 | ``develop`` 8 | 9 | ## Creating a pull request 10 | 11 | When creating a pull request to merge a feature branch back we need to be aware that some information about the pull 12 | request is used to generate the release notes. 13 | 14 | - **Title**: The title is added to the release notes, so give it a nice descriptive one. 15 | - **Labels**: Use a label to add the pull request to correct section in the release notes. 16 | - ``enhancement``: The pull request adds as a new feature. 17 | - ``bug``: The pull request solves a bugfix. 18 | - ``tooling``: Change or update to tooling used to build project. 19 | - **Linking issue**: Link the correct issue using one of the [keywords](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) in the description, for example `closes #1234`. **This only works when the PR is being merged to the default branch**. 20 | 21 | There is a special label ``dependencies`` used by dependabot for updating dependencies. 22 | These are grouped together in a separate section. 23 | If no label is added the pull request will be added to the section ``Other Changes`` at the bottom of the release notes. 24 | 25 | The following labels cause the pull request to be ignored in the release notes: 26 | - ``wontfix`` 27 | - ``duplicate`` 28 | - ``invalid`` 29 | 30 | **Remark**: The label ``tooling`` is not a standard label, so that may need to be created by the first developer using it. -------------------------------------------------------------------------------- /docs/RELEASES.md: -------------------------------------------------------------------------------- 1 | # Releasing software 2 | 3 | ## Create a release 4 | 5 | To create a release of the software we are using the release functionality of GitHub. Under the tab ``code`` there is a section 6 | ``Releases`` (Right side). When selected all current releases will be displayed, and a new release can be created (draft release). 7 | The standard branch to create a release from should be the ``main`` branch. 8 | 9 | Enter the following values when creating a new release: 10 | - **Choose a tag**: Enter a new version using semantic versioning, for example ``0.1.4``. 11 | Also press ``Create new tag`` to create the new label. 12 | - **Target**: This should normally be ``main``. 13 | - **Release title**: Name of the release, use the following template ``Release of ``, for instance 14 | ``Release 0.1.4 of SCL Auto Alignment Service`` 15 | - **Describe the release**: These are the release notes, press the button ``Auto-generate release notes`` to generate these. 16 | Check [Configure release notes generation](#configure-release-notes-generation) to configure how these are generated. 17 | 18 | Now press ``Publish release`` to create the release. For every repository that creates a software product (artifacts or docker images) 19 | a GitHub Action (``release-project.yml``) is defined. This action runs when a release is created. 20 | ```yaml 21 | on: 22 | release: 23 | types: [released] 24 | ``` 25 | 26 | Depending on the type of project different steps will be executed. 27 | Common steps are: 28 | - Checking out the source code, 29 | - Extracting the entered version from the Git Tag. 30 | - Set version using Maven 31 | - Setup Maven settings.xml file 32 | 33 | Depending on the type of project other steps will be executed. Some examples are: 34 | - Build and publish the software to GitHub Packages using Maven 35 | - Build and publish the docker image to DockerHub using Maven 36 | - Build and publish the docker image to DockerHub using NPM and Docker 37 | 38 | ## Publish artifacts using Maven 39 | 40 | To publish artifacts to GiHub Packages a distribution section needs to be added to pom.xml of the root. 41 | ```xml 42 | 43 | 44 | github-packages-compas 45 | GitHub Packages 46 | https://maven.pkg.github.com/com-pas/[repo-name] 47 | 48 | 49 | ``` 50 | The ID is the same as the ID used for the repository section in [Maven Build](DEVELOPING.md#github-packages-in-maven). 51 | This way the same credentials will be used to connect to GitHub Packages as described [Maven Build](DEVELOPING.md#maven-local-settingsxml-for-github-packages). 52 | Replace ``[repo-name]`` with the name of the repository from CoMPAS. 53 | 54 | ## Configure release notes generation 55 | 56 | During creating of a release we will use the GitHub feature to automatically generate the release notes using the pull requests. 57 | The way these release notes are created can be configured by adding/updating the file ``release.yml`` to the directory ``.github``. 58 | 59 | The content of the file ``release.yml`` is currently: 60 | ```yaml 61 | changelog: 62 | exclude: 63 | labels: 64 | - wontfix 65 | - duplicate 66 | - invalid 67 | categories: 68 | - title: New Features 69 | labels: 70 | - enhancement 71 | - title: Bugfixes 72 | labels: 73 | - bug 74 | - title: Tooling changes 75 | labels: 76 | - tooling 77 | - title: Dependency updates 78 | labels: 79 | - dependencies 80 | - title: Other Changes 81 | labels: 82 | - "*" 83 | ``` 84 | 85 | This will group different pull request using the different labels. 86 | -------------------------------------------------------------------------------- /docs/STYLEGUIDE.md: -------------------------------------------------------------------------------- 1 | # Styleguides 2 | 3 | #### Table Of Contents 4 | 5 | * [English language convention](#english-language-convention) 6 | * [Copyright Guidelines](#copyright-guidelines) 7 | * [Java StyleGuide](#java-styleGuide) 8 | * [Git Commit Messages](#git-commit-messages) 9 | 10 | ## English language convention 11 | 12 | The convention for all the project's documents, including code documentation, website, is to write American English. 13 | A list of spelling differences between British and American English is available 14 | [here](https://www.britishcouncilfoundation.id/en/english/articles/british-and-american-english) for example. 15 | 16 | ## Copyright Guidelines 17 | 18 | Contributing to the CoMPAS project also requires using correct copyright headers in source files. 19 | 20 | For each CoMPAS repository, we created / will create a Github Action featuring [REUSE](https://reuse.software/). 21 | REUSE is a piece of software which checks for correct copyright information in files defined in a [specification](https://reuse.software/spec/). 22 | The specification is based on best practices and the use of [SPDX](https://spdx.dev/) identifiers. 23 | 24 | Example Alliander copyright header for Java files: 25 | ```Java 26 | // SPDX-FileCopyrightText: 2020 Alliander N.V. 27 | // 28 | // SPDX-License-Identifier: Apache-2.0 29 | ``` 30 | 31 | Every commit on a Pull Request is being scanned by REUSE. If it fails, the pull requests cannot be merged. 32 | 33 | For more tips on using REUSE (for example with a small command line tool), check the 34 | [Tips: Copyright & Licensing](https://wiki.lfenergy.org/pages/viewpage.action?pageId=10996220) wiki page. 35 | 36 | ## Java StyleGuide 37 | 38 | - The project uses modern java, feel free to use any new APIs provided by the current java version (currently java 17). 39 | - New API classes and methods should be documented with Javadoc. Write higher level documentation for classes and lower level documentation for methods. For example, ... 40 | - User-facing configuration options and general design decisions should be documented (where?) 41 | - We use standard configurations of well known tools like checkstyle and SonarQube to enforce a coherent coding style, please consult those tools for justifications on these rules. 42 | - ESlint is already in place for the front-end. 43 | - Sonarcloud already checks the code style with best practices 44 | - IntelliJ Default checkstyle is used for java (an example could be found in contribution project named .editorconfig) 45 | 46 | As a simple yet instructive example, consider ... 47 | ```java 48 | /** 49 | * As checkstyle file content 50 | * 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | As in java code 60 | 61 | private static final String voltageLevel //Not compliant 62 | private static final String VOLTAGE_LEVEL //Compliant 63 | 64 | */ 65 | ``` 66 | 67 | ## Git Commit Messages 68 | 69 | As usual, please start the commit message with a short line describing the commit, then leave a blank line, then give more context and explanations. 70 | You can use GitHub's integrations, for example to link to existing issues. In general, pull requests with more than one commits will be squashed when merged in master. 71 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2021 Alliander N.V. 2 | # 3 | # SPDX-License-Identifier: CC-BY-4.0 4 | 5 | # Setup 6 | title: CoMPAS Contributing 7 | tagline: 'Contributing to the CoMPAS project' 8 | 9 | paginate: 5 10 | 11 | # Custom vars 12 | version: 0.0.1 13 | 14 | github: 15 | repo: https://github.com/com-pas/contributing 16 | 17 | github_username: com-pas 18 | git_repo: contributing 19 | git_branch: master 20 | 21 | baseurl: /contributing 22 | 23 | defaults: 24 | - 25 | scope: 26 | path: "HOME.md" 27 | values: 28 | permalink: "/" -------------------------------------------------------------------------------- /docs/_includes/git-logo.html: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 13 | -------------------------------------------------------------------------------- /docs/_includes/head.html: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {% if page.name == "HOME.md" %} 17 | {{ site.title }} · {{ site.tagline }} 18 | {% else %} 19 | {{ page.title }} · {{ site.title }} 20 | {% endif %} 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /docs/_includes/sidebar.html: -------------------------------------------------------------------------------- 1 | 6 | 55 | -------------------------------------------------------------------------------- /docs/_layouts/default.html: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | {% include head.html %} 10 | 11 | 12 | {% include sidebar.html %} 13 | 14 |
15 | {{ content }} 16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | 10 | 11 | 20 | -------------------------------------------------------------------------------- /docs/blob-files/CoMPAS_Technical_Charter_2020-06-07.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/docs/blob-files/CoMPAS_Technical_Charter_2020-06-07.pdf -------------------------------------------------------------------------------- /docs/public/LFEnergy-slack.svg: -------------------------------------------------------------------------------- 1 | LF Energy: slackLF Energyslack -------------------------------------------------------------------------------- /docs/public/LFEnergy-slack.svg.license: -------------------------------------------------------------------------------- 1 | SPDX-FileCopyrightText: 2021 Alliander N.V. 2 | 3 | SPDX-License-Identifier: CC-BY-4.0 -------------------------------------------------------------------------------- /docs/public/apple-touch-icon-144-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/docs/public/apple-touch-icon-144-precomposed.png -------------------------------------------------------------------------------- /docs/public/apple-touch-icon-144-precomposed.png.license: -------------------------------------------------------------------------------- 1 | SPDX-FileCopyrightText: 2021 Alliander N.V. 2 | 3 | SPDX-License-Identifier: CC-BY-4.0 -------------------------------------------------------------------------------- /docs/public/compas-horizontal-color.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 20 | 21 | 22 | 25 | 28 | 30 | 32 | 34 | 38 | 39 | 41 | 42 | 44 | 45 | 47 | 49 | 51 | 53 | 56 | 59 | 61 | 62 | 63 | 64 | 67 | 68 | 69 | 70 | 71 | 91 | 111 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /docs/public/compas-horizontal-color.svg.license: -------------------------------------------------------------------------------- 1 | SPDX-FileCopyrightText: 2021 Alliander N.V. 2 | 3 | SPDX-License-Identifier: CC-BY-4.0 -------------------------------------------------------------------------------- /docs/public/css/gitbutton.css: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: 2021 Alliander N.V. 3 | * 4 | * SPDX-License-Identifier: CC-BY-4.0 5 | */ 6 | 7 | .icon.medium > svg { 8 | display: inline-block; 9 | width: 24px; 10 | height: 24px; 11 | vertical-align: middle; 12 | } 13 | 14 | .icon.medium > svg path { 15 | fill: #828282 16 | } 17 | 18 | .gitbutton { 19 | position: relative; 20 | overflow: visible; 21 | display: inline-block; 22 | padding: 0.5em 1em; 23 | border: 1px solid #d4d4d4; 24 | margin: 0; 25 | text-decoration: none; 26 | text-align: center; 27 | text-shadow: 1px 1px 0 #fff; 28 | /* 29 | * I removed the original CSS defining the font type, as it did not play nicely with 30 | * the CSS defining my link size. 31 | */ 32 | /*font:11px/normal sans-serif; */ 33 | color: #333; 34 | white-space: nowrap; 35 | cursor: pointer; 36 | outline: none; 37 | background-color: #ececec; 38 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f4f4f4), to(#ececec)); 39 | background-image: -moz-linear-gradient(#f4f4f4, #ececec); 40 | background-image: -ms-linear-gradient(#f4f4f4, #ececec); 41 | background-image: -o-linear-gradient(#f4f4f4, #ececec); 42 | background-image: linear-gradient(#f4f4f4, #ececec); 43 | -moz-background-clip: padding; /* for Firefox 3.6 */ 44 | background-clip: padding-box; 45 | border-radius: 0.2em; 46 | /* IE hacks */ 47 | zoom: 1; 48 | *display: inline; 49 | } 50 | 51 | .gitbutton:hover, 52 | .gitbutton:focus, 53 | .gitbutton:active, 54 | .gitbutton.active { 55 | border-color: #3072b3; 56 | border-bottom-color: #2a65a0; 57 | text-decoration: none; 58 | text-shadow: -1px -1px 0 rgba(0,0,0,0.3); 59 | color: #fff; 60 | background-color: #3c8dde; 61 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#599bdc), to(#3072b3)); 62 | background-image: -moz-linear-gradient(#599bdc, #3072b3); 63 | background-image: -o-linear-gradient(#599bdc, #3072b3); 64 | background-image: linear-gradient(#599bdc, #3072b3); 65 | } 66 | .gitbutton:active, 67 | .gitbutton.active { 68 | border-color: #2a65a0; 69 | border-bottom-color: #3884cd; 70 | background-color: #3072b3; 71 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3072b3), to(#599bdc)); 72 | background-image: -moz-linear-gradient(#3072b3, #599bdc); 73 | background-image: -ms-linear-gradient(#3072b3, #599bdc); 74 | background-image: -o-linear-gradient(#3072b3, #599bdc); 75 | background-image: linear-gradient(#3072b3, #599bdc); 76 | } 77 | /* overrides extra padding on gitbutton elements in Firefox */ 78 | .gitbutton::-moz-focus-inner { 79 | padding: 0; 80 | border: 0; 81 | } 82 | 83 | .gitbutton.pill { 84 | border-radius: 50em; 85 | } -------------------------------------------------------------------------------- /docs/public/css/hyde.css: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: 2021 Alliander N.V. 3 | * 4 | * SPDX-License-Identifier: CC-BY-4.0 5 | */ 6 | 7 | /* 8 | * __ __ 9 | * /\ \ /\ \ 10 | * \ \ \___ __ __ \_\ \ __ 11 | * \ \ _ `\/\ \/\ \ /'_` \ /'__`\ 12 | * \ \ \ \ \ \ \_\ \/\ \_\ \/\ __/ 13 | * \ \_\ \_\/`____ \ \___,_\ \____\ 14 | * \/_/\/_/`/___/> \/__,_ /\/____/ 15 | * /\___/ 16 | * \/__/ 17 | * 18 | * Designed, built, and released under MIT license by @mdo. Learn more at 19 | * https://github.com/poole/hyde. 20 | */ 21 | 22 | 23 | /* 24 | * Contents 25 | * 26 | * Global resets 27 | * Sidebar 28 | * Container 29 | * Reverse layout 30 | * Themes 31 | */ 32 | 33 | 34 | /* 35 | * Global resets 36 | * 37 | * Update the foundational and global aspects of the page. 38 | */ 39 | 40 | html { 41 | font-family: "PT Sans", Helvetica, Arial, sans-serif; 42 | } 43 | @media (min-width: 48em) { 44 | html { 45 | font-size: 16px; 46 | } 47 | } 48 | @media (min-width: 58em) { 49 | html { 50 | font-size: 20px; 51 | } 52 | } 53 | 54 | /* 55 | * Sidebar 56 | * 57 | * Flexible banner for housing site name, intro, and "footer" content. Starts 58 | * out above content in mobile and later moves to the side with wider viewports. 59 | */ 60 | 61 | .sidebar { 62 | text-align: center; 63 | padding: 2rem 1rem; 64 | color: rgba(255,255,255,.5); 65 | background-color: #202020; 66 | } 67 | @media (min-width: 48em) { 68 | .sidebar { 69 | position: fixed; 70 | top: 0; 71 | left: 0; 72 | bottom: 0; 73 | width: 21rem; 74 | text-align: left; 75 | } 76 | } 77 | 78 | /* Sidebar links */ 79 | .sidebar a { 80 | color: #fff; 81 | } 82 | 83 | /* About section */ 84 | .sidebar-about h1 { 85 | color: #fff; 86 | margin-top: 0; 87 | font-family: "Abril Fatface", serif; 88 | font-size: 3.25rem; 89 | } 90 | 91 | /* Sidebar nav */ 92 | .sidebar-nav { 93 | margin-bottom: 1rem; 94 | } 95 | .sidebar-nav-item { 96 | display: block; 97 | line-height: 1.75; 98 | } 99 | a.sidebar-nav-item:hover, 100 | a.sidebar-nav-item:focus { 101 | text-decoration: underline; 102 | } 103 | .sidebar-nav-item.active { 104 | font-weight: bold; 105 | } 106 | 107 | /* Sticky sidebar 108 | * 109 | * Add the `sidebar-sticky` class to the sidebar's container to affix it the 110 | * contents to the bottom of the sidebar in tablets and up. 111 | */ 112 | 113 | @media (min-width: 48em) { 114 | .sidebar-sticky { 115 | position: absolute; 116 | right: 1rem; 117 | bottom: 1rem; 118 | left: 1rem; 119 | } 120 | } 121 | 122 | 123 | /* Container 124 | * 125 | * Align the contents of the site above the proper threshold with some margin-fu 126 | * with a 25%-wide `.sidebar`. 127 | */ 128 | 129 | .content { 130 | padding-top: 4rem; 131 | padding-bottom: 4rem; 132 | } 133 | 134 | @media (min-width: 48em) { 135 | .content { 136 | max-width: 38rem; 137 | margin-left: 20rem; 138 | margin-right: 2rem; 139 | } 140 | } 141 | 142 | @media (min-width: 64em) { 143 | .content { 144 | margin-left: 22rem; 145 | margin-right: 4rem; 146 | } 147 | } 148 | 149 | 150 | /* 151 | * Reverse layout 152 | * 153 | * Flip the orientation of the page by placing the `.sidebar` on the right. 154 | */ 155 | 156 | @media (min-width: 48em) { 157 | .layout-reverse .sidebar { 158 | left: auto; 159 | right: 0; 160 | } 161 | .layout-reverse .content { 162 | margin-left: 2rem; 163 | margin-right: 20rem; 164 | } 165 | } 166 | 167 | @media (min-width: 64em) { 168 | .layout-reverse .content { 169 | margin-left: 4rem; 170 | margin-right: 22rem; 171 | } 172 | } 173 | 174 | 175 | 176 | /* 177 | * Themes 178 | * 179 | * As of v1.1, Hyde includes optional themes to color the sidebar and links 180 | * within blog posts. To use, add the class of your choosing to the `body`. 181 | */ 182 | 183 | /* Base16 (http://chriskempson.github.io/base16/#default) */ 184 | 185 | /* Red */ 186 | .theme-base-08 .sidebar { 187 | background-color: #ac4142; 188 | } 189 | .theme-base-08 .content a, 190 | .theme-base-08 .related-posts li a:hover { 191 | color: #ac4142; 192 | } 193 | 194 | /* Orange */ 195 | .theme-base-09 .sidebar { 196 | background-color: #d28445; 197 | } 198 | .theme-base-09 .content a, 199 | .theme-base-09 .related-posts li a:hover { 200 | color: #d28445; 201 | } 202 | 203 | /* Yellow */ 204 | .theme-base-0a .sidebar { 205 | background-color: #f4bf75; 206 | } 207 | .theme-base-0a .content a, 208 | .theme-base-0a .related-posts li a:hover { 209 | color: #f4bf75; 210 | } 211 | 212 | /* Green */ 213 | .theme-base-0b .sidebar { 214 | background-color: #90a959; 215 | } 216 | .theme-base-0b .content a, 217 | .theme-base-0b .related-posts li a:hover { 218 | color: #90a959; 219 | } 220 | 221 | /* Cyan */ 222 | .theme-base-0c .sidebar { 223 | background-color: #75b5aa; 224 | } 225 | .theme-base-0c .content a, 226 | .theme-base-0c .related-posts li a:hover { 227 | color: #75b5aa; 228 | } 229 | 230 | /* Blue */ 231 | .theme-base-0d .sidebar { 232 | background-color: #6a9fb5; 233 | } 234 | .theme-base-0d .content a, 235 | .theme-base-0d .related-posts li a:hover { 236 | color: #6a9fb5; 237 | } 238 | 239 | /* Magenta */ 240 | .theme-base-0e .sidebar { 241 | background-color: #aa759f; 242 | } 243 | .theme-base-0e .content a, 244 | .theme-base-0e .related-posts li a:hover { 245 | color: #aa759f; 246 | } 247 | 248 | /* Brown */ 249 | .theme-base-0f .sidebar { 250 | background-color: #8f5536; 251 | } 252 | .theme-base-0f .content a, 253 | .theme-base-0f .related-posts li a:hover { 254 | color: #8f5536; 255 | } 256 | -------------------------------------------------------------------------------- /docs/public/css/poole.css: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: 2021 Alliander N.V. 3 | * 4 | * SPDX-License-Identifier: CC-BY-4.0 5 | */ 6 | 7 | /* 8 | * ___ 9 | * /\_ \ 10 | * _____ ___ ___\//\ \ __ 11 | * /\ '__`\ / __`\ / __`\\ \ \ /'__`\ 12 | * \ \ \_\ \/\ \_\ \/\ \_\ \\_\ \_/\ __/ 13 | * \ \ ,__/\ \____/\ \____//\____\ \____\ 14 | * \ \ \/ \/___/ \/___/ \/____/\/____/ 15 | * \ \_\ 16 | * \/_/ 17 | * 18 | * Designed, built, and released under MIT license by @mdo. Learn more at 19 | * https://github.com/poole/poole. 20 | */ 21 | 22 | 23 | /* 24 | * Contents 25 | * 26 | * Body resets 27 | * Custom type 28 | * Messages 29 | * Container 30 | * Masthead 31 | * Posts and pages 32 | * Pagination 33 | * Reverse layout 34 | * Themes 35 | */ 36 | 37 | 38 | /* 39 | * Body resets 40 | * 41 | * Update the foundational and global aspects of the page. 42 | */ 43 | 44 | * { 45 | -webkit-box-sizing: border-box; 46 | -moz-box-sizing: border-box; 47 | box-sizing: border-box; 48 | } 49 | 50 | html, 51 | body { 52 | margin: 0; 53 | padding: 0; 54 | } 55 | 56 | html { 57 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 58 | font-size: 16px; 59 | line-height: 1.5; 60 | } 61 | @media (min-width: 38em) { 62 | html { 63 | font-size: 20px; 64 | } 65 | } 66 | 67 | body { 68 | color: #515151; 69 | background-color: #fff; 70 | -webkit-text-size-adjust: 100%; 71 | -ms-text-size-adjust: 100%; 72 | } 73 | 74 | /* No `:visited` state is required by default (browsers will use `a`) */ 75 | a { 76 | color: #268bd2; 77 | text-decoration: none; 78 | } 79 | a strong { 80 | color: inherit; 81 | } 82 | /* `:focus` is linked to `:hover` for basic accessibility */ 83 | a:hover, 84 | a:focus { 85 | text-decoration: underline; 86 | } 87 | 88 | /* Headings */ 89 | h1, h2, h3, h4, h5, h6 { 90 | margin-bottom: .5rem; 91 | font-weight: bold; 92 | line-height: 1.25; 93 | color: #313131; 94 | text-rendering: optimizeLegibility; 95 | } 96 | h1 { 97 | font-size: 2rem; 98 | } 99 | h2 { 100 | margin-top: 1rem; 101 | font-size: 1.5rem; 102 | } 103 | h3 { 104 | margin-top: 1.5rem; 105 | font-size: 1.25rem; 106 | } 107 | h4, h5, h6 { 108 | margin-top: 1rem; 109 | font-size: 1rem; 110 | } 111 | 112 | /* Body text */ 113 | p { 114 | margin-top: 0; 115 | margin-bottom: 1rem; 116 | } 117 | 118 | strong { 119 | color: #303030; 120 | } 121 | 122 | 123 | /* Lists */ 124 | ul, ol, dl { 125 | margin-top: 0; 126 | margin-bottom: 1rem; 127 | } 128 | 129 | dt { 130 | font-weight: bold; 131 | } 132 | dd { 133 | margin-bottom: .5rem; 134 | } 135 | 136 | /* Misc */ 137 | hr { 138 | position: relative; 139 | margin: 1.5rem 0; 140 | border: 0; 141 | border-top: 1px solid #eee; 142 | border-bottom: 1px solid #fff; 143 | } 144 | 145 | abbr { 146 | font-size: 85%; 147 | font-weight: bold; 148 | color: #555; 149 | text-transform: uppercase; 150 | } 151 | abbr[title] { 152 | cursor: help; 153 | border-bottom: 1px dotted #e5e5e5; 154 | } 155 | 156 | /* Code */ 157 | code, 158 | pre { 159 | font-family: Menlo, Monaco, "Courier New", monospace; 160 | } 161 | code { 162 | padding: .25em .5em; 163 | font-size: 85%; 164 | color: #bf616a; 165 | background-color: #f9f9f9; 166 | border-radius: 3px; 167 | } 168 | pre { 169 | display: block; 170 | margin-top: 0; 171 | margin-bottom: 1rem; 172 | padding: 1rem; 173 | font-size: .8rem; 174 | line-height: 1.4; 175 | white-space: pre; 176 | white-space: pre-wrap; 177 | word-break: break-all; 178 | word-wrap: break-word; 179 | background-color: #f9f9f9; 180 | } 181 | pre code { 182 | padding: 0; 183 | font-size: 100%; 184 | color: inherit; 185 | background-color: transparent; 186 | } 187 | 188 | /* Pygments via Jekyll */ 189 | .highlight { 190 | margin-bottom: 1rem; 191 | border-radius: 4px; 192 | } 193 | .highlight pre { 194 | margin-bottom: 0; 195 | } 196 | 197 | /* Gist via GitHub Pages */ 198 | .gist .gist-file { 199 | font-family: Menlo, Monaco, "Courier New", monospace !important; 200 | } 201 | .gist .markdown-body { 202 | padding: 15px; 203 | } 204 | .gist pre { 205 | padding: 0; 206 | background-color: transparent; 207 | } 208 | .gist .gist-file .gist-data { 209 | font-size: .8rem !important; 210 | line-height: 1.4; 211 | } 212 | .gist code { 213 | padding: 0; 214 | color: inherit; 215 | background-color: transparent; 216 | border-radius: 0; 217 | } 218 | 219 | /* Quotes */ 220 | blockquote { 221 | padding: .5rem 1rem; 222 | margin: .8rem 0; 223 | color: #7a7a7a; 224 | border-left: .25rem solid #e5e5e5; 225 | } 226 | blockquote p:last-child { 227 | margin-bottom: 0; 228 | } 229 | @media (min-width: 30em) { 230 | blockquote { 231 | padding-right: 5rem; 232 | padding-left: 1.25rem; 233 | } 234 | } 235 | 236 | img { 237 | display: block; 238 | max-width: 100%; 239 | margin: 0 0 1rem; 240 | border-radius: 5px; 241 | } 242 | 243 | /* Tables */ 244 | table { 245 | margin-bottom: 1rem; 246 | width: 100%; 247 | border: 1px solid #e5e5e5; 248 | border-collapse: collapse; 249 | } 250 | td, 251 | th { 252 | padding: .25rem .5rem; 253 | border: 1px solid #e5e5e5; 254 | } 255 | tbody tr:nth-child(odd) td, 256 | tbody tr:nth-child(odd) th { 257 | background-color: #f9f9f9; 258 | } 259 | 260 | 261 | /* 262 | * Custom type 263 | * 264 | * Extend paragraphs with `.lead` for larger introductory text. 265 | */ 266 | 267 | .lead { 268 | font-size: 1.25rem; 269 | font-weight: 300; 270 | } 271 | 272 | 273 | /* 274 | * Messages 275 | * 276 | * Show alert messages to users. You may add it to single elements like a `

`, 277 | * or to a parent if there are multiple elements to show. 278 | */ 279 | 280 | .message { 281 | margin-bottom: 1rem; 282 | padding: 1rem; 283 | color: #717171; 284 | background-color: #f9f9f9; 285 | } 286 | 287 | 288 | /* 289 | * Container 290 | * 291 | * Center the page content. 292 | */ 293 | 294 | .container { 295 | max-width: 38rem; 296 | padding-left: 1rem; 297 | padding-right: 1rem; 298 | margin-left: auto; 299 | margin-right: auto; 300 | } 301 | 302 | 303 | /* 304 | * Masthead 305 | * 306 | * Super small header above the content for site name and short description. 307 | */ 308 | 309 | .masthead { 310 | padding-top: 1rem; 311 | padding-bottom: 1rem; 312 | margin-bottom: 3rem; 313 | } 314 | .masthead-title { 315 | margin-top: 0; 316 | margin-bottom: 0; 317 | color: #505050; 318 | } 319 | .masthead-title a { 320 | color: #505050; 321 | } 322 | .masthead-title small { 323 | font-size: 75%; 324 | font-weight: 400; 325 | color: #c0c0c0; 326 | letter-spacing: 0; 327 | } 328 | 329 | 330 | /* 331 | * Posts and pages 332 | * 333 | * Each post is wrapped in `.post` and is used on default and post layouts. Each 334 | * page is wrapped in `.page` and is only used on the page layout. 335 | */ 336 | 337 | .page, 338 | .post { 339 | margin-bottom: 4em; 340 | } 341 | 342 | /* Blog post or page title */ 343 | .page-title, 344 | .post-title, 345 | .post-title a { 346 | color: #303030; 347 | } 348 | .page-title, 349 | .post-title { 350 | margin-top: 0; 351 | } 352 | 353 | /* Meta data line below post title */ 354 | .post-date { 355 | display: block; 356 | margin-top: -.5rem; 357 | margin-bottom: 1rem; 358 | color: #9a9a9a; 359 | } 360 | 361 | /* Related posts */ 362 | .related { 363 | padding-top: 2rem; 364 | padding-bottom: 2rem; 365 | border-top: 1px solid #eee; 366 | } 367 | .related-posts { 368 | padding-left: 0; 369 | list-style: none; 370 | } 371 | .related-posts h3 { 372 | margin-top: 0; 373 | } 374 | .related-posts li small { 375 | font-size: 75%; 376 | color: #999; 377 | } 378 | .related-posts li a:hover { 379 | color: #268bd2; 380 | text-decoration: none; 381 | } 382 | .related-posts li a:hover small { 383 | color: inherit; 384 | } 385 | 386 | 387 | /* 388 | * Pagination 389 | * 390 | * Super lightweight (HTML-wise) blog pagination. `span`s are provide for when 391 | * there are no more previous or next posts to show. 392 | */ 393 | 394 | .pagination { 395 | overflow: hidden; /* clearfix */ 396 | margin-left: -1rem; 397 | margin-right: -1rem; 398 | font-family: "PT Sans", Helvetica, Arial, sans-serif; 399 | color: #ccc; 400 | text-align: center; 401 | } 402 | 403 | /* Pagination items can be `span`s or `a`s */ 404 | .pagination-item { 405 | display: block; 406 | padding: 1rem; 407 | border: 1px solid #eee; 408 | } 409 | .pagination-item:first-child { 410 | margin-bottom: -1px; 411 | } 412 | 413 | /* Only provide a hover state for linked pagination items */ 414 | a.pagination-item:hover { 415 | background-color: #f5f5f5; 416 | } 417 | 418 | @media (min-width: 30em) { 419 | .pagination { 420 | margin: 3rem 0; 421 | } 422 | .pagination-item { 423 | float: left; 424 | width: 50%; 425 | } 426 | .pagination-item:first-child { 427 | margin-bottom: 0; 428 | border-top-left-radius: 4px; 429 | border-bottom-left-radius: 4px; 430 | } 431 | .pagination-item:last-child { 432 | margin-left: -1px; 433 | border-top-right-radius: 4px; 434 | border-bottom-right-radius: 4px; 435 | } 436 | } 437 | -------------------------------------------------------------------------------- /docs/public/css/syntax.css: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: 2021 Alliander N.V. 3 | * 4 | * SPDX-License-Identifier: CC-BY-4.0 5 | */ 6 | 7 | .highlight .hll { background-color: #ffc; } 8 | .highlight .c { color: #999; } /* Comment */ 9 | .highlight .err { color: #a00; background-color: #faa } /* Error */ 10 | .highlight .k { color: #069; } /* Keyword */ 11 | .highlight .o { color: #555 } /* Operator */ 12 | .highlight .cm { color: #09f; font-style: italic } /* Comment.Multiline */ 13 | .highlight .cp { color: #099 } /* Comment.Preproc */ 14 | .highlight .c1 { color: #999; } /* Comment.Single */ 15 | .highlight .cs { color: #999; } /* Comment.Special */ 16 | .highlight .gd { background-color: #fcc; border: 1px solid #c00 } /* Generic.Deleted */ 17 | .highlight .ge { font-style: italic } /* Generic.Emph */ 18 | .highlight .gr { color: #f00 } /* Generic.Error */ 19 | .highlight .gh { color: #030; } /* Generic.Heading */ 20 | .highlight .gi { background-color: #cfc; border: 1px solid #0c0 } /* Generic.Inserted */ 21 | .highlight .go { color: #aaa } /* Generic.Output */ 22 | .highlight .gp { color: #009; } /* Generic.Prompt */ 23 | .highlight .gs { } /* Generic.Strong */ 24 | .highlight .gu { color: #030; } /* Generic.Subheading */ 25 | .highlight .gt { color: #9c6 } /* Generic.Traceback */ 26 | .highlight .kc { color: #069; } /* Keyword.Constant */ 27 | .highlight .kd { color: #069; } /* Keyword.Declaration */ 28 | .highlight .kn { color: #069; } /* Keyword.Namespace */ 29 | .highlight .kp { color: #069 } /* Keyword.Pseudo */ 30 | .highlight .kr { color: #069; } /* Keyword.Reserved */ 31 | .highlight .kt { color: #078; } /* Keyword.Type */ 32 | .highlight .m { color: #f60 } /* Literal.Number */ 33 | .highlight .s { color: #d44950 } /* Literal.String */ 34 | .highlight .na { color: #4f9fcf } /* Name.Attribute */ 35 | .highlight .nb { color: #366 } /* Name.Builtin */ 36 | .highlight .nc { color: #0a8; } /* Name.Class */ 37 | .highlight .no { color: #360 } /* Name.Constant */ 38 | .highlight .nd { color: #99f } /* Name.Decorator */ 39 | .highlight .ni { color: #999; } /* Name.Entity */ 40 | .highlight .ne { color: #c00; } /* Name.Exception */ 41 | .highlight .nf { color: #c0f } /* Name.Function */ 42 | .highlight .nl { color: #99f } /* Name.Label */ 43 | .highlight .nn { color: #0cf; } /* Name.Namespace */ 44 | .highlight .nt { color: #2f6f9f; } /* Name.Tag */ 45 | .highlight .nv { color: #033 } /* Name.Variable */ 46 | .highlight .ow { color: #000; } /* Operator.Word */ 47 | .highlight .w { color: #bbb } /* Text.Whitespace */ 48 | .highlight .mf { color: #f60 } /* Literal.Number.Float */ 49 | .highlight .mh { color: #f60 } /* Literal.Number.Hex */ 50 | .highlight .mi { color: #f60 } /* Literal.Number.Integer */ 51 | .highlight .mo { color: #f60 } /* Literal.Number.Oct */ 52 | .highlight .sb { color: #c30 } /* Literal.String.Backtick */ 53 | .highlight .sc { color: #c30 } /* Literal.String.Char */ 54 | .highlight .sd { color: #c30; font-style: italic } /* Literal.String.Doc */ 55 | .highlight .s2 { color: #c30 } /* Literal.String.Double */ 56 | .highlight .se { color: #c30; } /* Literal.String.Escape */ 57 | .highlight .sh { color: #c30 } /* Literal.String.Heredoc */ 58 | .highlight .si { color: #a00 } /* Literal.String.Interpol */ 59 | .highlight .sx { color: #c30 } /* Literal.String.Other */ 60 | .highlight .sr { color: #3aa } /* Literal.String.Regex */ 61 | .highlight .s1 { color: #c30 } /* Literal.String.Single */ 62 | .highlight .ss { color: #fc3 } /* Literal.String.Symbol */ 63 | .highlight .bp { color: #366 } /* Name.Builtin.Pseudo */ 64 | .highlight .vc { color: #033 } /* Name.Variable.Class */ 65 | .highlight .vg { color: #033 } /* Name.Variable.Global */ 66 | .highlight .vi { color: #033 } /* Name.Variable.Instance */ 67 | .highlight .il { color: #f60 } /* Literal.Number.Integer.Long */ 68 | 69 | .css .o, 70 | .css .o + .nt, 71 | .css .nt + .nt { color: #999; } 72 | -------------------------------------------------------------------------------- /docs/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/docs/public/favicon.ico -------------------------------------------------------------------------------- /docs/public/favicon.ico.license: -------------------------------------------------------------------------------- 1 | SPDX-FileCopyrightText: 2021 Alliander N.V. 2 | 3 | SPDX-License-Identifier: CC-BY-4.0 -------------------------------------------------------------------------------- /docs/public/kibana-screenshot-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/docs/public/kibana-screenshot-1.png -------------------------------------------------------------------------------- /docs/public/kibana-screenshot-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/docs/public/kibana-screenshot-2.png -------------------------------------------------------------------------------- /docs/public/kibana-screenshot-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/docs/public/kibana-screenshot-3.png -------------------------------------------------------------------------------- /presentations/230321 SGTech Week 2023 Sander Jansen.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/presentations/230321 SGTech Week 2023 Sander Jansen.pptx -------------------------------------------------------------------------------- /presentations/231109 CoMPAS introduction for Seapath.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/presentations/231109 CoMPAS introduction for Seapath.pptx -------------------------------------------------------------------------------- /presentations/CoMPAS - CEATI presentation 17 November 2020 Sander Jansen.PPTX: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/presentations/CoMPAS - CEATI presentation 17 November 2020 Sander Jansen.PPTX -------------------------------------------------------------------------------- /presentations/LFEnergy_SpringSummit_talk_2021.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/presentations/LFEnergy_SpringSummit_talk_2021.pptx -------------------------------------------------------------------------------- /roadmap-docs/CoMPAS Initial Roadmap - final version.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/roadmap-docs/CoMPAS Initial Roadmap - final version.pptx -------------------------------------------------------------------------------- /roadmap-docs/CoMPAS architecture overview 2023.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/roadmap-docs/CoMPAS architecture overview 2023.pptx -------------------------------------------------------------------------------- /roadmap-docs/CoMPAS architecture overview 2023[20230912].odp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/roadmap-docs/CoMPAS architecture overview 2023[20230912].odp -------------------------------------------------------------------------------- /roadmap-docs/CoMPAS architecture overview 2023[20230912].png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/com-pas/contributing/2149792f7e3f2040b9fb817915e80be25bfb1cc1/roadmap-docs/CoMPAS architecture overview 2023[20230912].png -------------------------------------------------------------------------------- /roadmap-docs/LICENSE: -------------------------------------------------------------------------------- 1 | Attribution 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution 4.0 International Public License 58 | 59 | By exercising the Licensed Rights (defined below), You accept and agree 60 | to be bound by the terms and conditions of this Creative Commons 61 | Attribution 4.0 International Public License ("Public License"). To the 62 | extent this Public License may be interpreted as a contract, You are 63 | granted the Licensed Rights in consideration of Your acceptance of 64 | these terms and conditions, and the Licensor grants You such rights in 65 | consideration of benefits the Licensor receives from making the 66 | Licensed Material available under these terms and conditions. 67 | 68 | 69 | Section 1 -- Definitions. 70 | 71 | a. Adapted Material means material subject to Copyright and Similar 72 | Rights that is derived from or based upon the Licensed Material 73 | and in which the Licensed Material is translated, altered, 74 | arranged, transformed, or otherwise modified in a manner requiring 75 | permission under the Copyright and Similar Rights held by the 76 | Licensor. For purposes of this Public License, where the Licensed 77 | Material is a musical work, performance, or sound recording, 78 | Adapted Material is always produced where the Licensed Material is 79 | synched in timed relation with a moving image. 80 | 81 | b. Adapter's License means the license You apply to Your Copyright 82 | and Similar Rights in Your contributions to Adapted Material in 83 | accordance with the terms and conditions of this Public License. 84 | 85 | c. Copyright and Similar Rights means copyright and/or similar rights 86 | closely related to copyright including, without limitation, 87 | performance, broadcast, sound recording, and Sui Generis Database 88 | Rights, without regard to how the rights are labeled or 89 | categorized. For purposes of this Public License, the rights 90 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 91 | Rights. 92 | 93 | d. Effective Technological Measures means those measures that, in the 94 | absence of proper authority, may not be circumvented under laws 95 | fulfilling obligations under Article 11 of the WIPO Copyright 96 | Treaty adopted on December 20, 1996, and/or similar international 97 | agreements. 98 | 99 | e. Exceptions and Limitations means fair use, fair dealing, and/or 100 | any other exception or limitation to Copyright and Similar Rights 101 | that applies to Your use of the Licensed Material. 102 | 103 | f. Licensed Material means the artistic or literary work, database, 104 | or other material to which the Licensor applied this Public 105 | License. 106 | 107 | g. Licensed Rights means the rights granted to You subject to the 108 | terms and conditions of this Public License, which are limited to 109 | all Copyright and Similar Rights that apply to Your use of the 110 | Licensed Material and that the Licensor has authority to license. 111 | 112 | h. Licensor means the individual(s) or entity(ies) granting rights 113 | under this Public License. 114 | 115 | i. Share means to provide material to the public by any means or 116 | process that requires permission under the Licensed Rights, such 117 | as reproduction, public display, public performance, distribution, 118 | dissemination, communication, or importation, and to make material 119 | available to the public including in ways that members of the 120 | public may access the material from a place and at a time 121 | individually chosen by them. 122 | 123 | j. Sui Generis Database Rights means rights other than copyright 124 | resulting from Directive 96/9/EC of the European Parliament and of 125 | the Council of 11 March 1996 on the legal protection of databases, 126 | as amended and/or succeeded, as well as other essentially 127 | equivalent rights anywhere in the world. 128 | 129 | k. You means the individual or entity exercising the Licensed Rights 130 | under this Public License. Your has a corresponding meaning. 131 | 132 | 133 | Section 2 -- Scope. 134 | 135 | a. License grant. 136 | 137 | 1. Subject to the terms and conditions of this Public License, 138 | the Licensor hereby grants You a worldwide, royalty-free, 139 | non-sublicensable, non-exclusive, irrevocable license to 140 | exercise the Licensed Rights in the Licensed Material to: 141 | 142 | a. reproduce and Share the Licensed Material, in whole or 143 | in part; and 144 | 145 | b. produce, reproduce, and Share Adapted Material. 146 | 147 | 2. Exceptions and Limitations. For the avoidance of doubt, where 148 | Exceptions and Limitations apply to Your use, this Public 149 | License does not apply, and You do not need to comply with 150 | its terms and conditions. 151 | 152 | 3. Term. The term of this Public License is specified in Section 153 | 6(a). 154 | 155 | 4. Media and formats; technical modifications allowed. The 156 | Licensor authorizes You to exercise the Licensed Rights in 157 | all media and formats whether now known or hereafter created, 158 | and to make technical modifications necessary to do so. The 159 | Licensor waives and/or agrees not to assert any right or 160 | authority to forbid You from making technical modifications 161 | necessary to exercise the Licensed Rights, including 162 | technical modifications necessary to circumvent Effective 163 | Technological Measures. For purposes of this Public License, 164 | simply making modifications authorized by this Section 2(a) 165 | (4) never produces Adapted Material. 166 | 167 | 5. Downstream recipients. 168 | 169 | a. Offer from the Licensor -- Licensed Material. Every 170 | recipient of the Licensed Material automatically 171 | receives an offer from the Licensor to exercise the 172 | Licensed Rights under the terms and conditions of this 173 | Public License. 174 | 175 | b. No downstream restrictions. You may not offer or impose 176 | any additional or different terms or conditions on, or 177 | apply any Effective Technological Measures to, the 178 | Licensed Material if doing so restricts exercise of the 179 | Licensed Rights by any recipient of the Licensed 180 | Material. 181 | 182 | 6. No endorsement. Nothing in this Public License constitutes or 183 | may be construed as permission to assert or imply that You 184 | are, or that Your use of the Licensed Material is, connected 185 | with, or sponsored, endorsed, or granted official status by, 186 | the Licensor or others designated to receive attribution as 187 | provided in Section 3(a)(1)(A)(i). 188 | 189 | b. Other rights. 190 | 191 | 1. Moral rights, such as the right of integrity, are not 192 | licensed under this Public License, nor are publicity, 193 | privacy, and/or other similar personality rights; however, to 194 | the extent possible, the Licensor waives and/or agrees not to 195 | assert any such rights held by the Licensor to the limited 196 | extent necessary to allow You to exercise the Licensed 197 | Rights, but not otherwise. 198 | 199 | 2. Patent and trademark rights are not licensed under this 200 | Public License. 201 | 202 | 3. To the extent possible, the Licensor waives any right to 203 | collect royalties from You for the exercise of the Licensed 204 | Rights, whether directly or through a collecting society 205 | under any voluntary or waivable statutory or compulsory 206 | licensing scheme. In all other cases the Licensor expressly 207 | reserves any right to collect such royalties. 208 | 209 | 210 | Section 3 -- License Conditions. 211 | 212 | Your exercise of the Licensed Rights is expressly made subject to the 213 | following conditions. 214 | 215 | a. Attribution. 216 | 217 | 1. If You Share the Licensed Material (including in modified 218 | form), You must: 219 | 220 | a. retain the following if it is supplied by the Licensor 221 | with the Licensed Material: 222 | 223 | i. identification of the creator(s) of the Licensed 224 | Material and any others designated to receive 225 | attribution, in any reasonable manner requested by 226 | the Licensor (including by pseudonym if 227 | designated); 228 | 229 | ii. a copyright notice; 230 | 231 | iii. a notice that refers to this Public License; 232 | 233 | iv. a notice that refers to the disclaimer of 234 | warranties; 235 | 236 | v. a URI or hyperlink to the Licensed Material to the 237 | extent reasonably practicable; 238 | 239 | b. indicate if You modified the Licensed Material and 240 | retain an indication of any previous modifications; and 241 | 242 | c. indicate the Licensed Material is licensed under this 243 | Public License, and include the text of, or the URI or 244 | hyperlink to, this Public License. 245 | 246 | 2. You may satisfy the conditions in Section 3(a)(1) in any 247 | reasonable manner based on the medium, means, and context in 248 | which You Share the Licensed Material. For example, it may be 249 | reasonable to satisfy the conditions by providing a URI or 250 | hyperlink to a resource that includes the required 251 | information. 252 | 253 | 3. If requested by the Licensor, You must remove any of the 254 | information required by Section 3(a)(1)(A) to the extent 255 | reasonably practicable. 256 | 257 | 4. If You Share Adapted Material You produce, the Adapter's 258 | License You apply must not prevent recipients of the Adapted 259 | Material from complying with this Public License. 260 | 261 | 262 | Section 4 -- Sui Generis Database Rights. 263 | 264 | Where the Licensed Rights include Sui Generis Database Rights that 265 | apply to Your use of the Licensed Material: 266 | 267 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 268 | to extract, reuse, reproduce, and Share all or a substantial 269 | portion of the contents of the database; 270 | 271 | b. if You include all or a substantial portion of the database 272 | contents in a database in which You have Sui Generis Database 273 | Rights, then the database in which You have Sui Generis Database 274 | Rights (but not its individual contents) is Adapted Material; and 275 | 276 | c. You must comply with the conditions in Section 3(a) if You Share 277 | all or a substantial portion of the contents of the database. 278 | 279 | For the avoidance of doubt, this Section 4 supplements and does not 280 | replace Your obligations under this Public License where the Licensed 281 | Rights include other Copyright and Similar Rights. 282 | 283 | 284 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 285 | 286 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 287 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 288 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 289 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 290 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 291 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 292 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 293 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 294 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 295 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 296 | 297 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 298 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 299 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 300 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 301 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 302 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 303 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 304 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 305 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 306 | 307 | c. The disclaimer of warranties and limitation of liability provided 308 | above shall be interpreted in a manner that, to the extent 309 | possible, most closely approximates an absolute disclaimer and 310 | waiver of all liability. 311 | 312 | 313 | Section 6 -- Term and Termination. 314 | 315 | a. This Public License applies for the term of the Copyright and 316 | Similar Rights licensed here. However, if You fail to comply with 317 | this Public License, then Your rights under this Public License 318 | terminate automatically. 319 | 320 | b. Where Your right to use the Licensed Material has terminated under 321 | Section 6(a), it reinstates: 322 | 323 | 1. automatically as of the date the violation is cured, provided 324 | it is cured within 30 days of Your discovery of the 325 | violation; or 326 | 327 | 2. upon express reinstatement by the Licensor. 328 | 329 | For the avoidance of doubt, this Section 6(b) does not affect any 330 | right the Licensor may have to seek remedies for Your violations 331 | of this Public License. 332 | 333 | c. For the avoidance of doubt, the Licensor may also offer the 334 | Licensed Material under separate terms or conditions or stop 335 | distributing the Licensed Material at any time; however, doing so 336 | will not terminate this Public License. 337 | 338 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 339 | License. 340 | 341 | 342 | Section 7 -- Other Terms and Conditions. 343 | 344 | a. The Licensor shall not be bound by any additional or different 345 | terms or conditions communicated by You unless expressly agreed. 346 | 347 | b. Any arrangements, understandings, or agreements regarding the 348 | Licensed Material not stated herein are separate from and 349 | independent of the terms and conditions of this Public License. 350 | 351 | 352 | Section 8 -- Interpretation. 353 | 354 | a. For the avoidance of doubt, this Public License does not, and 355 | shall not be interpreted to, reduce, limit, restrict, or impose 356 | conditions on any use of the Licensed Material that could lawfully 357 | be made without permission under this Public License. 358 | 359 | b. To the extent possible, if any provision of this Public License is 360 | deemed unenforceable, it shall be automatically reformed to the 361 | minimum extent necessary to make it enforceable. If the provision 362 | cannot be reformed, it shall be severed from this Public License 363 | without affecting the enforceability of the remaining terms and 364 | conditions. 365 | 366 | c. No term or condition of this Public License will be waived and no 367 | failure to comply consented to unless expressly agreed to by the 368 | Licensor. 369 | 370 | d. Nothing in this Public License constitutes or may be interpreted 371 | as a limitation upon, or waiver of, any privileges and immunities 372 | that apply to the Licensor or You, including from the legal 373 | processes of any jurisdiction or authority. 374 | 375 | 376 | ======================================================================= 377 | 378 | Creative Commons is not a party to its public 379 | licenses. Notwithstanding, Creative Commons may elect to apply one of 380 | its public licenses to material it publishes and in those instances 381 | will be considered the “Licensor.” The text of the Creative Commons 382 | public licenses is dedicated to the public domain under the CC0 Public 383 | Domain Dedication. Except for the limited purpose of indicating that 384 | material is shared under a Creative Commons public license or as 385 | otherwise permitted by the Creative Commons policies published at 386 | creativecommons.org/policies, Creative Commons does not authorize the 387 | use of the trademark "Creative Commons" or any other trademark or logo 388 | of Creative Commons without its prior written consent including, 389 | without limitation, in connection with any unauthorized modifications 390 | to any of its public licenses or any other arrangements, 391 | understandings, or agreements concerning use of licensed material. For 392 | the avoidance of doubt, this paragraph does not form part of the 393 | public licenses. 394 | 395 | Creative Commons may be contacted at creativecommons.org. 396 | 397 | --------------------------------------------------------------------------------