UNPKG

@contract-case/case-plugin-dsl-types

Version:

Types for writing the definition DSL for plugins for the ContractCase test framework

266 lines (236 loc) 8.08 kB
/** * Base type for any matcher descriptor * @public */ export declare interface AnyCaseMatcher { '_case:matcher:type': string; } /** * Any matcher descriptor or data * @public */ export declare type AnyCaseMatcherOrData = AnyCaseMatcher | AnyData | AnyLeafOrStructure; /** * Helper type to represent any raw json data * @public */ export declare type AnyData = JsonSerialisablePrimitive | JsonMap | JsonArray; /** * TODO: Remove this type, it doesn't provide much value * @internal */ export declare type AnyLeafOrStructure = JsonSerialisablePrimitive | JsonOrMatcherArray | JsonOrMatcherMap; /** * Base type for mock descriptors * @public */ export declare type AnyMockDescriptor = { '_case:mock:type': string; '_case:run:context:setup': InternalContractCaseCoreSetup; request?: AnyCaseMatcher; response?: AnyCaseMatcher; }; /** * Union type of all currently known State types. * @public */ export declare type AnyState = NameOnlyState | StateWithVariables; /** * Union type of all currently known State identifier strings. * @public */ export declare type AnyStateType = typeof SETUP_NAMED_STATE | typeof SETUP_VARIABLE_STATE; /** * The base SetupInfo provided to all mock setup functions and triggers. * @public * @remarks * All SetupInfo objects extend this type */ export declare type BaseSetupInfo = { /** * Variables provided by state setup functions */ stateVariables: Record<string, VariableValue>; /** * Setup returned by the mock executor (eg, urls, function names, etc) */ mock: Record<string, VariableValue>; /** * Arbitrary map of invokeable functions. For most purposes, this can be * empty. Useful for allowing plugins to invoke functions - the intention is * that arguments and return values are JSON encoded strings. */ functions: Record<string, (...args: string[]) => string>; }; /** * Helper type for extracting a mock descriptor from all the known mock descriptors * @public * @typeParam KnownMockDescriptors - All the mock descriptor objects known * @typeParam T - The string constant for the mock descriptor that we're interested in */ export declare type CaseMockDescriptorFor<KnownMockDescriptors extends AnyMockDescriptor, T extends string> = Extract<KnownMockDescriptors, HasTypeForMockDescriptor<T>>; /** * Helper type for a contract case mock descriptor object. All mock descriptors * must extend this for the string constant that they use * @public * @typeParam T - The string constant for the mock descriptor. */ export declare interface HasTypeForMockDescriptor<T extends string> { '_case:mock:type': T; } /** * Helper type for extracting state types by their constant * @public */ export declare type HasTypeForState<T extends AnyStateType> = { '_case:state:type': T; }; /** * Describes how contract case behaves with this type of mock. * @public */ export declare interface InternalContractCaseCoreBehaviour { /** * The constant type for the mock descriptor used to mock this behaviour */ type: string; /** * Describes the source of state variables. * * * `'state'` - variables are provided by state handlers * * `'default'` - variables are provided by the default in the state descriptor */ stateVariables: 'state' | 'default'; /** * Describes whether the trigger functions for this mock are user `provided`, or * whether ContractCase will use the default functions it `generated`. */ triggers: 'provided' | 'generated'; } /** * Controls the behaviour of the mock when writing or reading contracts with this type. * @public */ export declare interface InternalContractCaseCoreSetup { /** * Defines how the ContractCase core will behave when writing (ie, defining) an Example of this type. */ write: InternalContractCaseCoreBehaviour; /** * Defines how the ContractCase core will behave when reading (ie, verifying) a Example of this type. */ read: InternalContractCaseCoreBehaviour; } /** * Determines if a given value is a valid mock descriptor. * @public * @remarks * * This function checks if the provided value is an object and contains the * property '_case:mock:type', indicating that it is a valid mock descriptor. * * @param maybeMock - The value to be checked. * @returns A boolean indicating whether the provided value is a valid mock descriptor. */ export declare const isCaseMock: (maybeMock: unknown) => maybeMock is AnyMockDescriptor; /** * Determines if a specific matcher or data is a lookupable matcher * @public * * @param maybeMatcher - the matcher or data in question * @returns true if `maybeMatcher` is a lookupable matcher, false otherwise */ export declare const isLookupableMatcher: (maybeMatcher: unknown) => maybeMatcher is LookupableMatcher; declare type JsonArray = Array<AnyData>; declare interface JsonMap { [key: string]: AnyData; } /** * Any json array that might contain data or matchers * @public */ export declare type JsonOrMatcherArray = Array<AnyCaseMatcherOrData>; /** * Any json object that might contain data or matchers * @public */ export declare type JsonOrMatcherMap = { [key: string]: AnyCaseMatcherOrData; }; declare type JsonSerialisablePrimitive = boolean | number | string | null; /** * The type constant for a lookup matcher * @internal */ export declare const LOOKUP_MATCHER_TYPE: "_case:Lookup"; /** * The matcher descriptor for a lookupable matcher * * @public */ export declare interface LookupableMatcher { '_case:matcher:type': typeof LOOKUP_MATCHER_TYPE; '_case:matcher:uniqueName': string; '_case:matcher:child'?: AnyCaseMatcherOrData; } /** * Describes a state that only has a name and no other information * @public */ export declare type NameOnlyState = HasTypeForState<typeof SETUP_NAMED_STATE> & { /** * The human readable state name, for identifying state handlers. * Any string is acceptable, though we recommend keeping state names short. * * In a future release, some specific state names may be reserved. */ readonly stateName: string; }; /** * Indicates that a matcher should always resolve to this type of value * @public */ export declare type ResolvesTo<T extends string> = { '_case:matcher:resolvesTo': T; }; /** * Type identifier constant for the built-in {@link NameOnlyState} type. * @public */ export declare const SETUP_NAMED_STATE: "_case:NamedState"; /** * Type identifier constant for the built-in {@link StateWithVariables} type. * @public */ export declare const SETUP_VARIABLE_STATE: "_case:StateWithVariables"; /** * Helper type to extract a specific mock's SetupInfo object form all known SetupInfo objects * @public * @typeParam AllSetupInfo - All known SetupInfo objects * @typeParam T - the type of the mock descriptor that you want to get the SetupInfo for. */ export declare type SetupInfoFor<AllSetupInfo, T extends string> = Extract<AllSetupInfo, HasTypeForMockDescriptor<T>> & BaseSetupInfo; /** * Describes a named state that also contains some variables. These variables can be * returned by state handlers later. * @public */ export declare type StateWithVariables = HasTypeForState<typeof SETUP_VARIABLE_STATE> & { /** * The human readable state name, for identifying state handlers. * Any string is acceptable, though we recommend keeping state names short. * * In a future release, some specific state names may be reserved. */ readonly stateName: string; /** * Default values and matchers for the variables. The state handler must return * a value for each of these named variables. We recommend keeping variables * human readable and short. Since the state handler needs to return these, we * recommend using similar naming conventions to variables in your chosen * language. */ readonly variables: Record<string, AnyCaseMatcherOrData>; }; declare type VariableValue = any; export { }