@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.
Files changed (166) hide show
  1. package/dist/AttachmentPlugin.d.ts +253 -0
  2. package/dist/AttachmentPlugin.js +216 -0
  3. package/dist/AttachmentPlugin.js.map +1 -0
  4. package/dist/BusinessRulePlugin.d.ts +56 -0
  5. package/dist/BusinessRulePlugin.js +171 -0
  6. package/dist/BusinessRulePlugin.js.map +1 -0
  7. package/dist/CrossScopePrivilegePlugin.d.ts +22 -0
  8. package/dist/CrossScopePrivilegePlugin.js +42 -0
  9. package/dist/CrossScopePrivilegePlugin.js.map +1 -0
  10. package/dist/DefaultPlugin.d.ts +71 -0
  11. package/dist/DefaultPlugin.js +238 -0
  12. package/dist/DefaultPlugin.js.map +1 -0
  13. package/dist/IdPlugin.d.ts +17 -0
  14. package/dist/IdPlugin.js +45 -0
  15. package/dist/IdPlugin.js.map +1 -0
  16. package/dist/ListPlugin.d.ts +91 -0
  17. package/dist/ListPlugin.js +398 -0
  18. package/dist/ListPlugin.js.map +1 -0
  19. package/dist/PropertyPlugin.d.ts +122 -0
  20. package/dist/PropertyPlugin.js +165 -0
  21. package/dist/PropertyPlugin.js.map +1 -0
  22. package/dist/ScriptTemplatePlugin.d.ts +31 -0
  23. package/dist/ScriptTemplatePlugin.js +208 -0
  24. package/dist/ScriptTemplatePlugin.js.map +1 -0
  25. package/dist/UserPreferencePlugin.d.ts +16 -0
  26. package/dist/UserPreferencePlugin.js +30 -0
  27. package/dist/UserPreferencePlugin.js.map +1 -0
  28. package/dist/aclAndRole/AclPlugin.d.ts +117 -0
  29. package/dist/aclAndRole/AclPlugin.js +285 -0
  30. package/dist/aclAndRole/AclPlugin.js.map +1 -0
  31. package/dist/aclAndRole/RolePlugin.d.ts +58 -0
  32. package/dist/aclAndRole/RolePlugin.js +152 -0
  33. package/dist/aclAndRole/RolePlugin.js.map +1 -0
  34. package/dist/aclAndRole/Util.d.ts +3 -0
  35. package/dist/aclAndRole/Util.js +106 -0
  36. package/dist/aclAndRole/Util.js.map +1 -0
  37. package/dist/app/ApplicationMenuPlugin.d.ts +32 -0
  38. package/dist/app/ApplicationMenuPlugin.js +106 -0
  39. package/dist/app/ApplicationMenuPlugin.js.map +1 -0
  40. package/dist/atf/ATFComposer.d.ts +492 -0
  41. package/dist/atf/ATFComposer.js +2717 -0
  42. package/dist/atf/ATFComposer.js.map +1 -0
  43. package/dist/atf/TestPlugin.d.ts +31 -0
  44. package/dist/atf/TestPlugin.js +95 -0
  45. package/dist/atf/TestPlugin.js.map +1 -0
  46. package/dist/atf/index.d.ts +1 -0
  47. package/dist/atf/index.js +9 -0
  48. package/dist/atf/index.js.map +1 -0
  49. package/dist/db/ColumnPlugins.d.ts +278 -0
  50. package/dist/db/ColumnPlugins.js +112 -0
  51. package/dist/db/ColumnPlugins.js.map +1 -0
  52. package/dist/db/RecordPlugin.d.ts +208 -0
  53. package/dist/db/RecordPlugin.js +287 -0
  54. package/dist/db/RecordPlugin.js.map +1 -0
  55. package/dist/db/TablePlugin.d.ts +742 -0
  56. package/dist/db/TablePlugin.js +1249 -0
  57. package/dist/db/TablePlugin.js.map +1 -0
  58. package/dist/db/index.d.ts +3 -0
  59. package/dist/db/index.js +27 -0
  60. package/dist/db/index.js.map +1 -0
  61. package/dist/index.d.ts +16 -0
  62. package/dist/index.js +51 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/scriptedRESTAPI/RESTDeserializationUtils.d.ts +12 -0
  65. package/dist/scriptedRESTAPI/RESTDeserializationUtils.js +371 -0
  66. package/dist/scriptedRESTAPI/RESTDeserializationUtils.js.map +1 -0
  67. package/dist/scriptedRESTAPI/RESTSerializationUtils.d.ts +15 -0
  68. package/dist/scriptedRESTAPI/RESTSerializationUtils.js +177 -0
  69. package/dist/scriptedRESTAPI/RESTSerializationUtils.js.map +1 -0
  70. package/dist/scriptedRESTAPI/RestApiPlugin.d.ts +144 -0
  71. package/dist/scriptedRESTAPI/RestApiPlugin.js +318 -0
  72. package/dist/scriptedRESTAPI/RestApiPlugin.js.map +1 -0
  73. package/dist/scriptedRESTAPI/RestSchemaUtils.d.ts +190 -0
  74. package/dist/scriptedRESTAPI/RestSchemaUtils.js +53 -0
  75. package/dist/scriptedRESTAPI/RestSchemaUtils.js.map +1 -0
  76. package/dist/scriptedRESTAPI/RestUtils.d.ts +75 -0
  77. package/dist/scriptedRESTAPI/RestUtils.js +469 -0
  78. package/dist/scriptedRESTAPI/RestUtils.js.map +1 -0
  79. package/dist/scripts/ClientScriptPlugin.d.ts +43 -0
  80. package/dist/scripts/ClientScriptPlugin.js +190 -0
  81. package/dist/scripts/ClientScriptPlugin.js.map +1 -0
  82. package/dist/scripts/scriptUtils.d.ts +15 -0
  83. package/dist/scripts/scriptUtils.js +83 -0
  84. package/dist/scripts/scriptUtils.js.map +1 -0
  85. package/dist/uxf/ExperiencePlugin.d.ts +22 -0
  86. package/dist/uxf/ExperiencePlugin.js +55 -0
  87. package/dist/uxf/ExperiencePlugin.js.map +1 -0
  88. package/dist/uxf/RoutesPlugin.d.ts +22 -0
  89. package/dist/uxf/RoutesPlugin.js +176 -0
  90. package/dist/uxf/RoutesPlugin.js.map +1 -0
  91. package/dist/uxf/UxfFormulaParser/cleanUxValue.d.ts +4 -0
  92. package/dist/uxf/UxfFormulaParser/cleanUxValue.js +65 -0
  93. package/dist/uxf/UxfFormulaParser/cleanUxValue.js.map +1 -0
  94. package/dist/uxf/UxfFormulaParser/grammerParser/api.d.ts +189 -0
  95. package/dist/uxf/UxfFormulaParser/grammerParser/api.js +158 -0
  96. package/dist/uxf/UxfFormulaParser/grammerParser/api.js.map +1 -0
  97. package/dist/uxf/UxfFormulaParser/grammerParser/clientTransformMap.d.ts +13 -0
  98. package/dist/uxf/UxfFormulaParser/grammerParser/clientTransformMap.js +604 -0
  99. package/dist/uxf/UxfFormulaParser/grammerParser/clientTransformMap.js.map +1 -0
  100. package/dist/uxf/UxfFormulaParser/grammerParser/grammarParser.d.ts +12 -0
  101. package/dist/uxf/UxfFormulaParser/grammerParser/grammarParser.js +551 -0
  102. package/dist/uxf/UxfFormulaParser/grammerParser/grammarParser.js.map +1 -0
  103. package/dist/uxf/UxfFormulaParser/grammerParser/spanHelpers.d.ts +31 -0
  104. package/dist/uxf/UxfFormulaParser/grammerParser/spanHelpers.js +64 -0
  105. package/dist/uxf/UxfFormulaParser/grammerParser/spanHelpers.js.map +1 -0
  106. package/dist/uxf/UxfFormulaParser/index.d.ts +3 -0
  107. package/dist/uxf/UxfFormulaParser/index.js +11 -0
  108. package/dist/uxf/UxfFormulaParser/index.js.map +1 -0
  109. package/dist/uxf/UxfFormulaParser/parser.d.ts +8 -0
  110. package/dist/uxf/UxfFormulaParser/parser.js +87 -0
  111. package/dist/uxf/UxfFormulaParser/parser.js.map +1 -0
  112. package/dist/uxf/UxfFormulaParser/utils/getErrorMsg.d.ts +8 -0
  113. package/dist/uxf/UxfFormulaParser/utils/getErrorMsg.js +17 -0
  114. package/dist/uxf/UxfFormulaParser/utils/getErrorMsg.js.map +1 -0
  115. package/dist/uxf/constants.d.ts +2 -0
  116. package/dist/uxf/constants.js +8 -0
  117. package/dist/uxf/constants.js.map +1 -0
  118. package/dist/uxf/index.d.ts +2 -0
  119. package/dist/uxf/index.js +11 -0
  120. package/dist/uxf/index.js.map +1 -0
  121. package/dist/uxf/tectonicIdGenerator.d.ts +12 -0
  122. package/dist/uxf/tectonicIdGenerator.js +102 -0
  123. package/dist/uxf/tectonicIdGenerator.js.map +1 -0
  124. package/license +9 -0
  125. package/package.json +42 -0
  126. package/src/AttachmentPlugin.ts +262 -0
  127. package/src/BusinessRulePlugin.ts +251 -0
  128. package/src/CrossScopePrivilegePlugin.ts +54 -0
  129. package/src/DefaultPlugin.ts +272 -0
  130. package/src/IdPlugin.ts +47 -0
  131. package/src/ListPlugin.ts +497 -0
  132. package/src/PropertyPlugin.ts +218 -0
  133. package/src/ScriptTemplatePlugin.ts +223 -0
  134. package/src/UserPreferencePlugin.ts +36 -0
  135. package/src/aclAndRole/AclPlugin.ts +410 -0
  136. package/src/aclAndRole/RolePlugin.ts +225 -0
  137. package/src/aclAndRole/Util.ts +104 -0
  138. package/src/app/ApplicationMenuPlugin.ts +158 -0
  139. package/src/atf/ATFComposer.ts +3356 -0
  140. package/src/atf/TestPlugin.ts +119 -0
  141. package/src/atf/index.ts +1 -0
  142. package/src/db/ColumnPlugins.ts +117 -0
  143. package/src/db/RecordPlugin.ts +391 -0
  144. package/src/db/TablePlugin.ts +1581 -0
  145. package/src/db/index.ts +3 -0
  146. package/src/index.ts +16 -0
  147. package/src/scriptedRESTAPI/RESTDeserializationUtils.ts +410 -0
  148. package/src/scriptedRESTAPI/RESTSerializationUtils.ts +227 -0
  149. package/src/scriptedRESTAPI/RestApiPlugin.ts +438 -0
  150. package/src/scriptedRESTAPI/RestSchemaUtils.ts +72 -0
  151. package/src/scriptedRESTAPI/RestUtils.ts +507 -0
  152. package/src/scripts/ClientScriptPlugin.ts +251 -0
  153. package/src/scripts/scriptUtils.ts +81 -0
  154. package/src/uxf/ExperiencePlugin.ts +64 -0
  155. package/src/uxf/RoutesPlugin.ts +215 -0
  156. package/src/uxf/UxfFormulaParser/cleanUxValue.ts +73 -0
  157. package/src/uxf/UxfFormulaParser/grammerParser/api.js +166 -0
  158. package/src/uxf/UxfFormulaParser/grammerParser/clientTransformMap.js +606 -0
  159. package/src/uxf/UxfFormulaParser/grammerParser/grammarParser.js +551 -0
  160. package/src/uxf/UxfFormulaParser/grammerParser/spanHelpers.js +65 -0
  161. package/src/uxf/UxfFormulaParser/index.ts +4 -0
  162. package/src/uxf/UxfFormulaParser/parser.ts +64 -0
  163. package/src/uxf/UxfFormulaParser/utils/getErrorMsg.ts +13 -0
  164. package/src/uxf/constants.ts +4 -0
  165. package/src/uxf/index.ts +2 -0
  166. 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
+ }
@@ -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
+ })