@eventcatalog/language-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +71 -0
  2. package/SPEC.md +1939 -0
  3. package/dist/ast-utils.d.ts +96 -0
  4. package/dist/ast-utils.d.ts.map +1 -0
  5. package/dist/ast-utils.js +241 -0
  6. package/dist/ast-utils.js.map +1 -0
  7. package/dist/compiler.d.ts +7 -0
  8. package/dist/compiler.d.ts.map +1 -0
  9. package/dist/compiler.js +654 -0
  10. package/dist/compiler.js.map +1 -0
  11. package/dist/ec-completion-provider.d.ts +15 -0
  12. package/dist/ec-completion-provider.d.ts.map +1 -0
  13. package/dist/ec-completion-provider.js +202 -0
  14. package/dist/ec-completion-provider.js.map +1 -0
  15. package/dist/ec-module.d.ts +18 -0
  16. package/dist/ec-module.d.ts.map +1 -0
  17. package/dist/ec-module.js +27 -0
  18. package/dist/ec-module.js.map +1 -0
  19. package/dist/ec-scope-provider.d.ts +2 -0
  20. package/dist/ec-scope-provider.d.ts.map +1 -0
  21. package/dist/ec-scope-provider.js +2 -0
  22. package/dist/ec-scope-provider.js.map +1 -0
  23. package/dist/ec-scope.d.ts +10 -0
  24. package/dist/ec-scope.d.ts.map +1 -0
  25. package/dist/ec-scope.js +18 -0
  26. package/dist/ec-scope.js.map +1 -0
  27. package/dist/ec-validator.d.ts +9 -0
  28. package/dist/ec-validator.d.ts.map +1 -0
  29. package/dist/ec-validator.js +238 -0
  30. package/dist/ec-validator.js.map +1 -0
  31. package/dist/formatter.d.ts +6 -0
  32. package/dist/formatter.d.ts.map +1 -0
  33. package/dist/formatter.js +88 -0
  34. package/dist/formatter.js.map +1 -0
  35. package/dist/generated/ast.d.ts +970 -0
  36. package/dist/generated/ast.d.ts.map +1 -0
  37. package/dist/generated/ast.js +1537 -0
  38. package/dist/generated/ast.js.map +1 -0
  39. package/dist/generated/grammar.d.ts +7 -0
  40. package/dist/generated/grammar.d.ts.map +1 -0
  41. package/dist/generated/grammar.js +6062 -0
  42. package/dist/generated/grammar.js.map +1 -0
  43. package/dist/generated/module.d.ts +14 -0
  44. package/dist/generated/module.d.ts.map +1 -0
  45. package/dist/generated/module.js +21 -0
  46. package/dist/generated/module.js.map +1 -0
  47. package/dist/graph-types.d.ts +32 -0
  48. package/dist/graph-types.d.ts.map +1 -0
  49. package/dist/graph-types.js +2 -0
  50. package/dist/graph-types.js.map +1 -0
  51. package/dist/graph.d.ts +4 -0
  52. package/dist/graph.d.ts.map +1 -0
  53. package/dist/graph.js +931 -0
  54. package/dist/graph.js.map +1 -0
  55. package/dist/index.d.ts +12 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +10 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/main-browser.d.ts +2 -0
  60. package/dist/main-browser.d.ts.map +1 -0
  61. package/dist/main-browser.js +16 -0
  62. package/dist/main-browser.js.map +1 -0
  63. package/dist/main.d.ts +2 -0
  64. package/dist/main.d.ts.map +1 -0
  65. package/dist/main.js +15 -0
  66. package/dist/main.js.map +1 -0
  67. package/package.json +55 -0
  68. package/specification/00-overview.md +99 -0
  69. package/specification/01-domain.md +80 -0
  70. package/specification/02-service.md +50 -0
  71. package/specification/03-event.md +28 -0
  72. package/specification/04-command.md +25 -0
  73. package/specification/05-query.md +25 -0
  74. package/specification/06-channel.md +131 -0
  75. package/specification/08-container.md +54 -0
  76. package/specification/09-data-product.md +39 -0
  77. package/specification/10-flow.md +163 -0
  78. package/specification/11-diagram.md +3 -0
  79. package/specification/12-user.md +54 -0
  80. package/specification/13-team.md +62 -0
  81. package/specification/14-relationships.md +89 -0
  82. package/specification/15-versioning.md +41 -0
  83. package/specification/16-annotations.md +100 -0
  84. package/specification/17-examples.md +373 -0
  85. package/specification/18-grammar.md +242 -0
  86. package/specification/19-visualizer.md +197 -0
  87. package/specification/build-spec.sh +49 -0
  88. package/syntaxes/ec.tmLanguage.json +61 -0
@@ -0,0 +1,242 @@
1
+ # Full Grammar (EBNF)
2
+
3
+ ```ebnf
4
+ (* Top-level *)
5
+ program = { top_level_decl } ;
6
+ top_level_decl = domain_decl | service_decl | event_decl | command_decl
7
+ | query_decl | channel_decl | container_decl
8
+ | data_product_decl | flow_decl
9
+ | user_decl | team_decl | visualizer_decl
10
+ | actor_decl | external_system_decl ;
11
+
12
+ (* Identifiers and literals *)
13
+ identifier = letter { letter | digit | "-" | "." | "_" } ;
14
+ int = digit { digit } ;
15
+ version_lit = int "." int "." int [ "-" prerelease ] ;
16
+ string_lit = '"' { any_char } '"' ;
17
+ bool_lit = "true" | "false" ;
18
+ number_lit = digit { digit } ;
19
+
20
+ (* Common properties *)
21
+ common_props = { version_prop | name_prop | summary_prop | owner_prop
22
+ | deprecated_prop | draft_prop | annotation } ;
23
+ message_props = { version_prop | name_prop | summary_prop | owner_prop
24
+ | schema_prop | deprecated_prop | draft_prop | annotation } ;
25
+ version_prop = "version" version_lit ;
26
+ name_prop = "name" string_lit ;
27
+ summary_prop = "summary" string_lit ;
28
+ owner_prop = "owner" identifier ;
29
+ schema_prop = "schema" string_lit ;
30
+ deprecated_prop = "deprecated" bool_lit ;
31
+ draft_prop = "draft" bool_lit ;
32
+
33
+ (* Annotations *)
34
+ annotation = "@" ann_name [ "(" ann_args ")" ] [ ann_block ] ;
35
+ ann_name = identifier ;
36
+ ann_args = ann_arg { "," ann_arg } ;
37
+ ann_arg = [ identifier ":" ] ( string_lit | bool_lit | number_lit | identifier ) ;
38
+ ann_block = "{" { ann_body_item } "}" ;
39
+
40
+ (* Resource references *)
41
+ resource_ref = identifier [ "@" version_lit ] ;
42
+ message_type = "event" | "command" | "query" ;
43
+
44
+ (* Domain *)
45
+ domain_decl = "domain" identifier "{" common_props
46
+ { domain_body_item } "}" ;
47
+ domain_body_item = service_decl | subdomain_decl
48
+ | data_product_ref_stmt | flow_ref_stmt
49
+ | sends_stmt | receives_stmt
50
+ | annotation ;
51
+ subdomain_decl = "subdomain" identifier "{" common_props
52
+ { domain_body_item } "}" ;
53
+
54
+ (* Service *)
55
+ service_decl = "service" identifier "{" common_props
56
+ { service_body_item } "}" ;
57
+ service_body_item= sends_stmt | receives_stmt
58
+ | writes_to_stmt | reads_from_stmt
59
+ | flow_ref_stmt
60
+ | annotation ;
61
+
62
+ (* Sends / Receives *)
63
+ sends_stmt = "sends" message_type resource_ref [ channel_clause ]
64
+ | "sends" message_type identifier inline_block ;
65
+ receives_stmt = "receives" message_type resource_ref [ channel_clause ]
66
+ | "receives" message_type identifier inline_block ;
67
+
68
+ channel_clause = to_clause | from_clause ;
69
+ to_clause = "to" channel_ref_list ;
70
+ from_clause = "from" channel_ref_list ;
71
+ channel_ref_list = channel_ref { "," channel_ref } ;
72
+ channel_ref = identifier [ "@" version_lit ] ;
73
+
74
+ (* Data relationships *)
75
+ writes_to_stmt = "writes-to" "container" resource_ref ;
76
+ reads_from_stmt = "reads-from" "container" resource_ref ;
77
+ flow_ref_stmt = "flow" resource_ref ;
78
+ data_product_ref_stmt = "data-product" resource_ref ;
79
+
80
+ (* Inline message block *)
81
+ inline_block = "{" message_props "}" ;
82
+
83
+ (* Messages: Event, Command, Query *)
84
+ event_decl = "event" identifier "{" message_props "}" ;
85
+ command_decl = "command" identifier "{" message_props "}" ;
86
+ query_decl = "query" identifier "{" message_props "}" ;
87
+
88
+ (* Channel *)
89
+ channel_decl = "channel" identifier "{" common_props
90
+ { channel_body_item } "}" ;
91
+ channel_body_item= address_prop | protocol_prop | parameter_decl
92
+ | route_stmt | annotation ;
93
+ address_prop = "address" string_lit ;
94
+ protocol_prop = "protocol" string_lit ;
95
+ parameter_decl = "parameter" identifier "{" { param_prop } "}" ;
96
+ param_prop = "description" string_lit
97
+ | "default" string_lit
98
+ | "enum" "[" string_lit { "," string_lit } "]"
99
+ | "examples" "[" string_lit { "," string_lit } "]" ;
100
+ route_stmt = "route" resource_ref ;
101
+
102
+ (* Container *)
103
+ container_decl = "container" identifier "{" common_props
104
+ { container_body_item } "}" ;
105
+ container_body_item = container_type_prop | technology_prop
106
+ | authoritative_prop | access_mode_prop
107
+ | classification_prop | residency_prop
108
+ | retention_prop
109
+ | service_ref_stmt | annotation ;
110
+ container_type_prop = "container-type" container_type_enum ;
111
+ container_type_enum = "database" | "cache" | "objectStore" | "searchIndex"
112
+ | "dataWarehouse" | "dataLake" | "externalSaaS" | "other" ;
113
+ technology_prop = "technology" string_lit ;
114
+ authoritative_prop = "authoritative" bool_lit ;
115
+ access_mode_prop = "access-mode" ( "read" | "write" | "readWrite" | "appendOnly" ) ;
116
+ classification_prop = "classification" ( "public" | "internal" | "confidential" | "regulated" ) ;
117
+ residency_prop = "residency" string_lit ;
118
+ retention_prop = "retention" string_lit ;
119
+
120
+ (* Data Product *)
121
+ data_product_decl = "data-product" identifier "{" common_props
122
+ { dp_body_item } "}" ;
123
+ dp_body_item = input_stmt | output_stmt | annotation ;
124
+ input_stmt = "input" message_type resource_ref ;
125
+ output_stmt = "output" message_type resource_ref [ "{" contract_block "}" ] ;
126
+ contract_block = "contract" "{" "path" string_lit "name" string_lit
127
+ [ "type" string_lit ] "}" ;
128
+
129
+ (* Flow *)
130
+ flow_decl = "flow" identifier "{" common_props
131
+ { flow_entry_chain | flow_when_block } "}" ;
132
+ flow_entry_chain = flow_ref { "," flow_ref } ( "->" flow_ref )+ ;
133
+ flow_when_block = "when" flow_ref { "and" flow_ref } flow_action+ ;
134
+ flow_action = flow_ref { flow_output } ;
135
+ flow_output = "->" [ string_lit ":" ] flow_ref ;
136
+ flow_ref = identifier [ string_lit ] ;
137
+
138
+ (* Actor *)
139
+ actor_decl = "actor" identifier [ "{" { actor_body_item } "}" ] ;
140
+ actor_body_item = name_prop | summary_prop | annotation ;
141
+
142
+ (* External System *)
143
+ external_system_decl = "external-system" identifier [ "{" { ext_sys_body_item } "}" ] ;
144
+ ext_sys_body_item = name_prop | summary_prop | annotation ;
145
+
146
+ (* Visualizer *)
147
+ visualizer_decl = "visualizer" identifier "{" { visualizer_body } "}" ;
148
+ visualizer_body = name_prop | summary_prop | annotation
149
+ | legend_prop | search_prop | toolbar_prop
150
+ | focus_mode_prop | animated_prop | style_prop
151
+ | domain_decl | service_decl | event_decl | command_decl
152
+ | query_decl | channel_decl | container_decl
153
+ | data_product_decl | flow_decl
154
+ | actor_decl | external_system_decl
155
+ | service_ref_stmt | domain_ref_stmt
156
+ | event_ref_stmt | command_ref_stmt | query_ref_stmt
157
+ | channel_ref_stmt | data_product_ref_stmt | flow_ref_stmt
158
+ | container_ref_stmt ;
159
+ legend_prop = "legend" bool_lit ;
160
+ search_prop = "search" bool_lit ;
161
+ toolbar_prop = "toolbar" bool_lit ;
162
+ focus_mode_prop = "focus-mode" bool_lit ;
163
+ animated_prop = "animated" bool_lit ;
164
+ style_prop = "style" ( "default" | "post-it" ) ;
165
+
166
+ (* User *)
167
+ user_decl = "user" identifier "{" user_props "}" ;
168
+ user_props = "name" string_lit
169
+ | "avatar" string_lit
170
+ | "role" string_lit
171
+ | "email" string_lit
172
+ | "slack" string_lit
173
+ | "ms-teams" string_lit
174
+ | owns_stmt
175
+ | "team" identifier ;
176
+ owns_stmt = "owns" resource_type_kw identifier ;
177
+ resource_type_kw = "domain" | "service" | "event" | "command" | "query" ;
178
+
179
+ (* Team *)
180
+ team_decl = "team" identifier "{" team_props "}" ;
181
+ team_props = "name" string_lit
182
+ | "summary" string_lit
183
+ | "email" string_lit
184
+ | "slack" string_lit
185
+ | "ms-teams" string_lit
186
+ | "member" identifier
187
+ | owns_stmt ;
188
+
189
+ (* Resource references *)
190
+ service_ref_stmt = "service" resource_ref ;
191
+ domain_ref_stmt = "domain" resource_ref ;
192
+ event_ref_stmt = "event" resource_ref ;
193
+ command_ref_stmt = "command" resource_ref ;
194
+ query_ref_stmt = "query" resource_ref ;
195
+ channel_ref_stmt = "channel" resource_ref ;
196
+ container_ref_stmt = "container" resource_ref ;
197
+ ```
198
+
199
+ ## Reserved Keywords
200
+
201
+ ```
202
+ domain service event command query
203
+ channel container data-product flow
204
+ user team sends receives
205
+ writes-to reads-from owns to from
206
+ version name summary owner schema
207
+ deprecated draft true false
208
+ type actor external-system
209
+ parameter route member
210
+ input output contract
211
+ subdomain visualizer legend search toolbar focus-mode
212
+ animated style when and
213
+ ```
214
+
215
+ ## File Extension
216
+
217
+ EventCatalog DSL files use the `.ec` extension:
218
+
219
+ ```
220
+ catalog.ec
221
+ orders-domain.ec
222
+ payment-service.ec
223
+ ```
224
+
225
+ Multiple `.ec` files can be used and are merged during compilation. Resources can reference each other across files.
226
+
227
+ ## Compilation
228
+
229
+ The DSL compiles to EventCatalog's directory structure:
230
+
231
+ ```
232
+ catalog.ec --> domains/Orders/index.mdx
233
+ domains/Orders/services/OrderService/index.mdx
234
+ events/OrderCreated/index.mdx
235
+ commands/ProcessPayment/index.mdx
236
+ channels/orders-topic/index.mdx
237
+ users/dboyne.mdx
238
+ teams/orders-team.mdx
239
+ ...
240
+ ```
241
+
242
+ Each resource becomes a markdown file with YAML frontmatter matching EventCatalog's content collection schemas.
@@ -0,0 +1,197 @@
1
+ # Visualizer
2
+
3
+ The `visualizer` block separates **resource definition** from **visualization**. Resources defined outside a visualizer block exist in the catalog but are not rendered visually. Only resources placed inside a `visualizer` block (or referenced from one) appear in the visual graph.
4
+
5
+ This separation lets teams maintain a single source of truth for all resources while controlling exactly what gets visualized and how.
6
+
7
+ ```
8
+ visualizer <id> {
9
+ name "<display name>"
10
+ summary "<text>"
11
+
12
+ // Display options
13
+ legend true|false
14
+ search true|false
15
+ toolbar true|false
16
+ focus-mode true|false
17
+ animated true|false
18
+ style default|post-it
19
+
20
+ // Resources to visualize (inline or reference)
21
+ <resource definitions or references>
22
+ }
23
+ ```
24
+
25
+ ## Why Visualizer Exists
26
+
27
+ A `.ec` file can define dozens of resources — domains, services, events, channels, and more. Without a visualizer block, there is no way to control which resources appear in the visual graph or how they are presented.
28
+
29
+ The visualizer block makes visualization **explicit**:
30
+
31
+ - Define resources anywhere (top-level, imported files)
32
+ - Choose what to visualize by placing resources inside a `visualizer` block
33
+ - Configure display options per visualization
34
+
35
+ ## Multiple Visualizer Blocks
36
+
37
+ A file can contain multiple `visualizer` blocks, each presenting a different view over the same resources. Tools (e.g. the playground) allow switching between them.
38
+
39
+ ```
40
+ // Shared resources
41
+ event OrderCreated {
42
+ version 1.0.0
43
+ }
44
+
45
+ event PaymentProcessed {
46
+ version 1.0.0
47
+ }
48
+
49
+ service OrderService {
50
+ version 1.0.0
51
+ sends event OrderCreated
52
+ }
53
+
54
+ service PaymentService {
55
+ version 1.0.0
56
+ receives event OrderCreated
57
+ sends event PaymentProcessed
58
+ }
59
+
60
+ // View 1: Order flow only
61
+ visualizer orders {
62
+ name "Order Flow"
63
+
64
+ service OrderService
65
+ event OrderCreated
66
+ }
67
+
68
+ // View 2: Full payment pipeline
69
+ visualizer payments {
70
+ name "Payment Pipeline"
71
+
72
+ service OrderService
73
+ service PaymentService
74
+ event OrderCreated
75
+ event PaymentProcessed
76
+ }
77
+ ```
78
+
79
+ ## Resources Without a Visualizer
80
+
81
+ Resources defined outside any `visualizer` block are valid. They can be:
82
+
83
+ - Imported by other `.ec` files
84
+ - Referenced from within a `visualizer` block
85
+ - Used for compilation to EventCatalog's markdown format
86
+
87
+ If a file contains no `visualizer` block, no visual graph is produced.
88
+
89
+ ## Inline vs. Reference
90
+
91
+ Resources inside a visualizer can be defined inline (full definition) or referenced by name:
92
+
93
+ **Inline** — defines and visualizes the resource:
94
+
95
+ ```
96
+ visualizer main {
97
+ name "My Architecture"
98
+
99
+ service OrderService {
100
+ version 1.0.0
101
+ sends event OrderCreated
102
+ }
103
+ }
104
+ ```
105
+
106
+ **Reference** — visualizes a resource defined elsewhere:
107
+
108
+ ```
109
+ service OrderService {
110
+ version 1.0.0
111
+ sends event OrderCreated
112
+ }
113
+
114
+ visualizer main {
115
+ name "My Architecture"
116
+ service OrderService
117
+ }
118
+ ```
119
+
120
+ When a resource is referenced, the visualizer enriches the node with metadata from the matching top-level definition.
121
+
122
+ ## Display Options
123
+
124
+ | Property | Type | Default | Description |
125
+ | ------------ | ------- | --------- | -------------------------------------- |
126
+ | `name` | string | — | Display title for the visualization |
127
+ | `summary` | string | — | Description of the visualization |
128
+ | `legend` | boolean | `true` | Show the node type legend |
129
+ | `search` | boolean | `true` | Show the search bar |
130
+ | `toolbar` | boolean | `true` | Show the toolbar (export, zoom, etc.) |
131
+ | `focus-mode` | boolean | `true` | Enable focus mode for individual nodes |
132
+ | `animated` | boolean | `true` | Animate edges |
133
+ | `style` | enum | `default` | Visual style: `default` or `post-it` |
134
+
135
+ ## Example
136
+
137
+ ```
138
+ // Teams
139
+ team orders-team {
140
+ name "Orders Team"
141
+ }
142
+
143
+ // Resources
144
+ channel orders-topic {
145
+ version 1.0.0
146
+ protocol "Kafka"
147
+ }
148
+
149
+ // Visualizer with display options
150
+ visualizer order-architecture {
151
+ name "Order Architecture"
152
+ summary "Core order processing services"
153
+ legend true
154
+ search true
155
+ animated false
156
+ style post-it
157
+
158
+ domain Orders {
159
+ version 1.0.0
160
+ owner orders-team
161
+
162
+ service OrderService {
163
+ version 1.0.0
164
+ sends event OrderCreated to orders-topic
165
+ receives command CreateOrder
166
+ }
167
+
168
+ service NotificationService {
169
+ version 1.0.0
170
+ receives event OrderCreated
171
+ }
172
+ }
173
+ }
174
+ ```
175
+
176
+ ## EBNF
177
+
178
+ ```ebnf
179
+ visualizer_decl = "visualizer" identifier "{" { visualizer_body } "}" ;
180
+ visualizer_body = name_prop | summary_prop | annotation
181
+ | legend_prop | search_prop | toolbar_prop
182
+ | focus_mode_prop | animated_prop | style_prop
183
+ | domain_decl | service_decl | event_decl | command_decl
184
+ | query_decl | channel_decl | container_decl
185
+ | data_product_decl | flow_decl
186
+ | actor_decl | external_system_decl
187
+ | service_ref_stmt | domain_ref_stmt
188
+ | event_ref_stmt | command_ref_stmt | query_ref_stmt
189
+ | channel_ref_stmt | data_product_ref_stmt | flow_ref_stmt
190
+ | container_ref_stmt ;
191
+ legend_prop = "legend" bool_lit ;
192
+ search_prop = "search" bool_lit ;
193
+ toolbar_prop = "toolbar" bool_lit ;
194
+ focus_mode_prop = "focus-mode" bool_lit ;
195
+ animated_prop = "animated" bool_lit ;
196
+ style_prop = "style" ( "default" | "post-it" ) ;
197
+ ```
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Assembles the individual specification files into a single SPEC.md
4
+ # Usage: ./specification/build-spec.sh
5
+ #
6
+
7
+ set -euo pipefail
8
+
9
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
10
+ OUTPUT="$SCRIPT_DIR/../SPEC.md"
11
+
12
+ cat > "$OUTPUT" << 'HEADER'
13
+ # EventCatalog DSL — Language Specification
14
+
15
+ > Version: 1.0.0-draft
16
+ > Status: Draft
17
+ > Date: 2026-02-08
18
+
19
+ ## Table of Contents
20
+
21
+ 1. [Overview](#overview)
22
+ 2. [Domain](#domain)
23
+ 3. [Service](#service)
24
+ 4. [Event](#event)
25
+ 5. [Command](#command)
26
+ 6. [Query](#query)
27
+ 7. [Channel](#channel)
28
+ 8. [Container](#container)
29
+ 9. [Data Product](#data-product)
30
+ 10. [Flow](#flow)
31
+ 11. [User](#user)
32
+ 12. [Team](#team)
33
+ 13. [Relationships & Pointers](#relationships--pointers)
34
+ 14. [Versioning](#versioning)
35
+ 15. [Metadata & Annotations](#metadata--annotations)
36
+ 16. [Complete Examples](#complete-examples)
37
+ 17. [Full Grammar (EBNF)](#full-grammar-ebnf)
38
+
39
+ ---
40
+
41
+ HEADER
42
+
43
+ # Append each spec file in order, separated by ---
44
+ for file in "$SCRIPT_DIR"/[0-9][0-9]-*.md; do
45
+ cat "$file" >> "$OUTPUT"
46
+ printf '\n---\n\n' >> "$OUTPUT"
47
+ done
48
+
49
+ echo "Built $OUTPUT from $(ls "$SCRIPT_DIR"/[0-9][0-9]-*.md | wc -l | tr -d ' ') specification files."
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "ec",
3
+ "scopeName": "source.ec",
4
+ "fileTypes": [
5
+ ".ec"
6
+ ],
7
+ "patterns": [
8
+ {
9
+ "include": "#comments"
10
+ },
11
+ {
12
+ "name": "keyword.control.ec",
13
+ "match": "\\b(access-mode|actor|address|and|animated|appendOnly|authoritative|avatar|cache|channel|classification|color|command|confidential|container|container-type|contract|data-product|dataLake|dataWarehouse|database|default|delivery|deprecated|description|diagram|domain|draft|email|enum|event|examples|external-system|externalSaaS|false|flow|focus-mode|from|hidden|icon|import|input|internal|label|legend|member|message|ms-teams|name|objectStore|other|output|owner|owns|parameter|path|post-it|protocol|public|pull|push|push-pull|query|read|readWrite|reads-from|receives|regulated|residency|retention|role|route|schema|search|searchIndex|sends|service|slack|style|subdomain|summary|team|technology|title|to|toolbar|true|type|url|user|version|visible|visualizer|when|write|writes-to)\\b"
14
+ },
15
+ {
16
+ "name": "string.quoted.double.ec",
17
+ "begin": "\"",
18
+ "end": "\"",
19
+ "patterns": [
20
+ {
21
+ "include": "#string-character-escape"
22
+ }
23
+ ]
24
+ }
25
+ ],
26
+ "repository": {
27
+ "comments": {
28
+ "patterns": [
29
+ {
30
+ "begin": "//",
31
+ "beginCaptures": {
32
+ "1": {
33
+ "name": "punctuation.whitespace.comment.leading.ec"
34
+ }
35
+ },
36
+ "end": "(?=$)",
37
+ "name": "comment.line.ec"
38
+ },
39
+ {
40
+ "name": "comment.block.ec",
41
+ "begin": "/\\*",
42
+ "beginCaptures": {
43
+ "0": {
44
+ "name": "punctuation.definition.comment.ec"
45
+ }
46
+ },
47
+ "end": "\\*/",
48
+ "endCaptures": {
49
+ "0": {
50
+ "name": "punctuation.definition.comment.ec"
51
+ }
52
+ }
53
+ }
54
+ ]
55
+ },
56
+ "string-character-escape": {
57
+ "name": "constant.character.escape.ec",
58
+ "match": "\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\{[0-9A-Fa-f]+\\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)"
59
+ }
60
+ }
61
+ }