@servicenow/sdk-build-plugins 3.0.2 → 4.0.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 (359) hide show
  1. package/dist/acl-plugin.d.ts +19 -0
  2. package/dist/acl-plugin.js +210 -0
  3. package/dist/acl-plugin.js.map +1 -0
  4. package/dist/application-menu-plugin.d.ts +18 -0
  5. package/dist/application-menu-plugin.js +104 -0
  6. package/dist/application-menu-plugin.js.map +1 -0
  7. package/dist/arrow-function-plugin.d.ts +16 -0
  8. package/dist/arrow-function-plugin.js +107 -0
  9. package/dist/arrow-function-plugin.js.map +1 -0
  10. package/dist/atf/step-configs.d.ts +37 -0
  11. package/dist/atf/step-configs.js +2236 -0
  12. package/dist/atf/step-configs.js.map +1 -0
  13. package/dist/atf/test-plugin.d.ts +4 -0
  14. package/dist/atf/test-plugin.js +591 -0
  15. package/dist/atf/test-plugin.js.map +1 -0
  16. package/dist/basic-syntax-plugin.d.ts +2 -0
  17. package/dist/basic-syntax-plugin.js +636 -0
  18. package/dist/basic-syntax-plugin.js.map +1 -0
  19. package/dist/business-rule-plugin.d.ts +3 -0
  20. package/dist/business-rule-plugin.js +205 -0
  21. package/dist/business-rule-plugin.js.map +1 -0
  22. package/dist/call-expression-plugin.d.ts +2 -0
  23. package/dist/call-expression-plugin.js +175 -0
  24. package/dist/call-expression-plugin.js.map +1 -0
  25. package/dist/client-script-plugin.d.ts +29 -0
  26. package/dist/client-script-plugin.js +157 -0
  27. package/dist/client-script-plugin.js.map +1 -0
  28. package/dist/column/column-helper.d.ts +12 -0
  29. package/dist/column/column-helper.js +84 -0
  30. package/dist/column/column-helper.js.map +1 -0
  31. package/dist/column/column-to-record.d.ts +3 -0
  32. package/dist/column/column-to-record.js +105 -0
  33. package/dist/column/column-to-record.js.map +1 -0
  34. package/dist/column-plugin.d.ts +8 -0
  35. package/dist/column-plugin.js +453 -0
  36. package/dist/column-plugin.js.map +1 -0
  37. package/dist/cross-scope-privilege-plugin.d.ts +15 -0
  38. package/dist/cross-scope-privilege-plugin.js +82 -0
  39. package/dist/cross-scope-privilege-plugin.js.map +1 -0
  40. package/dist/html-import-plugin.d.ts +2 -0
  41. package/dist/html-import-plugin.js +72 -0
  42. package/dist/html-import-plugin.js.map +1 -0
  43. package/dist/index.d.ts +37 -21
  44. package/dist/index.js +40 -45
  45. package/dist/index.js.map +1 -1
  46. package/dist/json-plugin.d.ts +15 -0
  47. package/dist/json-plugin.js +104 -0
  48. package/dist/json-plugin.js.map +1 -0
  49. package/dist/list-plugin.d.ts +2 -0
  50. package/dist/list-plugin.js +191 -0
  51. package/dist/list-plugin.js.map +1 -0
  52. package/dist/now-config-plugin.d.ts +4 -0
  53. package/dist/now-config-plugin.js +154 -0
  54. package/dist/now-config-plugin.js.map +1 -0
  55. package/dist/now-id-plugin.d.ts +11 -0
  56. package/dist/now-id-plugin.js +71 -0
  57. package/dist/now-id-plugin.js.map +1 -0
  58. package/dist/now-include-plugin.d.ts +16 -0
  59. package/dist/now-include-plugin.js +118 -0
  60. package/dist/now-include-plugin.js.map +1 -0
  61. package/dist/now-ref-plugin.d.ts +2 -0
  62. package/dist/now-ref-plugin.js +43 -0
  63. package/dist/now-ref-plugin.js.map +1 -0
  64. package/dist/now-unresolved-plugin.d.ts +2 -0
  65. package/dist/now-unresolved-plugin.js +32 -0
  66. package/dist/now-unresolved-plugin.js.map +1 -0
  67. package/dist/package-json-plugin.d.ts +2 -0
  68. package/dist/package-json-plugin.js +70 -0
  69. package/dist/package-json-plugin.js.map +1 -0
  70. package/dist/property-plugin.d.ts +2 -0
  71. package/dist/property-plugin.js +105 -0
  72. package/dist/property-plugin.js.map +1 -0
  73. package/dist/record-plugin.d.ts +43 -0
  74. package/dist/record-plugin.js +147 -0
  75. package/dist/record-plugin.js.map +1 -0
  76. package/dist/repack/index.d.ts +1 -0
  77. package/dist/repack/index.js +10 -2
  78. package/dist/repack/index.js.map +1 -1
  79. package/dist/repack/lint/Rules.d.ts +1 -1
  80. package/dist/repack/lint/Rules.js +7 -3
  81. package/dist/repack/lint/Rules.js.map +1 -1
  82. package/dist/repack/lint/index.js +1 -1
  83. package/dist/rest-api-plugin.d.ts +2 -0
  84. package/dist/rest-api-plugin.js +469 -0
  85. package/dist/rest-api-plugin.js.map +1 -0
  86. package/dist/role-plugin.d.ts +2 -0
  87. package/dist/role-plugin.js +117 -0
  88. package/dist/role-plugin.js.map +1 -0
  89. package/dist/script-action-plugin.d.ts +2 -0
  90. package/dist/script-action-plugin.js +62 -0
  91. package/dist/script-action-plugin.js.map +1 -0
  92. package/dist/script-include-plugin.d.ts +2 -0
  93. package/dist/script-include-plugin.js +102 -0
  94. package/dist/script-include-plugin.js.map +1 -0
  95. package/dist/server-module-plugin/index.d.ts +14 -0
  96. package/dist/server-module-plugin/index.js +378 -0
  97. package/dist/server-module-plugin/index.js.map +1 -0
  98. package/dist/server-module-plugin/sbom-builder.d.ts +45 -0
  99. package/dist/server-module-plugin/sbom-builder.js +179 -0
  100. package/dist/server-module-plugin/sbom-builder.js.map +1 -0
  101. package/dist/service-portal/angular-provider-plugin.d.ts +2 -0
  102. package/dist/service-portal/angular-provider-plugin.js +78 -0
  103. package/dist/service-portal/angular-provider-plugin.js.map +1 -0
  104. package/dist/service-portal/dependency-plugin.d.ts +2 -0
  105. package/dist/service-portal/dependency-plugin.js +235 -0
  106. package/dist/service-portal/dependency-plugin.js.map +1 -0
  107. package/dist/service-portal/widget-plugin.d.ts +6 -0
  108. package/dist/service-portal/widget-plugin.js +230 -0
  109. package/dist/service-portal/widget-plugin.js.map +1 -0
  110. package/dist/static-content-plugin.d.ts +2 -0
  111. package/dist/static-content-plugin.js +272 -0
  112. package/dist/static-content-plugin.js.map +1 -0
  113. package/dist/table-plugin.d.ts +3 -0
  114. package/dist/table-plugin.js +1324 -0
  115. package/dist/table-plugin.js.map +1 -0
  116. package/dist/ui-action-plugin.d.ts +2 -0
  117. package/dist/ui-action-plugin.js +291 -0
  118. package/dist/ui-action-plugin.js.map +1 -0
  119. package/dist/ui-page-plugin.d.ts +2 -0
  120. package/dist/ui-page-plugin.js +165 -0
  121. package/dist/ui-page-plugin.js.map +1 -0
  122. package/dist/user-preference-plugin.d.ts +15 -0
  123. package/dist/user-preference-plugin.js +63 -0
  124. package/dist/user-preference-plugin.js.map +1 -0
  125. package/dist/utils.d.ts +17 -0
  126. package/dist/utils.js +72 -0
  127. package/dist/utils.js.map +1 -0
  128. package/dist/view-plugin.d.ts +2 -0
  129. package/dist/view-plugin.js +45 -0
  130. package/dist/view-plugin.js.map +1 -0
  131. package/package.json +17 -13
  132. package/src/acl-plugin.ts +256 -0
  133. package/src/application-menu-plugin.ts +109 -0
  134. package/src/arrow-function-plugin.ts +127 -0
  135. package/src/atf/step-configs.ts +2284 -0
  136. package/src/atf/test-plugin.ts +728 -0
  137. package/src/basic-syntax-plugin.ts +729 -0
  138. package/src/business-rule-plugin.ts +266 -0
  139. package/src/call-expression-plugin.ts +202 -0
  140. package/src/client-script-plugin.ts +170 -0
  141. package/src/column/column-helper.ts +119 -0
  142. package/src/column/column-to-record.ts +131 -0
  143. package/src/column-plugin.ts +506 -0
  144. package/src/cross-scope-privilege-plugin.ts +82 -0
  145. package/src/html-import-plugin.ts +79 -0
  146. package/src/index.ts +39 -21
  147. package/src/json-plugin.ts +128 -0
  148. package/src/list-plugin.ts +222 -0
  149. package/src/now-config-plugin.ts +194 -0
  150. package/src/now-id-plugin.ts +78 -0
  151. package/src/now-include-plugin.ts +140 -0
  152. package/src/now-ref-plugin.ts +48 -0
  153. package/src/now-unresolved-plugin.ts +30 -0
  154. package/src/package-json-plugin.ts +87 -0
  155. package/src/property-plugin.ts +118 -0
  156. package/src/record-plugin.ts +171 -0
  157. package/src/repack/index.ts +10 -1
  158. package/src/repack/lint/Rules.ts +5 -4
  159. package/src/repack/lint/index.ts +1 -1
  160. package/src/rest-api-plugin.ts +651 -0
  161. package/src/role-plugin.ts +128 -0
  162. package/src/script-action-plugin.ts +63 -0
  163. package/src/script-include-plugin.ts +110 -0
  164. package/src/server-module-plugin/index.ts +470 -0
  165. package/src/server-module-plugin/sbom-builder.ts +183 -0
  166. package/src/service-portal/angular-provider-plugin.ts +83 -0
  167. package/src/service-portal/dependency-plugin.ts +284 -0
  168. package/src/service-portal/widget-plugin.ts +263 -0
  169. package/src/static-content-plugin.ts +254 -0
  170. package/src/table-plugin.ts +1698 -0
  171. package/src/ui-action-plugin.ts +324 -0
  172. package/src/ui-page-plugin.ts +168 -0
  173. package/src/user-preference-plugin.ts +62 -0
  174. package/src/utils.ts +69 -0
  175. package/src/view-plugin.ts +46 -0
  176. package/dist/AttachmentPlugin.d.ts +0 -254
  177. package/dist/AttachmentPlugin.js +0 -220
  178. package/dist/AttachmentPlugin.js.map +0 -1
  179. package/dist/BusinessRulePlugin.d.ts +0 -30
  180. package/dist/BusinessRulePlugin.js +0 -149
  181. package/dist/BusinessRulePlugin.js.map +0 -1
  182. package/dist/CrossScopePrivilegePlugin.d.ts +0 -35
  183. package/dist/CrossScopePrivilegePlugin.js +0 -80
  184. package/dist/CrossScopePrivilegePlugin.js.map +0 -1
  185. package/dist/DefaultPlugin.d.ts +0 -86
  186. package/dist/DefaultPlugin.js +0 -226
  187. package/dist/DefaultPlugin.js.map +0 -1
  188. package/dist/HtmlTemplatePlugin.d.ts +0 -21
  189. package/dist/HtmlTemplatePlugin.js +0 -29
  190. package/dist/HtmlTemplatePlugin.js.map +0 -1
  191. package/dist/IdPlugin.d.ts +0 -28
  192. package/dist/IdPlugin.js +0 -68
  193. package/dist/IdPlugin.js.map +0 -1
  194. package/dist/IncludePlugin.d.ts +0 -34
  195. package/dist/IncludePlugin.js +0 -155
  196. package/dist/IncludePlugin.js.map +0 -1
  197. package/dist/JsonPlugin.d.ts +0 -28
  198. package/dist/JsonPlugin.js +0 -69
  199. package/dist/JsonPlugin.js.map +0 -1
  200. package/dist/ListPlugin.d.ts +0 -93
  201. package/dist/ListPlugin.js +0 -456
  202. package/dist/ListPlugin.js.map +0 -1
  203. package/dist/NowConfigPlugin.d.ts +0 -45
  204. package/dist/NowConfigPlugin.js +0 -64
  205. package/dist/NowConfigPlugin.js.map +0 -1
  206. package/dist/PackageJsonPlugin.d.ts +0 -34
  207. package/dist/PackageJsonPlugin.js +0 -63
  208. package/dist/PackageJsonPlugin.js.map +0 -1
  209. package/dist/PropertyPlugin.d.ts +0 -51
  210. package/dist/PropertyPlugin.js +0 -181
  211. package/dist/PropertyPlugin.js.map +0 -1
  212. package/dist/ScriptTemplatePlugin.d.ts +0 -13
  213. package/dist/ScriptTemplatePlugin.js +0 -55
  214. package/dist/ScriptTemplatePlugin.js.map +0 -1
  215. package/dist/ServerModulePlugin.d.ts +0 -75
  216. package/dist/ServerModulePlugin.js +0 -368
  217. package/dist/ServerModulePlugin.js.map +0 -1
  218. package/dist/UserPreferencePlugin.d.ts +0 -19
  219. package/dist/UserPreferencePlugin.js +0 -32
  220. package/dist/UserPreferencePlugin.js.map +0 -1
  221. package/dist/aclAndRole/AclPlugin.d.ts +0 -82
  222. package/dist/aclAndRole/AclPlugin.js +0 -262
  223. package/dist/aclAndRole/AclPlugin.js.map +0 -1
  224. package/dist/aclAndRole/RolePlugin.d.ts +0 -66
  225. package/dist/aclAndRole/RolePlugin.js +0 -179
  226. package/dist/aclAndRole/RolePlugin.js.map +0 -1
  227. package/dist/aclAndRole/Util.d.ts +0 -3
  228. package/dist/aclAndRole/Util.js +0 -90
  229. package/dist/aclAndRole/Util.js.map +0 -1
  230. package/dist/app/ApplicationMenuPlugin.d.ts +0 -34
  231. package/dist/app/ApplicationMenuPlugin.js +0 -112
  232. package/dist/app/ApplicationMenuPlugin.js.map +0 -1
  233. package/dist/db/ColumnPlugins.d.ts +0 -750
  234. package/dist/db/ColumnPlugins.js +0 -114
  235. package/dist/db/ColumnPlugins.js.map +0 -1
  236. package/dist/db/DBUtils.d.ts +0 -2
  237. package/dist/db/DBUtils.js +0 -27
  238. package/dist/db/DBUtils.js.map +0 -1
  239. package/dist/db/DocumentationPlugin.d.ts +0 -67
  240. package/dist/db/DocumentationPlugin.js +0 -258
  241. package/dist/db/DocumentationPlugin.js.map +0 -1
  242. package/dist/db/LicensingPlugin.d.ts +0 -60
  243. package/dist/db/LicensingPlugin.js +0 -117
  244. package/dist/db/LicensingPlugin.js.map +0 -1
  245. package/dist/db/RecordPlugin.d.ts +0 -133
  246. package/dist/db/RecordPlugin.js +0 -337
  247. package/dist/db/RecordPlugin.js.map +0 -1
  248. package/dist/db/TablePlugin.d.ts +0 -231
  249. package/dist/db/TablePlugin.js +0 -1628
  250. package/dist/db/TablePlugin.js.map +0 -1
  251. package/dist/db/index.d.ts +0 -6
  252. package/dist/db/index.js +0 -32
  253. package/dist/db/index.js.map +0 -1
  254. package/dist/scriptedRESTAPI/RESTDeserializationUtils.d.ts +0 -10
  255. package/dist/scriptedRESTAPI/RESTDeserializationUtils.js +0 -373
  256. package/dist/scriptedRESTAPI/RESTDeserializationUtils.js.map +0 -1
  257. package/dist/scriptedRESTAPI/RESTSerializationUtils.d.ts +0 -13
  258. package/dist/scriptedRESTAPI/RESTSerializationUtils.js +0 -177
  259. package/dist/scriptedRESTAPI/RESTSerializationUtils.js.map +0 -1
  260. package/dist/scriptedRESTAPI/RestApiPlugin.d.ts +0 -81
  261. package/dist/scriptedRESTAPI/RestApiPlugin.js +0 -345
  262. package/dist/scriptedRESTAPI/RestApiPlugin.js.map +0 -1
  263. package/dist/scriptedRESTAPI/RestSchemaUtils.d.ts +0 -190
  264. package/dist/scriptedRESTAPI/RestSchemaUtils.js +0 -53
  265. package/dist/scriptedRESTAPI/RestSchemaUtils.js.map +0 -1
  266. package/dist/scriptedRESTAPI/RestUtils.d.ts +0 -69
  267. package/dist/scriptedRESTAPI/RestUtils.js +0 -497
  268. package/dist/scriptedRESTAPI/RestUtils.js.map +0 -1
  269. package/dist/scripts/ClientScriptPlugin.d.ts +0 -64
  270. package/dist/scripts/ClientScriptPlugin.js +0 -170
  271. package/dist/scripts/ClientScriptPlugin.js.map +0 -1
  272. package/dist/scripts/scriptUtils.d.ts +0 -1
  273. package/dist/scripts/scriptUtils.js +0 -9
  274. package/dist/scripts/scriptUtils.js.map +0 -1
  275. package/dist/uxf/ExperiencePlugin.d.ts +0 -45
  276. package/dist/uxf/ExperiencePlugin.js +0 -61
  277. package/dist/uxf/ExperiencePlugin.js.map +0 -1
  278. package/dist/uxf/RoutesPlugin.d.ts +0 -29
  279. package/dist/uxf/RoutesPlugin.js +0 -181
  280. package/dist/uxf/RoutesPlugin.js.map +0 -1
  281. package/dist/uxf/UxfFormulaParser/cleanUxValue.d.ts +0 -4
  282. package/dist/uxf/UxfFormulaParser/cleanUxValue.js +0 -65
  283. package/dist/uxf/UxfFormulaParser/cleanUxValue.js.map +0 -1
  284. package/dist/uxf/UxfFormulaParser/grammerParser/api.d.ts +0 -189
  285. package/dist/uxf/UxfFormulaParser/grammerParser/api.js +0 -158
  286. package/dist/uxf/UxfFormulaParser/grammerParser/api.js.map +0 -1
  287. package/dist/uxf/UxfFormulaParser/grammerParser/clientTransformMap.d.ts +0 -13
  288. package/dist/uxf/UxfFormulaParser/grammerParser/clientTransformMap.js +0 -604
  289. package/dist/uxf/UxfFormulaParser/grammerParser/clientTransformMap.js.map +0 -1
  290. package/dist/uxf/UxfFormulaParser/grammerParser/grammarParser.d.ts +0 -12
  291. package/dist/uxf/UxfFormulaParser/grammerParser/grammarParser.js +0 -551
  292. package/dist/uxf/UxfFormulaParser/grammerParser/grammarParser.js.map +0 -1
  293. package/dist/uxf/UxfFormulaParser/grammerParser/spanHelpers.d.ts +0 -31
  294. package/dist/uxf/UxfFormulaParser/grammerParser/spanHelpers.js +0 -64
  295. package/dist/uxf/UxfFormulaParser/grammerParser/spanHelpers.js.map +0 -1
  296. package/dist/uxf/UxfFormulaParser/index.d.ts +0 -3
  297. package/dist/uxf/UxfFormulaParser/index.js +0 -11
  298. package/dist/uxf/UxfFormulaParser/index.js.map +0 -1
  299. package/dist/uxf/UxfFormulaParser/parser.d.ts +0 -8
  300. package/dist/uxf/UxfFormulaParser/parser.js +0 -87
  301. package/dist/uxf/UxfFormulaParser/parser.js.map +0 -1
  302. package/dist/uxf/UxfFormulaParser/utils/getErrorMsg.d.ts +0 -8
  303. package/dist/uxf/UxfFormulaParser/utils/getErrorMsg.js +0 -17
  304. package/dist/uxf/UxfFormulaParser/utils/getErrorMsg.js.map +0 -1
  305. package/dist/uxf/constants.d.ts +0 -2
  306. package/dist/uxf/constants.js +0 -8
  307. package/dist/uxf/constants.js.map +0 -1
  308. package/dist/uxf/index.d.ts +0 -2
  309. package/dist/uxf/index.js +0 -11
  310. package/dist/uxf/index.js.map +0 -1
  311. package/dist/uxf/tectonicIdGenerator.d.ts +0 -12
  312. package/dist/uxf/tectonicIdGenerator.js +0 -79
  313. package/dist/uxf/tectonicIdGenerator.js.map +0 -1
  314. package/src/AttachmentPlugin.ts +0 -268
  315. package/src/BusinessRulePlugin.ts +0 -238
  316. package/src/CrossScopePrivilegePlugin.ts +0 -115
  317. package/src/DefaultPlugin.ts +0 -288
  318. package/src/HtmlTemplatePlugin.ts +0 -31
  319. package/src/IdPlugin.ts +0 -74
  320. package/src/IncludePlugin.ts +0 -206
  321. package/src/JsonPlugin.ts +0 -76
  322. package/src/ListPlugin.ts +0 -570
  323. package/src/NowConfigPlugin.ts +0 -69
  324. package/src/PackageJsonPlugin.ts +0 -68
  325. package/src/PropertyPlugin.ts +0 -237
  326. package/src/ScriptTemplatePlugin.ts +0 -53
  327. package/src/ServerModulePlugin.ts +0 -480
  328. package/src/UserPreferencePlugin.ts +0 -45
  329. package/src/aclAndRole/AclPlugin.ts +0 -420
  330. package/src/aclAndRole/RolePlugin.ts +0 -254
  331. package/src/aclAndRole/Util.ts +0 -113
  332. package/src/app/ApplicationMenuPlugin.ts +0 -165
  333. package/src/db/ColumnPlugins.ts +0 -114
  334. package/src/db/DBUtils.ts +0 -36
  335. package/src/db/DocumentationPlugin.ts +0 -316
  336. package/src/db/LicensingPlugin.ts +0 -138
  337. package/src/db/RecordPlugin.ts +0 -459
  338. package/src/db/TablePlugin.ts +0 -2070
  339. package/src/db/index.ts +0 -6
  340. package/src/scriptedRESTAPI/RESTDeserializationUtils.ts +0 -419
  341. package/src/scriptedRESTAPI/RESTSerializationUtils.ts +0 -228
  342. package/src/scriptedRESTAPI/RestApiPlugin.ts +0 -469
  343. package/src/scriptedRESTAPI/RestSchemaUtils.ts +0 -72
  344. package/src/scriptedRESTAPI/RestUtils.ts +0 -569
  345. package/src/scripts/ClientScriptPlugin.ts +0 -257
  346. package/src/scripts/scriptUtils.ts +0 -5
  347. package/src/uxf/ExperiencePlugin.ts +0 -67
  348. package/src/uxf/RoutesPlugin.ts +0 -211
  349. package/src/uxf/UxfFormulaParser/cleanUxValue.ts +0 -73
  350. package/src/uxf/UxfFormulaParser/grammerParser/api.js +0 -166
  351. package/src/uxf/UxfFormulaParser/grammerParser/clientTransformMap.js +0 -606
  352. package/src/uxf/UxfFormulaParser/grammerParser/grammarParser.js +0 -551
  353. package/src/uxf/UxfFormulaParser/grammerParser/spanHelpers.js +0 -65
  354. package/src/uxf/UxfFormulaParser/index.ts +0 -4
  355. package/src/uxf/UxfFormulaParser/parser.ts +0 -64
  356. package/src/uxf/UxfFormulaParser/utils/getErrorMsg.ts +0 -13
  357. package/src/uxf/constants.ts +0 -4
  358. package/src/uxf/index.ts +0 -2
  359. package/src/uxf/tectonicIdGenerator.ts +0 -78
@@ -1,480 +0,0 @@
1
- import {
2
- BooleanData,
3
- Context,
4
- Data,
5
- EntityData,
6
- ExtractionResult,
7
- FluentDiagnostic,
8
- LinkedDocument,
9
- ObjectData,
10
- Plugin,
11
- StringData,
12
- sanitizeNestedCdataTags,
13
- } from '@servicenow/sdk-build-core'
14
- import {
15
- Diagnostic,
16
- FileSystem,
17
- TsMorphFileSystemWrapper,
18
- TypeScriptDiagnostic,
19
- path,
20
- path as pathModule,
21
- ts,
22
- SupportedNode,
23
- } from '@servicenow/sdk-project'
24
-
25
- import type { DependencyNode } from '@servicenow/sdk-repack'
26
-
27
- type DependencyData = {
28
- name: string
29
- version: string
30
- file: string
31
- fileContent: string
32
- }
33
-
34
- export class ModuleEntityData extends EntityData {
35
- constructor(path: string, content: string, node: SupportedNode, context: Context) {
36
- const { scope } = context.app.config
37
- const { name: packageName, version } = context.app.package
38
- const relativePath = pathModule.relative(context.app.rootDir, path)
39
-
40
- // Module resolution at runtime requires this format
41
- const modulePath = pathModule.join(scope, packageName, version, relativePath)
42
-
43
- super(
44
- 'module',
45
- context.registerExplicitId('sys_module', relativePath.replaceAll(/[./\\]/g, '_')),
46
- new ObjectData(
47
- {
48
- path: new StringData(modulePath, node),
49
- content: new StringData(content, node),
50
- },
51
- node
52
- ),
53
- node
54
- )
55
- }
56
- }
57
-
58
- export class ModuleFunctionData extends ObjectData<{ exportName: string; modulePath: string; isDefault: boolean }> {
59
- constructor(name: string, module: ModuleEntityData, node: ts.FunctionDeclaration | ts.VariableDeclaration) {
60
- super(
61
- {
62
- exportName: new StringData(name, node),
63
- modulePath: new StringData(module.getPropertyOrThrow('path', 'string').getValue(), node),
64
- isDefault: new BooleanData(node.isDefaultExport(), node),
65
- },
66
- node
67
- )
68
- }
69
-
70
- getGlueCode(callExpressionProvider: (functionName: string) => string): string {
71
- return ModuleFunctionData.getGlueCode(this, callExpressionProvider)
72
- }
73
-
74
- static getGlueCode(
75
- scriptData: Data | ReturnType<ModuleFunctionData['getValue']> | undefined,
76
- callExpressionProvider: (functionName: string) => string
77
- ): string {
78
- if (Data.isString(scriptData)) {
79
- return scriptData.getValue()
80
- } else if (!scriptData) {
81
- return ''
82
- }
83
-
84
- scriptData = scriptData instanceof ModuleFunctionData ? scriptData.getValue() : scriptData
85
- if (scriptData instanceof Data) {
86
- throw new Error(`Unsupported script data type: ${scriptData.getNode().getText()}`)
87
- }
88
-
89
- const { exportName, modulePath, isDefault } = scriptData
90
- return isDefault
91
- ? `const ${exportName} = require('${modulePath}').default;\n${callExpressionProvider(exportName)};`
92
- : `const { ${exportName} } = require('${modulePath}');\n${callExpressionProvider(exportName)};`
93
- }
94
- }
95
-
96
- function applyModulePathMappings(path: string, context: Context) {
97
- const { modulePaths } = context.app.config
98
- if (!modulePaths) {
99
- return path
100
- }
101
- const relativePath = pathModule.relative(context.app.rootDir, path)
102
-
103
- // TODO: Naive implementation for now that just supports simple patterns. We can explore supporting more complex patterns later.
104
- for (const [source, target] of Object.entries(modulePaths)) {
105
- const match = relativePath.match(`${source.replace(/\./, '\\.').replace(/\*+/, '(.*)')}$`)?.[1]
106
- if (match !== undefined) {
107
- return pathModule.join(context.app.rootDir, target.replace(/\*+/, match))
108
- }
109
- }
110
-
111
- return path
112
- }
113
-
114
- /**
115
- * Removes invalid control characters that would cause XML parsing errors.
116
- * Regex taken from: https://github.com/oozcitak/xmlbuilder-js/blob/b20136cd1591d0f17ab2f184053c7150150428b2/src/XMLStringifier.coffee#L119C15-L119C127
117
- */
118
- function removeInvalidControlCharacters(content: string): string {
119
- return content.replace(
120
- // eslint-disable-next-line no-control-regex
121
- /[\0-\x08\x0B\f\x0E-\x1F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/g,
122
- ''
123
- )
124
- }
125
-
126
- function sanitizeModuleContent(content: string): string {
127
- return sanitizeNestedCdataTags(removeInvalidControlCharacters(content))
128
- }
129
-
130
- function extractFunctionDeclaration(
131
- node: ts.FunctionDeclaration | ts.VariableDeclaration,
132
- context: Context
133
- ): ExtractionResult<ModuleFunctionData> {
134
- const result = context.extractEntities(node.getSourceFile())
135
-
136
- if (!result.handled) {
137
- const path = node.getSourceFile().getFilePath()
138
- const dir = `${context.app.config.tsconfigPath ? 'tsconfig.rootDir' : 'serverModulesDir'}`
139
- return {
140
- handled: true,
141
- diagnostics: [
142
- new FluentDiagnostic(
143
- node,
144
- `File ${path} is not under ${dir}. ${dir} is expected to contain all source files.`
145
- ),
146
- ],
147
- data: new ModuleFunctionData('name', new ModuleEntityData('', '', node, context), node),
148
- }
149
- }
150
-
151
- const module = result.data
152
- if (!(module instanceof ModuleEntityData)) {
153
- return { handled: false }
154
- }
155
-
156
- const name = node.getName() ?? 'functionModule'
157
- if (!name) {
158
- return {
159
- handled: true,
160
- diagnostics: [new FluentDiagnostic(node, 'Function declaration must have a name')],
161
- }
162
- }
163
-
164
- return {
165
- handled: true,
166
- diagnostics: [],
167
- data: new ModuleFunctionData(name, module, node),
168
- }
169
- }
170
-
171
- function getEmitOutput(file: ts.SourceFile, fs: FileSystem, context: Context): string | Diagnostic[] {
172
- const path = file.getFilePath()
173
- if (!path.endsWith('.ts')) {
174
- return file.getFullText()
175
- }
176
-
177
- let project
178
- let sourceFile
179
- if (context.app.config.tsconfigPath) {
180
- project = new ts.Project({
181
- fileSystem: new TsMorphFileSystemWrapper(fs),
182
- tsConfigFilePath: pathModule.join(context.app.rootDir, context.app.config.tsconfigPath),
183
- })
184
- sourceFile = project.getSourceFile(path)
185
- if (!sourceFile) {
186
- return [new FluentDiagnostic(file, `Failed to get emit output for module: ${path}`)]
187
- }
188
- } else {
189
- project = new ts.Project({
190
- fileSystem: new TsMorphFileSystemWrapper(fs),
191
- compilerOptions: {
192
- target: ts.ScriptTarget.ES2022,
193
- module: ts.ModuleKind.ES2022,
194
- declaration: false,
195
- sourceMap: false,
196
- },
197
- })
198
- sourceFile = project.createSourceFile('module.ts', file.getFullText(), {
199
- overwrite: true,
200
- scriptKind: ts.ScriptKind.TS,
201
- })
202
- }
203
-
204
- const emitResult = sourceFile.getEmitOutput()
205
-
206
- const diagnostics = emitResult
207
- .getDiagnostics()
208
- .map((d) => new TypeScriptDiagnostic(d))
209
- .filter((d) => d.level === Diagnostic.Level.Error)
210
-
211
- if (diagnostics.length > 0) {
212
- return diagnostics
213
- }
214
-
215
- const output = emitResult.getOutputFiles()[0]
216
- if (!output) {
217
- return [new FluentDiagnostic(file, `Failed to get emit output for module: ${path}`)]
218
- }
219
-
220
- return output.getText()
221
- }
222
-
223
- function isValidRequireCall(callExpression: ts.CallExpression, requirePath: ts.StringLiteral): boolean {
224
- const expression = callExpression.getExpression()
225
- const isRequire = ts.Node.isIdentifier(expression) && expression.getText() === 'require'
226
- const isRelativePath =
227
- requirePath.getLiteralText().startsWith('../') || requirePath.getLiteralText().startsWith('./')
228
- return isRequire && !isRelativePath
229
- }
230
-
231
- const dependencyIgnoreList = ['@servicenow/glide', '@servicenow/sdk']
232
- function ignoreDependency(name: string): boolean {
233
- return dependencyIgnoreList.some((dependency) => name.startsWith(dependency))
234
- }
235
-
236
- function isKeysFile(path, context): boolean {
237
- return path === context.getKeysSourceFile().getFilePath()
238
- }
239
-
240
- function validateAndGetModuleSpecifier(name: string): { name: string; entry?: string } {
241
- const scopedRegex = /@[a-z\d][\w\-.]+\/[a-z\d][\w\-.]*/gi
242
- scopedRegex.test(name)
243
- const idx = scopedRegex.lastIndex
244
-
245
- const isSubPathImport = name.indexOf('/', idx)
246
- if (isSubPathImport > 0) {
247
- return { name: name.slice(0, isSubPathImport), entry: name.slice(isSubPathImport + 1) }
248
- }
249
- return { name }
250
- }
251
-
252
- function extractDependency(
253
- node: ts.ImportDeclaration | ts.ExportDeclaration | ts.CallExpression,
254
- context: Context
255
- ): ExtractionResult<EntityData<{ name: string; version: string; [entry: string]: string }>> {
256
- const path = node.getSourceFile().getFilePath()
257
- if (isKeysFile(path, context)) {
258
- return { handled: false }
259
- }
260
-
261
- let moduleName: string | undefined
262
- if (ts.Node.isImportDeclaration(node) && !node.isModuleSpecifierRelative()) {
263
- moduleName = node.getModuleSpecifierValue()
264
- }
265
- if (ts.Node.isExportDeclaration(node) && node.hasModuleSpecifier() && !node.isModuleSpecifierRelative()) {
266
- moduleName = node.getModuleSpecifierValue()
267
- }
268
-
269
- if (ts.Node.isCallExpression(node)) {
270
- const args = node.getArguments()
271
- const requirePath = args[0]
272
- if (!ts.Node.isStringLiteral(requirePath) || !isValidRequireCall(node, requirePath)) {
273
- return { handled: false }
274
- }
275
-
276
- moduleName = requirePath.getLiteralValue()
277
- }
278
-
279
- if (!moduleName || ignoreDependency(moduleName)) {
280
- return { handled: false }
281
- }
282
- const dependencies = context.app.package.dependencies ?? {}
283
- const { name, entry } = validateAndGetModuleSpecifier(moduleName)
284
-
285
- if (!(name in dependencies)) {
286
- return {
287
- handled: true,
288
- diagnostics: [new FluentDiagnostic(node, `Dependency ${name} is not found in package.json`)],
289
- }
290
- }
291
- const entryPoint = entry ?? '.'
292
- const entityData = new EntityData(
293
- 'dependency',
294
- name,
295
- new ObjectData(
296
- {
297
- name: new StringData(name, node),
298
- [entryPoint]: new StringData(entryPoint, node),
299
- version: new StringData(dependencies[name]!, node),
300
- },
301
- node
302
- ),
303
- node
304
- )
305
-
306
- return {
307
- handled: true,
308
- diagnostics: [],
309
- data: entityData,
310
- }
311
- }
312
-
313
- export default Plugin({
314
- name: 'ServerModule',
315
- extractors: {
316
- raw: {
317
- module: {
318
- FunctionDeclaration: extractFunctionDeclaration,
319
- FunctionExpression(node, context) {
320
- const parent = node.getParentIfKind(ts.SyntaxKind.VariableDeclaration)
321
- if (!parent) {
322
- return { handled: false }
323
- }
324
-
325
- return extractFunctionDeclaration(parent, context)
326
- },
327
- },
328
- },
329
- entity: {
330
- module: {
331
- SourceFile(file, context) {
332
- const path = file.getFilePath()
333
- if (isKeysFile(path, context)) {
334
- return { handled: false }
335
- }
336
-
337
- const mappedPath = applyModulePathMappings(path, context)
338
- const mappedFile =
339
- context.compiler.getSourceFile(mappedPath) ??
340
- context.compiler.addSourceFileAtPathIfExists(mappedPath)
341
-
342
- if (!mappedFile) {
343
- context.logger.debug(
344
- `Module path was mapped from '${path}' to '${mappedPath}' but no file exists at the mapped location.`
345
- )
346
- return { handled: false }
347
- }
348
-
349
- const content = getEmitOutput(mappedFile, context.fs, context)
350
- if (Array.isArray(content)) {
351
- return {
352
- handled: false,
353
- diagnostics: content,
354
- }
355
- }
356
-
357
- return {
358
- handled: true,
359
- diagnostics: [],
360
- data: new ModuleEntityData(mappedPath, content, file, context),
361
- }
362
- },
363
- ImportDeclaration: extractDependency,
364
- ExportDeclaration: extractDependency,
365
- CallExpression: extractDependency,
366
- },
367
- },
368
- },
369
- composers: {
370
- entity: {
371
- module(module) {
372
- if (module.getProperty('path', 'string')?.getValue().endsWith('package.json')) {
373
- return Promise.resolve(undefined)
374
- }
375
-
376
- return Promise.resolve({
377
- kind: 'module',
378
- guid: module.getGuid(),
379
- node: module.getNode(),
380
- data: module.getValue(),
381
- })
382
- },
383
- async dependency(module, context) {
384
- const { Lint } = await import('./repack/lint/index.js')
385
- const { RepackService } = await import('./repack/index.js')
386
- const { name, version, ...entry } = module.getProperties()
387
-
388
- const id = `${name?.getValue()}@${version?.getValue()}`
389
- const repack = await RepackService.create(context.logger, context.fs, context.app.rootDir)
390
- const buildResult = await repack.execute({
391
- id,
392
- entry: Object.keys(entry),
393
- })
394
- if (!buildResult) {
395
- throw new Error(`Failed to build dependency ${id}`)
396
- }
397
-
398
- const builtEntities: LinkedDocument[] = []
399
-
400
- for (const currentDep of buildResult) {
401
- const { packagePath, files, updatedManifest } = currentDep as DependencyNode
402
- const { name, version } = updatedManifest
403
- const currentId = `${name}@${version}`
404
-
405
- for (const file of files) {
406
- const guid = context.registerCompositeId('sys_module', {
407
- module: currentId,
408
- file: file,
409
- })
410
- const lint = new Lint()
411
- const fileExt = path.extname(file)
412
- const fileContent = context.fs.readFileSync(path.join(packagePath, file)).toString('utf-8')
413
- if (/(.js|.cjs|.mjs)$/.test(fileExt)) {
414
- const result = await lint.check(fileContent)
415
-
416
- if (result) {
417
- context.logger.warn(`Use of unsupported APIs detected in npm dependency ${name}`)
418
- context.logger.warn(result)
419
- }
420
- }
421
-
422
- builtEntities.push({
423
- kind: 'dependency',
424
- guid: guid,
425
- node: module.getNode(),
426
- data: {
427
- name,
428
- version,
429
- packagePath,
430
- file,
431
- fileContent,
432
- },
433
- })
434
- }
435
- }
436
-
437
- return builtEntities
438
- },
439
- },
440
- },
441
- serializers: {
442
- module(module, context) {
443
- const { path, content } = module.data as any
444
-
445
- return {
446
- name: `sys_module_${module.guid}.xml`,
447
- directory: 'update',
448
- content: `<?xml version="1.0"?>
449
- <record_update>
450
- <sys_module action="INSERT_OR_UPDATE">
451
- <sys_scope>${context.app.config.scopeId}</sys_scope>
452
- <sys_id>${module.guid}</sys_id>
453
- <path>${path}</path>
454
- <external_source>false</external_source>
455
- <content><![CDATA[${sanitizeModuleContent(content)}]]></content>
456
- </sys_module>
457
- </record_update>`,
458
- }
459
- },
460
- dependency(module, context) {
461
- const { name, version, file, fileContent } = module.data as DependencyData
462
- const modulePath = path.join(context.app.config.scope, name, version, file)
463
-
464
- return {
465
- name: `sys_module_${module.guid}.xml`,
466
- directory: 'update',
467
- content: `<?xml version="1.0"?>
468
- <record_update>
469
- <sys_module action="INSERT_OR_UPDATE">
470
- <sys_scope>${context.app.config.scopeId}</sys_scope>
471
- <sys_id>${module.guid}</sys_id>
472
- <path>${modulePath}</path>
473
- <external_source>true</external_source>
474
- <content><![CDATA[${sanitizeModuleContent(fileContent)}]]></content>
475
- </sys_module>
476
- </record_update>`,
477
- }
478
- },
479
- },
480
- })
@@ -1,45 +0,0 @@
1
- import { UserPreference, UserPreferenceConfig } from '@servicenow/sdk-core/runtime/app'
2
- import { EntityData, ObjectData, Plugin, StringData } from '@servicenow/sdk-build-core'
3
- import { extractCallExpressionAsRecord } from './db/RecordPlugin'
4
- import { Diagnostic } from '@servicenow/sdk-project'
5
- import { Record } from '@servicenow/sdk-core/runtime/db'
6
-
7
- function asRecord(entity: EntityData<UserPreferenceConfig>): ObjectData<Record> {
8
- const node = entity.getNode()
9
- const { $id, value, ...rest } = entity.getProperties()
10
- return new ObjectData(
11
- {
12
- table: new StringData('sys_user_preference', node),
13
- $id,
14
- data: new ObjectData(
15
- {
16
- ...rest,
17
- value: new StringData(value.getValue().toString(), value.getNode()),
18
- },
19
- node
20
- ),
21
- },
22
- node
23
- )
24
- }
25
-
26
- export default Plugin({
27
- name: 'UserPreference',
28
- ownedTables: {
29
- sys_user_preference: { diagnosticLevel: Diagnostic.Level.Warn },
30
- },
31
- extractors: {
32
- entity: {
33
- fluent: {
34
- CallExpression: (node, context) =>
35
- extractCallExpressionAsRecord(
36
- UserPreference,
37
- asRecord,
38
- (pref) => context.registerExplicitId('sys_user_preference', pref.$id as string),
39
- node,
40
- context
41
- ),
42
- },
43
- },
44
- },
45
- })