@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.
- package/CHANGELOG.md +87 -0
- package/README.md +88 -62
- package/build/browser/api/defineAction.js +113 -63
- package/build/browser/api/defineAction.js.map +1 -1
- package/build/browser/api/defineLink.js +3 -3
- package/build/browser/api/defineLink.js.map +1 -1
- package/build/browser/api/defineObject.js +6 -2
- package/build/browser/api/defineObject.js.map +1 -1
- package/build/browser/api/defineOntology.js +44 -13
- package/build/browser/api/defineOntology.js.map +1 -1
- package/build/browser/api/markingconstraint.test.js +108 -0
- package/build/browser/api/markingconstraint.test.js.map +1 -0
- package/build/browser/api/overall.test.js +2956 -1097
- package/build/browser/api/overall.test.js.map +1 -1
- package/build/browser/api/types.js.map +1 -1
- package/build/browser/cli/main.js +2 -2
- package/build/browser/cli/main.js.map +1 -1
- package/build/browser/index.js.map +1 -1
- package/build/cjs/index.cjs +161 -82
- package/build/cjs/index.cjs.map +1 -1
- package/build/cjs/index.d.cts +26 -15
- package/build/esm/api/defineAction.js +113 -63
- package/build/esm/api/defineAction.js.map +1 -1
- package/build/esm/api/defineLink.js +3 -3
- package/build/esm/api/defineLink.js.map +1 -1
- package/build/esm/api/defineObject.js +6 -2
- package/build/esm/api/defineObject.js.map +1 -1
- package/build/esm/api/defineOntology.js +44 -13
- package/build/esm/api/defineOntology.js.map +1 -1
- package/build/esm/api/markingconstraint.test.js +108 -0
- package/build/esm/api/markingconstraint.test.js.map +1 -0
- package/build/esm/api/overall.test.js +2956 -1097
- package/build/esm/api/overall.test.js.map +1 -1
- package/build/esm/api/types.js.map +1 -1
- package/build/esm/cli/main.js +2 -2
- package/build/esm/cli/main.js.map +1 -1
- package/build/esm/index.js.map +1 -1
- package/build/types/api/defineAction.d.ts +6 -6
- package/build/types/api/defineAction.d.ts.map +1 -1
- package/build/types/api/defineObject.d.ts +2 -2
- package/build/types/api/defineObject.d.ts.map +1 -1
- package/build/types/api/defineOntology.d.ts.map +1 -1
- package/build/types/api/markingconstraint.test.d.ts +1 -0
- package/build/types/api/markingconstraint.test.d.ts.map +1 -0
- package/build/types/api/types.d.ts +20 -9
- package/build/types/api/types.d.ts.map +1 -1
- package/build/types/index.d.ts +1 -1
- package/build/types/index.d.ts.map +1 -1
- 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(
|
|
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(
|
|
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(
|
|
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
|
-
}, ...
|
|
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(
|
|
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(
|
|
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:
|
|
93
|
-
|
|
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:
|
|
132
|
+
objectTypeId: def.objectType.apiName,
|
|
133
|
+
propertyValues: Object.fromEntries(parameters.map(p => [p.id, {
|
|
113
134
|
type: "parameterId",
|
|
114
|
-
parameterId: p.
|
|
115
|
-
}]))
|
|
135
|
+
parameterId: p.id
|
|
136
|
+
}])),
|
|
116
137
|
structFieldValues: {}
|
|
117
138
|
}
|
|
118
139
|
}],
|
|
119
|
-
...(
|
|
120
|
-
validation: [convertValidationRule(
|
|
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
|
-
}, ...
|
|
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(
|
|
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(
|
|
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
|
-
}, ...
|
|
208
|
-
|
|
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:
|
|
262
|
+
propertyValues: Object.fromEntries(parameters.map(p => [p.id, {
|
|
228
263
|
type: "parameterId",
|
|
229
|
-
parameterId: p.
|
|
230
|
-
}]))
|
|
264
|
+
parameterId: p.id
|
|
265
|
+
}])),
|
|
231
266
|
structFieldValues: {}
|
|
232
267
|
}
|
|
233
268
|
}],
|
|
234
|
-
|
|
235
|
-
|
|
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(
|
|
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
|
-
|
|
273
|
-
|
|
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
|
}
|