@cratis/screenplay-language 4.52.0 → 4.54.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 (191) hide show
  1. package/README.md +15 -0
  2. package/dist/TypeReferenceSymbol.d.ts +8 -0
  3. package/dist/TypeReferenceSymbol.d.ts.map +1 -0
  4. package/dist/bundles/chunk-GJX4NJYC.js +4836 -0
  5. package/dist/bundles/chunk-GJX4NJYC.js.map +7 -0
  6. package/dist/bundles/index.js +1417 -0
  7. package/dist/bundles/index.js.map +7 -0
  8. package/dist/bundles/sub-languages/capture/index.js +677 -0
  9. package/dist/bundles/sub-languages/capture/index.js.map +7 -0
  10. package/dist/bundles/sub-languages/projection/index.js +1647 -0
  11. package/dist/bundles/sub-languages/projection/index.js.map +7 -0
  12. package/dist/code-actions.d.ts +3 -0
  13. package/dist/code-actions.d.ts.map +1 -0
  14. package/dist/completion-items.d.ts +1 -0
  15. package/dist/completion-items.d.ts.map +1 -1
  16. package/dist/completion-planner.d.ts.map +1 -1
  17. package/dist/completions.d.ts.map +1 -1
  18. package/dist/diagnostic-codes.d.ts +3 -0
  19. package/dist/diagnostic-codes.d.ts.map +1 -1
  20. package/dist/diagnostics.d.ts.map +1 -1
  21. package/dist/hover-content.d.ts.map +1 -1
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/keyword-docs.d.ts.map +1 -1
  25. package/dist/language.d.ts +1 -0
  26. package/dist/language.d.ts.map +1 -1
  27. package/dist/production-destinations.d.ts.map +1 -1
  28. package/dist/symbols.d.ts +4 -0
  29. package/dist/symbols.d.ts.map +1 -1
  30. package/dist/tokens.d.ts.map +1 -1
  31. package/dist/validation.d.ts +1 -0
  32. package/dist/validation.d.ts.map +1 -1
  33. package/package.json +13 -9
  34. package/DestinationHint.ts +0 -8
  35. package/ProductionSymbol.ts +0 -11
  36. package/completion-items.ts +0 -261
  37. package/completion-planner.ts +0 -167
  38. package/completions.ts +0 -156
  39. package/diagnostic-codes.ts +0 -43
  40. package/diagnostics.ts +0 -55
  41. package/dist/DestinationHint.js +0 -4
  42. package/dist/DestinationHint.js.map +0 -1
  43. package/dist/ProductionSymbol.js +0 -4
  44. package/dist/ProductionSymbol.js.map +0 -1
  45. package/dist/completion-items.js +0 -228
  46. package/dist/completion-items.js.map +0 -1
  47. package/dist/completion-planner.js +0 -143
  48. package/dist/completion-planner.js.map +0 -1
  49. package/dist/completions.js +0 -101
  50. package/dist/completions.js.map +0 -1
  51. package/dist/diagnostic-codes.js +0 -41
  52. package/dist/diagnostic-codes.js.map +0 -1
  53. package/dist/diagnostics.js +0 -50
  54. package/dist/diagnostics.js.map +0 -1
  55. package/dist/document-context.js +0 -85
  56. package/dist/document-context.js.map +0 -1
  57. package/dist/event-analysis-source.js +0 -19
  58. package/dist/event-analysis-source.js.map +0 -1
  59. package/dist/event-context-catalog.js +0 -116
  60. package/dist/event-context-catalog.js.map +0 -1
  61. package/dist/event-context.js +0 -88
  62. package/dist/event-context.js.map +0 -1
  63. package/dist/file-imports.js +0 -58
  64. package/dist/file-imports.js.map +0 -1
  65. package/dist/file-references.js +0 -70
  66. package/dist/file-references.js.map +0 -1
  67. package/dist/hover-content.js +0 -98
  68. package/dist/hover-content.js.map +0 -1
  69. package/dist/hover.js +0 -15
  70. package/dist/hover.js.map +0 -1
  71. package/dist/index.js +0 -61
  72. package/dist/index.js.map +0 -1
  73. package/dist/inlay-hints.js +0 -15
  74. package/dist/inlay-hints.js.map +0 -1
  75. package/dist/inline-event-validation.js +0 -131
  76. package/dist/inline-event-validation.js.map +0 -1
  77. package/dist/keyword-docs.js +0 -148
  78. package/dist/keyword-docs.js.map +0 -1
  79. package/dist/language.js +0 -196
  80. package/dist/language.js.map +0 -1
  81. package/dist/production-destinations.js +0 -32
  82. package/dist/production-destinations.js.map +0 -1
  83. package/dist/sub-language-registry.js +0 -18
  84. package/dist/sub-language-registry.js.map +0 -1
  85. package/dist/sub-languages/capture/CompletionProvider.js +0 -332
  86. package/dist/sub-languages/capture/CompletionProvider.js.map +0 -1
  87. package/dist/sub-languages/capture/HoverProvider.js +0 -87
  88. package/dist/sub-languages/capture/HoverProvider.js.map +0 -1
  89. package/dist/sub-languages/capture/Validator.js +0 -72
  90. package/dist/sub-languages/capture/Validator.js.map +0 -1
  91. package/dist/sub-languages/capture/index.js +0 -58
  92. package/dist/sub-languages/capture/index.js.map +0 -1
  93. package/dist/sub-languages/capture/language.js +0 -160
  94. package/dist/sub-languages/capture/language.js.map +0 -1
  95. package/dist/sub-languages/cdl.js +0 -74
  96. package/dist/sub-languages/cdl.js.map +0 -1
  97. package/dist/sub-languages/pdl.js +0 -73
  98. package/dist/sub-languages/pdl.js.map +0 -1
  99. package/dist/sub-languages/projection/CodeActionProvider.js +0 -93
  100. package/dist/sub-languages/projection/CodeActionProvider.js.map +0 -1
  101. package/dist/sub-languages/projection/CompletionProvider.js +0 -595
  102. package/dist/sub-languages/projection/CompletionProvider.js.map +0 -1
  103. package/dist/sub-languages/projection/HoverProvider.js +0 -333
  104. package/dist/sub-languages/projection/HoverProvider.js.map +0 -1
  105. package/dist/sub-languages/projection/Validator.js +0 -388
  106. package/dist/sub-languages/projection/Validator.js.map +0 -1
  107. package/dist/sub-languages/projection/index.js +0 -160
  108. package/dist/sub-languages/projection/index.js.map +0 -1
  109. package/dist/sub-languages/projection/language.js +0 -171
  110. package/dist/sub-languages/projection/language.js.map +0 -1
  111. package/dist/symbols.js +0 -275
  112. package/dist/symbols.js.map +0 -1
  113. package/dist/themes/screenplay-dark.js +0 -30
  114. package/dist/themes/screenplay-dark.js.map +0 -1
  115. package/dist/themes/screenplay-light.js +0 -30
  116. package/dist/themes/screenplay-light.js.map +0 -1
  117. package/dist/tokens.js +0 -147
  118. package/dist/tokens.js.map +0 -1
  119. package/dist/validation.js +0 -248
  120. package/dist/validation.js.map +0 -1
  121. package/document-context.ts +0 -93
  122. package/event-analysis-source.ts +0 -18
  123. package/event-context-catalog.ts +0 -135
  124. package/event-context.ts +0 -119
  125. package/file-imports.ts +0 -70
  126. package/file-references.ts +0 -87
  127. package/for_documentContext/when_stripping_comments.ts +0 -32
  128. package/for_eventContext/when_resolving_generated_catalog_vectors.ts +0 -15
  129. package/for_eventGenerations/when_editing_event_generations.ts +0 -57
  130. package/for_fileImports/when_finding_file_imports.ts +0 -38
  131. package/for_fileReferences/when_recognizing_an_absolute_path/with_paths_of_every_shape.ts +0 -26
  132. package/for_fileReferences/when_scanning_a_document/inside_a_code_fence.ts +0 -26
  133. package/for_fileReferences/when_scanning_a_document/with_a_bare_file_keyword.ts +0 -19
  134. package/for_fileReferences/when_scanning_a_document/with_a_file_directive.ts +0 -30
  135. package/for_fileReferences/when_scanning_a_document/with_a_property_named_file.ts +0 -25
  136. package/for_fileReferences/when_scanning_a_document/with_a_trailing_comment.ts +0 -25
  137. package/for_fileReferences/when_scanning_a_document/with_directives_on_several_constructs.ts +0 -41
  138. package/for_importablePaths/when_listing_what_a_document_can_import.ts +0 -34
  139. package/for_inlineEvents/when_analyzing_many_inline_events.ts +0 -59
  140. package/for_inlineEvents/when_authoring_inline_events.ts +0 -149
  141. package/for_inlineEvents/when_completing_many_events.ts +0 -49
  142. package/for_inlineEvents/when_indexing_command_production_ownership.ts +0 -79
  143. package/for_planCompletions/when_completing_a_file_import.ts +0 -26
  144. package/for_planCompletions/when_completing_a_specification_query.ts +0 -24
  145. package/for_planCompletions/when_completing_a_specification_step.ts +0 -42
  146. package/for_planCompletions/when_completing_an_absent_read_model.ts +0 -14
  147. package/for_planCompletions/when_completing_reaction_reads.ts +0 -36
  148. package/for_projectionCompletionProvider/when_completing_an_event_context_path.ts +0 -102
  149. package/for_projectionHoverProvider/when_hovering_an_event_context_path.ts +0 -44
  150. package/for_projectionValidator/when_validating_a_projection_with_variants.ts +0 -128
  151. package/for_projectionValidator/when_validating_event_context_paths.ts +0 -31
  152. package/for_scanDocument/when_scanning_a_query/with_a_dotted_return_type.ts +0 -34
  153. package/for_scanDocument/when_scanning_aliased_reads.ts +0 -33
  154. package/for_scanDocument/when_scanning_many_commands.ts +0 -47
  155. package/for_tokens/when_highlighting_a_file_import.ts +0 -18
  156. package/for_tokens/when_highlighting_event_metadata.ts +0 -63
  157. package/for_tokens/when_highlighting_specification_steps.ts +0 -28
  158. package/for_validateLines/when_validating_a_document/with_a_problem_of_every_coded_kind.ts +0 -77
  159. package/for_validateLines/when_validating_a_document/with_an_unknown_policy.ts +0 -33
  160. package/for_validateLines/when_validating_a_file_placed_by_an_import/with_names_declared_in_other_files.ts +0 -43
  161. package/for_validateLines/when_validating_event_context_paths/in_a_projection.ts +0 -97
  162. package/for_validateLines/when_validating_file_imports/at_every_level.ts +0 -36
  163. package/for_validateLines/when_validating_production_destinations/with_an_available_identifier.ts +0 -120
  164. package/hover-content.ts +0 -117
  165. package/hover.ts +0 -23
  166. package/index.ts +0 -125
  167. package/inlay-hints.ts +0 -17
  168. package/inline-event-validation.ts +0 -115
  169. package/keyword-docs.ts +0 -152
  170. package/language.ts +0 -212
  171. package/production-destinations.ts +0 -32
  172. package/sub-language-registry.ts +0 -42
  173. package/sub-languages/capture/CompletionProvider.ts +0 -365
  174. package/sub-languages/capture/HoverProvider.ts +0 -99
  175. package/sub-languages/capture/Validator.ts +0 -97
  176. package/sub-languages/capture/index.ts +0 -72
  177. package/sub-languages/capture/language.ts +0 -176
  178. package/sub-languages/cdl.ts +0 -76
  179. package/sub-languages/pdl.ts +0 -75
  180. package/sub-languages/projection/CodeActionProvider.ts +0 -123
  181. package/sub-languages/projection/CompletionProvider.ts +0 -660
  182. package/sub-languages/projection/HoverProvider.ts +0 -377
  183. package/sub-languages/projection/Validator.ts +0 -441
  184. package/sub-languages/projection/index.ts +0 -223
  185. package/sub-languages/projection/language.ts +0 -193
  186. package/symbols.ts +0 -374
  187. package/themes/screenplay-dark.ts +0 -33
  188. package/themes/screenplay-light.ts +0 -33
  189. package/tokens.ts +0 -174
  190. package/validation.ts +0 -443
  191. package/vitest.setup.ts +0 -5
@@ -1,595 +0,0 @@
1
- // Copyright (c) Cratis. All rights reserved.
2
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
- import { eventContextMembers, eventContextMembersAfter } from '../../event-context';
4
- // The path typed so far after $eventContext. - on its own or as the dynamic key of a mapping target - and the
5
- // partial segment under the cursor.
6
- const EVENT_CONTEXT_PATH = /\$eventContext\.((?:\w+\.)*)(\w*)$/;
7
- export class CompletionProvider {
8
- readModels = [];
9
- eventSchemas = {};
10
- eventSequences = [];
11
- setReadModels(readModels) {
12
- this.readModels = readModels || [];
13
- }
14
- setEventSequences(sequences) {
15
- this.eventSequences = sequences || [];
16
- }
17
- // Keep for backwards compatibility
18
- setReadModelSchemas(schemas) {
19
- this.readModels = schemas.map(schema => ({
20
- identifier: this.getSchemaName(schema) || '',
21
- displayName: this.getSchemaName(schema) || '',
22
- schema
23
- }));
24
- }
25
- setEventSchemas(schemas) {
26
- if (!schemas) {
27
- this.eventSchemas = {};
28
- return;
29
- }
30
- if (Array.isArray(schemas)) {
31
- const map = {};
32
- schemas.forEach((s, i) => {
33
- if (!s)
34
- return;
35
- const name = this.getSchemaName(s) || `Event${i + 1}`;
36
- map[name] = s;
37
- });
38
- this.eventSchemas = map;
39
- return;
40
- }
41
- this.eventSchemas = schemas;
42
- }
43
- provideCompletionItems(model, position) {
44
- const context = this.buildContext(model, position);
45
- const suggestions = [];
46
- // Get the active read model schema from the projection declaration
47
- const activeSchema = this.getActiveReadModelSchema(model);
48
- // Determine what kind of completions to provide based on context
49
- if (context.lineNumber === 1) {
50
- this.addProjectionLineCompletions(suggestions, context);
51
- }
52
- else if (this.isAfterKeyword(context, 'sequence')) {
53
- this.addEventSequenceCompletions(suggestions, context);
54
- }
55
- else if (this.isAfterKeyword(context, 'from') || this.isAfterKeyword(context, 'every')) {
56
- this.addEventTypeCompletions(suggestions, context);
57
- }
58
- else if (/\benters\s+on\s+\w*$/.test(context.textBeforeCursor)) {
59
- this.addEventTypeCompletions(suggestions, context);
60
- }
61
- else if (/\benters\s+\w*$/.test(context.textBeforeCursor)) {
62
- suggestions.push({
63
- label: 'on',
64
- kind: 14, // Keyword
65
- insertText: 'on ',
66
- documentation: 'Declares the event that activates this variant.',
67
- detail: 'enters on <EventType>',
68
- range: this.getRangeForWord(context),
69
- });
70
- }
71
- else if (this.isAfterKeyword(context, 'variant')) {
72
- this.addVariantNameCompletions(suggestions, context);
73
- }
74
- else if (this.isAfterKeyword(context, 'key')) {
75
- this.addKeyCompletions(suggestions, context, activeSchema);
76
- }
77
- else if (this.isAfterKeyword(context, 'parent')) {
78
- this.addParentCompletions(suggestions, context);
79
- }
80
- else if (this.isAfterKeyword(context, 'children')) {
81
- this.addChildrenCompletions(suggestions, context, activeSchema);
82
- }
83
- else if (this.isAfterKeyword(context, 'join')) {
84
- this.addJoinCompletions(suggestions, context, activeSchema);
85
- }
86
- else if (this.isAfterKeyword(context, 'with')) {
87
- this.addEventTypeCompletions(suggestions, context);
88
- }
89
- else if (this.isAfterNumericOperationKeyword(context)) {
90
- this.addNumericPropertyCompletions(suggestions, context, activeSchema);
91
- }
92
- else if (this.isAfterAddOrSubtractBy(context)) {
93
- this.addAssignmentValueCompletions(suggestions, context, model, position);
94
- }
95
- else if (this.isInAssignment(context)) {
96
- this.addAssignmentValueCompletions(suggestions, context, model, position);
97
- }
98
- else if (this.isPropertyDotAccess(context)) {
99
- this.addPropertyMemberCompletions(suggestions, context);
100
- }
101
- else if (this.isStartOfLine(context) || this.isAfterIndent(context)) {
102
- this.addStatementCompletions(suggestions, context, activeSchema);
103
- }
104
- return { suggestions };
105
- }
106
- buildContext(model, position) {
107
- const lineContent = model.getLineContent(position.lineNumber);
108
- const textBeforeCursor = lineContent.substring(0, position.column - 1);
109
- const textAfterCursor = lineContent.substring(position.column - 1);
110
- const word = model.getWordAtPosition(position);
111
- const currentWord = word?.word || '';
112
- const indentLevel = this.getIndentLevel(textBeforeCursor);
113
- return {
114
- lineContent,
115
- textBeforeCursor,
116
- textAfterCursor,
117
- currentWord,
118
- indentLevel,
119
- lineNumber: position.lineNumber,
120
- };
121
- }
122
- getIndentLevel(text) {
123
- const match = text.match(/^(\s*)/);
124
- return match ? Math.floor(match[1].length / 2) : 0;
125
- }
126
- isStartOfLine(context) {
127
- return context.textBeforeCursor.trim() === '';
128
- }
129
- isAfterIndent(context) {
130
- return /^\s+$/.test(context.textBeforeCursor);
131
- }
132
- isAfterKeyword(context, keyword) {
133
- const pattern = new RegExp(`\\b${keyword}\\s+\\w*$`);
134
- return pattern.test(context.textBeforeCursor);
135
- }
136
- isAfterNumericOperationKeyword(context) {
137
- // Match: count, increment, decrement, add, subtract followed by optional word (but not "by")
138
- // For add/subtract, we only match if "by" hasn't been typed yet
139
- const countIncrDecrPattern = /\b(count|increment|decrement)\s+\w*$/;
140
- const addSubtractPattern = /\b(add|subtract)\s+\w*$/;
141
- // Check for count/increment/decrement first
142
- if (countIncrDecrPattern.test(context.textBeforeCursor)) {
143
- return true;
144
- }
145
- // For add/subtract, only match if "by" hasn't been typed yet
146
- if (addSubtractPattern.test(context.textBeforeCursor)) {
147
- // Make sure we're not after "by"
148
- return !this.isAfterAddOrSubtractBy(context);
149
- }
150
- return false;
151
- }
152
- isAfterAddOrSubtractBy(context) {
153
- // Match: "add <property> by " or "subtract <property> by " followed by optional word
154
- const pattern = /\b(add|subtract)\s+\w+\s+by\s+\w*$/;
155
- return pattern.test(context.textBeforeCursor);
156
- }
157
- isInAssignment(context) {
158
- return /\w+\s*=\s*\w*$/.test(context.textBeforeCursor);
159
- }
160
- isPropertyDotAccess(context) {
161
- // A member of an event property or a $-expression, or any depth of an event-context path - written as an
162
- // expression or as the dynamic key of a mapping target (propertyName.$eventContext.<path>).
163
- return /(\w+|\$\w+)\.(\w*)$/.test(context.textBeforeCursor) ||
164
- EVENT_CONTEXT_PATH.test(context.textBeforeCursor);
165
- }
166
- addProjectionLineCompletions(suggestions, context) {
167
- const trimmed = context.textBeforeCursor.trim();
168
- // Suggest "projection" keyword
169
- if (trimmed === '' || 'projection'.startsWith(trimmed)) {
170
- suggestions.push({
171
- label: 'projection',
172
- kind: 14, // Keyword
173
- insertText: 'projection ',
174
- documentation: 'Define a projection that transforms events into a read model',
175
- detail: 'projection <ProjectionName>',
176
- range: this.getRangeForWord(context),
177
- });
178
- }
179
- // Check if cursor is after "=>" to suggest read model names
180
- const arrowMatch = trimmed.match(/^projection\s+[\w.]+\s*=>\s*([\w.]*)$/);
181
- if (arrowMatch) {
182
- const partialReadModel = arrowMatch[1] || '';
183
- this.readModels.forEach((readModel) => {
184
- if (!partialReadModel || readModel.displayName.toLowerCase().startsWith(partialReadModel.toLowerCase())) {
185
- const label = `${readModel.displayName} (${readModel.identifier})`;
186
- suggestions.push({
187
- label,
188
- kind: 6, // Class
189
- insertText: readModel.displayName,
190
- filterText: `${readModel.displayName} ${readModel.identifier}`,
191
- documentation: `Read model: ${readModel.displayName} (${readModel.identifier})`,
192
- detail: readModel.identifier,
193
- range: this.getRangeForWord(context),
194
- });
195
- }
196
- });
197
- return;
198
- }
199
- // After "projection ", suggest read model names (for quick completion of both projection name and read model)
200
- if (trimmed.startsWith('projection ') && !trimmed.includes('=>')) {
201
- const afterProjection = trimmed.substring('projection '.length);
202
- this.readModels.forEach((readModel) => {
203
- if (!afterProjection || readModel.displayName.toLowerCase().startsWith(afterProjection.toLowerCase())) {
204
- const label = `${readModel.displayName} (${readModel.identifier})`;
205
- suggestions.push({
206
- label,
207
- kind: 6, // Class
208
- insertText: `${readModel.displayName} => ${readModel.displayName}`,
209
- filterText: `${readModel.displayName} ${readModel.identifier}`,
210
- documentation: `Read model: ${readModel.displayName} (${readModel.identifier})`,
211
- detail: readModel.identifier,
212
- range: this.getRangeForWord(context),
213
- });
214
- }
215
- });
216
- }
217
- }
218
- addEventTypeCompletions(suggestions, context) {
219
- Object.keys(this.eventSchemas).forEach((eventName) => {
220
- if (!context.currentWord || eventName.startsWith(context.currentWord)) {
221
- const schema = this.eventSchemas[eventName];
222
- suggestions.push({
223
- label: eventName,
224
- kind: 6, // Class
225
- insertText: eventName,
226
- documentation: this.getSchemaDescription(schema) || `Event type: ${eventName}`,
227
- detail: 'Event Type',
228
- range: this.getRangeForWord(context),
229
- });
230
- }
231
- });
232
- }
233
- addEventSequenceCompletions(suggestions, context) {
234
- this.eventSequences.forEach((sequenceId) => {
235
- if (!context.currentWord || sequenceId.startsWith(context.currentWord)) {
236
- suggestions.push({
237
- label: sequenceId,
238
- kind: 13, // Value
239
- insertText: sequenceId,
240
- documentation: `Event sequence: ${sequenceId}`,
241
- detail: 'Event Sequence',
242
- range: this.getRangeForWord(context),
243
- });
244
- }
245
- });
246
- }
247
- addKeyCompletions(suggestions, context, activeSchema) {
248
- // Check if this might be a composite key (type reference)
249
- if (activeSchema?.definitions) {
250
- Object.keys(activeSchema.definitions).forEach((typeName) => {
251
- const typeDef = activeSchema.definitions[typeName];
252
- if (typeDef.type === 'object') {
253
- suggestions.push({
254
- label: typeName,
255
- kind: 6, // Class
256
- insertText: typeName,
257
- documentation: `Composite key type: ${typeName}`,
258
- detail: 'Composite Key Type',
259
- range: this.getRangeForWord(context),
260
- });
261
- }
262
- });
263
- }
264
- // Suggest built-in expressions for simple keys
265
- this.addExpressionCompletions(suggestions, context);
266
- }
267
- addParentCompletions(suggestions, context) {
268
- this.addExpressionCompletions(suggestions, context);
269
- }
270
- addNumericPropertyCompletions(suggestions, context, activeSchema) {
271
- // After "count ", "increment ", or "decrement ", suggest numeric properties from read model
272
- if (activeSchema?.properties) {
273
- Object.entries(activeSchema.properties).forEach(([propName, propSchema]) => {
274
- // Suggest numeric properties (integer or number types)
275
- const isNumeric = propSchema.type === 'integer' || propSchema.type === 'number';
276
- if (isNumeric) {
277
- if (!context.currentWord || propName.startsWith(context.currentWord)) {
278
- suggestions.push({
279
- label: propName,
280
- kind: 9, // Property
281
- insertText: propName,
282
- documentation: `Numeric property: ${propName}`,
283
- detail: this.getPropertyTypeDescription(propSchema),
284
- range: this.getRangeForWord(context),
285
- });
286
- }
287
- }
288
- });
289
- }
290
- // Also check if "add" or "subtract" is being typed - need to handle "add <prop> by" pattern
291
- const addSubtractMatch = context.textBeforeCursor.match(/\b(add|subtract)\s+(\w*)$/);
292
- if (addSubtractMatch) {
293
- const partialProp = addSubtractMatch[2] || '';
294
- if (activeSchema?.properties) {
295
- Object.entries(activeSchema.properties).forEach(([propName, propSchema]) => {
296
- const isNumeric = propSchema.type === 'integer' || propSchema.type === 'number';
297
- if (isNumeric && (!partialProp || propName.startsWith(partialProp))) {
298
- suggestions.push({
299
- label: propName,
300
- kind: 9, // Property
301
- insertText: `${propName} by `,
302
- documentation: `Numeric property: ${propName}`,
303
- detail: this.getPropertyTypeDescription(propSchema),
304
- range: this.getRangeForWord(context),
305
- });
306
- }
307
- });
308
- }
309
- }
310
- }
311
- addChildrenCompletions(suggestions, context, activeSchema) {
312
- // After "children ", suggest collection properties from read model
313
- if (activeSchema?.properties) {
314
- Object.entries(activeSchema.properties).forEach(([propName, propSchema]) => {
315
- // Collections are typically arrays
316
- if (propSchema.type === 'array' || propSchema.items) {
317
- suggestions.push({
318
- label: propName,
319
- kind: 9, // Property
320
- insertText: `${propName} id `,
321
- documentation: `Collection property: ${propName}`,
322
- detail: this.getPropertyTypeDescription(propSchema),
323
- range: this.getRangeForWord(context),
324
- });
325
- }
326
- });
327
- }
328
- }
329
- addJoinCompletions(suggestions, context, activeSchema) {
330
- const trimmed = context.textBeforeCursor.trim();
331
- if (trimmed === 'join' || !trimmed.includes(' ')) {
332
- // Suggest collection properties
333
- if (activeSchema?.properties) {
334
- Object.entries(activeSchema.properties).forEach(([propName, propSchema]) => {
335
- if (propSchema.type === 'array' || propSchema.items) {
336
- suggestions.push({
337
- label: propName,
338
- kind: 9,
339
- insertText: `${propName} on `,
340
- documentation: `Join on collection: ${propName}`,
341
- range: this.getRangeForWord(context),
342
- });
343
- }
344
- });
345
- }
346
- }
347
- else if (trimmed.match(/join\s+\w+\s+on\s+/)) {
348
- // After "on", suggest properties to join on
349
- if (activeSchema?.properties) {
350
- Object.keys(activeSchema.properties).forEach((propName) => {
351
- suggestions.push({
352
- label: propName,
353
- kind: 9,
354
- insertText: propName,
355
- documentation: `Property: ${propName}`,
356
- range: this.getRangeForWord(context),
357
- });
358
- });
359
- }
360
- }
361
- }
362
- addVariantNameCompletions(suggestions, context) {
363
- // After "variant ", suggest read model names - a variant names the read model it produces.
364
- this.readModels.forEach((readModel) => {
365
- if (!context.currentWord || readModel.displayName.toLowerCase().startsWith(context.currentWord.toLowerCase())) {
366
- suggestions.push({
367
- label: readModel.displayName,
368
- kind: 6, // Class
369
- insertText: readModel.displayName,
370
- documentation: `Read model: ${readModel.displayName} (${readModel.identifier})`,
371
- detail: readModel.identifier,
372
- range: this.getRangeForWord(context),
373
- });
374
- }
375
- });
376
- }
377
- addStatementCompletions(suggestions, context, activeSchema) {
378
- // Add all statement keywords
379
- const keywords = [
380
- { label: 'sequence', insertText: 'sequence ', documentation: 'Specify which event sequence to use for this projection', detail: 'sequence <event-sequence-id>' },
381
- { label: 'variant', insertText: 'variant ', documentation: 'Declare one of several mutually exclusive named read models sharing this projection\'s identity', detail: 'variant <Name>' },
382
- { label: 'enters on', insertText: 'enters on ', documentation: 'Declare the event that activates a variant', detail: 'enters on <EventType>' },
383
- { label: 'from', insertText: 'from ', documentation: 'Handle specific event types', detail: 'from <EventType>' },
384
- { label: 'all', insertText: 'all', documentation: 'Subscribe to all event types in the system — mappings run for every event system-wide, regardless of explicit from blocks', detail: 'all' },
385
- { label: 'every', insertText: 'every', documentation: 'Handle all events for automatic mapping (only events explicitly subscribed to via from blocks)', detail: 'every' },
386
- { label: 'key', insertText: 'key ', documentation: 'Define the projection key', detail: 'key <expression>' },
387
- { label: 'parent', insertText: 'parent ', documentation: 'Define parent relationship', detail: 'parent <expression>' },
388
- { label: 'join', insertText: 'join ', documentation: 'Join with child collection', detail: 'join <collection> on <property>' },
389
- { label: 'children', insertText: 'children ', documentation: 'Define child collection operations', detail: 'children <collection> identified by <expression>' },
390
- { label: 'remove with', insertText: 'remove with ', documentation: 'Remove items based on event', detail: 'remove with <EventType>' },
391
- { label: 'remove via', insertText: 'remove via join on ', documentation: 'Remove items via join', detail: 'remove via join on <EventType>' },
392
- { label: 'no automap', insertText: 'no automap', documentation: 'Disable automatic property mapping', detail: 'no automap' },
393
- { label: 'clear', insertText: 'clear ', documentation: 'Remove the value a property holds', detail: 'clear <property>' },
394
- { label: 'increment', insertText: 'increment ', documentation: 'Increment a numeric property', detail: 'increment <property>' },
395
- { label: 'decrement', insertText: 'decrement ', documentation: 'Decrement a numeric property', detail: 'decrement <property>' },
396
- { label: 'count', insertText: 'count ', documentation: 'Count occurrences', detail: 'count <property>' },
397
- { label: 'add', insertText: 'add ', documentation: 'Add value to property', detail: 'add <property> by <expression>' },
398
- { label: 'subtract', insertText: 'subtract ', documentation: 'Subtract value from property', detail: 'subtract <property> by <expression>' },
399
- { label: 'exclude children', insertText: 'exclude children', documentation: 'Exclude child collections from automap', detail: 'exclude children' },
400
- ];
401
- keywords.forEach((kw) => {
402
- if (!context.currentWord || kw.label.startsWith(context.currentWord)) {
403
- suggestions.push({
404
- label: kw.label,
405
- kind: 14, // Keyword
406
- insertText: kw.insertText,
407
- documentation: kw.documentation,
408
- detail: kw.detail,
409
- range: this.getRangeForWord(context),
410
- });
411
- }
412
- });
413
- // Add property assignments
414
- if (activeSchema?.properties) {
415
- Object.entries(activeSchema.properties).forEach(([propName, propSchema]) => {
416
- if (!context.currentWord || propName.startsWith(context.currentWord)) {
417
- suggestions.push({
418
- label: propName,
419
- kind: 9, // Property
420
- insertText: `${propName} = `,
421
- documentation: `Assign value to property: ${propName}`,
422
- detail: this.getPropertyTypeDescription(propSchema),
423
- range: this.getRangeForWord(context),
424
- });
425
- }
426
- });
427
- }
428
- }
429
- addAssignmentValueCompletions(suggestions, context, model, position) {
430
- // Get the event type from the current block
431
- const eventType = this.getCurrentEventType(model, position.lineNumber);
432
- // Suggest event properties if we know the event type
433
- if (eventType && this.eventSchemas[eventType]) {
434
- const eventSchema = this.eventSchemas[eventType];
435
- if (eventSchema.properties) {
436
- Object.entries(eventSchema.properties).forEach(([propName, propSchema]) => {
437
- suggestions.push({
438
- label: propName,
439
- kind: 9,
440
- insertText: propName,
441
- documentation: `Event property: ${propName}`,
442
- detail: this.getPropertyTypeDescription(propSchema),
443
- range: this.getRangeForWord(context),
444
- });
445
- });
446
- }
447
- }
448
- // Add expression completions
449
- this.addExpressionCompletions(suggestions, context);
450
- }
451
- addExpressionCompletions(suggestions, context) {
452
- const expressions = [
453
- {
454
- label: '$eventSourceId',
455
- insertText: '$eventSourceId',
456
- documentation: 'The identifier of the event source (aggregate/entity)',
457
- detail: 'Event Source Expression'
458
- },
459
- {
460
- label: '$causedBy',
461
- insertText: '$causedBy',
462
- documentation: 'The identity that caused the event. Chronicle cannot yet evaluate this short form (Cratis/Chronicle#4119) - prefer $eventContext.causedBy.<property>.',
463
- detail: 'Identity Expression'
464
- },
465
- {
466
- label: '$eventContext',
467
- insertText: '$eventContext.',
468
- documentation: `Metadata about the event: ${eventContextMembers.map((member) => member.name).join(', ')}`,
469
- detail: 'Event Context Expression'
470
- },
471
- ];
472
- expressions.forEach((expr) => {
473
- if (!context.currentWord || expr.label.startsWith(context.currentWord) || expr.label.startsWith('$' + context.currentWord)) {
474
- suggestions.push({
475
- label: expr.label,
476
- kind: 14, // Keyword/builtin
477
- insertText: expr.insertText,
478
- documentation: expr.documentation,
479
- detail: expr.detail,
480
- range: this.getRangeForWord(context),
481
- });
482
- }
483
- });
484
- }
485
- addPropertyMemberCompletions(suggestions, context) {
486
- // Any depth of an event-context path, as an expression or as a dynamic key (propertyName.$eventContext.<path>)
487
- const eventContextMatch = context.textBeforeCursor.match(EVENT_CONTEXT_PATH);
488
- if (eventContextMatch) {
489
- const segments = eventContextMatch[1].split('.').filter((segment) => segment.length > 0);
490
- this.addEventContextMemberCompletions(suggestions, context, segments, eventContextMatch[2]);
491
- return;
492
- }
493
- const match = context.textBeforeCursor.match(/(\w+|\$\w+)\.(\w*)$/);
494
- if (!match)
495
- return;
496
- const [, objectName, partialProp] = match;
497
- // $causedBy is the short form of $eventContext.causedBy, at any depth
498
- const causedByMatch = context.textBeforeCursor.match(/\$causedBy\.((?:\w+\.)*)(\w*)$/);
499
- if (causedByMatch) {
500
- const segments = causedByMatch[1].split('.').filter((segment) => segment.length > 0);
501
- this.addEventContextMemberCompletions(suggestions, context, ['causedBy', ...segments], causedByMatch[2]);
502
- return;
503
- }
504
- // Handle event type properties
505
- const eventSchema = this.eventSchemas[objectName];
506
- if (eventSchema?.properties) {
507
- Object.entries(eventSchema.properties).forEach(([propName, propSchema]) => {
508
- if (!partialProp || propName.startsWith(partialProp)) {
509
- suggestions.push({
510
- label: propName,
511
- kind: 9,
512
- insertText: propName,
513
- documentation: `Event property: ${propName}`,
514
- detail: this.getPropertyTypeDescription(propSchema),
515
- range: this.getRangeForWord(context),
516
- });
517
- }
518
- });
519
- }
520
- }
521
- addEventContextMemberCompletions(suggestions, context, segments, partial) {
522
- const members = eventContextMembersAfter(segments) ?? [];
523
- members
524
- .filter((member) => !partial || member.name.startsWith(partial))
525
- .forEach((member) => {
526
- suggestions.push({
527
- label: member.name,
528
- kind: member.kind === 'function' ? 1 : 9,
529
- insertText: member.name,
530
- documentation: member.description,
531
- detail: member.type,
532
- range: this.getRangeForWord(context),
533
- });
534
- });
535
- }
536
- getCurrentEventType(model, lineNumber) {
537
- // Search backwards to find the event type declaration
538
- for (let i = lineNumber; i >= 1; i--) {
539
- const line = model.getLineContent(i).trim();
540
- const fromMatch = line.match(/^from\s+([\w-]+)/);
541
- if (fromMatch) {
542
- return fromMatch[1];
543
- }
544
- const everyMatch = line.match(/^every$/);
545
- if (everyMatch) {
546
- return null; // every block doesn't have a specific event type
547
- }
548
- }
549
- return null;
550
- }
551
- getActiveReadModelSchema(model) {
552
- const firstLine = model.getLineContent(1).trim();
553
- const match = firstLine.match(/^projection\s+[\w.]+\s*=>\s*([\w.]+)/);
554
- if (!match)
555
- return undefined;
556
- const readModelName = match[1];
557
- const readModel = this.resolveReadModelInfo(readModelName);
558
- return readModel?.schema;
559
- }
560
- resolveReadModelInfo(readModelToken) {
561
- return this.readModels.find(rm => rm.identifier === readModelToken || rm.displayName === readModelToken) || null;
562
- }
563
- getSchemaName(schema) {
564
- if (schema.name)
565
- return schema.name;
566
- if (schema.title)
567
- return schema.title;
568
- if (typeof schema.$id === 'string') {
569
- const parts = schema.$id.split('/');
570
- return parts[parts.length - 1] || schema.$id;
571
- }
572
- return undefined;
573
- }
574
- getSchemaDescription(schema) {
575
- return schema.description || undefined;
576
- }
577
- getPropertyTypeDescription(propSchema) {
578
- if (propSchema.type === 'array' && propSchema.items) {
579
- const itemType = propSchema.items.type || propSchema.items.$id?.split('/').pop() || 'unknown';
580
- return `${itemType}[]`;
581
- }
582
- return propSchema.type || propSchema.$ref?.split('/').pop() || 'unknown';
583
- }
584
- getRangeForWord(context) {
585
- const startColumn = context.textBeforeCursor.length - context.currentWord.length + 1;
586
- const endColumn = startColumn + context.currentWord.length;
587
- return {
588
- startLineNumber: context.lineNumber,
589
- startColumn: Math.max(1, startColumn),
590
- endLineNumber: context.lineNumber,
591
- endColumn: Math.max(1, endColumn),
592
- };
593
- }
594
- }
595
- //# sourceMappingURL=CompletionProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CompletionProvider.js","sourceRoot":"","sources":["../../../sub-languages/projection/CompletionProvider.ts"],"names":[],"mappings":"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"}