@party-stack/salesforce-ontology 0.4.2 → 0.5.0
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 +61 -68
- package/lib/adapter/backend.d.ts +15 -0
- package/lib/adapter/backend.d.ts.map +1 -0
- package/lib/adapter/backend.js +94 -0
- package/lib/adapter/backend.js.map +1 -0
- package/lib/adapter/index.d.ts +2 -4
- package/lib/adapter/index.js +2 -4
- package/lib/adapter/makeSalesforceOntologyBackend.d.ts +12 -0
- package/lib/adapter/makeSalesforceOntologyBackend.d.ts.map +1 -0
- package/lib/adapter/makeSalesforceOntologyBackend.js +186 -0
- package/lib/adapter/makeSalesforceOntologyBackend.js.map +1 -0
- package/lib/adapter/salesforceCodec.d.ts +1 -1
- package/lib/adapter/salesforceCodec.js.map +1 -1
- package/lib/adapter/salesforceObjectSearch.d.ts +15 -0
- package/lib/adapter/salesforceObjectSearch.d.ts.map +1 -0
- package/lib/adapter/salesforceObjectSearch.js +65 -0
- package/lib/adapter/salesforceObjectSearch.js.map +1 -0
- package/lib/adapter/soql.d.ts +17 -0
- package/lib/adapter/soql.d.ts.map +1 -0
- package/lib/adapter/soql.js +65 -0
- package/lib/adapter/soql.js.map +1 -0
- package/lib/config/index.d.ts +10 -7
- package/lib/config/index.d.ts.map +1 -1
- package/lib/config/index.js +63 -44
- package/lib/config/index.js.map +1 -1
- package/lib/connect.d.ts +18 -0
- package/lib/connect.d.ts.map +1 -0
- package/lib/connect.js +32 -0
- package/lib/connect.js.map +1 -0
- package/lib/connectionOptions.d.ts +10 -0
- package/lib/connectionOptions.d.ts.map +1 -0
- package/lib/connectionOptions.js +1 -0
- package/lib/index.d.ts +4 -7
- package/lib/index.js +3 -7
- package/lib/meta/{createSalesforceMetaOntologyBackendAdapter.d.ts → backend.d.ts} +5 -5
- package/lib/meta/backend.d.ts.map +1 -0
- package/lib/meta/backend.js +86 -0
- package/lib/meta/backend.js.map +1 -0
- package/lib/meta/convertMetaActionType.d.ts +3 -3
- package/lib/meta/convertMetaActionType.d.ts.map +1 -1
- package/lib/meta/convertMetaActionType.js.map +1 -1
- package/lib/meta/convertMetaLinkType.d.ts +2 -2
- package/lib/meta/convertMetaLinkType.d.ts.map +1 -1
- package/lib/meta/convertMetaLinkType.js.map +1 -1
- package/lib/meta/convertMetaLoadSubsetOptions.d.ts +2 -2
- package/lib/meta/convertMetaLoadSubsetOptions.d.ts.map +1 -1
- package/lib/meta/convertMetaLoadSubsetOptions.js +33 -33
- package/lib/meta/convertMetaLoadSubsetOptions.js.map +1 -1
- package/lib/meta/convertMetaObjectType.d.ts +2 -2
- package/lib/meta/convertMetaObjectType.d.ts.map +1 -1
- package/lib/meta/convertMetaObjectType.js.map +1 -1
- package/lib/meta/convertMetaQueryFunctionType.d.ts +1 -1
- package/lib/meta/convertMetaQueryFunctionType.js.map +1 -1
- package/lib/meta/convertMetaTypeDef.d.ts +1 -1
- package/lib/meta/convertMetaTypeDef.js.map +1 -1
- package/lib/meta/index.d.ts +2 -4
- package/lib/meta/index.js +3 -5
- package/lib/meta/loadActions.d.ts +15 -0
- package/lib/meta/loadActions.d.ts.map +1 -0
- package/lib/meta/loadActions.js +103 -0
- package/lib/meta/loadActions.js.map +1 -0
- package/lib/meta/loadEntities.d.ts +5 -0
- package/lib/meta/loadEntities.d.ts.map +1 -0
- package/lib/meta/loadEntities.js +14 -0
- package/lib/meta/loadEntities.js.map +1 -0
- package/lib/meta/loadQueryFunctions.d.ts +11 -0
- package/lib/meta/loadQueryFunctions.d.ts.map +1 -0
- package/lib/meta/loadQueryFunctions.js +43 -0
- package/lib/meta/loadQueryFunctions.js.map +1 -0
- package/lib/meta/synthesizeCrudActionTypes.d.ts +2 -2
- package/lib/meta/synthesizeCrudActionTypes.d.ts.map +1 -1
- package/lib/meta/synthesizeCrudActionTypes.js.map +1 -1
- package/lib/serviceConnector.d.ts +8 -0
- package/lib/serviceConnector.d.ts.map +1 -0
- package/lib/serviceConnector.js +125 -0
- package/lib/serviceConnector.js.map +1 -0
- package/lib/utils/AsyncIterable.d.ts +1 -1
- package/lib/utils/AsyncIterable.d.ts.map +1 -1
- package/lib/utils/AsyncIterable.js +11 -0
- package/lib/utils/AsyncIterable.js.map +1 -1
- package/package.json +15 -19
- package/lib/adapter/convertLoadSubsetOptions.d.ts +0 -20
- package/lib/adapter/convertLoadSubsetOptions.d.ts.map +0 -1
- package/lib/adapter/convertLoadSubsetOptions.js +0 -127
- package/lib/adapter/convertLoadSubsetOptions.js.map +0 -1
- package/lib/adapter/createSalesforceOntologyBackendAdapter.d.ts +0 -22
- package/lib/adapter/createSalesforceOntologyBackendAdapter.d.ts.map +0 -1
- package/lib/adapter/createSalesforceOntologyBackendAdapter.js +0 -139
- package/lib/adapter/createSalesforceOntologyBackendAdapter.js.map +0 -1
- package/lib/adapter/objectCollectionOptions.d.ts +0 -36
- package/lib/adapter/objectCollectionOptions.d.ts.map +0 -1
- package/lib/adapter/objectCollectionOptions.js +0 -204
- package/lib/adapter/objectCollectionOptions.js.map +0 -1
- package/lib/connection.d.ts +0 -45
- package/lib/connection.d.ts.map +0 -1
- package/lib/connection.js +0 -258
- package/lib/connection.js.map +0 -1
- package/lib/installation/createSalesforceBackendInstallation.d.ts +0 -37
- package/lib/installation/createSalesforceBackendInstallation.d.ts.map +0 -1
- package/lib/installation/createSalesforceBackendInstallation.js +0 -84
- package/lib/installation/createSalesforceBackendInstallation.js.map +0 -1
- package/lib/installation/index.d.ts +0 -2
- package/lib/installation/index.js +0 -1
- package/lib/meta/actionTypeCollectionOptions.d.ts +0 -15
- package/lib/meta/actionTypeCollectionOptions.d.ts.map +0 -1
- package/lib/meta/actionTypeCollectionOptions.js +0 -121
- package/lib/meta/actionTypeCollectionOptions.js.map +0 -1
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.d.ts.map +0 -1
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.js +0 -42
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.js.map +0 -1
- package/lib/meta/entityCollectionOptions.d.ts +0 -16
- package/lib/meta/entityCollectionOptions.d.ts.map +0 -1
- package/lib/meta/entityCollectionOptions.js +0 -81
- package/lib/meta/entityCollectionOptions.js.map +0 -1
- package/lib/meta/queryFunctionTypeCollectionOptions.d.ts +0 -11
- package/lib/meta/queryFunctionTypeCollectionOptions.d.ts.map +0 -1
- package/lib/meta/queryFunctionTypeCollectionOptions.js +0 -59
- package/lib/meta/queryFunctionTypeCollectionOptions.js.map +0 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { convertSalesforceMetaLinkTypes } from "./convertMetaLinkType.js";
|
|
2
|
+
import { convertStorageMetaNameQuery } from "./convertMetaLoadSubsetOptions.js";
|
|
3
|
+
import { convertSalesforceMetaObjectType } from "./convertMetaObjectType.js";
|
|
4
|
+
import { loadSalesforceActionTypes } from "./loadActions.js";
|
|
5
|
+
import { describeSObjects } from "./loadEntities.js";
|
|
6
|
+
import { loadSalesforceQueryFunctionTypes } from "./loadQueryFunctions.js";
|
|
7
|
+
import { Effect, Redacted, Schema } from "effect";
|
|
8
|
+
import { BackendError, classifyBackendFailure, makeOntologyBackend } from "@party-stack/ontology-backend";
|
|
9
|
+
import { compileObjectSubset, objectSubset } from "@party-stack/ontology-backend/subset";
|
|
10
|
+
import metaOntology from "@party-stack/ontology-spec/meta";
|
|
11
|
+
//#region src/meta/backend.ts
|
|
12
|
+
const failure = (cause) => classifyBackendFailure("metadata.load", cause);
|
|
13
|
+
function makeSalesforceMetadataBackend(options) {
|
|
14
|
+
const unsupported = (operation) => Effect.fail(new BackendError({
|
|
15
|
+
operation,
|
|
16
|
+
kind: "NotImplemented",
|
|
17
|
+
message: "Metadata is read-only.",
|
|
18
|
+
retryable: false
|
|
19
|
+
}));
|
|
20
|
+
return makeOntologyBackend({
|
|
21
|
+
ir: metaOntology,
|
|
22
|
+
name: "salesforce-metadata",
|
|
23
|
+
sourceId: `salesforce-metadata:${options.client.instanceUrl}`,
|
|
24
|
+
supportsIdempotency: false,
|
|
25
|
+
applyAction: () => unsupported("applyAction"),
|
|
26
|
+
queryFunction: () => unsupported("queryFunction"),
|
|
27
|
+
loadSubset: Effect.fn("SalesforceMetadata.loadSubset")(function* (request) {
|
|
28
|
+
const subset = yield* compileObjectSubset(metaOntology, request, void 0);
|
|
29
|
+
const type = metaOntology.objectTypes.find((type) => type.name === subset.objectType);
|
|
30
|
+
if (!type) return yield* new BackendError({
|
|
31
|
+
operation: "loadSubset",
|
|
32
|
+
kind: "InvalidRequest",
|
|
33
|
+
message: "Unknown metadata object type.",
|
|
34
|
+
retryable: false
|
|
35
|
+
});
|
|
36
|
+
if (subset.objectType === "Ontology") return {
|
|
37
|
+
complete: true,
|
|
38
|
+
rows: [{
|
|
39
|
+
key: "ontology",
|
|
40
|
+
value: { id: "ontology" }
|
|
41
|
+
}],
|
|
42
|
+
fulfilledSubset: objectSubset("Ontology")
|
|
43
|
+
};
|
|
44
|
+
const values = yield* Effect.tryPromise({
|
|
45
|
+
try: async (signal) => {
|
|
46
|
+
const client = options.client.withSignal?.(signal) ?? options.client;
|
|
47
|
+
const opts = {
|
|
48
|
+
...options,
|
|
49
|
+
client
|
|
50
|
+
};
|
|
51
|
+
const query = convertStorageMetaNameQuery(subset.query);
|
|
52
|
+
if (subset.objectType === "ValueType") return [];
|
|
53
|
+
if (subset.objectType === "ActionType") return loadSalesforceActionTypes(opts, query);
|
|
54
|
+
if (subset.objectType === "QueryFunctionType") return loadSalesforceQueryFunctionTypes(opts, query);
|
|
55
|
+
const allowlist = options.objectTypeNames ? new Set(options.objectTypeNames) : void 0;
|
|
56
|
+
const names = subset.objectType === "ObjectType" && query.type === "getBatch" ? query.names.filter((name) => !allowlist || allowlist.has(name)) : options.objectTypeNames ?? (await client.describeGlobal()).sobjects.filter((type) => type.queryable).map((type) => type.name);
|
|
57
|
+
const describes = await describeSObjects(client, names);
|
|
58
|
+
return subset.objectType === "ObjectType" ? describes.map(convertSalesforceMetaObjectType) : convertSalesforceMetaLinkTypes(describes);
|
|
59
|
+
},
|
|
60
|
+
catch: failure
|
|
61
|
+
});
|
|
62
|
+
return {
|
|
63
|
+
complete: true,
|
|
64
|
+
fulfilledSubset: objectSubset(subset.objectType, { where: subset.objectType === "ObjectType" && convertStorageMetaNameQuery(subset.query).type !== "getBatch" || subset.objectType === "LinkType" || subset.objectType === "ValueType" ? void 0 : subset.query?.where }),
|
|
65
|
+
fetchedRows: values.length,
|
|
66
|
+
rows: yield* Effect.try({
|
|
67
|
+
try: () => values.map((value) => ({
|
|
68
|
+
key: Schema.decodeUnknownSync(Schema.Union([Schema.String, Schema.Finite]))(value[type.primaryKey]),
|
|
69
|
+
value
|
|
70
|
+
})),
|
|
71
|
+
catch: (cause) => new BackendError({
|
|
72
|
+
operation: "metadata.decode",
|
|
73
|
+
kind: "InvalidResponse",
|
|
74
|
+
message: "Salesforce returned invalid metadata.",
|
|
75
|
+
retryable: false,
|
|
76
|
+
cause: Redacted.make(cause)
|
|
77
|
+
})
|
|
78
|
+
})
|
|
79
|
+
};
|
|
80
|
+
})
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
export { makeSalesforceMetadataBackend };
|
|
85
|
+
|
|
86
|
+
//# sourceMappingURL=backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.js","names":[],"sources":["../../src/meta/backend.ts"],"sourcesContent":["import { makeOntologyBackend } from \"@party-stack/ontology-backend\";\nimport {\n BackendError,\n classifyBackendFailure,\n type OntologyBackendService,\n} from \"@party-stack/ontology-backend\";\nimport { compileObjectSubset, objectSubset } from \"@party-stack/ontology-backend/subset\";\nimport metaOntology from \"@party-stack/ontology-spec/meta\";\nimport { Effect, Redacted, Schema } from \"effect\";\nimport { convertSalesforceMetaLinkTypes } from \"./convertMetaLinkType.js\";\nimport { convertStorageMetaNameQuery } from \"./convertMetaLoadSubsetOptions.js\";\nimport { convertSalesforceMetaObjectType } from \"./convertMetaObjectType.js\";\nimport { loadSalesforceActionTypes } from \"./loadActions.js\";\nimport { describeSObjects } from \"./loadEntities.js\";\nimport { loadSalesforceQueryFunctionTypes } from \"./loadQueryFunctions.js\";\nimport type { SalesforceCrudActionTypeSelection } from \"../crud.js\";\nimport type { SalesforceClient } from \"@party-stack/salesforce-client\";\nexport interface SalesforceMetadataBackendOptions {\n client: SalesforceClient;\n /**\n * Optional allowlist of sObject API names for metadata loading.\n * Useful for scoped form pulls without describing the entire org.\n */\n objectTypeNames?: string[];\n /** Optional allowlist of autolaunched Flow API names. */\n flowActionTypeNames?: string[];\n /** Standard Salesforce operations modeled as mutating actions. */\n standardActionTypeNames?: string[];\n /** Standard Salesforce operations modeled as query functions. */\n standardQueryFunctionTypeNames?: string[];\n /** Explicit CRUD actions to synthesize from sObject describe metadata. */\n crudActionTypes?: readonly SalesforceCrudActionTypeSelection[];\n}\n\nimport type { ObjectSubset } from \"@party-stack/ontology-spec/query\";\n\nconst failure = (cause: unknown) => classifyBackendFailure(\"metadata.load\", cause);\nexport function makeSalesforceMetadataBackend(\n options: SalesforceMetadataBackendOptions\n): OntologyBackendService {\n const unsupported = (operation: string) =>\n Effect.fail(\n new BackendError({\n operation,\n kind: \"NotImplemented\",\n message: \"Metadata is read-only.\",\n retryable: false,\n })\n );\n return makeOntologyBackend({\n ir: metaOntology,\n name: \"salesforce-metadata\",\n sourceId: `salesforce-metadata:${options.client.instanceUrl}`,\n supportsIdempotency: false,\n applyAction: () => unsupported(\"applyAction\"),\n queryFunction: () => unsupported(\"queryFunction\"),\n loadSubset: Effect.fn(\"SalesforceMetadata.loadSubset\")(function* (request: ObjectSubset) {\n const subset = yield* compileObjectSubset(metaOntology, request, undefined);\n const type = metaOntology.objectTypes.find((type) => type.name === subset.objectType);\n if (!type)\n return yield* new BackendError({\n operation: \"loadSubset\",\n kind: \"InvalidRequest\",\n message: \"Unknown metadata object type.\",\n retryable: false,\n });\n if (subset.objectType === \"Ontology\")\n return {\n complete: true,\n rows: [{ key: \"ontology\", value: { id: \"ontology\" } }],\n fulfilledSubset: objectSubset(\"Ontology\"),\n };\n const values = yield* Effect.tryPromise({\n try: async (signal) => {\n const client = options.client.withSignal?.(signal) ?? options.client;\n const opts = { ...options, client };\n const query = convertStorageMetaNameQuery(subset.query);\n if (subset.objectType === \"ValueType\") return [];\n // Windowing belongs after full predicate evaluation, never before residual filtering.\n if (subset.objectType === \"ActionType\") return loadSalesforceActionTypes(opts, query);\n if (subset.objectType === \"QueryFunctionType\")\n return loadSalesforceQueryFunctionTypes(opts, query);\n const allowlist = options.objectTypeNames ? new Set(options.objectTypeNames) : undefined;\n const names =\n subset.objectType === \"ObjectType\" && query.type === \"getBatch\"\n ? query.names.filter((name) => !allowlist || allowlist.has(name))\n : (options.objectTypeNames ??\n (await client.describeGlobal()).sobjects\n .filter((type) => type.queryable)\n .map((type) => type.name));\n const describes = await describeSObjects(client, names);\n return subset.objectType === \"ObjectType\"\n ? describes.map(convertSalesforceMetaObjectType)\n : convertSalesforceMetaLinkTypes(describes);\n },\n catch: failure,\n });\n return {\n complete: true,\n fulfilledSubset: objectSubset(subset.objectType, {\n where:\n (subset.objectType === \"ObjectType\" &&\n convertStorageMetaNameQuery(subset.query).type !== \"getBatch\") ||\n subset.objectType === \"LinkType\" ||\n subset.objectType === \"ValueType\"\n ? undefined\n : subset.query?.where,\n }),\n fetchedRows: values.length,\n rows: yield* Effect.try({\n try: () =>\n values.map((value) => ({\n key: Schema.decodeUnknownSync(Schema.Union([Schema.String, Schema.Finite]))(\n (value as unknown as Record<string, unknown>)[type.primaryKey]\n ),\n value: value as unknown as Record<string, unknown>,\n })),\n catch: (cause) =>\n new BackendError({\n operation: \"metadata.decode\",\n kind: \"InvalidResponse\",\n message: \"Salesforce returned invalid metadata.\",\n retryable: false,\n cause: Redacted.make(cause),\n }),\n }),\n };\n }),\n });\n}\n"],"mappings":";;;;;;;;;;;AAoCA,MAAM,WAAW,UAAmB,uBAAuB,iBAAiB,KAAK;AACjF,SAAgB,8BACZ,SACsB;CACtB,MAAM,eAAe,cACjB,OAAO,KACH,IAAI,aAAa;EACb;EACA,MAAM;EACN,SAAS;EACT,WAAW;CACf,CAAC,CACL;CACJ,OAAO,oBAAoB;EACvB,IAAI;EACJ,MAAM;EACN,UAAU,uBAAuB,QAAQ,OAAO;EAChD,qBAAqB;EACrB,mBAAmB,YAAY,aAAa;EAC5C,qBAAqB,YAAY,eAAe;EAChD,YAAY,OAAO,GAAG,+BAA+B,CAAC,CAAC,WAAW,SAAuB;GACrF,MAAM,SAAS,OAAO,oBAAoB,cAAc,SAAS,KAAA,CAAS;GAC1E,MAAM,OAAO,aAAa,YAAY,MAAM,SAAS,KAAK,SAAS,OAAO,UAAU;GACpF,IAAI,CAAC,MACD,OAAO,OAAO,IAAI,aAAa;IAC3B,WAAW;IACX,MAAM;IACN,SAAS;IACT,WAAW;GACf,CAAC;GACL,IAAI,OAAO,eAAe,YACtB,OAAO;IACH,UAAU;IACV,MAAM,CAAC;KAAE,KAAK;KAAY,OAAO,EAAE,IAAI,WAAW;IAAE,CAAC;IACrD,iBAAiB,aAAa,UAAU;GAC5C;GACJ,MAAM,SAAS,OAAO,OAAO,WAAW;IACpC,KAAK,OAAO,WAAW;KACnB,MAAM,SAAS,QAAQ,OAAO,aAAa,MAAM,KAAK,QAAQ;KAC9D,MAAM,OAAO;MAAE,GAAG;MAAS;KAAO;KAClC,MAAM,QAAQ,4BAA4B,OAAO,KAAK;KACtD,IAAI,OAAO,eAAe,aAAa,OAAO,CAAC;KAE/C,IAAI,OAAO,eAAe,cAAc,OAAO,0BAA0B,MAAM,KAAK;KACpF,IAAI,OAAO,eAAe,qBACtB,OAAO,iCAAiC,MAAM,KAAK;KACvD,MAAM,YAAY,QAAQ,kBAAkB,IAAI,IAAI,QAAQ,eAAe,IAAI,KAAA;KAC/E,MAAM,QACF,OAAO,eAAe,gBAAgB,MAAM,SAAS,aAC/C,MAAM,MAAM,QAAQ,SAAS,CAAC,aAAa,UAAU,IAAI,IAAI,CAAC,IAC7D,QAAQ,oBACR,MAAM,OAAO,eAAe,EAAA,CAAG,SAC3B,QAAQ,SAAS,KAAK,SAAS,CAAC,CAChC,KAAK,SAAS,KAAK,IAAI;KACtC,MAAM,YAAY,MAAM,iBAAiB,QAAQ,KAAK;KACtD,OAAO,OAAO,eAAe,eACvB,UAAU,IAAI,+BAA+B,IAC7C,+BAA+B,SAAS;IAClD;IACA,OAAO;GACX,CAAC;GACD,OAAO;IACH,UAAU;IACV,iBAAiB,aAAa,OAAO,YAAY,EAC7C,OACK,OAAO,eAAe,gBACnB,4BAA4B,OAAO,KAAK,CAAC,CAAC,SAAS,cACvD,OAAO,eAAe,cACtB,OAAO,eAAe,cAChB,KAAA,IACA,OAAO,OAAO,MAC5B,CAAC;IACD,aAAa,OAAO;IACpB,MAAM,OAAO,OAAO,IAAI;KACpB,WACI,OAAO,KAAK,WAAW;MACnB,KAAK,OAAO,kBAAkB,OAAO,MAAM,CAAC,OAAO,QAAQ,OAAO,MAAM,CAAC,CAAC,CAAC,CACtE,MAA6C,KAAK,WACvD;MACO;KACX,EAAE;KACN,QAAQ,UACJ,IAAI,aAAa;MACb,WAAW;MACX,MAAM;MACN,SAAS;MACT,WAAW;MACX,OAAO,SAAS,KAAK,KAAK;KAC9B,CAAC;IACT,CAAC;GACL;EACJ,CAAC;CACL,CAAC;AACL"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SalesforceInvocableActionDescribe, SalesforceSObjectDescribe } from "@party-stack/salesforce-client";
|
|
2
|
-
import {
|
|
2
|
+
import { ActionType } from "@party-stack/ontology-spec/meta";
|
|
3
3
|
//#region src/meta/convertMetaActionType.d.ts
|
|
4
|
-
export declare function convertSalesforceMetaActionType(describe: SalesforceInvocableActionDescribe, sObjectDescribes?: ReadonlyMap<string, SalesforceSObjectDescribe>):
|
|
5
|
-
export declare function convertSalesforceMetaStandardActionType(describe: SalesforceInvocableActionDescribe, sObjectDescribes?: ReadonlyMap<string, SalesforceSObjectDescribe>):
|
|
4
|
+
export declare function convertSalesforceMetaActionType(describe: SalesforceInvocableActionDescribe, sObjectDescribes?: ReadonlyMap<string, SalesforceSObjectDescribe>): ActionType;
|
|
5
|
+
export declare function convertSalesforceMetaStandardActionType(describe: SalesforceInvocableActionDescribe, sObjectDescribes?: ReadonlyMap<string, SalesforceSObjectDescribe>): ActionType;
|
|
6
6
|
//#endregion
|
|
7
7
|
//# sourceMappingURL=convertMetaActionType.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaActionType.d.ts","names":[],"sources":["../../src/meta/convertMetaActionType.ts"],"mappings":";;;wBAoDgB,gCACZ,UAAU,mCACV,mBAAkB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"convertMetaActionType.d.ts","names":["MetaActionType"],"sources":["../../src/meta/convertMetaActionType.ts"],"mappings":";;;wBAoDgB,gCACZ,UAAU,mCACV,mBAAkB,oBAAoB,6BACvCA;wBASa,wCACZ,UAAU,mCACV,mBAAkB,oBAAoB,6BACvCA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaActionType.js","names":[],"sources":["../../src/meta/convertMetaActionType.ts"],"sourcesContent":["import {\n fromSalesforceLightningIconName,\n getSalesforceActionIconName,\n} from \"@party-stack/icons-salesforce-lightning\";\nimport { salesforceActionMeta } from \"../actionMetadata.js\";\nimport {\n salesforceFlowActionTypeId,\n salesforceStandardActionTypeId,\n toOntologyActionTypeName,\n} from \"../utils/ids.js\";\nimport { convertSalesforceInvocableParameterType } from \"./convertMetaTypeDef.js\";\nimport type { MetaActionType } from \"@party-stack/ontology\";\nimport type {\n SalesforceInvocableActionDescribe,\n SalesforceSObjectDescribe,\n} from \"@party-stack/salesforce-client\";\n\n/**\n * Convert an autolaunched Flow describe into a Party Stack action type.\n * Local `logic` stays empty because execution remains native to Salesforce.\n */\nfunction convertSalesforceInvocableMetaActionType(\n describe: SalesforceInvocableActionDescribe,\n id: string,\n kind: \"flow\" | \"standard\",\n sObjectDescribes: ReadonlyMap<string, SalesforceSObjectDescribe> = new Map()\n): MetaActionType {\n return {\n id,\n meta: salesforceActionMeta({\n kind,\n apiName: describe.name,\n }),\n name: toOntologyActionTypeName(describe.name),\n displayName: describe.label ?? describe.name,\n description: describe.description,\n icon: fromSalesforceLightningIconName(getSalesforceActionIconName(describe.name)),\n parameters: (describe.inputs ?? []).map((parameter) => ({\n name: parameter.name,\n displayName: parameter.label ?? parameter.name,\n description: parameter.description,\n type: convertSalesforceInvocableParameterType(\n parameter,\n (parameter.sobjectType ?? parameter.sObjectType)\n ? sObjectDescribes.get((parameter.sobjectType ?? parameter.sObjectType)!)\n : undefined\n ),\n })),\n logic: [],\n };\n}\n\nexport function convertSalesforceMetaActionType(\n describe: SalesforceInvocableActionDescribe,\n sObjectDescribes: ReadonlyMap<string, SalesforceSObjectDescribe> = new Map()\n): MetaActionType {\n return convertSalesforceInvocableMetaActionType(\n describe,\n salesforceFlowActionTypeId(describe.name),\n \"flow\",\n sObjectDescribes\n );\n}\n\nexport function convertSalesforceMetaStandardActionType(\n describe: SalesforceInvocableActionDescribe,\n sObjectDescribes: ReadonlyMap<string, SalesforceSObjectDescribe> = new Map()\n): MetaActionType {\n return convertSalesforceInvocableMetaActionType(\n describe,\n salesforceStandardActionTypeId(describe.name),\n \"standard\",\n sObjectDescribes\n );\n}\n"],"mappings":";;;;;;;;;AAqBA,SAAS,yCACL,UACA,IACA,MACA,mCAAmE,IAAI,IAAI,GAC7D;CACd,OAAO;EACH;EACA,MAAM,qBAAqB;GACvB;GACA,SAAS,SAAS;EACtB,CAAC;EACD,MAAM,yBAAyB,SAAS,IAAI;EAC5C,aAAa,SAAS,SAAS,SAAS;EACxC,aAAa,SAAS;EACtB,MAAM,gCAAgC,4BAA4B,SAAS,IAAI,CAAC;EAChF,aAAa,SAAS,UAAU,CAAC,EAAA,CAAG,KAAK,eAAe;GACpD,MAAM,UAAU;GAChB,aAAa,UAAU,SAAS,UAAU;GAC1C,aAAa,UAAU;GACvB,MAAM,wCACF,WACC,UAAU,eAAe,UAAU,cAC9B,iBAAiB,IAAK,UAAU,eAAe,UAAU,WAAa,IACtE,KAAA,CACV;EACJ,EAAE;EACF,OAAO,CAAC;CACZ;AACJ;AAEA,SAAgB,gCACZ,UACA,mCAAmE,IAAI,IAAI,GAC7D;CACd,OAAO,yCACH,UACA,2BAA2B,SAAS,IAAI,GACxC,QACA,gBACJ;AACJ;AAEA,SAAgB,wCACZ,UACA,mCAAmE,IAAI,IAAI,GAC7D;CACd,OAAO,yCACH,UACA,+BAA+B,SAAS,IAAI,GAC5C,YACA,gBACJ;AACJ"}
|
|
1
|
+
{"version":3,"file":"convertMetaActionType.js","names":[],"sources":["../../src/meta/convertMetaActionType.ts"],"sourcesContent":["import {\n fromSalesforceLightningIconName,\n getSalesforceActionIconName,\n} from \"@party-stack/icons-salesforce-lightning\";\nimport { salesforceActionMeta } from \"../actionMetadata.js\";\nimport {\n salesforceFlowActionTypeId,\n salesforceStandardActionTypeId,\n toOntologyActionTypeName,\n} from \"../utils/ids.js\";\nimport { convertSalesforceInvocableParameterType } from \"./convertMetaTypeDef.js\";\nimport type { ActionType as MetaActionType } from \"@party-stack/ontology-spec/meta\";\nimport type {\n SalesforceInvocableActionDescribe,\n SalesforceSObjectDescribe,\n} from \"@party-stack/salesforce-client\";\n\n/**\n * Convert an autolaunched Flow describe into a Party Stack action type.\n * Local `logic` stays empty because execution remains native to Salesforce.\n */\nfunction convertSalesforceInvocableMetaActionType(\n describe: SalesforceInvocableActionDescribe,\n id: string,\n kind: \"flow\" | \"standard\",\n sObjectDescribes: ReadonlyMap<string, SalesforceSObjectDescribe> = new Map()\n): MetaActionType {\n return {\n id,\n meta: salesforceActionMeta({\n kind,\n apiName: describe.name,\n }),\n name: toOntologyActionTypeName(describe.name),\n displayName: describe.label ?? describe.name,\n description: describe.description,\n icon: fromSalesforceLightningIconName(getSalesforceActionIconName(describe.name)),\n parameters: (describe.inputs ?? []).map((parameter) => ({\n name: parameter.name,\n displayName: parameter.label ?? parameter.name,\n description: parameter.description,\n type: convertSalesforceInvocableParameterType(\n parameter,\n (parameter.sobjectType ?? parameter.sObjectType)\n ? sObjectDescribes.get((parameter.sobjectType ?? parameter.sObjectType)!)\n : undefined\n ),\n })),\n logic: [],\n };\n}\n\nexport function convertSalesforceMetaActionType(\n describe: SalesforceInvocableActionDescribe,\n sObjectDescribes: ReadonlyMap<string, SalesforceSObjectDescribe> = new Map()\n): MetaActionType {\n return convertSalesforceInvocableMetaActionType(\n describe,\n salesforceFlowActionTypeId(describe.name),\n \"flow\",\n sObjectDescribes\n );\n}\n\nexport function convertSalesforceMetaStandardActionType(\n describe: SalesforceInvocableActionDescribe,\n sObjectDescribes: ReadonlyMap<string, SalesforceSObjectDescribe> = new Map()\n): MetaActionType {\n return convertSalesforceInvocableMetaActionType(\n describe,\n salesforceStandardActionTypeId(describe.name),\n \"standard\",\n sObjectDescribes\n );\n}\n"],"mappings":";;;;;;;;;AAqBA,SAAS,yCACL,UACA,IACA,MACA,mCAAmE,IAAI,IAAI,GAC7D;CACd,OAAO;EACH;EACA,MAAM,qBAAqB;GACvB;GACA,SAAS,SAAS;EACtB,CAAC;EACD,MAAM,yBAAyB,SAAS,IAAI;EAC5C,aAAa,SAAS,SAAS,SAAS;EACxC,aAAa,SAAS;EACtB,MAAM,gCAAgC,4BAA4B,SAAS,IAAI,CAAC;EAChF,aAAa,SAAS,UAAU,CAAC,EAAA,CAAG,KAAK,eAAe;GACpD,MAAM,UAAU;GAChB,aAAa,UAAU,SAAS,UAAU;GAC1C,aAAa,UAAU;GACvB,MAAM,wCACF,WACC,UAAU,eAAe,UAAU,cAC9B,iBAAiB,IAAK,UAAU,eAAe,UAAU,WAAa,IACtE,KAAA,CACV;EACJ,EAAE;EACF,OAAO,CAAC;CACZ;AACJ;AAEA,SAAgB,gCACZ,UACA,mCAAmE,IAAI,IAAI,GAC7D;CACd,OAAO,yCACH,UACA,2BAA2B,SAAS,IAAI,GACxC,QACA,gBACJ;AACJ;AAEA,SAAgB,wCACZ,UACA,mCAAmE,IAAI,IAAI,GAC7D;CACd,OAAO,yCACH,UACA,+BAA+B,SAAS,IAAI,GAC5C,YACA,gBACJ;AACJ"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { SalesforceSObjectDescribe } from "@party-stack/salesforce-client";
|
|
2
|
-
import {
|
|
2
|
+
import { LinkType } from "@party-stack/ontology-spec/meta";
|
|
3
3
|
//#region src/meta/convertMetaLinkType.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Create Party Stack link types for single-target Salesforce reference fields.
|
|
6
6
|
* Polymorphic references (multiple referenceTo values) are intentionally omitted
|
|
7
7
|
* and remain scalar ID properties on the source object.
|
|
8
8
|
*/
|
|
9
|
-
export declare function convertSalesforceMetaLinkTypes(describes: SalesforceSObjectDescribe[]):
|
|
9
|
+
export declare function convertSalesforceMetaLinkTypes(describes: SalesforceSObjectDescribe[]): LinkType[];
|
|
10
10
|
//#endregion
|
|
11
11
|
//# sourceMappingURL=convertMetaLinkType.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaLinkType.d.ts","names":[],"sources":["../../src/meta/convertMetaLinkType.ts"],"mappings":";;;;;;;;wBASgB,+BAA+B,WAAW,
|
|
1
|
+
{"version":3,"file":"convertMetaLinkType.d.ts","names":["MetaLinkType"],"sources":["../../src/meta/convertMetaLinkType.ts"],"mappings":";;;;;;;;wBASgB,+BAA+B,WAAW,8BAA8BA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaLinkType.js","names":[],"sources":["../../src/meta/convertMetaLinkType.ts"],"sourcesContent":["import { salesforceLinkTypeId } from \"../utils/ids.js\";\nimport type { MetaLinkType } from \"@party-stack/ontology\";\nimport type { SalesforceFieldDescribe, SalesforceSObjectDescribe } from \"@party-stack/salesforce-client\";\n\n/**\n * Create Party Stack link types for single-target Salesforce reference fields.\n * Polymorphic references (multiple referenceTo values) are intentionally omitted\n * and remain scalar ID properties on the source object.\n */\nexport function convertSalesforceMetaLinkTypes(describes: SalesforceSObjectDescribe[]): MetaLinkType[] {\n const links: MetaLinkType[] = [];\n\n for (const describe of describes) {\n for (const field of describe.fields) {\n const link = convertReferenceFieldToLink(describe.name, field);\n if (link) {\n links.push(link);\n }\n }\n }\n\n return links;\n}\n\nfunction convertReferenceFieldToLink(\n sourceObjectType: string,\n field: SalesforceFieldDescribe\n): MetaLinkType | null {\n if (field.type !== \"reference\") {\n return null;\n }\n const referenceTo = field.referenceTo ?? [];\n if (referenceTo.length !== 1) {\n return null;\n }\n\n const targetObjectType = referenceTo[0]!;\n const relationshipName = field.relationshipName ?? `${field.name.replace(/Id$/, \"\")}`;\n const inverseName = `${camelCaseSafe(sourceObjectType)}s`;\n\n return {\n id: salesforceLinkTypeId(sourceObjectType, field.name),\n source: {\n objectType: sourceObjectType,\n name: inverseName,\n displayName: `${describeLabel(sourceObjectType)}s`,\n },\n target: {\n objectType: targetObjectType,\n name: relationshipName,\n displayName: field.label || relationshipName,\n },\n foreignKey: field.name,\n // A reference field on the source points to one target.\n cardinality: \"many\",\n };\n}\n\nfunction camelCaseSafe(value: string): string {\n if (!value) return value;\n return value.charAt(0).toLowerCase() + value.slice(1);\n}\n\nfunction describeLabel(value: string): string {\n return value.replace(/__/g, \" \").replace(/_/g, \" \");\n}\n"],"mappings":";;;;;;;AASA,SAAgB,+BAA+B,WAAwD;CACnG,MAAM,QAAwB,CAAC;CAE/B,KAAK,MAAM,YAAY,WACnB,KAAK,MAAM,SAAS,SAAS,QAAQ;EACjC,MAAM,OAAO,4BAA4B,SAAS,MAAM,KAAK;EAC7D,IAAI,MACA,MAAM,KAAK,IAAI;CAEvB;CAGJ,OAAO;AACX;AAEA,SAAS,4BACL,kBACA,OACmB;CACnB,IAAI,MAAM,SAAS,aACf,OAAO;CAEX,MAAM,cAAc,MAAM,eAAe,CAAC;CAC1C,IAAI,YAAY,WAAW,GACvB,OAAO;CAGX,MAAM,mBAAmB,YAAY;CACrC,MAAM,mBAAmB,MAAM,oBAAoB,GAAG,MAAM,KAAK,QAAQ,OAAO,EAAE;CAClF,MAAM,cAAc,GAAG,cAAc,gBAAgB,EAAE;CAEvD,OAAO;EACH,IAAI,qBAAqB,kBAAkB,MAAM,IAAI;EACrD,QAAQ;GACJ,YAAY;GACZ,MAAM;GACN,aAAa,GAAG,cAAc,gBAAgB,EAAE;EACpD;EACA,QAAQ;GACJ,YAAY;GACZ,MAAM;GACN,aAAa,MAAM,SAAS;EAChC;EACA,YAAY,MAAM;EAElB,aAAa;CACjB;AACJ;AAEA,SAAS,cAAc,OAAuB;CAC1C,IAAI,CAAC,OAAO,OAAO;CACnB,OAAO,MAAM,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,MAAM,MAAM,CAAC;AACxD;AAEA,SAAS,cAAc,OAAuB;CAC1C,OAAO,MAAM,QAAQ,OAAO,GAAG,CAAC,CAAC,QAAQ,MAAM,GAAG;AACtD"}
|
|
1
|
+
{"version":3,"file":"convertMetaLinkType.js","names":[],"sources":["../../src/meta/convertMetaLinkType.ts"],"sourcesContent":["import { salesforceLinkTypeId } from \"../utils/ids.js\";\nimport type { LinkType as MetaLinkType } from \"@party-stack/ontology-spec/meta\";\nimport type { SalesforceFieldDescribe, SalesforceSObjectDescribe } from \"@party-stack/salesforce-client\";\n\n/**\n * Create Party Stack link types for single-target Salesforce reference fields.\n * Polymorphic references (multiple referenceTo values) are intentionally omitted\n * and remain scalar ID properties on the source object.\n */\nexport function convertSalesforceMetaLinkTypes(describes: SalesforceSObjectDescribe[]): MetaLinkType[] {\n const links: MetaLinkType[] = [];\n\n for (const describe of describes) {\n for (const field of describe.fields) {\n const link = convertReferenceFieldToLink(describe.name, field);\n if (link) {\n links.push(link);\n }\n }\n }\n\n return links;\n}\n\nfunction convertReferenceFieldToLink(\n sourceObjectType: string,\n field: SalesforceFieldDescribe\n): MetaLinkType | null {\n if (field.type !== \"reference\") {\n return null;\n }\n const referenceTo = field.referenceTo ?? [];\n if (referenceTo.length !== 1) {\n return null;\n }\n\n const targetObjectType = referenceTo[0]!;\n const relationshipName = field.relationshipName ?? `${field.name.replace(/Id$/, \"\")}`;\n const inverseName = `${camelCaseSafe(sourceObjectType)}s`;\n\n return {\n id: salesforceLinkTypeId(sourceObjectType, field.name),\n source: {\n objectType: sourceObjectType,\n name: inverseName,\n displayName: `${describeLabel(sourceObjectType)}s`,\n },\n target: {\n objectType: targetObjectType,\n name: relationshipName,\n displayName: field.label || relationshipName,\n },\n foreignKey: field.name,\n // A reference field on the source points to one target.\n cardinality: \"many\",\n };\n}\n\nfunction camelCaseSafe(value: string): string {\n if (!value) return value;\n return value.charAt(0).toLowerCase() + value.slice(1);\n}\n\nfunction describeLabel(value: string): string {\n return value.replace(/__/g, \" \").replace(/_/g, \" \");\n}\n"],"mappings":";;;;;;;AASA,SAAgB,+BAA+B,WAAwD;CACnG,MAAM,QAAwB,CAAC;CAE/B,KAAK,MAAM,YAAY,WACnB,KAAK,MAAM,SAAS,SAAS,QAAQ;EACjC,MAAM,OAAO,4BAA4B,SAAS,MAAM,KAAK;EAC7D,IAAI,MACA,MAAM,KAAK,IAAI;CAEvB;CAGJ,OAAO;AACX;AAEA,SAAS,4BACL,kBACA,OACmB;CACnB,IAAI,MAAM,SAAS,aACf,OAAO;CAEX,MAAM,cAAc,MAAM,eAAe,CAAC;CAC1C,IAAI,YAAY,WAAW,GACvB,OAAO;CAGX,MAAM,mBAAmB,YAAY;CACrC,MAAM,mBAAmB,MAAM,oBAAoB,GAAG,MAAM,KAAK,QAAQ,OAAO,EAAE;CAClF,MAAM,cAAc,GAAG,cAAc,gBAAgB,EAAE;CAEvD,OAAO;EACH,IAAI,qBAAqB,kBAAkB,MAAM,IAAI;EACrD,QAAQ;GACJ,YAAY;GACZ,MAAM;GACN,aAAa,GAAG,cAAc,gBAAgB,EAAE;EACpD;EACA,QAAQ;GACJ,YAAY;GACZ,MAAM;GACN,aAAa,MAAM,SAAS;EAChC;EACA,YAAY,MAAM;EAElB,aAAa;CACjB;AACJ;AAEA,SAAS,cAAc,OAAuB;CAC1C,IAAI,CAAC,OAAO,OAAO;CACnB,OAAO,MAAM,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,MAAM,MAAM,CAAC;AACxD;AAEA,SAAS,cAAc,OAAuB;CAC1C,OAAO,MAAM,QAAQ,OAAO,GAAG,CAAC,CAAC,QAAQ,MAAM,GAAG;AACtD"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { LoadSubsetOptions } from "@tanstack/db";
|
|
2
1
|
//#region src/meta/convertMetaLoadSubsetOptions.d.ts
|
|
3
2
|
export type MetaNameQuery = {
|
|
4
3
|
type: "getBatch";
|
|
@@ -15,6 +14,7 @@ export declare function matchesMetaNameQuery(query: MetaNameQuery, value: {
|
|
|
15
14
|
name: string;
|
|
16
15
|
displayName: string;
|
|
17
16
|
}): boolean;
|
|
18
|
-
|
|
17
|
+
/** Native storage query candidate selection; the caller rechecks the entire predicate. */
|
|
18
|
+
export declare function convertStorageMetaNameQuery(query?: import("@party-stack/ontology-storage").Query): MetaNameQuery;
|
|
19
19
|
//#endregion
|
|
20
20
|
//# sourceMappingURL=convertMetaLoadSubsetOptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaLoadSubsetOptions.d.ts","names":[],"sources":["../../src/meta/convertMetaLoadSubsetOptions.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"convertMetaLoadSubsetOptions.d.ts","names":[],"sources":["../../src/meta/convertMetaLoadSubsetOptions.ts"],"mappings":";YAEY;EACJ;EAAkB;;EAEhB;EACA;EACA;EACA;;EAEF;;wBAEQ,qBACZ,OAAO,eACP;EACI;EACA;;;wBAUQ,4BACZ,gDAAgD,QACjD"}
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isField } from "@party-stack/ontology-storage/tables";
|
|
2
2
|
//#region src/meta/convertMetaLoadSubsetOptions.ts
|
|
3
3
|
function matchesMetaNameQuery(query, value) {
|
|
4
4
|
if (query.type !== "search") return true;
|
|
5
5
|
const expression = query.pattern.replace(/[|\\{}()[\]^$+*?.-]/g, "\\$&").replaceAll("%", ".*").replaceAll("_", ".");
|
|
6
6
|
return new RegExp(`^${expression}$`, query.caseInsensitive ? "i" : void 0).test(value[query.field]);
|
|
7
7
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
/** Native storage query candidate selection; the caller rechecks the entire predicate. */
|
|
9
|
+
function convertStorageMetaNameQuery(query) {
|
|
10
|
+
const visit = (predicate) => {
|
|
11
|
+
if (!predicate) return { type: "list" };
|
|
12
|
+
if (predicate.op === "eq") {
|
|
13
|
+
const field = isField(predicate.left) ? predicate.left : predicate.right;
|
|
14
|
+
const value = field === predicate.left ? predicate.right : predicate.left;
|
|
15
|
+
if (isField(field) && field.path.join(".") === "name" && typeof value === "string") return {
|
|
13
16
|
type: "getBatch",
|
|
14
|
-
names: [
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
+
names: [value]
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (predicate.op === "in" && isField(predicate.left) && predicate.left.path.join(".") === "name" && predicate.values.every((value) => typeof value === "string")) return {
|
|
21
|
+
type: "getBatch",
|
|
22
|
+
names: [...predicate.values]
|
|
23
|
+
};
|
|
24
|
+
if ((predicate.op === "like" || predicate.op === "ilike") && isField(predicate.left) && predicate.left.path.join(".") === "name" && typeof predicate.right === "string") return {
|
|
25
|
+
type: "search",
|
|
26
|
+
field: "name",
|
|
27
|
+
pattern: predicate.right,
|
|
28
|
+
caseInsensitive: predicate.op === "ilike"
|
|
29
|
+
};
|
|
30
|
+
if (predicate.op === "and") return predicate.predicates.map(visit).find((child) => child.type === "getBatch") ?? { type: "list" };
|
|
31
|
+
if (predicate.op === "or") {
|
|
32
|
+
const children = predicate.predicates.map(visit);
|
|
33
|
+
if (children.every((child) => child.type === "getBatch")) return {
|
|
17
34
|
type: "getBatch",
|
|
18
|
-
names:
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
field: name,
|
|
25
|
-
pattern,
|
|
26
|
-
caseInsensitive: false
|
|
27
|
-
} : void 0;
|
|
28
|
-
},
|
|
29
|
-
ilike: (field, pattern) => {
|
|
30
|
-
const name = field.join(".");
|
|
31
|
-
return name === "name" || name === "displayName" ? {
|
|
32
|
-
type: "search",
|
|
33
|
-
field: name,
|
|
34
|
-
pattern,
|
|
35
|
-
caseInsensitive: true
|
|
36
|
-
} : void 0;
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
onUnknownOperator: () => void 0
|
|
40
|
-
}) ?? void 0 ?? { type: "list" };
|
|
35
|
+
names: [...new Set(children.flatMap((child) => child.names))]
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return { type: "list" };
|
|
39
|
+
};
|
|
40
|
+
return visit(query?.where);
|
|
41
41
|
}
|
|
42
42
|
//#endregion
|
|
43
|
-
export {
|
|
43
|
+
export { convertStorageMetaNameQuery, matchesMetaNameQuery };
|
|
44
44
|
|
|
45
45
|
//# sourceMappingURL=convertMetaLoadSubsetOptions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaLoadSubsetOptions.js","names":[],"sources":["../../src/meta/convertMetaLoadSubsetOptions.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"convertMetaLoadSubsetOptions.js","names":[],"sources":["../../src/meta/convertMetaLoadSubsetOptions.ts"],"sourcesContent":["import { isField } from \"@party-stack/ontology-storage/tables\";\n\nexport type MetaNameQuery =\n | { type: \"getBatch\"; names: string[] }\n | {\n type: \"search\";\n field: \"name\" | \"displayName\";\n pattern: string;\n caseInsensitive: boolean;\n }\n | { type: \"list\" };\n\nexport function matchesMetaNameQuery(\n query: MetaNameQuery,\n value: {\n name: string;\n displayName: string;\n }\n): boolean {\n if (query.type !== \"search\") return true;\n const escaped = query.pattern.replace(/[|\\\\{}()[\\]^$+*?.-]/g, \"\\\\$&\");\n const expression = escaped.replaceAll(\"%\", \".*\").replaceAll(\"_\", \".\");\n return new RegExp(`^${expression}$`, query.caseInsensitive ? \"i\" : undefined).test(value[query.field]);\n}\n\n/** Native storage query candidate selection; the caller rechecks the entire predicate. */\nexport function convertStorageMetaNameQuery(\n query?: import(\"@party-stack/ontology-storage\").Query\n): MetaNameQuery {\n const visit = (predicate?: import(\"@party-stack/ontology-storage\").Predicate): MetaNameQuery => {\n if (!predicate) return { type: \"list\" };\n if (predicate.op === \"eq\") {\n const field = isField(predicate.left) ? predicate.left : predicate.right;\n const value = field === predicate.left ? predicate.right : predicate.left;\n if (isField(field) && field.path.join(\".\") === \"name\" && typeof value === \"string\")\n return { type: \"getBatch\", names: [value] };\n }\n if (\n predicate.op === \"in\" &&\n isField(predicate.left) &&\n predicate.left.path.join(\".\") === \"name\" &&\n predicate.values.every((value) => typeof value === \"string\")\n )\n return { type: \"getBatch\", names: [...predicate.values] as string[] };\n if (\n (predicate.op === \"like\" || predicate.op === \"ilike\") &&\n isField(predicate.left) &&\n predicate.left.path.join(\".\") === \"name\" &&\n typeof predicate.right === \"string\"\n )\n return {\n type: \"search\",\n field: \"name\",\n pattern: predicate.right,\n caseInsensitive: predicate.op === \"ilike\",\n };\n if (predicate.op === \"and\")\n return (\n predicate.predicates.map(visit).find((child) => child.type === \"getBatch\") ?? { type: \"list\" }\n );\n if (predicate.op === \"or\") {\n const children = predicate.predicates.map(visit);\n if (children.every((child) => child.type === \"getBatch\"))\n return { type: \"getBatch\", names: [...new Set(children.flatMap((child) => child.names))] };\n }\n return { type: \"list\" };\n };\n return visit(query?.where);\n}\n"],"mappings":";;AAYA,SAAgB,qBACZ,OACA,OAIO;CACP,IAAI,MAAM,SAAS,UAAU,OAAO;CAEpC,MAAM,aADU,MAAM,QAAQ,QAAQ,wBAAwB,MACrC,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,WAAW,KAAK,GAAG;CACpE,OAAO,IAAI,OAAO,IAAI,WAAW,IAAI,MAAM,kBAAkB,MAAM,KAAA,CAAS,CAAC,CAAC,KAAK,MAAM,MAAM,MAAM;AACzG;;AAGA,SAAgB,4BACZ,OACa;CACb,MAAM,SAAS,cAAiF;EAC5F,IAAI,CAAC,WAAW,OAAO,EAAE,MAAM,OAAO;EACtC,IAAI,UAAU,OAAO,MAAM;GACvB,MAAM,QAAQ,QAAQ,UAAU,IAAI,IAAI,UAAU,OAAO,UAAU;GACnE,MAAM,QAAQ,UAAU,UAAU,OAAO,UAAU,QAAQ,UAAU;GACrE,IAAI,QAAQ,KAAK,KAAK,MAAM,KAAK,KAAK,GAAG,MAAM,UAAU,OAAO,UAAU,UACtE,OAAO;IAAE,MAAM;IAAY,OAAO,CAAC,KAAK;GAAE;EAClD;EACA,IACI,UAAU,OAAO,QACjB,QAAQ,UAAU,IAAI,KACtB,UAAU,KAAK,KAAK,KAAK,GAAG,MAAM,UAClC,UAAU,OAAO,OAAO,UAAU,OAAO,UAAU,QAAQ,GAE3D,OAAO;GAAE,MAAM;GAAY,OAAO,CAAC,GAAG,UAAU,MAAM;EAAc;EACxE,KACK,UAAU,OAAO,UAAU,UAAU,OAAO,YAC7C,QAAQ,UAAU,IAAI,KACtB,UAAU,KAAK,KAAK,KAAK,GAAG,MAAM,UAClC,OAAO,UAAU,UAAU,UAE3B,OAAO;GACH,MAAM;GACN,OAAO;GACP,SAAS,UAAU;GACnB,iBAAiB,UAAU,OAAO;EACtC;EACJ,IAAI,UAAU,OAAO,OACjB,OACI,UAAU,WAAW,IAAI,KAAK,CAAC,CAAC,MAAM,UAAU,MAAM,SAAS,UAAU,KAAK,EAAE,MAAM,OAAO;EAErG,IAAI,UAAU,OAAO,MAAM;GACvB,MAAM,WAAW,UAAU,WAAW,IAAI,KAAK;GAC/C,IAAI,SAAS,OAAO,UAAU,MAAM,SAAS,UAAU,GACnD,OAAO;IAAE,MAAM;IAAY,OAAO,CAAC,GAAG,IAAI,IAAI,SAAS,SAAS,UAAU,MAAM,KAAK,CAAC,CAAC;GAAE;EACjG;EACA,OAAO,EAAE,MAAM,OAAO;CAC1B;CACA,OAAO,MAAM,OAAO,KAAK;AAC7B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SalesforceSObjectDescribe } from "@party-stack/salesforce-client";
|
|
2
|
-
import {
|
|
2
|
+
import { ObjectType } from "@party-stack/ontology-spec/meta";
|
|
3
3
|
//#region src/meta/convertMetaObjectType.d.ts
|
|
4
|
-
export declare function convertSalesforceMetaObjectType(describe: SalesforceSObjectDescribe):
|
|
4
|
+
export declare function convertSalesforceMetaObjectType(describe: SalesforceSObjectDescribe): ObjectType;
|
|
5
5
|
//#endregion
|
|
6
6
|
//# sourceMappingURL=convertMetaObjectType.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaObjectType.d.ts","names":[],"sources":["../../src/meta/convertMetaObjectType.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"convertMetaObjectType.d.ts","names":["MetaObjectType"],"sources":["../../src/meta/convertMetaObjectType.ts"],"mappings":";;;wBAqCgB,gCAAgC,UAAU,4BAA4BA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaObjectType.js","names":[],"sources":["../../src/meta/convertMetaObjectType.ts"],"sourcesContent":["import {\n fromSalesforceLightningIconName,\n getSalesforceObjectIconName,\n} from \"@party-stack/icons-salesforce-lightning\";\nimport { salesforceObjectTypeId, salesforcePropertyId } from \"../utils/ids.js\";\nimport { convertSalesforceFieldType } from \"./convertMetaTypeDef.js\";\nimport type { MetaObjectProperty
|
|
1
|
+
{"version":3,"file":"convertMetaObjectType.js","names":[],"sources":["../../src/meta/convertMetaObjectType.ts"],"sourcesContent":["import {\n fromSalesforceLightningIconName,\n getSalesforceObjectIconName,\n} from \"@party-stack/icons-salesforce-lightning\";\nimport { salesforceObjectTypeId, salesforcePropertyId } from \"../utils/ids.js\";\nimport { convertSalesforceFieldType } from \"./convertMetaTypeDef.js\";\nimport type {\n PropertyDef as MetaObjectProperty,\n ObjectType as MetaObjectType,\n} from \"@party-stack/ontology-spec/meta\";\nimport type { SalesforceFieldDescribe, SalesforceSObjectDescribe } from \"@party-stack/salesforce-client\";\n\nconst COMPOUND_PARENT_TYPES = new Set([\"address\", \"location\"]);\n\nfunction isQueryableField(field: SalesforceFieldDescribe): boolean {\n if (COMPOUND_PARENT_TYPES.has(field.type)) {\n // Parent compound fields are not selectable in SOQL; components are.\n return false;\n }\n return true;\n}\n\nfunction chooseTitleProperty(fields: SalesforceFieldDescribe[]): string | undefined {\n const preferred = [\"Name\", \"Subject\", \"Title\", \"Label\", \"DeveloperName\"];\n for (const name of preferred) {\n if (fields.some((field) => field.name === name && field.type !== \"reference\")) {\n return name;\n }\n }\n const firstString = fields.find(\n (field) =>\n field.name !== \"Id\" &&\n (field.type === \"string\" || field.type === \"textarea\" || field.type === \"picklist\")\n );\n return firstString?.name;\n}\n\nexport function convertSalesforceMetaObjectType(describe: SalesforceSObjectDescribe): MetaObjectType {\n const properties = describe.fields\n .filter(isQueryableField)\n .map((field) => convertSalesforceObjectProperty(describe.name, field));\n const sourceIconName = getSalesforceObjectIconName(describe.name, describe.custom === true);\n\n return {\n id: salesforceObjectTypeId(describe.name),\n name: describe.name,\n displayName: describe.label,\n pluralDisplayName: describe.labelPlural,\n primaryKey: \"Id\",\n title: chooseTitleProperty(describe.fields),\n icon: sourceIconName ? fromSalesforceLightningIconName(sourceIconName) : undefined,\n properties,\n };\n}\n\nfunction convertSalesforceObjectProperty(\n sObjectName: string,\n field: SalesforceFieldDescribe\n): MetaObjectProperty {\n return {\n id: salesforcePropertyId(sObjectName, field.name),\n name: field.name,\n displayName: field.label || field.name,\n description: field.inlineHelpText ?? undefined,\n type: convertSalesforceFieldType(field),\n };\n}\n"],"mappings":";;;;AAYA,MAAM,wCAAwB,IAAI,IAAI,CAAC,WAAW,UAAU,CAAC;AAE7D,SAAS,iBAAiB,OAAyC;CAC/D,IAAI,sBAAsB,IAAI,MAAM,IAAI,GAEpC,OAAO;CAEX,OAAO;AACX;AAEA,SAAS,oBAAoB,QAAuD;CAEhF,KAAK,MAAM,QAAQ;EADA;EAAQ;EAAW;EAAS;EAAS;CAC7B,GACvB,IAAI,OAAO,MAAM,UAAU,MAAM,SAAS,QAAQ,MAAM,SAAS,WAAW,GACxE,OAAO;CAQf,OALoB,OAAO,MACtB,UACG,MAAM,SAAS,SACd,MAAM,SAAS,YAAY,MAAM,SAAS,cAAc,MAAM,SAAS,WAE/D,CAAC,EAAE;AACxB;AAEA,SAAgB,gCAAgC,UAAqD;CACjG,MAAM,aAAa,SAAS,OACvB,OAAO,gBAAgB,CAAC,CACxB,KAAK,UAAU,gCAAgC,SAAS,MAAM,KAAK,CAAC;CACzE,MAAM,iBAAiB,4BAA4B,SAAS,MAAM,SAAS,WAAW,IAAI;CAE1F,OAAO;EACH,IAAI,uBAAuB,SAAS,IAAI;EACxC,MAAM,SAAS;EACf,aAAa,SAAS;EACtB,mBAAmB,SAAS;EAC5B,YAAY;EACZ,OAAO,oBAAoB,SAAS,MAAM;EAC1C,MAAM,iBAAiB,gCAAgC,cAAc,IAAI,KAAA;EACzE;CACJ;AACJ;AAEA,SAAS,gCACL,aACA,OACkB;CAClB,OAAO;EACH,IAAI,qBAAqB,aAAa,MAAM,IAAI;EAChD,MAAM,MAAM;EACZ,aAAa,MAAM,SAAS,MAAM;EAClC,aAAa,MAAM,kBAAkB,KAAA;EACrC,MAAM,2BAA2B,KAAK;CAC1C;AACJ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SalesforceInvocableActionDescribe, SalesforceSObjectDescribe } from "@party-stack/salesforce-client";
|
|
2
|
-
import { QueryFunctionTypeDef } from "@party-stack/ontology";
|
|
2
|
+
import { QueryFunctionTypeDef } from "@party-stack/ontology-spec";
|
|
3
3
|
//#region src/meta/convertMetaQueryFunctionType.d.ts
|
|
4
4
|
export declare function convertSalesforceMetaStandardQueryFunctionType(describe: SalesforceInvocableActionDescribe, sObjectDescribes?: ReadonlyMap<string, SalesforceSObjectDescribe>): QueryFunctionTypeDef;
|
|
5
5
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaQueryFunctionType.js","names":[],"sources":["../../src/meta/convertMetaQueryFunctionType.ts"],"sourcesContent":["import { convertSalesforceInvocableParameterType } from \"./convertMetaTypeDef.js\";\nimport type { QueryFunctionTypeDef } from \"@party-stack/ontology\";\nimport type {\n SalesforceInvocableActionDescribe,\n SalesforceInvocableActionParameter,\n SalesforceSObjectDescribe,\n} from \"@party-stack/salesforce-client\";\n\nfunction sObjectDescribeFor(\n parameter: SalesforceInvocableActionParameter,\n describes: ReadonlyMap<string, SalesforceSObjectDescribe>\n): SalesforceSObjectDescribe | undefined {\n const name = parameter.sobjectType ?? parameter.sObjectType;\n return name ? describes.get(name) : undefined;\n}\n\nexport function convertSalesforceMetaStandardQueryFunctionType(\n describe: SalesforceInvocableActionDescribe,\n sObjectDescribes: ReadonlyMap<string, SalesforceSObjectDescribe> = new Map()\n): QueryFunctionTypeDef {\n return {\n name: describe.name,\n displayName: describe.label ?? describe.name,\n description: describe.description,\n parameters: (describe.inputs ?? []).map((parameter) => ({\n name: parameter.name,\n displayName: parameter.label ?? parameter.name,\n description: parameter.description,\n type: convertSalesforceInvocableParameterType(\n parameter,\n sObjectDescribeFor(parameter, sObjectDescribes)\n ),\n })),\n returnType: {\n kind: \"struct\",\n value: {\n fields: (describe.outputs ?? []).map((output) => ({\n name: output.name,\n displayName: output.label ?? output.name,\n description: output.description,\n type: convertSalesforceInvocableParameterType(\n output,\n sObjectDescribeFor(output, sObjectDescribes)\n ),\n })),\n },\n },\n };\n}\n"],"mappings":";;AAQA,SAAS,mBACL,WACA,WACqC;CACrC,MAAM,OAAO,UAAU,eAAe,UAAU;CAChD,OAAO,OAAO,UAAU,IAAI,IAAI,IAAI,KAAA;AACxC;AAEA,SAAgB,+CACZ,UACA,mCAAmE,IAAI,IAAI,GACvD;CACpB,OAAO;EACH,MAAM,SAAS;EACf,aAAa,SAAS,SAAS,SAAS;EACxC,aAAa,SAAS;EACtB,aAAa,SAAS,UAAU,CAAC,EAAA,CAAG,KAAK,eAAe;GACpD,MAAM,UAAU;GAChB,aAAa,UAAU,SAAS,UAAU;GAC1C,aAAa,UAAU;GACvB,MAAM,wCACF,WACA,mBAAmB,WAAW,gBAAgB,CAClD;EACJ,EAAE;EACF,YAAY;GACR,MAAM;GACN,OAAO,EACH,SAAS,SAAS,WAAW,CAAC,EAAA,CAAG,KAAK,YAAY;IAC9C,MAAM,OAAO;IACb,aAAa,OAAO,SAAS,OAAO;IACpC,aAAa,OAAO;IACpB,MAAM,wCACF,QACA,mBAAmB,QAAQ,gBAAgB,CAC/C;GACJ,EAAE,EACN;EACJ;CACJ;AACJ"}
|
|
1
|
+
{"version":3,"file":"convertMetaQueryFunctionType.js","names":[],"sources":["../../src/meta/convertMetaQueryFunctionType.ts"],"sourcesContent":["import { convertSalesforceInvocableParameterType } from \"./convertMetaTypeDef.js\";\nimport type { QueryFunctionTypeDef } from \"@party-stack/ontology-spec\";\nimport type {\n SalesforceInvocableActionDescribe,\n SalesforceInvocableActionParameter,\n SalesforceSObjectDescribe,\n} from \"@party-stack/salesforce-client\";\n\nfunction sObjectDescribeFor(\n parameter: SalesforceInvocableActionParameter,\n describes: ReadonlyMap<string, SalesforceSObjectDescribe>\n): SalesforceSObjectDescribe | undefined {\n const name = parameter.sobjectType ?? parameter.sObjectType;\n return name ? describes.get(name) : undefined;\n}\n\nexport function convertSalesforceMetaStandardQueryFunctionType(\n describe: SalesforceInvocableActionDescribe,\n sObjectDescribes: ReadonlyMap<string, SalesforceSObjectDescribe> = new Map()\n): QueryFunctionTypeDef {\n return {\n name: describe.name,\n displayName: describe.label ?? describe.name,\n description: describe.description,\n parameters: (describe.inputs ?? []).map((parameter) => ({\n name: parameter.name,\n displayName: parameter.label ?? parameter.name,\n description: parameter.description,\n type: convertSalesforceInvocableParameterType(\n parameter,\n sObjectDescribeFor(parameter, sObjectDescribes)\n ),\n })),\n returnType: {\n kind: \"struct\",\n value: {\n fields: (describe.outputs ?? []).map((output) => ({\n name: output.name,\n displayName: output.label ?? output.name,\n description: output.description,\n type: convertSalesforceInvocableParameterType(\n output,\n sObjectDescribeFor(output, sObjectDescribes)\n ),\n })),\n },\n },\n };\n}\n"],"mappings":";;AAQA,SAAS,mBACL,WACA,WACqC;CACrC,MAAM,OAAO,UAAU,eAAe,UAAU;CAChD,OAAO,OAAO,UAAU,IAAI,IAAI,IAAI,KAAA;AACxC;AAEA,SAAgB,+CACZ,UACA,mCAAmE,IAAI,IAAI,GACvD;CACpB,OAAO;EACH,MAAM,SAAS;EACf,aAAa,SAAS,SAAS,SAAS;EACxC,aAAa,SAAS;EACtB,aAAa,SAAS,UAAU,CAAC,EAAA,CAAG,KAAK,eAAe;GACpD,MAAM,UAAU;GAChB,aAAa,UAAU,SAAS,UAAU;GAC1C,aAAa,UAAU;GACvB,MAAM,wCACF,WACA,mBAAmB,WAAW,gBAAgB,CAClD;EACJ,EAAE;EACF,YAAY;GACR,MAAM;GACN,OAAO,EACH,SAAS,SAAS,WAAW,CAAC,EAAA,CAAG,KAAK,YAAY;IAC9C,MAAM,OAAO;IACb,aAAa,OAAO,SAAS,OAAO;IACpC,aAAa,OAAO;IACpB,MAAM,wCACF,QACA,mBAAmB,QAAQ,gBAAgB,CAC/C;GACJ,EAAE,EACN;EACJ;CACJ;AACJ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SalesforceFieldDescribe, SalesforcePicklistValue, SalesforceSObjectDescribe } from "@party-stack/salesforce-client";
|
|
2
|
-
import { TypeDef } from "@party-stack/ontology";
|
|
2
|
+
import { TypeDef } from "@party-stack/ontology-spec";
|
|
3
3
|
//#region src/meta/convertMetaTypeDef.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Convert a Salesforce field describe into a Party Stack TypeDef.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaTypeDef.js","names":[],"sources":["../../src/meta/convertMetaTypeDef.ts"],"sourcesContent":["import type { StringConstraint, TypeDef } from \"@party-stack/ontology\";\nimport type {\n Field,\n SalesforceFieldDescribe,\n SalesforcePicklistValue,\n SalesforceSObjectDescribe,\n} from \"@party-stack/salesforce-client\";\n\nfunction maybeOptional(type: TypeDef, nillable: boolean): TypeDef {\n return nillable && type.kind !== \"optional\" ? { kind: \"optional\", value: { type } } : type;\n}\n\nfunction asPicklistValues(values: Field[\"picklistValues\"] | null | undefined): SalesforcePicklistValue[] {\n if (!Array.isArray(values)) {\n return [];\n }\n return values;\n}\n\nfunction picklistConstraint(\n values: Field[\"picklistValues\"] | null | undefined\n): StringConstraint | undefined {\n const options = asPicklistValues(values)\n .filter((value) => value.active)\n .map((value) => ({\n value: value.value,\n label: value.label ?? undefined,\n }));\n return options.length > 0\n ? {\n kind: \"enum\",\n value: { options },\n }\n : undefined;\n}\n\n/**\n * Convert a Salesforce field describe into a Party Stack TypeDef.\n * Unsupported/compound provider-specific shapes become `unknown`.\n */\nexport function convertSalesforceFieldType(field: SalesforceFieldDescribe): TypeDef {\n const baseType = convertSalesforceSoapType(field);\n return maybeOptional(baseType, field.nillable && field.type !== \"id\" && field.name !== \"Id\");\n}\n\nfunction convertSalesforceSoapType(field: SalesforceFieldDescribe): TypeDef {\n switch (field.type) {\n case \"id\":\n case \"string\":\n case \"textarea\":\n case \"url\":\n case \"email\":\n case \"phone\":\n case \"encryptedstring\":\n case \"combobox\":\n case \"anyType\":\n return {\n kind: \"string\",\n value: {},\n };\n case \"picklist\":\n case \"multipicklist\": {\n const constraint = picklistConstraint(field.picklistValues);\n if (field.type === \"multipicklist\") {\n return {\n kind: \"list\",\n value: {\n elementType: {\n kind: \"string\",\n value: { constraint },\n },\n },\n };\n }\n return {\n kind: \"string\",\n value: { constraint },\n };\n }\n case \"boolean\":\n return { kind: \"boolean\", value: {} };\n case \"int\":\n case \"long\":\n return { kind: \"integer\", value: {} };\n case \"double\":\n case \"currency\":\n case \"percent\":\n return { kind: \"double\", value: {} };\n case \"date\":\n return { kind: \"date\", value: {} };\n case \"datetime\":\n return { kind: \"timestamp\", value: {} };\n case \"time\":\n // Party Stack has no dedicated time type yet.\n return { kind: \"string\", value: {} };\n case \"reference\": {\n const referenceTo = field.referenceTo ?? [];\n if (referenceTo.length === 1) {\n return {\n kind: \"objectReference\",\n value: { objectType: referenceTo[0]! },\n };\n }\n // Polymorphic references stay scalar until multi-target links exist.\n return { kind: \"string\", value: {} };\n }\n case \"location\":\n case \"address\":\n // Compound location/address fields are exposed as unknown; individual\n // latitude/longitude components appear as separate fields when available.\n return { kind: \"unknown\", value: {} };\n case \"base64\":\n case \"blob\":\n case \"complexvalue\":\n case \"json\":\n case \"datacategorygroupreference\":\n default:\n return { kind: \"unknown\", value: {} };\n }\n}\n\nexport function convertSalesforceInvocableParameterType(\n parameter: {\n type?: string | null;\n sobjectType?: string | null;\n sObjectType?: string | null;\n required?: boolean;\n maxOccurs?: number | null;\n picklistValues?: SalesforcePicklistValue[] | null;\n },\n sObjectDescribe?: SalesforceSObjectDescribe\n): TypeDef {\n const required = parameter.required === true;\n let baseType: TypeDef;\n const typeName = parameter.type?.toLowerCase() ?? \"unknown\";\n const sObjectType = parameter.sobjectType ?? parameter.sObjectType;\n if (typeName === \"sobject\" && sObjectType && sObjectDescribe) {\n baseType = {\n kind: \"struct\",\n value: {\n fields: sObjectDescribe.fields\n .filter((field) => field.type !== \"address\" && field.type !== \"location\")\n .map((field) => ({\n name: field.name,\n displayName: field.label || field.name,\n description: field.inlineHelpText ?? undefined,\n type: maybeOptional(convertSalesforceFieldType(field), true),\n })),\n },\n };\n } else if (sObjectType && (typeName === \"id\" || typeName === \"reference\")) {\n baseType = {\n kind: \"objectReference\",\n value: { objectType: sObjectType },\n };\n } else {\n switch (typeName) {\n case \"string\":\n case \"id\":\n case \"textarea\":\n case \"url\":\n case \"email\":\n case \"phone\":\n baseType = { kind: \"string\", value: {} };\n break;\n case \"picklist\":\n baseType = {\n kind: \"string\",\n value: {\n constraint: picklistConstraint(parameter.picklistValues),\n },\n };\n break;\n case \"boolean\":\n baseType = { kind: \"boolean\", value: {} };\n break;\n case \"integer\":\n case \"int\":\n case \"long\":\n baseType = { kind: \"integer\", value: {} };\n break;\n case \"double\":\n case \"currency\":\n case \"percent\":\n case \"number\":\n case \"decimal\":\n baseType = { kind: \"double\", value: {} };\n break;\n case \"date\":\n baseType = { kind: \"date\", value: {} };\n break;\n case \"datetime\":\n baseType = { kind: \"timestamp\", value: {} };\n break;\n case \"sobject\":\n baseType = { kind: \"unknown\", value: {} };\n break;\n case \"reference\":\n baseType = { kind: \"string\", value: {} };\n break;\n default:\n baseType = { kind: \"unknown\", value: {} };\n break;\n }\n }\n if (typeof parameter.maxOccurs === \"number\" && parameter.maxOccurs > 1) {\n baseType = {\n kind: \"list\",\n value: { elementType: baseType },\n };\n }\n return required ? baseType : { kind: \"optional\", value: { type: baseType } };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"convertMetaTypeDef.js","names":[],"sources":["../../src/meta/convertMetaTypeDef.ts"],"sourcesContent":["import type { StringConstraint, TypeDef } from \"@party-stack/ontology-spec\";\nimport type {\n Field,\n SalesforceFieldDescribe,\n SalesforcePicklistValue,\n SalesforceSObjectDescribe,\n} from \"@party-stack/salesforce-client\";\n\nfunction maybeOptional(type: TypeDef, nillable: boolean): TypeDef {\n return nillable && type.kind !== \"optional\" ? { kind: \"optional\", value: { type } } : type;\n}\n\nfunction asPicklistValues(values: Field[\"picklistValues\"] | null | undefined): SalesforcePicklistValue[] {\n if (!Array.isArray(values)) {\n return [];\n }\n return values;\n}\n\nfunction picklistConstraint(\n values: Field[\"picklistValues\"] | null | undefined\n): StringConstraint | undefined {\n const options = asPicklistValues(values)\n .filter((value) => value.active)\n .map((value) => ({\n value: value.value,\n label: value.label ?? undefined,\n }));\n return options.length > 0\n ? {\n kind: \"enum\",\n value: { options },\n }\n : undefined;\n}\n\n/**\n * Convert a Salesforce field describe into a Party Stack TypeDef.\n * Unsupported/compound provider-specific shapes become `unknown`.\n */\nexport function convertSalesforceFieldType(field: SalesforceFieldDescribe): TypeDef {\n const baseType = convertSalesforceSoapType(field);\n return maybeOptional(baseType, field.nillable && field.type !== \"id\" && field.name !== \"Id\");\n}\n\nfunction convertSalesforceSoapType(field: SalesforceFieldDescribe): TypeDef {\n switch (field.type) {\n case \"id\":\n case \"string\":\n case \"textarea\":\n case \"url\":\n case \"email\":\n case \"phone\":\n case \"encryptedstring\":\n case \"combobox\":\n case \"anyType\":\n return {\n kind: \"string\",\n value: {},\n };\n case \"picklist\":\n case \"multipicklist\": {\n const constraint = picklistConstraint(field.picklistValues);\n if (field.type === \"multipicklist\") {\n return {\n kind: \"list\",\n value: {\n elementType: {\n kind: \"string\",\n value: { constraint },\n },\n },\n };\n }\n return {\n kind: \"string\",\n value: { constraint },\n };\n }\n case \"boolean\":\n return { kind: \"boolean\", value: {} };\n case \"int\":\n case \"long\":\n return { kind: \"integer\", value: {} };\n case \"double\":\n case \"currency\":\n case \"percent\":\n return { kind: \"double\", value: {} };\n case \"date\":\n return { kind: \"date\", value: {} };\n case \"datetime\":\n return { kind: \"timestamp\", value: {} };\n case \"time\":\n // Party Stack has no dedicated time type yet.\n return { kind: \"string\", value: {} };\n case \"reference\": {\n const referenceTo = field.referenceTo ?? [];\n if (referenceTo.length === 1) {\n return {\n kind: \"objectReference\",\n value: { objectType: referenceTo[0]! },\n };\n }\n // Polymorphic references stay scalar until multi-target links exist.\n return { kind: \"string\", value: {} };\n }\n case \"location\":\n case \"address\":\n // Compound location/address fields are exposed as unknown; individual\n // latitude/longitude components appear as separate fields when available.\n return { kind: \"unknown\", value: {} };\n case \"base64\":\n case \"blob\":\n case \"complexvalue\":\n case \"json\":\n case \"datacategorygroupreference\":\n default:\n return { kind: \"unknown\", value: {} };\n }\n}\n\nexport function convertSalesforceInvocableParameterType(\n parameter: {\n type?: string | null;\n sobjectType?: string | null;\n sObjectType?: string | null;\n required?: boolean;\n maxOccurs?: number | null;\n picklistValues?: SalesforcePicklistValue[] | null;\n },\n sObjectDescribe?: SalesforceSObjectDescribe\n): TypeDef {\n const required = parameter.required === true;\n let baseType: TypeDef;\n const typeName = parameter.type?.toLowerCase() ?? \"unknown\";\n const sObjectType = parameter.sobjectType ?? parameter.sObjectType;\n if (typeName === \"sobject\" && sObjectType && sObjectDescribe) {\n baseType = {\n kind: \"struct\",\n value: {\n fields: sObjectDescribe.fields\n .filter((field) => field.type !== \"address\" && field.type !== \"location\")\n .map((field) => ({\n name: field.name,\n displayName: field.label || field.name,\n description: field.inlineHelpText ?? undefined,\n type: maybeOptional(convertSalesforceFieldType(field), true),\n })),\n },\n };\n } else if (sObjectType && (typeName === \"id\" || typeName === \"reference\")) {\n baseType = {\n kind: \"objectReference\",\n value: { objectType: sObjectType },\n };\n } else {\n switch (typeName) {\n case \"string\":\n case \"id\":\n case \"textarea\":\n case \"url\":\n case \"email\":\n case \"phone\":\n baseType = { kind: \"string\", value: {} };\n break;\n case \"picklist\":\n baseType = {\n kind: \"string\",\n value: {\n constraint: picklistConstraint(parameter.picklistValues),\n },\n };\n break;\n case \"boolean\":\n baseType = { kind: \"boolean\", value: {} };\n break;\n case \"integer\":\n case \"int\":\n case \"long\":\n baseType = { kind: \"integer\", value: {} };\n break;\n case \"double\":\n case \"currency\":\n case \"percent\":\n case \"number\":\n case \"decimal\":\n baseType = { kind: \"double\", value: {} };\n break;\n case \"date\":\n baseType = { kind: \"date\", value: {} };\n break;\n case \"datetime\":\n baseType = { kind: \"timestamp\", value: {} };\n break;\n case \"sobject\":\n baseType = { kind: \"unknown\", value: {} };\n break;\n case \"reference\":\n baseType = { kind: \"string\", value: {} };\n break;\n default:\n baseType = { kind: \"unknown\", value: {} };\n break;\n }\n }\n if (typeof parameter.maxOccurs === \"number\" && parameter.maxOccurs > 1) {\n baseType = {\n kind: \"list\",\n value: { elementType: baseType },\n };\n }\n return required ? baseType : { kind: \"optional\", value: { type: baseType } };\n}\n"],"mappings":"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"}
|
package/lib/meta/index.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SalesforceMetadataBackendOptions, makeSalesforceMetadataBackend } from "./backend.js";
|
|
2
2
|
import { convertSalesforceMetaActionType, convertSalesforceMetaStandardActionType } from "./convertMetaActionType.js";
|
|
3
3
|
import { convertSalesforceMetaLinkTypes } from "./convertMetaLinkType.js";
|
|
4
4
|
import { convertSalesforceMetaObjectType } from "./convertMetaObjectType.js";
|
|
5
|
-
|
|
6
|
-
import { MetaEntityStoreOpts, linkTypeCollectionOptions, objectTypeCollectionOptions, valueTypeCollectionOptions } from "./entityCollectionOptions.js";
|
|
7
|
-
export { ActionTypeCollectionOpts, CreateSalesforceMetaOntologyBackendAdapterOpts, MetaEntityStoreOpts, actionTypeCollectionOptions, convertSalesforceMetaActionType, convertSalesforceMetaLinkTypes, convertSalesforceMetaObjectType, convertSalesforceMetaStandardActionType, createSalesforceMetaOntologyBackendAdapter, linkTypeCollectionOptions, objectTypeCollectionOptions, valueTypeCollectionOptions };
|
|
5
|
+
export { SalesforceMetadataBackendOptions, convertSalesforceMetaActionType, convertSalesforceMetaLinkTypes, convertSalesforceMetaObjectType, convertSalesforceMetaStandardActionType, makeSalesforceMetadataBackend };
|
package/lib/meta/index.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { convertSalesforceMetaActionType, convertSalesforceMetaStandardActionType } from "./convertMetaActionType.js";
|
|
2
|
-
import { actionTypeCollectionOptions } from "./actionTypeCollectionOptions.js";
|
|
3
1
|
import { convertSalesforceMetaLinkTypes } from "./convertMetaLinkType.js";
|
|
4
2
|
import { convertSalesforceMetaObjectType } from "./convertMetaObjectType.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
export {
|
|
3
|
+
import { convertSalesforceMetaActionType, convertSalesforceMetaStandardActionType } from "./convertMetaActionType.js";
|
|
4
|
+
import { makeSalesforceMetadataBackend } from "./backend.js";
|
|
5
|
+
export { convertSalesforceMetaActionType, convertSalesforceMetaLinkTypes, convertSalesforceMetaObjectType, convertSalesforceMetaStandardActionType, makeSalesforceMetadataBackend };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SalesforceCrudActionTypeSelection } from "../crud.js";
|
|
2
|
+
import { MetaNameQuery } from "./convertMetaLoadSubsetOptions.js";
|
|
3
|
+
import { SalesforceClient } from "@party-stack/salesforce-client";
|
|
4
|
+
import { Query } from "@party-stack/ontology-storage";
|
|
5
|
+
import { ActionType } from "@party-stack/ontology-spec/meta";
|
|
6
|
+
//#region src/meta/loadActions.d.ts
|
|
7
|
+
export interface ActionTypeLoadOptions {
|
|
8
|
+
client: SalesforceClient;
|
|
9
|
+
flowActionTypeNames?: string[];
|
|
10
|
+
standardActionTypeNames?: string[];
|
|
11
|
+
crudActionTypes?: readonly SalesforceCrudActionTypeSelection[];
|
|
12
|
+
}
|
|
13
|
+
export declare function loadSalesforceActionTypes(opts: ActionTypeLoadOptions, query?: MetaNameQuery, window?: Pick<Query, "offset" | "limit">): Promise<ActionType[]>;
|
|
14
|
+
//#endregion
|
|
15
|
+
//# sourceMappingURL=loadActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadActions.d.ts","names":["MetaActionType"],"sources":["../../src/meta/loadActions.ts"],"mappings":";;;;;;iBAoBiB;EACb,QAAQ;EACR;EACA;EACA,2BAA2B;;wBAqGT,0BAClB,MAAM,uBACN,QAAO,eACP,SAAS,KAAK,6BACf,QAAQA"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { salesforceCrudActionTypeId, salesforceCrudActionTypeName } from "../utils/ids.js";
|
|
2
|
+
import { matchesMetaNameQuery } from "./convertMetaLoadSubsetOptions.js";
|
|
3
|
+
import { classifySalesforceStandardAction } from "../standardActions.js";
|
|
4
|
+
import { convertSalesforceMetaActionType, convertSalesforceMetaStandardActionType } from "./convertMetaActionType.js";
|
|
5
|
+
import { synthesizeSalesforceCrudActionTypes } from "./synthesizeCrudActionTypes.js";
|
|
6
|
+
//#region src/meta/loadActions.ts
|
|
7
|
+
function normalizeFlowActionList(response) {
|
|
8
|
+
if (Array.isArray(response)) return response;
|
|
9
|
+
if (typeof response === "object" && response !== null && "actions" in response) return Array.isArray(response.actions) ? response.actions : [];
|
|
10
|
+
return Object.keys(response).map((name) => ({ name }));
|
|
11
|
+
}
|
|
12
|
+
async function loadFlowActionDescribe(client, apiName) {
|
|
13
|
+
try {
|
|
14
|
+
return await client.describeFlowAction(apiName);
|
|
15
|
+
} catch {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function loadStandardActionDescribe(client, apiName) {
|
|
20
|
+
try {
|
|
21
|
+
return await client.describeStandardAction(apiName);
|
|
22
|
+
} catch {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function loadFlowActionDescribes(client, names) {
|
|
27
|
+
if (typeof client.describeFlowActions === "function") try {
|
|
28
|
+
return await client.describeFlowActions(names);
|
|
29
|
+
} catch {}
|
|
30
|
+
return Promise.all(names.map((name) => loadFlowActionDescribe(client, name)));
|
|
31
|
+
}
|
|
32
|
+
async function loadStandardActionDescribes(client, names) {
|
|
33
|
+
if (typeof client.describeStandardActions === "function") try {
|
|
34
|
+
return await client.describeStandardActions(names);
|
|
35
|
+
} catch {}
|
|
36
|
+
return Promise.all(names.map((name) => loadStandardActionDescribe(client, name)));
|
|
37
|
+
}
|
|
38
|
+
async function loadSelectedActionDescribes(client, flowNames, standardNames) {
|
|
39
|
+
if (typeof client.describeInvocableActions === "function") try {
|
|
40
|
+
const combined = await client.describeInvocableActions([...flowNames.map((apiName) => ({
|
|
41
|
+
kind: "flow",
|
|
42
|
+
apiName
|
|
43
|
+
})), ...standardNames.map((apiName) => ({
|
|
44
|
+
kind: "standard",
|
|
45
|
+
apiName
|
|
46
|
+
}))]);
|
|
47
|
+
return [combined.slice(0, flowNames.length), combined.slice(flowNames.length)];
|
|
48
|
+
} catch {}
|
|
49
|
+
return Promise.all([flowNames.length > 0 ? loadFlowActionDescribes(client, flowNames) : [], standardNames.length > 0 ? loadStandardActionDescribes(client, standardNames) : []]);
|
|
50
|
+
}
|
|
51
|
+
async function loadSalesforceActionTypes(opts, query = { type: "list" }, window) {
|
|
52
|
+
const describeCache = /* @__PURE__ */ new Map();
|
|
53
|
+
const requestedNames = query.type === "getBatch" ? new Set(query.names) : void 0;
|
|
54
|
+
const configuredCrudNames = new Set((opts.crudActionTypes ?? []).flatMap((selection) => selection.operations.map((operation) => salesforceCrudActionTypeName(operation, selection.objectType))));
|
|
55
|
+
const [flowSummaries, standardSummaries] = await Promise.all([opts.flowActionTypeNames || requestedNames ? Promise.resolve(void 0) : opts.client.listFlowActions().then(normalizeFlowActionList), opts.standardActionTypeNames || requestedNames ? Promise.resolve(void 0) : opts.client.listStandardActions().then(normalizeFlowActionList)]);
|
|
56
|
+
const candidates = [...(opts.flowActionTypeNames ?? (requestedNames ? [...requestedNames].filter((name) => !configuredCrudNames.has(name)) : flowSummaries?.map((summary) => summary.name) ?? [])).map((name) => ({
|
|
57
|
+
kind: "flow",
|
|
58
|
+
name,
|
|
59
|
+
displayName: flowSummaries?.find((summary) => summary.name === name)?.label ?? name
|
|
60
|
+
})), ...(opts.standardActionTypeNames ?? (requestedNames ? [...requestedNames].filter((name) => !configuredCrudNames.has(name)) : standardSummaries?.filter((summary) => classifySalesforceStandardAction(summary.name) === "action").map((summary) => summary.name) ?? [])).map((name) => ({
|
|
61
|
+
kind: "standard",
|
|
62
|
+
name,
|
|
63
|
+
displayName: standardSummaries?.find((summary) => summary.name === name)?.label ?? name
|
|
64
|
+
}))];
|
|
65
|
+
const matchingCandidates = query.type === "search" ? candidates.filter((candidate) => matchesMetaNameQuery(query, candidate)) : candidates;
|
|
66
|
+
matchingCandidates.sort((left, right) => left.name.localeCompare(right.name));
|
|
67
|
+
const offset = Math.max(0, Math.trunc(window?.offset ?? 0));
|
|
68
|
+
const limit = window?.limit;
|
|
69
|
+
const selectedCandidates = requestedNames ? matchingCandidates : matchingCandidates.slice(offset, limit === void 0 ? void 0 : offset + Math.max(0, Math.trunc(limit)));
|
|
70
|
+
const names = selectedCandidates.filter((candidate) => candidate.kind === "flow").map((candidate) => candidate.name);
|
|
71
|
+
const standardNames = selectedCandidates.filter((candidate) => candidate.kind === "standard").map((candidate) => candidate.name);
|
|
72
|
+
const describeCacheKey = JSON.stringify([names, standardNames]);
|
|
73
|
+
let cached = describeCache.get(describeCacheKey);
|
|
74
|
+
if (!cached) {
|
|
75
|
+
cached = loadSelectedActionDescribes(opts.client, names, standardNames);
|
|
76
|
+
describeCache.set(describeCacheKey, cached);
|
|
77
|
+
}
|
|
78
|
+
const [describes, rawStandardDescribes] = await cached;
|
|
79
|
+
const standardDescribes = rawStandardDescribes.filter((describe) => Boolean(describe) && (opts.standardActionTypeNames !== void 0 || classifySalesforceStandardAction(describe.name) === "action"));
|
|
80
|
+
const flowDescribes = describes.filter((describe) => Boolean(describe));
|
|
81
|
+
const sObjectNames = new Set((opts.crudActionTypes ?? []).map((selection) => selection.objectType));
|
|
82
|
+
for (const describe of [...flowDescribes, ...standardDescribes]) for (const input of describe.inputs ?? []) {
|
|
83
|
+
const sObjectType = input.sobjectType ?? input.sObjectType;
|
|
84
|
+
if (input.type?.toLowerCase() === "sobject" && sObjectType) sObjectNames.add(sObjectType);
|
|
85
|
+
}
|
|
86
|
+
const sObjectDescribes = new Map(await Promise.all([...sObjectNames].map(async (name) => [name, await opts.client.describeSObject(name)])));
|
|
87
|
+
const flowActions = flowDescribes.map((describe) => convertSalesforceMetaActionType(describe, sObjectDescribes));
|
|
88
|
+
const standardActions = standardDescribes.map((describe) => convertSalesforceMetaStandardActionType(describe, sObjectDescribes));
|
|
89
|
+
const crudActions = (opts.crudActionTypes ?? []).flatMap((selection) => {
|
|
90
|
+
const describe = sObjectDescribes.get(selection.objectType);
|
|
91
|
+
return describe ? synthesizeSalesforceCrudActionTypes(describe).filter((action) => (!requestedNames || requestedNames.has(action.name)) && matchesMetaNameQuery(query, action) && selection.operations.some((operation) => action.id === salesforceCrudActionTypeId(operation, selection.objectType))) : [];
|
|
92
|
+
});
|
|
93
|
+
const actions = new Map([...flowActions, ...standardActions].map((action) => [action.name, action]));
|
|
94
|
+
for (const action of crudActions) {
|
|
95
|
+
if (actions.has(action.name)) throw new Error(`Multiple Salesforce actions use ontology name "${action.name}".`);
|
|
96
|
+
actions.set(action.name, action);
|
|
97
|
+
}
|
|
98
|
+
return [...actions.values()];
|
|
99
|
+
}
|
|
100
|
+
//#endregion
|
|
101
|
+
export { loadSalesforceActionTypes };
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=loadActions.js.map
|