@servicenow/sdk-build-plugins 4.5.0 → 4.6.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 (175) hide show
  1. package/dist/acl-plugin.js +3 -1
  2. package/dist/acl-plugin.js.map +1 -1
  3. package/dist/atf/test-plugin.js +6 -8
  4. package/dist/atf/test-plugin.js.map +1 -1
  5. package/dist/basic-syntax-plugin.js +10 -3
  6. package/dist/basic-syntax-plugin.js.map +1 -1
  7. package/dist/column-plugin.js +99 -49
  8. package/dist/column-plugin.js.map +1 -1
  9. package/dist/flow/flow-logic/flow-logic-diagnostics.js +5 -5
  10. package/dist/flow/flow-logic/flow-logic-diagnostics.js.map +1 -1
  11. package/dist/flow/plugins/flow-action-definition-plugin.js +1229 -54
  12. package/dist/flow/plugins/flow-action-definition-plugin.js.map +1 -1
  13. package/dist/flow/plugins/flow-data-pill-plugin.js +5 -2
  14. package/dist/flow/plugins/flow-data-pill-plugin.js.map +1 -1
  15. package/dist/flow/plugins/flow-definition-plugin.js +16 -42
  16. package/dist/flow/plugins/flow-definition-plugin.js.map +1 -1
  17. package/dist/flow/plugins/flow-diagnostics-plugin.d.ts +2 -2
  18. package/dist/flow/plugins/flow-diagnostics-plugin.js +2 -2
  19. package/dist/flow/plugins/flow-instance-plugin.js +68 -22
  20. package/dist/flow/plugins/flow-instance-plugin.js.map +1 -1
  21. package/dist/flow/plugins/step-definition-plugin.js +2 -1
  22. package/dist/flow/plugins/step-definition-plugin.js.map +1 -1
  23. package/dist/flow/plugins/step-instance-plugin.d.ts +9 -1
  24. package/dist/flow/plugins/step-instance-plugin.js +649 -136
  25. package/dist/flow/plugins/step-instance-plugin.js.map +1 -1
  26. package/dist/flow/plugins/wfa-datapill-plugin.js +20 -5
  27. package/dist/flow/plugins/wfa-datapill-plugin.js.map +1 -1
  28. package/dist/flow/post-install.js +1 -0
  29. package/dist/flow/post-install.js.map +1 -1
  30. package/dist/flow/utils/complex-object-resolver.js +4 -1
  31. package/dist/flow/utils/complex-object-resolver.js.map +1 -1
  32. package/dist/flow/utils/complex-objects.js +1 -1
  33. package/dist/flow/utils/complex-objects.js.map +1 -1
  34. package/dist/flow/utils/flow-constants.d.ts +66 -2
  35. package/dist/flow/utils/flow-constants.js +402 -6
  36. package/dist/flow/utils/flow-constants.js.map +1 -1
  37. package/dist/flow/utils/flow-io-to-record.d.ts +1 -1
  38. package/dist/flow/utils/flow-io-to-record.js +37 -16
  39. package/dist/flow/utils/flow-io-to-record.js.map +1 -1
  40. package/dist/flow/utils/flow-shapes.js +4 -0
  41. package/dist/flow/utils/flow-shapes.js.map +1 -1
  42. package/dist/flow/utils/label-cache-parser.d.ts +9 -2
  43. package/dist/flow/utils/label-cache-parser.js +32 -4
  44. package/dist/flow/utils/label-cache-parser.js.map +1 -1
  45. package/dist/flow/utils/pill-shape-helpers.d.ts +15 -0
  46. package/dist/flow/utils/pill-shape-helpers.js +35 -0
  47. package/dist/flow/utils/pill-shape-helpers.js.map +1 -0
  48. package/dist/flow/utils/pill-string-parser.js +1 -0
  49. package/dist/flow/utils/pill-string-parser.js.map +1 -1
  50. package/dist/flow/utils/schema-to-flow-object.d.ts +6 -1
  51. package/dist/flow/utils/schema-to-flow-object.js +131 -15
  52. package/dist/flow/utils/schema-to-flow-object.js.map +1 -1
  53. package/dist/flow/utils/utils.d.ts +1 -0
  54. package/dist/flow/utils/utils.js +6 -1
  55. package/dist/flow/utils/utils.js.map +1 -1
  56. package/dist/form-plugin.js +7 -9
  57. package/dist/form-plugin.js.map +1 -1
  58. package/dist/inbound-email-action-plugin.d.ts +10 -0
  59. package/dist/inbound-email-action-plugin.js +128 -0
  60. package/dist/inbound-email-action-plugin.js.map +1 -0
  61. package/dist/index.d.ts +4 -0
  62. package/dist/index.js +4 -0
  63. package/dist/index.js.map +1 -1
  64. package/dist/instance-scan-plugin.js +0 -5
  65. package/dist/instance-scan-plugin.js.map +1 -1
  66. package/dist/now-config-plugin.js +1 -0
  67. package/dist/now-config-plugin.js.map +1 -1
  68. package/dist/property-plugin.js +1 -1
  69. package/dist/property-plugin.js.map +1 -1
  70. package/dist/record-plugin.d.ts +7 -0
  71. package/dist/record-plugin.js +13 -4
  72. package/dist/record-plugin.js.map +1 -1
  73. package/dist/rest-api-plugin.js +8 -1
  74. package/dist/rest-api-plugin.js.map +1 -1
  75. package/dist/schedule-script/scheduled-script-plugin.js +8 -3
  76. package/dist/schedule-script/scheduled-script-plugin.js.map +1 -1
  77. package/dist/script-include-plugin.js +4 -0
  78. package/dist/script-include-plugin.js.map +1 -1
  79. package/dist/service-catalog/catalog-clientscript-plugin.js +2 -2
  80. package/dist/service-catalog/catalog-clientscript-plugin.js.map +1 -1
  81. package/dist/service-catalog/catalog-ui-policy-plugin.js +2 -2
  82. package/dist/service-catalog/catalog-ui-policy-plugin.js.map +1 -1
  83. package/dist/service-catalog/service-catalog-base.d.ts +20 -20
  84. package/dist/service-catalog/service-catalog-base.js +24 -24
  85. package/dist/service-catalog/service-catalog-base.js.map +1 -1
  86. package/dist/service-catalog/utils.js +1 -1
  87. package/dist/service-catalog/utils.js.map +1 -1
  88. package/dist/service-portal/header-footer-plugin.d.ts +2 -0
  89. package/dist/service-portal/header-footer-plugin.js +50 -0
  90. package/dist/service-portal/header-footer-plugin.js.map +1 -0
  91. package/dist/service-portal/menu-plugin.js +3 -22
  92. package/dist/service-portal/menu-plugin.js.map +1 -1
  93. package/dist/service-portal/page-plugin.js +3 -24
  94. package/dist/service-portal/page-plugin.js.map +1 -1
  95. package/dist/service-portal/page-route-map-plugin.d.ts +2 -0
  96. package/dist/service-portal/page-route-map-plugin.js +114 -0
  97. package/dist/service-portal/page-route-map-plugin.js.map +1 -0
  98. package/dist/service-portal/portal-plugin.js +21 -8
  99. package/dist/service-portal/portal-plugin.js.map +1 -1
  100. package/dist/service-portal/utils.d.ts +40 -2
  101. package/dist/service-portal/utils.js +283 -2
  102. package/dist/service-portal/utils.js.map +1 -1
  103. package/dist/service-portal/widget-plugin.js +9 -218
  104. package/dist/service-portal/widget-plugin.js.map +1 -1
  105. package/dist/static-content-plugin.js +4 -0
  106. package/dist/static-content-plugin.js.map +1 -1
  107. package/dist/table-plugin.js +377 -67
  108. package/dist/table-plugin.js.map +1 -1
  109. package/dist/ui-action-plugin.js +1 -4
  110. package/dist/ui-action-plugin.js.map +1 -1
  111. package/dist/ui-page-plugin.js +68 -13
  112. package/dist/ui-page-plugin.js.map +1 -1
  113. package/dist/ui-policy-plugin.js +28 -96
  114. package/dist/ui-policy-plugin.js.map +1 -1
  115. package/dist/utils.d.ts +5 -1
  116. package/dist/utils.js +41 -0
  117. package/dist/utils.js.map +1 -1
  118. package/dist/view-plugin.js +8 -3
  119. package/dist/view-plugin.js.map +1 -1
  120. package/dist/workspace-plugin.js +39 -36
  121. package/dist/workspace-plugin.js.map +1 -1
  122. package/package.json +5 -4
  123. package/src/acl-plugin.ts +3 -1
  124. package/src/atf/test-plugin.ts +6 -9
  125. package/src/basic-syntax-plugin.ts +11 -3
  126. package/src/column-plugin.ts +137 -75
  127. package/src/flow/flow-logic/flow-logic-diagnostics.ts +5 -6
  128. package/src/flow/plugins/flow-action-definition-plugin.ts +1581 -61
  129. package/src/flow/plugins/flow-data-pill-plugin.ts +5 -2
  130. package/src/flow/plugins/flow-definition-plugin.ts +12 -47
  131. package/src/flow/plugins/flow-diagnostics-plugin.ts +2 -2
  132. package/src/flow/plugins/flow-instance-plugin.ts +98 -22
  133. package/src/flow/plugins/step-definition-plugin.ts +2 -1
  134. package/src/flow/plugins/step-instance-plugin.ts +772 -156
  135. package/src/flow/plugins/wfa-datapill-plugin.ts +25 -5
  136. package/src/flow/post-install.ts +1 -0
  137. package/src/flow/utils/complex-object-resolver.ts +4 -1
  138. package/src/flow/utils/complex-objects.ts +1 -1
  139. package/src/flow/utils/flow-constants.ts +421 -5
  140. package/src/flow/utils/flow-io-to-record.ts +43 -17
  141. package/src/flow/utils/flow-shapes.ts +4 -0
  142. package/src/flow/utils/label-cache-parser.ts +33 -4
  143. package/src/flow/utils/pill-shape-helpers.ts +42 -0
  144. package/src/flow/utils/pill-string-parser.ts +1 -0
  145. package/src/flow/utils/schema-to-flow-object.ts +183 -15
  146. package/src/flow/utils/utils.ts +12 -1
  147. package/src/form-plugin.ts +1 -3
  148. package/src/inbound-email-action-plugin.ts +145 -0
  149. package/src/index.ts +4 -0
  150. package/src/instance-scan-plugin.ts +0 -5
  151. package/src/now-config-plugin.ts +1 -0
  152. package/src/property-plugin.ts +4 -1
  153. package/src/record-plugin.ts +25 -7
  154. package/src/rest-api-plugin.ts +7 -1
  155. package/src/schedule-script/scheduled-script-plugin.ts +14 -3
  156. package/src/script-include-plugin.ts +8 -0
  157. package/src/service-catalog/catalog-clientscript-plugin.ts +2 -2
  158. package/src/service-catalog/catalog-ui-policy-plugin.ts +2 -2
  159. package/src/service-catalog/service-catalog-base.ts +24 -24
  160. package/src/service-catalog/utils.ts +1 -1
  161. package/src/service-portal/header-footer-plugin.ts +57 -0
  162. package/src/service-portal/menu-plugin.ts +1 -23
  163. package/src/service-portal/page-plugin.ts +3 -28
  164. package/src/service-portal/page-route-map-plugin.ts +124 -0
  165. package/src/service-portal/portal-plugin.ts +33 -10
  166. package/src/service-portal/utils.ts +404 -3
  167. package/src/service-portal/widget-plugin.ts +14 -290
  168. package/src/static-content-plugin.ts +3 -0
  169. package/src/table-plugin.ts +466 -99
  170. package/src/ui-action-plugin.ts +1 -8
  171. package/src/ui-page-plugin.ts +76 -13
  172. package/src/ui-policy-plugin.ts +32 -128
  173. package/src/utils.ts +52 -0
  174. package/src/view-plugin.ts +10 -4
  175. package/src/workspace-plugin.ts +43 -43
@@ -1,8 +1,46 @@
1
1
  import { NowIncludeShape } from '../now-include-plugin';
2
- import { type Record, Shape, type Diagnostics, type Factory } from '@servicenow/sdk-build-core';
2
+ import { type Record, Shape, type Diagnostics, type Factory, CallExpressionShape } from '@servicenow/sdk-build-core';
3
+ /**
4
+ * Shared toShape implementation for SPWidget and SPHeaderFooter
5
+ */
6
+ export declare function createWidgetToShape(record: Record, descendants: {
7
+ query: (table: string) => Record[];
8
+ }, callee: 'SPWidget' | 'SPHeaderFooter', tablePrefix?: string, includeStaticField?: boolean): Promise<{
9
+ success: boolean;
10
+ value: CallExpressionShape;
11
+ }>;
3
12
  /**
4
13
  * Creates a NowIncludeShape with a custom file path suffix and extension
5
14
  */
6
- export declare function createIncludeShape(record: Record, content: string | Shape, suffix: string, extension: 'js' | 'html' | 'scss', folderName: string): Promise<NowIncludeShape>;
15
+ export declare function createIncludeShape(record: Record, content: string | Shape, suffix: string, extension: 'js' | 'html' | 'scss', folderName: string, tablePrefix?: string): Promise<NowIncludeShape>;
7
16
  export declare const DEFAULT_ORDER = 100;
17
+ /**
18
+ * Shared toRecord implementation for SPWidget and SPHeaderFooter
19
+ */
20
+ export declare function createWidgetToRecord(callExpression: CallExpressionShape, { diagnostics, factory, config, }: {
21
+ diagnostics: Diagnostics;
22
+ factory: Factory;
23
+ config: {
24
+ scope: string;
25
+ };
26
+ }, options: {
27
+ callee: 'SPWidget' | 'SPHeaderFooter';
28
+ table: 'sp_widget' | 'sp_header_footer';
29
+ includeStaticField?: boolean;
30
+ getDefaultClientScript: (controller: string) => string;
31
+ defaultServerScript: string;
32
+ defaultLinkScript: string;
33
+ defaultHtmlTemplate: string;
34
+ }): Promise<{
35
+ success: boolean;
36
+ value: Record;
37
+ }>;
38
+ /**
39
+ * Converts a roles Shape (array of strings, Role() expressions, or Record references)
40
+ * to a deduplicated comma-separated string of role names.
41
+ * @param rolesShape - Shape containing the roles array
42
+ * @param diagnostics - Optional diagnostics for reporting invalid role entries
43
+ * @returns Comma-separated string of unique role names, or empty string if no roles
44
+ */
45
+ export declare function getRolesString(rolesShape: Shape, diagnostics?: Diagnostics): string;
8
46
  export declare function getIncludeRecords(shape: Shape, parentId: Shape, factory: Factory, m2mTable: string, includeTable: string, parentTable: string, diagnostics: Diagnostics): Promise<Record[]>;
@@ -1,15 +1,120 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DEFAULT_ORDER = void 0;
4
+ exports.createWidgetToShape = createWidgetToShape;
4
5
  exports.createIncludeShape = createIncludeShape;
6
+ exports.createWidgetToRecord = createWidgetToRecord;
7
+ exports.getRolesString = getRolesString;
5
8
  exports.getIncludeRecords = getIncludeRecords;
6
9
  const now_include_plugin_1 = require("../now-include-plugin");
7
10
  const sdk_build_core_1 = require("@servicenow/sdk-build-core");
11
+ const utils_1 = require("../utils");
12
+ const service_portal_1 = require("@servicenow/sdk-core/runtime/service-portal");
13
+ const now_id_plugin_1 = require("../now-id-plugin");
14
+ function convertOptionSchemaKeys(optionSchema, convertKey) {
15
+ if (!Array.isArray(optionSchema)) {
16
+ return optionSchema;
17
+ }
18
+ return optionSchema.map((option) => Object.fromEntries(Object.entries(option).map(([k, v]) => [convertKey(k), v])));
19
+ }
20
+ const toCamelCase = (key) => key.replace(/_([a-z])/g, (_, c) => c.toUpperCase());
21
+ /**
22
+ * Shared toShape implementation for SPWidget and SPHeaderFooter
23
+ */
24
+ async function createWidgetToShape(record, descendants, callee, tablePrefix = 'sp_widget', includeStaticField = false) {
25
+ const folderName = record.get('id')?.asString()?.getValue()?.replace(/[\s-]/g, '_') ||
26
+ record.get('name')?.asString()?.getValue()?.toLowerCase().replace(/[\s-]/g, '_');
27
+ const dependencies = descendants.query('m2m_sp_widget_dependency');
28
+ const angularProviders = descendants.query('m2m_sp_ng_pro_sp_widget');
29
+ const templates = descendants.query('sp_ng_template').map((template) => {
30
+ return {
31
+ $id: template.getId(),
32
+ id: template.get('id'),
33
+ htmlTemplate: template.get('template'),
34
+ };
35
+ });
36
+ const category = (0, utils_1.reverseObject)(service_portal_1.WidgetCategories)[record.get('category').ifString()?.getValue() || ''];
37
+ const serverScript = await createIncludeShape(record, record.get('script'), 'server_script', 'js', folderName, tablePrefix);
38
+ const clientScript = await createIncludeShape(record, record.get('client_script'), 'client_script', 'js', folderName, tablePrefix);
39
+ const css = await createIncludeShape(record, record.get('css'), 'style', 'scss', folderName, tablePrefix);
40
+ const htmlTemplate = await createIncludeShape(record, record.get('template'), 'template', 'html', folderName, tablePrefix);
41
+ const linkScript = await createIncludeShape(record, record.get('link'), 'link-script', 'js', folderName, tablePrefix);
42
+ return {
43
+ success: true,
44
+ value: new sdk_build_core_1.CallExpressionShape({
45
+ source: record,
46
+ callee,
47
+ args: [
48
+ record.transform(({ $ }) => {
49
+ const baseTransform = {
50
+ $id: $.val(now_id_plugin_1.NowIdShape.from(record)),
51
+ name: $,
52
+ category: $.val(category).def('custom'),
53
+ clientScript: $.val(clientScript).def(''),
54
+ serverScript: $.val(serverScript).def(''),
55
+ controllerAs: $.from('controller_as').def('c'),
56
+ htmlTemplate: $.val(htmlTemplate).def(''),
57
+ customCss: $.val(css).def(''),
58
+ dataTable: $.from('data_table')
59
+ .map((v) => {
60
+ const val = v.ifString()?.getValue();
61
+ return val && val.trim() !== '' ? val : 'sp_instance';
62
+ })
63
+ .def('sp_instance'),
64
+ demoData: $.from('demo_data')
65
+ .map((d) => {
66
+ const json = d.ifString()?.getValue();
67
+ const parsed = (0, utils_1.noThrow)(() => json && JSON.parse(json));
68
+ return parsed instanceof Error ? json : parsed;
69
+ })
70
+ .def(''),
71
+ description: $.def(''),
72
+ docs: $.def(''),
73
+ fields: $.from('field_list')
74
+ .map((fields) => {
75
+ const fieldStr = fields.ifString()?.getValue();
76
+ const fieldArray = fieldStr?.split(',').filter((f) => f.trim());
77
+ return fieldArray && fieldArray.length > 0 ? fieldArray : undefined;
78
+ })
79
+ .def(undefined),
80
+ hasPreview: $.from('has_preview').toBoolean().def(false),
81
+ id: $.def(''),
82
+ internal: $.toBoolean().def(false),
83
+ linkScript: $.val(linkScript).def(''),
84
+ roles: $.map((role) => {
85
+ const roleStr = role.ifString()?.getValue();
86
+ const roleArray = roleStr?.split(',').filter((r) => r.trim());
87
+ return roleArray && roleArray.length > 0 ? roleArray : undefined;
88
+ }).def(undefined),
89
+ servicenow: $.toBoolean().def(false),
90
+ optionSchema: $.from('option_schema')
91
+ .map((v) => {
92
+ const json = v.ifString()?.getValue();
93
+ const parsed = (0, utils_1.noThrow)(() => json && JSON.parse(json));
94
+ const result = parsed instanceof Error ? json : parsed;
95
+ return convertOptionSchemaKeys(result, toCamelCase);
96
+ })
97
+ .def(''),
98
+ public: $.toBoolean().def(false),
99
+ dependencies: $.val(dependencies.length > 0 ? dependencies.map((dep) => dep.get('sp_dependency')) : undefined),
100
+ angularProviders: $.val(angularProviders.length > 0
101
+ ? angularProviders.map((ap) => ap.get('sp_angular_provider'))
102
+ : undefined),
103
+ templates: $.val(templates.length > 0 ? templates : undefined),
104
+ };
105
+ return includeStaticField
106
+ ? { ...baseTransform, static: $.from('static').toBoolean().def(false) }
107
+ : baseTransform;
108
+ }),
109
+ ],
110
+ }),
111
+ };
112
+ }
8
113
  /**
9
114
  * Creates a NowIncludeShape with a custom file path suffix and extension
10
115
  */
11
- async function createIncludeShape(record, content, suffix, extension, folderName) {
12
- const baseName = `sp_widget_${folderName}`;
116
+ async function createIncludeShape(record, content, suffix, extension, folderName, tablePrefix = 'sp_widget') {
117
+ const baseName = `${tablePrefix}_${folderName}`;
13
118
  const includedText = content instanceof sdk_build_core_1.Shape ? content.toString().getValue() : content;
14
119
  return new now_include_plugin_1.NowIncludeShape({
15
120
  source: record,
@@ -18,6 +123,182 @@ async function createIncludeShape(record, content, suffix, extension, folderName
18
123
  });
19
124
  }
20
125
  exports.DEFAULT_ORDER = 100;
126
+ /**
127
+ * Shared toRecord implementation for SPWidget and SPHeaderFooter
128
+ */
129
+ async function createWidgetToRecord(callExpression, { diagnostics, factory, config, }, options) {
130
+ const { table, includeStaticField = false } = options;
131
+ const widget = callExpression.getArgument(0).asObject();
132
+ const dependencies = widget
133
+ .get('dependencies')
134
+ .ifArray()
135
+ ?.map((dep) => (dep.isString() ? dep.getValue() : dep.ifRecord()?.getId()))
136
+ .filter((dep) => dep) ?? [];
137
+ const angularProviders = widget
138
+ .get('angularProviders')
139
+ .ifArray()
140
+ ?.map((ap) => (ap.isString() ? ap.getValue() : ap.ifRecord()?.getId()))
141
+ .filter((ap) => ap) ?? [];
142
+ const templates = widget
143
+ .get('templates')
144
+ .ifArray()
145
+ ?.map((shp) => shp.getValue()) ?? [];
146
+ const widgetId = widget.get('id').ifString();
147
+ if (widgetId && !/^[a-zA-Z0-9_-]+$/g.test(widgetId.getValue())) {
148
+ diagnostics.error(widgetId.getOriginalNode(), `Invalid value: must contain only alphanumeric, -, or _ characters`);
149
+ }
150
+ const clientScript = widget.get('clientScript');
151
+ const clientScriptValue = clientScript instanceof now_include_plugin_1.NowIncludeShape ? clientScript.getValue() : clientScript.ifString()?.getValue();
152
+ if (clientScriptValue && clientScriptValue.trim().length > 0) {
153
+ const clientScriptPattern = /^(function|api\.controller\s?=\s?function)\s?([$a-z_][$0-9a-z_]*)?\s?\(.*\)\s?\n?{/i;
154
+ if (!clientScriptPattern.test(clientScriptValue.trim())) {
155
+ diagnostics.error(clientScript.getOriginalNode(), `Client controller must contain a JavaScript function. Example: api.controller = function($scope) { ... }`);
156
+ }
157
+ }
158
+ const htmlTemplate = widget.get('htmlTemplate');
159
+ const htmlTemplateValue = htmlTemplate instanceof now_include_plugin_1.NowIncludeShape ? htmlTemplate.getValue() : htmlTemplate.ifString()?.getValue();
160
+ if (htmlTemplateValue && htmlTemplateValue.length > 0 && htmlTemplateValue.indexOf('href="#"') > 0) {
161
+ diagnostics.error(htmlTemplate.getOriginalNode(), `Do not use href="#" in the Service Portal, use href="javascript:void(0)" instead`);
162
+ }
163
+ const roles = widget
164
+ .get('roles')
165
+ .ifArray()
166
+ ?.map((role) => {
167
+ if (role.isString()) {
168
+ return role;
169
+ }
170
+ if (role.isRecord()) {
171
+ return role.get('name');
172
+ }
173
+ return undefined;
174
+ })
175
+ .filter((role) => role);
176
+ if (roles) {
177
+ roles
178
+ .filter((role) => (0, sdk_build_core_1.isGUID)(role.getValue()))
179
+ .forEach((role) => diagnostics.error(role.getOriginalNode(), `expecting role names or role records created by the Role or Record plugins, not sys_ids`));
180
+ }
181
+ const controller = widget.get('controllerAs').ifString()?.getValue() || 'c';
182
+ const servicenow = (widget.get('servicenow').ifBoolean()?.getValue() &&
183
+ (config.scope.startsWith('sn_') || config.scope.startsWith('snc_'))) ||
184
+ false;
185
+ const widgetRecord = await factory.createRecord({
186
+ source: callExpression,
187
+ table,
188
+ explicitId: widget.get('$id'),
189
+ properties: widget.transform(({ $ }) => {
190
+ const baseTransform = {
191
+ name: $,
192
+ category: $.map((v) => {
193
+ const catKey = v.ifString()?.getValue() || '';
194
+ return service_portal_1.WidgetCategories[catKey];
195
+ }).def('custom'),
196
+ client_script: $.from('clientScript').def(options.getDefaultClientScript(controller)),
197
+ script: $.from('serverScript').def(options.defaultServerScript),
198
+ controller_as: $.from('controllerAs').def('c'),
199
+ template: $.from('htmlTemplate').def(options.defaultHtmlTemplate),
200
+ css: $.from('customCss').def(''),
201
+ data_table: $.from('dataTable').def('sp_instance'),
202
+ demo_data: $.from('demoData')
203
+ .map((v) => (v.ifString() || v instanceof now_include_plugin_1.NowIncludeShape ? v : JSON.stringify(v.getValue())))
204
+ .def(''),
205
+ description: $.def(''),
206
+ docs: $.map((v) => (v.isString() ? v : v.ifRecord()?.getId())),
207
+ field_list: $.from('fields')
208
+ .map((v) => v.getValue()?.toString())
209
+ .def(''),
210
+ has_preview: $.from('hasPreview').toBoolean().def(false),
211
+ id: $.def(''),
212
+ internal: $.def(false),
213
+ servicenow: $.val(servicenow),
214
+ link: $.from('linkScript').def(options.defaultLinkScript),
215
+ roles: $.val(roles?.map((r) => r.getValue()).toString()).def(''),
216
+ option_schema: $.from('optionSchema')
217
+ .map((v) => {
218
+ const json = v.getValue();
219
+ const converted = convertOptionSchemaKeys(json, (key) => key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`));
220
+ return converted && JSON.stringify(converted);
221
+ })
222
+ .def(''),
223
+ public: $.def(false),
224
+ };
225
+ return includeStaticField
226
+ ? { ...baseTransform, static: $.from('static').toBoolean().def(false) }
227
+ : baseTransform;
228
+ }),
229
+ });
230
+ return {
231
+ success: true,
232
+ value: widgetRecord.with(...(await Promise.all(templates.map(async (template) => {
233
+ return await factory.createRecord({
234
+ source: callExpression,
235
+ table: 'sp_ng_template',
236
+ explicitId: template.$id,
237
+ properties: {
238
+ id: template.id,
239
+ sp_widget: widgetRecord.getId(),
240
+ template: template.htmlTemplate,
241
+ },
242
+ });
243
+ }))), ...(await Promise.all(dependencies.map(async (dep) => {
244
+ return await factory.createRecord({
245
+ source: callExpression,
246
+ table: 'm2m_sp_widget_dependency',
247
+ properties: {
248
+ sp_dependency: dep,
249
+ sp_widget: widgetRecord.getId(),
250
+ },
251
+ });
252
+ }))), ...(await Promise.all(angularProviders.map(async (ap) => {
253
+ return await factory.createRecord({
254
+ source: callExpression,
255
+ table: 'm2m_sp_ng_pro_sp_widget',
256
+ properties: {
257
+ sp_angular_provider: ap,
258
+ sp_widget: widgetRecord.getId(),
259
+ },
260
+ });
261
+ })))),
262
+ };
263
+ }
264
+ /**
265
+ * Converts a roles Shape (array of strings, Role() expressions, or Record references)
266
+ * to a deduplicated comma-separated string of role names.
267
+ * @param rolesShape - Shape containing the roles array
268
+ * @param diagnostics - Optional diagnostics for reporting invalid role entries
269
+ * @returns Comma-separated string of unique role names, or empty string if no roles
270
+ */
271
+ function getRolesString(rolesShape, diagnostics) {
272
+ const roles = rolesShape
273
+ .ifArray()
274
+ ?.getElements()
275
+ .map((role) => {
276
+ if (role.isString()) {
277
+ return role.getValue();
278
+ }
279
+ if (role instanceof sdk_build_core_1.CallExpressionShape) {
280
+ const name = role.getArgument(0).asObject().get('name');
281
+ if (name.isString()) {
282
+ return name.getValue();
283
+ }
284
+ }
285
+ if (role.isRecord()) {
286
+ const name = role.get('name');
287
+ if (name?.isString()) {
288
+ return name.getValue();
289
+ }
290
+ }
291
+ if (diagnostics) {
292
+ diagnostics.error(role, 'roles must be strings or role records');
293
+ }
294
+ return undefined;
295
+ })
296
+ .filter((r) => r !== undefined && r.trim() !== '');
297
+ if (!roles || roles.length === 0) {
298
+ return '';
299
+ }
300
+ return [...new Set(roles)].join(',');
301
+ }
21
302
  async function getIncludeRecords(shape, parentId, factory, m2mTable, includeTable, parentTable, diagnostics) {
22
303
  return (await Promise.all(shape?.ifArray()?.map(async (include) => {
23
304
  const includeProps = include.ifObject()?.get('include');
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/service-portal/utils.ts"],"names":[],"mappings":";;;AAMA,gDAeC;AAID,8CA2CC;AApED,8DAAuD;AACvD,+DAA8G;AAE9G;;GAEG;AACI,KAAK,UAAU,kBAAkB,CACpC,MAAc,EACd,OAAuB,EACvB,MAAc,EACd,SAAiC,EACjC,UAAkB;IAElB,MAAM,QAAQ,GAAG,aAAa,UAAU,EAAE,CAAA;IAC1C,MAAM,YAAY,GAAG,OAAO,YAAY,sBAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;IAEvF,OAAO,IAAI,oCAAe,CAAC;QACvB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,KAAK,QAAQ,IAAI,MAAM,IAAI,SAAS,EAAE;QAC5C,YAAY;KACf,CAAC,CAAA;AACN,CAAC;AAEY,QAAA,aAAa,GAAG,GAAG,CAAA;AAEzB,KAAK,UAAU,iBAAiB,CACnC,KAAY,EACZ,QAAe,EACf,OAAgB,EAChB,QAAgB,EAChB,YAAoB,EACpB,WAAmB,EACnB,WAAwB;IAExB,OAAO,CACH,MAAM,OAAO,CAAC,GAAG,CACb,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACpC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;QAEvD,IAAI,SAA4B,CAAA;QAChC,IAAI,YAAY,EAAE,QAAQ,EAAE,EAAE,CAAC;YAC3B,SAAS,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAA;QAClD,CAAC;aAAM,IAAI,YAAY,EAAE,QAAQ,EAAE,EAAE,CAAC;YAClC,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,CAAA;QACpC,CAAC;aAAM,CAAC;YACJ,MAAM,eAAe,GAAG,YAAY,KAAK,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAA;YACrF,WAAW,CAAC,KAAK,CACb,YAAa,EACb,gCAAgC,eAAe,aAAa,YAAY,eAAe,CAC1F,CAAA;YACD,OAAO,SAAS,CAAA;QACpB,CAAC;QAED,MAAM,QAAQ,GAAG;YACb,CAAC,YAAY,CAAC,EAAE,SAAS;YACzB,CAAC,WAAW,CAAC,EAAE,QAAQ;SAC1B,CAAA;QACD,OAAO,MAAM,OAAO,CAAC,YAAY,CAAC;YAC9B,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE;gBACR,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,IAAI,qBAAa;gBAC9E,GAAG,QAAQ;aACd;SACJ,CAAC,CAAA;IACN,CAAC,CAAC,IAAI,EAAE,CACX,CACJ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAa,CAAA;AACtC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/service-portal/utils.ts"],"names":[],"mappings":"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"}
@@ -3,22 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SP_WIDGET_DEFAULT_HTML_TEMPLATE = exports.SP_WIDGET_DEFAULT_SERVER_SCRIPT = exports.SP_WIDGET_DEFAULT_LINK_SCRIPT = exports.getDefaultClientScript = exports.SPWidgetPlugin = void 0;
4
4
  const sdk_build_core_1 = require("@servicenow/sdk-build-core");
5
5
  const utils_1 = require("../utils");
6
- const service_portal_1 = require("@servicenow/sdk-core/runtime/service-portal");
7
- const now_id_plugin_1 = require("../now-id-plugin");
8
- const now_include_plugin_1 = require("../now-include-plugin");
9
- const utils_2 = require("../utils");
10
- const utils_3 = require("./utils");
11
- function convertOptionSchemaKeys(optionSchema, convertKey) {
12
- if (!Array.isArray(optionSchema)) {
13
- return optionSchema;
14
- }
15
- return optionSchema.map((option) => Object.fromEntries(Object.entries(option).map(([k, v]) => [convertKey(k), v])));
16
- }
17
- const toCamelCase = (key) => key.replace(/_([a-z])/g, (_, c) => c.toUpperCase());
18
- const toSnakeCase = (key) => key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);
6
+ const utils_2 = require("./utils");
19
7
  exports.SPWidgetPlugin = sdk_build_core_1.Plugin.create({
20
8
  name: 'SPWidgetPlugin',
21
- docs: [(0, utils_2.createSdkDocEntry)('SPWidget', ['sp_widget'])],
9
+ docs: [(0, utils_1.createSdkDocEntry)('SPWidget', ['sp_widget'])],
22
10
  records: {
23
11
  sp_widget: {
24
12
  relationships: {
@@ -27,83 +15,7 @@ exports.SPWidgetPlugin = sdk_build_core_1.Plugin.create({
27
15
  sp_ng_template: { via: 'sp_widget', descendant: true },
28
16
  },
29
17
  async toShape(record, { descendants }) {
30
- const folderName = record.get('id')?.asString()?.getValue()?.replace(/[\s-]/g, '_') ||
31
- record.get('name')?.asString()?.getValue()?.toLowerCase().replace(/[\s-]/g, '_');
32
- const dependencies = descendants.query('m2m_sp_widget_dependency');
33
- const angularProviders = descendants.query('m2m_sp_ng_pro_sp_widget');
34
- const templates = descendants.query('sp_ng_template').map((template) => {
35
- return {
36
- $id: template.getId(),
37
- id: template.get('id'),
38
- htmlTemplate: template.get('template'),
39
- };
40
- });
41
- const category = (0, utils_1.reverseObject)(service_portal_1.WidgetCategories)[record.get('category').ifString()?.getValue() || ''];
42
- const serverScript = await (0, utils_3.createIncludeShape)(record, record.get('script'), 'server_script', 'js', folderName);
43
- const clientScript = await (0, utils_3.createIncludeShape)(record, record.get('client_script'), 'client_script', 'js', folderName);
44
- const css = await (0, utils_3.createIncludeShape)(record, record.get('css'), 'style', 'scss', folderName);
45
- const htmlTemplate = await (0, utils_3.createIncludeShape)(record, record.get('template'), 'template', 'html', folderName);
46
- const linkScript = await (0, utils_3.createIncludeShape)(record, record.get('link'), 'link-script', 'js', folderName);
47
- return {
48
- success: true,
49
- value: new sdk_build_core_1.CallExpressionShape({
50
- source: record,
51
- callee: 'SPWidget',
52
- args: [
53
- record.transform(({ $ }) => ({
54
- $id: $.val(now_id_plugin_1.NowIdShape.from(record)),
55
- name: $,
56
- category: $.val(category).def('custom'),
57
- clientScript: $.val(clientScript).def(''),
58
- serverScript: $.val(serverScript).def(''),
59
- controllerAs: $.from('controller_as').def('c'),
60
- htmlTemplate: $.val(htmlTemplate).def(''),
61
- customCss: $.val(css).def(''),
62
- dataTable: $.from('data_table').def('sp_instance'),
63
- demoData: $.from('demo_data')
64
- .map((d) => {
65
- const json = d.ifString()?.getValue();
66
- const parsed = (0, utils_1.noThrow)(() => json && JSON.parse(json));
67
- return parsed instanceof Error ? json : parsed;
68
- })
69
- .def(''),
70
- description: $.def(''),
71
- docs: $.def(''),
72
- fields: $.from('field_list')
73
- .map((fields) => {
74
- const fieldStr = fields.ifString()?.getValue();
75
- return fieldStr && fieldStr.split(',');
76
- })
77
- .def(''),
78
- hasPreview: $.from('has_preview').toBoolean().def(false),
79
- id: $.def(''),
80
- internal: $.toBoolean().def(false),
81
- linkScript: $.val(linkScript).def(''),
82
- roles: $.map((role) => {
83
- const roleStr = role.ifString()?.getValue();
84
- return roleStr && roleStr.split(',');
85
- }).def(''),
86
- servicenow: $.toBoolean().def(false),
87
- optionSchema: $.from('option_schema')
88
- .map((v) => {
89
- const json = v.ifString()?.getValue();
90
- const parsed = (0, utils_1.noThrow)(() => json && JSON.parse(json));
91
- const result = parsed instanceof Error ? json : parsed;
92
- return convertOptionSchemaKeys(result, toCamelCase);
93
- })
94
- .def(''),
95
- public: $.toBoolean().def(false),
96
- dependencies: $.val(dependencies.length > 0
97
- ? dependencies.map((dep) => dep.get('sp_dependency'))
98
- : undefined),
99
- angularProviders: $.val(angularProviders.length > 0
100
- ? angularProviders.map((ap) => ap.get('sp_angular_provider'))
101
- : undefined),
102
- templates: $.val(templates.length > 0 ? templates : undefined),
103
- })),
104
- ],
105
- }),
106
- };
18
+ return (0, utils_2.createWidgetToShape)(record, descendants, 'SPWidget');
107
19
  },
108
20
  },
109
21
  m2m_sp_widget_dependency: {
@@ -121,135 +33,14 @@ exports.SPWidgetPlugin = sdk_build_core_1.Plugin.create({
121
33
  if (callExpression.getCallee() !== 'SPWidget') {
122
34
  return { success: false };
123
35
  }
124
- const widget = callExpression.getArgument(0).asObject();
125
- const dependencies = widget
126
- .get('dependencies')
127
- .ifArray()
128
- ?.map((dep) => (dep.isString() ? dep.getValue() : dep.ifRecord()?.getId())) || [];
129
- const angularProviders = widget
130
- .get('angularProviders')
131
- .ifArray()
132
- ?.map((ap) => (ap.isString() ? ap.getValue() : ap.ifRecord()?.getId())) || [];
133
- const templates = widget
134
- .get('templates')
135
- .ifArray()
136
- ?.map((shp) => shp.getValue()) || [];
137
- const widgetId = widget.get('id').ifString();
138
- if (widgetId && !/^[a-zA-Z0-9_-]+$/g.test(widgetId.getValue())) {
139
- diagnostics.error(widgetId.getOriginalNode(), `Invalid value: must contain only alphanumeric, -, or _ characters`);
140
- }
141
- const clientScript = widget.get('clientScript');
142
- const clientScriptValue = clientScript instanceof now_include_plugin_1.NowIncludeShape
143
- ? clientScript.getValue()
144
- : clientScript.ifString()?.getValue();
145
- if (clientScriptValue && clientScriptValue.trim().length > 0) {
146
- const clientScriptPattern = /^(function|api\.controller\s?=\s?function)\s?([$a-z_][$0-9a-z_]*)?\s?\(.*\)\s?\n?{/i;
147
- if (!clientScriptPattern.test(clientScriptValue.trim())) {
148
- diagnostics.error(clientScript.getOriginalNode(), `Client controller must contain a JavaScript function. Example: api.controller = function($scope) { ... }`);
149
- }
150
- }
151
- const htmlTemplate = widget.get('htmlTemplate');
152
- const htmlTemplateValue = htmlTemplate instanceof now_include_plugin_1.NowIncludeShape
153
- ? htmlTemplate.getValue()
154
- : htmlTemplate.ifString()?.getValue();
155
- if (htmlTemplateValue && htmlTemplateValue.length > 0 && htmlTemplateValue.indexOf('href="#"') > 0) {
156
- diagnostics.error(htmlTemplate.getOriginalNode(), `Do not use href="#" in the Service Portal, use href="javascript:void(0)" instead`);
157
- }
158
- const roles = widget
159
- .get('roles')
160
- .ifArray()
161
- ?.map((role) => {
162
- if (role.isString()) {
163
- return role;
164
- }
165
- if (role.isRecord()) {
166
- return role.get('name');
167
- }
168
- return undefined;
169
- })
170
- .filter((role) => role);
171
- if (roles) {
172
- roles
173
- .filter((role) => (0, sdk_build_core_1.isGUID)(role.getValue()))
174
- .forEach((role) => diagnostics.error(role.getOriginalNode(), `expecting role names or role records created by the Role or Record plugins, not sys_ids`));
175
- }
176
- const controller = widget.get('controllerAs').ifString()?.getValue() || 'c';
177
- const servicenow = (widget.get('servicenow').ifBoolean()?.getValue() &&
178
- (config.scope.startsWith('sn_') || config.scope.startsWith('snc_'))) ||
179
- false;
180
- const widgetRecord = await factory.createRecord({
181
- source: callExpression,
36
+ return (0, utils_2.createWidgetToRecord)(callExpression, { diagnostics, factory, config }, {
37
+ callee: 'SPWidget',
182
38
  table: 'sp_widget',
183
- explicitId: widget.get('$id'),
184
- properties: widget.transform(({ $ }) => ({
185
- name: $,
186
- category: $.map((v) => {
187
- const catKey = v.ifString()?.getValue() || '';
188
- return service_portal_1.WidgetCategories[catKey];
189
- }).def('custom'),
190
- client_script: $.from('clientScript').def((0, exports.getDefaultClientScript)(controller)),
191
- script: $.from('serverScript').def(exports.SP_WIDGET_DEFAULT_SERVER_SCRIPT),
192
- controller_as: $.from('controllerAs').def('c'),
193
- template: $.from('htmlTemplate').def(exports.SP_WIDGET_DEFAULT_HTML_TEMPLATE),
194
- css: $.from('customCss').def(''),
195
- data_table: $.from('dataTable').def('sp_instance'),
196
- demo_data: $.from('demoData')
197
- .map((v) => v.ifString() || v instanceof now_include_plugin_1.NowIncludeShape ? v : JSON.stringify(v.getValue()))
198
- .def(''),
199
- description: $.def(''),
200
- docs: $.map((v) => (v.isString() ? v : v.ifRecord()?.getId())),
201
- field_list: $.from('fields')
202
- .map((v) => v.getValue()?.toString())
203
- .def(''),
204
- has_preview: $.from('hasPreview').toBoolean().def(false),
205
- id: $.def(''),
206
- internal: $.def(false),
207
- servicenow: $.val(servicenow),
208
- link: $.from('linkScript').def(exports.SP_WIDGET_DEFAULT_LINK_SCRIPT),
209
- roles: $.val(roles?.map((r) => r.getValue()).toString()).def(''),
210
- option_schema: $.from('optionSchema')
211
- .map((v) => {
212
- const json = v.getValue();
213
- const converted = convertOptionSchemaKeys(json, toSnakeCase);
214
- return converted && JSON.stringify(converted);
215
- })
216
- .def(''),
217
- public: $.def(false),
218
- })),
39
+ getDefaultClientScript: exports.getDefaultClientScript,
40
+ defaultServerScript: exports.SP_WIDGET_DEFAULT_SERVER_SCRIPT,
41
+ defaultLinkScript: exports.SP_WIDGET_DEFAULT_LINK_SCRIPT,
42
+ defaultHtmlTemplate: exports.SP_WIDGET_DEFAULT_HTML_TEMPLATE,
219
43
  });
220
- return {
221
- success: true,
222
- value: widgetRecord.with(...(await Promise.all(templates.map(async (template) => {
223
- return await factory.createRecord({
224
- source: callExpression,
225
- table: 'sp_ng_template',
226
- explicitId: template.$id,
227
- properties: {
228
- id: template.id,
229
- sp_widget: widgetRecord.getId(),
230
- template: template.htmlTemplate,
231
- },
232
- });
233
- }))), ...(await Promise.all(dependencies.map(async (dep) => {
234
- return await factory.createRecord({
235
- source: callExpression,
236
- table: 'm2m_sp_widget_dependency',
237
- properties: {
238
- sp_dependency: dep,
239
- sp_widget: widgetRecord.getId(),
240
- },
241
- });
242
- }))), ...(await Promise.all(angularProviders.map(async (ap) => {
243
- return await factory.createRecord({
244
- source: callExpression,
245
- table: 'm2m_sp_ng_pro_sp_widget',
246
- properties: {
247
- sp_angular_provider: ap,
248
- sp_widget: widgetRecord.getId(),
249
- },
250
- });
251
- })))),
252
- };
253
44
  },
254
45
  },
255
46
  ],