@servicenow/sdk-build-plugins 4.2.0 → 4.4.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 (349) hide show
  1. package/dist/acl-plugin.js +11 -0
  2. package/dist/acl-plugin.js.map +1 -1
  3. package/dist/applicability-plugin.d.ts +2 -0
  4. package/dist/applicability-plugin.js +72 -0
  5. package/dist/applicability-plugin.js.map +1 -0
  6. package/dist/atf/test-plugin.js +5 -2
  7. package/dist/atf/test-plugin.js.map +1 -1
  8. package/dist/basic-syntax-plugin.js +7 -1
  9. package/dist/basic-syntax-plugin.js.map +1 -1
  10. package/dist/business-rule-plugin.js +1 -0
  11. package/dist/business-rule-plugin.js.map +1 -1
  12. package/dist/call-expression-plugin.js +1 -107
  13. package/dist/call-expression-plugin.js.map +1 -1
  14. package/dist/column/column-to-record.d.ts +10 -3
  15. package/dist/column/column-to-record.js +44 -7
  16. package/dist/column/column-to-record.js.map +1 -1
  17. package/dist/column-plugin.d.ts +3 -1
  18. package/dist/column-plugin.js +12 -12
  19. package/dist/column-plugin.js.map +1 -1
  20. package/dist/dashboard/dashboard-component-property-defaults.d.ts +152 -0
  21. package/dist/dashboard/dashboard-component-property-defaults.js +264 -0
  22. package/dist/dashboard/dashboard-component-property-defaults.js.map +1 -0
  23. package/dist/dashboard/dashboard-component-resolver.d.ts +13 -0
  24. package/dist/dashboard/dashboard-component-resolver.js +69 -0
  25. package/dist/dashboard/dashboard-component-resolver.js.map +1 -0
  26. package/dist/dashboard/dashboard-plugin.d.ts +12 -0
  27. package/dist/dashboard/dashboard-plugin.js +397 -0
  28. package/dist/dashboard/dashboard-plugin.js.map +1 -0
  29. package/dist/data-plugin.d.ts +3 -0
  30. package/dist/data-plugin.js +61 -113
  31. package/dist/data-plugin.js.map +1 -1
  32. package/dist/email-notification-plugin.d.ts +2 -0
  33. package/dist/email-notification-plugin.js +541 -0
  34. package/dist/email-notification-plugin.js.map +1 -0
  35. package/dist/flow/constants/flow-plugin-constants.d.ts +58 -0
  36. package/dist/flow/constants/flow-plugin-constants.js +70 -0
  37. package/dist/flow/constants/flow-plugin-constants.js.map +1 -0
  38. package/dist/flow/flow-logic/flow-logic-constants.d.ts +38 -0
  39. package/dist/flow/flow-logic/flow-logic-constants.js +118 -0
  40. package/dist/flow/flow-logic/flow-logic-constants.js.map +1 -0
  41. package/dist/flow/flow-logic/flow-logic-diagnostics.d.ts +19 -0
  42. package/dist/flow/flow-logic/flow-logic-diagnostics.js +503 -0
  43. package/dist/flow/flow-logic/flow-logic-diagnostics.js.map +1 -0
  44. package/dist/flow/flow-logic/flow-logic-plugin-helpers.d.ts +62 -0
  45. package/dist/flow/flow-logic/flow-logic-plugin-helpers.js +2092 -0
  46. package/dist/flow/flow-logic/flow-logic-plugin-helpers.js.map +1 -0
  47. package/dist/flow/flow-logic/flow-logic-plugin.d.ts +52 -0
  48. package/dist/flow/flow-logic/flow-logic-plugin.js +283 -0
  49. package/dist/flow/flow-logic/flow-logic-plugin.js.map +1 -0
  50. package/dist/flow/flow-logic/flow-logic-shapes.d.ts +104 -0
  51. package/dist/flow/flow-logic/flow-logic-shapes.js +201 -0
  52. package/dist/flow/flow-logic/flow-logic-shapes.js.map +1 -0
  53. package/dist/flow/plugins/approval-rules-plugin.d.ts +2 -0
  54. package/dist/flow/plugins/approval-rules-plugin.js +49 -0
  55. package/dist/flow/plugins/approval-rules-plugin.js.map +1 -0
  56. package/dist/flow/plugins/flow-action-definition-plugin.d.ts +2 -0
  57. package/dist/flow/plugins/flow-action-definition-plugin.js +286 -0
  58. package/dist/flow/plugins/flow-action-definition-plugin.js.map +1 -0
  59. package/dist/flow/plugins/flow-data-pill-plugin.d.ts +9 -0
  60. package/dist/flow/plugins/flow-data-pill-plugin.js +212 -0
  61. package/dist/flow/plugins/flow-data-pill-plugin.js.map +1 -0
  62. package/dist/flow/plugins/flow-definition-plugin.d.ts +2 -0
  63. package/dist/flow/plugins/flow-definition-plugin.js +1668 -0
  64. package/dist/flow/plugins/flow-definition-plugin.js.map +1 -0
  65. package/dist/flow/plugins/flow-diagnostics-plugin.d.ts +26 -0
  66. package/dist/flow/plugins/flow-diagnostics-plugin.js +217 -0
  67. package/dist/flow/plugins/flow-diagnostics-plugin.js.map +1 -0
  68. package/dist/flow/plugins/flow-instance-plugin.d.ts +12 -0
  69. package/dist/flow/plugins/flow-instance-plugin.js +1205 -0
  70. package/dist/flow/plugins/flow-instance-plugin.js.map +1 -0
  71. package/dist/flow/plugins/flow-trigger-instance-plugin.d.ts +2 -0
  72. package/dist/flow/plugins/flow-trigger-instance-plugin.js +338 -0
  73. package/dist/flow/plugins/flow-trigger-instance-plugin.js.map +1 -0
  74. package/dist/flow/plugins/inline-script-plugin.d.ts +39 -0
  75. package/dist/flow/plugins/inline-script-plugin.js +80 -0
  76. package/dist/flow/plugins/inline-script-plugin.js.map +1 -0
  77. package/dist/flow/plugins/step-definition-plugin.d.ts +5 -0
  78. package/dist/flow/plugins/step-definition-plugin.js +71 -0
  79. package/dist/flow/plugins/step-definition-plugin.js.map +1 -0
  80. package/dist/flow/plugins/step-instance-plugin.d.ts +31 -0
  81. package/dist/flow/plugins/step-instance-plugin.js +339 -0
  82. package/dist/flow/plugins/step-instance-plugin.js.map +1 -0
  83. package/dist/flow/plugins/trigger-plugin.d.ts +2 -0
  84. package/dist/flow/plugins/trigger-plugin.js +96 -0
  85. package/dist/flow/plugins/trigger-plugin.js.map +1 -0
  86. package/dist/flow/plugins/wfa-datapill-plugin.d.ts +15 -0
  87. package/dist/flow/plugins/wfa-datapill-plugin.js +178 -0
  88. package/dist/flow/plugins/wfa-datapill-plugin.js.map +1 -0
  89. package/dist/flow/utils/approval-rules-processor.d.ts +13 -0
  90. package/dist/flow/utils/approval-rules-processor.js +267 -0
  91. package/dist/flow/utils/approval-rules-processor.js.map +1 -0
  92. package/dist/flow/utils/built-in-complex-objects.d.ts +19 -0
  93. package/dist/flow/utils/built-in-complex-objects.js +62 -0
  94. package/dist/flow/utils/built-in-complex-objects.js.map +1 -0
  95. package/dist/flow/utils/complex-object-resolver.d.ts +8 -0
  96. package/dist/flow/utils/complex-object-resolver.js +614 -0
  97. package/dist/flow/utils/complex-object-resolver.js.map +1 -0
  98. package/dist/flow/utils/complex-objects.d.ts +36 -0
  99. package/dist/flow/utils/complex-objects.js +481 -0
  100. package/dist/flow/utils/complex-objects.js.map +1 -0
  101. package/dist/flow/utils/data-pill-shapes.d.ts +58 -0
  102. package/dist/flow/utils/data-pill-shapes.js +135 -0
  103. package/dist/flow/utils/data-pill-shapes.js.map +1 -0
  104. package/dist/flow/utils/datapill-transformer.d.ts +110 -0
  105. package/dist/flow/utils/datapill-transformer.js +503 -0
  106. package/dist/flow/utils/datapill-transformer.js.map +1 -0
  107. package/dist/flow/utils/flow-constants.d.ts +72 -0
  108. package/dist/flow/utils/flow-constants.js +230 -0
  109. package/dist/flow/utils/flow-constants.js.map +1 -0
  110. package/dist/flow/utils/flow-io-to-record.d.ts +44 -0
  111. package/dist/flow/utils/flow-io-to-record.js +409 -0
  112. package/dist/flow/utils/flow-io-to-record.js.map +1 -0
  113. package/dist/flow/utils/flow-shapes.d.ts +161 -0
  114. package/dist/flow/utils/flow-shapes.js +255 -0
  115. package/dist/flow/utils/flow-shapes.js.map +1 -0
  116. package/dist/flow/utils/flow-to-xml.d.ts +16 -0
  117. package/dist/flow/utils/flow-to-xml.js +237 -0
  118. package/dist/flow/utils/flow-to-xml.js.map +1 -0
  119. package/dist/flow/utils/flow-variable-processor.d.ts +51 -0
  120. package/dist/flow/utils/flow-variable-processor.js +69 -0
  121. package/dist/flow/utils/flow-variable-processor.js.map +1 -0
  122. package/dist/flow/utils/label-cache-parser.d.ts +7 -0
  123. package/dist/flow/utils/label-cache-parser.js +24 -0
  124. package/dist/flow/utils/label-cache-parser.js.map +1 -0
  125. package/dist/flow/utils/label-cache-processor.d.ts +119 -0
  126. package/dist/flow/utils/label-cache-processor.js +719 -0
  127. package/dist/flow/utils/label-cache-processor.js.map +1 -0
  128. package/dist/flow/utils/pill-string-parser.d.ts +88 -0
  129. package/dist/flow/utils/pill-string-parser.js +306 -0
  130. package/dist/flow/utils/pill-string-parser.js.map +1 -0
  131. package/dist/flow/utils/schema-to-flow-object.d.ts +22 -0
  132. package/dist/flow/utils/schema-to-flow-object.js +318 -0
  133. package/dist/flow/utils/schema-to-flow-object.js.map +1 -0
  134. package/dist/flow/utils/service-catalog.d.ts +47 -0
  135. package/dist/flow/utils/service-catalog.js +137 -0
  136. package/dist/flow/utils/service-catalog.js.map +1 -0
  137. package/dist/flow/utils/utils.d.ts +117 -0
  138. package/dist/flow/utils/utils.js +345 -0
  139. package/dist/flow/utils/utils.js.map +1 -0
  140. package/dist/index.d.ts +20 -1
  141. package/dist/index.js +21 -1
  142. package/dist/index.js.map +1 -1
  143. package/dist/list-plugin.js +1 -1
  144. package/dist/list-plugin.js.map +1 -1
  145. package/dist/now-attach-plugin.d.ts +1 -0
  146. package/dist/now-attach-plugin.js +10 -10
  147. package/dist/now-attach-plugin.js.map +1 -1
  148. package/dist/now-ref-plugin.js +1 -1
  149. package/dist/now-ref-plugin.js.map +1 -1
  150. package/dist/record-plugin.d.ts +29 -0
  151. package/dist/record-plugin.js +66 -7
  152. package/dist/record-plugin.js.map +1 -1
  153. package/dist/repack/index.d.ts +2 -0
  154. package/dist/repack/index.js +8 -0
  155. package/dist/repack/index.js.map +1 -1
  156. package/dist/rest-api-plugin.js +54 -44
  157. package/dist/rest-api-plugin.js.map +1 -1
  158. package/dist/server-module-plugin/index.d.ts +10 -0
  159. package/dist/server-module-plugin/index.js +83 -59
  160. package/dist/server-module-plugin/index.js.map +1 -1
  161. package/dist/service-catalog/catalog-clientscript-plugin.d.ts +2 -0
  162. package/dist/service-catalog/catalog-clientscript-plugin.js +117 -0
  163. package/dist/service-catalog/catalog-clientscript-plugin.js.map +1 -0
  164. package/dist/service-catalog/catalog-item-plugin.d.ts +2 -0
  165. package/dist/service-catalog/catalog-item-plugin.js +115 -0
  166. package/dist/service-catalog/catalog-item-plugin.js.map +1 -0
  167. package/dist/service-catalog/catalog-ui-policy-plugin.d.ts +2 -0
  168. package/dist/service-catalog/catalog-ui-policy-plugin.js +266 -0
  169. package/dist/service-catalog/catalog-ui-policy-plugin.js.map +1 -0
  170. package/dist/service-catalog/index.d.ts +5 -0
  171. package/dist/service-catalog/index.js +22 -0
  172. package/dist/service-catalog/index.js.map +1 -0
  173. package/dist/service-catalog/record-to-shape.d.ts +6 -0
  174. package/dist/service-catalog/record-to-shape.js +93 -0
  175. package/dist/service-catalog/record-to-shape.js.map +1 -0
  176. package/dist/service-catalog/sc-record-producer-plugin.d.ts +2 -0
  177. package/dist/service-catalog/sc-record-producer-plugin.js +140 -0
  178. package/dist/service-catalog/sc-record-producer-plugin.js.map +1 -0
  179. package/dist/service-catalog/service-catalog-base.d.ts +311 -0
  180. package/dist/service-catalog/service-catalog-base.js +542 -0
  181. package/dist/service-catalog/service-catalog-base.js.map +1 -0
  182. package/dist/service-catalog/service-catalog-diagnostics.d.ts +45 -0
  183. package/dist/service-catalog/service-catalog-diagnostics.js +172 -0
  184. package/dist/service-catalog/service-catalog-diagnostics.js.map +1 -0
  185. package/dist/service-catalog/shape-to-record.d.ts +8 -0
  186. package/dist/service-catalog/shape-to-record.js +235 -0
  187. package/dist/service-catalog/shape-to-record.js.map +1 -0
  188. package/dist/service-catalog/utils.d.ts +323 -0
  189. package/dist/service-catalog/utils.js +1216 -0
  190. package/dist/service-catalog/utils.js.map +1 -0
  191. package/dist/service-catalog/variable-helper.d.ts +43 -0
  192. package/dist/service-catalog/variable-helper.js +92 -0
  193. package/dist/service-catalog/variable-helper.js.map +1 -0
  194. package/dist/service-catalog/variable-set-plugin.d.ts +2 -0
  195. package/dist/service-catalog/variable-set-plugin.js +175 -0
  196. package/dist/service-catalog/variable-set-plugin.js.map +1 -0
  197. package/dist/service-catalog/variables-transform.d.ts +139 -0
  198. package/dist/service-catalog/variables-transform.js +403 -0
  199. package/dist/service-catalog/variables-transform.js.map +1 -0
  200. package/dist/sla/sla-validators.d.ts +61 -0
  201. package/dist/sla/sla-validators.js +224 -0
  202. package/dist/sla/sla-validators.js.map +1 -0
  203. package/dist/sla-plugin.d.ts +5 -0
  204. package/dist/sla-plugin.js +280 -0
  205. package/dist/sla-plugin.js.map +1 -0
  206. package/dist/static-content-plugin.js +25 -2
  207. package/dist/static-content-plugin.js.map +1 -1
  208. package/dist/table-plugin.js +32 -15
  209. package/dist/table-plugin.js.map +1 -1
  210. package/dist/ui-page-plugin.js +832 -19
  211. package/dist/ui-page-plugin.js.map +1 -1
  212. package/dist/ui-policy-plugin.js +5 -7
  213. package/dist/ui-policy-plugin.js.map +1 -1
  214. package/dist/utils.d.ts +10 -1
  215. package/dist/utils.js +16 -0
  216. package/dist/utils.js.map +1 -1
  217. package/dist/ux-list-menu-config-plugin.d.ts +2 -0
  218. package/dist/ux-list-menu-config-plugin.js +292 -0
  219. package/dist/ux-list-menu-config-plugin.js.map +1 -0
  220. package/dist/workspace-plugin/chrome-tab.d.ts +2 -0
  221. package/dist/workspace-plugin/chrome-tab.js +46 -0
  222. package/dist/workspace-plugin/chrome-tab.js.map +1 -0
  223. package/dist/workspace-plugin/constants.d.ts +52 -0
  224. package/dist/workspace-plugin/constants.js +56 -0
  225. package/dist/workspace-plugin/constants.js.map +1 -0
  226. package/dist/workspace-plugin/fluent-utils.d.ts +9 -0
  227. package/dist/workspace-plugin/fluent-utils.js +60 -0
  228. package/dist/workspace-plugin/fluent-utils.js.map +1 -0
  229. package/dist/workspace-plugin/page.d.ts +8 -0
  230. package/dist/workspace-plugin/page.js +108 -0
  231. package/dist/workspace-plugin/page.js.map +1 -0
  232. package/dist/workspace-plugin/screen.d.ts +1 -0
  233. package/dist/workspace-plugin/screen.js +38 -0
  234. package/dist/workspace-plugin/screen.js.map +1 -0
  235. package/dist/workspace-plugin/templates/index.d.ts +10 -0
  236. package/dist/workspace-plugin/templates/index.js +20 -0
  237. package/dist/workspace-plugin/templates/index.js.map +1 -0
  238. package/dist/workspace-plugin/templates/record-page-composition.d.ts +1 -0
  239. package/dist/workspace-plugin/templates/record-page-composition.js +4043 -0
  240. package/dist/workspace-plugin/templates/record-page-composition.js.map +1 -0
  241. package/dist/workspace-plugin/templates/record-page-data.d.ts +1 -0
  242. package/dist/workspace-plugin/templates/record-page-data.js +527 -0
  243. package/dist/workspace-plugin/templates/record-page-data.js.map +1 -0
  244. package/dist/workspace-plugin/templates/record-page-interalEventMappings.d.ts +1 -0
  245. package/dist/workspace-plugin/templates/record-page-interalEventMappings.js +39 -0
  246. package/dist/workspace-plugin/templates/record-page-interalEventMappings.js.map +1 -0
  247. package/dist/workspace-plugin/templates/record-page-layoutModel.d.ts +1 -0
  248. package/dist/workspace-plugin/templates/record-page-layoutModel.js +55 -0
  249. package/dist/workspace-plugin/templates/record-page-layoutModel.js.map +1 -0
  250. package/dist/workspace-plugin/templates/record-page-properties.d.ts +1 -0
  251. package/dist/workspace-plugin/templates/record-page-properties.js +135 -0
  252. package/dist/workspace-plugin/templates/record-page-properties.js.map +1 -0
  253. package/dist/workspace-plugin/templates/record-page.d.ts +3 -0
  254. package/dist/workspace-plugin/templates/record-page.js +8 -0
  255. package/dist/workspace-plugin/templates/record-page.js.map +1 -0
  256. package/dist/workspace-plugin.d.ts +2 -0
  257. package/dist/workspace-plugin.js +453 -0
  258. package/dist/workspace-plugin.js.map +1 -0
  259. package/package.json +10 -12
  260. package/src/acl-plugin.ts +16 -1
  261. package/src/applicability-plugin.ts +82 -0
  262. package/src/atf/test-plugin.ts +6 -3
  263. package/src/basic-syntax-plugin.ts +10 -1
  264. package/src/business-rule-plugin.ts +2 -1
  265. package/src/call-expression-plugin.ts +2 -130
  266. package/src/column/column-to-record.ts +54 -8
  267. package/src/column-plugin.ts +29 -13
  268. package/src/dashboard/dashboard-component-property-defaults.ts +277 -0
  269. package/src/dashboard/dashboard-component-resolver.ts +69 -0
  270. package/src/dashboard/dashboard-plugin.ts +450 -0
  271. package/src/data-plugin.ts +67 -139
  272. package/src/email-notification-plugin.ts +850 -0
  273. package/src/flow/constants/flow-plugin-constants.ts +79 -0
  274. package/src/flow/flow-logic/flow-logic-constants.ts +120 -0
  275. package/src/flow/flow-logic/flow-logic-diagnostics.ts +591 -0
  276. package/src/flow/flow-logic/flow-logic-plugin-helpers.ts +2550 -0
  277. package/src/flow/flow-logic/flow-logic-plugin.ts +337 -0
  278. package/src/flow/flow-logic/flow-logic-shapes.ts +215 -0
  279. package/src/flow/plugins/approval-rules-plugin.ts +48 -0
  280. package/src/flow/plugins/flow-action-definition-plugin.ts +295 -0
  281. package/src/flow/plugins/flow-data-pill-plugin.ts +258 -0
  282. package/src/flow/plugins/flow-definition-plugin.ts +2173 -0
  283. package/src/flow/plugins/flow-diagnostics-plugin.ts +280 -0
  284. package/src/flow/plugins/flow-instance-plugin.ts +1499 -0
  285. package/src/flow/plugins/flow-trigger-instance-plugin.ts +444 -0
  286. package/src/flow/plugins/inline-script-plugin.ts +83 -0
  287. package/src/flow/plugins/step-definition-plugin.ts +67 -0
  288. package/src/flow/plugins/step-instance-plugin.ts +431 -0
  289. package/src/flow/plugins/trigger-plugin.ts +95 -0
  290. package/src/flow/plugins/wfa-datapill-plugin.ts +213 -0
  291. package/src/flow/utils/approval-rules-processor.ts +298 -0
  292. package/src/flow/utils/built-in-complex-objects.ts +81 -0
  293. package/src/flow/utils/complex-object-resolver.ts +875 -0
  294. package/src/flow/utils/complex-objects.ts +656 -0
  295. package/src/flow/utils/data-pill-shapes.ts +165 -0
  296. package/src/flow/utils/datapill-transformer.ts +632 -0
  297. package/src/flow/utils/flow-constants.ts +285 -0
  298. package/src/flow/utils/flow-io-to-record.ts +533 -0
  299. package/src/flow/utils/flow-shapes.ts +296 -0
  300. package/src/flow/utils/flow-to-xml.ts +318 -0
  301. package/src/flow/utils/flow-variable-processor.ts +100 -0
  302. package/src/flow/utils/label-cache-parser.ts +37 -0
  303. package/src/flow/utils/label-cache-processor.ts +870 -0
  304. package/src/flow/utils/pill-string-parser.ts +375 -0
  305. package/src/flow/utils/schema-to-flow-object.ts +385 -0
  306. package/src/flow/utils/service-catalog.ts +174 -0
  307. package/src/flow/utils/utils.ts +395 -0
  308. package/src/index.ts +20 -1
  309. package/src/list-plugin.ts +1 -1
  310. package/src/now-attach-plugin.ts +14 -11
  311. package/src/now-ref-plugin.ts +1 -1
  312. package/src/record-plugin.ts +76 -11
  313. package/src/repack/index.ts +14 -0
  314. package/src/rest-api-plugin.ts +62 -50
  315. package/src/server-module-plugin/index.ts +112 -86
  316. package/src/service-catalog/catalog-clientscript-plugin.ts +140 -0
  317. package/src/service-catalog/catalog-item-plugin.ts +162 -0
  318. package/src/service-catalog/catalog-ui-policy-plugin.ts +324 -0
  319. package/src/service-catalog/index.ts +5 -0
  320. package/src/service-catalog/record-to-shape.ts +109 -0
  321. package/src/service-catalog/sc-record-producer-plugin.ts +201 -0
  322. package/src/service-catalog/service-catalog-base.ts +600 -0
  323. package/src/service-catalog/service-catalog-diagnostics.ts +254 -0
  324. package/src/service-catalog/shape-to-record.ts +279 -0
  325. package/src/service-catalog/utils.ts +1455 -0
  326. package/src/service-catalog/variable-helper.ts +135 -0
  327. package/src/service-catalog/variable-set-plugin.ts +197 -0
  328. package/src/service-catalog/variables-transform.ts +438 -0
  329. package/src/sla/sla-validators.ts +331 -0
  330. package/src/sla-plugin.ts +358 -0
  331. package/src/static-content-plugin.ts +25 -2
  332. package/src/table-plugin.ts +49 -16
  333. package/src/ui-page-plugin.ts +1063 -20
  334. package/src/ui-policy-plugin.ts +5 -9
  335. package/src/utils.ts +24 -1
  336. package/src/ux-list-menu-config-plugin.ts +312 -0
  337. package/src/workspace-plugin/chrome-tab.ts +44 -0
  338. package/src/workspace-plugin/constants.ts +53 -0
  339. package/src/workspace-plugin/fluent-utils.ts +60 -0
  340. package/src/workspace-plugin/page.ts +139 -0
  341. package/src/workspace-plugin/screen.ts +34 -0
  342. package/src/workspace-plugin/templates/index.ts +17 -0
  343. package/src/workspace-plugin/templates/record-page-composition.ts +4051 -0
  344. package/src/workspace-plugin/templates/record-page-data.ts +523 -0
  345. package/src/workspace-plugin/templates/record-page-interalEventMappings.ts +35 -0
  346. package/src/workspace-plugin/templates/record-page-layoutModel.ts +51 -0
  347. package/src/workspace-plugin/templates/record-page-properties.ts +131 -0
  348. package/src/workspace-plugin/templates/record-page.ts +6 -0
  349. package/src/workspace-plugin.ts +574 -0
@@ -0,0 +1,375 @@
1
+ import {
2
+ type Diagnostics,
3
+ PropertyAccessShape,
4
+ TemplateExpressionShape,
5
+ TemplateSpanShape,
6
+ type Source,
7
+ } from '@servicenow/sdk-build-core'
8
+
9
+ export const PILL_REGEX = /\{\{[^}]+\}\}/g
10
+
11
+ /**
12
+ * Detects if a string contains data pill expressions
13
+ * @param value - String to check for pill patterns
14
+ * @returns 'simple' for single pill, 'template' for text with pills, 'none' for no pills
15
+ */
16
+ export function detectPillPattern(value: string): 'simple' | 'template' | 'none' {
17
+ if (!value || typeof value !== 'string') {
18
+ return 'none'
19
+ }
20
+
21
+ const matches = value.match(PILL_REGEX)
22
+
23
+ if (!matches) {
24
+ return 'none'
25
+ }
26
+ // Simple pill: entire string is a single pill (with optional whitespace)
27
+ if (matches.length === 1 && value.trim() === matches[0].trim()) {
28
+ return 'simple'
29
+ }
30
+ // Template: contains one or more pills mixed with text
31
+ return 'template'
32
+ }
33
+
34
+ /**
35
+ * Represents a parsed data pill expression
36
+ */
37
+ export interface ParsedPill {
38
+ prefix: string // "trigger", "flow_variable", "inputs", "outputs", or UUID
39
+ path: string // "table_name", "array", etc.
40
+ fullMatch: string
41
+ }
42
+
43
+ /**
44
+ * Parses a single pill expression
45
+ * @param pillString - Input like "{{trigger.table_name}}"
46
+ * @param allowSchemaReferences - If true, allows schema references without dots (e.g., {{flowVariables}}, {{outputs}}). Used during XML-to-Fluent conversion. Default: false.
47
+ * @returns Parsed components or null if invalid
48
+ * @example
49
+ * parseSinglePill("{{trigger.table_name}}")
50
+ * // Returns: { prefix: "trigger", path: "table_name", fullMatch: "{{trigger.table_name}}" }
51
+ */
52
+ export function parseSinglePill(pillString: string, allowSchemaReferences: boolean = false): ParsedPill | null {
53
+ // Trim whitespace to handle pills with leading/trailing spaces
54
+ const trimmed = pillString.trim()
55
+
56
+ // Remove {{ and }} - match the entire pattern and extract content in between
57
+ const match = trimmed.match(/^\{\{(.*)\}\}$/)
58
+ if (!match) {
59
+ return null
60
+ }
61
+ let content = match[1]?.trim()
62
+
63
+ if (!content) {
64
+ return null
65
+ }
66
+
67
+ // Strip type annotation if present (e.g., "trigger.name|string" → "trigger.name")
68
+ // ServiceNow stores datapills with type annotations that need to be removed
69
+ const pipeIndex = content.indexOf('|')
70
+ if (pipeIndex !== -1) {
71
+ content = content.substring(0, pipeIndex).trim()
72
+ }
73
+
74
+ // Split by first dot: "trigger.table_name" → ["trigger", "table_name"]
75
+ const dotIndex = content.indexOf('.')
76
+
77
+ if (dotIndex === -1) {
78
+ // No dot - check if this is allowed based on context
79
+ if (!allowSchemaReferences) {
80
+ // During Fluent-to-XML or test parsing, pills without dots are invalid
81
+ return null
82
+ }
83
+
84
+ // During XML-to-Fluent: only allow valid schema references
85
+ const validSchemaReferences = ['flowVariables', 'outputs']
86
+
87
+ if (!validSchemaReferences.includes(content)) {
88
+ // Invalid pill format - only flowVariables and outputs are valid schema references
89
+ return null
90
+ }
91
+
92
+ // Return with empty path to indicate this is a schema reference, not a property access
93
+ return {
94
+ prefix: content,
95
+ path: '',
96
+ fullMatch: trimmed,
97
+ }
98
+ }
99
+
100
+ const prefix = content.substring(0, dotIndex)
101
+ const path = content.substring(dotIndex + 1)
102
+
103
+ return {
104
+ prefix,
105
+ path,
106
+ fullMatch: trimmed,
107
+ }
108
+ }
109
+
110
+ /**
111
+ * Maps pill prefix to TypeScript property access root
112
+ * @param prefix - Pill prefix like "trigger", "flow_variable", "subflow", or trigger-specific prefixes like "Created_1", "Updated_1", etc.
113
+ * @param parameterName - Optional parameter name to use instead of "params" (default: "params")
114
+ * @returns TypeScript path like "params.trigger" or null if not a known semantic prefix
115
+ */
116
+ export function mapPillPrefixToTsRoot(prefix: string, parameterName: string = 'params'): string | null {
117
+ const mapping: Record<string, string> = {
118
+ trigger: `${parameterName}.trigger`,
119
+ flow_variable: `${parameterName}.flowVariables`,
120
+ flowVariables: `${parameterName}.flowVariables`, // Schema reference (no property access)
121
+ inputs: `${parameterName}.inputs`,
122
+ outputs: `${parameterName}.outputs`, // Schema reference (no property access)
123
+ subflow: `${parameterName}.inputs`, // ServiceNow uses {{subflow.x}} for subflow inputs
124
+
125
+ // Record triggers (prefixed with trigger name + _1)
126
+ Created_1: `${parameterName}.trigger`,
127
+ Updated_1: `${parameterName}.trigger`,
128
+ 'Created or Updated_1': `${parameterName}.trigger`,
129
+
130
+ // Scheduled triggers
131
+ Daily_1: `${parameterName}.trigger`,
132
+ Weekly_1: `${parameterName}.trigger`,
133
+ Monthly_1: `${parameterName}.trigger`,
134
+ Repeat_1: `${parameterName}.trigger`,
135
+ 'Run Once_1': `${parameterName}.trigger`,
136
+
137
+ // Application triggers
138
+ 'Inbound Email_1': `${parameterName}.trigger`,
139
+ 'Knowledge Management_1': `${parameterName}.trigger`,
140
+ 'Remote Table Query_1': `${parameterName}.trigger`,
141
+ 'REST API - Asynchronous_1': `${parameterName}.trigger`,
142
+ 'Service Catalog_1': `${parameterName}.trigger`,
143
+ 'SLA Task_1': `${parameterName}.trigger`,
144
+ }
145
+
146
+ return mapping[prefix] ?? null
147
+ }
148
+
149
+ /**
150
+ * Checks if prefix is a UUID (action/subflow instance reference)
151
+ * @param prefix - Prefix to check
152
+ * @returns True if the prefix matches UUID format
153
+ */
154
+ export function isUuidPrefix(prefix: string): boolean {
155
+ // UUID format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
156
+ const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i
157
+ return uuidRegex.test(prefix)
158
+ }
159
+
160
+ /**
161
+ * Creates a PropertyAccessShape from a semantic path like "params.trigger.table_name"
162
+ * @param path - Dot-separated property path
163
+ * @param source - Source for the shape
164
+ * @returns PropertyAccessShape or null if path is invalid
165
+ */
166
+ export function createPropertyAccessFromPath(path: string, source: Source): PropertyAccessShape | null {
167
+ const parts = path.split('.')
168
+
169
+ if (parts.length < 2) {
170
+ return null
171
+ }
172
+
173
+ // PropertyAccessShape constructor accepts strings and handles conversion internally
174
+ // Cast through unknown to satisfy TypeScript (we know parts.length >= 2 from check above)
175
+ return new PropertyAccessShape({
176
+ source,
177
+ elements: parts as unknown as readonly [string, string, ...string[]],
178
+ })
179
+ }
180
+
181
+ /**
182
+ * Creates a TemplateExpressionShape from a template string with pills
183
+ * @param templateStr - Input like "Hello {{trigger.name}}, your ID is {{trigger.sys_id}}"
184
+ * @param source - Source for the shape
185
+ * @param parameterName - Optional parameter name to use instead of "params" (e.g., from ArrowFunction)
186
+ * @param allowSchemaReferences - If true, allows schema references without dots. Used during XML-to-Fluent conversion. Default: false.
187
+ * @returns TemplateExpressionShape or null if no valid pills found
188
+ *
189
+ * @example
190
+ * createTemplateExpressionFromPillString(
191
+ * "Lead text {{trigger.name}} trail text",
192
+ * record,
193
+ * diagnostics
194
+ * )
195
+ * // Creates: `Lead text ${params.trigger.name} trail text`
196
+ */
197
+ export function createTemplateExpressionFromPillString(
198
+ templateStr: string,
199
+ source: Source,
200
+ parameterName?: string,
201
+ allowSchemaReferences: boolean = false
202
+ ): TemplateExpressionShape | null {
203
+ const pillRegex = /\{\{[^}]+\}\}/g
204
+ const spans: TemplateSpanShape[] = []
205
+
206
+ let head = ''
207
+ let isFirstPill = true
208
+ let match: RegExpExecArray | null
209
+
210
+ // Split template by pills
211
+ while ((match = pillRegex.exec(templateStr)) !== null) {
212
+ // Parse the pill and create PropertyAccessShape
213
+ const parsed = parseSinglePill(match[0], allowSchemaReferences)
214
+
215
+ if (!parsed) {
216
+ // Don't warn - invalid pills are silently ignored and treated as literals
217
+ continue
218
+ }
219
+
220
+ const tsRoot = mapPillPrefixToTsRoot(parsed.prefix, parameterName)
221
+
222
+ if (!tsRoot) {
223
+ if (isUuidPrefix(parsed.prefix)) {
224
+ // UUID-based pill - not supported in Phase 1, silently skip
225
+ // (UUID pills will be added in Phase 3)
226
+ continue
227
+ } else {
228
+ // Unknown prefix - silently skip and treat as literal
229
+ continue
230
+ }
231
+ }
232
+
233
+ const fullPath = `${tsRoot}.${parsed.path}`
234
+ const propAccess = createPropertyAccessFromPath(fullPath, source)
235
+
236
+ if (!propAccess) {
237
+ // Failed to create shape - silently skip
238
+ continue
239
+ }
240
+
241
+ // First pill: everything before it is the head
242
+ if (isFirstPill) {
243
+ head = templateStr.substring(0, match.index)
244
+ isFirstPill = false
245
+ }
246
+
247
+ // Text after this pill (until next pill or end of string)
248
+ const nextMatchIndex = pillRegex.lastIndex
249
+ let literalAfter = ''
250
+
251
+ // Look ahead to find next pill or use end of string
252
+ const remainingStr = templateStr.substring(nextMatchIndex)
253
+ const nextPillMatch = remainingStr.match(/\{\{[^}]+\}\}/)
254
+
255
+ if (nextPillMatch) {
256
+ literalAfter = remainingStr.substring(0, nextPillMatch.index)
257
+ } else {
258
+ literalAfter = remainingStr
259
+ }
260
+
261
+ spans.push(
262
+ new TemplateSpanShape({
263
+ source,
264
+ expression: propAccess,
265
+ literalText: literalAfter,
266
+ })
267
+ )
268
+ }
269
+
270
+ if (spans.length === 0) {
271
+ return null // No valid pills found
272
+ }
273
+
274
+ return new TemplateExpressionShape({
275
+ source,
276
+ literalText: head,
277
+ spans,
278
+ })
279
+ }
280
+
281
+ /**
282
+ * Converts a data pill string from XML to a TypeScript Shape
283
+ * Handles both simple pills and template expressions with pills
284
+ *
285
+ * @param value - String value from XML (may contain pills)
286
+ * @param source - Source for shape creation
287
+ * @param diagnostics - Diagnostics instance (currently unused but kept for future use)
288
+ * @param parameterName - Optional parameter name to use instead of "params" (e.g., from ArrowFunction)
289
+ * @param allowSchemaReferences - If true, allows schema references without dots (e.g., {{flowVariables}}, {{outputs}}). Should be true during XML-to-Fluent conversion. Default: true.
290
+ * @returns PropertyAccessShape, TemplateExpressionShape, or undefined if not a pill
291
+ *
292
+ * @example
293
+ * // Simple pill
294
+ * convertPillStringToShape("{{trigger.table_name}}", record, diagnostics)
295
+ * // Returns: PropertyAccessShape for params.trigger.table_name
296
+ *
297
+ * // Template
298
+ * convertPillStringToShape("Hello {{trigger.name}}", record, diagnostics)
299
+ * // Returns: TemplateExpressionShape for `Hello ${params.trigger.name}`
300
+ *
301
+ * // Not a pill
302
+ * convertPillStringToShape("just text", record, diagnostics)
303
+ * // Returns: undefined
304
+ */
305
+ export function convertPillStringToShape(
306
+ value: string,
307
+ source: Source,
308
+ _diagnostics: Diagnostics,
309
+ parameterName?: string,
310
+ allowSchemaReferences: boolean = true
311
+ ): PropertyAccessShape | TemplateExpressionShape | undefined {
312
+ const patternType = detectPillPattern(value)
313
+
314
+ if (patternType === 'none') {
315
+ return undefined // Not a pill, handle normally
316
+ }
317
+
318
+ if (patternType === 'simple') {
319
+ // Simple pill: "{{trigger.table_name}}"
320
+ const parsed = parseSinglePill(value, allowSchemaReferences)
321
+
322
+ if (!parsed) {
323
+ // Invalid pill format - return undefined to fall back to normal value handling
324
+ return undefined
325
+ }
326
+
327
+ if (isUuidPrefix(parsed.prefix)) {
328
+ // UUID-based pill - not supported yet (Phase 3)
329
+ // Return undefined to fall back to string literal
330
+ return undefined
331
+ }
332
+
333
+ const tsRoot = mapPillPrefixToTsRoot(parsed.prefix, parameterName)
334
+
335
+ if (!tsRoot) {
336
+ // Unknown pill prefix - return undefined to fall back to normal value handling
337
+ return undefined
338
+ }
339
+
340
+ // Handle schema references (no property access) like {{flowVariables}} or {{outputs}}
341
+ if (parsed.path === '') {
342
+ // This is a schema reference - tsRoot already contains the full path (e.g., "params.flowVariables")
343
+ const propAccess = createPropertyAccessFromPath(tsRoot, source)
344
+ if (!propAccess) {
345
+ return undefined
346
+ }
347
+ return propAccess
348
+ }
349
+
350
+ // Handle property access like {{trigger.table_name}}
351
+ const fullPath = `${tsRoot}.${parsed.path}`
352
+ const propAccess = createPropertyAccessFromPath(fullPath, source)
353
+
354
+ if (!propAccess) {
355
+ // Failed to create PropertyAccess - return undefined to fall back
356
+ return undefined
357
+ }
358
+
359
+ return propAccess
360
+ }
361
+
362
+ if (patternType === 'template') {
363
+ // Template with pills: "Hello {{trigger.name}}"
364
+ const templateExpr = createTemplateExpressionFromPillString(value, source, parameterName, allowSchemaReferences)
365
+
366
+ if (!templateExpr) {
367
+ // Failed to parse template - return undefined to fall back to normal value
368
+ return undefined
369
+ }
370
+
371
+ return templateExpr
372
+ }
373
+
374
+ return undefined
375
+ }