@servicenow/sdk-build-plugins 2.0.1
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/dist/AttachmentPlugin.d.ts +253 -0
- package/dist/AttachmentPlugin.js +216 -0
- package/dist/AttachmentPlugin.js.map +1 -0
- package/dist/BusinessRulePlugin.d.ts +56 -0
- package/dist/BusinessRulePlugin.js +171 -0
- package/dist/BusinessRulePlugin.js.map +1 -0
- package/dist/CrossScopePrivilegePlugin.d.ts +22 -0
- package/dist/CrossScopePrivilegePlugin.js +42 -0
- package/dist/CrossScopePrivilegePlugin.js.map +1 -0
- package/dist/DefaultPlugin.d.ts +71 -0
- package/dist/DefaultPlugin.js +238 -0
- package/dist/DefaultPlugin.js.map +1 -0
- package/dist/IdPlugin.d.ts +17 -0
- package/dist/IdPlugin.js +45 -0
- package/dist/IdPlugin.js.map +1 -0
- package/dist/ListPlugin.d.ts +91 -0
- package/dist/ListPlugin.js +398 -0
- package/dist/ListPlugin.js.map +1 -0
- package/dist/PropertyPlugin.d.ts +122 -0
- package/dist/PropertyPlugin.js +165 -0
- package/dist/PropertyPlugin.js.map +1 -0
- package/dist/ScriptTemplatePlugin.d.ts +31 -0
- package/dist/ScriptTemplatePlugin.js +208 -0
- package/dist/ScriptTemplatePlugin.js.map +1 -0
- package/dist/UserPreferencePlugin.d.ts +16 -0
- package/dist/UserPreferencePlugin.js +30 -0
- package/dist/UserPreferencePlugin.js.map +1 -0
- package/dist/aclAndRole/AclPlugin.d.ts +117 -0
- package/dist/aclAndRole/AclPlugin.js +285 -0
- package/dist/aclAndRole/AclPlugin.js.map +1 -0
- package/dist/aclAndRole/RolePlugin.d.ts +58 -0
- package/dist/aclAndRole/RolePlugin.js +152 -0
- package/dist/aclAndRole/RolePlugin.js.map +1 -0
- package/dist/aclAndRole/Util.d.ts +3 -0
- package/dist/aclAndRole/Util.js +106 -0
- package/dist/aclAndRole/Util.js.map +1 -0
- package/dist/app/ApplicationMenuPlugin.d.ts +32 -0
- package/dist/app/ApplicationMenuPlugin.js +106 -0
- package/dist/app/ApplicationMenuPlugin.js.map +1 -0
- package/dist/atf/ATFComposer.d.ts +492 -0
- package/dist/atf/ATFComposer.js +2717 -0
- package/dist/atf/ATFComposer.js.map +1 -0
- package/dist/atf/TestPlugin.d.ts +31 -0
- package/dist/atf/TestPlugin.js +95 -0
- package/dist/atf/TestPlugin.js.map +1 -0
- package/dist/atf/index.d.ts +1 -0
- package/dist/atf/index.js +9 -0
- package/dist/atf/index.js.map +1 -0
- package/dist/db/ColumnPlugins.d.ts +278 -0
- package/dist/db/ColumnPlugins.js +112 -0
- package/dist/db/ColumnPlugins.js.map +1 -0
- package/dist/db/RecordPlugin.d.ts +208 -0
- package/dist/db/RecordPlugin.js +287 -0
- package/dist/db/RecordPlugin.js.map +1 -0
- package/dist/db/TablePlugin.d.ts +742 -0
- package/dist/db/TablePlugin.js +1249 -0
- package/dist/db/TablePlugin.js.map +1 -0
- package/dist/db/index.d.ts +3 -0
- package/dist/db/index.js +27 -0
- package/dist/db/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/scriptedRESTAPI/RESTDeserializationUtils.d.ts +12 -0
- package/dist/scriptedRESTAPI/RESTDeserializationUtils.js +371 -0
- package/dist/scriptedRESTAPI/RESTDeserializationUtils.js.map +1 -0
- package/dist/scriptedRESTAPI/RESTSerializationUtils.d.ts +15 -0
- package/dist/scriptedRESTAPI/RESTSerializationUtils.js +177 -0
- package/dist/scriptedRESTAPI/RESTSerializationUtils.js.map +1 -0
- package/dist/scriptedRESTAPI/RestApiPlugin.d.ts +144 -0
- package/dist/scriptedRESTAPI/RestApiPlugin.js +318 -0
- package/dist/scriptedRESTAPI/RestApiPlugin.js.map +1 -0
- package/dist/scriptedRESTAPI/RestSchemaUtils.d.ts +190 -0
- package/dist/scriptedRESTAPI/RestSchemaUtils.js +53 -0
- package/dist/scriptedRESTAPI/RestSchemaUtils.js.map +1 -0
- package/dist/scriptedRESTAPI/RestUtils.d.ts +75 -0
- package/dist/scriptedRESTAPI/RestUtils.js +469 -0
- package/dist/scriptedRESTAPI/RestUtils.js.map +1 -0
- package/dist/scripts/ClientScriptPlugin.d.ts +43 -0
- package/dist/scripts/ClientScriptPlugin.js +190 -0
- package/dist/scripts/ClientScriptPlugin.js.map +1 -0
- package/dist/scripts/scriptUtils.d.ts +15 -0
- package/dist/scripts/scriptUtils.js +83 -0
- package/dist/scripts/scriptUtils.js.map +1 -0
- package/dist/uxf/ExperiencePlugin.d.ts +22 -0
- package/dist/uxf/ExperiencePlugin.js +55 -0
- package/dist/uxf/ExperiencePlugin.js.map +1 -0
- package/dist/uxf/RoutesPlugin.d.ts +22 -0
- package/dist/uxf/RoutesPlugin.js +176 -0
- package/dist/uxf/RoutesPlugin.js.map +1 -0
- package/dist/uxf/UxfFormulaParser/cleanUxValue.d.ts +4 -0
- package/dist/uxf/UxfFormulaParser/cleanUxValue.js +65 -0
- package/dist/uxf/UxfFormulaParser/cleanUxValue.js.map +1 -0
- package/dist/uxf/UxfFormulaParser/grammerParser/api.d.ts +189 -0
- package/dist/uxf/UxfFormulaParser/grammerParser/api.js +158 -0
- package/dist/uxf/UxfFormulaParser/grammerParser/api.js.map +1 -0
- package/dist/uxf/UxfFormulaParser/grammerParser/clientTransformMap.d.ts +13 -0
- package/dist/uxf/UxfFormulaParser/grammerParser/clientTransformMap.js +604 -0
- package/dist/uxf/UxfFormulaParser/grammerParser/clientTransformMap.js.map +1 -0
- package/dist/uxf/UxfFormulaParser/grammerParser/grammarParser.d.ts +12 -0
- package/dist/uxf/UxfFormulaParser/grammerParser/grammarParser.js +551 -0
- package/dist/uxf/UxfFormulaParser/grammerParser/grammarParser.js.map +1 -0
- package/dist/uxf/UxfFormulaParser/grammerParser/spanHelpers.d.ts +31 -0
- package/dist/uxf/UxfFormulaParser/grammerParser/spanHelpers.js +64 -0
- package/dist/uxf/UxfFormulaParser/grammerParser/spanHelpers.js.map +1 -0
- package/dist/uxf/UxfFormulaParser/index.d.ts +3 -0
- package/dist/uxf/UxfFormulaParser/index.js +11 -0
- package/dist/uxf/UxfFormulaParser/index.js.map +1 -0
- package/dist/uxf/UxfFormulaParser/parser.d.ts +8 -0
- package/dist/uxf/UxfFormulaParser/parser.js +87 -0
- package/dist/uxf/UxfFormulaParser/parser.js.map +1 -0
- package/dist/uxf/UxfFormulaParser/utils/getErrorMsg.d.ts +8 -0
- package/dist/uxf/UxfFormulaParser/utils/getErrorMsg.js +17 -0
- package/dist/uxf/UxfFormulaParser/utils/getErrorMsg.js.map +1 -0
- package/dist/uxf/constants.d.ts +2 -0
- package/dist/uxf/constants.js +8 -0
- package/dist/uxf/constants.js.map +1 -0
- package/dist/uxf/index.d.ts +2 -0
- package/dist/uxf/index.js +11 -0
- package/dist/uxf/index.js.map +1 -0
- package/dist/uxf/tectonicIdGenerator.d.ts +12 -0
- package/dist/uxf/tectonicIdGenerator.js +102 -0
- package/dist/uxf/tectonicIdGenerator.js.map +1 -0
- package/license +9 -0
- package/package.json +42 -0
- package/src/AttachmentPlugin.ts +262 -0
- package/src/BusinessRulePlugin.ts +251 -0
- package/src/CrossScopePrivilegePlugin.ts +54 -0
- package/src/DefaultPlugin.ts +272 -0
- package/src/IdPlugin.ts +47 -0
- package/src/ListPlugin.ts +497 -0
- package/src/PropertyPlugin.ts +218 -0
- package/src/ScriptTemplatePlugin.ts +223 -0
- package/src/UserPreferencePlugin.ts +36 -0
- package/src/aclAndRole/AclPlugin.ts +410 -0
- package/src/aclAndRole/RolePlugin.ts +225 -0
- package/src/aclAndRole/Util.ts +104 -0
- package/src/app/ApplicationMenuPlugin.ts +158 -0
- package/src/atf/ATFComposer.ts +3356 -0
- package/src/atf/TestPlugin.ts +119 -0
- package/src/atf/index.ts +1 -0
- package/src/db/ColumnPlugins.ts +117 -0
- package/src/db/RecordPlugin.ts +391 -0
- package/src/db/TablePlugin.ts +1581 -0
- package/src/db/index.ts +3 -0
- package/src/index.ts +16 -0
- package/src/scriptedRESTAPI/RESTDeserializationUtils.ts +410 -0
- package/src/scriptedRESTAPI/RESTSerializationUtils.ts +227 -0
- package/src/scriptedRESTAPI/RestApiPlugin.ts +438 -0
- package/src/scriptedRESTAPI/RestSchemaUtils.ts +72 -0
- package/src/scriptedRESTAPI/RestUtils.ts +507 -0
- package/src/scripts/ClientScriptPlugin.ts +251 -0
- package/src/scripts/scriptUtils.ts +81 -0
- package/src/uxf/ExperiencePlugin.ts +64 -0
- package/src/uxf/RoutesPlugin.ts +215 -0
- package/src/uxf/UxfFormulaParser/cleanUxValue.ts +73 -0
- package/src/uxf/UxfFormulaParser/grammerParser/api.js +166 -0
- package/src/uxf/UxfFormulaParser/grammerParser/clientTransformMap.js +606 -0
- package/src/uxf/UxfFormulaParser/grammerParser/grammarParser.js +551 -0
- package/src/uxf/UxfFormulaParser/grammerParser/spanHelpers.js +65 -0
- package/src/uxf/UxfFormulaParser/index.ts +4 -0
- package/src/uxf/UxfFormulaParser/parser.ts +64 -0
- package/src/uxf/UxfFormulaParser/utils/getErrorMsg.ts +13 -0
- package/src/uxf/constants.ts +4 -0
- package/src/uxf/index.ts +2 -0
- package/src/uxf/tectonicIdGenerator.ts +81 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { isSupportedNode } from '@servicenow/sdk-project'
|
|
2
|
+
import {
|
|
3
|
+
getValueDeclaration,
|
|
4
|
+
Plugin,
|
|
5
|
+
BooleanData,
|
|
6
|
+
FluentDiagnostic,
|
|
7
|
+
StringData,
|
|
8
|
+
NumberData,
|
|
9
|
+
Data,
|
|
10
|
+
ArrayData,
|
|
11
|
+
ObjectData,
|
|
12
|
+
} from '@servicenow/sdk-build-core'
|
|
13
|
+
import * as ts from 'ts-morph'
|
|
14
|
+
|
|
15
|
+
export default Plugin({
|
|
16
|
+
name: 'Default',
|
|
17
|
+
extractors: {
|
|
18
|
+
raw: {
|
|
19
|
+
TrueKeyword(node) {
|
|
20
|
+
return {
|
|
21
|
+
handled: true,
|
|
22
|
+
diagnostics: [],
|
|
23
|
+
data: [new BooleanData(true, node)],
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
FalseKeyword(node) {
|
|
28
|
+
return {
|
|
29
|
+
handled: true,
|
|
30
|
+
diagnostics: [],
|
|
31
|
+
data: [new BooleanData(false, node)],
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
StringLiteral(node) {
|
|
36
|
+
return {
|
|
37
|
+
handled: true,
|
|
38
|
+
diagnostics: [],
|
|
39
|
+
data: [new StringData(node.getLiteralValue(), node)],
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
NoSubstitutionTemplateLiteral(node) {
|
|
44
|
+
return {
|
|
45
|
+
handled: true,
|
|
46
|
+
diagnostics: [],
|
|
47
|
+
data: [new StringData(node.getLiteralValue(), node)],
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
NumericLiteral(node) {
|
|
52
|
+
return {
|
|
53
|
+
handled: true,
|
|
54
|
+
diagnostics: [],
|
|
55
|
+
data: [new NumberData(node.getLiteralValue(), node)],
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
AsExpression(node, context) {
|
|
60
|
+
return context.extractAst(node.getExpression())
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
ComputedPropertyName(node, context) {
|
|
64
|
+
return context.extractAst(node.getExpression())
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
Identifier(node, context) {
|
|
68
|
+
return context.extractAst(getValueDeclaration(node))
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
PropertyAccessExpression(node, context) {
|
|
72
|
+
return context.extractAst(node.getNameNode())
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
ShorthandPropertyAssignment(node, context) {
|
|
76
|
+
return context.extractAst(node.getNameNode())
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
VariableDeclaration(node, context) {
|
|
80
|
+
const initializer = node.getInitializer()
|
|
81
|
+
if (!initializer) {
|
|
82
|
+
return {
|
|
83
|
+
handled: true,
|
|
84
|
+
data: [],
|
|
85
|
+
diagnostics: [
|
|
86
|
+
new FluentDiagnostic(
|
|
87
|
+
node,
|
|
88
|
+
`Expected variable declaration to have an initializer: ${node.getText()}`
|
|
89
|
+
),
|
|
90
|
+
],
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return context.extractAst(initializer)
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
PropertyAssignment(node, context) {
|
|
98
|
+
const initializer = node.getInitializer()
|
|
99
|
+
if (!initializer) {
|
|
100
|
+
return {
|
|
101
|
+
handled: true,
|
|
102
|
+
data: [],
|
|
103
|
+
diagnostics: [
|
|
104
|
+
new FluentDiagnostic(
|
|
105
|
+
node,
|
|
106
|
+
`Expected property assignment to have an initializer: ${node.getText()}`
|
|
107
|
+
),
|
|
108
|
+
],
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return context.extractAst(initializer)
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
ArrayLiteralExpression(node, context) {
|
|
116
|
+
const diagnostics: FluentDiagnostic[] = []
|
|
117
|
+
const data: Data[] = []
|
|
118
|
+
|
|
119
|
+
for (const element of node.getElements()) {
|
|
120
|
+
const result = context.extractAst(element)
|
|
121
|
+
if (!result.handled) {
|
|
122
|
+
return {
|
|
123
|
+
handled: true,
|
|
124
|
+
data: [],
|
|
125
|
+
diagnostics: [new FluentDiagnostic(element, 'Unsupported array element')],
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
diagnostics.push(...result.diagnostics)
|
|
130
|
+
data.push(...result.data)
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return {
|
|
134
|
+
handled: true,
|
|
135
|
+
diagnostics,
|
|
136
|
+
data: [new ArrayData(data, node)],
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
ObjectLiteralExpression(node, context) {
|
|
141
|
+
const diagnostics: FluentDiagnostic[] = []
|
|
142
|
+
const data: Record<string, Data> = {}
|
|
143
|
+
|
|
144
|
+
for (const prop of node.getProperties()) {
|
|
145
|
+
if (!ts.Node.isPropertyAssignment(prop) && !ts.Node.isShorthandPropertyAssignment(prop)) {
|
|
146
|
+
diagnostics.push(new FluentDiagnostic(prop, 'Only property assignments are allowed'))
|
|
147
|
+
continue
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const nameNode = prop.getNameNode()
|
|
151
|
+
const result = context.extractAst(prop)
|
|
152
|
+
if (!result.handled) {
|
|
153
|
+
return {
|
|
154
|
+
handled: true,
|
|
155
|
+
data: [],
|
|
156
|
+
diagnostics: [new FluentDiagnostic(prop, 'Unsupported property assignment')],
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
diagnostics.push(...result.diagnostics)
|
|
161
|
+
if (!(0 in result.data) || result.data.length !== 1) {
|
|
162
|
+
diagnostics.push(new FluentDiagnostic(prop, `Property assignment has unsupported structure`))
|
|
163
|
+
continue
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const name = ts.Node.isStringLiteral(nameNode) ? nameNode.getLiteralValue() : prop.getName()
|
|
167
|
+
data[name] = result.data[0]
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return {
|
|
171
|
+
handled: true,
|
|
172
|
+
diagnostics,
|
|
173
|
+
data: [new ObjectData(data, node)],
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
|
|
177
|
+
TemplateExpression(node, context) {
|
|
178
|
+
const diagnostics: FluentDiagnostic[] = []
|
|
179
|
+
const text =
|
|
180
|
+
node.getHead().getLiteralText() +
|
|
181
|
+
node
|
|
182
|
+
.getTemplateSpans()
|
|
183
|
+
.map((s) => {
|
|
184
|
+
const result = context.extractAst(s.getExpression())
|
|
185
|
+
if (!result.handled) {
|
|
186
|
+
diagnostics.push(new FluentDiagnostic(s, 'Unsupported expression in template'))
|
|
187
|
+
return undefined
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (!(0 in result.data) || result.data.length !== 1) {
|
|
191
|
+
diagnostics.push(new FluentDiagnostic(s, `Unsupported expression in template`))
|
|
192
|
+
return undefined
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
diagnostics.push(...result.diagnostics)
|
|
196
|
+
return `${result.data[0].getValue()}${s.getLiteral().getLiteralText()}`
|
|
197
|
+
})
|
|
198
|
+
.join('')
|
|
199
|
+
|
|
200
|
+
return {
|
|
201
|
+
handled: true,
|
|
202
|
+
diagnostics,
|
|
203
|
+
data: [new StringData(text, node)],
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
|
|
207
|
+
//Added support for -ve number alone. Can be upgraded later to support other expressions as required.
|
|
208
|
+
PrefixUnaryExpression(node) {
|
|
209
|
+
if (
|
|
210
|
+
!ts.Node.isNumericLiteral(node.getOperand()) ||
|
|
211
|
+
node.getOperatorToken() !== ts.SyntaxKind.MinusToken
|
|
212
|
+
) {
|
|
213
|
+
return {
|
|
214
|
+
handled: true,
|
|
215
|
+
data: [],
|
|
216
|
+
diagnostics: [new FluentDiagnostic(node, 'Unsupported prefix unary expression')],
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
return {
|
|
221
|
+
handled: true,
|
|
222
|
+
diagnostics: [],
|
|
223
|
+
data: [
|
|
224
|
+
new NumberData(
|
|
225
|
+
-node.getOperand().asKind(ts.SyntaxKind.NumericLiteral)!.getLiteralValue(),
|
|
226
|
+
node
|
|
227
|
+
),
|
|
228
|
+
],
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
diagnostics: {
|
|
234
|
+
Node(node) {
|
|
235
|
+
if (isSupportedNode(node)) {
|
|
236
|
+
return []
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return [new FluentDiagnostic(node, `${getRawKindName(node)} is not allowed`)]
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
let rawKindNames: Record<ts.SyntaxKind, string> | undefined
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* This is a hack to get more accurate names for given syntax kinds. TypeScript's
|
|
248
|
+
* `SyntaxKind` enum has a lot of reused numeric values, so when you try to index
|
|
249
|
+
* it with a number, you might get a different name than you expect. For example,
|
|
250
|
+
* `VariableStatement` and `FirstStatement` both have the same numeric value, and
|
|
251
|
+
* you probably never would expect the latter. Thankfully, all the names that you
|
|
252
|
+
* probably never want are towards the end, so this just grabs all the first ones
|
|
253
|
+
* and ignores any duplicates that come after.
|
|
254
|
+
*/
|
|
255
|
+
function getRawKindName(node: ts.Node): string | undefined {
|
|
256
|
+
if (!rawKindNames) {
|
|
257
|
+
rawKindNames = Object.entries(ts.SyntaxKind)
|
|
258
|
+
.filter(([k]) => isNaN(Number(k)))
|
|
259
|
+
.reduce(
|
|
260
|
+
(names, [name, value]) => {
|
|
261
|
+
if (typeof value === 'number' && !names[value]) {
|
|
262
|
+
names[value] = name // Only add if it hasn't been added already
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
return names
|
|
266
|
+
},
|
|
267
|
+
{} as Record<ts.SyntaxKind, string>
|
|
268
|
+
)
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
return rawKindNames[node.getKind()]
|
|
272
|
+
}
|
package/src/IdPlugin.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { isSupportedNode } from '@servicenow/sdk-project'
|
|
2
|
+
import { ElementAccessExpression, SyntaxKind } from 'ts-morph'
|
|
3
|
+
import { Plugin, FluentDiagnostic } from '@servicenow/sdk-build-core'
|
|
4
|
+
|
|
5
|
+
export default Plugin({
|
|
6
|
+
name: 'NowID',
|
|
7
|
+
extractors: {
|
|
8
|
+
raw: {
|
|
9
|
+
ElementAccessExpression(node: ElementAccessExpression, context) {
|
|
10
|
+
const nowIdExpression = node.getExpressionIfKind(SyntaxKind.PropertyAccessExpression)
|
|
11
|
+
if (!nowIdExpression || nowIdExpression.getText() !== 'Now.ID') {
|
|
12
|
+
return {
|
|
13
|
+
handled: false,
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const argExpression = node.getArgumentExpression()
|
|
18
|
+
if (!argExpression || !isSupportedNode(argExpression)) {
|
|
19
|
+
return {
|
|
20
|
+
handled: true,
|
|
21
|
+
data: [],
|
|
22
|
+
diagnostics: [new FluentDiagnostic(node, 'Now.ID must have an argument')],
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const result = context.extractRaw(argExpression)
|
|
27
|
+
if (!result.handled) {
|
|
28
|
+
return {
|
|
29
|
+
handled: true,
|
|
30
|
+
data: [],
|
|
31
|
+
diagnostics: [new FluentDiagnostic(node, 'Unsupported Now.ID argument')],
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (!(0 in result.data) || result.data.length !== 1) {
|
|
36
|
+
return {
|
|
37
|
+
handled: true,
|
|
38
|
+
data: [],
|
|
39
|
+
diagnostics: [...result.diagnostics, new FluentDiagnostic(node, 'Unsupported Now.ID argument')],
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return result
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
})
|