diff options
author | Kristóf Marussy <kristof@marussy.com> | 2021-10-25 00:29:37 +0200 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2021-10-31 19:26:11 +0100 |
commit | dcbfeece5e559b60a615f0aa9b933b202d34bf8b (patch) | |
tree | afdacff7492284f5f8cc147c4b84e4ba5db259b3 /language-web/src/main/js/editor/xtextServiceResults.ts | |
parent | test(web): more websocket integration tests (diff) | |
download | refinery-dcbfeece5e559b60a615f0aa9b933b202d34bf8b.tar.gz refinery-dcbfeece5e559b60a615f0aa9b933b202d34bf8b.tar.zst refinery-dcbfeece5e559b60a615f0aa9b933b202d34bf8b.zip |
feat(web): add xtext websocket client
Diffstat (limited to 'language-web/src/main/js/editor/xtextServiceResults.ts')
-rw-r--r-- | language-web/src/main/js/editor/xtextServiceResults.ts | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/language-web/src/main/js/editor/xtextServiceResults.ts b/language-web/src/main/js/editor/xtextServiceResults.ts new file mode 100644 index 00000000..2a66566a --- /dev/null +++ b/language-web/src/main/js/editor/xtextServiceResults.ts | |||
@@ -0,0 +1,61 @@ | |||
1 | export interface IDocumentStateResult { | ||
2 | stateId: string; | ||
3 | } | ||
4 | |||
5 | export function isDocumentStateResult(result: unknown): result is IDocumentStateResult { | ||
6 | const documentStateResult = result as IDocumentStateResult; | ||
7 | return typeof documentStateResult.stateId === 'string'; | ||
8 | } | ||
9 | |||
10 | export const VALID_CONFLICTS = ['invalidStateId', 'canceled'] as const; | ||
11 | |||
12 | export type Conflict = typeof VALID_CONFLICTS[number]; | ||
13 | |||
14 | export interface IServiceConflictResult { | ||
15 | conflict: Conflict; | ||
16 | } | ||
17 | |||
18 | export function isServiceConflictResult(result: unknown): result is IServiceConflictResult { | ||
19 | const serviceConflictResult = result as IServiceConflictResult; | ||
20 | return typeof serviceConflictResult.conflict === 'string' | ||
21 | && VALID_CONFLICTS.includes(serviceConflictResult.conflict); | ||
22 | } | ||
23 | |||
24 | export const VALID_SEVERITIES = ['error', 'warning', 'info', 'ignore'] as const; | ||
25 | |||
26 | export type Severity = typeof VALID_SEVERITIES[number]; | ||
27 | |||
28 | export interface IIssue { | ||
29 | description: string; | ||
30 | |||
31 | severity: Severity; | ||
32 | |||
33 | line: number; | ||
34 | |||
35 | column: number; | ||
36 | |||
37 | offset: number; | ||
38 | |||
39 | length: number; | ||
40 | } | ||
41 | |||
42 | export function isIssue(value: unknown): value is IIssue { | ||
43 | const issue = value as IIssue; | ||
44 | return typeof issue.description === 'string' | ||
45 | && typeof issue.severity === 'string' | ||
46 | && VALID_SEVERITIES.includes(issue.severity) | ||
47 | && typeof issue.line === 'number' | ||
48 | && typeof issue.column === 'number' | ||
49 | && typeof issue.offset === 'number' | ||
50 | && typeof issue.length === 'number'; | ||
51 | } | ||
52 | |||
53 | export interface IValidationResult { | ||
54 | issues: IIssue[]; | ||
55 | } | ||
56 | |||
57 | export function isValidationResult(result: unknown): result is IValidationResult { | ||
58 | const validationResult = result as IValidationResult; | ||
59 | return Array.isArray(validationResult.issues) | ||
60 | && validationResult.issues.every(isIssue); | ||
61 | } | ||