@party-stack/foundry-ontology 0.19.0 → 0.20.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 +53 -32
- package/lib/adapter/backend.d.ts +35 -0
- package/lib/adapter/backend.d.ts.map +1 -0
- package/lib/adapter/backend.js +210 -0
- package/lib/adapter/backend.js.map +1 -0
- package/lib/adapter/encrypted.d.ts +12 -0
- package/lib/adapter/encrypted.d.ts.map +1 -0
- package/lib/adapter/encrypted.js +79 -0
- package/lib/adapter/encrypted.js.map +1 -0
- package/lib/adapter/foundryActionError.d.ts +7 -0
- package/lib/adapter/foundryActionError.d.ts.map +1 -0
- package/lib/adapter/foundryActionError.js +61 -0
- package/lib/adapter/foundryActionError.js.map +1 -0
- package/lib/adapter/foundryActionValidation.d.ts +4 -3
- package/lib/adapter/foundryActionValidation.d.ts.map +1 -1
- package/lib/adapter/foundryActionValidation.js +71 -25
- package/lib/adapter/foundryActionValidation.js.map +1 -1
- package/lib/adapter/foundryCodec.d.ts +2 -5
- package/lib/adapter/foundryCodec.d.ts.map +1 -1
- package/lib/adapter/foundryCodec.js +19 -7
- package/lib/adapter/foundryCodec.js.map +1 -1
- package/lib/adapter/foundryObjectSearch.d.ts +13 -0
- package/lib/adapter/foundryObjectSearch.d.ts.map +1 -0
- package/lib/adapter/foundryObjectSearch.js +57 -0
- package/lib/adapter/foundryObjectSearch.js.map +1 -0
- package/lib/adapter/index.d.ts +3 -4
- package/lib/adapter/index.js +3 -4
- package/lib/adapter/likeFilter.d.ts +10 -0
- package/lib/adapter/likeFilter.d.ts.map +1 -0
- package/lib/adapter/likeFilter.js +87 -0
- package/lib/adapter/likeFilter.js.map +1 -0
- package/lib/adapter/makeFoundryOntologyBackend.d.ts +76 -0
- package/lib/adapter/makeFoundryOntologyBackend.d.ts.map +1 -0
- package/lib/adapter/makeFoundryOntologyBackend.js +505 -0
- package/lib/adapter/makeFoundryOntologyBackend.js.map +1 -0
- package/lib/adapter/subsetFilter.d.ts +14 -0
- package/lib/adapter/subsetFilter.d.ts.map +1 -0
- package/lib/adapter/subsetFilter.js +105 -0
- package/lib/adapter/subsetFilter.js.map +1 -0
- package/lib/adapter/uploads.d.ts +25 -0
- package/lib/adapter/uploads.d.ts.map +1 -0
- package/lib/adapter/uploads.js +78 -0
- package/lib/adapter/uploads.js.map +1 -0
- package/lib/backend.d.ts +80 -0
- package/lib/backend.d.ts.map +1 -0
- package/lib/backend.js +34 -0
- package/lib/backend.js.map +1 -0
- package/lib/config/index.d.ts +8 -12
- package/lib/config/index.d.ts.map +1 -1
- package/lib/config/index.js +49 -52
- package/lib/config/index.js.map +1 -1
- package/lib/connectionOptions.d.ts +9 -0
- package/lib/connectionOptions.d.ts.map +1 -0
- package/lib/connectionOptions.js +1 -0
- package/lib/context.d.ts +21 -0
- package/lib/context.d.ts.map +1 -0
- package/lib/context.js +16 -0
- package/lib/context.js.map +1 -0
- package/lib/index.d.ts +7 -7
- package/lib/index.js +6 -7
- package/lib/meta/backend.d.ts +10 -0
- package/lib/meta/backend.d.ts.map +1 -0
- package/lib/meta/backend.js +161 -0
- package/lib/meta/backend.js.map +1 -0
- package/lib/meta/convertMetaActionType.d.ts +3 -2
- package/lib/meta/convertMetaActionType.d.ts.map +1 -1
- package/lib/meta/convertMetaActionType.js +3 -3
- 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 +13 -13
- package/lib/meta/convertMetaLinkType.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 +5 -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.d.ts.map +1 -1
- package/lib/meta/convertMetaTypeDef.js +7 -1
- package/lib/meta/convertMetaTypeDef.js.map +1 -1
- package/lib/meta/convertMetaValueType.d.ts +2 -2
- package/lib/meta/convertMetaValueType.d.ts.map +1 -1
- package/lib/meta/convertMetaValueType.js.map +1 -1
- package/lib/meta/convertOmsActionParameterMetadata.d.ts +1 -1
- package/lib/meta/convertOmsActionParameterMetadata.js +1 -1
- package/lib/meta/convertOmsActionParameterMetadata.js.map +1 -1
- package/lib/meta/index.d.ts +2 -4
- package/lib/meta/index.js +2 -4
- package/lib/meta/listObjectTypes.d.ts +6 -0
- package/lib/meta/listObjectTypes.d.ts.map +1 -0
- package/lib/meta/listObjectTypes.js +13 -0
- package/lib/meta/listObjectTypes.js.map +1 -0
- package/lib/meta/loadActions.d.ts +7 -0
- package/lib/meta/loadActions.d.ts.map +1 -0
- package/lib/meta/loadActions.js +20 -0
- package/lib/meta/loadActions.js.map +1 -0
- package/lib/meta/loadEntities.d.ts +9 -0
- package/lib/meta/loadEntities.d.ts.map +1 -0
- package/lib/meta/loadEntities.js +73 -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 +18 -0
- package/lib/meta/loadQueryFunctions.js.map +1 -0
- package/lib/meta/planMetaLookup.d.ts +12 -0
- package/lib/meta/planMetaLookup.d.ts.map +1 -0
- package/lib/meta/planMetaLookup.js +44 -0
- package/lib/meta/planMetaLookup.js.map +1 -0
- package/lib/platform.d.ts +78 -0
- package/lib/platform.d.ts.map +1 -0
- package/lib/platform.js +116 -0
- package/lib/platform.js.map +1 -0
- package/lib/platformCollections.d.ts +68 -0
- package/lib/platformCollections.d.ts.map +1 -0
- package/lib/platformCollections.js +7 -0
- package/lib/platformCollections.js.map +1 -0
- package/lib/serviceConnector.d.ts +8 -0
- package/lib/serviceConnector.d.ts.map +1 -0
- package/lib/serviceConnector.js +105 -0
- package/lib/serviceConnector.js.map +1 -0
- package/lib/stagedWrites.d.ts +3 -2
- package/lib/stagedWrites.d.ts.map +1 -1
- package/lib/stagedWrites.js +30 -3
- package/lib/stagedWrites.js.map +1 -1
- package/lib/users/admin.d.ts +105 -0
- package/lib/users/admin.d.ts.map +1 -0
- package/lib/users/admin.js +35 -0
- package/lib/users/admin.js.map +1 -0
- package/lib/users/createFoundryUsersIntegration.d.ts +2 -2
- package/lib/users/createFoundryUsersIntegration.d.ts.map +1 -1
- package/lib/users/createFoundryUsersIntegration.js +4 -6
- package/lib/users/createFoundryUsersIntegration.js.map +1 -1
- package/lib/users/foundryUser.d.ts +2 -2
- package/lib/users/foundryUser.js +1 -1
- package/lib/users/foundryUser.js.map +1 -1
- package/lib/users/index.d.ts +2 -3
- package/lib/users/index.js +2 -3
- package/lib/users/loadUserSubset.d.ts +8 -0
- package/lib/users/loadUserSubset.d.ts.map +1 -0
- package/lib/users/loadUserSubset.js +166 -0
- package/lib/users/loadUserSubset.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 +16 -15
- package/lib/adapter/convertLoadSubsetOptions.d.ts +0 -8
- package/lib/adapter/convertLoadSubsetOptions.d.ts.map +0 -1
- package/lib/adapter/convertLoadSubsetOptions.js +0 -178
- package/lib/adapter/convertLoadSubsetOptions.js.map +0 -1
- package/lib/adapter/createFoundryOntologyBackendAdapter.d.ts +0 -29
- package/lib/adapter/createFoundryOntologyBackendAdapter.d.ts.map +0 -1
- package/lib/adapter/createFoundryOntologyBackendAdapter.js +0 -311
- package/lib/adapter/createFoundryOntologyBackendAdapter.js.map +0 -1
- package/lib/adapter/objectCollectionOptions.d.ts +0 -33
- package/lib/adapter/objectCollectionOptions.d.ts.map +0 -1
- package/lib/adapter/objectCollectionOptions.js +0 -482
- package/lib/adapter/objectCollectionOptions.js.map +0 -1
- package/lib/config/applyAttachmentConstraintOverrides.d.ts +0 -10
- package/lib/config/applyAttachmentConstraintOverrides.d.ts.map +0 -1
- package/lib/config/applyAttachmentConstraintOverrides.js +0 -50
- package/lib/config/applyAttachmentConstraintOverrides.js.map +0 -1
- package/lib/connection.d.ts +0 -38
- package/lib/connection.d.ts.map +0 -1
- package/lib/connection.js +0 -195
- package/lib/connection.js.map +0 -1
- package/lib/installation/createFoundryBackendInstallation.d.ts +0 -29
- package/lib/installation/createFoundryBackendInstallation.d.ts.map +0 -1
- package/lib/installation/createFoundryBackendInstallation.js +0 -60
- package/lib/installation/createFoundryBackendInstallation.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 -14
- package/lib/meta/actionTypeCollectionOptions.d.ts.map +0 -1
- package/lib/meta/actionTypeCollectionOptions.js +0 -58
- package/lib/meta/actionTypeCollectionOptions.js.map +0 -1
- package/lib/meta/convertActionTypeLoadSubsetOptions.d.ts +0 -7
- package/lib/meta/convertActionTypeLoadSubsetOptions.d.ts.map +0 -1
- package/lib/meta/convertActionTypeLoadSubsetOptions.js +0 -84
- package/lib/meta/convertActionTypeLoadSubsetOptions.js.map +0 -1
- package/lib/meta/createFoundryMetaOntologyBackendAdapter.d.ts +0 -11
- package/lib/meta/createFoundryMetaOntologyBackendAdapter.d.ts.map +0 -1
- package/lib/meta/createFoundryMetaOntologyBackendAdapter.js +0 -43
- package/lib/meta/createFoundryMetaOntologyBackendAdapter.js.map +0 -1
- package/lib/meta/entityCollectionOptions.d.ts +0 -25
- package/lib/meta/entityCollectionOptions.d.ts.map +0 -1
- package/lib/meta/entityCollectionOptions.js +0 -69
- package/lib/meta/entityCollectionOptions.js.map +0 -1
- package/lib/meta/queryFunctionTypeCollectionOptions.d.ts +0 -12
- package/lib/meta/queryFunctionTypeCollectionOptions.d.ts.map +0 -1
- package/lib/meta/queryFunctionTypeCollectionOptions.js +0 -59
- package/lib/meta/queryFunctionTypeCollectionOptions.js.map +0 -1
- package/lib/users/createFoundryAdminOntologyRoute.d.ts +0 -55
- package/lib/users/createFoundryAdminOntologyRoute.d.ts.map +0 -1
- package/lib/users/createFoundryAdminOntologyRoute.js +0 -33
- package/lib/users/createFoundryAdminOntologyRoute.js.map +0 -1
- package/lib/users/userCollectionOptions.d.ts +0 -25
- package/lib/users/userCollectionOptions.d.ts.map +0 -1
- package/lib/users/userCollectionOptions.js +0 -94
- package/lib/users/userCollectionOptions.js.map +0 -1
package/lib/context.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { o } from "@party-stack/ontology-spec";
|
|
2
|
+
//#region src/context.ts
|
|
3
|
+
const FOUNDRY_CURRENT_USER_CONTEXT_FIELD = "userId";
|
|
4
|
+
/** Foundry's currentUser action argument is the authenticated provider subject ID. */
|
|
5
|
+
const foundryContext = {
|
|
6
|
+
type: o.struct({ fields: [{
|
|
7
|
+
name: FOUNDRY_CURRENT_USER_CONTEXT_FIELD,
|
|
8
|
+
displayName: "User ID",
|
|
9
|
+
type: o.string({})
|
|
10
|
+
}] }),
|
|
11
|
+
partition: [[FOUNDRY_CURRENT_USER_CONTEXT_FIELD]]
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
export { FOUNDRY_CURRENT_USER_CONTEXT_FIELD, foundryContext };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../src/context.ts"],"sourcesContent":["import { o, type OntologyIR } from \"@party-stack/ontology-spec\";\n\nexport const FOUNDRY_CURRENT_USER_CONTEXT_FIELD = \"userId\";\n\n/** Foundry's currentUser action argument is the authenticated provider subject ID. */\nexport const foundryContext = {\n type: o.struct({\n fields: [{ name: FOUNDRY_CURRENT_USER_CONTEXT_FIELD, displayName: \"User ID\", type: o.string({}) }],\n }),\n partition: [[FOUNDRY_CURRENT_USER_CONTEXT_FIELD]],\n} satisfies NonNullable<OntologyIR[\"context\"]>;\n"],"mappings":";;AAEA,MAAa,qCAAqC;;AAGlD,MAAa,iBAAiB;CAC1B,MAAM,EAAE,OAAO,EACX,QAAQ,CAAC;EAAE,MAAM;EAAoC,aAAa;EAAW,MAAM,EAAE,OAAO,CAAC,CAAC;CAAE,CAAC,EACrG,CAAC;CACD,WAAW,CAAC,CAAC,kCAAkC,CAAC;AACpD"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { ObjectCollectionConfig, ObjectCollectionOpts, ObjectCollectionUtils, objectCollectionOptions } from "./adapter/objectCollectionOptions.js";
|
|
1
|
+
import { FoundryCodec, createFoundryCodec } from "./adapter/foundryCodec.js";
|
|
2
|
+
import { FoundryOntologyBackendOptions, FoundryUsersIntegration, isFoundryNotFoundError, makeFoundryOntologyBackend } from "./adapter/makeFoundryOntologyBackend.js";
|
|
4
3
|
import "./adapter/index.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import "./
|
|
4
|
+
import { FoundryOAuthConnectionOptions } from "./connectionOptions.js";
|
|
5
|
+
import { makeFoundryServiceConnector } from "./serviceConnector.js";
|
|
6
|
+
import { makeFoundryBackend, makeFoundryConnectionClient, makeFoundryMetadataBackend } from "./backend.js";
|
|
8
7
|
import { CreateFoundryStagedWriteMutatorTxOptions, FoundryStagedWriteClient, createFoundryStagedWriteMutatorTx, runFoundryOntologyMutator } from "./stagedWrites.js";
|
|
8
|
+
import { FoundryPlatformOntology, foundryPlatformOntology, makeFoundryPlatformBackend } from "./platform.js";
|
|
9
9
|
export * from "@party-stack/foundry-client";
|
|
10
|
-
export {
|
|
10
|
+
export { CreateFoundryStagedWriteMutatorTxOptions, FoundryCodec, type FoundryOAuthConnectionOptions, FoundryOntologyBackendOptions, type FoundryPlatformOntology, FoundryStagedWriteClient, FoundryUsersIntegration, createFoundryCodec, createFoundryStagedWriteMutatorTx, foundryPlatformOntology, isFoundryNotFoundError, makeFoundryBackend, makeFoundryConnectionClient, makeFoundryMetadataBackend, makeFoundryOntologyBackend, makeFoundryPlatformBackend, makeFoundryServiceConnector, runFoundryOntologyMutator };
|
package/lib/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { createFoundryCodec } from "./adapter/foundryCodec.js";
|
|
2
|
+
import { isFoundryNotFoundError, makeFoundryOntologyBackend } from "./adapter/makeFoundryOntologyBackend.js";
|
|
3
|
+
import { makeFoundryServiceConnector } from "./serviceConnector.js";
|
|
4
|
+
import { makeFoundryBackend, makeFoundryConnectionClient, makeFoundryMetadataBackend } from "./backend.js";
|
|
5
5
|
import "./adapter/index.js";
|
|
6
|
-
import { createFoundryBackendInstallation, createFoundryOntologyRoute } from "./installation/createFoundryBackendInstallation.js";
|
|
7
|
-
import "./installation/index.js";
|
|
8
6
|
import { createFoundryStagedWriteMutatorTx, runFoundryOntologyMutator } from "./stagedWrites.js";
|
|
7
|
+
import { foundryPlatformOntology, makeFoundryPlatformBackend } from "./platform.js";
|
|
9
8
|
export * from "@party-stack/foundry-client";
|
|
10
|
-
export {
|
|
9
|
+
export { createFoundryCodec, createFoundryStagedWriteMutatorTx, foundryPlatformOntology, isFoundryNotFoundError, makeFoundryBackend, makeFoundryConnectionClient, makeFoundryMetadataBackend, makeFoundryOntologyBackend, makeFoundryPlatformBackend, makeFoundryServiceConnector, runFoundryOntologyMutator };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { OntologyClient } from "@party-stack/foundry-client";
|
|
2
|
+
import { OntologyBackendService } from "@party-stack/ontology-backend";
|
|
3
|
+
//#region src/meta/backend.d.ts
|
|
4
|
+
export declare function makeFoundryMetadataBackend(options: {
|
|
5
|
+
client: OntologyClient;
|
|
6
|
+
refetchInterval?: number | false;
|
|
7
|
+
}): OntologyBackendService;
|
|
8
|
+
export type FoundryMetadataBackendOptions = Parameters<typeof makeFoundryMetadataBackend>[0];
|
|
9
|
+
//#endregion
|
|
10
|
+
//# sourceMappingURL=backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.d.ts","names":[],"sources":["../../src/meta/backend.ts"],"mappings":";;;wBAmEgB,2BAA2B;EACvC,QAAQ;EACR;IACA;YAiHQ,gCAAgC,kBAAkB"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { foundryContext } from "../context.js";
|
|
2
|
+
import { toFoundryActionTypeName } from "../utils/actionTypeName.js";
|
|
3
|
+
import { convertFoundryMetaActionType } from "./convertMetaActionType.js";
|
|
4
|
+
import { fromPagination, toArray } from "../utils/AsyncIterable.js";
|
|
5
|
+
import { convertFoundryMetaQueryFunctionType } from "./convertMetaQueryFunctionType.js";
|
|
6
|
+
import { loadActionTypesFullMetadata } from "./loadActions.js";
|
|
7
|
+
import { loadActionTypeOmsMetadata } from "./loadActionTypeOmsMetadata.js";
|
|
8
|
+
import { planMetaLookup } from "./planMetaLookup.js";
|
|
9
|
+
import { loadFoundryMetaLinkTypes, loadFoundryMetaObjectTypes, loadFoundryMetaValueTypes } from "./loadEntities.js";
|
|
10
|
+
import { getQueryFunctionTypes, listQueryFunctionTypes } from "./loadQueryFunctions.js";
|
|
11
|
+
import { Effect, Redacted, Schema } from "effect";
|
|
12
|
+
import { ActionTypesV2 } from "@osdk/foundry.ontologies";
|
|
13
|
+
import { BackendError, classifyBackendFailure, makeOntologyBackend } from "@party-stack/ontology-backend";
|
|
14
|
+
import { compileObjectSubset, objectSubset } from "@party-stack/ontology-backend/subset";
|
|
15
|
+
import { isField } from "@party-stack/ontology-storage/tables";
|
|
16
|
+
import metaOntology from "@party-stack/ontology-spec/meta";
|
|
17
|
+
//#region src/meta/backend.ts
|
|
18
|
+
const failure = (operation, cause) => classifyBackendFailure(operation, cause);
|
|
19
|
+
function actionCandidates(predicate) {
|
|
20
|
+
if (!predicate) return;
|
|
21
|
+
if (predicate.op === "and" || predicate.op === "or") {
|
|
22
|
+
const children = predicate.predicates.map(actionCandidates);
|
|
23
|
+
if (predicate.op === "or" && children.some((child) => child === void 0)) return;
|
|
24
|
+
const supported = children.filter((child) => child !== void 0);
|
|
25
|
+
return supported.length === 1 ? supported[0] : supported.length ? {
|
|
26
|
+
type: predicate.op,
|
|
27
|
+
value: supported
|
|
28
|
+
} : void 0;
|
|
29
|
+
}
|
|
30
|
+
if (predicate.op === "in") {
|
|
31
|
+
const children = predicate.values.map((value) => actionCandidates({
|
|
32
|
+
op: "eq",
|
|
33
|
+
left: predicate.left,
|
|
34
|
+
right: value
|
|
35
|
+
}));
|
|
36
|
+
if (children.every((child) => child !== void 0)) return {
|
|
37
|
+
type: "or",
|
|
38
|
+
value: children
|
|
39
|
+
};
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (predicate.op !== "eq" && predicate.op !== "like" && predicate.op !== "ilike") return;
|
|
43
|
+
const ref = isField(predicate.left) ? predicate.left : predicate.right;
|
|
44
|
+
const value = ref === predicate.left ? predicate.right : predicate.left;
|
|
45
|
+
if (!isField(ref) || typeof value !== "string") return;
|
|
46
|
+
const field = ref.path.join(".");
|
|
47
|
+
if (predicate.op === "eq" && field === "id") return {
|
|
48
|
+
type: "actionTypeRid",
|
|
49
|
+
value
|
|
50
|
+
};
|
|
51
|
+
if (field !== "name" && field !== "displayName") return;
|
|
52
|
+
const type = field === "name" ? "actionTypeApiName" : "actionTypeDisplayName";
|
|
53
|
+
const convert = (value) => field === "name" ? toFoundryActionTypeName(value) : value;
|
|
54
|
+
if (predicate.op === "eq") return {
|
|
55
|
+
type,
|
|
56
|
+
value: {
|
|
57
|
+
type: "exact",
|
|
58
|
+
value: convert(value)
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
if (value.includes("_") || value.includes("\\")) return;
|
|
62
|
+
const children = value.split("%").filter(Boolean).map((term) => ({
|
|
63
|
+
type,
|
|
64
|
+
value: {
|
|
65
|
+
type: "contains",
|
|
66
|
+
value: convert(term)
|
|
67
|
+
}
|
|
68
|
+
}));
|
|
69
|
+
return children.length === 1 ? children[0] : {
|
|
70
|
+
type: "and",
|
|
71
|
+
value: children
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function makeFoundryMetadataBackend(options) {
|
|
75
|
+
const unsupported = (operation) => Effect.fail(new BackendError({
|
|
76
|
+
operation,
|
|
77
|
+
kind: "NotImplemented",
|
|
78
|
+
message: "Metadata is read-only.",
|
|
79
|
+
retryable: false
|
|
80
|
+
}));
|
|
81
|
+
return makeOntologyBackend({
|
|
82
|
+
ir: metaOntology,
|
|
83
|
+
name: "foundry-metadata",
|
|
84
|
+
sourceId: `foundry-metadata:${options.client.baseUrl}:${options.client.ontologyRid}`,
|
|
85
|
+
supportsIdempotency: false,
|
|
86
|
+
applyAction: () => unsupported("applyAction"),
|
|
87
|
+
queryFunction: () => unsupported("queryFunction"),
|
|
88
|
+
refresh: () => ({ pollIntervalMs: options.refetchInterval ?? false }),
|
|
89
|
+
loadSubset: Effect.fn("FoundryMetadata.loadSubset")(function* (request) {
|
|
90
|
+
const subset = yield* compileObjectSubset(metaOntology, request, void 0);
|
|
91
|
+
const type = metaOntology.objectTypes.find((type) => type.name === subset.objectType);
|
|
92
|
+
if (!type) return yield* new BackendError({
|
|
93
|
+
operation: "loadSubset",
|
|
94
|
+
kind: "InvalidRequest",
|
|
95
|
+
message: "Unknown metadata object type.",
|
|
96
|
+
retryable: false
|
|
97
|
+
});
|
|
98
|
+
if (subset.objectType === "Ontology") return {
|
|
99
|
+
complete: true,
|
|
100
|
+
rows: [{
|
|
101
|
+
key: "ontology",
|
|
102
|
+
value: {
|
|
103
|
+
id: "ontology",
|
|
104
|
+
context: foundryContext
|
|
105
|
+
}
|
|
106
|
+
}],
|
|
107
|
+
fulfilledSubset: objectSubset("Ontology")
|
|
108
|
+
};
|
|
109
|
+
const candidates = planMetaLookup(subset.query?.where, { name: "name" })?.values;
|
|
110
|
+
const values = yield* Effect.tryPromise({
|
|
111
|
+
try: async (signal) => {
|
|
112
|
+
const client = {
|
|
113
|
+
...options.client,
|
|
114
|
+
fetch: (input, init) => options.client.fetch(input, {
|
|
115
|
+
...init,
|
|
116
|
+
signal: init?.signal ? AbortSignal.any([signal, init.signal]) : signal
|
|
117
|
+
})
|
|
118
|
+
};
|
|
119
|
+
if (candidates?.length === 0) return [];
|
|
120
|
+
if (subset.objectType === "ActionType") {
|
|
121
|
+
const where = actionCandidates(subset.query?.where);
|
|
122
|
+
const actions = await toArray(fromPagination((pageSize, pageToken) => ActionTypesV2.search(client, client.ontologyRid, {
|
|
123
|
+
where,
|
|
124
|
+
pageSize,
|
|
125
|
+
pageToken,
|
|
126
|
+
fuzziness: { type: "off" }
|
|
127
|
+
}, { preview: true }), (page) => page.nextPageToken, (page) => page.data, 100));
|
|
128
|
+
const metadata = await loadActionTypesFullMetadata(client, actions);
|
|
129
|
+
const oms = await loadActionTypeOmsMetadata(client, metadata.map((value) => value.actionType.rid));
|
|
130
|
+
return metadata.map((value) => convertFoundryMetaActionType(value, oms.get(value.actionType.rid)));
|
|
131
|
+
}
|
|
132
|
+
if (subset.objectType === "QueryFunctionType") return (candidates ? await getQueryFunctionTypes({ client }, candidates) : await listQueryFunctionTypes({ client })).map(convertFoundryMetaQueryFunctionType);
|
|
133
|
+
return subset.objectType === "ObjectType" ? loadFoundryMetaObjectTypes(client, subset.query?.where) : subset.objectType === "ValueType" ? loadFoundryMetaValueTypes(client, subset.query?.where) : loadFoundryMetaLinkTypes(client, subset.query?.where);
|
|
134
|
+
},
|
|
135
|
+
catch: (cause) => failure("metadata.load", cause)
|
|
136
|
+
});
|
|
137
|
+
return {
|
|
138
|
+
complete: true,
|
|
139
|
+
fulfilledSubset: objectSubset(subset.objectType, { where: subset.query?.where }),
|
|
140
|
+
fetchedRows: values.length,
|
|
141
|
+
rows: yield* Effect.try({
|
|
142
|
+
try: () => values.map((value) => ({
|
|
143
|
+
key: Schema.decodeUnknownSync(Schema.Union([Schema.String, Schema.Finite]))(value[type.primaryKey]),
|
|
144
|
+
value
|
|
145
|
+
})),
|
|
146
|
+
catch: (cause) => new BackendError({
|
|
147
|
+
operation: "metadata.decode",
|
|
148
|
+
kind: "InvalidResponse",
|
|
149
|
+
message: "Foundry returned invalid metadata.",
|
|
150
|
+
retryable: false,
|
|
151
|
+
cause: Redacted.make(cause)
|
|
152
|
+
})
|
|
153
|
+
})
|
|
154
|
+
};
|
|
155
|
+
})
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
//#endregion
|
|
159
|
+
export { makeFoundryMetadataBackend };
|
|
160
|
+
|
|
161
|
+
//# sourceMappingURL=backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.js","names":["AsyncIterable.toArray","AsyncIterable.fromPagination"],"sources":["../../src/meta/backend.ts"],"sourcesContent":["import { ActionTypesV2 } from \"@osdk/foundry.ontologies\";\nimport { 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 { isField } from \"@party-stack/ontology-storage/tables\";\nimport { Effect, Redacted, Schema } from \"effect\";\nimport { foundryContext } from \"../context.js\";\nimport { toFoundryActionTypeName } from \"../utils/actionTypeName.js\";\nimport * as AsyncIterable from \"../utils/AsyncIterable.js\";\nimport { convertFoundryMetaActionType } from \"./convertMetaActionType.js\";\nimport { convertFoundryMetaQueryFunctionType } from \"./convertMetaQueryFunctionType.js\";\nimport { loadActionTypesFullMetadata } from \"./loadActions.js\";\nimport { loadActionTypeOmsMetadata } from \"./loadActionTypeOmsMetadata.js\";\nimport {\n loadFoundryMetaLinkTypes,\n loadFoundryMetaObjectTypes,\n loadFoundryMetaValueTypes,\n} from \"./loadEntities.js\";\nimport { getQueryFunctionTypes, listQueryFunctionTypes } from \"./loadQueryFunctions.js\";\nimport { planMetaLookup } from \"./planMetaLookup.js\";\nimport type { ActionTypeSearchJsonQueryV2 } from \"@osdk/foundry.ontologies\";\nimport type { OntologyClient } from \"@party-stack/foundry-client\";\nimport type { ObjectSubset } from \"@party-stack/ontology-spec/query\";\nimport type { Predicate } from \"@party-stack/ontology-storage\";\n\nconst failure = (operation: string, cause: unknown) => classifyBackendFailure(operation, cause);\nfunction actionCandidates(predicate?: Predicate): ActionTypeSearchJsonQueryV2 | undefined {\n if (!predicate) return;\n if (predicate.op === \"and\" || predicate.op === \"or\") {\n const children = predicate.predicates.map(actionCandidates);\n if (predicate.op === \"or\" && children.some((child) => child === undefined)) return;\n const supported = children.filter((child) => child !== undefined);\n return supported.length === 1\n ? supported[0]\n : supported.length\n ? { type: predicate.op, value: supported }\n : undefined;\n }\n if (predicate.op === \"in\") {\n const children = predicate.values.map((value) =>\n actionCandidates({ op: \"eq\", left: predicate.left, right: value })\n );\n if (children.every((child) => child !== undefined)) return { type: \"or\", value: children };\n return;\n }\n if (predicate.op !== \"eq\" && predicate.op !== \"like\" && predicate.op !== \"ilike\") return;\n const ref = isField(predicate.left) ? predicate.left : predicate.right;\n const value = ref === predicate.left ? predicate.right : predicate.left;\n if (!isField(ref) || typeof value !== \"string\") return;\n const field = ref.path.join(\".\");\n if (predicate.op === \"eq\" && field === \"id\") return { type: \"actionTypeRid\", value };\n if (field !== \"name\" && field !== \"displayName\") return;\n const type = field === \"name\" ? (\"actionTypeApiName\" as const) : (\"actionTypeDisplayName\" as const);\n const convert = (value: string) => (field === \"name\" ? toFoundryActionTypeName(value) : value);\n if (predicate.op === \"eq\") return { type, value: { type: \"exact\", value: convert(value) } };\n if (value.includes(\"_\") || value.includes(\"\\\\\")) return;\n const children: ActionTypeSearchJsonQueryV2[] = value\n .split(\"%\")\n .filter(Boolean)\n .map((term) => ({ type, value: { type: \"contains\", value: convert(term) } }));\n return children.length === 1 ? children[0] : { type: \"and\", value: children };\n}\nexport function makeFoundryMetadataBackend(options: {\n client: OntologyClient;\n refetchInterval?: number | false;\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: \"foundry-metadata\",\n sourceId: `foundry-metadata:${options.client.baseUrl}:${options.client.ontologyRid}`,\n supportsIdempotency: false,\n applyAction: () => unsupported(\"applyAction\"),\n queryFunction: () => unsupported(\"queryFunction\"),\n refresh: () => ({ pollIntervalMs: options.refetchInterval ?? false }),\n loadSubset: Effect.fn(\"FoundryMetadata.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\", context: foundryContext } }],\n fulfilledSubset: objectSubset(\"Ontology\"),\n };\n const candidates = planMetaLookup(subset.query?.where, { name: \"name\" })?.values;\n const values = yield* Effect.tryPromise({\n try: async (signal) => {\n const client: OntologyClient = {\n ...options.client,\n fetch: (input, init) =>\n options.client.fetch(input, {\n ...init,\n signal: init?.signal ? AbortSignal.any([signal, init.signal]) : signal,\n }),\n };\n if (candidates?.length === 0) return [];\n if (subset.objectType === \"ActionType\") {\n const where = actionCandidates(subset.query?.where);\n const actions = await AsyncIterable.toArray(\n AsyncIterable.fromPagination(\n (pageSize, pageToken: string | undefined) =>\n ActionTypesV2.search(\n client,\n client.ontologyRid,\n { where, pageSize, pageToken, fuzziness: { type: \"off\" } },\n { preview: true }\n ),\n (page) => page.nextPageToken,\n (page) => page.data,\n 100\n )\n );\n const metadata = await loadActionTypesFullMetadata(client, actions);\n const oms = await loadActionTypeOmsMetadata(\n client,\n metadata.map((value) => value.actionType.rid)\n );\n return metadata.map((value) =>\n convertFoundryMetaActionType(value, oms.get(value.actionType.rid))\n );\n }\n if (subset.objectType === \"QueryFunctionType\") {\n const types = candidates\n ? await getQueryFunctionTypes({ client }, candidates)\n : await listQueryFunctionTypes({ client });\n return types.map(convertFoundryMetaQueryFunctionType);\n }\n return subset.objectType === \"ObjectType\"\n ? loadFoundryMetaObjectTypes(client, subset.query?.where)\n : subset.objectType === \"ValueType\"\n ? loadFoundryMetaValueTypes(client, subset.query?.where)\n : loadFoundryMetaLinkTypes(client, subset.query?.where);\n },\n catch: (cause) => failure(\"metadata.load\", cause),\n });\n return {\n complete: true,\n fulfilledSubset: objectSubset(subset.objectType, {\n where: 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: \"Foundry returned invalid metadata.\",\n retryable: false,\n cause: Redacted.make(cause),\n }),\n }),\n };\n }),\n });\n}\n\nexport type FoundryMetadataBackendOptions = Parameters<typeof makeFoundryMetadataBackend>[0];\n"],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { ActionTypeOmsMetadata } from "./loadActionTypeOmsMetadata.js";
|
|
2
2
|
import { ActionTypeFullMetadata } from "@osdk/foundry.ontologies";
|
|
3
|
-
import { ActionTypeDef
|
|
3
|
+
import { ActionTypeDef } from "@party-stack/ontology-spec";
|
|
4
|
+
import { ActionType } from "@party-stack/ontology-spec/meta";
|
|
4
5
|
//#region src/meta/convertMetaActionType.d.ts
|
|
5
6
|
export declare function getFoundryActionOverrideParameterMapping(actionType: ActionTypeDef): {
|
|
6
7
|
uuidByParameterName: Map<string, string>;
|
|
7
8
|
nowParameterName?: string;
|
|
8
9
|
};
|
|
9
|
-
export declare function convertFoundryMetaActionType(actionType: ActionTypeFullMetadata, omsMetadata?: ActionTypeOmsMetadata):
|
|
10
|
+
export declare function convertFoundryMetaActionType(actionType: ActionTypeFullMetadata, omsMetadata?: ActionTypeOmsMetadata): ActionType;
|
|
10
11
|
//#endregion
|
|
11
12
|
//# sourceMappingURL=convertMetaActionType.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaActionType.d.ts","names":[],"sources":["../../src/meta/convertMetaActionType.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"convertMetaActionType.d.ts","names":["MetaActionType"],"sources":["../../src/meta/convertMetaActionType.ts"],"mappings":";;;;;wBA8egB,yCAAyC,YAAY;EACjE,qBAAqB;EACrB;;wBA4RY,6BACZ,YAAY,wBACZ,cAAc,wBACfA"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { FOUNDRY_CURRENT_USER_CONTEXT_FIELD } from "../context.js";
|
|
1
2
|
import { toOntologyActionTypeName } from "../utils/actionTypeName.js";
|
|
2
3
|
import { convertOmsActionParameterDefaults, convertOmsActionParameterStringConstraint, convertOmsActionParameterStringSuggestions } from "./convertOmsActionParameterMetadata.js";
|
|
3
4
|
import { foundryAttachmentMeta } from "./foundryAttachmentMetadata.js";
|
|
4
5
|
import { Temporal } from "temporal-polyfill";
|
|
5
6
|
import { fromBlueprintIconName } from "@party-stack/icons-blueprint";
|
|
6
7
|
//#region src/meta/convertMetaActionType.ts
|
|
7
|
-
const FOUNDRY_CURRENT_USER_CONTEXT_PATH = ["user"];
|
|
8
8
|
const FOUNDRY_UUID_PARAMETER_PREFIX = "__uuid_";
|
|
9
9
|
const FOUNDRY_NOW_PARAMETER_NAME = "__now";
|
|
10
10
|
const FOUNDRY_LIST_ITEM_BINDING = "item";
|
|
@@ -375,7 +375,7 @@ function getAtExpression(source, path) {
|
|
|
375
375
|
}
|
|
376
376
|
function objectField(parameterName, path) {
|
|
377
377
|
return getAtExpression({
|
|
378
|
-
kind: "
|
|
378
|
+
kind: "lookup",
|
|
379
379
|
value: { reference: inputReference(parameterName) }
|
|
380
380
|
}, path);
|
|
381
381
|
}
|
|
@@ -424,7 +424,7 @@ function convertLogicRuleArgument(argument, syntheticParameters) {
|
|
|
424
424
|
};
|
|
425
425
|
case "currentUser": return {
|
|
426
426
|
kind: "contextReference",
|
|
427
|
-
value: { name:
|
|
427
|
+
value: { name: FOUNDRY_CURRENT_USER_CONTEXT_FIELD }
|
|
428
428
|
};
|
|
429
429
|
default: throw new Error(`Unsupported Foundry action argument "${argument.type}".`);
|
|
430
430
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaActionType.js","names":["unsupported"],"sources":["../../src/meta/convertMetaActionType.ts"],"sourcesContent":["import { fromBlueprintIconName } from \"@party-stack/icons-blueprint\";\nimport { Temporal } from \"temporal-polyfill\";\nimport { toOntologyActionTypeName } from \"../utils/actionTypeName.js\";\nimport {\n convertOmsActionParameterDefaults,\n convertOmsActionParameterStringConstraint,\n convertOmsActionParameterStringSuggestions,\n} from \"./convertOmsActionParameterMetadata.js\";\nimport { foundryAttachmentMeta } from \"./foundryAttachmentMetadata.js\";\nimport type { ActionTypeOmsMetadata } from \"./loadActionTypeOmsMetadata.js\";\nimport type {\n ActionLogicRule,\n ActionParameterValidation,\n ActionParameterType,\n ActionTypeFullMetadata,\n LogicRuleArgument,\n OntologyDataType,\n StructFieldArgument,\n} from \"@osdk/foundry.ontologies\";\nimport type {\n ActionParameterDef,\n ActionTypeDef,\n Expression,\n MetaActionType,\n PropertyAssignment,\n StringConstraint,\n StringSuggestion,\n TypeDef,\n} from \"@party-stack/ontology\";\n\nconst FOUNDRY_CURRENT_USER_CONTEXT_PATH = [\"user\"];\nconst FOUNDRY_UUID_PARAMETER_PREFIX = \"__uuid_\";\nconst FOUNDRY_NOW_PARAMETER_NAME = \"__now\";\nconst FOUNDRY_LIST_ITEM_BINDING = \"item\";\n\nfunction maybeOptional(type: TypeDef, required: boolean): TypeDef {\n return required ? type : { kind: \"optional\", value: { type } };\n}\n\nfunction stringType(constraint?: StringConstraint, suggestions?: StringSuggestion[]): TypeDef {\n return {\n kind: \"string\",\n value: {\n constraint,\n suggestions,\n },\n };\n}\n\nfunction applyStringConstraintFallback(type: TypeDef, constraint: StringConstraint | undefined): TypeDef {\n if (!constraint) return type;\n switch (type.kind) {\n case \"string\":\n return type.value.constraint\n ? type\n : {\n ...type,\n value: {\n ...type.value,\n constraint,\n },\n };\n case \"optional\":\n return {\n ...type,\n value: {\n ...type.value,\n type: applyStringConstraintFallback(type.value.type, constraint),\n },\n };\n case \"list\":\n return {\n ...type,\n value: {\n ...type.value,\n elementType: applyStringConstraintFallback(type.value.elementType, constraint),\n },\n };\n default:\n return type;\n }\n}\n\nfunction applyStringSuggestionsFallback(type: TypeDef, suggestions: StringSuggestion[] | undefined): TypeDef {\n if (!suggestions) return type;\n switch (type.kind) {\n case \"string\":\n return type.value.suggestions\n ? type\n : {\n ...type,\n value: {\n ...type.value,\n suggestions,\n },\n };\n case \"optional\":\n return {\n ...type,\n value: {\n ...type.value,\n type: applyStringSuggestionsFallback(type.value.type, suggestions),\n },\n };\n case \"list\":\n return {\n ...type,\n value: {\n ...type.value,\n elementType: applyStringSuggestionsFallback(type.value.elementType, suggestions),\n },\n };\n default:\n return type;\n }\n}\n\nfunction applyOmsStructFieldValidation(\n type: TypeDef,\n omsMetadata: ActionTypeOmsMetadata | undefined,\n parameterName: string\n): TypeDef {\n if (!omsMetadata) return type;\n switch (type.kind) {\n case \"optional\":\n return {\n ...type,\n value: {\n ...type.value,\n type: applyOmsStructFieldValidation(type.value.type, omsMetadata, parameterName),\n },\n };\n case \"list\":\n return {\n ...type,\n value: {\n ...type.value,\n elementType: applyOmsStructFieldValidation(\n type.value.elementType,\n omsMetadata,\n parameterName\n ),\n },\n };\n case \"struct\":\n return {\n ...type,\n value: {\n ...type.value,\n fields: type.value.fields.map((field) => ({\n ...field,\n type: applyStringSuggestionsFallback(\n applyStringConstraintFallback(\n field.type,\n convertOmsActionParameterStringConstraint(\n omsMetadata,\n parameterName,\n field.name\n )\n ),\n convertOmsActionParameterStringSuggestions(omsMetadata, parameterName, field.name)\n ),\n })),\n },\n };\n default:\n return type;\n }\n}\n\nfunction booleanType(): TypeDef {\n return { kind: \"boolean\", value: {} };\n}\n\nfunction integerType(): TypeDef {\n return { kind: \"integer\", value: {} };\n}\n\nfunction floatType(): TypeDef {\n return { kind: \"float\", value: {} };\n}\n\nfunction doubleType(): TypeDef {\n return { kind: \"double\", value: {} };\n}\n\nfunction dateType(): TypeDef {\n return { kind: \"date\", value: {} };\n}\n\nfunction timestampType(): TypeDef {\n return { kind: \"timestamp\", value: {} };\n}\n\nfunction geopointType(): TypeDef {\n return { kind: \"geopoint\", value: {} };\n}\n\nfunction attachmentType(type: \"attachment\" | \"media\"): TypeDef {\n return {\n kind: \"attachment\",\n value: { meta: foundryAttachmentMeta(type) },\n };\n}\n\nfunction createUniqueIdentifierParameterName(linkId: string): string {\n return `${FOUNDRY_UUID_PARAMETER_PREFIX}${encodeURIComponent(linkId)}`;\n}\n\nfunction getUniqueIdentifierLinkIdFromParameterName(parameterName: string): string | undefined {\n if (!parameterName.startsWith(FOUNDRY_UUID_PARAMETER_PREFIX)) {\n return undefined;\n }\n return decodeURIComponent(parameterName.slice(FOUNDRY_UUID_PARAMETER_PREFIX.length));\n}\n\nfunction convertActionParameterType(\n type: ActionParameterType,\n required = true,\n validation?: ActionParameterValidation\n): TypeDef {\n const allowedValues = validation?.defaultValidation.allowedValues;\n if (allowedValues?.type === \"valueType\") {\n return maybeOptional(\n {\n kind: \"ref\",\n value: { name: allowedValues.apiName },\n },\n required\n );\n }\n\n const baseType: TypeDef = (() => {\n switch (type.type) {\n case \"string\":\n // TODO: Convert Foundry \"user input\" parameters to a principal\n // reference once Ontologies V2 exposes that setting in action\n // metadata. It currently returns an unconstrained string.\n // https://valinor-enterprises.slack.com/archives/C08549X3VDM/p1787718253341589\n return stringType(\n convertActionParameterStringConstraint(validation),\n convertActionParameterStringSuggestions(validation)\n );\n case \"boolean\":\n return booleanType();\n case \"integer\":\n case \"long\":\n return integerType();\n case \"double\":\n return doubleType();\n case \"decimal\":\n // Preserve the exact value until Party Stack has a decimal\n // type with explicit precision and scale.\n return stringType();\n case \"date\":\n return dateType();\n case \"timestamp\":\n return timestampType();\n case \"attachment\":\n return attachmentType(\"attachment\");\n case \"mediaReference\":\n return attachmentType(\"media\");\n case \"geohash\":\n return geopointType();\n case \"geoshape\":\n case \"marking\":\n return stringType();\n case \"vector\":\n return {\n kind: \"list\",\n value: { elementType: doubleType() },\n };\n case \"array\":\n return {\n kind: \"list\",\n value: { elementType: convertActionParameterType(type.subType) },\n };\n case \"struct\":\n return {\n kind: \"struct\",\n value: {\n fields: type.fields.map((field, index) => ({\n name: field.name ?? `field${index + 1}`,\n displayName: field.name ?? `Field ${index + 1}`,\n type: convertOntologyDataType(field.fieldType, field.required),\n })),\n },\n };\n case \"object\":\n return {\n kind: \"objectReference\",\n value: { objectType: type.objectTypeApiName },\n };\n case \"objectType\":\n case \"interfaceObject\":\n case \"objectSet\":\n case \"scenarioReference\":\n return stringType();\n default: {\n const unsupported: never = type;\n return unsupported;\n }\n }\n })();\n\n return maybeOptional(baseType, required);\n}\n\nfunction convertActionParameterStringConstraint(\n validation?: ActionParameterValidation\n): StringConstraint | undefined {\n const allowedValues = validation?.defaultValidation.allowedValues;\n if (allowedValues?.type === \"oneOf\" && !allowedValues.otherValuesAllowed) {\n const options = allowedValues.options.flatMap((option) => {\n const value: unknown = option.value;\n return typeof value === \"string\" ? [{ value, label: option.displayName }] : [];\n });\n return options.length > 0\n ? {\n kind: \"enum\",\n value: { options },\n }\n : undefined;\n }\n if (allowedValues?.type === \"text\" && allowedValues.regex) {\n return {\n kind: \"regex\",\n value: { regex: allowedValues.regex },\n };\n }\n return undefined;\n}\n\nfunction convertActionParameterStringSuggestions(\n validation?: ActionParameterValidation\n): StringSuggestion[] | undefined {\n const allowedValues = validation?.defaultValidation.allowedValues;\n if (allowedValues?.type !== \"oneOf\" || !allowedValues.otherValuesAllowed) {\n return undefined;\n }\n const suggestions = allowedValues.options.flatMap((option) => {\n const value: unknown = option.value;\n return typeof value === \"string\"\n ? [\n {\n value,\n label: option.displayName,\n },\n ]\n : [];\n });\n return suggestions.length > 0 ? suggestions : undefined;\n}\n\nfunction convertOntologyDataType(type: OntologyDataType, required = true): TypeDef {\n const baseType: TypeDef = (() => {\n switch (type.type) {\n case \"string\":\n return stringType();\n case \"boolean\":\n return booleanType();\n case \"byte\":\n case \"short\":\n case \"integer\":\n case \"long\":\n return integerType();\n case \"float\":\n return floatType();\n case \"double\":\n case \"decimal\":\n return doubleType();\n case \"date\":\n return dateType();\n case \"timestamp\":\n return timestampType();\n case \"binary\":\n return attachmentType(\"attachment\");\n case \"mediaReference\":\n return attachmentType(\"media\");\n case \"array\":\n case \"set\":\n return {\n kind: \"list\",\n value: { elementType: convertOntologyDataType(type.itemType) },\n };\n case \"struct\":\n return {\n kind: \"struct\",\n value: {\n fields: type.fields.map((field, index) => ({\n name: field.name ?? `field${index + 1}`,\n displayName: field.name ?? `Field ${index + 1}`,\n type: convertOntologyDataType(field.fieldType, field.required),\n })),\n },\n };\n case \"object\":\n return {\n kind: \"objectReference\",\n value: { objectType: type.objectTypeApiName },\n };\n default:\n return stringType();\n }\n })();\n\n return maybeOptional(baseType, required);\n}\n\nfunction collectRuleArguments(rule: ActionLogicRule): Array<LogicRuleArgument | StructFieldArgument> {\n switch (rule.type) {\n case \"createObject\":\n case \"modifyObject\":\n return [\n ...Object.values(rule.propertyArguments),\n ...Object.values(rule.structPropertyArguments).flatMap((fields) => Object.values(fields)),\n ];\n default:\n return [];\n }\n}\n\nfunction collectMutationTargetParameterNames(rules: ActionLogicRule[]): Set<string> {\n const parameterNames = new Set<string>();\n for (const rule of rules) {\n switch (rule.type) {\n case \"modifyObject\":\n parameterNames.add(rule.objectToModify);\n break;\n case \"deleteObject\":\n parameterNames.add(rule.objectToDelete);\n break;\n }\n }\n return parameterNames;\n}\n\nfunction requireObjectReferenceMutationTarget(type: TypeDef, isMutationTarget: boolean): TypeDef {\n return isMutationTarget && type.kind === \"optional\" && type.value.type.kind === \"objectReference\"\n ? type.value.type\n : type;\n}\n\nfunction createSyntheticParameters(actionType: ActionTypeFullMetadata): {\n parameters: ActionParameterDef[];\n uniqueIdentifierParametersByLinkId: Map<string, string>;\n nowParameterName?: string;\n} {\n const uniqueIdentifierParametersByLinkId = new Map<string, string>();\n let nowParameterName: string | undefined;\n\n for (const rule of actionType.fullLogicRules) {\n for (const argument of collectRuleArguments(rule)) {\n if (argument.type === \"uniqueIdentifier\" && argument.linkId) {\n if (!uniqueIdentifierParametersByLinkId.has(argument.linkId)) {\n uniqueIdentifierParametersByLinkId.set(\n argument.linkId,\n createUniqueIdentifierParameterName(argument.linkId)\n );\n }\n }\n if (argument.type === \"currentTime\" && !nowParameterName) {\n nowParameterName = FOUNDRY_NOW_PARAMETER_NAME;\n }\n }\n }\n\n const parameters: ActionParameterDef[] = Array.from(uniqueIdentifierParametersByLinkId.values()).map(\n (name, index): ActionParameterDef => ({\n name,\n displayName: `Generated UUID ${index + 1}`,\n type: { kind: \"string\", value: {} },\n defaultValue: {\n kind: \"uuid\",\n value: {},\n },\n })\n );\n\n if (nowParameterName) {\n parameters.push({\n name: nowParameterName,\n displayName: \"Current time\",\n type: { kind: \"timestamp\", value: {} },\n defaultValue: {\n kind: \"now\",\n value: {},\n },\n });\n }\n\n return { parameters, uniqueIdentifierParametersByLinkId, nowParameterName };\n}\n\nexport function getFoundryActionOverrideParameterMapping(actionType: ActionTypeDef): {\n uuidByParameterName: Map<string, string>;\n nowParameterName?: string;\n} {\n const uuidByParameterName = new Map<string, string>();\n let nowParameterName: string | undefined;\n\n for (const parameter of actionType.parameters) {\n if (parameter.defaultValue?.kind !== \"uuid\" && parameter.defaultValue?.kind !== \"now\") {\n continue;\n }\n switch (parameter.defaultValue.kind) {\n case \"uuid\": {\n const linkId = getUniqueIdentifierLinkIdFromParameterName(parameter.name);\n if (linkId) {\n uuidByParameterName.set(parameter.name, linkId);\n }\n break;\n }\n case \"now\":\n nowParameterName ??= parameter.name;\n break;\n }\n }\n\n return { uuidByParameterName, nowParameterName };\n}\n\nfunction inputReference(name: string): Expression {\n return {\n kind: \"inputReference\",\n value: { name },\n };\n}\n\nfunction getAtExpression(source: Expression, path: string[]): Expression {\n return {\n kind: \"getAt\",\n value: { source, path },\n };\n}\n\nfunction objectField(parameterName: string, path: string[]): Expression {\n return getAtExpression(\n {\n kind: \"objectLookup\",\n value: {\n reference: inputReference(parameterName),\n },\n },\n path\n );\n}\n\n// TODO: This uses regex heuristics to infer the type of static literal values without\n// knowing the target property type. We should eventually resolve the target property's\n// TypeDef from the object type definition so we decode accurately instead of guessing\n// from the string format.\nconst ISO_TIMESTAMP_RE = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}/;\nconst ISO_DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\nconst GEO_POINT_RE = /^(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)$/;\n\nfunction decodeLiteralValue(value: unknown): unknown {\n if (typeof value !== \"string\") {\n return value;\n }\n\n if (ISO_TIMESTAMP_RE.test(value)) {\n try {\n return Temporal.Instant.from(value);\n } catch {\n return value;\n }\n }\n\n if (ISO_DATE_RE.test(value)) {\n try {\n return Temporal.PlainDate.from(value);\n } catch {\n return value;\n }\n }\n\n const geoMatch = GEO_POINT_RE.exec(value);\n if (geoMatch) {\n return { lat: Number(geoMatch[1]), lon: Number(geoMatch[2]) };\n }\n\n return value;\n}\n\nfunction convertLogicRuleArgument(\n argument: LogicRuleArgument | StructFieldArgument,\n syntheticParameters: {\n uniqueIdentifierParametersByLinkId: Map<string, string>;\n nowParameterName?: string;\n }\n): Expression {\n switch (argument.type) {\n case \"parameterId\":\n return inputReference(argument.parameterId);\n case \"objectParameterPropertyValue\":\n return objectField(argument.parameterId, [argument.propertyTypeApiName]);\n case \"structParameterFieldValue\":\n return getAtExpression(inputReference(argument.parameterId), [\n argument.structParameterFieldApiName,\n ]);\n case \"structListParameterFieldValue\":\n throw new Error(\"Foundry list-of-struct field arguments must be converted as a list mapping.\");\n case \"uniqueIdentifier\": {\n const parameterName = argument.linkId\n ? syntheticParameters.uniqueIdentifierParametersByLinkId.get(argument.linkId)\n : undefined;\n return parameterName\n ? inputReference(parameterName)\n : {\n kind: \"uuid\",\n value: {},\n };\n }\n case \"currentTime\":\n return syntheticParameters.nowParameterName\n ? inputReference(syntheticParameters.nowParameterName)\n : {\n kind: \"now\",\n value: {},\n };\n case \"staticValue\":\n return {\n kind: \"literal\",\n value: { value: decodeLiteralValue(argument.value) },\n };\n case \"currentUser\":\n return {\n kind: \"contextReference\",\n value: { name: FOUNDRY_CURRENT_USER_CONTEXT_PATH[0]! },\n };\n default:\n throw new Error(`Unsupported Foundry action argument \"${argument.type}\".`);\n }\n}\n\nfunction convertAssignments(\n rule: Extract<ActionLogicRule, { type: \"createObject\" | \"modifyObject\" }>,\n parameters: ActionTypeFullMetadata[\"actionType\"][\"parameters\"],\n syntheticParameters: {\n uniqueIdentifierParametersByLinkId: Map<string, string>;\n nowParameterName?: string;\n }\n): PropertyAssignment[] {\n return [\n ...Object.entries(rule.propertyArguments).map(([property, argument]) => ({\n property: [property],\n value: convertLogicRuleArgument(argument, syntheticParameters),\n })),\n ...Object.entries(rule.structPropertyArguments).flatMap(([property, fields]) =>\n convertStructPropertyAssignments(property, fields, parameters, syntheticParameters)\n ),\n ];\n}\n\nfunction unsupportedListStructAssignment(property: string, reason: string): never {\n throw new Error(\n `Unsupported Foundry list-of-struct assignment for property \"${property}\": ${reason}. ` +\n \"Party Stack only supports mappings driven by one list-of-struct parameter.\"\n );\n}\n\nfunction convertStructPropertyAssignments(\n property: string,\n fields: Record<string, StructFieldArgument>,\n parameters: ActionTypeFullMetadata[\"actionType\"][\"parameters\"],\n syntheticParameters: {\n uniqueIdentifierParametersByLinkId: Map<string, string>;\n nowParameterName?: string;\n }\n): PropertyAssignment[] {\n const entries = Object.entries(fields);\n const listEntries = entries.filter(\n (entry): entry is [string, Extract<StructFieldArgument, { type: \"structListParameterFieldValue\" }>] =>\n entry[1].type === \"structListParameterFieldValue\"\n );\n\n if (listEntries.length === 0) {\n return entries.map(([field, argument]) => ({\n property: [property, field],\n value: convertLogicRuleArgument(argument, syntheticParameters),\n }));\n }\n\n if (listEntries.length !== entries.length) {\n return unsupportedListStructAssignment(\n property,\n \"list fields are mixed with non-list struct field arguments\"\n );\n }\n\n const parameterIds = new Set(listEntries.map(([, argument]) => argument.parameterId));\n if (parameterIds.size !== 1) {\n return unsupportedListStructAssignment(property, \"fields are mapped from multiple list parameters\");\n }\n\n const parameterId = listEntries[0]![1].parameterId;\n const parameter = parameters[parameterId];\n if (parameter?.dataType.type !== \"array\" || parameter.dataType.subType.type !== \"struct\") {\n return unsupportedListStructAssignment(\n property,\n `source parameter \"${parameterId}\" is not a list of structs`\n );\n }\n\n return [\n {\n property: [property],\n value: {\n kind: \"map\",\n value: {\n source: inputReference(parameterId),\n binding: FOUNDRY_LIST_ITEM_BINDING,\n body: {\n kind: \"struct\",\n value: {\n fields: entries.map(([field, argument]) => ({\n name: field,\n value:\n argument.type === \"structListParameterFieldValue\"\n ? getAtExpression(\n {\n kind: \"localReference\",\n value: {\n name: FOUNDRY_LIST_ITEM_BINDING,\n },\n },\n [argument.structParameterFieldApiName]\n )\n : convertLogicRuleArgument(argument, syntheticParameters),\n })),\n },\n },\n },\n },\n },\n ];\n}\n\nfunction convertLogicStep(\n rule: ActionLogicRule,\n parameters: ActionTypeFullMetadata[\"actionType\"][\"parameters\"],\n syntheticParameters: {\n uniqueIdentifierParametersByLinkId: Map<string, string>;\n nowParameterName?: string;\n }\n): ActionTypeDef[\"logic\"][number] | null {\n switch (rule.type) {\n case \"createObject\":\n return {\n kind: \"createObject\",\n value: {\n objectType: rule.objectTypeApiName,\n values: convertAssignments(rule, parameters, syntheticParameters),\n },\n };\n case \"modifyObject\":\n return {\n kind: \"updateObject\",\n value: {\n object: {\n name: rule.objectToModify,\n },\n values: convertAssignments(rule, parameters, syntheticParameters),\n },\n };\n case \"deleteObject\":\n return {\n kind: \"deleteObject\",\n value: {\n object: {\n name: rule.objectToDelete,\n },\n },\n };\n default:\n return null;\n }\n}\n\nexport function convertFoundryMetaActionType(\n actionType: ActionTypeFullMetadata,\n omsMetadata?: ActionTypeOmsMetadata\n): MetaActionType {\n const syntheticParameters = createSyntheticParameters(actionType);\n const mutationTargetParameterNames = collectMutationTargetParameterNames(actionType.fullLogicRules);\n const fullLogicRules = actionType.fullLogicRules\n .map((rule) => convertLogicStep(rule, actionType.actionType.parameters, syntheticParameters))\n .filter((rule): rule is NonNullable<typeof rule> => rule !== null);\n const parameters = Object.entries(actionType.actionType.parameters).map(\n ([name, parameter]): ActionParameterDef => {\n const type = requireObjectReferenceMutationTarget(\n convertActionParameterType(parameter.dataType, parameter.required, parameter.validation),\n mutationTargetParameterNames.has(name)\n );\n return {\n name,\n displayName: parameter.displayName ?? name,\n type: applyStringSuggestionsFallback(\n applyStringConstraintFallback(\n applyOmsStructFieldValidation(type, omsMetadata, name),\n convertOmsActionParameterStringConstraint(omsMetadata, name)\n ),\n convertOmsActionParameterStringSuggestions(omsMetadata, name)\n ),\n description: parameter.description,\n };\n }\n );\n const defaultsByParameter = convertOmsActionParameterDefaults(omsMetadata, parameters);\n const foundryIcon = omsMetadata?.actionType.metadata?.displayMetadata?.icon;\n\n return {\n id: actionType.actionType.rid,\n name: toOntologyActionTypeName(actionType.actionType.apiName),\n displayName: actionType.actionType.displayName ?? actionType.actionType.apiName,\n description: actionType.actionType.description,\n icon:\n foundryIcon?.type === \"blueprint\"\n ? fromBlueprintIconName(foundryIcon.blueprint.locator)\n : undefined,\n color: foundryIcon?.type === \"blueprint\" ? foundryIcon.blueprint.color : undefined,\n deprecated:\n actionType.actionType.status === \"DEPRECATED\" ? { message: \"Deprecated in Foundry.\" } : undefined,\n parameters: [\n ...parameters.map((parameter) => ({\n ...parameter,\n defaultValue: defaultsByParameter.get(parameter.name),\n })),\n ...syntheticParameters.parameters,\n ],\n logic: fullLogicRules,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"convertMetaActionType.js","names":["unsupported"],"sources":["../../src/meta/convertMetaActionType.ts"],"sourcesContent":["import { fromBlueprintIconName } from \"@party-stack/icons-blueprint\";\nimport { Temporal } from \"temporal-polyfill\";\nimport { FOUNDRY_CURRENT_USER_CONTEXT_FIELD } from \"../context.js\";\nimport { toOntologyActionTypeName } from \"../utils/actionTypeName.js\";\nimport {\n convertOmsActionParameterDefaults,\n convertOmsActionParameterStringConstraint,\n convertOmsActionParameterStringSuggestions,\n} from \"./convertOmsActionParameterMetadata.js\";\nimport { foundryAttachmentMeta } from \"./foundryAttachmentMetadata.js\";\nimport type { ActionTypeOmsMetadata } from \"./loadActionTypeOmsMetadata.js\";\nimport type {\n ActionLogicRule,\n ActionParameterValidation,\n ActionParameterType,\n ActionTypeFullMetadata,\n LogicRuleArgument,\n OntologyDataType,\n StructFieldArgument,\n} from \"@osdk/foundry.ontologies\";\nimport type {\n ActionParameterDef,\n ActionTypeDef,\n Expression,\n PropertyAssignment,\n StringConstraint,\n StringSuggestion,\n TypeDef,\n} from \"@party-stack/ontology-spec\";\nimport type { ActionType as MetaActionType } from \"@party-stack/ontology-spec/meta\";\n\nconst FOUNDRY_UUID_PARAMETER_PREFIX = \"__uuid_\";\nconst FOUNDRY_NOW_PARAMETER_NAME = \"__now\";\nconst FOUNDRY_LIST_ITEM_BINDING = \"item\";\n\nfunction maybeOptional(type: TypeDef, required: boolean): TypeDef {\n return required ? type : { kind: \"optional\", value: { type } };\n}\n\nfunction stringType(constraint?: StringConstraint, suggestions?: StringSuggestion[]): TypeDef {\n return {\n kind: \"string\",\n value: {\n constraint,\n suggestions,\n },\n };\n}\n\nfunction applyStringConstraintFallback(type: TypeDef, constraint: StringConstraint | undefined): TypeDef {\n if (!constraint) return type;\n switch (type.kind) {\n case \"string\":\n return type.value.constraint\n ? type\n : {\n ...type,\n value: {\n ...type.value,\n constraint,\n },\n };\n case \"optional\":\n return {\n ...type,\n value: {\n ...type.value,\n type: applyStringConstraintFallback(type.value.type, constraint),\n },\n };\n case \"list\":\n return {\n ...type,\n value: {\n ...type.value,\n elementType: applyStringConstraintFallback(type.value.elementType, constraint),\n },\n };\n default:\n return type;\n }\n}\n\nfunction applyStringSuggestionsFallback(type: TypeDef, suggestions: StringSuggestion[] | undefined): TypeDef {\n if (!suggestions) return type;\n switch (type.kind) {\n case \"string\":\n return type.value.suggestions\n ? type\n : {\n ...type,\n value: {\n ...type.value,\n suggestions,\n },\n };\n case \"optional\":\n return {\n ...type,\n value: {\n ...type.value,\n type: applyStringSuggestionsFallback(type.value.type, suggestions),\n },\n };\n case \"list\":\n return {\n ...type,\n value: {\n ...type.value,\n elementType: applyStringSuggestionsFallback(type.value.elementType, suggestions),\n },\n };\n default:\n return type;\n }\n}\n\nfunction applyOmsStructFieldValidation(\n type: TypeDef,\n omsMetadata: ActionTypeOmsMetadata | undefined,\n parameterName: string\n): TypeDef {\n if (!omsMetadata) return type;\n switch (type.kind) {\n case \"optional\":\n return {\n ...type,\n value: {\n ...type.value,\n type: applyOmsStructFieldValidation(type.value.type, omsMetadata, parameterName),\n },\n };\n case \"list\":\n return {\n ...type,\n value: {\n ...type.value,\n elementType: applyOmsStructFieldValidation(\n type.value.elementType,\n omsMetadata,\n parameterName\n ),\n },\n };\n case \"struct\":\n return {\n ...type,\n value: {\n ...type.value,\n fields: type.value.fields.map((field) => ({\n ...field,\n type: applyStringSuggestionsFallback(\n applyStringConstraintFallback(\n field.type,\n convertOmsActionParameterStringConstraint(\n omsMetadata,\n parameterName,\n field.name\n )\n ),\n convertOmsActionParameterStringSuggestions(omsMetadata, parameterName, field.name)\n ),\n })),\n },\n };\n default:\n return type;\n }\n}\n\nfunction booleanType(): TypeDef {\n return { kind: \"boolean\", value: {} };\n}\n\nfunction integerType(): TypeDef {\n return { kind: \"integer\", value: {} };\n}\n\nfunction floatType(): TypeDef {\n return { kind: \"float\", value: {} };\n}\n\nfunction doubleType(): TypeDef {\n return { kind: \"double\", value: {} };\n}\n\nfunction dateType(): TypeDef {\n return { kind: \"date\", value: {} };\n}\n\nfunction timestampType(): TypeDef {\n return { kind: \"timestamp\", value: {} };\n}\n\nfunction geopointType(): TypeDef {\n return { kind: \"geopoint\", value: {} };\n}\n\nfunction attachmentType(type: \"attachment\" | \"media\"): TypeDef {\n return {\n kind: \"attachment\",\n value: { meta: foundryAttachmentMeta(type) },\n };\n}\n\nfunction createUniqueIdentifierParameterName(linkId: string): string {\n return `${FOUNDRY_UUID_PARAMETER_PREFIX}${encodeURIComponent(linkId)}`;\n}\n\nfunction getUniqueIdentifierLinkIdFromParameterName(parameterName: string): string | undefined {\n if (!parameterName.startsWith(FOUNDRY_UUID_PARAMETER_PREFIX)) {\n return undefined;\n }\n return decodeURIComponent(parameterName.slice(FOUNDRY_UUID_PARAMETER_PREFIX.length));\n}\n\nfunction convertActionParameterType(\n type: ActionParameterType,\n required = true,\n validation?: ActionParameterValidation\n): TypeDef {\n const allowedValues = validation?.defaultValidation.allowedValues;\n if (allowedValues?.type === \"valueType\") {\n return maybeOptional(\n {\n kind: \"ref\",\n value: { name: allowedValues.apiName },\n },\n required\n );\n }\n\n const baseType: TypeDef = (() => {\n switch (type.type) {\n case \"string\":\n // TODO: Convert Foundry \"user input\" parameters to a principal\n // reference once Ontologies V2 exposes that setting in action\n // metadata. It currently returns an unconstrained string.\n // https://valinor-enterprises.slack.com/archives/C08549X3VDM/p1787718253341589\n return stringType(\n convertActionParameterStringConstraint(validation),\n convertActionParameterStringSuggestions(validation)\n );\n case \"boolean\":\n return booleanType();\n case \"integer\":\n case \"long\":\n return integerType();\n case \"double\":\n return doubleType();\n case \"decimal\":\n // Preserve the exact value until Party Stack has a decimal\n // type with explicit precision and scale.\n return stringType();\n case \"date\":\n return dateType();\n case \"timestamp\":\n return timestampType();\n case \"attachment\":\n return attachmentType(\"attachment\");\n case \"mediaReference\":\n return attachmentType(\"media\");\n case \"geohash\":\n return geopointType();\n case \"geoshape\":\n case \"marking\":\n return stringType();\n case \"vector\":\n return {\n kind: \"list\",\n value: { elementType: doubleType() },\n };\n case \"array\":\n return {\n kind: \"list\",\n value: { elementType: convertActionParameterType(type.subType) },\n };\n case \"struct\":\n return {\n kind: \"struct\",\n value: {\n fields: type.fields.map((field, index) => ({\n name: field.name ?? `field${index + 1}`,\n displayName: field.name ?? `Field ${index + 1}`,\n type: convertOntologyDataType(field.fieldType, field.required),\n })),\n },\n };\n case \"object\":\n return {\n kind: \"objectReference\",\n value: { objectType: type.objectTypeApiName },\n };\n case \"objectType\":\n case \"interfaceObject\":\n case \"objectSet\":\n case \"scenarioReference\":\n return stringType();\n default: {\n const unsupported: never = type;\n return unsupported;\n }\n }\n })();\n\n return maybeOptional(baseType, required);\n}\n\nfunction convertActionParameterStringConstraint(\n validation?: ActionParameterValidation\n): StringConstraint | undefined {\n const allowedValues = validation?.defaultValidation.allowedValues;\n if (allowedValues?.type === \"oneOf\" && !allowedValues.otherValuesAllowed) {\n const options = allowedValues.options.flatMap((option) => {\n const value: unknown = option.value;\n return typeof value === \"string\" ? [{ value, label: option.displayName }] : [];\n });\n return options.length > 0\n ? {\n kind: \"enum\",\n value: { options },\n }\n : undefined;\n }\n if (allowedValues?.type === \"text\" && allowedValues.regex) {\n return {\n kind: \"regex\",\n value: { regex: allowedValues.regex },\n };\n }\n return undefined;\n}\n\nfunction convertActionParameterStringSuggestions(\n validation?: ActionParameterValidation\n): StringSuggestion[] | undefined {\n const allowedValues = validation?.defaultValidation.allowedValues;\n if (allowedValues?.type !== \"oneOf\" || !allowedValues.otherValuesAllowed) {\n return undefined;\n }\n const suggestions = allowedValues.options.flatMap((option) => {\n const value: unknown = option.value;\n return typeof value === \"string\"\n ? [\n {\n value,\n label: option.displayName,\n },\n ]\n : [];\n });\n return suggestions.length > 0 ? suggestions : undefined;\n}\n\nfunction convertOntologyDataType(type: OntologyDataType, required = true): TypeDef {\n const baseType: TypeDef = (() => {\n switch (type.type) {\n case \"string\":\n return stringType();\n case \"boolean\":\n return booleanType();\n case \"byte\":\n case \"short\":\n case \"integer\":\n case \"long\":\n return integerType();\n case \"float\":\n return floatType();\n case \"double\":\n case \"decimal\":\n return doubleType();\n case \"date\":\n return dateType();\n case \"timestamp\":\n return timestampType();\n case \"binary\":\n return attachmentType(\"attachment\");\n case \"mediaReference\":\n return attachmentType(\"media\");\n case \"array\":\n case \"set\":\n return {\n kind: \"list\",\n value: { elementType: convertOntologyDataType(type.itemType) },\n };\n case \"struct\":\n return {\n kind: \"struct\",\n value: {\n fields: type.fields.map((field, index) => ({\n name: field.name ?? `field${index + 1}`,\n displayName: field.name ?? `Field ${index + 1}`,\n type: convertOntologyDataType(field.fieldType, field.required),\n })),\n },\n };\n case \"object\":\n return {\n kind: \"objectReference\",\n value: { objectType: type.objectTypeApiName },\n };\n default:\n return stringType();\n }\n })();\n\n return maybeOptional(baseType, required);\n}\n\nfunction collectRuleArguments(rule: ActionLogicRule): Array<LogicRuleArgument | StructFieldArgument> {\n switch (rule.type) {\n case \"createObject\":\n case \"modifyObject\":\n return [\n ...Object.values(rule.propertyArguments),\n ...Object.values(rule.structPropertyArguments).flatMap((fields) => Object.values(fields)),\n ];\n default:\n return [];\n }\n}\n\nfunction collectMutationTargetParameterNames(rules: ActionLogicRule[]): Set<string> {\n const parameterNames = new Set<string>();\n for (const rule of rules) {\n switch (rule.type) {\n case \"modifyObject\":\n parameterNames.add(rule.objectToModify);\n break;\n case \"deleteObject\":\n parameterNames.add(rule.objectToDelete);\n break;\n }\n }\n return parameterNames;\n}\n\nfunction requireObjectReferenceMutationTarget(type: TypeDef, isMutationTarget: boolean): TypeDef {\n return isMutationTarget && type.kind === \"optional\" && type.value.type.kind === \"objectReference\"\n ? type.value.type\n : type;\n}\n\nfunction createSyntheticParameters(actionType: ActionTypeFullMetadata): {\n parameters: ActionParameterDef[];\n uniqueIdentifierParametersByLinkId: Map<string, string>;\n nowParameterName?: string;\n} {\n const uniqueIdentifierParametersByLinkId = new Map<string, string>();\n let nowParameterName: string | undefined;\n\n for (const rule of actionType.fullLogicRules) {\n for (const argument of collectRuleArguments(rule)) {\n if (argument.type === \"uniqueIdentifier\" && argument.linkId) {\n if (!uniqueIdentifierParametersByLinkId.has(argument.linkId)) {\n uniqueIdentifierParametersByLinkId.set(\n argument.linkId,\n createUniqueIdentifierParameterName(argument.linkId)\n );\n }\n }\n if (argument.type === \"currentTime\" && !nowParameterName) {\n nowParameterName = FOUNDRY_NOW_PARAMETER_NAME;\n }\n }\n }\n\n const parameters: ActionParameterDef[] = Array.from(uniqueIdentifierParametersByLinkId.values()).map(\n (name, index): ActionParameterDef => ({\n name,\n displayName: `Generated UUID ${index + 1}`,\n type: { kind: \"string\", value: {} },\n defaultValue: {\n kind: \"uuid\",\n value: {},\n },\n })\n );\n\n if (nowParameterName) {\n parameters.push({\n name: nowParameterName,\n displayName: \"Current time\",\n type: { kind: \"timestamp\", value: {} },\n defaultValue: {\n kind: \"now\",\n value: {},\n },\n });\n }\n\n return { parameters, uniqueIdentifierParametersByLinkId, nowParameterName };\n}\n\nexport function getFoundryActionOverrideParameterMapping(actionType: ActionTypeDef): {\n uuidByParameterName: Map<string, string>;\n nowParameterName?: string;\n} {\n const uuidByParameterName = new Map<string, string>();\n let nowParameterName: string | undefined;\n\n for (const parameter of actionType.parameters) {\n if (parameter.defaultValue?.kind !== \"uuid\" && parameter.defaultValue?.kind !== \"now\") {\n continue;\n }\n switch (parameter.defaultValue.kind) {\n case \"uuid\": {\n const linkId = getUniqueIdentifierLinkIdFromParameterName(parameter.name);\n if (linkId) {\n uuidByParameterName.set(parameter.name, linkId);\n }\n break;\n }\n case \"now\":\n nowParameterName ??= parameter.name;\n break;\n }\n }\n\n return { uuidByParameterName, nowParameterName };\n}\n\nfunction inputReference(name: string): Expression {\n return {\n kind: \"inputReference\",\n value: { name },\n };\n}\n\nfunction getAtExpression(source: Expression, path: string[]): Expression {\n return {\n kind: \"getAt\",\n value: { source, path },\n };\n}\n\nfunction objectField(parameterName: string, path: string[]): Expression {\n return getAtExpression(\n {\n kind: \"lookup\",\n value: {\n reference: inputReference(parameterName),\n },\n },\n path\n );\n}\n\n// TODO: This uses regex heuristics to infer the type of static literal values without\n// knowing the target property type. We should eventually resolve the target property's\n// TypeDef from the object type definition so we decode accurately instead of guessing\n// from the string format.\nconst ISO_TIMESTAMP_RE = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}/;\nconst ISO_DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\nconst GEO_POINT_RE = /^(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)$/;\n\nfunction decodeLiteralValue(value: unknown): unknown {\n if (typeof value !== \"string\") {\n return value;\n }\n\n if (ISO_TIMESTAMP_RE.test(value)) {\n try {\n return Temporal.Instant.from(value);\n } catch {\n return value;\n }\n }\n\n if (ISO_DATE_RE.test(value)) {\n try {\n return Temporal.PlainDate.from(value);\n } catch {\n return value;\n }\n }\n\n const geoMatch = GEO_POINT_RE.exec(value);\n if (geoMatch) {\n return { lat: Number(geoMatch[1]), lon: Number(geoMatch[2]) };\n }\n\n return value;\n}\n\nfunction convertLogicRuleArgument(\n argument: LogicRuleArgument | StructFieldArgument,\n syntheticParameters: {\n uniqueIdentifierParametersByLinkId: Map<string, string>;\n nowParameterName?: string;\n }\n): Expression {\n switch (argument.type) {\n case \"parameterId\":\n return inputReference(argument.parameterId);\n case \"objectParameterPropertyValue\":\n return objectField(argument.parameterId, [argument.propertyTypeApiName]);\n case \"structParameterFieldValue\":\n return getAtExpression(inputReference(argument.parameterId), [\n argument.structParameterFieldApiName,\n ]);\n case \"structListParameterFieldValue\":\n throw new Error(\"Foundry list-of-struct field arguments must be converted as a list mapping.\");\n case \"uniqueIdentifier\": {\n const parameterName = argument.linkId\n ? syntheticParameters.uniqueIdentifierParametersByLinkId.get(argument.linkId)\n : undefined;\n return parameterName\n ? inputReference(parameterName)\n : {\n kind: \"uuid\",\n value: {},\n };\n }\n case \"currentTime\":\n return syntheticParameters.nowParameterName\n ? inputReference(syntheticParameters.nowParameterName)\n : {\n kind: \"now\",\n value: {},\n };\n case \"staticValue\":\n return {\n kind: \"literal\",\n value: { value: decodeLiteralValue(argument.value) },\n };\n case \"currentUser\":\n return {\n kind: \"contextReference\",\n value: { name: FOUNDRY_CURRENT_USER_CONTEXT_FIELD },\n };\n default:\n throw new Error(`Unsupported Foundry action argument \"${argument.type}\".`);\n }\n}\n\nfunction convertAssignments(\n rule: Extract<ActionLogicRule, { type: \"createObject\" | \"modifyObject\" }>,\n parameters: ActionTypeFullMetadata[\"actionType\"][\"parameters\"],\n syntheticParameters: {\n uniqueIdentifierParametersByLinkId: Map<string, string>;\n nowParameterName?: string;\n }\n): PropertyAssignment[] {\n return [\n ...Object.entries(rule.propertyArguments).map(([property, argument]) => ({\n property: [property],\n value: convertLogicRuleArgument(argument, syntheticParameters),\n })),\n ...Object.entries(rule.structPropertyArguments).flatMap(([property, fields]) =>\n convertStructPropertyAssignments(property, fields, parameters, syntheticParameters)\n ),\n ];\n}\n\nfunction unsupportedListStructAssignment(property: string, reason: string): never {\n throw new Error(\n `Unsupported Foundry list-of-struct assignment for property \"${property}\": ${reason}. ` +\n \"Party Stack only supports mappings driven by one list-of-struct parameter.\"\n );\n}\n\nfunction convertStructPropertyAssignments(\n property: string,\n fields: Record<string, StructFieldArgument>,\n parameters: ActionTypeFullMetadata[\"actionType\"][\"parameters\"],\n syntheticParameters: {\n uniqueIdentifierParametersByLinkId: Map<string, string>;\n nowParameterName?: string;\n }\n): PropertyAssignment[] {\n const entries = Object.entries(fields);\n const listEntries = entries.filter(\n (entry): entry is [string, Extract<StructFieldArgument, { type: \"structListParameterFieldValue\" }>] =>\n entry[1].type === \"structListParameterFieldValue\"\n );\n\n if (listEntries.length === 0) {\n return entries.map(([field, argument]) => ({\n property: [property, field],\n value: convertLogicRuleArgument(argument, syntheticParameters),\n }));\n }\n\n if (listEntries.length !== entries.length) {\n return unsupportedListStructAssignment(\n property,\n \"list fields are mixed with non-list struct field arguments\"\n );\n }\n\n const parameterIds = new Set(listEntries.map(([, argument]) => argument.parameterId));\n if (parameterIds.size !== 1) {\n return unsupportedListStructAssignment(property, \"fields are mapped from multiple list parameters\");\n }\n\n const parameterId = listEntries[0]![1].parameterId;\n const parameter = parameters[parameterId];\n if (parameter?.dataType.type !== \"array\" || parameter.dataType.subType.type !== \"struct\") {\n return unsupportedListStructAssignment(\n property,\n `source parameter \"${parameterId}\" is not a list of structs`\n );\n }\n\n return [\n {\n property: [property],\n value: {\n kind: \"map\",\n value: {\n source: inputReference(parameterId),\n binding: FOUNDRY_LIST_ITEM_BINDING,\n body: {\n kind: \"struct\",\n value: {\n fields: entries.map(([field, argument]) => ({\n name: field,\n value:\n argument.type === \"structListParameterFieldValue\"\n ? getAtExpression(\n {\n kind: \"localReference\",\n value: {\n name: FOUNDRY_LIST_ITEM_BINDING,\n },\n },\n [argument.structParameterFieldApiName]\n )\n : convertLogicRuleArgument(argument, syntheticParameters),\n })),\n },\n },\n },\n },\n },\n ];\n}\n\nfunction convertLogicStep(\n rule: ActionLogicRule,\n parameters: ActionTypeFullMetadata[\"actionType\"][\"parameters\"],\n syntheticParameters: {\n uniqueIdentifierParametersByLinkId: Map<string, string>;\n nowParameterName?: string;\n }\n): ActionTypeDef[\"logic\"][number] | null {\n switch (rule.type) {\n case \"createObject\":\n return {\n kind: \"createObject\",\n value: {\n objectType: rule.objectTypeApiName,\n values: convertAssignments(rule, parameters, syntheticParameters),\n },\n };\n case \"modifyObject\":\n return {\n kind: \"updateObject\",\n value: {\n object: {\n name: rule.objectToModify,\n },\n values: convertAssignments(rule, parameters, syntheticParameters),\n },\n };\n case \"deleteObject\":\n return {\n kind: \"deleteObject\",\n value: {\n object: {\n name: rule.objectToDelete,\n },\n },\n };\n default:\n return null;\n }\n}\n\nexport function convertFoundryMetaActionType(\n actionType: ActionTypeFullMetadata,\n omsMetadata?: ActionTypeOmsMetadata\n): MetaActionType {\n const syntheticParameters = createSyntheticParameters(actionType);\n const mutationTargetParameterNames = collectMutationTargetParameterNames(actionType.fullLogicRules);\n const fullLogicRules = actionType.fullLogicRules\n .map((rule) => convertLogicStep(rule, actionType.actionType.parameters, syntheticParameters))\n .filter((rule): rule is NonNullable<typeof rule> => rule !== null);\n const parameters = Object.entries(actionType.actionType.parameters).map(\n ([name, parameter]): ActionParameterDef => {\n const type = requireObjectReferenceMutationTarget(\n convertActionParameterType(parameter.dataType, parameter.required, parameter.validation),\n mutationTargetParameterNames.has(name)\n );\n return {\n name,\n displayName: parameter.displayName ?? name,\n type: applyStringSuggestionsFallback(\n applyStringConstraintFallback(\n applyOmsStructFieldValidation(type, omsMetadata, name),\n convertOmsActionParameterStringConstraint(omsMetadata, name)\n ),\n convertOmsActionParameterStringSuggestions(omsMetadata, name)\n ),\n description: parameter.description,\n };\n }\n );\n const defaultsByParameter = convertOmsActionParameterDefaults(omsMetadata, parameters);\n const foundryIcon = omsMetadata?.actionType.metadata?.displayMetadata?.icon;\n\n return {\n id: actionType.actionType.rid,\n name: toOntologyActionTypeName(actionType.actionType.apiName),\n displayName: actionType.actionType.displayName ?? actionType.actionType.apiName,\n description: actionType.actionType.description,\n icon:\n foundryIcon?.type === \"blueprint\"\n ? fromBlueprintIconName(foundryIcon.blueprint.locator)\n : undefined,\n color: foundryIcon?.type === \"blueprint\" ? foundryIcon.blueprint.color : undefined,\n deprecated:\n actionType.actionType.status === \"DEPRECATED\" ? { message: \"Deprecated in Foundry.\" } : undefined,\n parameters: [\n ...parameters.map((parameter) => ({\n ...parameter,\n defaultValue: defaultsByParameter.get(parameter.name),\n })),\n ...syntheticParameters.parameters,\n ],\n logic: fullLogicRules,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ObjectTypeFullMetadata } from "@osdk/foundry.ontologies";
|
|
2
|
-
import {
|
|
2
|
+
import { LinkType } from "@party-stack/ontology-spec/meta";
|
|
3
3
|
//#region src/meta/convertMetaLinkType.d.ts
|
|
4
|
-
export declare function convertFoundryMetaLinkTypes(objectTypes: ObjectTypeFullMetadata[]):
|
|
4
|
+
export declare function convertFoundryMetaLinkTypes(objectTypes: Pick<ObjectTypeFullMetadata, "linkTypes">[]): LinkType[];
|
|
5
5
|
//#endregion
|
|
6
6
|
//# sourceMappingURL=convertMetaLinkType.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaLinkType.d.ts","names":[],"sources":["../../src/meta/convertMetaLinkType.ts"],"mappings":";;;wBAQgB,
|
|
1
|
+
{"version":3,"file":"convertMetaLinkType.d.ts","names":["MetaLinkType"],"sources":["../../src/meta/convertMetaLinkType.ts"],"mappings":";;;wBAQgB,4BACZ,aAAa,KAAK,yCACnBA"}
|
|
@@ -12,27 +12,27 @@ function convertFoundryMetaLinkTypes(objectTypes) {
|
|
|
12
12
|
}
|
|
13
13
|
function convertFoundryMetaLinkType(id, sides) {
|
|
14
14
|
if (sides.length !== 2) return null;
|
|
15
|
-
const
|
|
16
|
-
if (!
|
|
17
|
-
const
|
|
18
|
-
if (!
|
|
15
|
+
const forward = sides.find((side) => side.foreignKeyPropertyApiName);
|
|
16
|
+
if (!forward) return null;
|
|
17
|
+
const reverse = sides.find((side) => side !== forward);
|
|
18
|
+
if (!reverse) return null;
|
|
19
19
|
return {
|
|
20
20
|
id,
|
|
21
21
|
source: {
|
|
22
|
-
objectType:
|
|
23
|
-
name:
|
|
24
|
-
displayName:
|
|
22
|
+
objectType: reverse.objectTypeApiName,
|
|
23
|
+
name: reverse.apiName,
|
|
24
|
+
displayName: reverse.displayName
|
|
25
25
|
},
|
|
26
26
|
target: {
|
|
27
|
-
objectType:
|
|
28
|
-
name:
|
|
29
|
-
displayName:
|
|
27
|
+
objectType: forward.objectTypeApiName,
|
|
28
|
+
name: forward.apiName,
|
|
29
|
+
displayName: forward.displayName
|
|
30
30
|
},
|
|
31
31
|
foreignKey: (() => {
|
|
32
|
-
invariant(
|
|
33
|
-
return
|
|
32
|
+
invariant(forward.foreignKeyPropertyApiName, "Expected Foundry link foreign key.");
|
|
33
|
+
return forward.foreignKeyPropertyApiName;
|
|
34
34
|
})(),
|
|
35
|
-
cardinality: convertFoundryLinkCardinality(
|
|
35
|
+
cardinality: convertFoundryLinkCardinality(reverse.cardinality)
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
function convertFoundryLinkCardinality(cardinality) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMetaLinkType.js","names":[],"sources":["../../src/meta/convertMetaLinkType.ts"],"sourcesContent":["import { invariant } from \"@bobbyfidz/panic\";\nimport type {\n LinkTypeSideCardinality,\n LinkTypeSideV2,\n ObjectTypeFullMetadata,\n} from \"@osdk/foundry.ontologies\";\nimport type { MetaLinkType } from \"@party-stack/ontology\";\n\nexport function convertFoundryMetaLinkTypes(objectTypes: ObjectTypeFullMetadata[]): MetaLinkType[] {\n const sidesByRid = new Map<string, LinkTypeSideV2[]>();\n\n for (const objectType of objectTypes) {\n for (const linkType of objectType.linkTypes) {\n const key = linkType.linkTypeRid;\n const sides = sidesByRid.get(key) ?? [];\n sides.push(linkType);\n sidesByRid.set(key, sides);\n }\n }\n\n return Array.from(sidesByRid.entries())\n .map(([id, sides]) => convertFoundryMetaLinkType(id, sides))\n .filter((linkType): linkType is MetaLinkType => linkType !== null);\n}\n\nfunction convertFoundryMetaLinkType(id: string, sides: LinkTypeSideV2[]): MetaLinkType | null {\n if (sides.length !== 2) {\n return null;\n }\n\n const
|
|
1
|
+
{"version":3,"file":"convertMetaLinkType.js","names":[],"sources":["../../src/meta/convertMetaLinkType.ts"],"sourcesContent":["import { invariant } from \"@bobbyfidz/panic\";\nimport type {\n LinkTypeSideCardinality,\n LinkTypeSideV2,\n ObjectTypeFullMetadata,\n} from \"@osdk/foundry.ontologies\";\nimport type { LinkType as MetaLinkType } from \"@party-stack/ontology-spec/meta\";\n\nexport function convertFoundryMetaLinkTypes(\n objectTypes: Pick<ObjectTypeFullMetadata, \"linkTypes\">[]\n): MetaLinkType[] {\n const sidesByRid = new Map<string, LinkTypeSideV2[]>();\n\n for (const objectType of objectTypes) {\n for (const linkType of objectType.linkTypes) {\n const key = linkType.linkTypeRid;\n const sides = sidesByRid.get(key) ?? [];\n sides.push(linkType);\n sidesByRid.set(key, sides);\n }\n }\n\n return Array.from(sidesByRid.entries())\n .map(([id, sides]) => convertFoundryMetaLinkType(id, sides))\n .filter((linkType): linkType is MetaLinkType => linkType !== null);\n}\n\nfunction convertFoundryMetaLinkType(id: string, sides: LinkTypeSideV2[]): MetaLinkType | null {\n if (sides.length !== 2) {\n return null;\n }\n\n // Foundry sides describe outgoing traversal: objectTypeApiName and cardinality\n // describe the destination, while the FK lives on the enclosing object type.\n const forward = sides.find((side) => side.foreignKeyPropertyApiName);\n if (!forward) {\n return null;\n }\n\n const reverse = sides.find((side) => side !== forward);\n if (!reverse) {\n return null;\n }\n\n return {\n id,\n source: {\n objectType: reverse.objectTypeApiName,\n name: reverse.apiName,\n displayName: reverse.displayName,\n },\n target: {\n objectType: forward.objectTypeApiName,\n name: forward.apiName,\n displayName: forward.displayName,\n },\n foreignKey: (() => {\n invariant(forward.foreignKeyPropertyApiName, \"Expected Foundry link foreign key.\");\n return forward.foreignKeyPropertyApiName;\n })(),\n cardinality: convertFoundryLinkCardinality(reverse.cardinality),\n };\n}\n\nfunction convertFoundryLinkCardinality(cardinality: LinkTypeSideCardinality): MetaLinkType[\"cardinality\"] {\n return cardinality === \"ONE\" ? \"one\" : \"many\";\n}\n"],"mappings":";;AAQA,SAAgB,4BACZ,aACc;CACd,MAAM,6BAAa,IAAI,IAA8B;CAErD,KAAK,MAAM,cAAc,aACrB,KAAK,MAAM,YAAY,WAAW,WAAW;EACzC,MAAM,MAAM,SAAS;EACrB,MAAM,QAAQ,WAAW,IAAI,GAAG,KAAK,CAAC;EACtC,MAAM,KAAK,QAAQ;EACnB,WAAW,IAAI,KAAK,KAAK;CAC7B;CAGJ,OAAO,MAAM,KAAK,WAAW,QAAQ,CAAC,CAAC,CAClC,KAAK,CAAC,IAAI,WAAW,2BAA2B,IAAI,KAAK,CAAC,CAAC,CAC3D,QAAQ,aAAuC,aAAa,IAAI;AACzE;AAEA,SAAS,2BAA2B,IAAY,OAA8C;CAC1F,IAAI,MAAM,WAAW,GACjB,OAAO;CAKX,MAAM,UAAU,MAAM,MAAM,SAAS,KAAK,yBAAyB;CACnE,IAAI,CAAC,SACD,OAAO;CAGX,MAAM,UAAU,MAAM,MAAM,SAAS,SAAS,OAAO;CACrD,IAAI,CAAC,SACD,OAAO;CAGX,OAAO;EACH;EACA,QAAQ;GACJ,YAAY,QAAQ;GACpB,MAAM,QAAQ;GACd,aAAa,QAAQ;EACzB;EACA,QAAQ;GACJ,YAAY,QAAQ;GACpB,MAAM,QAAQ;GACd,aAAa,QAAQ;EACzB;EACA,mBAAmB;GACf,UAAU,QAAQ,2BAA2B,oCAAoC;GACjF,OAAO,QAAQ;EACnB,EAAA,CAAG;EACH,aAAa,8BAA8B,QAAQ,WAAW;CAClE;AACJ;AAEA,SAAS,8BAA8B,aAAmE;CACtG,OAAO,gBAAgB,QAAQ,QAAQ;AAC3C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ObjectTypeFullMetadata } from "@osdk/foundry.ontologies";
|
|
2
|
-
import {
|
|
2
|
+
import { ObjectType } from "@party-stack/ontology-spec/meta";
|
|
3
3
|
//#region src/meta/convertMetaObjectType.d.ts
|
|
4
|
-
export declare function convertFoundryMetaObjectType(metadata: ObjectTypeFullMetadata):
|
|
4
|
+
export declare function convertFoundryMetaObjectType(metadata: Pick<ObjectTypeFullMetadata, "objectType">): ObjectType;
|
|
5
5
|
//#endregion
|
|
6
6
|
//# sourceMappingURL=convertMetaObjectType.d.ts.map
|