@cratis/screenplay-language 4.52.0 → 4.53.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 (190) hide show
  1. package/dist/TypeReferenceSymbol.d.ts +8 -0
  2. package/dist/TypeReferenceSymbol.d.ts.map +1 -0
  3. package/dist/bundles/chunk-7WJEZ72S.js +4463 -0
  4. package/dist/bundles/chunk-7WJEZ72S.js.map +7 -0
  5. package/dist/bundles/index.js +1410 -0
  6. package/dist/bundles/index.js.map +7 -0
  7. package/dist/bundles/sub-languages/capture/index.js +677 -0
  8. package/dist/bundles/sub-languages/capture/index.js.map +7 -0
  9. package/dist/bundles/sub-languages/projection/index.js +1647 -0
  10. package/dist/bundles/sub-languages/projection/index.js.map +7 -0
  11. package/dist/code-actions.d.ts +3 -0
  12. package/dist/code-actions.d.ts.map +1 -0
  13. package/dist/completion-items.d.ts +1 -0
  14. package/dist/completion-items.d.ts.map +1 -1
  15. package/dist/completion-planner.d.ts.map +1 -1
  16. package/dist/completions.d.ts.map +1 -1
  17. package/dist/diagnostic-codes.d.ts +3 -0
  18. package/dist/diagnostic-codes.d.ts.map +1 -1
  19. package/dist/diagnostics.d.ts.map +1 -1
  20. package/dist/hover-content.d.ts.map +1 -1
  21. package/dist/index.d.ts +3 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/keyword-docs.d.ts.map +1 -1
  24. package/dist/language.d.ts +1 -0
  25. package/dist/language.d.ts.map +1 -1
  26. package/dist/production-destinations.d.ts.map +1 -1
  27. package/dist/symbols.d.ts +4 -0
  28. package/dist/symbols.d.ts.map +1 -1
  29. package/dist/tokens.d.ts.map +1 -1
  30. package/dist/validation.d.ts +1 -0
  31. package/dist/validation.d.ts.map +1 -1
  32. package/package.json +13 -9
  33. package/DestinationHint.ts +0 -8
  34. package/ProductionSymbol.ts +0 -11
  35. package/completion-items.ts +0 -261
  36. package/completion-planner.ts +0 -167
  37. package/completions.ts +0 -156
  38. package/diagnostic-codes.ts +0 -43
  39. package/diagnostics.ts +0 -55
  40. package/dist/DestinationHint.js +0 -4
  41. package/dist/DestinationHint.js.map +0 -1
  42. package/dist/ProductionSymbol.js +0 -4
  43. package/dist/ProductionSymbol.js.map +0 -1
  44. package/dist/completion-items.js +0 -228
  45. package/dist/completion-items.js.map +0 -1
  46. package/dist/completion-planner.js +0 -143
  47. package/dist/completion-planner.js.map +0 -1
  48. package/dist/completions.js +0 -101
  49. package/dist/completions.js.map +0 -1
  50. package/dist/diagnostic-codes.js +0 -41
  51. package/dist/diagnostic-codes.js.map +0 -1
  52. package/dist/diagnostics.js +0 -50
  53. package/dist/diagnostics.js.map +0 -1
  54. package/dist/document-context.js +0 -85
  55. package/dist/document-context.js.map +0 -1
  56. package/dist/event-analysis-source.js +0 -19
  57. package/dist/event-analysis-source.js.map +0 -1
  58. package/dist/event-context-catalog.js +0 -116
  59. package/dist/event-context-catalog.js.map +0 -1
  60. package/dist/event-context.js +0 -88
  61. package/dist/event-context.js.map +0 -1
  62. package/dist/file-imports.js +0 -58
  63. package/dist/file-imports.js.map +0 -1
  64. package/dist/file-references.js +0 -70
  65. package/dist/file-references.js.map +0 -1
  66. package/dist/hover-content.js +0 -98
  67. package/dist/hover-content.js.map +0 -1
  68. package/dist/hover.js +0 -15
  69. package/dist/hover.js.map +0 -1
  70. package/dist/index.js +0 -61
  71. package/dist/index.js.map +0 -1
  72. package/dist/inlay-hints.js +0 -15
  73. package/dist/inlay-hints.js.map +0 -1
  74. package/dist/inline-event-validation.js +0 -131
  75. package/dist/inline-event-validation.js.map +0 -1
  76. package/dist/keyword-docs.js +0 -148
  77. package/dist/keyword-docs.js.map +0 -1
  78. package/dist/language.js +0 -196
  79. package/dist/language.js.map +0 -1
  80. package/dist/production-destinations.js +0 -32
  81. package/dist/production-destinations.js.map +0 -1
  82. package/dist/sub-language-registry.js +0 -18
  83. package/dist/sub-language-registry.js.map +0 -1
  84. package/dist/sub-languages/capture/CompletionProvider.js +0 -332
  85. package/dist/sub-languages/capture/CompletionProvider.js.map +0 -1
  86. package/dist/sub-languages/capture/HoverProvider.js +0 -87
  87. package/dist/sub-languages/capture/HoverProvider.js.map +0 -1
  88. package/dist/sub-languages/capture/Validator.js +0 -72
  89. package/dist/sub-languages/capture/Validator.js.map +0 -1
  90. package/dist/sub-languages/capture/index.js +0 -58
  91. package/dist/sub-languages/capture/index.js.map +0 -1
  92. package/dist/sub-languages/capture/language.js +0 -160
  93. package/dist/sub-languages/capture/language.js.map +0 -1
  94. package/dist/sub-languages/cdl.js +0 -74
  95. package/dist/sub-languages/cdl.js.map +0 -1
  96. package/dist/sub-languages/pdl.js +0 -73
  97. package/dist/sub-languages/pdl.js.map +0 -1
  98. package/dist/sub-languages/projection/CodeActionProvider.js +0 -93
  99. package/dist/sub-languages/projection/CodeActionProvider.js.map +0 -1
  100. package/dist/sub-languages/projection/CompletionProvider.js +0 -595
  101. package/dist/sub-languages/projection/CompletionProvider.js.map +0 -1
  102. package/dist/sub-languages/projection/HoverProvider.js +0 -333
  103. package/dist/sub-languages/projection/HoverProvider.js.map +0 -1
  104. package/dist/sub-languages/projection/Validator.js +0 -388
  105. package/dist/sub-languages/projection/Validator.js.map +0 -1
  106. package/dist/sub-languages/projection/index.js +0 -160
  107. package/dist/sub-languages/projection/index.js.map +0 -1
  108. package/dist/sub-languages/projection/language.js +0 -171
  109. package/dist/sub-languages/projection/language.js.map +0 -1
  110. package/dist/symbols.js +0 -275
  111. package/dist/symbols.js.map +0 -1
  112. package/dist/themes/screenplay-dark.js +0 -30
  113. package/dist/themes/screenplay-dark.js.map +0 -1
  114. package/dist/themes/screenplay-light.js +0 -30
  115. package/dist/themes/screenplay-light.js.map +0 -1
  116. package/dist/tokens.js +0 -147
  117. package/dist/tokens.js.map +0 -1
  118. package/dist/validation.js +0 -248
  119. package/dist/validation.js.map +0 -1
  120. package/document-context.ts +0 -93
  121. package/event-analysis-source.ts +0 -18
  122. package/event-context-catalog.ts +0 -135
  123. package/event-context.ts +0 -119
  124. package/file-imports.ts +0 -70
  125. package/file-references.ts +0 -87
  126. package/for_documentContext/when_stripping_comments.ts +0 -32
  127. package/for_eventContext/when_resolving_generated_catalog_vectors.ts +0 -15
  128. package/for_eventGenerations/when_editing_event_generations.ts +0 -57
  129. package/for_fileImports/when_finding_file_imports.ts +0 -38
  130. package/for_fileReferences/when_recognizing_an_absolute_path/with_paths_of_every_shape.ts +0 -26
  131. package/for_fileReferences/when_scanning_a_document/inside_a_code_fence.ts +0 -26
  132. package/for_fileReferences/when_scanning_a_document/with_a_bare_file_keyword.ts +0 -19
  133. package/for_fileReferences/when_scanning_a_document/with_a_file_directive.ts +0 -30
  134. package/for_fileReferences/when_scanning_a_document/with_a_property_named_file.ts +0 -25
  135. package/for_fileReferences/when_scanning_a_document/with_a_trailing_comment.ts +0 -25
  136. package/for_fileReferences/when_scanning_a_document/with_directives_on_several_constructs.ts +0 -41
  137. package/for_importablePaths/when_listing_what_a_document_can_import.ts +0 -34
  138. package/for_inlineEvents/when_analyzing_many_inline_events.ts +0 -59
  139. package/for_inlineEvents/when_authoring_inline_events.ts +0 -149
  140. package/for_inlineEvents/when_completing_many_events.ts +0 -49
  141. package/for_inlineEvents/when_indexing_command_production_ownership.ts +0 -79
  142. package/for_planCompletions/when_completing_a_file_import.ts +0 -26
  143. package/for_planCompletions/when_completing_a_specification_query.ts +0 -24
  144. package/for_planCompletions/when_completing_a_specification_step.ts +0 -42
  145. package/for_planCompletions/when_completing_an_absent_read_model.ts +0 -14
  146. package/for_planCompletions/when_completing_reaction_reads.ts +0 -36
  147. package/for_projectionCompletionProvider/when_completing_an_event_context_path.ts +0 -102
  148. package/for_projectionHoverProvider/when_hovering_an_event_context_path.ts +0 -44
  149. package/for_projectionValidator/when_validating_a_projection_with_variants.ts +0 -128
  150. package/for_projectionValidator/when_validating_event_context_paths.ts +0 -31
  151. package/for_scanDocument/when_scanning_a_query/with_a_dotted_return_type.ts +0 -34
  152. package/for_scanDocument/when_scanning_aliased_reads.ts +0 -33
  153. package/for_scanDocument/when_scanning_many_commands.ts +0 -47
  154. package/for_tokens/when_highlighting_a_file_import.ts +0 -18
  155. package/for_tokens/when_highlighting_event_metadata.ts +0 -63
  156. package/for_tokens/when_highlighting_specification_steps.ts +0 -28
  157. package/for_validateLines/when_validating_a_document/with_a_problem_of_every_coded_kind.ts +0 -77
  158. package/for_validateLines/when_validating_a_document/with_an_unknown_policy.ts +0 -33
  159. package/for_validateLines/when_validating_a_file_placed_by_an_import/with_names_declared_in_other_files.ts +0 -43
  160. package/for_validateLines/when_validating_event_context_paths/in_a_projection.ts +0 -97
  161. package/for_validateLines/when_validating_file_imports/at_every_level.ts +0 -36
  162. package/for_validateLines/when_validating_production_destinations/with_an_available_identifier.ts +0 -120
  163. package/hover-content.ts +0 -117
  164. package/hover.ts +0 -23
  165. package/index.ts +0 -125
  166. package/inlay-hints.ts +0 -17
  167. package/inline-event-validation.ts +0 -115
  168. package/keyword-docs.ts +0 -152
  169. package/language.ts +0 -212
  170. package/production-destinations.ts +0 -32
  171. package/sub-language-registry.ts +0 -42
  172. package/sub-languages/capture/CompletionProvider.ts +0 -365
  173. package/sub-languages/capture/HoverProvider.ts +0 -99
  174. package/sub-languages/capture/Validator.ts +0 -97
  175. package/sub-languages/capture/index.ts +0 -72
  176. package/sub-languages/capture/language.ts +0 -176
  177. package/sub-languages/cdl.ts +0 -76
  178. package/sub-languages/pdl.ts +0 -75
  179. package/sub-languages/projection/CodeActionProvider.ts +0 -123
  180. package/sub-languages/projection/CompletionProvider.ts +0 -660
  181. package/sub-languages/projection/HoverProvider.ts +0 -377
  182. package/sub-languages/projection/Validator.ts +0 -441
  183. package/sub-languages/projection/index.ts +0 -223
  184. package/sub-languages/projection/language.ts +0 -193
  185. package/symbols.ts +0 -374
  186. package/themes/screenplay-dark.ts +0 -33
  187. package/themes/screenplay-light.ts +0 -33
  188. package/tokens.ts +0 -174
  189. package/validation.ts +0 -443
  190. package/vitest.setup.ts +0 -5
@@ -1,87 +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
- export class HoverProvider {
4
- provideHover(model, position) {
5
- const token = this.getTokenAtPosition(model, position);
6
- if (!token) {
7
- return null;
8
- }
9
- const keywordInfo = this.getKeywordInfo(token.word);
10
- if (keywordInfo) {
11
- return {
12
- contents: [{ value: keywordInfo }],
13
- range: token.range,
14
- };
15
- }
16
- const expressionInfo = this.getExpressionInfo(token.word);
17
- if (expressionInfo) {
18
- return {
19
- contents: [{ value: expressionInfo }],
20
- range: token.range,
21
- };
22
- }
23
- return null;
24
- }
25
- getTokenAtPosition(model, position) {
26
- const lineContent = model.getLineContent(position.lineNumber);
27
- const tokens = [...lineContent.matchAll(/\$context|\$previous|\$env|[a-zA-Z_][\w-]*/g)];
28
- const column = position.column - 1;
29
- for (const token of tokens) {
30
- const startIndex = token.index ?? 0;
31
- const endIndex = startIndex + token[0].length;
32
- if (column >= startIndex && column <= endIndex) {
33
- return {
34
- word: token[0],
35
- range: {
36
- startLineNumber: position.lineNumber,
37
- endLineNumber: position.lineNumber,
38
- startColumn: startIndex + 1,
39
- endColumn: endIndex + 1,
40
- },
41
- };
42
- }
43
- }
44
- return null;
45
- }
46
- // No `auth`/`bearer`/`url` — removed with the grammar. `api`, `route`, `path`, and
47
- // `topic` reflect the current source-property meanings (see grammar.md).
48
- getKeywordInfo(word) {
49
- const keywords = {
50
- capture: '**capture** *<Name>*\n\nDeclares a capture and gives it a unique name.',
51
- source: '**source** *<type>*\n\nDefines where the capture reads input from.',
52
- key: '**key** *<property>*\n\nSelects the property used to identify each captured item.',
53
- map: '**map**\n\nMaps source fields into a normalized shape for later append blocks.',
54
- append: '**append** *<EventName>*\n\nDeclares an event to append when the `when` clause matches.',
55
- when: '**when** *<condition>*\n\nSpecifies when an append block should fire.',
56
- nested: '**nested** *<property>*\n\nCreates a nested mapping scope for an object property.',
57
- children: '**children** *<collection>* **identified by** *<property>*\n\nCreates a scope for child collection items.',
58
- identified: '**identified**\n\nUsed with `children` to declare how child items are identified.',
59
- by: '**by**\n\nUsed in `children ... identified by`, `split ... by`, and similar clauses.',
60
- api: '**api**\n\nAs a source type (`source api`): polls an HTTP API for changes.\n\nAs a source property (`api <ServiceName>`): references a configured External Service by name for the base URL and authentication.',
61
- webhook: '**webhook**\n\nA source type for receiving webhook payloads.',
62
- message: '**message**\n\nA source type for consuming messages from a topic.',
63
- route: '**route** *<path>*\n\nOptional path appended to an API source\'s External Service base URL. If omitted, the base URL is used as-is.',
64
- poll: '**poll** *<interval>*\n\nSets the polling interval for an API source.',
65
- path: '**path** *<route>*\n\nThe inbound path a webhook source listens on.',
66
- topic: '**topic** *<name>*\n\nConfigures the topic for a message source.',
67
- from: '**from** *<value>*\n\nUsed in a `when` clause to match the previous value.',
68
- to: '**to** *<value>*\n\nUsed in a `when` clause to match the new value.',
69
- or: '**or**\n\nCombines multiple `when` conditions.',
70
- and: '**and**\n\nCombines multiple `when` conditions that must all match.',
71
- added: '**added**\n\nMatches when a child item was added.',
72
- removed: '**removed**\n\nMatches when a child item was removed.',
73
- translate: '**translate**\n\nMaps source values to new values inside a `map` block.',
74
- split: '**split** *<value>* **by** *<separator>*\n\nSplits a string into multiple mapped fields.',
75
- };
76
- return keywords[word] || null;
77
- }
78
- getExpressionInfo(word) {
79
- const expressions = {
80
- '$context': '**$context**\n\nCapture execution context.\n\n**Properties:**\n- `occurred` - When the current event should be considered to have occurred\n- `eventSourceId` - The resolved event source identifier',
81
- '$previous': '**$previous**\n\nThe previous state for the captured item. Use dot notation such as `$previous.status`.',
82
- '$env': '**$env**\n\nEnvironment variables. Use dot notation such as `$env.API_TOKEN`.',
83
- };
84
- return expressions[word] || null;
85
- }
86
- }
87
- //# sourceMappingURL=HoverProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HoverProvider.js","sourceRoot":"","sources":["../../../sub-languages/capture/HoverProvider.ts"],"names":[],"mappings":"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"}
@@ -1,72 +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
- // Structural rules only, unaffected by the source-property grammar changes — the
4
- // grammar's own syntax (see grammar.md) is what the tokenizer enforces; these are
5
- // the compiler's semantic constraints on top of it. Takes plain lines rather than
6
- // a Monaco model so it stays usable outside an editor, matching ../../validation.ts.
7
- export class Validator {
8
- validate(lines) {
9
- const issues = [];
10
- let firstNonEmptyLineIndex = -1;
11
- let firstLine = '';
12
- for (let index = 0; index < lines.length; index++) {
13
- const trimmed = lines[index].trim();
14
- if (trimmed && !trimmed.startsWith('#')) {
15
- firstNonEmptyLineIndex = index;
16
- firstLine = trimmed;
17
- break;
18
- }
19
- }
20
- if (!firstLine) {
21
- return issues;
22
- }
23
- const captureMatch = firstLine.match(/^capture\s+([\w.]+)\s*$/);
24
- if (!captureMatch) {
25
- issues.push(this.error(firstNonEmptyLineIndex, 1, firstLine.length + 1, 'Capture definition must start with "capture <Name>"'));
26
- return issues;
27
- }
28
- const meaningfulLines = lines
29
- .map((line, index) => ({
30
- line,
31
- trimmed: line.trim(),
32
- lineNumber: index,
33
- indent: line.search(/\S/),
34
- }))
35
- .filter((entry) => entry.trimmed && !entry.trimmed.startsWith('#'));
36
- const hasSource = meaningfulLines.some((entry) => entry.trimmed.startsWith('source '));
37
- if (!hasSource) {
38
- issues.push(this.error(firstNonEmptyLineIndex, 1, firstLine.length + 1, 'Capture definition must include a "source" block'));
39
- }
40
- const hasKey = meaningfulLines.some((entry) => entry.trimmed.startsWith('key '));
41
- if (!hasKey) {
42
- issues.push(this.error(firstNonEmptyLineIndex, 1, firstLine.length + 1, 'Capture definition must include a "key" declaration'));
43
- }
44
- for (let index = 0; index < meaningfulLines.length; index++) {
45
- const current = meaningfulLines[index];
46
- if (!current.trimmed.startsWith('append ')) {
47
- continue;
48
- }
49
- let hasWhenClause = false;
50
- for (let next = index + 1; next < meaningfulLines.length; next++) {
51
- const candidate = meaningfulLines[next];
52
- if (candidate.indent <= current.indent) {
53
- break;
54
- }
55
- if (candidate.trimmed.startsWith('when ')) {
56
- hasWhenClause = true;
57
- break;
58
- }
59
- }
60
- if (!hasWhenClause) {
61
- const eventName = current.trimmed.substring('append '.length).trim() || 'unnamed append block';
62
- const startColumn = current.line.indexOf(eventName) + 1;
63
- issues.push(this.error(current.lineNumber, startColumn > 0 ? startColumn : 1, startColumn > 0 ? startColumn + eventName.length : current.line.length + 1, `Append block '${eventName}' must include a "when" clause`));
64
- }
65
- }
66
- return issues;
67
- }
68
- error(line, startColumn, endColumn, message) {
69
- return { severity: 'error', line, startColumn, endColumn, message };
70
- }
71
- }
72
- //# sourceMappingURL=Validator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Validator.js","sourceRoot":"","sources":["../../../sub-languages/capture/Validator.ts"],"names":[],"mappings":"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"}
@@ -1,58 +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 { languageConfiguration, languageId, monarchLanguage } from './language';
4
- import { CompletionProvider } from './CompletionProvider';
5
- import { HoverProvider } from './HoverProvider';
6
- import { Validator } from './Validator';
7
- const markerOwner = 'cdl-validator';
8
- // Keyed by Monaco instance rather than a single boolean — mirrors the composite
9
- // language's own registration guard (../../index.ts) and lets a second register()
10
- // call for the same instance hand back the existing disposer instead of doubling
11
- // up the completion/hover providers.
12
- const disposersByMonaco = new Map();
13
- function toMarkers(monaco, validator, model) {
14
- return validator.validate(model.getLinesContent()).map((issue) => ({
15
- severity: issue.severity === 'error' ? monaco.MarkerSeverity.Error : monaco.MarkerSeverity.Warning,
16
- message: issue.message,
17
- startLineNumber: issue.line + 1,
18
- startColumn: issue.startColumn,
19
- endLineNumber: issue.line + 1,
20
- endColumn: issue.endColumn,
21
- }));
22
- }
23
- export function registerCaptureLanguage(monaco) {
24
- const existing = disposersByMonaco.get(monaco);
25
- if (existing) {
26
- return { dispose: existing };
27
- }
28
- monaco.languages.register({ id: languageId });
29
- monaco.languages.setLanguageConfiguration(languageId, languageConfiguration);
30
- monaco.languages.setMonarchTokensProvider(languageId, monarchLanguage);
31
- const validator = new Validator();
32
- const disposables = [];
33
- disposables.push(monaco.languages.registerCompletionItemProvider(languageId, new CompletionProvider()));
34
- disposables.push(monaco.languages.registerHoverProvider(languageId, new HoverProvider()));
35
- const validateModel = (model) => {
36
- if (model.isDisposed() || model.getLanguageId() !== languageId) {
37
- return;
38
- }
39
- monaco.editor.setModelMarkers(model, markerOwner, toMarkers(monaco, validator, model));
40
- };
41
- disposables.push(monaco.editor.onDidCreateModel((model) => {
42
- if (model.getLanguageId() !== languageId) {
43
- return;
44
- }
45
- validateModel(model);
46
- disposables.push(model.onDidChangeContent(() => validateModel(model)));
47
- }));
48
- monaco.editor.getModels().forEach((model) => validateModel(model));
49
- const dispose = () => {
50
- disposables.forEach((disposable) => disposable.dispose());
51
- disposables.length = 0;
52
- disposersByMonaco.delete(monaco);
53
- };
54
- disposersByMonaco.set(monaco, dispose);
55
- return { dispose };
56
- }
57
- export { languageId } from './language';
58
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../sub-languages/capture/index.ts"],"names":[],"mappings":"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"}
@@ -1,160 +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
- // Capture Declaration Language (CDL) — Chronicle's DSL for declaring change-data-capture
4
- // rules, registered here as its own standalone top-level Monaco language. This is distinct
5
- // from the lightweight CDL sub-language embedded inside a `.play` document's `capture`
6
- // blocks (../cdl.ts) — this module owns its own language id, tokenizer, and providers.
7
- export const languageId = 'cdl';
8
- // `route`/`poll` are API source properties; `path` is the webhook inbound path; `topic`
9
- // is the message source subject. There is no `auth`/`bearer`/`url` — an API source
10
- // references a named External Service (`api <ServiceName>`) for base URL and auth, and
11
- // a webhook source's authentication is configured on the source builder, not in CDL text.
12
- const KEYWORDS = [
13
- 'capture',
14
- 'source',
15
- 'key',
16
- 'map',
17
- 'append',
18
- 'when',
19
- 'nested',
20
- 'children',
21
- 'identified',
22
- 'by',
23
- 'api',
24
- 'webhook',
25
- 'message',
26
- 'route',
27
- 'poll',
28
- 'path',
29
- 'topic',
30
- 'from',
31
- 'to',
32
- 'or',
33
- 'and',
34
- 'added',
35
- 'removed',
36
- 'translate',
37
- 'split',
38
- ];
39
- const BUILTINS = [
40
- '$context',
41
- '$previous',
42
- '$env',
43
- ];
44
- const OPERATORS = ['=', '=>', '.'];
45
- export const languageConfiguration = {
46
- comments: {
47
- lineComment: '#',
48
- },
49
- brackets: [
50
- ['{', '}'],
51
- ['[', ']'],
52
- ['(', ')'],
53
- ],
54
- autoClosingPairs: [
55
- { open: '{', close: '}' },
56
- { open: '[', close: ']' },
57
- { open: '(', close: ')' },
58
- { open: '"', close: '"' },
59
- { open: "'", close: "'" },
60
- { open: '`', close: '`' },
61
- ],
62
- surroundingPairs: [
63
- { open: '{', close: '}' },
64
- { open: '[', close: ']' },
65
- { open: '(', close: ')' },
66
- { open: '"', close: '"' },
67
- { open: "'", close: "'" },
68
- { open: '`', close: '`' },
69
- ],
70
- indentationRules: {
71
- increaseIndentPattern: /^.*(\bcapture\b\s+\S+|\bsource\b(?:\s+\w+)?|\bmap\b|\bappend\b\s+\S+|\bnested\b\s+\S+|\bchildren\b\s+\S+.*|\btranslate\b|\bsplit\b.*)\s*$/,
72
- decreaseIndentPattern: /^.*\}.*$/,
73
- },
74
- folding: {
75
- offSide: true,
76
- markers: {
77
- start: /^\s*(capture|source|map|append|nested|children|translate|split)/,
78
- end: /^\s*$/,
79
- },
80
- },
81
- wordPattern: /[$]?[a-zA-Z_][\w$-]*/,
82
- };
83
- export const monarchLanguage = {
84
- defaultToken: '',
85
- tokenPostfix: '.cdl',
86
- keywords: KEYWORDS,
87
- builtins: BUILTINS,
88
- operators: OPERATORS,
89
- symbols: /[=><!~?:&|+\-*/^%]+/,
90
- escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
91
- tokenizer: {
92
- root: [
93
- { include: '@whitespace' },
94
- [/`/, { token: 'string.template', next: '@templateString' }],
95
- [/\$\.(?:[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*)?/, 'variable'],
96
- [/\$previous(?:\.[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*)?/, 'variable.predefined'],
97
- [/\$context(?:\.(?:occurred|eventSourceId))?/, 'variable.predefined'],
98
- [/\$env(?:\.[A-Z_][A-Z0-9_]*)?/, 'variable.predefined'],
99
- [/@[a-zA-Z_$][\w$]*/, 'identifier.escape'],
100
- [
101
- /[A-Z][a-zA-Z_$][\w$]*/,
102
- {
103
- cases: {
104
- '@keywords': 'invalid',
105
- '@default': 'identifier',
106
- },
107
- },
108
- ],
109
- [
110
- /[a-z_$][\w$]*/,
111
- {
112
- cases: {
113
- '@keywords': 'keyword',
114
- '@builtins': 'variable.predefined',
115
- '@default': 'identifier',
116
- },
117
- },
118
- ],
119
- [/[{}()[\]]/, '@brackets'],
120
- [/=>/, 'operator.arrow'],
121
- [
122
- /@symbols/,
123
- {
124
- cases: {
125
- '@operators': 'operator',
126
- '@default': '',
127
- },
128
- },
129
- ],
130
- [/\d*\.\d+([eE][-+]?\d+)?/, 'number.float'],
131
- [/0[xX][0-9a-fA-F]+/, 'number.hex'],
132
- [/\d+/, 'number'],
133
- [/[;,.]/, 'delimiter'],
134
- [/"([^"\\]|\\.)*$/, 'string.invalid'],
135
- [/"/, { token: 'string.quote', next: '@string' }],
136
- ],
137
- whitespace: [
138
- [/[ \t\r\n]+/, ''],
139
- [/#.*$/, 'comment'],
140
- ],
141
- templateString: [
142
- [/\$\{/, { token: 'delimiter.bracket', next: '@templateExpression' }],
143
- [/[^\\`$]+/, 'string.template'],
144
- [/@escapes/, 'string.template.escape'],
145
- [/\\./, 'string.template.escape.invalid'],
146
- [/`/, { token: 'string.template', next: '@pop' }],
147
- ],
148
- templateExpression: [
149
- [/\}/, { token: 'delimiter.bracket', next: '@pop' }],
150
- { include: '@root' },
151
- ],
152
- string: [
153
- [/[^\\"]+/, 'string'],
154
- [/@escapes/, 'string.escape'],
155
- [/\\./, 'string.escape.invalid'],
156
- [/"/, { token: 'string.quote', next: '@pop' }],
157
- ],
158
- },
159
- };
160
- //# sourceMappingURL=language.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"language.js","sourceRoot":"","sources":["../../../sub-languages/capture/language.ts"],"names":[],"mappings":"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"}
@@ -1,74 +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
- // Change Data Capture Language (CDL) — embedded inside `capture` blocks. This is the
4
- // lightweight definition mixed into the composite `.play` tokenizer; the full standalone
5
- // CDL language (its own tokenizer, context-aware completions, hover, and validation) lives
6
- // in `./capture` and is what `@cratis/screenplay-language/capture` exposes to consumers.
7
- export const cdl = {
8
- tokens: [
9
- [
10
- /\b(?:source|api|route|poll|path|topic|key|map|translate|split|append|tag|when|children|nested|identified|by|from|to|and|or|added|removed)\b/,
11
- 'keyword',
12
- ],
13
- ],
14
- completions: [
15
- {
16
- label: 'source',
17
- insertText: 'source ${1:api}',
18
- documentation: 'Declares where the captured data comes from.',
19
- },
20
- {
21
- label: 'key',
22
- insertText: 'key ${1:property}',
23
- documentation: 'Declares which source property identifies an instance.',
24
- },
25
- {
26
- label: 'map',
27
- insertText: 'map\n ${1:property} = ${2:source}',
28
- documentation: 'Maps and translates source values before events are appended.',
29
- },
30
- {
31
- label: 'append',
32
- insertText: 'append ${1:EventType}\n when ${2:property}',
33
- documentation: 'Appends an event when the source data changes.',
34
- },
35
- {
36
- label: 'translate',
37
- insertText: 'translate\n "${1:source}" => ${2:target}',
38
- documentation: 'Translates source values into Screenplay values.',
39
- },
40
- {
41
- label: 'children',
42
- insertText: 'children ${1:collection} identified by ${2:key}',
43
- documentation: 'Captures changes in a child collection of the source data.',
44
- },
45
- {
46
- label: 'when added',
47
- insertText: 'when added',
48
- documentation: 'Appends the event when a new item appears in the source.',
49
- },
50
- {
51
- label: 'when removed',
52
- insertText: 'when removed',
53
- documentation: 'Appends the event when an item disappears from the source.',
54
- },
55
- ],
56
- hovers: {
57
- source: 'CDL — declares where the captured data comes from.',
58
- api: 'CDL — as a source type, polls an HTTP API; as a source property (`api <ServiceName>`), references a named External Service for the base URL and authentication.',
59
- route: 'CDL — optional path appended to an API source\'s External Service base URL.',
60
- poll: 'CDL — the polling interval for an API source, e.g. 5m.',
61
- path: 'CDL — the inbound path a webhook source listens on.',
62
- topic: 'CDL — the topic a message source subscribes to.',
63
- key: 'CDL — declares which source property identifies an instance.',
64
- map: 'CDL — maps and translates source values before events are appended.',
65
- translate: 'CDL — translates source values into Screenplay values.',
66
- append: 'CDL — appends an event when the source data changes.',
67
- when: 'CDL — the change condition: a property change, added, or removed.',
68
- added: 'CDL — matches items that appear in the source.',
69
- removed: 'CDL — matches items that disappear from the source.',
70
- children: 'CDL — captures changes in a child collection of the source data.',
71
- identified: 'CDL — introduces the identifying key of a child collection.',
72
- },
73
- };
74
- //# sourceMappingURL=cdl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cdl.js","sourceRoot":"","sources":["../../sub-languages/cdl.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAIrG,qFAAqF;AACrF,yFAAyF;AACzF,2FAA2F;AAC3F,yFAAyF;AACzF,MAAM,CAAC,MAAM,GAAG,GAA0B;IACtC,MAAM,EAAE;QACJ;YACI,6IAA6I;YAC7I,SAAS;SACZ;KACJ;IACD,WAAW,EAAE;QACT;YACI,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,iBAAiB;YAC7B,aAAa,EAAE,8CAA8C;SAChE;QACD;YACI,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,mBAAmB;YAC/B,aAAa,EAAE,wDAAwD;SAC1E;QACD;YACI,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,sCAAsC;YAClD,aAAa,EAAE,+DAA+D;SACjF;QACD;YACI,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,+CAA+C;YAC3D,aAAa,EAAE,gDAAgD;SAClE;QACD;YACI,KAAK,EAAE,WAAW;YAClB,UAAU,EAAE,6CAA6C;YACzD,aAAa,EAAE,kDAAkD;SACpE;QACD;YACI,KAAK,EAAE,UAAU;YACjB,UAAU,EAAE,iDAAiD;YAC7D,aAAa,EAAE,4DAA4D;SAC9E;QACD;YACI,KAAK,EAAE,YAAY;YACnB,UAAU,EAAE,YAAY;YACxB,aAAa,EAAE,0DAA0D;SAC5E;QACD;YACI,KAAK,EAAE,cAAc;YACrB,UAAU,EAAE,cAAc;YAC1B,aAAa,EAAE,4DAA4D;SAC9E;KACJ;IACD,MAAM,EAAE;QACJ,MAAM,EAAE,oDAAoD;QAC5D,GAAG,EAAE,iKAAiK;QACtK,KAAK,EAAE,6EAA6E;QACpF,IAAI,EAAE,wDAAwD;QAC9D,IAAI,EAAE,qDAAqD;QAC3D,KAAK,EAAE,iDAAiD;QACxD,GAAG,EAAE,8DAA8D;QACnE,GAAG,EAAE,qEAAqE;QAC1E,SAAS,EAAE,wDAAwD;QACnE,MAAM,EAAE,sDAAsD;QAC9D,IAAI,EAAE,mEAAmE;QACzE,KAAK,EAAE,gDAAgD;QACvD,OAAO,EAAE,qDAAqD;QAC9D,QAAQ,EAAE,kEAAkE;QAC5E,UAAU,EAAE,6DAA6D;KAC5E;CACJ,CAAC"}
@@ -1,73 +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
- // Projection Declaration Language (PDL) — embedded inside `projection` blocks.
4
- // See https://www.cratis.io/chronicle/projections/projection-declaration-language/grammar/
5
- export const pdl = {
6
- tokens: [
7
- [
8
- /\b(?:from|every|all|nested|join|children|identified|by|key|parent|with|remove|via|clear|on|sequence|automap|no|exclude|literal|set|increment|decrement|add|subtract|count)\b/,
9
- 'keyword',
10
- ],
11
- ],
12
- completions: [
13
- {
14
- label: 'key',
15
- insertText: 'key ${1:property}',
16
- documentation: 'Declares which property identifies the read model instance.',
17
- },
18
- {
19
- label: 'from',
20
- insertText: 'from ${1:EventType}',
21
- documentation: 'Maps properties from an event onto the read model.',
22
- },
23
- {
24
- label: 'join',
25
- insertText: 'join ${1:property} on ${2:key}',
26
- documentation: 'Joins related state onto the read model by a key property.',
27
- },
28
- {
29
- label: 'children',
30
- insertText: 'children ${1:collection} identified by ${2:key}',
31
- documentation: 'Projects events into a child collection on the read model.',
32
- },
33
- {
34
- label: 'remove with',
35
- insertText: 'remove with ${1:EventType}',
36
- documentation: 'Removes the read model instance when the event occurs.',
37
- },
38
- {
39
- label: 'parent',
40
- insertText: 'parent ${1:property}',
41
- documentation: 'Declares the property that identifies the parent of a child.',
42
- },
43
- {
44
- label: 'clear',
45
- insertText: 'clear ${1:property}',
46
- documentation: 'Removes the value a property holds when the event occurs.',
47
- },
48
- {
49
- label: 'increment',
50
- insertText: 'increment ${1:property}',
51
- documentation: 'Increments a numeric property when the event occurs.',
52
- },
53
- {
54
- label: 'decrement',
55
- insertText: 'decrement ${1:property}',
56
- documentation: 'Decrements a numeric property when the event occurs.',
57
- },
58
- ],
59
- hovers: {
60
- from: 'PDL — maps properties from an event onto the read model.',
61
- every: 'PDL — applies property mappings for every event type in the projection.',
62
- join: 'PDL — joins related state onto the read model by a key property.',
63
- children: 'PDL — projects events into a child collection on the read model.',
64
- identified: 'PDL — introduces the identifying key of a child collection.',
65
- key: 'PDL — declares which property identifies the read model instance.',
66
- parent: 'PDL — declares the property that identifies the parent of a child.',
67
- remove: 'PDL — removes the read model instance when an event occurs.',
68
- clear: 'PDL — clear <property> removes the value a property holds; clear with <EventType> nulls a nested object.',
69
- increment: 'PDL — increments a numeric property when the event occurs.',
70
- decrement: 'PDL — decrements a numeric property when the event occurs.',
71
- },
72
- };
73
- //# sourceMappingURL=pdl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pdl.js","sourceRoot":"","sources":["../../sub-languages/pdl.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAIrG,+EAA+E;AAC/E,2FAA2F;AAC3F,MAAM,CAAC,MAAM,GAAG,GAA0B;IACtC,MAAM,EAAE;QACJ;YACI,8KAA8K;YAC9K,SAAS;SACZ;KACJ;IACD,WAAW,EAAE;QACT;YACI,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,mBAAmB;YAC/B,aAAa,EAAE,6DAA6D;SAC/E;QACD;YACI,KAAK,EAAE,MAAM;YACb,UAAU,EAAE,qBAAqB;YACjC,aAAa,EAAE,oDAAoD;SACtE;QACD;YACI,KAAK,EAAE,MAAM;YACb,UAAU,EAAE,gCAAgC;YAC5C,aAAa,EAAE,4DAA4D;SAC9E;QACD;YACI,KAAK,EAAE,UAAU;YACjB,UAAU,EAAE,iDAAiD;YAC7D,aAAa,EAAE,4DAA4D;SAC9E;QACD;YACI,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,4BAA4B;YACxC,aAAa,EAAE,wDAAwD;SAC1E;QACD;YACI,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,sBAAsB;YAClC,aAAa,EAAE,8DAA8D;SAChF;QACD;YACI,KAAK,EAAE,OAAO;YACd,UAAU,EAAE,qBAAqB;YACjC,aAAa,EAAE,2DAA2D;SAC7E;QACD;YACI,KAAK,EAAE,WAAW;YAClB,UAAU,EAAE,yBAAyB;YACrC,aAAa,EAAE,sDAAsD;SACxE;QACD;YACI,KAAK,EAAE,WAAW;YAClB,UAAU,EAAE,yBAAyB;YACrC,aAAa,EAAE,sDAAsD;SACxE;KACJ;IACD,MAAM,EAAE;QACJ,IAAI,EAAE,0DAA0D;QAChE,KAAK,EAAE,yEAAyE;QAChF,IAAI,EAAE,kEAAkE;QACxE,QAAQ,EAAE,kEAAkE;QAC5E,UAAU,EAAE,6DAA6D;QACzE,GAAG,EAAE,mEAAmE;QACxE,MAAM,EAAE,oEAAoE;QAC5E,MAAM,EAAE,6DAA6D;QACrE,KAAK,EAAE,0GAA0G;QACjH,SAAS,EAAE,4DAA4D;QACvE,SAAS,EAAE,4DAA4D;KAC1E;CACJ,CAAC"}