@osdk/maker 0.12.0-beta.1 → 0.12.0-beta.10

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 (49) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/README.md +88 -62
  3. package/build/browser/api/defineAction.js +113 -63
  4. package/build/browser/api/defineAction.js.map +1 -1
  5. package/build/browser/api/defineLink.js +3 -3
  6. package/build/browser/api/defineLink.js.map +1 -1
  7. package/build/browser/api/defineObject.js +6 -2
  8. package/build/browser/api/defineObject.js.map +1 -1
  9. package/build/browser/api/defineOntology.js +44 -13
  10. package/build/browser/api/defineOntology.js.map +1 -1
  11. package/build/browser/api/markingconstraint.test.js +108 -0
  12. package/build/browser/api/markingconstraint.test.js.map +1 -0
  13. package/build/browser/api/overall.test.js +2956 -1097
  14. package/build/browser/api/overall.test.js.map +1 -1
  15. package/build/browser/api/types.js.map +1 -1
  16. package/build/browser/cli/main.js +2 -2
  17. package/build/browser/cli/main.js.map +1 -1
  18. package/build/browser/index.js.map +1 -1
  19. package/build/cjs/index.cjs +161 -82
  20. package/build/cjs/index.cjs.map +1 -1
  21. package/build/cjs/index.d.cts +26 -15
  22. package/build/esm/api/defineAction.js +113 -63
  23. package/build/esm/api/defineAction.js.map +1 -1
  24. package/build/esm/api/defineLink.js +3 -3
  25. package/build/esm/api/defineLink.js.map +1 -1
  26. package/build/esm/api/defineObject.js +6 -2
  27. package/build/esm/api/defineObject.js.map +1 -1
  28. package/build/esm/api/defineOntology.js +44 -13
  29. package/build/esm/api/defineOntology.js.map +1 -1
  30. package/build/esm/api/markingconstraint.test.js +108 -0
  31. package/build/esm/api/markingconstraint.test.js.map +1 -0
  32. package/build/esm/api/overall.test.js +2956 -1097
  33. package/build/esm/api/overall.test.js.map +1 -1
  34. package/build/esm/api/types.js.map +1 -1
  35. package/build/esm/cli/main.js +2 -2
  36. package/build/esm/cli/main.js.map +1 -1
  37. package/build/esm/index.js.map +1 -1
  38. package/build/types/api/defineAction.d.ts +6 -6
  39. package/build/types/api/defineAction.d.ts.map +1 -1
  40. package/build/types/api/defineObject.d.ts +2 -2
  41. package/build/types/api/defineObject.d.ts.map +1 -1
  42. package/build/types/api/defineOntology.d.ts.map +1 -1
  43. package/build/types/api/markingconstraint.test.d.ts +1 -0
  44. package/build/types/api/markingconstraint.test.d.ts.map +1 -0
  45. package/build/types/api/types.d.ts +20 -9
  46. package/build/types/api/types.d.ts.map +1 -1
  47. package/build/types/index.d.ts +1 -1
  48. package/build/types/index.d.ts.map +1 -1
  49. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,92 @@
1
1
  # @osdk/maker
2
2
 
3
+ ## 0.12.0-beta.10
4
+
5
+ ### Minor Changes
6
+
7
+ - 4dffba1: Support extended string params in actions
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [9f4fe9e]
12
+ - @osdk/api@2.4.0-beta.8
13
+
14
+ ## 0.12.0-beta.9
15
+
16
+ ### Minor Changes
17
+
18
+ - ac0029e: Improve CRUD actions customization
19
+
20
+ ### Patch Changes
21
+
22
+ - @osdk/api@2.4.0-beta.7
23
+
24
+ ## 0.12.0-beta.8
25
+
26
+ ### Minor Changes
27
+
28
+ - 764e5f1: Add marking constraints
29
+
30
+ ### Patch Changes
31
+
32
+ - @osdk/api@2.4.0-beta.6
33
+
34
+ ## 0.12.0-beta.7
35
+
36
+ ### Minor Changes
37
+
38
+ - 75fbd09: Type classes and list validation for object actions
39
+
40
+ ### Patch Changes
41
+
42
+ - @osdk/api@2.4.0-beta.5
43
+
44
+ ## 0.12.0-beta.6
45
+
46
+ ### Minor Changes
47
+
48
+ - 3dcd9b1: Modify object actions cannot modify pk
49
+
50
+ ## 0.12.0-beta.5
51
+
52
+ ### Minor Changes
53
+
54
+ - a01b8d4: Revert import block data changes
55
+
56
+ ### Patch Changes
57
+
58
+ - @osdk/api@2.4.0-beta.4
59
+
60
+ ## 0.12.0-beta.4
61
+
62
+ ### Minor Changes
63
+
64
+ - e647175: Skip struct props for object create + modify actions
65
+
66
+ ## 0.12.0-beta.3
67
+
68
+ ### Minor Changes
69
+
70
+ - 988bf66: Use block data type for imports
71
+
72
+ ### Patch Changes
73
+
74
+ - @osdk/api@2.4.0-beta.3
75
+
76
+ ## 0.12.0-beta.2
77
+
78
+ ### Minor Changes
79
+
80
+ - 8bb08eb: Turn on module cache
81
+ - 5994895: Interface struct properties are skipped in crud actions
82
+
83
+ ### Patch Changes
84
+
85
+ - Updated dependencies [29d2ada]
86
+ - Updated dependencies [8c95154]
87
+ - Updated dependencies [c32dcf2]
88
+ - @osdk/api@2.4.0-beta.2
89
+
3
90
  ## 0.11.0-beta.14
4
91
 
5
92
  ### Minor Changes
package/README.md CHANGED
@@ -567,72 +567,15 @@ const personToAddressLink = defineInterfaceLinkConstraint({
567
567
 
568
568
  Actions define operations that can be performed on objects and interfaces.
569
569
 
570
- ### Custom Action
571
-
572
- ```typescript
573
- import { defineAction } from "@osdk/maker";
574
-
575
- // Define a custom action
576
- const markAsInactiveAction = defineAction({
577
- apiName: "mark-as-inactive",
578
- displayName: "Mark as Inactive",
579
- parameters: [
580
- {
581
- id: "reason",
582
- displayName: "Reason",
583
- type: "string",
584
- validation: {
585
- required: true,
586
- allowedValues: { type: "text" },
587
- },
588
- },
589
- {
590
- id: "effectiveDate",
591
- displayName: "Effective Date",
592
- type: "date",
593
- validation: {
594
- required: true,
595
- allowedValues: { type: "datetime" },
596
- },
597
- },
598
- ],
599
- status: "active",
600
- rules: [
601
- {
602
- type: "addOrModifyObjectRuleV2",
603
- addOrModifyObjectRuleV2: {
604
- objectToModify: "objectToModifyParameter",
605
- propertyValues: {
606
- "isActive": {
607
- type: "staticValue",
608
- staticValue: {
609
- type: "boolean",
610
- boolean: false,
611
- },
612
- },
613
- "inactiveReason": {
614
- type: "parameterId",
615
- parameterId: "reason",
616
- },
617
- "inactiveDate": {
618
- type: "parameterId",
619
- parameterId: "effectiveDate",
620
- },
621
- },
622
- structFieldValues: {},
623
- },
624
- },
625
- ],
626
- });
627
- ```
628
-
629
570
  ### Create Object Action
630
571
 
631
572
  ```typescript
632
573
  import { defineCreateObjectAction } from "@osdk/maker";
633
574
 
634
575
  // Define an action to create an employee
635
- const createEmployeeAction = defineCreateObjectAction(employeeObject);
576
+ const createEmployeeAction = defineCreateObjectAction({
577
+ objectType: employeeObject,
578
+ });
636
579
  ```
637
580
 
638
581
  ### Modify Object Action
@@ -641,7 +584,9 @@ const createEmployeeAction = defineCreateObjectAction(employeeObject);
641
584
  import { defineModifyObjectAction } from "@osdk/maker";
642
585
 
643
586
  // Define an action to modify an employee
644
- const modifyEmployeeAction = defineModifyObjectAction(employeeObject);
587
+ const modifyEmployeeAction = defineModifyObjectAction({
588
+ objectType: employeeObject,
589
+ });
645
590
  ```
646
591
 
647
592
  ### Delete Object Action
@@ -650,7 +595,9 @@ const modifyEmployeeAction = defineModifyObjectAction(employeeObject);
650
595
  import { defineDeleteObjectAction } from "@osdk/maker";
651
596
 
652
597
  // Define an action to delete an employee
653
- const deleteEmployeeAction = defineDeleteObjectAction(employeeObject);
598
+ const deleteEmployeeAction = defineDeleteObjectAction({
599
+ objectType: employeeObject,
600
+ });
654
601
  ```
655
602
 
656
603
  ### Interface Actions
@@ -673,3 +620,82 @@ const createEmployeePersonAction = defineCreateInterfaceObjectAction(
673
620
  // Define an action to modify objects implementing an interface
674
621
  const modifyPersonAction = defineModifyInterfaceObjectAction(personInterface);
675
622
  ```
623
+
624
+ ### Custom Action
625
+
626
+ More customization such as security/submission criteria, constraints on parameter values, parameter overrides, etc.
627
+ can also be added.
628
+
629
+ ```typescript
630
+ import {
631
+ ActionParameterConditionalOverride,
632
+ ConditionDefinition,
633
+ defineModifyObjectAction,
634
+ defineObject,
635
+ } from "@osdk/maker";
636
+
637
+ const employeeObject = defineObject({
638
+ apiName: "employee",
639
+ displayName: "Employee",
640
+ pluralDisplayName: "Employees",
641
+ titlePropertyApiName: "id",
642
+ primaryKeyPropertyApiName: "id",
643
+ properties: {
644
+ "id": { type: "string", displayName: "ID" },
645
+ "team": { type: "string" },
646
+ "numDeals": { type: "integer" },
647
+ "experience": { type: "integer" },
648
+ },
649
+ });
650
+
651
+ const mustBeManagerCondition: ConditionDefinition = {
652
+ type: "group",
653
+ name: "managerGroup", // Actual group assigned during installation
654
+ };
655
+
656
+ const mustBeInTeamCondition: ConditionDefinition = {
657
+ type: "group",
658
+ name: "teamGroup",
659
+ };
660
+
661
+ const teamEqualsSalesParameterCondition: ConditionDefinition = {
662
+ type: "parameter",
663
+ parameterId: "team",
664
+ matches: {
665
+ type: "staticValue",
666
+ staticValue: {
667
+ type: "string",
668
+ string: "sales",
669
+ },
670
+ },
671
+ };
672
+
673
+ const makeDealsVisible: ActionParameterConditionalOverride = {
674
+ type: "visibility",
675
+ condition: {
676
+ type: "and",
677
+ conditions: [
678
+ mustBeInTeamCondition,
679
+ teamEqualsSalesParameterCondition,
680
+ ],
681
+ },
682
+ };
683
+
684
+ const modifyObjectActionType = defineModifyObjectAction(
685
+ {
686
+ objectType: employeeObject,
687
+ actionLevelValidation: {
688
+ condition: mustBeManagerCondition,
689
+ },
690
+ parameterLevelValidations: {
691
+ "numDeals": {
692
+ defaultVisibility: "hidden",
693
+ conditionalOverrides: [
694
+ makeDealsVisible,
695
+ ],
696
+ },
697
+ },
698
+ excludedProperties: ["experience"],
699
+ },
700
+ );
701
+ ```
@@ -14,12 +14,17 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ import { consola } from "consola";
17
18
  import invariant from "tiny-invariant";
18
- import { getAllInterfaceProperties } from "./defineObject.js";
19
+ import { convertToDisplayName, getAllInterfaceProperties } from "./defineObject.js";
19
20
  import { namespace, ontologyDefinition, updateOntology } from "./defineOntology.js";
20
21
  import { convertConditionDefinition } from "./ontologyUtils.js";
21
22
  import { OntologyEntityTypeEnum } from "./types.js";
22
23
  export function defineCreateInterfaceObjectAction(interfaceType, objectType, validation) {
24
+ const allProperties = Object.entries(getAllInterfaceProperties(interfaceType)).filter(([_, prop]) => !isStruct(prop.sharedPropertyType.type));
25
+ if (allProperties.length !== Object.entries(getAllInterfaceProperties(interfaceType)).length) {
26
+ consola.info(`Some properties on ${interfaceType.apiName} were skipped in the create action because they are structs`);
27
+ }
23
28
  return defineAction({
24
29
  apiName: `create-${kebab(interfaceType.apiName.split(".").pop() ?? interfaceType.apiName)}${objectType === undefined ? "" : `-${kebab(objectType.apiName.split(".").pop() ?? objectType.apiName)}`}`,
25
30
  displayName: `Create ${interfaceType.displayMetadata.displayName}`,
@@ -50,7 +55,7 @@ export function defineCreateInterfaceObjectAction(interfaceType, objectType, val
50
55
  }]
51
56
  }
52
57
  }
53
- }, ...Object.entries(getAllInterfaceProperties(interfaceType)).map(([id, prop]) => ({
58
+ }, ...allProperties.map(([id, prop]) => ({
54
59
  id,
55
60
  displayName: prop.sharedPropertyType.displayName ?? prop.sharedPropertyType.nonNameSpacedApiName,
56
61
  type: extractActionParameterType(prop.sharedPropertyType),
@@ -74,7 +79,7 @@ export function defineCreateInterfaceObjectAction(interfaceType, objectType, val
74
79
  addInterfaceRule: {
75
80
  interfaceApiName: interfaceType.apiName,
76
81
  objectTypeParameter: "objectTypeParameter",
77
- sharedPropertyValues: Object.fromEntries(Object.entries(getAllInterfaceProperties(interfaceType)).map(([id, prop]) => [id, {
82
+ sharedPropertyValues: Object.fromEntries(allProperties.map(([id, _prop]) => [id, {
78
83
  type: "parameterId",
79
84
  parameterId: id
80
85
  }]))
@@ -85,43 +90,63 @@ export function defineCreateInterfaceObjectAction(interfaceType, objectType, val
85
90
  } : {})
86
91
  });
87
92
  }
88
- export function defineCreateObjectAction(objectType, validation) {
93
+ export function defineCreateObjectAction(def) {
94
+ Object.keys(def.parameterLevelValidations ?? {}).forEach(id => {
95
+ !(def.objectType.properties?.[id] !== undefined) ? process.env.NODE_ENV !== "production" ? invariant(false, `Property ${id} does not exist on ${def.objectType.apiName}`) : invariant(false) : void 0;
96
+ });
97
+ (def.excludedProperties ?? []).forEach(id => {
98
+ !(def.objectType.properties?.[id] !== undefined) ? process.env.NODE_ENV !== "production" ? invariant(false, `Property ${id} does not exist on ${def.objectType.apiName}`) : invariant(false) : void 0;
99
+ });
100
+ const parameterNames = Object.keys(def.objectType.properties ?? {}).filter(id => !def.excludedProperties?.includes(id) && !isStruct(def.objectType.properties?.[id].type));
101
+ const parameters = Array.from(parameterNames).map(id => ({
102
+ id,
103
+ displayName: def.objectType.properties?.[id].displayName ?? convertToDisplayName(id),
104
+ type: extractActionParameterType(def.objectType.properties?.[id]),
105
+ validation: def.parameterLevelValidations?.[id] !== undefined ? {
106
+ ...def.parameterLevelValidations?.[id],
107
+ allowedValues: def.parameterLevelValidations?.[id].allowedValues ?? extractAllowedValuesFromType(def.objectType.properties?.[id].type),
108
+ required: def.parameterLevelValidations?.[id].required ?? true
109
+ } : {
110
+ required: def.objectType.properties?.[id].array ?? false ? {
111
+ listLength: def.objectType.properties?.[id].nullability?.noEmptyCollections ? {
112
+ min: 1
113
+ } : {}
114
+ } : def.objectType.properties?.[id].nullability?.noNulls ?? true,
115
+ allowedValues: extractAllowedValuesFromType(def.objectType.properties?.[id].type)
116
+ }
117
+ }));
89
118
  return defineAction({
90
- apiName: `create-object-${kebab(objectType.apiName.split(".").pop() ?? objectType.apiName)}`,
91
- displayName: `Create ${objectType.displayName}`,
92
- parameters: [...(objectType.properties?.map(prop => ({
93
- id: prop.apiName,
94
- displayName: prop.displayName,
95
- type: extractActionParameterType(prop),
96
- validation: {
97
- required: true,
98
- allowedValues: extractAllowedValuesFromType(prop.type)
99
- }
100
- })) ?? [])],
101
- status: "active",
119
+ apiName: def.apiName ?? `create-object-${kebab(def.objectType.apiName.split(".").pop() ?? def.objectType.apiName)}`,
120
+ displayName: def.displayName ?? `Create ${def.objectType.displayName}`,
121
+ parameters: parameters,
122
+ status: def.status ?? "active",
102
123
  entities: {
103
124
  affectedInterfaceTypes: [],
104
- affectedObjectTypes: [objectType.apiName],
125
+ affectedObjectTypes: [def.objectType.apiName],
105
126
  affectedLinkTypes: [],
106
127
  typeGroups: []
107
128
  },
108
129
  rules: [{
109
130
  type: "addObjectRule",
110
131
  addObjectRule: {
111
- objectTypeId: objectType.apiName,
112
- propertyValues: objectType.properties ? Object.fromEntries(objectType.properties.map(p => [p.apiName, {
132
+ objectTypeId: def.objectType.apiName,
133
+ propertyValues: Object.fromEntries(parameters.map(p => [p.id, {
113
134
  type: "parameterId",
114
- parameterId: p.apiName
115
- }])) : {},
135
+ parameterId: p.id
136
+ }])),
116
137
  structFieldValues: {}
117
138
  }
118
139
  }],
119
- ...(validation ? {
120
- validation: [convertValidationRule(validation)]
140
+ ...(def.actionLevelValidation ? {
141
+ validation: [convertValidationRule(def.actionLevelValidation)]
121
142
  } : {})
122
143
  });
123
144
  }
124
145
  export function defineModifyInterfaceObjectAction(interfaceType, objectType, validation) {
146
+ const allProperties = Object.entries(getAllInterfaceProperties(interfaceType)).filter(([_, prop]) => !isStruct(prop.sharedPropertyType.type));
147
+ if (allProperties.length !== Object.entries(getAllInterfaceProperties(interfaceType)).length) {
148
+ consola.info(`Some properties on ${interfaceType.apiName} were skipped in the modify action because they are structs`);
149
+ }
125
150
  return defineAction({
126
151
  apiName: `modify-${kebab(interfaceType.apiName.split(".").pop() ?? interfaceType.apiName)}${objectType === undefined ? "" : `-${kebab(objectType.apiName.split(".").pop() ?? objectType.apiName)}`}`,
127
152
  displayName: `Modify ${interfaceType.displayMetadata.displayName}`,
@@ -151,7 +176,7 @@ export function defineModifyInterfaceObjectAction(interfaceType, objectType, val
151
176
  }]
152
177
  }
153
178
  }
154
- }, ...Object.entries(getAllInterfaceProperties(interfaceType)).map(([id, prop]) => ({
179
+ }, ...allProperties.map(([id, prop]) => ({
155
180
  id,
156
181
  displayName: prop.sharedPropertyType.displayName ?? prop.sharedPropertyType.nonNameSpacedApiName,
157
182
  type: extractActionParameterType(prop.sharedPropertyType),
@@ -174,7 +199,7 @@ export function defineModifyInterfaceObjectAction(interfaceType, objectType, val
174
199
  type: "modifyInterfaceRule",
175
200
  modifyInterfaceRule: {
176
201
  interfaceObjectToModifyParameter: "interfaceObjectToModifyParameter",
177
- sharedPropertyValues: Object.fromEntries(Object.entries(getAllInterfaceProperties(interfaceType)).map(([id, prop]) => [id, {
202
+ sharedPropertyValues: Object.fromEntries(allProperties.map(([id, _prop]) => [id, {
178
203
  type: "parameterId",
179
204
  parameterId: id
180
205
  }]))
@@ -185,17 +210,41 @@ export function defineModifyInterfaceObjectAction(interfaceType, objectType, val
185
210
  } : {})
186
211
  });
187
212
  }
188
- export function defineModifyObjectAction(objectType, validation) {
213
+ export function defineModifyObjectAction(def) {
214
+ Object.keys(def.parameterLevelValidations ?? {}).forEach(id => {
215
+ !(def.objectType.properties?.[id] !== undefined) ? process.env.NODE_ENV !== "production" ? invariant(false, `Property ${id} does not exist on ${def.objectType.apiName}`) : invariant(false) : void 0;
216
+ });
217
+ (def.excludedProperties ?? []).forEach(id => {
218
+ !(def.objectType.properties?.[id] !== undefined) ? process.env.NODE_ENV !== "production" ? invariant(false, `Property ${id} does not exist on ${def.objectType.apiName}`) : invariant(false) : void 0;
219
+ });
220
+ const parameterNames = Object.keys(def.objectType.properties ?? {}).filter(id => !def.excludedProperties?.includes(id) && !isStruct(def.objectType.properties?.[id].type) && id !== def.objectType.primaryKeyPropertyApiName);
221
+ const parameters = Array.from(parameterNames).map(id => ({
222
+ id,
223
+ displayName: def.objectType.properties?.[id].displayName ?? convertToDisplayName(id),
224
+ type: extractActionParameterType(def.objectType.properties?.[id]),
225
+ validation: def.parameterLevelValidations?.[id] !== undefined ? {
226
+ ...def.parameterLevelValidations?.[id],
227
+ allowedValues: def.parameterLevelValidations?.[id].allowedValues ?? extractAllowedValuesFromType(def.objectType.properties?.[id].type),
228
+ required: def.parameterLevelValidations?.[id].required ?? false
229
+ } : {
230
+ required: def.objectType.properties?.[id].array ?? false ? {
231
+ listLength: def.objectType.properties?.[id].nullability?.noEmptyCollections ? {
232
+ min: 1
233
+ } : {}
234
+ } : def.objectType.properties?.[id].nullability?.noNulls ?? false,
235
+ allowedValues: extractAllowedValuesFromType(def.objectType.properties?.[id].type)
236
+ }
237
+ }));
189
238
  return defineAction({
190
- apiName: `modify-object-${kebab(objectType.apiName.split(".").pop() ?? objectType.apiName)}`,
191
- displayName: `Modify ${objectType.displayName}`,
239
+ apiName: def.apiName ?? `modify-object-${kebab(def.objectType.apiName.split(".").pop() ?? def.objectType.apiName)}`,
240
+ displayName: def.displayName ?? `Modify ${def.objectType.displayName}`,
192
241
  parameters: [{
193
242
  id: "objectToModifyParameter",
194
243
  displayName: "Modify object",
195
244
  type: {
196
245
  type: "objectReference",
197
246
  objectReference: {
198
- objectTypeId: objectType.apiName
247
+ objectTypeId: def.objectType.apiName
199
248
  }
200
249
  },
201
250
  validation: {
@@ -204,49 +253,41 @@ export function defineModifyObjectAction(objectType, validation) {
204
253
  },
205
254
  required: true
206
255
  }
207
- }, ...(objectType.properties?.map(prop => ({
208
- id: prop.apiName,
209
- displayName: prop.displayName,
210
- type: extractActionParameterType(prop),
211
- validation: {
212
- required: false,
213
- allowedValues: extractAllowedValuesFromType(prop.type)
214
- }
215
- })) ?? [])],
216
- status: "active",
217
- entities: {
218
- affectedInterfaceTypes: [],
219
- affectedObjectTypes: [objectType.apiName],
220
- affectedLinkTypes: [],
221
- typeGroups: []
222
- },
256
+ }, ...parameters],
257
+ status: def.status ?? "active",
223
258
  rules: [{
224
259
  type: "modifyObjectRule",
225
260
  modifyObjectRule: {
226
261
  objectToModify: "objectToModifyParameter",
227
- propertyValues: objectType.properties ? Object.fromEntries(objectType.properties.map(p => [p.apiName, {
262
+ propertyValues: Object.fromEntries(parameters.map(p => [p.id, {
228
263
  type: "parameterId",
229
- parameterId: p.apiName
230
- }])) : {},
264
+ parameterId: p.id
265
+ }])),
231
266
  structFieldValues: {}
232
267
  }
233
268
  }],
234
- ...(validation ? {
235
- validation: [convertValidationRule(validation)]
269
+ entities: {
270
+ affectedInterfaceTypes: [],
271
+ affectedObjectTypes: [def.objectType.apiName],
272
+ affectedLinkTypes: [],
273
+ typeGroups: []
274
+ },
275
+ ...(def.actionLevelValidation ? {
276
+ validation: [convertValidationRule(def.actionLevelValidation)]
236
277
  } : {})
237
278
  });
238
279
  }
239
- export function defineDeleteObjectAction(objectType, validation) {
280
+ export function defineDeleteObjectAction(def) {
240
281
  return defineAction({
241
- apiName: `delete-object-${kebab(objectType.apiName.split(".").pop() ?? objectType.apiName)}`,
242
- displayName: `Delete ${objectType.displayName}`,
282
+ apiName: def.apiName ?? `delete-object-${kebab(def.objectType.apiName.split(".").pop() ?? def.objectType.apiName)}`,
283
+ displayName: def.displayName ?? `Delete ${def.objectType.displayName}`,
243
284
  parameters: [{
244
285
  id: "objectToDeleteParameter",
245
286
  displayName: "Delete object",
246
287
  type: {
247
288
  type: "objectReference",
248
289
  objectReference: {
249
- objectTypeId: objectType.apiName
290
+ objectTypeId: def.objectType.apiName
250
291
  }
251
292
  },
252
293
  validation: {
@@ -256,21 +297,21 @@ export function defineDeleteObjectAction(objectType, validation) {
256
297
  }
257
298
  }
258
299
  }],
259
- status: "active",
260
- entities: {
261
- affectedInterfaceTypes: [],
262
- affectedObjectTypes: [objectType.apiName],
263
- affectedLinkTypes: [],
264
- typeGroups: []
265
- },
300
+ status: def.status ?? "active",
266
301
  rules: [{
267
302
  type: "deleteObjectRule",
268
303
  deleteObjectRule: {
269
304
  objectToDelete: "objectToDeleteParameter"
270
305
  }
271
306
  }],
272
- ...(validation ? {
273
- validation: [convertValidationRule(validation)]
307
+ entities: {
308
+ affectedInterfaceTypes: [],
309
+ affectedObjectTypes: [def.objectType.apiName],
310
+ affectedLinkTypes: [],
311
+ typeGroups: []
312
+ },
313
+ ...(def.actionLevelValidation ? {
314
+ validation: [convertValidationRule(def.actionLevelValidation)]
274
315
  } : {})
275
316
  });
276
317
  }
@@ -458,6 +499,10 @@ function extractAllowedValuesFromType(type) {
458
499
  } : {
459
500
  type: "mandatoryMarking"
460
501
  };
502
+ case "string":
503
+ return {
504
+ type: "text"
505
+ };
461
506
  case "struct":
462
507
  throw new Error("Structs are not supported yet");
463
508
  default:
@@ -472,6 +517,8 @@ function extractActionParameterType(pt) {
472
517
  switch (typeType.type) {
473
518
  case "marking":
474
519
  return maybeAddList("marking", pt);
520
+ case "string":
521
+ return maybeAddList("string", pt);
475
522
  case "struct":
476
523
  throw new Error("Structs are not supported yet");
477
524
  default:
@@ -501,6 +548,9 @@ function maybeAddList(type, pt) {
501
548
  function isActionParameterTypePrimitive(type) {
502
549
  return ["boolean", "booleanList", "integer", "integerList", "long", "longList", "double", "doubleList", "string", "stringList", "decimal", "decimalList", "timestamp", "timestampList", "geohash", "geohashList", "geoshape", "geoshapeList", "timeSeriesReference", "date", "dateList", "objectTypeReference", "objectReference", "attachment", "attachmentList", "marking", "markingList", "mediaReference", "mediaReferenceList", "geotimeSeriesReference", "geotimeSeriesReferenceList"].includes(type);
503
550
  }
551
+ function isStruct(type) {
552
+ return typeof type === "object" && type.type === "struct";
553
+ }
504
554
  function kebab(s) {
505
555
  return s.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2").replace(/\./g, "-").toLowerCase();
506
556
  }