@servicenow/sdk-build-plugins 4.7.2 → 4.8.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 (114) hide show
  1. package/dist/alias/alias-plugin.d.ts +2 -0
  2. package/dist/alias/alias-plugin.js +183 -0
  3. package/dist/alias/alias-plugin.js.map +1 -0
  4. package/dist/alias/alias-template-plugin.d.ts +2 -0
  5. package/dist/alias/alias-template-plugin.js +232 -0
  6. package/dist/alias/alias-template-plugin.js.map +1 -0
  7. package/dist/alias/index.d.ts +3 -0
  8. package/dist/alias/index.js +20 -0
  9. package/dist/alias/index.js.map +1 -0
  10. package/dist/alias/retry-policy-plugin.d.ts +2 -0
  11. package/dist/alias/retry-policy-plugin.js +119 -0
  12. package/dist/alias/retry-policy-plugin.js.map +1 -0
  13. package/dist/arrow-function-plugin.d.ts +1 -0
  14. package/dist/arrow-function-plugin.js +60 -21
  15. package/dist/arrow-function-plugin.js.map +1 -1
  16. package/dist/atf/test-plugin.js +1 -1
  17. package/dist/atf/test-plugin.js.map +1 -1
  18. package/dist/basic-syntax-plugin.js +7 -7
  19. package/dist/basic-syntax-plugin.js.map +1 -1
  20. package/dist/column/index.d.ts +2 -0
  21. package/dist/column/index.js +13 -0
  22. package/dist/column/index.js.map +1 -0
  23. package/dist/dashboard/dashboard-plugin.js +4 -0
  24. package/dist/dashboard/dashboard-plugin.js.map +1 -1
  25. package/dist/data-lookup-plugin.d.ts +2 -0
  26. package/dist/data-lookup-plugin.js +159 -0
  27. package/dist/data-lookup-plugin.js.map +1 -0
  28. package/dist/flow/flow-logic/flow-logic-diagnostics.js +2 -1
  29. package/dist/flow/flow-logic/flow-logic-diagnostics.js.map +1 -1
  30. package/dist/flow/flow-logic/flow-logic-plugin.js.map +1 -1
  31. package/dist/flow/plugins/flow-action-definition-plugin.js +81 -16
  32. package/dist/flow/plugins/flow-action-definition-plugin.js.map +1 -1
  33. package/dist/flow/plugins/flow-definition-plugin.js +70 -7
  34. package/dist/flow/plugins/flow-definition-plugin.js.map +1 -1
  35. package/dist/flow/plugins/flow-instance-plugin.d.ts +35 -1
  36. package/dist/flow/plugins/flow-instance-plugin.js +241 -7
  37. package/dist/flow/plugins/flow-instance-plugin.js.map +1 -1
  38. package/dist/flow/plugins/step-instance-plugin.js +61 -1
  39. package/dist/flow/plugins/step-instance-plugin.js.map +1 -1
  40. package/dist/flow/post-install.d.ts +2 -1
  41. package/dist/flow/post-install.js +31 -4
  42. package/dist/flow/post-install.js.map +1 -1
  43. package/dist/flow/utils/complex-object-resolver.js +4 -2
  44. package/dist/flow/utils/complex-object-resolver.js.map +1 -1
  45. package/dist/flow/utils/datapill-transformer.d.ts +5 -72
  46. package/dist/flow/utils/datapill-transformer.js +199 -28
  47. package/dist/flow/utils/datapill-transformer.js.map +1 -1
  48. package/dist/flow/utils/flow-constants.d.ts +7 -0
  49. package/dist/flow/utils/flow-constants.js +6 -1
  50. package/dist/flow/utils/flow-constants.js.map +1 -1
  51. package/dist/flow/utils/flow-io-to-record.js +24 -15
  52. package/dist/flow/utils/flow-io-to-record.js.map +1 -1
  53. package/dist/flow/utils/flow-shapes.d.ts +8 -2
  54. package/dist/flow/utils/flow-shapes.js +19 -0
  55. package/dist/flow/utils/flow-shapes.js.map +1 -1
  56. package/dist/flow/utils/flow-variable-processor.d.ts +6 -6
  57. package/dist/flow/utils/flow-variable-processor.js +8 -8
  58. package/dist/flow/utils/flow-variable-processor.js.map +1 -1
  59. package/dist/form-plugin.js +35 -24
  60. package/dist/form-plugin.js.map +1 -1
  61. package/dist/index.d.ts +5 -1
  62. package/dist/index.js +6 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/now-attach-plugin.d.ts +1 -1
  65. package/dist/now-config-plugin.js +2 -1
  66. package/dist/now-config-plugin.js.map +1 -1
  67. package/dist/now-delete-plugin.d.ts +2 -0
  68. package/dist/now-delete-plugin.js +64 -0
  69. package/dist/now-delete-plugin.js.map +1 -0
  70. package/dist/record-plugin.d.ts +10 -0
  71. package/dist/record-plugin.js +15 -1
  72. package/dist/record-plugin.js.map +1 -1
  73. package/dist/repack/lint/Rules.js +17 -7
  74. package/dist/repack/lint/Rules.js.map +1 -1
  75. package/dist/rest-message-plugin.d.ts +2 -0
  76. package/dist/rest-message-plugin.js +331 -0
  77. package/dist/rest-message-plugin.js.map +1 -0
  78. package/dist/script-include-plugin.js +1 -1
  79. package/dist/script-include-plugin.js.map +1 -1
  80. package/dist/server-module-plugin/sbom-builder.js +17 -7
  81. package/dist/server-module-plugin/sbom-builder.js.map +1 -1
  82. package/dist/static-content-plugin.js +17 -7
  83. package/dist/static-content-plugin.js.map +1 -1
  84. package/package.json +7 -6
  85. package/src/alias/alias-plugin.ts +221 -0
  86. package/src/alias/alias-template-plugin.ts +271 -0
  87. package/src/alias/index.ts +3 -0
  88. package/src/alias/retry-policy-plugin.ts +138 -0
  89. package/src/arrow-function-plugin.ts +67 -23
  90. package/src/atf/test-plugin.ts +1 -1
  91. package/src/basic-syntax-plugin.ts +7 -7
  92. package/src/column/index.ts +7 -0
  93. package/src/dashboard/dashboard-plugin.ts +4 -0
  94. package/src/data-lookup-plugin.ts +191 -0
  95. package/src/flow/flow-logic/flow-logic-diagnostics.ts +2 -1
  96. package/src/flow/flow-logic/flow-logic-plugin.ts +0 -1
  97. package/src/flow/plugins/flow-action-definition-plugin.ts +92 -25
  98. package/src/flow/plugins/flow-definition-plugin.ts +114 -8
  99. package/src/flow/plugins/flow-instance-plugin.ts +264 -7
  100. package/src/flow/plugins/step-instance-plugin.ts +74 -2
  101. package/src/flow/post-install.ts +36 -5
  102. package/src/flow/utils/complex-object-resolver.ts +4 -2
  103. package/src/flow/utils/datapill-transformer.ts +248 -36
  104. package/src/flow/utils/flow-constants.ts +8 -0
  105. package/src/flow/utils/flow-io-to-record.ts +28 -14
  106. package/src/flow/utils/flow-shapes.ts +19 -0
  107. package/src/flow/utils/flow-variable-processor.ts +21 -10
  108. package/src/form-plugin.ts +47 -26
  109. package/src/index.ts +5 -1
  110. package/src/now-config-plugin.ts +2 -1
  111. package/src/now-delete-plugin.ts +82 -0
  112. package/src/record-plugin.ts +17 -2
  113. package/src/rest-message-plugin.ts +391 -0
  114. package/src/script-include-plugin.ts +4 -1
@@ -0,0 +1,2 @@
1
+ import { Plugin } from '@servicenow/sdk-build-core';
2
+ export declare const AliasPlugin: Plugin;
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AliasPlugin = void 0;
4
+ const sdk_build_core_1 = require("@servicenow/sdk-build-core");
5
+ const now_id_plugin_1 = require("../now-id-plugin");
6
+ const SYS_ALIAS = 'sys_alias';
7
+ // Maps developer-facing camelCase connection type labels to ServiceNow platform values
8
+ const CONNECTION_TYPE_MAP = {
9
+ httpConnection: 'http_connection',
10
+ jdbcConnection: 'jdbc_connection',
11
+ basicConnection: 'sys_connection',
12
+ jmsConnection: 'orch_jms_ds',
13
+ };
14
+ // Reverse map: platform values to camelCase labels (used in toShape)
15
+ const CONNECTION_TYPE_REVERSE_MAP = Object.fromEntries(Object.entries(CONNECTION_TYPE_MAP).map(([label, platform]) => [platform, label]));
16
+ // Default retry policy sys_ids by platform connection type
17
+ // Mirrors ServiceNow client scripts: "Default RetryPolicy onLoad new form" / "Default RetryPolicy onChange Conn-type"
18
+ const DEFAULT_RETRY_POLICY = {
19
+ http_connection: 'ef751ff07301330025d71afe2ff6a7f9', // Default HTTP Retry Policy
20
+ jdbc_connection: 'e8ddcb7573331010cbfec9d234f6a7fd', // Default JDBC Retry Policy
21
+ sys_connection: 'e385484773100010e3a71afe2ff6a709', // Default Basic Connection Retry Policy
22
+ };
23
+ /**
24
+ * Hints when `connectionType` is set on a credential-only alias.
25
+ *
26
+ * Based on sys_alias UI policies:
27
+ * - "Show / hide connection type" — connectionType is only shown when type='connection'
28
+ */
29
+ function hintConnectionTypeForCredential(connectionTypeShape, aliasType, diagnostics) {
30
+ if (aliasType === 'credential' && connectionTypeShape.isDefined()) {
31
+ diagnostics.warn(connectionTypeShape, `'connectionType' is ignored when type is 'credential'. It only applies to 'connection' type aliases.`);
32
+ }
33
+ }
34
+ /**
35
+ * Resolves a developer-facing camelCase connection type to the ServiceNow platform value.
36
+ * Returns the platform default ('http_connection') if the value is not provided.
37
+ */
38
+ function resolveConnectionType(connectionTypeShape) {
39
+ const value = connectionTypeShape.ifString()?.getValue();
40
+ if (!value) {
41
+ return 'http_connection';
42
+ }
43
+ return CONNECTION_TYPE_MAP[value] ?? 'http_connection';
44
+ }
45
+ /**
46
+ * Computes the `id` field value for a sys_alias record.
47
+ * ServiceNow's virtual field calculation: scope + '.' + name (global scope omits prefix).
48
+ * Without this, the stored 'id' column is empty and Flow Designer's
49
+ * idISNOTEMPTY filter hides the alias from dropdowns.
50
+ */
51
+ function computeAliasId(name, scope) {
52
+ const sanitizedName = name.replace(/[^A-Za-z0-9_]/g, '_');
53
+ return scope !== 'global' ? `${scope}.${sanitizedName}` : sanitizedName;
54
+ }
55
+ /**
56
+ * Validates fields related to child aliases.
57
+ *
58
+ * Based on sys_alias UI policy "HideEmptyParentField" — the parent field is hidden
59
+ * in the UI when type='credential'.
60
+ */
61
+ function validateChildAliasFields(arg, diagnostics) {
62
+ const parent = arg.get('parent');
63
+ const type = arg.get('type');
64
+ // Warn if parent is set for credential-only alias — UI hides the field so it has no effect.
65
+ if (type?.isString() && type.getValue() === 'credential' && parent?.isDefined()) {
66
+ diagnostics.warn(parent, `'parent' field is not visible in the UI when type is 'credential'. ` +
67
+ `Parent aliases are only supported for 'connection' type aliases.`);
68
+ }
69
+ }
70
+ /**
71
+ * Validates fields related to 'connection' type alias.
72
+ *
73
+ * Based on sys_alias UI policies:
74
+ * - "Show/Hide Multiple connection flag" — multipleConnections is only shown when type='connection'
75
+ * - "Show / hide Default Retry Policy field" — retryPolicy is only shown when type='connection'
76
+ */
77
+ function validateConnectionOnlyFields(arg, aliasType, diagnostics) {
78
+ if (aliasType === 'credential') {
79
+ const multipleConnections = arg.get('multipleConnections');
80
+ if (multipleConnections?.isDefined()) {
81
+ diagnostics.warn(multipleConnections, `'multipleConnections' is ignored when type is 'credential'. It only applies to 'connection' type aliases.`);
82
+ }
83
+ const retryPolicy = arg.get('retryPolicy');
84
+ if (retryPolicy?.isDefined()) {
85
+ diagnostics.warn(retryPolicy, `'retryPolicy' is ignored when type is 'credential'. It only applies to 'connection' type aliases.`);
86
+ }
87
+ }
88
+ }
89
+ exports.AliasPlugin = sdk_build_core_1.Plugin.create({
90
+ name: 'AliasPlugin',
91
+ records: {
92
+ [SYS_ALIAS]: {
93
+ toShape(record) {
94
+ // Resolve connection_type and alias type to determine default retry policy
95
+ const aliasType = record.get('type').toString().getValue() || 'connection';
96
+ const connType = record.get('connection_type').toString().getValue() || 'http_connection';
97
+ // For credential aliases, retry_policy is hidden in the UI and has no effect —
98
+ // treat whatever value is present as the default so it gets suppressed in Fluent output.
99
+ const retryPolicyValue = record.get('retry_policy').toString().getValue();
100
+ const defaultRetryPolicy = aliasType === 'connection' ? (DEFAULT_RETRY_POLICY[connType] ?? '') : retryPolicyValue;
101
+ const camelCaseConnType = CONNECTION_TYPE_REVERSE_MAP[connType] ?? 'httpConnection';
102
+ return {
103
+ success: true,
104
+ value: new sdk_build_core_1.CallExpressionShape({
105
+ source: record,
106
+ callee: 'Alias',
107
+ args: [
108
+ record.transform(({ $ }) => ({
109
+ $id: $.val(now_id_plugin_1.NowIdShape.from(record)),
110
+ name: $,
111
+ type: $.def('connection'),
112
+ connectionType: $.from('connection_type').val(camelCaseConnType).def('httpConnection'),
113
+ description: $.def(''),
114
+ parent: $.def(''),
115
+ configurationTemplate: $.from('configuration_template').def(''),
116
+ retryPolicy: $.from('retry_policy').def(defaultRetryPolicy),
117
+ multipleConnections: $.from('multiple_connections').toBoolean().def(false),
118
+ protectionPolicy: $.from('sys_policy').def(''),
119
+ })),
120
+ ],
121
+ }),
122
+ };
123
+ },
124
+ },
125
+ },
126
+ shapes: [
127
+ {
128
+ shape: sdk_build_core_1.CallExpressionShape,
129
+ fileTypes: ['fluent'],
130
+ async toRecord(callExpression, { factory, diagnostics, config }) {
131
+ if (callExpression.getCallee() !== 'Alias') {
132
+ return { success: false };
133
+ }
134
+ const argRaw = callExpression.getArgument(0);
135
+ if (!argRaw?.isObject()) {
136
+ return { success: false };
137
+ }
138
+ const arg = argRaw.asObject();
139
+ // Validate required 'name' property.
140
+ // TypeScript enforces `name: string`, but the empty-string check is semantic and
141
+ // cannot be expressed in the type system.
142
+ const name = arg.get('name');
143
+ const nameValue = name.ifString()?.getValue().trim() ?? '';
144
+ if (nameValue === '') {
145
+ diagnostics.error(name.isDefined() ? name : arg, `'name' is required and cannot be empty.`);
146
+ return { success: false };
147
+ }
148
+ // Resolve type and connectionType
149
+ const typeShape = arg.get('type');
150
+ const aliasType = typeShape.ifString()?.getValue() ?? 'connection';
151
+ const connectionTypeShape = arg.get('connectionType');
152
+ const resolvedConnectionType = resolveConnectionType(connectionTypeShape);
153
+ // Cross-field hints
154
+ hintConnectionTypeForCredential(connectionTypeShape, aliasType, diagnostics);
155
+ validateChildAliasFields(arg, diagnostics);
156
+ validateConnectionOnlyFields(arg, aliasType, diagnostics);
157
+ // Resolve default retry policy (only for connection type)
158
+ const defaultRetryPolicy = aliasType === 'connection' ? (DEFAULT_RETRY_POLICY[resolvedConnectionType] ?? '') : '';
159
+ const aliasId = computeAliasId(nameValue, config.scope);
160
+ // Create the sys_alias record
161
+ const record = await factory.createRecord({
162
+ source: callExpression,
163
+ table: SYS_ALIAS,
164
+ explicitId: arg.get('$id'),
165
+ properties: arg.transform(({ $ }) => ({
166
+ name: $,
167
+ id: $.val(aliasId),
168
+ type: $.def('connection'),
169
+ connection_type: $.from('connectionType').val(resolvedConnectionType).def('http_connection'),
170
+ description: $.def(''),
171
+ parent: $,
172
+ configuration_template: $.from('configurationTemplate'),
173
+ retry_policy: $.from('retryPolicy').def(defaultRetryPolicy),
174
+ multiple_connections: $.from('multipleConnections').def(false),
175
+ sys_policy: $.from('protectionPolicy'),
176
+ })),
177
+ });
178
+ return { success: true, value: record };
179
+ },
180
+ },
181
+ ],
182
+ });
183
+ //# sourceMappingURL=alias-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias-plugin.js","sourceRoot":"","sources":["../../src/alias/alias-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Plugin } from '@servicenow/sdk-build-core';
2
+ export declare const AliasTemplatePlugin: Plugin;
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AliasTemplatePlugin = void 0;
4
+ const sdk_build_core_1 = require("@servicenow/sdk-build-core");
5
+ const now_id_plugin_1 = require("../now-id-plugin");
6
+ const now_include_plugin_1 = require("../now-include-plugin");
7
+ const server_module_plugin_1 = require("../server-module-plugin");
8
+ const utils_1 = require("../utils");
9
+ const DEFAULT_POST_PROCESS_SCRIPT = `(function execute(aliasId, connectionSysId, jsonDefaultData, jsonDynamicData) {
10
+ // aliasId: sys_id of the alias record
11
+ // connectionSysId: sys_id of the connection record created by using the default and dynamic data
12
+ // jsonDefaultData (String): The default JSON template data from template table
13
+ // e.g. var jsonDefaultParsed = JSON.parse(jsonDefaultData);
14
+ // gs.info("default connection url = " + jsonDefaultParsed["connection"]["connection_url"]);
15
+ // jsonDynamicData (String): User input based on the key/values defined in "Dynamic Data"
16
+ // e.g. var jsonDynamicParsed = JSON.parse(jsonDynamicData);
17
+ // gs.info("dynamic connection url = " + jsonDynamicParsed["connection.connection_url"]);
18
+ })(aliasId, connectionSysId, jsonDefaultData, jsonDynamicData);
19
+ `;
20
+ const DEFAULT_PRE_EDIT_SCRIPT = `(function execute(aliasId, connectionSysId, jsonDefaultData, jsonDynamicData) {
21
+ // aliasId: sys_id of the alias record.
22
+ // connectionSysId: sys_id of the connection record created by using the default and dynamic data.
23
+ // jsonDefaultData (String): The default JSON template data from template table.
24
+ // e.g. var jsonDefaultParsed = JSON.parse(jsonDefaultData);
25
+ // gs.info("default connection url = " + jsonDefaultParsed["connection"]["connection_url"]);
26
+ // jsonDynamicData (String): Current values of Connection and Credential fields (except Password fields) based on the key-value pairs defined in "Dynamic Data".
27
+ // e.g. var jsonDynamicParsed = JSON.parse(jsonDynamicData);
28
+ // gs.info("dynamic connection url = " + jsonDynamicParsed["connection.connection_url"]);
29
+
30
+ //returns array of objects. Each object has name-value pairs for populating additional fields values in connections dashboard in the edit view.
31
+ //In this example script, additionalField1, additionalField2 are additional fields.
32
+ //Here we define calcAdditionalField1(), calcAdditionalField2() functions in the script
33
+ //to calculate current values for additionalField1, additionalField2.
34
+
35
+ //return [{
36
+ // name: "additionalField1"
37
+ // value: calcAdditionalField1(),
38
+ // },
39
+ // {
40
+ // name: "additionalField2"
41
+ // value: calcAdditionalField2(),
42
+ // }
43
+ //];
44
+
45
+ return [];
46
+ })(aliasId, connectionSysId, jsonDefaultData, jsonDynamicData);
47
+ `;
48
+ const DEFAULT_ON_EDIT_SCRIPT = `(function execute(aliasId, connectionSysId, jsonDefaultData, jsonDynamicData) {
49
+ // aliasId: sys_id of the alias record
50
+ // connectionSysId: sys_id of the connection record created by using the default and dynamic data
51
+ // jsonDefaultData (String): The default JSON template data from template table
52
+ // e.g. var jsonDefaultParsed = JSON.parse(jsonDefaultData);
53
+ // gs.info("default connection url = " + jsonDefaultParsed["connection"]["connection_url"]);
54
+ // jsonDynamicData (String): User input based on the key/values defined in "Dynamic Data"
55
+ // e.g. var jsonDynamicParsed = JSON.parse(jsonDynamicData);
56
+ // gs.info("dynamic connection url = " + jsonDynamicParsed["connection.connection_url"]);
57
+ })(aliasId, connectionSysId, jsonDefaultData, jsonDynamicData);
58
+ `;
59
+ function camelToSnake(key) {
60
+ return key.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
61
+ }
62
+ function snakeToCamel(key) {
63
+ return key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
64
+ }
65
+ // Only these keys differ between DB (snake_case) and Fluent API (camelCase).
66
+ // All other keys — including arbitrary user-defined values in open [key: string]: unknown
67
+ // sections — are left unchanged to avoid corrupting non-SDK field names.
68
+ const DB_SNAKE_KEYS = new Set([
69
+ 'connection_fields',
70
+ 'credential_fields',
71
+ 'additional_fields',
72
+ 'use_mid',
73
+ 'connection_url',
74
+ 'default_group',
75
+ ]);
76
+ const FLUENT_CAMEL_KEYS = new Set([
77
+ 'connectionFields',
78
+ 'credentialFields',
79
+ 'additionalFields',
80
+ 'useMid',
81
+ 'connectionUrl',
82
+ 'defaultGroup',
83
+ ]);
84
+ function convertKeys(obj, converter, definedKeys) {
85
+ if (obj === null || typeof obj !== 'object') {
86
+ return obj;
87
+ }
88
+ if (Array.isArray(obj)) {
89
+ return obj.map((item) => convertKeys(item, converter, definedKeys));
90
+ }
91
+ const result = {};
92
+ for (const [key, value] of Object.entries(obj)) {
93
+ const newKey = definedKeys.has(key) ? converter(key) : key;
94
+ result[newKey] = convertKeys(value, converter, definedKeys);
95
+ }
96
+ return result;
97
+ }
98
+ /**
99
+ * Parse JSON string from DB and convert snake_case keys to camelCase (DB → Fluent)
100
+ * Used in toShape for dynamicDataSchema and defaultDataTemplate
101
+ */
102
+ function parseDbJson(v) {
103
+ const parsed = v?.ifNotEmpty()?.parseJson();
104
+ if (!parsed) {
105
+ return undefined;
106
+ }
107
+ const db = parsed.getValue();
108
+ if (db === undefined || db === null) {
109
+ return undefined;
110
+ }
111
+ return convertKeys(db, snakeToCamel, DB_SNAKE_KEYS);
112
+ }
113
+ /**
114
+ * Convert camelCase keys to snake_case and stringify to JSON (Fluent → DB)
115
+ * Used in toRecord for dynamicDataSchema and defaultDataTemplate
116
+ */
117
+ function serializeFluentJson(v) {
118
+ if (v === undefined || v === null) {
119
+ return undefined;
120
+ }
121
+ return JSON.stringify(convertKeys(v, camelToSnake, FLUENT_CAMEL_KEYS), null, 2);
122
+ }
123
+ /**
124
+ * Helper function to handle ModuleFunctionShape transformation for alias template scripts
125
+ * Converts module function references to function call strings with proper parameters
126
+ */
127
+ function mapScriptWithModuleSupport(v) {
128
+ return (v
129
+ .if(server_module_plugin_1.ModuleFunctionShape)
130
+ ?.toString((n) => `${n}({{PARAMS}})`, ['aliasId', 'connectionSysId', 'jsonDefaultData', 'jsonDynamicData']) ?? v);
131
+ }
132
+ exports.AliasTemplatePlugin = sdk_build_core_1.Plugin.create({
133
+ name: 'AliasTemplatePlugin',
134
+ records: {
135
+ sys_alias_templates: {
136
+ async toShape(record, { transform }) {
137
+ // Only call NowIncludeShape.fromRecord for non-empty, non-default script fields.
138
+ // Scripts that match the default are omitted so round-trips stay clean.
139
+ const preEditScriptField = record.get('pre_edit_script').ifString()?.ifNotEmpty();
140
+ const onEditScriptField = record.get('on_edit_script').ifString()?.ifNotEmpty();
141
+ const postProcessScriptField = record.get('post_process_script').ifString()?.ifNotEmpty();
142
+ const preEditScript = preEditScriptField && preEditScriptField.getValue().trim() !== DEFAULT_PRE_EDIT_SCRIPT.trim()
143
+ ? await now_include_plugin_1.NowIncludeShape.fromRecord(record, preEditScriptField, transform)
144
+ : undefined;
145
+ const onEditScript = onEditScriptField && onEditScriptField.getValue().trim() !== DEFAULT_ON_EDIT_SCRIPT.trim()
146
+ ? await now_include_plugin_1.NowIncludeShape.fromRecord(record, onEditScriptField, transform)
147
+ : undefined;
148
+ const postProcessScript = postProcessScriptField &&
149
+ postProcessScriptField.getValue().trim() !== DEFAULT_POST_PROCESS_SCRIPT.trim()
150
+ ? await now_include_plugin_1.NowIncludeShape.fromRecord(record, postProcessScriptField, transform)
151
+ : undefined;
152
+ return {
153
+ success: true,
154
+ value: new sdk_build_core_1.CallExpressionShape({
155
+ source: record,
156
+ callee: 'AliasTemplate',
157
+ args: [
158
+ record.transform(({ $ }) => ({
159
+ $id: $.val(now_id_plugin_1.NowIdShape.from(record)),
160
+ name: $,
161
+ // JSON strings stored in DB → typed objects in Fluent code
162
+ // Only defined SDK keys are converted from snake_case to camelCase
163
+ dynamicDataSchema: $.from('dynamic_data_schema').map((v) => parseDbJson(v.ifString())),
164
+ defaultDataTemplate: $.from('default_data_template').map((v) => parseDbJson(v.ifString())),
165
+ // Script fields via NowIncludeShape for IDE file support
166
+ preEditScript: $.val(preEditScript),
167
+ onEditScript: $.val(onEditScript),
168
+ postProcessScript: $.val(postProcessScript),
169
+ // Reference field — omit when empty
170
+ testAction: $.from('test_action').def(''),
171
+ })),
172
+ ],
173
+ }),
174
+ };
175
+ },
176
+ },
177
+ },
178
+ shapes: [
179
+ {
180
+ shape: sdk_build_core_1.CallExpressionShape,
181
+ fileTypes: ['fluent'],
182
+ async toRecord(callExpression, { factory, config, diagnostics }) {
183
+ if (callExpression.getCallee() !== 'AliasTemplate') {
184
+ return { success: false };
185
+ }
186
+ const arg = callExpression.getArgument(0).asObject();
187
+ // Check for unresolved script references
188
+ if (arg.get('preEditScript').isUnresolved()) {
189
+ diagnostics.error(arg.get('preEditScript').getOriginalNode(), `Unable to resolve the preEditScript reference, ensure the imported module is within the ${config.serverModulesDir} directory.`);
190
+ }
191
+ if (arg.get('onEditScript').isUnresolved()) {
192
+ diagnostics.error(arg.get('onEditScript').getOriginalNode(), `Unable to resolve the onEditScript reference, ensure the imported module is within the ${config.serverModulesDir} directory.`);
193
+ }
194
+ if (arg.get('postProcessScript').isUnresolved()) {
195
+ diagnostics.error(arg.get('postProcessScript').getOriginalNode(), `Unable to resolve the postProcessScript reference, ensure the imported module is within the ${config.serverModulesDir} directory.`);
196
+ }
197
+ return {
198
+ success: true,
199
+ value: await factory.createRecord({
200
+ source: callExpression,
201
+ table: 'sys_alias_templates',
202
+ explicitId: arg.get('$id'),
203
+ properties: arg.transform(({ $ }) => ({
204
+ name: $,
205
+ // Typed objects in Fluent code → JSON strings for DB
206
+ // Only defined SDK keys are converted from camelCase to snake_case
207
+ dynamic_data_schema: $.from('dynamicDataSchema').map((v) => serializeFluentJson(v.ifDefined() ? v.getValue() : undefined)),
208
+ default_data_template: $.from('defaultDataTemplate').map((v) => serializeFluentJson(v.ifDefined() ? v.getValue() : undefined)),
209
+ // Script fields — CDATA wraps both inline strings and Now.include() content
210
+ // Support for app_modules via ModuleFunctionShape
211
+ pre_edit_script: $.from('preEditScript')
212
+ .map(mapScriptWithModuleSupport)
213
+ .toCdata()
214
+ .def(DEFAULT_PRE_EDIT_SCRIPT),
215
+ on_edit_script: $.from('onEditScript')
216
+ .map(mapScriptWithModuleSupport)
217
+ .toCdata()
218
+ .def(DEFAULT_ON_EDIT_SCRIPT),
219
+ post_process_script: $.from('postProcessScript')
220
+ .map(mapScriptWithModuleSupport)
221
+ .toCdata()
222
+ .def(DEFAULT_POST_PROCESS_SCRIPT),
223
+ // Reference field — extract sys_id from Record ref or plain string
224
+ test_action: $.from('testAction').map((v) => (0, utils_1.toReference)(v)),
225
+ })),
226
+ }),
227
+ };
228
+ },
229
+ },
230
+ ],
231
+ });
232
+ //# sourceMappingURL=alias-template-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias-template-plugin.js","sourceRoot":"","sources":["../../src/alias/alias-template-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './alias-plugin';
2
+ export * from './retry-policy-plugin';
3
+ export * from './alias-template-plugin';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./alias-plugin"), exports);
18
+ __exportStar(require("./retry-policy-plugin"), exports);
19
+ __exportStar(require("./alias-template-plugin"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/alias/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA8B;AAC9B,wDAAqC;AACrC,0DAAuC"}
@@ -0,0 +1,2 @@
1
+ import { Plugin } from '@servicenow/sdk-build-core';
2
+ export declare const RetryPolicyPlugin: Plugin;
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RetryPolicyPlugin = void 0;
4
+ const sdk_build_core_1 = require("@servicenow/sdk-build-core");
5
+ const now_id_plugin_1 = require("../now-id-plugin");
6
+ const SYS_RETRY_POLICY = 'sys_retry_policy';
7
+ const DEFAULT_CONNECTION_TYPE = 'http_retry_conditions';
8
+ const DEFAULT_RETRY_STRATEGY = 'fixed_time_interval';
9
+ const MAX_ELAPSED_TIME_SECONDS = 86400;
10
+ const DEFAULT_RESTRICT_TO = 'http_method,status_code,error,response_body,response_headers';
11
+ exports.RetryPolicyPlugin = sdk_build_core_1.Plugin.create({
12
+ name: 'RetryPolicyPlugin',
13
+ records: {
14
+ [SYS_RETRY_POLICY]: {
15
+ async toShape(record) {
16
+ const restrictToRaw = record.get('restrict_to')?.ifString()?.getValue();
17
+ const restrictToArray = restrictToRaw === undefined || restrictToRaw === DEFAULT_RESTRICT_TO
18
+ ? undefined
19
+ : restrictToRaw === ''
20
+ ? []
21
+ : restrictToRaw
22
+ .split(',')
23
+ .map((s) => s.trim())
24
+ .filter(Boolean);
25
+ return {
26
+ success: true,
27
+ value: new sdk_build_core_1.CallExpressionShape({
28
+ source: record,
29
+ callee: 'RetryPolicy',
30
+ args: [
31
+ record.transform(({ $ }) => ({
32
+ $id: $.val(now_id_plugin_1.NowIdShape.from(record)),
33
+ name: $.def(''),
34
+ connectionType: $.from('connection_type').def(DEFAULT_CONNECTION_TYPE),
35
+ retryStrategy: $.from('retry_strategy').def(DEFAULT_RETRY_STRATEGY),
36
+ count: $.map((v) => v.ifString()?.ifNotEmpty()?.toNumber()),
37
+ interval: $.map((v) => v.ifString()?.ifNotEmpty()?.toNumber()),
38
+ maxElapsedTime: $.from('max_elapsed_time').map((v) => v.ifString()?.ifNotEmpty()?.toNumber()),
39
+ condition: $.def(''),
40
+ restrictTo: $.val(restrictToArray),
41
+ protectionPolicy: $.from('sys_policy').def(''),
42
+ })),
43
+ ],
44
+ }),
45
+ };
46
+ },
47
+ },
48
+ },
49
+ shapes: [
50
+ {
51
+ shape: sdk_build_core_1.CallExpressionShape,
52
+ fileTypes: ['fluent'],
53
+ async toRecord(callExpression, { factory, diagnostics }) {
54
+ if (callExpression.getCallee() !== 'RetryPolicy') {
55
+ return { success: false };
56
+ }
57
+ const arg = callExpression.getArgument(0).asObject();
58
+ // Runtime validation for maxElapsedTime upper bound (TypeScript cannot enforce numeric ranges)
59
+ const maxElapsedTimeShape = arg.get('maxElapsedTime');
60
+ const maxElapsedTime = maxElapsedTimeShape.ifNumber()?.getValue();
61
+ if (maxElapsedTime !== undefined && maxElapsedTime > MAX_ELAPSED_TIME_SECONDS) {
62
+ diagnostics.error(maxElapsedTimeShape, `maxElapsedTime must not exceed ${MAX_ELAPSED_TIME_SECONDS} seconds (24 hours). Received: ${maxElapsedTime}.`);
63
+ }
64
+ const countShape = arg.get('count');
65
+ const count = countShape.ifNumber()?.getValue();
66
+ if (count !== undefined && !Number.isInteger(count)) {
67
+ diagnostics.error(countShape, `count must be an integer. Received: ${count}.`);
68
+ }
69
+ const intervalShape = arg.get('interval');
70
+ const interval = intervalShape.ifNumber()?.getValue();
71
+ if (interval !== undefined && !Number.isInteger(interval)) {
72
+ diagnostics.error(intervalShape, `interval must be an integer. Received: ${interval}.`);
73
+ }
74
+ // Convert restrictTo string[] → comma-separated string for the DB
75
+ const restrictToShape = arg.get('restrictTo');
76
+ const restrictToArrayShape = restrictToShape.ifArray();
77
+ const restrictToCsv = restrictToArrayShape
78
+ ? restrictToArrayShape
79
+ .getElements()
80
+ .map((el) => el.ifString()?.getValue() ?? '')
81
+ .filter(Boolean)
82
+ .join(',')
83
+ : DEFAULT_RESTRICT_TO;
84
+ // Validate condition only references fields in restrictTo
85
+ const allowedFields = (restrictToCsv || DEFAULT_RESTRICT_TO).split(',');
86
+ const conditionShape = arg.get('condition');
87
+ const conditionValue = conditionShape.ifString()?.ifNotEmpty()?.getValue();
88
+ if (conditionValue) {
89
+ for (const part of conditionValue.split('^')) {
90
+ const fieldPart = part.startsWith('OR') ? part.slice(2) : part;
91
+ if (!allowedFields.some((field) => fieldPart.startsWith(field))) {
92
+ const fieldName = fieldPart.match(/^[a-z_]+/)?.[0] ?? fieldPart;
93
+ diagnostics.error(conditionShape, `Condition references field '${fieldName}' which is not in restrictTo. Allowed fields: ${allowedFields.join(', ')}.`);
94
+ break;
95
+ }
96
+ }
97
+ }
98
+ const record = await factory.createRecord({
99
+ source: callExpression,
100
+ table: SYS_RETRY_POLICY,
101
+ explicitId: arg.get('$id'),
102
+ properties: arg.transform(({ $ }) => ({
103
+ name: $.def(''),
104
+ connection_type: $.from('connectionType').def(DEFAULT_CONNECTION_TYPE),
105
+ retry_strategy: $.from('retryStrategy').def(DEFAULT_RETRY_STRATEGY),
106
+ count: $,
107
+ interval: $,
108
+ max_elapsed_time: $.from('maxElapsedTime'),
109
+ condition: $.def(''),
110
+ restrict_to: $.val(restrictToCsv),
111
+ sys_policy: $.from('protectionPolicy').def(''),
112
+ })),
113
+ });
114
+ return { success: true, value: record };
115
+ },
116
+ },
117
+ ],
118
+ });
119
+ //# sourceMappingURL=retry-policy-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-policy-plugin.js","sourceRoot":"","sources":["../../src/alias/retry-policy-plugin.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ export declare class ArrowFunctionShape extends Shape {
16
16
  getStatements(): Shape[];
17
17
  getStatement(index: number): Shape;
18
18
  getReturnValue(): Shape | undefined;
19
+ isImplicitReturn(): boolean;
19
20
  getCode(): string;
20
21
  }
21
22
  export declare const ArrowFunctionPlugin: Plugin;