@cratis/screenplay-language 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 (147) hide show
  1. package/README.md +52 -0
  2. package/completion-items.ts +128 -0
  3. package/completion-planner.ts +111 -0
  4. package/completions.ts +112 -0
  5. package/diagnostics.ts +52 -0
  6. package/dist/completion-items.d.ts +23 -0
  7. package/dist/completion-items.d.ts.map +1 -0
  8. package/dist/completion-items.js +105 -0
  9. package/dist/completion-items.js.map +1 -0
  10. package/dist/completion-planner.d.ts +25 -0
  11. package/dist/completion-planner.d.ts.map +1 -0
  12. package/dist/completion-planner.js +90 -0
  13. package/dist/completion-planner.js.map +1 -0
  14. package/dist/completions.d.ts +4 -0
  15. package/dist/completions.d.ts.map +1 -0
  16. package/dist/completions.js +78 -0
  17. package/dist/completions.js.map +1 -0
  18. package/dist/diagnostics.d.ts +5 -0
  19. package/dist/diagnostics.d.ts.map +1 -0
  20. package/dist/diagnostics.js +47 -0
  21. package/dist/diagnostics.js.map +1 -0
  22. package/dist/document-context.d.ts +5 -0
  23. package/dist/document-context.d.ts.map +1 -0
  24. package/dist/document-context.js +45 -0
  25. package/dist/document-context.js.map +1 -0
  26. package/dist/hover-content.d.ts +2 -0
  27. package/dist/hover-content.d.ts.map +1 -0
  28. package/dist/hover-content.js +64 -0
  29. package/dist/hover-content.js.map +1 -0
  30. package/dist/hover.d.ts +3 -0
  31. package/dist/hover.d.ts.map +1 -0
  32. package/dist/hover.js +15 -0
  33. package/dist/hover.js.map +1 -0
  34. package/dist/index.d.ts +23 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +54 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/keyword-docs.d.ts +4 -0
  39. package/dist/keyword-docs.d.ts.map +1 -0
  40. package/dist/keyword-docs.js +100 -0
  41. package/dist/keyword-docs.js.map +1 -0
  42. package/dist/language.d.ts +12 -0
  43. package/dist/language.d.ts.map +1 -0
  44. package/dist/language.js +117 -0
  45. package/dist/language.js.map +1 -0
  46. package/dist/sub-language-registry.d.ts +20 -0
  47. package/dist/sub-language-registry.d.ts.map +1 -0
  48. package/dist/sub-language-registry.js +18 -0
  49. package/dist/sub-language-registry.js.map +1 -0
  50. package/dist/sub-languages/capture/CompletionProvider.d.ts +32 -0
  51. package/dist/sub-languages/capture/CompletionProvider.d.ts.map +1 -0
  52. package/dist/sub-languages/capture/CompletionProvider.js +332 -0
  53. package/dist/sub-languages/capture/CompletionProvider.js.map +1 -0
  54. package/dist/sub-languages/capture/HoverProvider.d.ts +8 -0
  55. package/dist/sub-languages/capture/HoverProvider.d.ts.map +1 -0
  56. package/dist/sub-languages/capture/HoverProvider.js +87 -0
  57. package/dist/sub-languages/capture/HoverProvider.js.map +1 -0
  58. package/dist/sub-languages/capture/Validator.d.ts +6 -0
  59. package/dist/sub-languages/capture/Validator.d.ts.map +1 -0
  60. package/dist/sub-languages/capture/Validator.js +72 -0
  61. package/dist/sub-languages/capture/Validator.js.map +1 -0
  62. package/dist/sub-languages/capture/index.d.ts +6 -0
  63. package/dist/sub-languages/capture/index.d.ts.map +1 -0
  64. package/dist/sub-languages/capture/index.js +58 -0
  65. package/dist/sub-languages/capture/index.js.map +1 -0
  66. package/dist/sub-languages/capture/language.d.ts +6 -0
  67. package/dist/sub-languages/capture/language.d.ts.map +1 -0
  68. package/dist/sub-languages/capture/language.js +160 -0
  69. package/dist/sub-languages/capture/language.js.map +1 -0
  70. package/dist/sub-languages/cdl.d.ts +3 -0
  71. package/dist/sub-languages/cdl.d.ts.map +1 -0
  72. package/dist/sub-languages/cdl.js +74 -0
  73. package/dist/sub-languages/cdl.js.map +1 -0
  74. package/dist/sub-languages/pdl.d.ts +3 -0
  75. package/dist/sub-languages/pdl.d.ts.map +1 -0
  76. package/dist/sub-languages/pdl.js +67 -0
  77. package/dist/sub-languages/pdl.js.map +1 -0
  78. package/dist/sub-languages/projection/CodeActionProvider.d.ts +18 -0
  79. package/dist/sub-languages/projection/CodeActionProvider.d.ts.map +1 -0
  80. package/dist/sub-languages/projection/CodeActionProvider.js +93 -0
  81. package/dist/sub-languages/projection/CodeActionProvider.js.map +1 -0
  82. package/dist/sub-languages/projection/CompletionProvider.d.ts +41 -0
  83. package/dist/sub-languages/projection/CompletionProvider.d.ts.map +1 -0
  84. package/dist/sub-languages/projection/CompletionProvider.js +591 -0
  85. package/dist/sub-languages/projection/CompletionProvider.js.map +1 -0
  86. package/dist/sub-languages/projection/HoverProvider.d.ts +24 -0
  87. package/dist/sub-languages/projection/HoverProvider.d.ts.map +1 -0
  88. package/dist/sub-languages/projection/HoverProvider.js +298 -0
  89. package/dist/sub-languages/projection/HoverProvider.js.map +1 -0
  90. package/dist/sub-languages/projection/Validator.d.ts +22 -0
  91. package/dist/sub-languages/projection/Validator.d.ts.map +1 -0
  92. package/dist/sub-languages/projection/Validator.js +339 -0
  93. package/dist/sub-languages/projection/Validator.js.map +1 -0
  94. package/dist/sub-languages/projection/index.d.ts +49 -0
  95. package/dist/sub-languages/projection/index.d.ts.map +1 -0
  96. package/dist/sub-languages/projection/index.js +160 -0
  97. package/dist/sub-languages/projection/index.js.map +1 -0
  98. package/dist/sub-languages/projection/language.d.ts +5 -0
  99. package/dist/sub-languages/projection/language.d.ts.map +1 -0
  100. package/dist/sub-languages/projection/language.js +171 -0
  101. package/dist/sub-languages/projection/language.js.map +1 -0
  102. package/dist/symbols.d.ts +45 -0
  103. package/dist/symbols.d.ts.map +1 -0
  104. package/dist/symbols.js +100 -0
  105. package/dist/symbols.js.map +1 -0
  106. package/dist/themes/screenplay-dark.d.ts +4 -0
  107. package/dist/themes/screenplay-dark.d.ts.map +1 -0
  108. package/dist/themes/screenplay-dark.js +29 -0
  109. package/dist/themes/screenplay-dark.js.map +1 -0
  110. package/dist/themes/screenplay-light.d.ts +4 -0
  111. package/dist/themes/screenplay-light.d.ts.map +1 -0
  112. package/dist/themes/screenplay-light.js +29 -0
  113. package/dist/themes/screenplay-light.js.map +1 -0
  114. package/dist/tokens.d.ts +5 -0
  115. package/dist/tokens.d.ts.map +1 -0
  116. package/dist/tokens.js +121 -0
  117. package/dist/tokens.js.map +1 -0
  118. package/dist/validation.d.ts +10 -0
  119. package/dist/validation.d.ts.map +1 -0
  120. package/dist/validation.js +101 -0
  121. package/dist/validation.js.map +1 -0
  122. package/document-context.ts +51 -0
  123. package/hover-content.ts +76 -0
  124. package/hover.ts +23 -0
  125. package/index.ts +98 -0
  126. package/keyword-docs.ts +102 -0
  127. package/language.ts +130 -0
  128. package/package.json +44 -0
  129. package/sub-language-registry.ts +42 -0
  130. package/sub-languages/capture/CompletionProvider.ts +365 -0
  131. package/sub-languages/capture/HoverProvider.ts +99 -0
  132. package/sub-languages/capture/Validator.ts +97 -0
  133. package/sub-languages/capture/index.ts +72 -0
  134. package/sub-languages/capture/language.ts +176 -0
  135. package/sub-languages/cdl.ts +76 -0
  136. package/sub-languages/pdl.ts +69 -0
  137. package/sub-languages/projection/CodeActionProvider.ts +123 -0
  138. package/sub-languages/projection/CompletionProvider.ts +653 -0
  139. package/sub-languages/projection/HoverProvider.ts +338 -0
  140. package/sub-languages/projection/Validator.ts +387 -0
  141. package/sub-languages/projection/index.ts +223 -0
  142. package/sub-languages/projection/language.ts +193 -0
  143. package/symbols.ts +161 -0
  144. package/themes/screenplay-dark.ts +32 -0
  145. package/themes/screenplay-light.ts +32 -0
  146. package/tokens.ts +145 -0
  147. package/validation.ts +145 -0
@@ -0,0 +1,171 @@
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 const languageId = 'pdl';
4
+ // Keywords for the Projection Declaration Language
5
+ const KEYWORDS = [
6
+ 'projection',
7
+ 'sequence',
8
+ 'all',
9
+ 'every',
10
+ 'on',
11
+ 'from',
12
+ 'key',
13
+ 'parent',
14
+ 'join',
15
+ 'automap',
16
+ 'no',
17
+ 'children',
18
+ 'nested',
19
+ 'identified',
20
+ 'by',
21
+ 'add',
22
+ 'subtract',
23
+ 'remove',
24
+ 'via',
25
+ 'with',
26
+ 'default',
27
+ 'increment',
28
+ 'decrement',
29
+ 'count',
30
+ 'set',
31
+ 'unset',
32
+ 'clear',
33
+ 'events',
34
+ 'id',
35
+ 'exclude',
36
+ ];
37
+ // Built-in expressions and functions
38
+ const BUILTINS = [
39
+ '$eventSourceId',
40
+ '$causedBy',
41
+ '$occurred',
42
+ '$namespace',
43
+ '$eventContext',
44
+ ];
45
+ // Operators
46
+ const OPERATORS = ['=', '+=', '-=', '=>', '.'];
47
+ export const configuration = {
48
+ comments: {
49
+ lineComment: '#',
50
+ },
51
+ brackets: [
52
+ ['{', '}'],
53
+ ['[', ']'],
54
+ ['(', ')'],
55
+ ],
56
+ autoClosingPairs: [
57
+ { open: '{', close: '}' },
58
+ { open: '[', close: ']' },
59
+ { open: '(', close: ')' },
60
+ { open: '"', close: '"' },
61
+ { open: "'", close: "'" },
62
+ { open: '`', close: '`' },
63
+ ],
64
+ surroundingPairs: [
65
+ { open: '{', close: '}' },
66
+ { open: '[', close: ']' },
67
+ { open: '(', close: ')' },
68
+ { open: '"', close: '"' },
69
+ { open: "'", close: "'" },
70
+ { open: '`', close: '`' },
71
+ ],
72
+ indentationRules: {
73
+ increaseIndentPattern: /^.*(:|\bon\b|\ball\b|\bevery\b|\bchildren\b|\bnested\b|\bparent\b)\s*$/,
74
+ decreaseIndentPattern: /^.*\}.*$/,
75
+ },
76
+ folding: {
77
+ offSide: true,
78
+ markers: {
79
+ start: /^\s*(projection|all|every|on|children|nested|parent)/,
80
+ end: /^\s*$/,
81
+ },
82
+ },
83
+ wordPattern: /@?[a-zA-Z_$][\w$-]*/,
84
+ };
85
+ export const monarchLanguage = {
86
+ defaultToken: '',
87
+ tokenPostfix: '.pdl',
88
+ keywords: KEYWORDS,
89
+ builtins: BUILTINS,
90
+ operators: OPERATORS,
91
+ // Symbols
92
+ symbols: /[=><!~?:&|+\-*/^%]+/,
93
+ escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
94
+ tokenizer: {
95
+ root: [
96
+ // Whitespace
97
+ { include: '@whitespace' },
98
+ // Template strings with ${...} interpolation
99
+ [/`/, { token: 'string.template', next: '@templateString' }],
100
+ // Escaped identifiers (@ prefix allows using keywords as identifiers)
101
+ [/@[a-zA-Z_$][\w$]*/, 'identifier.escape'],
102
+ // Check for uppercase keywords (error case - keywords must be lowercase)
103
+ [
104
+ /[A-Z][a-zA-Z_$][\w$]*/,
105
+ {
106
+ cases: {
107
+ '@keywords': 'invalid',
108
+ '@default': 'identifier',
109
+ },
110
+ },
111
+ ],
112
+ // Identifiers and keywords (lowercase only for keywords)
113
+ [
114
+ /[a-z_$][\w$]*/,
115
+ {
116
+ cases: {
117
+ '@keywords': 'keyword',
118
+ '@builtins': 'variable.predefined',
119
+ '@default': 'identifier',
120
+ },
121
+ },
122
+ ],
123
+ // Delimiters and operators
124
+ [/[{}()[\]]/, '@brackets'],
125
+ [/=>/, 'operator.arrow'],
126
+ [
127
+ /@symbols/,
128
+ {
129
+ cases: {
130
+ '@operators': 'operator',
131
+ '@default': '',
132
+ },
133
+ },
134
+ ],
135
+ // Numbers
136
+ [/\d*\.\d+([eE][-+]?\d+)?/, 'number.float'],
137
+ [/0[xX][0-9a-fA-F]+/, 'number.hex'],
138
+ [/\d+/, 'number'],
139
+ // Delimiter: after number because of .\d floats
140
+ [/[;,.]/, 'delimiter'],
141
+ // Strings
142
+ [/"([^"\\]|\\.)*$/, 'string.invalid'],
143
+ [/"/, { token: 'string.quote', next: '@string' }],
144
+ ],
145
+ whitespace: [
146
+ [/[ \t\r\n]+/, ''],
147
+ [/#.*$/, 'comment'],
148
+ ],
149
+ // Template string state
150
+ templateString: [
151
+ [/\$\{/, { token: 'delimiter.bracket', next: '@templateExpression' }],
152
+ [/[^\\`$]+/, 'string.template'],
153
+ [/@escapes/, 'string.template.escape'],
154
+ [/\\./, 'string.template.escape.invalid'],
155
+ [/`/, { token: 'string.template', next: '@pop' }],
156
+ ],
157
+ // Template expression inside ${}
158
+ templateExpression: [
159
+ [/\}/, { token: 'delimiter.bracket', next: '@pop' }],
160
+ { include: '@root' },
161
+ ],
162
+ // Regular string state
163
+ string: [
164
+ [/[^\\"]+/, 'string'],
165
+ [/@escapes/, 'string.escape'],
166
+ [/\\./, 'string.escape.invalid'],
167
+ [/"/, { token: 'string.quote', next: '@pop' }],
168
+ ],
169
+ },
170
+ };
171
+ //# sourceMappingURL=language.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language.js","sourceRoot":"","sources":["../../../sub-languages/projection/language.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export interface PropertySymbol {
2
+ name: string;
3
+ type: string;
4
+ }
5
+ export interface ConceptSymbol {
6
+ name: string;
7
+ primitive: string;
8
+ attributes: string[];
9
+ enumValues: string[];
10
+ line: number;
11
+ }
12
+ export interface PolicySymbol {
13
+ name: string;
14
+ requires: string[];
15
+ line: number;
16
+ }
17
+ export interface EventSymbol {
18
+ name: string;
19
+ properties: PropertySymbol[];
20
+ line: number;
21
+ }
22
+ export interface NamedSymbol {
23
+ name: string;
24
+ line: number;
25
+ }
26
+ export interface QuerySymbol extends NamedSymbol {
27
+ returnType: string;
28
+ }
29
+ export interface ImportSymbol {
30
+ qualifiedName: string;
31
+ shortName: string;
32
+ line: number;
33
+ }
34
+ export interface DocumentSymbols {
35
+ imports: ImportSymbol[];
36
+ concepts: ConceptSymbol[];
37
+ policies: PolicySymbol[];
38
+ events: EventSymbol[];
39
+ commands: NamedSymbol[];
40
+ queries: QuerySymbol[];
41
+ screens: NamedSymbol[];
42
+ }
43
+ export declare function scanDocument(lines: string[]): DocumentSymbols;
44
+ export declare function knownEventNames(symbols: DocumentSymbols): string[];
45
+ //# sourceMappingURL=symbols.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../symbols.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC5C,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,WAAW,EAAE,CAAC;CAC1B;AAoBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,eAAe,CAgF7D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,CAKlE"}
@@ -0,0 +1,100 @@
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 { fenceMap, indentOf } from './document-context';
4
+ const conceptPattern = /^concept\s+(\w+)\s*:\s*(\w+)((?:\s+@\w+)*)\s*$/;
5
+ const propertyPattern = /^\s*([a-z_]\w*)\s+([\w.]+(?:\[\])?\??)\s*$/;
6
+ function collectBody(lines, fences, start, indent) {
7
+ const body = [];
8
+ for (let index = start + 1; index < lines.length; index++) {
9
+ if (fences[index]) {
10
+ body.push(index);
11
+ continue;
12
+ }
13
+ const line = lines[index];
14
+ if (line.trim().length === 0)
15
+ continue;
16
+ if (indentOf(line) <= indent)
17
+ break;
18
+ body.push(index);
19
+ }
20
+ return body;
21
+ }
22
+ export function scanDocument(lines) {
23
+ const symbols = {
24
+ imports: [],
25
+ concepts: [],
26
+ policies: [],
27
+ events: [],
28
+ commands: [],
29
+ queries: [],
30
+ screens: [],
31
+ };
32
+ const fences = fenceMap(lines);
33
+ for (let index = 0; index < lines.length; index++) {
34
+ if (fences[index])
35
+ continue;
36
+ const line = lines[index];
37
+ const trimmed = line.trim();
38
+ const indent = indentOf(line);
39
+ const importMatch = trimmed.match(/^import\s+([\w.]+)\s*$/);
40
+ if (importMatch && indent === 0) {
41
+ const qualifiedName = importMatch[1];
42
+ const shortName = qualifiedName.split('.').pop() ?? qualifiedName;
43
+ symbols.imports.push({ qualifiedName, shortName, line: index });
44
+ continue;
45
+ }
46
+ const conceptMatch = trimmed.match(conceptPattern);
47
+ if (conceptMatch) {
48
+ const enumValues = conceptMatch[2] === 'Enum'
49
+ ? collectBody(lines, fences, index, indent).map((i) => lines[i].trim())
50
+ : [];
51
+ symbols.concepts.push({
52
+ name: conceptMatch[1],
53
+ primitive: conceptMatch[2],
54
+ attributes: conceptMatch[3].trim().split(/\s+/).filter(Boolean),
55
+ enumValues,
56
+ line: index,
57
+ });
58
+ continue;
59
+ }
60
+ const policyMatch = trimmed.match(/^policy\s+(\w+)\s*$/);
61
+ if (policyMatch) {
62
+ const requires = collectBody(lines, fences, index, indent)
63
+ .filter((i) => !fences[i])
64
+ .map((i) => lines[i].trim());
65
+ symbols.policies.push({ name: policyMatch[1], requires, line: index });
66
+ continue;
67
+ }
68
+ const eventMatch = trimmed.match(/^event\s+(\w+)\s*$/);
69
+ if (eventMatch) {
70
+ const properties = collectBody(lines, fences, index, indent)
71
+ .map((i) => lines[i].match(propertyPattern))
72
+ .filter((match) => match !== null)
73
+ .map((match) => ({ name: match[1], type: match[2] }));
74
+ symbols.events.push({ name: eventMatch[1], properties, line: index });
75
+ continue;
76
+ }
77
+ const commandMatch = trimmed.match(/^command\s+(\w+)\s*$/);
78
+ if (commandMatch) {
79
+ symbols.commands.push({ name: commandMatch[1], line: index });
80
+ continue;
81
+ }
82
+ const queryMatch = trimmed.match(/^query\s+(\w+)\s*=>\s*([\w[\]]+)\s*$/);
83
+ if (queryMatch) {
84
+ symbols.queries.push({ name: queryMatch[1], returnType: queryMatch[2], line: index });
85
+ continue;
86
+ }
87
+ const screenMatch = trimmed.match(/^screen\s+(\w+)\s*$/);
88
+ if (screenMatch) {
89
+ symbols.screens.push({ name: screenMatch[1], line: index });
90
+ }
91
+ }
92
+ return symbols;
93
+ }
94
+ export function knownEventNames(symbols) {
95
+ return [
96
+ ...symbols.events.map((event) => event.name),
97
+ ...symbols.imports.map((imported) => imported.shortName),
98
+ ];
99
+ }
100
+ //# sourceMappingURL=symbols.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbols.js","sourceRoot":"","sources":["../symbols.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { editor } from 'monaco-editor';
2
+ export declare const screenplayDarkThemeName = "screenplay-dark";
3
+ export declare const screenplayDark: editor.IStandaloneThemeData;
4
+ //# sourceMappingURL=screenplay-dark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenplay-dark.d.ts","sourceRoot":"","sources":["../../themes/screenplay-dark.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,eAAO,MAAM,uBAAuB,oBAAoB,CAAC;AAEzD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,oBAwBnC,CAAC"}
@@ -0,0 +1,29 @@
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 const screenplayDarkThemeName = 'screenplay-dark';
4
+ export const screenplayDark = {
5
+ base: 'vs-dark',
6
+ inherit: true,
7
+ rules: [
8
+ { token: 'keyword.play', foreground: 'C586C0' },
9
+ { token: 'keyword.tag.play', foreground: '569CD6', fontStyle: 'italic' },
10
+ { token: 'keyword.type.play', foreground: '4FC1FF', fontStyle: 'bold' },
11
+ { token: 'type.play', foreground: '4EC9B0' },
12
+ { token: 'type.identifier.play', foreground: '4EC9B0' },
13
+ { token: 'identifier.play', foreground: '9CDCFE' },
14
+ { token: 'annotation.play', foreground: 'DCDCAA' },
15
+ { token: 'variable.predefined.play', foreground: 'D7BA7D' },
16
+ { token: 'string.play', foreground: 'CE9178' },
17
+ { token: 'string.invalid.play', foreground: 'F44747' },
18
+ { token: 'string.quote.play', foreground: '6A9955' },
19
+ { token: 'number.play', foreground: 'B5CEA8' },
20
+ { token: 'number.float.play', foreground: 'B5CEA8' },
21
+ { token: 'comment.play', foreground: '6A9955', fontStyle: 'italic' },
22
+ { token: 'operator.play', foreground: 'D4D4D4' },
23
+ { token: 'delimiter.play', foreground: 'CCCCCC' },
24
+ ],
25
+ colors: {
26
+ 'editor.background': '#1E1E1E',
27
+ },
28
+ };
29
+ //# sourceMappingURL=screenplay-dark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenplay-dark.js","sourceRoot":"","sources":["../../themes/screenplay-dark.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAIrG,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AAEzD,MAAM,CAAC,MAAM,cAAc,GAAgC;IACvD,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,IAAI;IACb,KAAK,EAAE;QACH,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE;QAC/C,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;QACxE,EAAE,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE;QACvE,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE;QAC5C,EAAE,KAAK,EAAE,sBAAsB,EAAE,UAAU,EAAE,QAAQ,EAAE;QACvD,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE;QAClD,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE;QAClD,EAAE,KAAK,EAAE,0BAA0B,EAAE,UAAU,EAAE,QAAQ,EAAE;QAC3D,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE;QAC9C,EAAE,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,QAAQ,EAAE;QACtD,EAAE,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,QAAQ,EAAE;QACpD,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE;QAC9C,EAAE,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,QAAQ,EAAE;QACpD,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;QACpE,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE;QAChD,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE;KACpD;IACD,MAAM,EAAE;QACJ,mBAAmB,EAAE,SAAS;KACjC;CACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { editor } from 'monaco-editor';
2
+ export declare const screenplayLightThemeName = "screenplay-light";
3
+ export declare const screenplayLight: editor.IStandaloneThemeData;
4
+ //# sourceMappingURL=screenplay-light.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenplay-light.d.ts","sourceRoot":"","sources":["../../themes/screenplay-light.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAE3D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,oBAwBpC,CAAC"}
@@ -0,0 +1,29 @@
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 const screenplayLightThemeName = 'screenplay-light';
4
+ export const screenplayLight = {
5
+ base: 'vs',
6
+ inherit: true,
7
+ rules: [
8
+ { token: 'keyword.play', foreground: 'AF00DB' },
9
+ { token: 'keyword.tag.play', foreground: '0000FF', fontStyle: 'italic' },
10
+ { token: 'keyword.type.play', foreground: '0070C1', fontStyle: 'bold' },
11
+ { token: 'type.play', foreground: '267F99' },
12
+ { token: 'type.identifier.play', foreground: '267F99' },
13
+ { token: 'identifier.play', foreground: '001080' },
14
+ { token: 'annotation.play', foreground: '795E26' },
15
+ { token: 'variable.predefined.play', foreground: 'B45309' },
16
+ { token: 'string.play', foreground: 'A31515' },
17
+ { token: 'string.invalid.play', foreground: 'CD3131' },
18
+ { token: 'string.quote.play', foreground: '008000' },
19
+ { token: 'number.play', foreground: '098658' },
20
+ { token: 'number.float.play', foreground: '098658' },
21
+ { token: 'comment.play', foreground: '008000', fontStyle: 'italic' },
22
+ { token: 'operator.play', foreground: '000000' },
23
+ { token: 'delimiter.play', foreground: '000000' },
24
+ ],
25
+ colors: {
26
+ 'editor.background': '#FFFFFF',
27
+ },
28
+ };
29
+ //# sourceMappingURL=screenplay-light.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenplay-light.js","sourceRoot":"","sources":["../../themes/screenplay-light.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAIrG,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAE3D,MAAM,CAAC,MAAM,eAAe,GAAgC;IACxD,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;IACb,KAAK,EAAE;QACH,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE;QAC/C,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;QACxE,EAAE,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE;QACvE,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE;QAC5C,EAAE,KAAK,EAAE,sBAAsB,EAAE,UAAU,EAAE,QAAQ,EAAE;QACvD,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE;QAClD,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE;QAClD,EAAE,KAAK,EAAE,0BAA0B,EAAE,UAAU,EAAE,QAAQ,EAAE;QAC3D,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE;QAC9C,EAAE,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,QAAQ,EAAE;QACtD,EAAE,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,QAAQ,EAAE;QACpD,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE;QAC9C,EAAE,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,QAAQ,EAAE;QACpD,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;QACpE,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE;QAChD,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE;KACpD;IACD,MAAM,EAAE;QACJ,mBAAmB,EAAE,SAAS;KACjC;CACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { languages } from 'monaco-editor';
2
+ import { MonarchTokenRules, SubLanguage } from './sub-language-registry';
3
+ export declare const commonTokenRules: MonarchTokenRules;
4
+ export declare function createTokensProvider(subLanguages: SubLanguage[]): languages.IMonarchLanguage;
5
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../tokens.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAQ/C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAyBzE,eAAO,MAAM,gBAAgB,EAAE,iBAa9B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,gBAAgB,CA6F5F"}
package/dist/tokens.js ADDED
@@ -0,0 +1,121 @@
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 { clauseKeywords, codeBlockTags, constructKeywords, primitiveTypes, sliceTypes, } from './language';
4
+ // Maps a Screenplay inline code tag to the Monaco language id used for embedded highlighting.
5
+ const embeddedLanguages = {
6
+ csharp: 'csharp',
7
+ typescript: 'typescript',
8
+ react: 'typescript',
9
+ html: 'html',
10
+ };
11
+ function subLanguageState(keyword) {
12
+ return `subLanguage_${keyword}`;
13
+ }
14
+ // A construct keyword at the start of a line ends any indented sub-language block.
15
+ function subLanguageExitRule(subLanguages) {
16
+ const exitKeywords = [...constructKeywords, ...subLanguages.map((subLanguage) => subLanguage.keyword)];
17
+ return [
18
+ new RegExp(`^\\s*(?:${exitKeywords.join('|')})\\b`),
19
+ { token: '@rematch', next: '@pop' },
20
+ ];
21
+ }
22
+ // Shared across the composite `.play` tokenizer and every standalone sub-language tokenizer
23
+ // (comments, `$`-prefixed context variables, strings, numbers, operators, delimiters, whitespace).
24
+ export const commonTokenRules = [
25
+ [/\/\/.*$/, 'comment'],
26
+ [/\$(?:context|eventContext|eventSourceId|causedBy)(?:\.\w+)*/, 'variable.predefined'],
27
+ [/\$(?:env|secrets|strings)\.[\w.]+/, 'variable.predefined'],
28
+ [/\$\.[\w.]*/, 'variable.predefined'],
29
+ [/"(?:[^"\\]|\\.)*"/, 'string'],
30
+ [/"(?:[^"\\]|\\.)*$/, 'string.invalid'],
31
+ [/\d+(?:ms|s|m|h|d)\b/, 'number'],
32
+ [/-?\d+\.\d+/, 'number.float'],
33
+ [/-?\d+/, 'number'],
34
+ [/=>|==|!=|>=|<=|[><=:?]/, 'operator'],
35
+ [/[[\](),.]/, 'delimiter'],
36
+ [/\s+/, 'white'],
37
+ ];
38
+ export function createTokensProvider(subLanguages) {
39
+ const tokenizer = {
40
+ root: [
41
+ // Inline code block tags at end of line open an embedded code block.
42
+ ...codeBlockTags.map((tag) => [
43
+ new RegExp(`\\b${tag}\\b(?=\\s*$)`),
44
+ { token: 'keyword.tag', next: `@codeBlockPending.${embeddedLanguages[tag]}` },
45
+ ]),
46
+ // Sub-language constructs switch to the registered sub-language's token rules.
47
+ ...subLanguages.map((subLanguage) => [
48
+ new RegExp(`\\b${subLanguage.keyword}\\b`),
49
+ { token: 'keyword', next: `@${subLanguageState(subLanguage.keyword)}` },
50
+ ]),
51
+ // A bare description keyword at end of line opens a fenced plain-text block.
52
+ [/\bdescription\b(?=\s*$)/, { token: 'keyword', next: '@descriptionBlockPending' }],
53
+ [/\brow-click\b/, 'keyword'],
54
+ [/@\w+/, 'annotation'],
55
+ [
56
+ /[A-Z]\w*/,
57
+ {
58
+ cases: {
59
+ '@sliceTypes': 'keyword.type',
60
+ '@primitiveTypes': 'type',
61
+ '@default': 'type.identifier',
62
+ },
63
+ },
64
+ ],
65
+ [
66
+ /[a-z_]\w*/,
67
+ {
68
+ cases: {
69
+ '@keywords': 'keyword',
70
+ '@default': 'identifier',
71
+ },
72
+ },
73
+ ],
74
+ { include: '@common' },
75
+ ],
76
+ common: commonTokenRules,
77
+ // After a code tag, the only thing allowed before the opening fence is whitespace.
78
+ codeBlockPending: [
79
+ [
80
+ /^\s*```\s*$/,
81
+ { token: 'string.quote', switchTo: '@codeBlock.$S2', nextEmbedded: '$S2' },
82
+ ],
83
+ [/^\s*[^\s`].*$/, { token: '@rematch', next: '@pop' }],
84
+ [/\s+/, 'white'],
85
+ ],
86
+ codeBlock: [
87
+ [/^\s*```\s*$/, { token: 'string.quote', next: '@pop', nextEmbedded: '@pop' }],
88
+ [/[^`]+/, ''],
89
+ [/`/, ''],
90
+ ],
91
+ // After a bare description, the only thing allowed before the opening fence is whitespace.
92
+ descriptionBlockPending: [
93
+ [/^\s*```\s*$/, { token: 'string.quote', switchTo: '@descriptionBlock' }],
94
+ [/^\s*[^\s`].*$/, { token: '@rematch', next: '@pop' }],
95
+ [/\s+/, 'white'],
96
+ ],
97
+ descriptionBlock: [
98
+ [/^\s*```\s*$/, { token: 'string.quote', next: '@pop' }],
99
+ [/.+/, 'string'],
100
+ ],
101
+ };
102
+ for (const subLanguage of subLanguages) {
103
+ tokenizer[subLanguageState(subLanguage.keyword)] = [
104
+ subLanguageExitRule(subLanguages),
105
+ ...subLanguage.tokens,
106
+ { include: '@common' },
107
+ [/[A-Z]\w*/, 'type.identifier'],
108
+ [/[a-z_]\w*/, 'identifier'],
109
+ ];
110
+ }
111
+ return {
112
+ defaultToken: '',
113
+ tokenPostfix: '.play',
114
+ ignoreCase: false,
115
+ keywords: [...constructKeywords, ...clauseKeywords, ...codeBlockTags],
116
+ sliceTypes,
117
+ primitiveTypes,
118
+ tokenizer,
119
+ };
120
+ }
121
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../tokens.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAGrG,OAAO,EACH,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,UAAU,GACb,MAAM,YAAY,CAAC;AAGpB,8FAA8F;AAC9F,MAAM,iBAAiB,GAA2B;IAC9C,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,KAAK,EAAE,YAAY;IACnB,IAAI,EAAE,MAAM;CACf,CAAC;AAEF,SAAS,gBAAgB,CAAC,OAAe;IACrC,OAAO,eAAe,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,mFAAmF;AACnF,SAAS,mBAAmB,CAAC,YAA2B;IACpD,MAAM,YAAY,GAAG,CAAC,GAAG,iBAAiB,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IACvG,OAAO;QACH,IAAI,MAAM,CAAC,WAAW,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QACnD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE;KACtC,CAAC;AACN,CAAC;AAED,4FAA4F;AAC5F,mGAAmG;AACnG,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IAC/C,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,6DAA6D,EAAE,qBAAqB,CAAC;IACtF,CAAC,mCAAmC,EAAE,qBAAqB,CAAC;IAC5D,CAAC,YAAY,EAAE,qBAAqB,CAAC;IACrC,CAAC,mBAAmB,EAAE,QAAQ,CAAC;IAC/B,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;IACvC,CAAC,qBAAqB,EAAE,QAAQ,CAAC;IACjC,CAAC,YAAY,EAAE,cAAc,CAAC;IAC9B,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnB,CAAC,wBAAwB,EAAE,UAAU,CAAC;IACtC,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,KAAK,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,YAA2B;IAC5D,MAAM,SAAS,GAAsC;QACjD,IAAI,EAAE;YACF,qEAAqE;YACrE,GAAG,aAAa,CAAC,GAAG,CAChB,CAAC,GAAG,EAA6B,EAAE,CAAC;gBAChC,IAAI,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC;gBACnC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,qBAAqB,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE;aAChF,CACJ;YACD,+EAA+E;YAC/E,GAAG,YAAY,CAAC,GAAG,CACf,CAAC,WAAW,EAA6B,EAAE,CAAC;gBACxC,IAAI,MAAM,CAAC,MAAM,WAAW,CAAC,OAAO,KAAK,CAAC;gBAC1C,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;aAC1E,CACJ;YACD,6EAA6E;YAC7E,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC;YACnF,CAAC,eAAe,EAAE,SAAS,CAAC;YAC5B,CAAC,MAAM,EAAE,YAAY,CAAC;YACtB;gBACI,UAAU;gBACV;oBACI,KAAK,EAAE;wBACH,aAAa,EAAE,cAAc;wBAC7B,iBAAiB,EAAE,MAAM;wBACzB,UAAU,EAAE,iBAAiB;qBAChC;iBACJ;aACJ;YACD;gBACI,WAAW;gBACX;oBACI,KAAK,EAAE;wBACH,WAAW,EAAE,SAAS;wBACtB,UAAU,EAAE,YAAY;qBAC3B;iBACJ;aACJ;YACD,EAAE,OAAO,EAAE,SAAS,EAAE;SACzB;QAED,MAAM,EAAE,gBAAgB;QAExB,mFAAmF;QACnF,gBAAgB,EAAE;YACd;gBACI,aAAa;gBACb,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,EAAE;aAC7E;YACD,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACtD,CAAC,KAAK,EAAE,OAAO,CAAC;SACnB;QAED,SAAS,EAAE;YACP,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;YAC9E,CAAC,OAAO,EAAE,EAAE,CAAC;YACb,CAAC,GAAG,EAAE,EAAE,CAAC;SACZ;QAED,2FAA2F;QAC3F,uBAAuB,EAAE;YACrB,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;YACzE,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACtD,CAAC,KAAK,EAAE,OAAO,CAAC;SACnB;QAED,gBAAgB,EAAE;YACd,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACxD,CAAC,IAAI,EAAE,QAAQ,CAAC;SACnB;KACJ,CAAC;IAEF,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACrC,SAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG;YAC/C,mBAAmB,CAAC,YAAY,CAAC;YACjC,GAAG,WAAW,CAAC,MAAM;YACrB,EAAE,OAAO,EAAE,SAAS,EAAE;YACtB,CAAC,UAAU,EAAE,iBAAiB,CAAC;YAC/B,CAAC,WAAW,EAAE,YAAY,CAAC;SAC9B,CAAC;IACN,CAAC;IAED,OAAO;QACH,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,OAAO;QACrB,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,CAAC,GAAG,iBAAiB,EAAE,GAAG,cAAc,EAAE,GAAG,aAAa,CAAC;QACrE,UAAU;QACV,cAAc;QACd,SAAS;KACkB,CAAC;AACpC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export type ValidationSeverity = 'error' | 'warning';
2
+ export interface ValidationIssue {
3
+ line: number;
4
+ startColumn: number;
5
+ endColumn: number;
6
+ message: string;
7
+ severity: ValidationSeverity;
8
+ }
9
+ export declare function validateLines(lines: string[]): ValidationIssue[];
10
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../validation.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,kBAAkB,CAAC;CAChC;AAyBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAwGhE"}