import type { ActivityFunction } from './interfaces';
import type { PayloadTypeInfo } from './type-info';
/**
* Static metadata attached to an Activity function.
*
* @experimental
*/
export interface ActivityDefinitionOptions {
/** Type information used to decode Activity arguments and encode its result. */
typeInfo?: PayloadTypeInfo;
}
type ActivityKeys = {
[K in keyof A & string]: A[K] extends ActivityFunction ? K : never;
}[keyof A & string];
/**
* Type information keyed only by Activity-valued properties of `A`.
*
* @experimental
*/
export type ActivityTypeInfoMap = Partial, PayloadTypeInfo>>;
/** @internal */
export interface ActivityFunctionWithOptions
extends ActivityFunction {
activityDefinitionOptions: ActivityDefinitionOptions;
}
const activityDefinitionOptionsProperty = 'activityDefinitionOptions' satisfies keyof ActivityFunctionWithOptions;
/** @internal */
export function isActivityFunctionWithOptions(value: unknown): value is ActivityFunctionWithOptions {
if (typeof value !== 'function' || !Object.hasOwn(value, activityDefinitionOptionsProperty)) {
return false;
}
const { activityDefinitionOptions } = value as { activityDefinitionOptions?: unknown };
return typeof activityDefinitionOptions === 'object' && activityDefinitionOptions !== null;
}