import { ActiveModelSerializer, Collection, Factory, Instantiate, JSONAPISerializer, Model, ModelInstance, Response, RestSerializer, Serializer, Server as MirageServer, } from 'miragejs'; import { Registry } from '/mirage/registry'; /** * Result of `server.create('modelName', params);` * (including undefined/null props) */ export type Init = Instantiate; /** * Params object for `server.create('modelName', params);` */ export type Data = Partial>>; /** * Result of `server.create('modelName', params);` * (with undefined/null props removed) */ export type Instantiated = I & { [K in keyof I & keyof D]: Exclude; }; type ModelInitializer = { [K in keyof Data]: Data[K] extends Collection ? Collection | M[] : Data[K]; }; interface Server extends MirageServer { /** * Creates a model of the given type. * * @param modelName The type of model to instantiate * @param [t0] Optional trait name * @param [t1] Optional trait name * @param [t2] Optional trait name * @param [data] Optional initial values for model attributes/relationships */ create< ModelName extends keyof Registry, I extends Init, D extends Data >( modelName: ModelName, data?: Data ): Instantiated; create< ModelName extends keyof Registry, I extends Init, D extends Data >( modelName: ModelName, t0: string, data?: Data ): Instantiated; create< ModelName extends keyof Registry, I extends Init, D extends Data >( modelName: ModelName, t0: string, t1: string, data?: Data ): Instantiated; create< ModelName extends keyof Registry, I extends Init, D extends Data >( modelName: ModelName, t0: string, t1: string, t2: string, data?: Data ): Instantiated; create< ModelName extends keyof Registry, I extends Init, D extends Data >( modelName: ModelName, ...args: unknown[] ): Instantiated; /** * Builds a model of the given type. * * @param modelName The type of model to instantiate * @param [t0] Optional trait name * @param [t1] Optional trait name * @param [t2] Optional trait name * @param [data] Optional initial values for model attributes/relationships */ build< ModelName extends keyof Registry, I extends Init, D extends Data >( modelName: ModelName, data?: Data ): Instantiated; build< ModelName extends keyof Registry, I extends Init, D extends Data >( modelName: ModelName, t0: string, data?: Data ): Instantiated; build< ModelName extends keyof Registry, I extends Init, D extends Data >( modelName: ModelName, t0: string, t1: string, data?: Data ): Instantiated; build< ModelName extends keyof Registry, I extends Init, D extends Data >( modelName: ModelName, t0: string, t1: string, t2: string, data?: Data ): Instantiated; } export { ActiveModelSerializer, Collection, Factory, Instantiate, JSONAPISerializer, Model, ModelInstance, Response, RestSerializer, Serializer, Server, }; /** * See https://www.ember-cli-mirage.com/docs/data-layer/factories#traits * * @param extension An extension of the factory to include when the trait name * is used */ export function trait>( extension: T ): T & { __isTrait__: true }; /** * See https://www.ember-cli-mirage.com/docs/data-layer/factories#the-association-helper * * @param args Optional arguments that match those that can be passed to * `Server.create`. */ export function association( ...args: unknown[] ): Init;