@cratis/screenplay-language 1.6.3 → 1.7.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.
- package/completion-items.ts +45 -3
- package/completion-planner.ts +12 -1
- package/completions.ts +7 -0
- package/dist/completion-items.d.ts +4 -0
- package/dist/completion-items.d.ts.map +1 -1
- package/dist/completion-items.js +41 -3
- package/dist/completion-items.js.map +1 -1
- package/dist/completion-planner.d.ts.map +1 -1
- package/dist/completion-planner.js +12 -1
- package/dist/completion-planner.js.map +1 -1
- package/dist/completions.d.ts.map +1 -1
- package/dist/completions.js +1 -0
- package/dist/completions.js.map +1 -1
- package/dist/hover-content.d.ts.map +1 -1
- package/dist/hover-content.js +18 -1
- package/dist/hover-content.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/keyword-docs.d.ts.map +1 -1
- package/dist/keyword-docs.js +21 -6
- package/dist/keyword-docs.js.map +1 -1
- package/dist/language.d.ts +2 -0
- package/dist/language.d.ts.map +1 -1
- package/dist/language.js +18 -2
- package/dist/language.js.map +1 -1
- package/dist/symbols.d.ts +15 -1
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +71 -9
- package/dist/symbols.js.map +1 -1
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +1 -0
- package/dist/tokens.js.map +1 -1
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +50 -3
- package/dist/validation.js.map +1 -1
- package/hover-content.ts +23 -1
- package/index.ts +5 -1
- package/keyword-docs.ts +21 -6
- package/language.ts +20 -2
- package/package.json +1 -1
- package/symbols.ts +94 -10
- package/tokens.ts +1 -0
- package/validation.ts +90 -3
package/dist/keyword-docs.js
CHANGED
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
export const keywordDocs = {
|
|
4
4
|
domain: 'The domain the file belongs to — optional, at most one per file, before everything else.',
|
|
5
5
|
import: 'Imports a type from another module; it becomes available by its short name.',
|
|
6
|
-
concept: 'A formalized value type wrapping a primitive. Attributes such as `@pii` travel with every usage.',
|
|
6
|
+
concept: 'A formalized value type wrapping a primitive. Attributes such as `@pii` travel with every usage, optionally with a `<attribute> reason "..."` line saying why.',
|
|
7
|
+
type: 'A composite value type — a named shape built from several properties, referenced by events, commands and other types the same way a concept is.',
|
|
8
|
+
reason: 'Records why a concept attribute applies — the purpose, the lawful basis, whose subject the value lives under. Written as `pii reason "..."` in the concept body.',
|
|
9
|
+
identifier: 'Marks the command property a runtime resolves the event source id from. At most one per command; without it a new Uuid is generated.',
|
|
7
10
|
policy: 'A named authorization rule referenced by commands and queries. Multiple policies AND together.',
|
|
8
11
|
persona: 'A named role interacting with the application, with an optional description and its associated policies.',
|
|
9
12
|
authentication: 'Declares the identity providers of the application — at most one block per file.',
|
|
@@ -16,10 +19,12 @@ export const keywordDocs = {
|
|
|
16
19
|
slice: 'The atomic unit of behavior, aligned with Event Modeling. Has a type and a name.',
|
|
17
20
|
event: 'An event type — an immutable, past-tense fact. Properties use concepts or primitives.',
|
|
18
21
|
command: 'An imperative intent. Declares authorization, validation, and what events it produces — declaratively, or via a full handler.',
|
|
19
|
-
query: 'A read-side entry point mapping to a return type.',
|
|
22
|
+
query: 'A read-side entry point mapping to a return type, with an optional description, parameters and performer.',
|
|
23
|
+
performer: 'The code that performs a query — a `file <Path>` reference or an inline `csharp`/`sql` block. The query\'s counterpart to a command handler.',
|
|
24
|
+
from: 'Fills a query parameter from the query context instead of the caller, as in `filter tenantId TenantId from $context.tenant`.',
|
|
20
25
|
projection: 'Declares how events project into a read model, using the embedded Projection Declaration Language (PDL).',
|
|
21
26
|
capture: 'Converts external data into events, using the embedded Change Data Capture Language (CDL).',
|
|
22
|
-
reactor: 'Reacts to events and produces side effects. Lives inside Automation slices.',
|
|
27
|
+
reactor: 'Reacts to events and produces side effects. Lives inside Automation slices. A trigger with no body states intent on its own — `file`/code is optional realization metadata.',
|
|
23
28
|
screen: 'A UI declaration. Supports intent, structure, and layout-with-code levels, or a full file reference.',
|
|
24
29
|
constraint: 'A server-side rule enforced in the Chronicle kernel before events are committed.',
|
|
25
30
|
authorize: 'References the policies that must all pass for the construct to execute.',
|
|
@@ -69,6 +74,7 @@ export const keywordDocs = {
|
|
|
69
74
|
and: 'Both conditions must hold.',
|
|
70
75
|
or: 'Either condition may hold.',
|
|
71
76
|
csharp: 'An inline C# block between triple backticks.',
|
|
77
|
+
sql: 'An inline SQL block between triple backticks — a query performer written against a relational store.',
|
|
72
78
|
typescript: 'An inline TypeScript block between triple backticks.',
|
|
73
79
|
react: 'An inline React/TSX block; receives the surrounding data contract as `Props`.',
|
|
74
80
|
html: 'An inline static HTML block.',
|
|
@@ -86,11 +92,20 @@ export const keywordDocs = {
|
|
|
86
92
|
Enum: 'An enumeration concept with a fixed set of values.',
|
|
87
93
|
};
|
|
88
94
|
export const attributeDocs = {
|
|
89
|
-
pii: '`@pii` — the value is personally identifiable information; Chronicle manages and erases it automatically wherever the concept is used.',
|
|
90
|
-
sensitive: '`@sensitive` — the value is sensitive; Chronicle applies its sensitivity rules automatically wherever the concept is used.',
|
|
95
|
+
pii: '`@pii` — the value is personally identifiable information; Chronicle manages and erases it automatically wherever the concept is used. Add `pii reason "..."` in the concept body to record why.',
|
|
96
|
+
sensitive: '`@sensitive` — the value is sensitive; Chronicle applies its sensitivity rules automatically wherever the concept is used. Add `sensitive reason "..."` in the concept body to record why.',
|
|
91
97
|
};
|
|
92
98
|
export const contextVariableDocs = {
|
|
93
|
-
'$context.occurred': '
|
|
99
|
+
'$context.occurred': 'When the command or query was received.',
|
|
100
|
+
'$context.tenant': 'The tenant the command or query is executing for.',
|
|
101
|
+
'$context.command': 'The command being handled, shaped by its `command` declaration.',
|
|
102
|
+
'$context.arguments': 'The arguments of the query being performed.',
|
|
103
|
+
'$context.causedBy': 'The identity that caused the command or query — `subject`, `name`, `userName`.',
|
|
104
|
+
'$context.causedBy.subject': 'The subject of the identity that caused the command or query.',
|
|
105
|
+
'$context.causedBy.name': 'The display name of the identity that caused the command or query.',
|
|
106
|
+
'$context.causedBy.userName': 'The user name of the identity that caused the command or query.',
|
|
107
|
+
'$context.causation': 'What caused the command or query — `type`, `occurred`, `properties`.',
|
|
108
|
+
'$context.causation.type': 'What caused the command or query — a command, a reactor, a schedule.',
|
|
94
109
|
'$context.identity.id': 'The subject of the caller from the auth token.',
|
|
95
110
|
'$env': 'An environment variable, e.g. `$env.SERVICE_NAME`.',
|
|
96
111
|
'$secrets': 'An encrypted secret resolved at runtime, e.g. `$secrets.azureAdClientId` — stays symbolic in the compiled tree.',
|
package/dist/keyword-docs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyword-docs.js","sourceRoot":"","sources":["../keyword-docs.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,MAAM,CAAC,MAAM,WAAW,GAA2B;IAC/C,MAAM,EAAE,0FAA0F;IAClG,MAAM,EAAE,6EAA6E;IACrF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"keyword-docs.js","sourceRoot":"","sources":["../keyword-docs.ts"],"names":[],"mappings":"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"}
|
package/dist/language.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export declare const languageExtensionPoint: languages.ILanguageExtensionPoint;
|
|
|
5
5
|
export declare const constructKeywords: string[];
|
|
6
6
|
export declare const clauseKeywords: string[];
|
|
7
7
|
export declare const codeBlockTags: string[];
|
|
8
|
+
export declare const contextRoots: string[];
|
|
9
|
+
export declare const causedByProperties: string[];
|
|
8
10
|
export declare const sliceTypes: string[];
|
|
9
11
|
export declare const primitiveTypes: string[];
|
|
10
12
|
export declare const conceptAttributes: string[];
|
package/dist/language.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../language.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,MAAM,MAAM,GAAG,cAAc,eAAe,CAAC,CAAC;AAEpD,eAAO,MAAM,UAAU,eAAe,CAAC;AAEvC,eAAO,MAAM,sBAAsB,EAAE,SAAS,CAAC,uBAK9C,CAAC;AAEF,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../language.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,MAAM,MAAM,GAAG,cAAc,eAAe,CAAC,CAAC;AAEpD,eAAO,MAAM,UAAU,eAAe,CAAC;AAEvC,eAAO,MAAM,sBAAsB,EAAE,SAAS,CAAC,uBAK9C,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAoB7B,CAAC;AAEF,eAAO,MAAM,cAAc,UA2D1B,CAAC;AAEF,eAAO,MAAM,aAAa,UAAmD,CAAC;AAG9E,eAAO,MAAM,YAAY,UAQxB,CAAC;AAEF,eAAO,MAAM,kBAAkB,UAAkC,CAAC;AAElE,eAAO,MAAM,UAAU,UAA0D,CAAC;AAElF,eAAO,MAAM,cAAc,UAAmE,CAAC;AAE/F,eAAO,MAAM,iBAAiB,UAAyB,CAAC;AAExD,eAAO,MAAM,qBAAqB,EAAE,SAAS,CAAC,qBA2B7C,CAAC"}
|
package/dist/language.js
CHANGED
|
@@ -11,6 +11,7 @@ export const constructKeywords = [
|
|
|
11
11
|
'domain',
|
|
12
12
|
'import',
|
|
13
13
|
'concept',
|
|
14
|
+
'type',
|
|
14
15
|
'policy',
|
|
15
16
|
'persona',
|
|
16
17
|
'authentication',
|
|
@@ -39,6 +40,10 @@ export const clauseKeywords = [
|
|
|
39
40
|
'validate',
|
|
40
41
|
'produces',
|
|
41
42
|
'handler',
|
|
43
|
+
'performer',
|
|
44
|
+
'identifier',
|
|
45
|
+
'reason',
|
|
46
|
+
'from',
|
|
42
47
|
'when',
|
|
43
48
|
'given',
|
|
44
49
|
'then',
|
|
@@ -83,7 +88,18 @@ export const clauseKeywords = [
|
|
|
83
88
|
'readmodel',
|
|
84
89
|
'provider',
|
|
85
90
|
];
|
|
86
|
-
export const codeBlockTags = ['csharp', 'typescript', 'react', 'html'];
|
|
91
|
+
export const codeBlockTags = ['csharp', 'typescript', 'react', 'html', 'sql'];
|
|
92
|
+
// The roots a `$context.` path can start with — the members of CommandContext and QueryContext.
|
|
93
|
+
export const contextRoots = [
|
|
94
|
+
'command',
|
|
95
|
+
'arguments',
|
|
96
|
+
'tenant',
|
|
97
|
+
'causedBy',
|
|
98
|
+
'causation',
|
|
99
|
+
'occurred',
|
|
100
|
+
'identity',
|
|
101
|
+
];
|
|
102
|
+
export const causedByProperties = ['subject', 'name', 'userName'];
|
|
87
103
|
export const sliceTypes = ['StateChange', 'StateView', 'Automation', 'Translate'];
|
|
88
104
|
export const primitiveTypes = ['Uuid', 'String', 'Int', 'Decimal', 'Bool', 'Date', 'DateTime'];
|
|
89
105
|
export const conceptAttributes = ['@pii', '@sensitive'];
|
|
@@ -109,7 +125,7 @@ export const languageConfiguration = {
|
|
|
109
125
|
offSide: true,
|
|
110
126
|
},
|
|
111
127
|
indentationRules: {
|
|
112
|
-
increaseIndentPattern: /^\s*(module|feature|slice|policy|persona|authentication|provider|event|command|screen|projection|capture|reactor|constraint|layout|template|validate|produces|handler|section|concurrency|seed|for)\b.*$/,
|
|
128
|
+
increaseIndentPattern: /^\s*(module|feature|slice|policy|persona|authentication|provider|event|command|query|type|screen|projection|capture|reactor|constraint|layout|template|validate|produces|handler|performer|section|concurrency|seed|for)\b.*$/,
|
|
113
129
|
// Dedents are always explicit in an offside language — never auto-dedent.
|
|
114
130
|
decreaseIndentPattern: /(?!)/,
|
|
115
131
|
},
|
package/dist/language.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language.js","sourceRoot":"","sources":["../language.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAMrG,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC;AAEvC,MAAM,CAAC,MAAM,sBAAsB,GAAsC;IACrE,EAAE,EAAE,UAAU;IACd,UAAU,EAAE,CAAC,OAAO,CAAC;IACrB,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC;IAC7C,SAAS,EAAE,CAAC,mBAAmB,CAAC;CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,OAAO;IACP,OAAO;IACP,SAAS;IACT,OAAO;IACP,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,eAAe;IACf,MAAM;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,aAAa;IACb,UAAU;IACV,SAAS;IACT,eAAe;IACf,MAAM;IACN,OAAO;IACP,SAAS;IACT,WAAW;IACX,UAAU;IACV,UAAU;IACV,SAAS;IACT,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;IACT,KAAK;IACL,OAAO;IACP,SAAS;IACT,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,KAAK;IACL,QAAQ;IACR,UAAU;IACV,IAAI;IACJ,OAAO;IACP,SAAS;IACT,OAAO;IACP,SAAS;IACT,OAAO;IACP,QAAQ;IACR,OAAO;IACP,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,aAAa;IACb,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,KAAK;IACL,KAAK;IACL,WAAW;IACX,UAAU;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"language.js","sourceRoot":"","sources":["../language.ts"],"names":[],"mappings":"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"}
|
package/dist/symbols.d.ts
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
export interface PropertySymbol {
|
|
2
2
|
name: string;
|
|
3
3
|
type: string;
|
|
4
|
+
isIdentifier: boolean;
|
|
5
|
+
line: number;
|
|
4
6
|
}
|
|
5
7
|
export interface ConceptSymbol {
|
|
6
8
|
name: string;
|
|
7
9
|
primitive: string;
|
|
8
10
|
attributes: string[];
|
|
11
|
+
attributeReasons: Record<string, string>;
|
|
9
12
|
enumValues: string[];
|
|
10
13
|
line: number;
|
|
11
14
|
}
|
|
15
|
+
export interface TypeSymbol {
|
|
16
|
+
name: string;
|
|
17
|
+
properties: PropertySymbol[];
|
|
18
|
+
line: number;
|
|
19
|
+
}
|
|
12
20
|
export interface PolicySymbol {
|
|
13
21
|
name: string;
|
|
14
22
|
requires: string[];
|
|
@@ -19,12 +27,16 @@ export interface EventSymbol {
|
|
|
19
27
|
properties: PropertySymbol[];
|
|
20
28
|
line: number;
|
|
21
29
|
}
|
|
30
|
+
export interface CommandSymbol extends NamedSymbol {
|
|
31
|
+
properties: PropertySymbol[];
|
|
32
|
+
}
|
|
22
33
|
export interface NamedSymbol {
|
|
23
34
|
name: string;
|
|
24
35
|
line: number;
|
|
25
36
|
}
|
|
26
37
|
export interface QuerySymbol extends NamedSymbol {
|
|
27
38
|
returnType: string;
|
|
39
|
+
parameters: PropertySymbol[];
|
|
28
40
|
}
|
|
29
41
|
export interface ImportSymbol {
|
|
30
42
|
qualifiedName: string;
|
|
@@ -34,12 +46,14 @@ export interface ImportSymbol {
|
|
|
34
46
|
export interface DocumentSymbols {
|
|
35
47
|
imports: ImportSymbol[];
|
|
36
48
|
concepts: ConceptSymbol[];
|
|
49
|
+
types: TypeSymbol[];
|
|
37
50
|
policies: PolicySymbol[];
|
|
38
51
|
events: EventSymbol[];
|
|
39
|
-
commands:
|
|
52
|
+
commands: CommandSymbol[];
|
|
40
53
|
queries: QuerySymbol[];
|
|
41
54
|
screens: NamedSymbol[];
|
|
42
55
|
}
|
|
43
56
|
export declare function scanDocument(lines: string[]): DocumentSymbols;
|
|
44
57
|
export declare function knownEventNames(symbols: DocumentSymbols): string[];
|
|
58
|
+
export declare function knownTypeNames(symbols: DocumentSymbols, primitives: readonly string[]): string[];
|
|
45
59
|
//# sourceMappingURL=symbols.d.ts.map
|
package/dist/symbols.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,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,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,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,aAAc,SAAQ,WAAW;IAC9C,UAAU,EAAE,cAAc,EAAE,CAAC;CAChC;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;IACnB,UAAU,EAAE,cAAc,EAAE,CAAC;CAChC;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,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,WAAW,EAAE,CAAC;CAC1B;AAmCD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,eAAe,CA2H7D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,CAKlE;AAID,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAOhG"}
|
package/dist/symbols.js
CHANGED
|
@@ -2,7 +2,20 @@
|
|
|
2
2
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
3
|
import { fenceMap, indentOf } from './document-context';
|
|
4
4
|
const conceptPattern = /^concept\s+(\w+)\s*:\s*(\w+)((?:\s+@\w+)*)\s*$/;
|
|
5
|
-
const propertyPattern = /^\s*([a-z_]\w*)\s+([\w.]+(?:\[\])?\??)\s*$/;
|
|
5
|
+
const propertyPattern = /^\s*(@?[a-z_]\w*)\s+([\w.]+(?:\[\])?\??)(\s+identifier)?\s*$/;
|
|
6
|
+
const attributeReasonPattern = /^([a-z_]\w*)\s+reason\s+"((?:[^"\\]|\\.)*)"\s*$/;
|
|
7
|
+
const queryParameterPattern = /^\s*(?:by|filter)\s+([a-z_]\w*)\s+([\w.]+(?:\[\])?\??)(?:\s+from\s+.+)?\s*$/;
|
|
8
|
+
function propertiesIn(lines, body) {
|
|
9
|
+
return body
|
|
10
|
+
.map((index) => ({ index, match: lines[index].match(propertyPattern) }))
|
|
11
|
+
.filter((entry) => entry.match !== null)
|
|
12
|
+
.map(({ index, match }) => ({
|
|
13
|
+
name: match[1].replace(/^@/, ''),
|
|
14
|
+
type: match[2],
|
|
15
|
+
isIdentifier: match[3] !== undefined,
|
|
16
|
+
line: index,
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
6
19
|
function collectBody(lines, fences, start, indent) {
|
|
7
20
|
const body = [];
|
|
8
21
|
for (let index = start + 1; index < lines.length; index++) {
|
|
@@ -23,6 +36,7 @@ export function scanDocument(lines) {
|
|
|
23
36
|
const symbols = {
|
|
24
37
|
imports: [],
|
|
25
38
|
concepts: [],
|
|
39
|
+
types: [],
|
|
26
40
|
policies: [],
|
|
27
41
|
events: [],
|
|
28
42
|
commands: [],
|
|
@@ -45,18 +59,36 @@ export function scanDocument(lines) {
|
|
|
45
59
|
}
|
|
46
60
|
const conceptMatch = trimmed.match(conceptPattern);
|
|
47
61
|
if (conceptMatch) {
|
|
62
|
+
const body = collectBody(lines, fences, index, indent).map((i) => lines[i].trim());
|
|
63
|
+
const attributeReasons = {};
|
|
64
|
+
for (const line of body) {
|
|
65
|
+
const reason = line.match(attributeReasonPattern);
|
|
66
|
+
if (reason && attributeReasons[reason[1]] === undefined) {
|
|
67
|
+
attributeReasons[reason[1]] = reason[2];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
48
70
|
const enumValues = conceptMatch[2] === 'Enum'
|
|
49
|
-
?
|
|
71
|
+
? body.filter((line) => !attributeReasonPattern.test(line))
|
|
50
72
|
: [];
|
|
51
73
|
symbols.concepts.push({
|
|
52
74
|
name: conceptMatch[1],
|
|
53
75
|
primitive: conceptMatch[2],
|
|
54
76
|
attributes: conceptMatch[3].trim().split(/\s+/).filter(Boolean),
|
|
77
|
+
attributeReasons,
|
|
55
78
|
enumValues,
|
|
56
79
|
line: index,
|
|
57
80
|
});
|
|
58
81
|
continue;
|
|
59
82
|
}
|
|
83
|
+
const typeMatch = trimmed.match(/^type\s+(\w+)\s*$/);
|
|
84
|
+
if (typeMatch) {
|
|
85
|
+
symbols.types.push({
|
|
86
|
+
name: typeMatch[1],
|
|
87
|
+
properties: propertiesIn(lines, collectBody(lines, fences, index, indent)),
|
|
88
|
+
line: index,
|
|
89
|
+
});
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
60
92
|
const policyMatch = trimmed.match(/^policy\s+(\w+)\s*$/);
|
|
61
93
|
if (policyMatch) {
|
|
62
94
|
const requires = collectBody(lines, fences, index, indent)
|
|
@@ -67,21 +99,41 @@ export function scanDocument(lines) {
|
|
|
67
99
|
}
|
|
68
100
|
const eventMatch = trimmed.match(/^event\s+(\w+)\s*$/);
|
|
69
101
|
if (eventMatch) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
102
|
+
symbols.events.push({
|
|
103
|
+
name: eventMatch[1],
|
|
104
|
+
properties: propertiesIn(lines, collectBody(lines, fences, index, indent)),
|
|
105
|
+
line: index,
|
|
106
|
+
});
|
|
75
107
|
continue;
|
|
76
108
|
}
|
|
77
109
|
const commandMatch = trimmed.match(/^command\s+(\w+)\s*$/);
|
|
78
110
|
if (commandMatch) {
|
|
79
|
-
symbols.commands.push({
|
|
111
|
+
symbols.commands.push({
|
|
112
|
+
name: commandMatch[1],
|
|
113
|
+
properties: propertiesIn(lines, collectBody(lines, fences, index, indent)),
|
|
114
|
+
line: index,
|
|
115
|
+
});
|
|
80
116
|
continue;
|
|
81
117
|
}
|
|
82
118
|
const queryMatch = trimmed.match(/^query\s+(\w+)\s*=>\s*([\w[\]]+)\s*$/);
|
|
83
119
|
if (queryMatch) {
|
|
84
|
-
|
|
120
|
+
// The return type names a read model, which no construct declares — only the
|
|
121
|
+
// 'by' and 'filter' parameters resolve against the document's own types.
|
|
122
|
+
const parameters = collectBody(lines, fences, index, indent)
|
|
123
|
+
.map((i) => ({ index: i, match: lines[i].match(queryParameterPattern) }))
|
|
124
|
+
.filter((entry) => entry.match !== null)
|
|
125
|
+
.map(({ index: line, match }) => ({
|
|
126
|
+
name: match[1],
|
|
127
|
+
type: match[2],
|
|
128
|
+
isIdentifier: false,
|
|
129
|
+
line,
|
|
130
|
+
}));
|
|
131
|
+
symbols.queries.push({
|
|
132
|
+
name: queryMatch[1],
|
|
133
|
+
returnType: queryMatch[2],
|
|
134
|
+
parameters,
|
|
135
|
+
line: index,
|
|
136
|
+
});
|
|
85
137
|
continue;
|
|
86
138
|
}
|
|
87
139
|
const screenMatch = trimmed.match(/^screen\s+(\w+)\s*$/);
|
|
@@ -97,4 +149,14 @@ export function knownEventNames(symbols) {
|
|
|
97
149
|
...symbols.imports.map((imported) => imported.shortName),
|
|
98
150
|
];
|
|
99
151
|
}
|
|
152
|
+
// Everything a property type reference can resolve to — the primitives, the declared
|
|
153
|
+
// concepts and types, and the short names of the imports.
|
|
154
|
+
export function knownTypeNames(symbols, primitives) {
|
|
155
|
+
return [
|
|
156
|
+
...primitives,
|
|
157
|
+
...symbols.concepts.map((concept) => concept.name),
|
|
158
|
+
...symbols.types.map((type) => type.name),
|
|
159
|
+
...symbols.imports.map((imported) => imported.shortName),
|
|
160
|
+
];
|
|
161
|
+
}
|
|
100
162
|
//# sourceMappingURL=symbols.js.map
|
package/dist/symbols.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../symbols.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../symbols.ts"],"names":[],"mappings":"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"}
|
package/dist/tokens.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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;AA0BzE,eAAO,MAAM,gBAAgB,EAAE,iBAa9B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,gBAAgB,CA+F5F"}
|
package/dist/tokens.js
CHANGED
package/dist/tokens.js.map
CHANGED
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../tokens.ts"],"names":[],"mappings":"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"}
|
package/dist/validation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../validation.ts"],"names":[],"mappings":"AAaA,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;AAwFD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CA0HhE"}
|
package/dist/validation.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Copyright (c) Cratis. All rights reserved.
|
|
2
2
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
-
import { primitiveTypes, sliceTypes } from './language';
|
|
3
|
+
import { causedByProperties, contextRoots, primitiveTypes, sliceTypes } from './language';
|
|
4
4
|
import { fenceMap, indentOf } from './document-context';
|
|
5
|
-
import { knownEventNames, scanDocument } from './symbols';
|
|
5
|
+
import { knownEventNames, knownTypeNames, scanDocument, } from './symbols';
|
|
6
6
|
function issue(severity, line, startColumn, length, message) {
|
|
7
7
|
return { severity, message, line, startColumn, endColumn: startColumn + length };
|
|
8
8
|
}
|
|
@@ -10,6 +10,41 @@ function tokenIssue(severity, line, text, token, message) {
|
|
|
10
10
|
const column = text.indexOf(token) + 1;
|
|
11
11
|
return issue(severity, line, column, token.length, message);
|
|
12
12
|
}
|
|
13
|
+
// Reports every property whose type reference names nothing the document declares, and
|
|
14
|
+
// every command that marks more than one property as its identifier.
|
|
15
|
+
function validateDeclarations(lines, symbols) {
|
|
16
|
+
const issues = [];
|
|
17
|
+
const types = new Set(knownTypeNames(symbols, primitiveTypes));
|
|
18
|
+
const checkProperties = (properties, owner) => {
|
|
19
|
+
for (const property of properties.filter((candidate) => !types.has(candidate.type.replace(/[[\]?]/g, '')))) {
|
|
20
|
+
const bare = property.type.replace(/[[\]?]/g, '');
|
|
21
|
+
issues.push(tokenIssue('warning', property.line, lines[property.line], property.type, `Unknown type '${bare}' on '${property.name}' of ${owner} — declare it with 'concept ${bare} : <Primitive>' or 'type ${bare}'.`));
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
for (const type of symbols.types)
|
|
25
|
+
checkProperties(type.properties, `type '${type.name}'`);
|
|
26
|
+
for (const event of symbols.events)
|
|
27
|
+
checkProperties(event.properties, `event '${event.name}'`);
|
|
28
|
+
for (const query of symbols.queries)
|
|
29
|
+
checkProperties(query.parameters, `query '${query.name}'`);
|
|
30
|
+
for (const command of symbols.commands) {
|
|
31
|
+
checkProperties(command.properties, `command '${command.name}'`);
|
|
32
|
+
const identifiers = command.properties.filter((property) => property.isIdentifier);
|
|
33
|
+
for (const extra of identifiers.slice(1)) {
|
|
34
|
+
issues.push(tokenIssue('error', extra.line, lines[extra.line], 'identifier', `Command '${command.name}' already marks '${identifiers[0].name}' as identifier — only one property can be the identifier.`));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const declared = new Map();
|
|
38
|
+
for (const declaration of [...symbols.concepts, ...symbols.types]) {
|
|
39
|
+
const first = declared.get(declaration.name);
|
|
40
|
+
if (first === undefined) {
|
|
41
|
+
declared.set(declaration.name, declaration.line);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
issues.push(tokenIssue('error', declaration.line, lines[declaration.line], declaration.name, `Duplicate declaration of '${declaration.name}' — concept and type names must be unique.`));
|
|
45
|
+
}
|
|
46
|
+
return issues;
|
|
47
|
+
}
|
|
13
48
|
// Validates a Screenplay document without any editor dependency — both the Monaco
|
|
14
49
|
// service and the VSCode extension adapt these issues to their marker/diagnostic APIs.
|
|
15
50
|
export function validateLines(lines) {
|
|
@@ -17,7 +52,7 @@ export function validateLines(lines) {
|
|
|
17
52
|
const symbols = scanDocument(lines);
|
|
18
53
|
const events = new Set(knownEventNames(symbols));
|
|
19
54
|
const policies = new Set(symbols.policies.map((policy) => policy.name));
|
|
20
|
-
const issues =
|
|
55
|
+
const issues = validateDeclarations(lines, symbols);
|
|
21
56
|
const checkEvent = (line, text, name) => {
|
|
22
57
|
if (!events.has(name)) {
|
|
23
58
|
issues.push(tokenIssue('warning', line, text, name, `Unknown event type '${name}' — declare it in a slice or import it.`));
|
|
@@ -88,6 +123,18 @@ export function validateLines(lines) {
|
|
|
88
123
|
const uniqueProperty = trimmed.match(/^unique\s+[a-z_]\w*\s+on\s+([A-Z]\w*)/);
|
|
89
124
|
if (uniqueProperty)
|
|
90
125
|
checkEvent(index, line, uniqueProperty[1]);
|
|
126
|
+
// Every $context. path must name something CommandContext or QueryContext carries.
|
|
127
|
+
for (const path of line.match(/\$context\.[\w.]+/g) ?? []) {
|
|
128
|
+
const segments = path.substring('$context.'.length).split('.');
|
|
129
|
+
if (!contextRoots.includes(segments[0])) {
|
|
130
|
+
issues.push(tokenIssue('warning', index, line, path, `Unknown $context path '${segments.join('.')}' — expected one of ${contextRoots.join(', ')}.`));
|
|
131
|
+
}
|
|
132
|
+
else if (segments[0] === 'causedBy' &&
|
|
133
|
+
segments.length > 1 &&
|
|
134
|
+
!causedByProperties.includes(segments[1])) {
|
|
135
|
+
issues.push(tokenIssue('warning', index, line, path, `Unknown $context.causedBy property '${segments[1]}' — expected ${causedByProperties.join(', ')}.`));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
91
138
|
}
|
|
92
139
|
const fenceLines = lines
|
|
93
140
|
.map((line, index) => ({ line, index }))
|
package/dist/validation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../validation.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../validation.ts"],"names":[],"mappings":"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"}
|
package/hover-content.ts
CHANGED
|
@@ -44,7 +44,18 @@ export function hoverContent(
|
|
|
44
44
|
const values = concept.enumValues.length
|
|
45
45
|
? `\n\nValues: ${concept.enumValues.join(', ')}`
|
|
46
46
|
: '';
|
|
47
|
-
|
|
47
|
+
const reasons = Object.entries(concept.attributeReasons)
|
|
48
|
+
.map(([attribute, reason]) => `\n\n**@${attribute}** — ${reason}`)
|
|
49
|
+
.join('');
|
|
50
|
+
return `\`\`\`screenplay\nconcept ${concept.name} : ${concept.primitive}${attributes}\n\`\`\`${reasons}${values}`;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const type = symbols.types.find((candidate) => candidate.name === word);
|
|
54
|
+
if (type) {
|
|
55
|
+
const properties = type.properties
|
|
56
|
+
.map((property) => `${property.name} ${property.type}`)
|
|
57
|
+
.join('\n');
|
|
58
|
+
return `\`\`\`screenplay\ntype ${type.name}\n${properties}\n\`\`\``;
|
|
48
59
|
}
|
|
49
60
|
|
|
50
61
|
const policy = symbols.policies.find((candidate) => candidate.name === word);
|
|
@@ -61,6 +72,17 @@ export function hoverContent(
|
|
|
61
72
|
return `\`\`\`screenplay\nevent ${event.name}\n${properties}\n\`\`\``;
|
|
62
73
|
}
|
|
63
74
|
|
|
75
|
+
const command = symbols.commands.find((candidate) => candidate.name === word);
|
|
76
|
+
if (command && command.properties.length > 0) {
|
|
77
|
+
const properties = command.properties
|
|
78
|
+
.map(
|
|
79
|
+
(property) =>
|
|
80
|
+
`${property.name} ${property.type}${property.isIdentifier ? ' identifier' : ''}`,
|
|
81
|
+
)
|
|
82
|
+
.join('\n');
|
|
83
|
+
return `\`\`\`screenplay\ncommand ${command.name}\n${properties}\n\`\`\``;
|
|
84
|
+
}
|
|
85
|
+
|
|
64
86
|
// Sub-language keywords take precedence inside their construct.
|
|
65
87
|
const chain = enclosingChain(lines, fences, lineIndex, indentOf(line));
|
|
66
88
|
for (const construct of [line.trim().split(/\s+/)[0], ...chain]) {
|
package/index.ts
CHANGED
|
@@ -56,10 +56,12 @@ export function register(monaco: Monaco): void {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
export {
|
|
59
|
+
causedByProperties,
|
|
59
60
|
clauseKeywords,
|
|
60
61
|
codeBlockTags,
|
|
61
62
|
conceptAttributes,
|
|
62
63
|
constructKeywords,
|
|
64
|
+
contextRoots,
|
|
63
65
|
languageId,
|
|
64
66
|
primitiveTypes,
|
|
65
67
|
sliceTypes,
|
|
@@ -77,8 +79,9 @@ export { cdl } from './sub-languages/cdl';
|
|
|
77
79
|
export { screenplayDarkThemeName } from './themes/screenplay-dark';
|
|
78
80
|
export { screenplayLightThemeName } from './themes/screenplay-light';
|
|
79
81
|
export { enclosingChain, fenceMap, firstWord, indentOf } from './document-context';
|
|
80
|
-
export { knownEventNames, scanDocument } from './symbols';
|
|
82
|
+
export { knownEventNames, knownTypeNames, scanDocument } from './symbols';
|
|
81
83
|
export type {
|
|
84
|
+
CommandSymbol,
|
|
82
85
|
ConceptSymbol,
|
|
83
86
|
DocumentSymbols,
|
|
84
87
|
EventSymbol,
|
|
@@ -87,6 +90,7 @@ export type {
|
|
|
87
90
|
PolicySymbol,
|
|
88
91
|
PropertySymbol,
|
|
89
92
|
QuerySymbol,
|
|
93
|
+
TypeSymbol,
|
|
90
94
|
} from './symbols';
|
|
91
95
|
export { attributeDocs, contextVariableDocs, keywordDocs } from './keyword-docs';
|
|
92
96
|
export { contextVariableItems, producesItems } from './completion-items';
|