@party-stack/salesforce-ontology 0.4.0 → 0.4.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.
- package/README.md +22 -31
- package/lib/actionMetadata.d.ts +11 -9
- package/lib/actionMetadata.d.ts.map +1 -1
- package/lib/actionMetadata.js +19 -30
- package/lib/actionMetadata.js.map +1 -1
- package/lib/adapter/convertLoadSubsetOptions.d.ts +10 -8
- package/lib/adapter/convertLoadSubsetOptions.d.ts.map +1 -1
- package/lib/adapter/convertLoadSubsetOptions.js +110 -173
- package/lib/adapter/convertLoadSubsetOptions.js.map +1 -1
- package/lib/adapter/createSalesforceOntologyBackendAdapter.d.ts +14 -12
- package/lib/adapter/createSalesforceOntologyBackendAdapter.d.ts.map +1 -1
- package/lib/adapter/createSalesforceOntologyBackendAdapter.js +124 -191
- package/lib/adapter/createSalesforceOntologyBackendAdapter.js.map +1 -1
- package/lib/adapter/index.d.ts +5 -5
- package/lib/adapter/index.js +5 -5
- package/lib/adapter/objectCollectionOptions.d.ts +22 -23
- package/lib/adapter/objectCollectionOptions.d.ts.map +1 -1
- package/lib/adapter/objectCollectionOptions.js +198 -280
- package/lib/adapter/objectCollectionOptions.js.map +1 -1
- package/lib/adapter/salesforceCodec.d.ts +6 -5
- package/lib/adapter/salesforceCodec.d.ts.map +1 -1
- package/lib/adapter/salesforceCodec.js +126 -190
- package/lib/adapter/salesforceCodec.js.map +1 -1
- package/lib/config/index.d.ts +20 -18
- package/lib/config/index.d.ts.map +1 -1
- package/lib/config/index.js +148 -192
- package/lib/config/index.js.map +1 -1
- package/lib/connection.d.ts +35 -33
- package/lib/connection.d.ts.map +1 -1
- package/lib/connection.js +243 -299
- package/lib/connection.js.map +1 -1
- package/lib/crud.d.ts +5 -3
- package/lib/crud.d.ts.map +1 -1
- package/lib/crud.js +0 -1
- package/lib/index.d.ts +10 -5
- package/lib/index.js +10 -5
- package/lib/installation/createSalesforceBackendInstallation.d.ts +28 -26
- package/lib/installation/createSalesforceBackendInstallation.d.ts.map +1 -1
- package/lib/installation/createSalesforceBackendInstallation.js +75 -85
- package/lib/installation/createSalesforceBackendInstallation.js.map +1 -1
- package/lib/installation/index.d.ts +2 -2
- package/lib/installation/index.js +2 -2
- package/lib/meta/actionTypeCollectionOptions.d.ts +10 -8
- package/lib/meta/actionTypeCollectionOptions.d.ts.map +1 -1
- package/lib/meta/actionTypeCollectionOptions.js +105 -212
- package/lib/meta/actionTypeCollectionOptions.js.map +1 -1
- package/lib/meta/convertMetaActionType.d.ts +4 -2
- package/lib/meta/convertMetaActionType.d.ts.map +1 -1
- package/lib/meta/convertMetaActionType.js +32 -32
- package/lib/meta/convertMetaActionType.js.map +1 -1
- package/lib/meta/convertMetaLinkType.d.ts +4 -2
- package/lib/meta/convertMetaLinkType.d.ts.map +1 -1
- package/lib/meta/convertMetaLinkType.js +39 -45
- package/lib/meta/convertMetaLinkType.js.map +1 -1
- package/lib/meta/convertMetaLoadSubsetOptions.d.ts +12 -10
- package/lib/meta/convertMetaLoadSubsetOptions.d.ts.map +1 -1
- package/lib/meta/convertMetaLoadSubsetOptions.js +42 -58
- package/lib/meta/convertMetaLoadSubsetOptions.js.map +1 -1
- package/lib/meta/convertMetaObjectType.d.ts +4 -2
- package/lib/meta/convertMetaObjectType.d.ts.map +1 -1
- package/lib/meta/convertMetaObjectType.js +36 -40
- package/lib/meta/convertMetaObjectType.js.map +1 -1
- package/lib/meta/convertMetaQueryFunctionType.d.ts +4 -2
- package/lib/meta/convertMetaQueryFunctionType.d.ts.map +1 -1
- package/lib/meta/convertMetaQueryFunctionType.js +27 -25
- package/lib/meta/convertMetaQueryFunctionType.js.map +1 -1
- package/lib/meta/convertMetaTypeDef.d.ts +10 -8
- package/lib/meta/convertMetaTypeDef.d.ts.map +1 -1
- package/lib/meta/convertMetaTypeDef.js +196 -188
- package/lib/meta/convertMetaTypeDef.js.map +1 -1
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.d.ts +19 -17
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.d.ts.map +1 -1
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.js +38 -40
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.js.map +1 -1
- package/lib/meta/entityCollectionOptions.d.ts +10 -8
- package/lib/meta/entityCollectionOptions.d.ts.map +1 -1
- package/lib/meta/entityCollectionOptions.js +73 -82
- package/lib/meta/entityCollectionOptions.js.map +1 -1
- package/lib/meta/index.d.ts +7 -7
- package/lib/meta/index.js +7 -7
- package/lib/meta/queryFunctionTypeCollectionOptions.d.ts +7 -5
- package/lib/meta/queryFunctionTypeCollectionOptions.d.ts.map +1 -1
- package/lib/meta/queryFunctionTypeCollectionOptions.js +53 -91
- package/lib/meta/queryFunctionTypeCollectionOptions.js.map +1 -1
- package/lib/meta/synthesizeCrudActionTypes.d.ts +4 -2
- package/lib/meta/synthesizeCrudActionTypes.d.ts.map +1 -1
- package/lib/meta/synthesizeCrudActionTypes.js +77 -116
- package/lib/meta/synthesizeCrudActionTypes.js.map +1 -1
- package/lib/standardActions.d.ts +2 -0
- package/lib/standardActions.d.ts.map +1 -1
- package/lib/standardActions.js +22 -20
- package/lib/standardActions.js.map +1 -1
- package/lib/utils/AsyncIterable.d.ts +2 -0
- package/lib/utils/AsyncIterable.d.ts.map +1 -1
- package/lib/utils/AsyncIterable.js +20 -23
- package/lib/utils/AsyncIterable.js.map +1 -1
- package/lib/utils/ids.d.ts +2 -0
- package/lib/utils/ids.d.ts.map +1 -1
- package/lib/utils/ids.js +23 -19
- package/lib/utils/ids.js.map +1 -1
- package/package.json +14 -20
- package/lib/adapter/convertLoadSubsetOptions.test.d.ts +0 -2
- package/lib/adapter/convertLoadSubsetOptions.test.d.ts.map +0 -1
- package/lib/adapter/convertLoadSubsetOptions.test.js +0 -80
- package/lib/adapter/convertLoadSubsetOptions.test.js.map +0 -1
- package/lib/adapter/createSalesforceOntologyBackendAdapter.test.d.ts +0 -2
- package/lib/adapter/createSalesforceOntologyBackendAdapter.test.d.ts.map +0 -1
- package/lib/adapter/createSalesforceOntologyBackendAdapter.test.js +0 -394
- package/lib/adapter/createSalesforceOntologyBackendAdapter.test.js.map +0 -1
- package/lib/adapter/index.d.ts.map +0 -1
- package/lib/adapter/index.js.map +0 -1
- package/lib/adapter/objectCollectionOptions.test.d.ts +0 -2
- package/lib/adapter/objectCollectionOptions.test.d.ts.map +0 -1
- package/lib/adapter/objectCollectionOptions.test.js +0 -160
- package/lib/adapter/objectCollectionOptions.test.js.map +0 -1
- package/lib/adapter/salesforceCodec.test.d.ts +0 -2
- package/lib/adapter/salesforceCodec.test.d.ts.map +0 -1
- package/lib/adapter/salesforceCodec.test.js +0 -57
- package/lib/adapter/salesforceCodec.test.js.map +0 -1
- package/lib/config/index.test.d.ts +0 -2
- package/lib/config/index.test.d.ts.map +0 -1
- package/lib/config/index.test.js +0 -177
- package/lib/config/index.test.js.map +0 -1
- package/lib/connection.test.d.ts +0 -2
- package/lib/connection.test.d.ts.map +0 -1
- package/lib/connection.test.js +0 -189
- package/lib/connection.test.js.map +0 -1
- package/lib/crud.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/installation/createSalesforceBackendInstallation.test.d.ts +0 -2
- package/lib/installation/createSalesforceBackendInstallation.test.d.ts.map +0 -1
- package/lib/installation/createSalesforceBackendInstallation.test.js +0 -55
- package/lib/installation/createSalesforceBackendInstallation.test.js.map +0 -1
- package/lib/installation/index.d.ts.map +0 -1
- package/lib/installation/index.js.map +0 -1
- package/lib/meta/actionTypeCollectionOptions.test.d.ts +0 -2
- package/lib/meta/actionTypeCollectionOptions.test.d.ts.map +0 -1
- package/lib/meta/actionTypeCollectionOptions.test.js +0 -192
- package/lib/meta/actionTypeCollectionOptions.test.js.map +0 -1
- package/lib/meta/convertMetaActionType.test.d.ts +0 -2
- package/lib/meta/convertMetaActionType.test.d.ts.map +0 -1
- package/lib/meta/convertMetaActionType.test.js +0 -185
- package/lib/meta/convertMetaActionType.test.js.map +0 -1
- package/lib/meta/convertMetaObjectType.test.d.ts +0 -2
- package/lib/meta/convertMetaObjectType.test.d.ts.map +0 -1
- package/lib/meta/convertMetaObjectType.test.js +0 -187
- package/lib/meta/convertMetaObjectType.test.js.map +0 -1
- package/lib/meta/convertMetaQueryFunctionType.test.d.ts +0 -2
- package/lib/meta/convertMetaQueryFunctionType.test.d.ts.map +0 -1
- package/lib/meta/convertMetaQueryFunctionType.test.js +0 -58
- package/lib/meta/convertMetaQueryFunctionType.test.js.map +0 -1
- package/lib/meta/entityCollectionOptions.test.d.ts +0 -2
- package/lib/meta/entityCollectionOptions.test.d.ts.map +0 -1
- package/lib/meta/entityCollectionOptions.test.js +0 -120
- package/lib/meta/entityCollectionOptions.test.js.map +0 -1
- package/lib/meta/index.d.ts.map +0 -1
- package/lib/meta/index.js.map +0 -1
- package/lib/meta/queryFunctionTypeCollectionOptions.test.d.ts +0 -2
- package/lib/meta/queryFunctionTypeCollectionOptions.test.d.ts.map +0 -1
- package/lib/meta/queryFunctionTypeCollectionOptions.test.js +0 -71
- package/lib/meta/queryFunctionTypeCollectionOptions.test.js.map +0 -1
- package/lib/meta/synthesizeCrudActionTypes.test.d.ts +0 -2
- package/lib/meta/synthesizeCrudActionTypes.test.d.ts.map +0 -1
- package/lib/meta/synthesizeCrudActionTypes.test.js +0 -153
- package/lib/meta/synthesizeCrudActionTypes.test.js.map +0 -1
|
@@ -1,128 +1,89 @@
|
|
|
1
1
|
import { salesforceActionMeta } from "../actionMetadata.js";
|
|
2
|
-
import { salesforceCrudActionTypeId, salesforceCrudActionTypeName
|
|
2
|
+
import { salesforceCrudActionTypeId, salesforceCrudActionTypeName } from "../utils/ids.js";
|
|
3
3
|
import { convertSalesforceFieldType } from "./convertMetaTypeDef.js";
|
|
4
|
-
|
|
4
|
+
//#region src/meta/synthesizeCrudActionTypes.ts
|
|
5
|
+
const COMPOUND_PARENT_TYPES = /* @__PURE__ */ new Set(["address", "location"]);
|
|
5
6
|
function optional(type) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
return type.kind === "optional" ? type : {
|
|
8
|
+
kind: "optional",
|
|
9
|
+
value: { type }
|
|
10
|
+
};
|
|
9
11
|
}
|
|
10
12
|
function writableFieldParameter(field, operation) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
description: field.inlineHelpText ?? undefined,
|
|
20
|
-
type,
|
|
21
|
-
};
|
|
13
|
+
let type = convertSalesforceFieldType(field);
|
|
14
|
+
if (operation === "update" || operation === "create" && field.defaultedOnCreate) type = optional(type);
|
|
15
|
+
return {
|
|
16
|
+
name: field.name,
|
|
17
|
+
displayName: field.label || field.name,
|
|
18
|
+
description: field.inlineHelpText ?? void 0,
|
|
19
|
+
type
|
|
20
|
+
};
|
|
22
21
|
}
|
|
23
22
|
function action(describe, operation, parameters) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
: [
|
|
61
|
-
{
|
|
62
|
-
kind: "deleteObject",
|
|
63
|
-
value: {
|
|
64
|
-
object: {
|
|
65
|
-
name: "recordId",
|
|
66
|
-
},
|
|
67
|
-
},
|
|
68
|
-
},
|
|
69
|
-
];
|
|
70
|
-
return {
|
|
71
|
-
id: salesforceCrudActionTypeId(operation, describe.name),
|
|
72
|
-
meta: salesforceActionMeta({
|
|
73
|
-
kind: "crud",
|
|
74
|
-
objectType: describe.name,
|
|
75
|
-
operation,
|
|
76
|
-
}),
|
|
77
|
-
name: salesforceCrudActionTypeName(operation, describe.name),
|
|
78
|
-
displayName: `${verb} ${describe.label}`,
|
|
79
|
-
parameters,
|
|
80
|
-
logic,
|
|
81
|
-
};
|
|
23
|
+
const verb = operation === "create" ? "Create" : operation === "update" ? "Update" : "Delete";
|
|
24
|
+
const values = parameters.filter((parameter) => parameter.name !== "recordId").map((parameter) => ({
|
|
25
|
+
property: [parameter.name],
|
|
26
|
+
value: {
|
|
27
|
+
kind: "inputReference",
|
|
28
|
+
value: { name: parameter.name }
|
|
29
|
+
}
|
|
30
|
+
}));
|
|
31
|
+
const logic = operation === "create" ? [{
|
|
32
|
+
kind: "createObject",
|
|
33
|
+
value: {
|
|
34
|
+
objectType: describe.name,
|
|
35
|
+
values
|
|
36
|
+
}
|
|
37
|
+
}] : operation === "update" ? [{
|
|
38
|
+
kind: "updateObject",
|
|
39
|
+
value: {
|
|
40
|
+
object: { name: "recordId" },
|
|
41
|
+
values
|
|
42
|
+
}
|
|
43
|
+
}] : [{
|
|
44
|
+
kind: "deleteObject",
|
|
45
|
+
value: { object: { name: "recordId" } }
|
|
46
|
+
}];
|
|
47
|
+
return {
|
|
48
|
+
id: salesforceCrudActionTypeId(operation, describe.name),
|
|
49
|
+
meta: salesforceActionMeta({
|
|
50
|
+
kind: "crud",
|
|
51
|
+
objectType: describe.name,
|
|
52
|
+
operation
|
|
53
|
+
}),
|
|
54
|
+
name: salesforceCrudActionTypeName(operation, describe.name),
|
|
55
|
+
displayName: `${verb} ${describe.label}`,
|
|
56
|
+
parameters,
|
|
57
|
+
logic
|
|
58
|
+
};
|
|
82
59
|
}
|
|
83
60
|
function isWritableField(field, operation) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return false;
|
|
88
|
-
return operation === "create"
|
|
89
|
-
? field.createable
|
|
90
|
-
: field.updateable;
|
|
61
|
+
if (COMPOUND_PARENT_TYPES.has(field.type)) return false;
|
|
62
|
+
if (field.calculated || field.autoNumber) return false;
|
|
63
|
+
return operation === "create" ? field.createable : field.updateable;
|
|
91
64
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
]));
|
|
113
|
-
}
|
|
114
|
-
if (describe.deletable) {
|
|
115
|
-
actions.push(action(describe, "delete", [
|
|
116
|
-
{
|
|
117
|
-
name: "recordId",
|
|
118
|
-
displayName: `${describe.label} ID`,
|
|
119
|
-
type: {
|
|
120
|
-
kind: "objectReference",
|
|
121
|
-
value: { objectType: describe.name },
|
|
122
|
-
},
|
|
123
|
-
},
|
|
124
|
-
]));
|
|
125
|
-
}
|
|
126
|
-
return actions;
|
|
65
|
+
function synthesizeSalesforceCrudActionTypes(describe) {
|
|
66
|
+
const actions = [];
|
|
67
|
+
if (describe.createable) actions.push(action(describe, "create", describe.fields.filter((field) => isWritableField(field, "create")).map((field) => writableFieldParameter(field, "create"))));
|
|
68
|
+
if (describe.updateable) actions.push(action(describe, "update", [{
|
|
69
|
+
name: "recordId",
|
|
70
|
+
displayName: `${describe.label} ID`,
|
|
71
|
+
type: {
|
|
72
|
+
kind: "objectReference",
|
|
73
|
+
value: { objectType: describe.name }
|
|
74
|
+
}
|
|
75
|
+
}, ...describe.fields.filter((field) => isWritableField(field, "update")).map((field) => writableFieldParameter(field, "update"))]));
|
|
76
|
+
if (describe.deletable) actions.push(action(describe, "delete", [{
|
|
77
|
+
name: "recordId",
|
|
78
|
+
displayName: `${describe.label} ID`,
|
|
79
|
+
type: {
|
|
80
|
+
kind: "objectReference",
|
|
81
|
+
value: { objectType: describe.name }
|
|
82
|
+
}
|
|
83
|
+
}]));
|
|
84
|
+
return actions;
|
|
127
85
|
}
|
|
86
|
+
//#endregion
|
|
87
|
+
export { synthesizeSalesforceCrudActionTypes };
|
|
88
|
+
|
|
128
89
|
//# sourceMappingURL=synthesizeCrudActionTypes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synthesizeCrudActionTypes.js","
|
|
1
|
+
{"version":3,"file":"synthesizeCrudActionTypes.js","names":[],"sources":["../../src/meta/synthesizeCrudActionTypes.ts"],"sourcesContent":["import { salesforceActionMeta } from \"../actionMetadata.js\";\nimport {\n salesforceCrudActionTypeId,\n salesforceCrudActionTypeName,\n type SalesforceCrudOperation,\n} from \"../utils/ids.js\";\nimport { convertSalesforceFieldType } from \"./convertMetaTypeDef.js\";\nimport type { MetaActionType, TypeDef } from \"@party-stack/ontology\";\nimport type { SalesforceFieldDescribe, SalesforceSObjectDescribe } from \"@party-stack/salesforce-client\";\n\nconst COMPOUND_PARENT_TYPES = new Set([\"address\", \"location\"]);\n\nfunction optional(type: TypeDef): TypeDef {\n return type.kind === \"optional\" ? type : { kind: \"optional\", value: { type } };\n}\n\nfunction writableFieldParameter(field: SalesforceFieldDescribe, operation: \"create\" | \"update\") {\n let type = convertSalesforceFieldType(field);\n if (operation === \"update\" || (operation === \"create\" && field.defaultedOnCreate)) {\n type = optional(type);\n }\n return {\n name: field.name,\n displayName: field.label || field.name,\n description: field.inlineHelpText ?? undefined,\n type,\n };\n}\n\nfunction action(\n describe: SalesforceSObjectDescribe,\n operation: SalesforceCrudOperation,\n parameters: MetaActionType[\"parameters\"]\n): MetaActionType {\n const verb = operation === \"create\" ? \"Create\" : operation === \"update\" ? \"Update\" : \"Delete\";\n const values = parameters\n .filter((parameter) => parameter.name !== \"recordId\")\n .map((parameter) => ({\n property: [parameter.name],\n value: {\n kind: \"inputReference\" as const,\n value: { name: parameter.name },\n },\n }));\n const logic: MetaActionType[\"logic\"] =\n operation === \"create\"\n ? [\n {\n kind: \"createObject\",\n value: {\n objectType: describe.name,\n values,\n },\n },\n ]\n : operation === \"update\"\n ? [\n {\n kind: \"updateObject\",\n value: {\n object: {\n name: \"recordId\",\n },\n values,\n },\n },\n ]\n : [\n {\n kind: \"deleteObject\",\n value: {\n object: {\n name: \"recordId\",\n },\n },\n },\n ];\n return {\n id: salesforceCrudActionTypeId(operation, describe.name),\n meta: salesforceActionMeta({\n kind: \"crud\",\n objectType: describe.name,\n operation,\n }),\n name: salesforceCrudActionTypeName(operation, describe.name),\n displayName: `${verb} ${describe.label}`,\n parameters,\n logic,\n };\n}\n\nfunction isWritableField(field: SalesforceFieldDescribe, operation: \"create\" | \"update\"): boolean {\n if (COMPOUND_PARENT_TYPES.has(field.type)) return false;\n if (field.calculated || field.autoNumber) return false;\n return operation === \"create\" ? field.createable : field.updateable;\n}\n\nexport function synthesizeSalesforceCrudActionTypes(describe: SalesforceSObjectDescribe): MetaActionType[] {\n const actions: MetaActionType[] = [];\n if (describe.createable) {\n actions.push(\n action(\n describe,\n \"create\",\n describe.fields\n .filter((field) => isWritableField(field, \"create\"))\n .map((field) => writableFieldParameter(field, \"create\"))\n )\n );\n }\n if (describe.updateable) {\n actions.push(\n action(describe, \"update\", [\n {\n name: \"recordId\",\n displayName: `${describe.label} ID`,\n type: {\n kind: \"objectReference\",\n value: { objectType: describe.name },\n },\n },\n ...describe.fields\n .filter((field) => isWritableField(field, \"update\"))\n .map((field) => writableFieldParameter(field, \"update\")),\n ])\n );\n }\n if (describe.deletable) {\n actions.push(\n action(describe, \"delete\", [\n {\n name: \"recordId\",\n displayName: `${describe.label} ID`,\n type: {\n kind: \"objectReference\",\n value: { objectType: describe.name },\n },\n },\n ])\n );\n }\n return actions;\n}\n"],"mappings":";;;;AAUA,MAAM,wCAAwB,IAAI,IAAI,CAAC,WAAW,UAAU,CAAC;AAE7D,SAAS,SAAS,MAAwB;CACtC,OAAO,KAAK,SAAS,aAAa,OAAO;EAAE,MAAM;EAAY,OAAO,EAAE,KAAK;CAAE;AACjF;AAEA,SAAS,uBAAuB,OAAgC,WAAgC;CAC5F,IAAI,OAAO,2BAA2B,KAAK;CAC3C,IAAI,cAAc,YAAa,cAAc,YAAY,MAAM,mBAC3D,OAAO,SAAS,IAAI;CAExB,OAAO;EACH,MAAM,MAAM;EACZ,aAAa,MAAM,SAAS,MAAM;EAClC,aAAa,MAAM,kBAAkB,KAAA;EACrC;CACJ;AACJ;AAEA,SAAS,OACL,UACA,WACA,YACc;CACd,MAAM,OAAO,cAAc,WAAW,WAAW,cAAc,WAAW,WAAW;CACrF,MAAM,SAAS,WACV,QAAQ,cAAc,UAAU,SAAS,UAAU,CAAC,CACpD,KAAK,eAAe;EACjB,UAAU,CAAC,UAAU,IAAI;EACzB,OAAO;GACH,MAAM;GACN,OAAO,EAAE,MAAM,UAAU,KAAK;EAClC;CACJ,EAAE;CACN,MAAM,QACF,cAAc,WACR,CACI;EACI,MAAM;EACN,OAAO;GACH,YAAY,SAAS;GACrB;EACJ;CACJ,CACJ,IACA,cAAc,WACZ,CACI;EACI,MAAM;EACN,OAAO;GACH,QAAQ,EACJ,MAAM,WACV;GACA;EACJ;CACJ,CACJ,IACA,CACI;EACI,MAAM;EACN,OAAO,EACH,QAAQ,EACJ,MAAM,WACV,EACJ;CACJ,CACJ;CACZ,OAAO;EACH,IAAI,2BAA2B,WAAW,SAAS,IAAI;EACvD,MAAM,qBAAqB;GACvB,MAAM;GACN,YAAY,SAAS;GACrB;EACJ,CAAC;EACD,MAAM,6BAA6B,WAAW,SAAS,IAAI;EAC3D,aAAa,GAAG,KAAK,GAAG,SAAS;EACjC;EACA;CACJ;AACJ;AAEA,SAAS,gBAAgB,OAAgC,WAAyC;CAC9F,IAAI,sBAAsB,IAAI,MAAM,IAAI,GAAG,OAAO;CAClD,IAAI,MAAM,cAAc,MAAM,YAAY,OAAO;CACjD,OAAO,cAAc,WAAW,MAAM,aAAa,MAAM;AAC7D;AAEA,SAAgB,oCAAoC,UAAuD;CACvG,MAAM,UAA4B,CAAC;CACnC,IAAI,SAAS,YACT,QAAQ,KACJ,OACI,UACA,UACA,SAAS,OACJ,QAAQ,UAAU,gBAAgB,OAAO,QAAQ,CAAC,CAAC,CACnD,KAAK,UAAU,uBAAuB,OAAO,QAAQ,CAAC,CAC/D,CACJ;CAEJ,IAAI,SAAS,YACT,QAAQ,KACJ,OAAO,UAAU,UAAU,CACvB;EACI,MAAM;EACN,aAAa,GAAG,SAAS,MAAM;EAC/B,MAAM;GACF,MAAM;GACN,OAAO,EAAE,YAAY,SAAS,KAAK;EACvC;CACJ,GACA,GAAG,SAAS,OACP,QAAQ,UAAU,gBAAgB,OAAO,QAAQ,CAAC,CAAC,CACnD,KAAK,UAAU,uBAAuB,OAAO,QAAQ,CAAC,CAC/D,CAAC,CACL;CAEJ,IAAI,SAAS,WACT,QAAQ,KACJ,OAAO,UAAU,UAAU,CACvB;EACI,MAAM;EACN,aAAa,GAAG,SAAS,MAAM;EAC/B,MAAM;GACF,MAAM;GACN,OAAO,EAAE,YAAY,SAAS,KAAK;EACvC;CACJ,CACJ,CAAC,CACL;CAEJ,OAAO;AACX"}
|
package/lib/standardActions.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
//#region src/standardActions.d.ts
|
|
1
2
|
export type SalesforceStandardActionKind = "action" | "queryFunction";
|
|
2
3
|
export declare function classifySalesforceStandardAction(name: string): SalesforceStandardActionKind;
|
|
4
|
+
//#endregion
|
|
3
5
|
//# sourceMappingURL=standardActions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standardActions.d.ts","
|
|
1
|
+
{"version":3,"file":"standardActions.d.ts","names":[],"sources":["../src/standardActions.ts"],"mappings":";YAAY;wBAqBI,iCAAiC,eAAe"}
|
package/lib/standardActions.js
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
|
+
//#region src/standardActions.ts
|
|
1
2
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const QUERY_FUNCTIONS = new Set([
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
3
|
+
* Standard actions have Salesforce-owned, versioned semantics. Keep this list
|
|
4
|
+
* conservative: unknown operations are treated as mutating actions.
|
|
5
|
+
*/
|
|
6
|
+
const QUERY_FUNCTIONS = /* @__PURE__ */ new Set([
|
|
7
|
+
"cdpGetDataGraphByLookup",
|
|
8
|
+
"cdpGetDataGraphMetadata",
|
|
9
|
+
"exploreConversation",
|
|
10
|
+
"getArticleSmartLinkUrl",
|
|
11
|
+
"getAvailableMeetingTimes",
|
|
12
|
+
"getConversationIntelligence",
|
|
13
|
+
"getConversationTranscript",
|
|
14
|
+
"getDataCategoryDetails",
|
|
15
|
+
"getDataCategoryGroups",
|
|
16
|
+
"previewCartToExchangeOrder",
|
|
17
|
+
"searchKnowledgeArticles",
|
|
18
|
+
"summarizeRecord"
|
|
18
19
|
]);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
? "queryFunction"
|
|
22
|
-
: "action";
|
|
20
|
+
function classifySalesforceStandardAction(name) {
|
|
21
|
+
return QUERY_FUNCTIONS.has(name) ? "queryFunction" : "action";
|
|
23
22
|
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { classifySalesforceStandardAction };
|
|
25
|
+
|
|
24
26
|
//# sourceMappingURL=standardActions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standardActions.js","
|
|
1
|
+
{"version":3,"file":"standardActions.js","names":[],"sources":["../src/standardActions.ts"],"sourcesContent":["export type SalesforceStandardActionKind = \"action\" | \"queryFunction\";\n\n/**\n * Standard actions have Salesforce-owned, versioned semantics. Keep this list\n * conservative: unknown operations are treated as mutating actions.\n */\nconst QUERY_FUNCTIONS = new Set([\n \"cdpGetDataGraphByLookup\",\n \"cdpGetDataGraphMetadata\",\n \"exploreConversation\",\n \"getArticleSmartLinkUrl\",\n \"getAvailableMeetingTimes\",\n \"getConversationIntelligence\",\n \"getConversationTranscript\",\n \"getDataCategoryDetails\",\n \"getDataCategoryGroups\",\n \"previewCartToExchangeOrder\",\n \"searchKnowledgeArticles\",\n \"summarizeRecord\",\n]);\n\nexport function classifySalesforceStandardAction(name: string): SalesforceStandardActionKind {\n return QUERY_FUNCTIONS.has(name) ? \"queryFunction\" : \"action\";\n}\n"],"mappings":";;;;;AAMA,MAAM,kCAAkB,IAAI,IAAI;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACJ,CAAC;AAED,SAAgB,iCAAiC,MAA4C;CACzF,OAAO,gBAAgB,IAAI,IAAI,IAAI,kBAAkB;AACzD"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
//#region src/utils/AsyncIterable.d.ts
|
|
1
2
|
export declare function toArray<T>(asyncIterable: AsyncIterable<T>): Promise<T[]>;
|
|
2
3
|
export declare function fromPagination<C extends string | number, P, T>(getPage: (pageSize: number, pageToken?: C) => Promise<P>, getPageToken: (page: P) => C | undefined, getElements: (page: P) => T[] | Promise<T[]>, defaultPageSize: number, limit?: number): AsyncIterable<T>;
|
|
4
|
+
//#endregion
|
|
3
5
|
//# sourceMappingURL=AsyncIterable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncIterable.d.ts","
|
|
1
|
+
{"version":3,"file":"AsyncIterable.d.ts","names":[],"sources":["../../src/utils/AsyncIterable.ts"],"mappings":";wBACsB,QAAQ,GAAG,eAAe,cAAc,KAAK,QAAQ;wBAQpD,eAAe,2BAA2B,GAAG,GAChE,UAAU,kBAAkB,YAAY,MAAM,QAAQ,IACtD,eAAe,MAAM,MAAM,eAC3B,cAAc,MAAM,MAAM,MAAM,QAAQ,MACxC,yBACA,iBACD,cAAc"}
|
|
@@ -1,26 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
return result;
|
|
1
|
+
//#region src/utils/AsyncIterable.ts
|
|
2
|
+
async function toArray(asyncIterable) {
|
|
3
|
+
const result = [];
|
|
4
|
+
for await (const element of asyncIterable) result.push(element);
|
|
5
|
+
return result;
|
|
8
6
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (pageToken === undefined) {
|
|
22
|
-
hasMore = false;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
7
|
+
async function* fromPagination(getPage, getPageToken, getElements, defaultPageSize, limit = Infinity) {
|
|
8
|
+
let pageToken = void 0;
|
|
9
|
+
let hasMore = true;
|
|
10
|
+
let count = 0;
|
|
11
|
+
while (hasMore && count < limit) {
|
|
12
|
+
const page = await getPage(Math.min(limit - count, defaultPageSize), pageToken);
|
|
13
|
+
const elements = await getElements(page);
|
|
14
|
+
for (const element of elements) yield element;
|
|
15
|
+
count += elements.length;
|
|
16
|
+
pageToken = getPageToken(page);
|
|
17
|
+
if (pageToken === void 0) hasMore = false;
|
|
18
|
+
}
|
|
25
19
|
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { fromPagination, toArray };
|
|
22
|
+
|
|
26
23
|
//# sourceMappingURL=AsyncIterable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncIterable.js","
|
|
1
|
+
{"version":3,"file":"AsyncIterable.js","names":[],"sources":["../../src/utils/AsyncIterable.ts"],"sourcesContent":["// Replace later with https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fromAsync\nexport async function toArray<T>(asyncIterable: AsyncIterable<T>): Promise<T[]> {\n const result = [];\n for await (const element of asyncIterable) {\n result.push(element);\n }\n return result;\n}\n\nexport async function* fromPagination<C extends string | number, P, T>(\n getPage: (pageSize: number, pageToken?: C) => Promise<P>,\n getPageToken: (page: P) => C | undefined,\n getElements: (page: P) => T[] | Promise<T[]>,\n defaultPageSize: number,\n limit: number = Infinity\n): AsyncIterable<T> {\n let pageToken: C | undefined = undefined;\n let hasMore = true;\n let count = 0;\n while (hasMore && count < limit) {\n const page = await getPage(Math.min(limit - count, defaultPageSize), pageToken);\n const elements = await getElements(page);\n for (const element of elements) {\n yield element;\n }\n count += elements.length;\n pageToken = getPageToken(page);\n if (pageToken === undefined) {\n hasMore = false;\n }\n }\n}\n"],"mappings":";AACA,eAAsB,QAAW,eAA+C;CAC5E,MAAM,SAAS,CAAC;CAChB,WAAW,MAAM,WAAW,eACxB,OAAO,KAAK,OAAO;CAEvB,OAAO;AACX;AAEA,gBAAuB,eACnB,SACA,cACA,aACA,iBACA,QAAgB,UACA;CAChB,IAAI,YAA2B,KAAA;CAC/B,IAAI,UAAU;CACd,IAAI,QAAQ;CACZ,OAAO,WAAW,QAAQ,OAAO;EAC7B,MAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,OAAO,eAAe,GAAG,SAAS;EAC9E,MAAM,WAAW,MAAM,YAAY,IAAI;EACvC,KAAK,MAAM,WAAW,UAClB,MAAM;EAEV,SAAS,SAAS;EAClB,YAAY,aAAa,IAAI;EAC7B,IAAI,cAAc,KAAA,GACd,UAAU;CAElB;AACJ"}
|
package/lib/utils/ids.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
//#region src/utils/ids.d.ts
|
|
1
2
|
/**
|
|
2
3
|
* Keep the Salesforce Flow API name as the ontology action name.
|
|
3
4
|
* Camel-casing would be lossy for names like `Create_Account`.
|
|
@@ -11,4 +12,5 @@ export declare function salesforceStandardActionTypeId(actionApiName: string): s
|
|
|
11
12
|
export type SalesforceCrudOperation = "create" | "update" | "delete";
|
|
12
13
|
export declare function salesforceCrudActionTypeId(operation: SalesforceCrudOperation, sObjectName: string): string;
|
|
13
14
|
export declare function salesforceCrudActionTypeName(operation: SalesforceCrudOperation, sObjectName: string): string;
|
|
15
|
+
//#endregion
|
|
14
16
|
//# sourceMappingURL=ids.d.ts.map
|
package/lib/utils/ids.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids.d.ts","
|
|
1
|
+
{"version":3,"file":"ids.d.ts","names":[],"sources":["../../src/utils/ids.ts"],"mappings":";;;;;wBAIgB,yBAAyB;wBAIzB,uBAAuB;wBAIvB,qBAAqB,qBAAqB;wBAI1C,qBAAqB,qBAAqB;wBAI1C,2BAA2B;wBAI3B,+BAA+B;YAInC;wBAEI,2BAA2B,WAAW,yBAAyB;wBAI/D,6BACZ,WAAW,yBACX"}
|
package/lib/utils/ids.js
CHANGED
|
@@ -1,29 +1,33 @@
|
|
|
1
|
+
//#region src/utils/ids.ts
|
|
1
2
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
* Keep the Salesforce Flow API name as the ontology action name.
|
|
4
|
+
* Camel-casing would be lossy for names like `Create_Account`.
|
|
5
|
+
*/
|
|
6
|
+
function toOntologyActionTypeName(salesforceFlowApiName) {
|
|
7
|
+
return salesforceFlowApiName;
|
|
7
8
|
}
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
function salesforceObjectTypeId(sObjectName) {
|
|
10
|
+
return `salesforce:sobject:${sObjectName}`;
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
function salesforcePropertyId(sObjectName, fieldName) {
|
|
13
|
+
return `salesforce:field:${sObjectName}.${fieldName}`;
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
function salesforceLinkTypeId(sObjectName, fieldName) {
|
|
16
|
+
return `salesforce:link:${sObjectName}.${fieldName}`;
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
function salesforceFlowActionTypeId(flowApiName) {
|
|
19
|
+
return `salesforce:flow:${flowApiName}`;
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
function salesforceStandardActionTypeId(actionApiName) {
|
|
22
|
+
return `salesforce:standard:${actionApiName}`;
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
function salesforceCrudActionTypeId(operation, sObjectName) {
|
|
25
|
+
return `salesforce:crud:${operation}:${sObjectName}`;
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
function salesforceCrudActionTypeName(operation, sObjectName) {
|
|
28
|
+
return `${operation}${sObjectName}`;
|
|
28
29
|
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { salesforceCrudActionTypeId, salesforceCrudActionTypeName, salesforceFlowActionTypeId, salesforceLinkTypeId, salesforceObjectTypeId, salesforcePropertyId, salesforceStandardActionTypeId, toOntologyActionTypeName };
|
|
32
|
+
|
|
29
33
|
//# sourceMappingURL=ids.js.map
|
package/lib/utils/ids.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids.js","
|
|
1
|
+
{"version":3,"file":"ids.js","names":[],"sources":["../../src/utils/ids.ts"],"sourcesContent":["/**\n * Keep the Salesforce Flow API name as the ontology action name.\n * Camel-casing would be lossy for names like `Create_Account`.\n */\nexport function toOntologyActionTypeName(salesforceFlowApiName: string): string {\n return salesforceFlowApiName;\n}\n\nexport function salesforceObjectTypeId(sObjectName: string): string {\n return `salesforce:sobject:${sObjectName}`;\n}\n\nexport function salesforcePropertyId(sObjectName: string, fieldName: string): string {\n return `salesforce:field:${sObjectName}.${fieldName}`;\n}\n\nexport function salesforceLinkTypeId(sObjectName: string, fieldName: string): string {\n return `salesforce:link:${sObjectName}.${fieldName}`;\n}\n\nexport function salesforceFlowActionTypeId(flowApiName: string): string {\n return `salesforce:flow:${flowApiName}`;\n}\n\nexport function salesforceStandardActionTypeId(actionApiName: string): string {\n return `salesforce:standard:${actionApiName}`;\n}\n\nexport type SalesforceCrudOperation = \"create\" | \"update\" | \"delete\";\n\nexport function salesforceCrudActionTypeId(operation: SalesforceCrudOperation, sObjectName: string): string {\n return `salesforce:crud:${operation}:${sObjectName}`;\n}\n\nexport function salesforceCrudActionTypeName(\n operation: SalesforceCrudOperation,\n sObjectName: string\n): string {\n return `${operation}${sObjectName}`;\n}\n"],"mappings":";;;;;AAIA,SAAgB,yBAAyB,uBAAuC;CAC5E,OAAO;AACX;AAEA,SAAgB,uBAAuB,aAA6B;CAChE,OAAO,sBAAsB;AACjC;AAEA,SAAgB,qBAAqB,aAAqB,WAA2B;CACjF,OAAO,oBAAoB,YAAY,GAAG;AAC9C;AAEA,SAAgB,qBAAqB,aAAqB,WAA2B;CACjF,OAAO,mBAAmB,YAAY,GAAG;AAC7C;AAEA,SAAgB,2BAA2B,aAA6B;CACpE,OAAO,mBAAmB;AAC9B;AAEA,SAAgB,+BAA+B,eAA+B;CAC1E,OAAO,uBAAuB;AAClC;AAIA,SAAgB,2BAA2B,WAAoC,aAA6B;CACxG,OAAO,mBAAmB,UAAU,GAAG;AAC3C;AAEA,SAAgB,6BACZ,WACA,aACM;CACN,OAAO,GAAG,YAAY;AAC1B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@party-stack/salesforce-ontology",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"files": [
|
|
5
|
+
"lib"
|
|
6
|
+
],
|
|
4
7
|
"type": "module",
|
|
5
8
|
"exports": {
|
|
6
9
|
".": {
|
|
@@ -20,37 +23,28 @@
|
|
|
20
23
|
"default": "./lib/meta/index.js"
|
|
21
24
|
}
|
|
22
25
|
},
|
|
23
|
-
"files": [
|
|
24
|
-
"lib"
|
|
25
|
-
],
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@bobbyfidz/panic": "^0.1.0",
|
|
28
28
|
"temporal-polyfill": "^0.3.0",
|
|
29
|
-
"@party-stack/connections": "
|
|
30
|
-
"@party-stack/errors": "
|
|
31
|
-
"@party-stack/icons-salesforce-lightning": "
|
|
32
|
-
"@party-stack/oauth": "
|
|
33
|
-
"@party-stack/ontology": "0.19.
|
|
34
|
-
"@party-stack/runtime": "
|
|
35
|
-
"@party-stack/salesforce-client": "0.1.
|
|
29
|
+
"@party-stack/connections": "0.3.1",
|
|
30
|
+
"@party-stack/errors": "0.2.1",
|
|
31
|
+
"@party-stack/icons-salesforce-lightning": "0.2.1",
|
|
32
|
+
"@party-stack/oauth": "0.3.1",
|
|
33
|
+
"@party-stack/ontology": "0.19.1",
|
|
34
|
+
"@party-stack/runtime": "0.4.1",
|
|
35
|
+
"@party-stack/salesforce-client": "0.1.2"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@bobbyfidz/universal-build-config": "^0.1.1",
|
|
39
38
|
"@tanstack/db": "0.12.1",
|
|
40
39
|
"@tanstack/query-core": "^5.102.8",
|
|
41
40
|
"@tanstack/query-db-collection": "1.4.0",
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
41
|
+
"typescript": "~7.0.2",
|
|
42
|
+
"vite-plus": "1.1.0",
|
|
43
|
+
"@party-stack/build-config": "0.1.1"
|
|
45
44
|
},
|
|
46
45
|
"peerDependencies": {
|
|
47
46
|
"@tanstack/db": "0.12.1",
|
|
48
47
|
"@tanstack/query-core": "^5.102.8",
|
|
49
48
|
"@tanstack/query-db-collection": "1.4.0"
|
|
50
|
-
},
|
|
51
|
-
"scripts": {
|
|
52
|
-
"build": "tsc",
|
|
53
|
-
"lint": "eslint",
|
|
54
|
-
"test": "vitest run --pass-with-no-tests"
|
|
55
49
|
}
|
|
56
50
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"convertLoadSubsetOptions.test.d.ts","sourceRoot":"","sources":["../../src/adapter/convertLoadSubsetOptions.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { eq, gt, inArray, IR, lt } from "@tanstack/db";
|
|
2
|
-
import { Temporal } from "temporal-polyfill";
|
|
3
|
-
import { describe, expect, it } from "vitest";
|
|
4
|
-
import { buildSoqlQuery, convertLoadSubsetFilter, isAlwaysFalseFilter, serializeSoqlLiteral, } from "./convertLoadSubsetOptions.js";
|
|
5
|
-
describe("serializeSoqlLiteral", () => {
|
|
6
|
-
it("escapes strings and serializes temporal values", () => {
|
|
7
|
-
expect(serializeSoqlLiteral("O'Brien")).toBe("'O\\'Brien'");
|
|
8
|
-
expect(serializeSoqlLiteral(true)).toBe("true");
|
|
9
|
-
expect(serializeSoqlLiteral(Temporal.PlainDate.from("2026-08-06"))).toBe("2026-08-06");
|
|
10
|
-
expect(serializeSoqlLiteral(Temporal.Instant.from("2026-08-06T12:00:00Z"))).toBe("2026-08-06T12:00:00Z");
|
|
11
|
-
});
|
|
12
|
-
it("keeps injection-shaped strings inside one escaped literal", () => {
|
|
13
|
-
expect(serializeSoqlLiteral("x' OR Name != ''")).toBe(String.raw `'x\' OR Name != \'\''`);
|
|
14
|
-
expect(serializeSoqlLiteral(String.raw `x\' OR Name != null`)).toBe(String.raw `'x\\\' OR Name != null'`);
|
|
15
|
-
});
|
|
16
|
-
it("escapes supported control characters and rejects the rest", () => {
|
|
17
|
-
expect(serializeSoqlLiteral("line1\nline2\tvalue")).toBe(String.raw `'line1\nline2\tvalue'`);
|
|
18
|
-
expect(() => serializeSoqlLiteral("before\u0000after")).toThrow(/control character U\+0000/);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
describe("convertLoadSubsetFilter", () => {
|
|
22
|
-
it("converts equality and null checks", () => {
|
|
23
|
-
expect(convertLoadSubsetFilter(eq(new IR.PropRef(["Name"]), "Acme"))).toEqual({
|
|
24
|
-
clause: "Name = 'Acme'",
|
|
25
|
-
alwaysFalse: false,
|
|
26
|
-
});
|
|
27
|
-
expect(convertLoadSubsetFilter(eq(new IR.PropRef(["DeletedDate"]), null))).toEqual({
|
|
28
|
-
clause: "DeletedDate = null",
|
|
29
|
-
alwaysFalse: false,
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
it("treats null range comparisons as always false", () => {
|
|
33
|
-
const filter = convertLoadSubsetFilter(lt(new IR.PropRef(["Amount"]), null));
|
|
34
|
-
expect(isAlwaysFalseFilter(filter)).toBe(true);
|
|
35
|
-
});
|
|
36
|
-
it("serializes Temporal values", () => {
|
|
37
|
-
const filter = convertLoadSubsetFilter(gt(new IR.PropRef(["CreatedDate"]), Temporal.Instant.from("2026-07-27T12:00:00Z")));
|
|
38
|
-
expect(filter).toEqual({
|
|
39
|
-
clause: "CreatedDate > 2026-07-27T12:00:00Z",
|
|
40
|
-
alwaysFalse: false,
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
it("converts reverse inArray expressions to SOQL INCLUDES", () => {
|
|
44
|
-
expect(convertLoadSubsetFilter(inArray("Enterprise", new IR.PropRef(["Customer_Tiers__c"])))).toEqual({
|
|
45
|
-
clause: "Customer_Tiers__c INCLUDES ('Enterprise')",
|
|
46
|
-
alwaysFalse: false,
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
it("escapes untrusted values in generated filters", () => {
|
|
50
|
-
expect(convertLoadSubsetFilter(eq(new IR.PropRef(["Name"]), "x' OR IsDeleted = false OR Name = '"))).toEqual({
|
|
51
|
-
clause: String.raw `Name = 'x\' OR IsDeleted = false OR Name = \''`,
|
|
52
|
-
alwaysFalse: false,
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
it("preserves regular inArray pushdown", () => {
|
|
56
|
-
expect(convertLoadSubsetFilter(inArray(new IR.PropRef(["Status__c"]), ["Open", "Closed"]))).toEqual({
|
|
57
|
-
clause: "Status__c IN ('Open', 'Closed')",
|
|
58
|
-
alwaysFalse: false,
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
describe("buildSoqlQuery", () => {
|
|
63
|
-
it("builds SELECT/FROM/WHERE/ORDER BY/LIMIT/OFFSET queries", () => {
|
|
64
|
-
expect(buildSoqlQuery({
|
|
65
|
-
objectType: "Account",
|
|
66
|
-
selectedProperties: ["Id", "Name"],
|
|
67
|
-
where: { clause: "Name = 'Acme'", alwaysFalse: false },
|
|
68
|
-
orderBy: "Name ASC",
|
|
69
|
-
limit: 50,
|
|
70
|
-
offset: 10,
|
|
71
|
-
})).toBe("SELECT Id, Name FROM Account WHERE Name = 'Acme' ORDER BY Name ASC LIMIT 50 OFFSET 10");
|
|
72
|
-
});
|
|
73
|
-
it("rejects unsafe identifiers", () => {
|
|
74
|
-
expect(() => buildSoqlQuery({
|
|
75
|
-
objectType: "Account; DROP TABLE",
|
|
76
|
-
selectedProperties: ["Id"],
|
|
77
|
-
})).toThrow(/Invalid Salesforce identifier/);
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
//# sourceMappingURL=convertLoadSubsetOptions.test.js.map
|