import type { CompileTimeMetadata, InterfaceDefinition, ObjectTypeDefinition } from "@osdk/client";
import type { AddLink, AnyEdit, CreateObject, CreateObjectForInterface, DeleteObject, DeleteObjectForInterface, InterfaceLocator, ObjectLocator, RemoveLink, UpdateObject, UpdateObjectForInterface } from "./types.js";
interface ObjectTypeDefinitionForLocator
> extends ObjectTypeDefinition {
apiName: OL["$apiName"];
}
interface InterfaceDefinitionForLocator> extends InterfaceDefinition {
apiName: IL["$apiName"];
}
export type AddLinkSources = X extends AddLink ? ObjectLocator : never;
export type AddLinkApiNames<
X extends AnyEdit,
SOL extends ObjectLocator
> = X extends AddLink, infer A> ? A : never;
export type AddLinkTargets<
X extends AnyEdit,
SOL extends ObjectLocator,
A extends string
> = X extends AddLink, A> ? (X extends AddLink ? (CompileTimeMetadata["links"][A]["multiplicity"] extends true ? Array | X["target"] : X["target"]) : never) : never;
export type RemoveLinkSources = X extends RemoveLink ? ObjectLocator : never;
export type RemoveLinkApiNames<
X extends AnyEdit,
SOL extends ObjectLocator
> = X extends RemoveLink, infer L> ? L : never;
export type RemoveLinkTargets<
X extends AnyEdit,
SOL extends ObjectLocator,
A extends string
> = X extends RemoveLink, A> ? (X extends RemoveLink ? (CompileTimeMetadata["links"][A]["multiplicity"] extends true ? Array | X["target"] : X["target"]) : never) : never;
export type CreatableObjectOrInterfaceTypes = X extends CreateObject ? OTD : X extends CreateObjectForInterface ? ID : never;
export type CreatableObjectOrInterfaceTypeProperties<
X extends AnyEdit,
OI extends ObjectTypeDefinition | InterfaceDefinition
> = X extends CreateObject ? OTD extends OI ? X["properties"] : never : X extends CreateObjectForInterface ? ID extends OI ? X["properties"] : never : never;
export type DeletableObjectOrInterfaceLocators = X extends DeleteObject ? ObjectLocator : X extends DeleteObjectForInterface ? InterfaceLocator : never;
export type UpdatableObjectOrInterfaceLocators = X extends UpdateObject ? ObjectLocator : X extends UpdateObjectForInterface ? InterfaceLocator : never;
export type UpdatableObjectOrInterfaceLocatorProperties<
X extends AnyEdit,
OL extends ObjectLocator
> = X extends UpdateObject> ? X["properties"] : X extends UpdateObjectForInterface> ? X["properties"] : never;
export interface EditBatch {
link: <
SOL extends AddLinkSources,
A extends AddLinkApiNames
>(source: SOL, apiName: A, target: AddLinkTargets) => void;
unlink: <
SOL extends RemoveLinkSources,
A extends RemoveLinkApiNames
>(source: SOL, apiName: A, target: RemoveLinkTargets) => void;
create: >(objectOrInterfaceType: OI, properties: CreatableObjectOrInterfaceTypeProperties) => void;
delete: >(obj: OL) => void;
update: >(obj: OL, properties: UpdatableObjectOrInterfaceLocatorProperties) => void;
getEdits: () => X[];
}
export {};