{"version":3,"sources":["../src/Model.ts","../src/utils/convertObjectKeys.ts","../src/defineConfig.ts","../src/defineApi.ts","../src/utils/defineApiUrl.ts","../src/utils/getInferredUri.ts","../src/utils/defineUri.ts","../src/ApiResponse.ts","../src/utils/createInstance.ts","../src/utils/deepMerge.ts","../src/defineRepository.ts","../src/definePagination.ts","../src/defineController.ts"],"sourcesContent":["import { camelCase } from 'lodash';\nimport { convertObjectKeys } from './utils/convertObjectKeys';\nimport { apiConfig } from './defineConfig';\n\ntype TFlagExcludedType<Base, Type> = {\n  [Key in keyof Base]: Base[Key] extends Type\n    ? never\n    : Key;\n};\n\ntype TAllowedNames<Base, Type> = TFlagExcludedType<Base, Type>[keyof Base];\n\ntype TOmitType<Base, Type> = Pick<Base, TAllowedNames<Base, Type>>;\n\nexport type TModelConstructorType<T> = TOmitType<T, (...args: any[]) => any>;\n\nexport abstract class Model {\n  public static primaryKey = 'id';\n\n  protected $convertCase = false;\n\n  protected $relations: Record<string, new () => Model> = {\n    //\n  };\n\n  public $update(props: Partial<TModelConstructorType<typeof this>>): this {\n    const newModel = new (this.constructor as any)();\n    const relatedModels: Record<string, Model | Model[]> = {};\n    if (this.$convertCase || apiConfig.convertCase) {\n      props = convertObjectKeys(props, camelCase);\n    }\n    Object\n      .keys(props)\n      .forEach((key: string) => {\n        if (!(key in this) && !(key in this.$relations)) {\n          delete props[key as keyof typeof props];\n        }\n      });\n    Object.keys(props)\n      .filter((key: string) => key in this.$relations)\n      .forEach((key: string) => {\n        const propsKey = key as keyof typeof props;\n        const propsModelData = props[propsKey] as any;\n        const RelatedModelClass = this.$relations[key];\n        if (Array.isArray(propsModelData)) {\n          relatedModels[key] = [];\n          propsModelData.forEach((propsModel: any) => {\n            const _relatedModel = new RelatedModelClass();\n            const relatedModel = _relatedModel.$update(propsModel);\n            (relatedModels[key] as Model[]).push(relatedModel);\n          });\n        } else if (typeof propsModelData === 'object') {\n          const _relatedModel = new RelatedModelClass();\n          relatedModels[key] = _relatedModel.$update(propsModelData);\n        }\n      });\n    Object.keys(relatedModels).forEach((key: string) => {\n      if (key in props) {\n        delete props[key as keyof typeof props];\n      }\n    });\n    Object.assign(newModel, {\n      ...this,\n      ...props,\n    });\n    Object.assign(newModel, relatedModels);\n    return newModel;\n  }\n}\n","type TConvertFunction = (key: string) => string;\n\nexport function convertObjectKeys<TObject extends Record<string, unknown>>(\n  object: TObject,\n  convertFunction: TConvertFunction,\n): TObject {\n  return Object.fromEntries(\n    Object\n      .entries(object)\n      .map((entry: [string, unknown]) => [\n        convertFunction(entry[0]),\n        entry[1],\n      ]),\n  ) as TObject;\n}\n","import { IPaginationSetup, TApiOptions } from './defineApi';\n\ntype THeaders =\n  | HeadersInit\n  | (() => HeadersInit)\n  ;\n\ninterface IConfigOptions {\n  apiUrl?: string;\n  headers?: THeaders;\n  convertCase?: boolean;\n  pagination?: IPaginationSetup;\n  requestOptions?: TApiOptions;\n}\n\nfunction clearConfig(): void {\n  apiConfig = {};\n}\n\nfunction defineConfig(options: IConfigOptions) {\n  if (Object.isFrozen(apiConfig)) {\n    throw new Error('You can configure Prevue only once.');\n  }\n\n  apiConfig.apiUrl = options.apiUrl;\n  apiConfig.headers = options.headers;\n  apiConfig.convertCase = options.convertCase;\n  apiConfig.pagination = options.pagination;\n  apiConfig.requestOptions = options.requestOptions;\n\n  apiConfig = Object.freeze(apiConfig);\n}\n\nlet apiConfig: IConfigOptions = {};\n\nexport {\n  apiConfig,\n  defineConfig,\n};\n\nexport const configExportsForTesting = {\n  clearConfig,\n};\n","import { $fetch, type FetchOptions } from 'ofetch';\nimport type { Model } from './Model';\nimport { defineApiUrl } from './utils/defineApiUrl';\nimport { defineUri } from './utils/defineUri';\nimport type { TOverride } from './utils/types';\nimport { ApiResponse, IPagination, PaginatedResponse, SimpleResponse } from './ApiResponse';\nimport { apiConfig } from './defineConfig';\nimport { createInstance } from './utils/createInstance';\nimport { deepMerge } from './utils/deepMerge';\n\nexport type TApiOptions = FetchOptions<'json'>;\n\ntype TMethod = (...args: any[]) => void;\n\ntype TMethods = Record<string, TMethod>;\n\ntype TSetupEndpoints<E> = TMethods extends E ? {} : E;\n\ntype TIdentifier =\n  | string\n  | number\n  ;\n\nexport interface IBaseModelApi<M> {\n  fetchAll(options?: TApiOptions): Promise<ApiResponse<M[]>>\n  fetchOne(id: TIdentifier, options?: TApiOptions): Promise<ApiResponse<M>>;\n  fetchMany(ids: TIdentifier[], options?: TApiOptions): Promise<ApiResponse<M[]>>;\n  createOne<Request extends Partial<M>>(data: Request, options?: TApiOptions): Promise<ApiResponse<M>>;\n  updateOne(id: TIdentifier, data: Partial<M>, options?: TApiOptions): Promise<ApiResponse<M>>;\n  updateMany(ids: TIdentifier[], data: Partial<M>, options?: TApiOptions): Promise<ApiResponse<M[]>>;\n  deleteOne(id: TIdentifier, options?: TApiOptions): Promise<ApiResponse<null>>;\n  deleteMany(ids: TIdentifier[], options?: TApiOptions): Promise<ApiResponse<null>>;\n}\n\ninterface ISetupContext<M> extends IBaseModelApi<M> {\n  request<T>(url: string, options?: TApiOptions): Promise<ApiResponse<T>>;\n  rawRequest<T = TResponse>(url: string, options?: TApiOptions): Promise<T>;\n}\n\ntype TEndpointsContext<M, E> =\n  & E\n  & ThisType<ISetupContext<M> & E>\n  ;\n\ntype TResponse = any;\n\ntype TPaginationMapper = (response: TResponse) => IPagination;\n\ntype TPaginationKeys = {\n  [K in keyof IPagination]: string;\n};\n\nexport interface IPaginationSetup extends Partial<TPaginationKeys> {\n  dataWrapper?: string;\n  paginationWrapper?: string;\n  mapper?: TPaginationMapper;\n}\n\nexport interface ISetup<M, E> {\n  apiUrl?: (() => string) | string;\n  uri?: (() => string) | string;\n  trimSlashes?: boolean;\n  endpoints?: TEndpointsContext<M, E>;\n  pagination?: IPaginationSetup;\n  options?: TApiOptions;\n}\n\nexport type TApi<M, E> =\n  & E\n  & IBaseModelApi<M>\n  & TOverride<IBaseModelApi<M>, TSetupEndpoints<E>>\n;\n\nexport interface IApiDefinition<M, E> {\n  (): TApi<M, E>;\n}\n\ninterface IProcessedPaginatedResponse<T> {\n  data: T;\n  pagination: IPagination;\n}\n\ninterface ISetupConfig {\n  getUri(): string;\n  getApiUrl(): string;\n  buildFullUrl(...segments: string[]): string;\n  getPaginationWrapperKey(): string;\n  getPaginationDataKey(): string;\n  processPaginatedResponse<T>(response: TResponse): IProcessedPaginatedResponse<T>;\n  getApiOptions(): TApiOptions;\n}\n\nfunction getSetupConfig<M extends Model, E = {}>(ModelClass: new () => M, setup?: ISetup<M, E>): ISetupConfig {\n  const getUri = defineUri(ModelClass, setup);\n  const getApiUrl = defineApiUrl(setup);\n\n  function buildFullUrl(...segments: string[]): string {\n    const apiUrl = getApiUrl();\n    const uri = getUri();\n    const concatenated = [apiUrl, uri, ...segments].join('/');\n    const trimmed = (setup?.trimSlashes ?? true)\n      ? concatenated.replace(/([^:]\\/)\\/+/g, '$1')\n      : concatenated;\n\n    return trimmed\n      .replace(/^\\/*/gi, '')\n      .replace(/\\/*$/gi, '');\n  }\n\n  function processPaginatedResponse<T>(response: TResponse): IProcessedPaginatedResponse<T> {\n    const paginationTemplate: IPaginationSetup | undefined = setup?.pagination ?? apiConfig.pagination;\n    const dataWrapperKey = getPaginationDataKey();\n    const data = response[dataWrapperKey].map((data: any) => createInstance(ModelClass, data));\n\n    if (paginationTemplate) {\n      if (paginationTemplate.mapper) {\n        return {\n          data,\n          pagination: paginationTemplate.mapper(response),\n        };\n      }\n\n      const pagination = paginationTemplate.paginationWrapper\n        ? response[paginationTemplate.paginationWrapper]\n        : response.pagination;\n\n      return {\n        data,\n        pagination: {\n          currentPage: pagination[paginationTemplate.currentPage ?? 'currentPage'],\n          lastPage: pagination[paginationTemplate.lastPage ?? 'lastPage'],\n          perPage: pagination[paginationTemplate.perPage ?? 'perPage'],\n          total: pagination[paginationTemplate.total ?? 'total'],\n        },\n      };\n    }\n\n    return {\n      data: response.data,\n      pagination: response.pagination,\n    };\n  }\n\n  function getPaginationDataKey(): string {\n    return setup?.pagination?.dataWrapper ?? apiConfig.pagination?.dataWrapper ?? 'data';\n  }\n\n  function getPaginationWrapperKey(): string {\n    return setup?.pagination?.paginationWrapper ?? apiConfig.pagination?.paginationWrapper ?? 'pagination';\n  }\n\n  function getApiOptions(): TApiOptions {\n    return setup?.options ?? {};\n  }\n\n  return {\n    getUri,\n    getApiUrl,\n    buildFullUrl,\n    processPaginatedResponse,\n    getPaginationDataKey,\n    getPaginationWrapperKey,\n    getApiOptions,\n  };\n}\n\nfunction getConfigHeaders(): HeadersInit {\n  if (apiConfig.headers) {\n    return typeof apiConfig.headers === 'function'\n      ? apiConfig.headers()\n      : apiConfig.headers;\n  }\n  return {};\n}\n\nexport function buildOptions(...options: TApiOptions[]): TApiOptions {\n  const mergedOptions: TApiOptions = {};\n  deepMerge(mergedOptions, apiConfig?.requestOptions ?? {});\n  deepMerge(mergedOptions, {\n    headers: {\n      'Accept': 'application/json',\n      ...getConfigHeaders(),\n    },\n  });\n  options.forEach((options) => {\n    deepMerge(mergedOptions, options);\n  });\n  return mergedOptions;\n}\n\nfunction getBaseEndpoints<M extends Model>(ModelClass: new () => M, setupConfig: ISetupConfig): ISetupContext<M> {\n  function isPaginatedResponse(response: TResponse): boolean {\n    const paginationDataKey = setupConfig.getPaginationDataKey();\n    const paginationWrapperKey = setupConfig.getPaginationWrapperKey();\n\n    return (\n      typeof response === 'object' &&\n      response !== null &&\n      paginationWrapperKey in response &&\n      paginationDataKey in response\n    );\n  }\n\n  class ResponseError extends Error {\n    public constructor(message: string) {\n      super(setupConfig.buildFullUrl() + ': ' + message);\n    }\n  }\n\n  class InvalidResponseError extends ResponseError {\n    public constructor(response: Response) {\n      super(`Invalid response. Expected pagination object or array, got \"${JSON.stringify(response)}\".`);\n    }\n  }\n\n  return {\n    async rawRequest<T = TResponse>(url: string, options: TApiOptions = {}): Promise<T> {\n      return await $fetch<T>(setupConfig.buildFullUrl(url), buildOptions(setupConfig.getApiOptions(), options));\n    },\n    async request<T>(url: string, options?: TApiOptions): Promise<ApiResponse<T>> {\n      const response = await this.rawRequest(url, options);\n      if (isPaginatedResponse(response)) {\n        const processedResponse = setupConfig.processPaginatedResponse<M[]>(response);\n        return new PaginatedResponse(\n          processedResponse.data.map((item: M) => createInstance(ModelClass, item)),\n          processedResponse.pagination,\n        ) as ApiResponse<T>;\n      } else if (Array.isArray(response)) {\n        return new SimpleResponse(response.map((item: M) => createInstance(ModelClass, item))) as ApiResponse<T>;\n      }\n      throw new InvalidResponseError(response);\n    },\n    async fetchAll(options?: TApiOptions): Promise<ApiResponse<M[]>> {\n      return await this.request('', {\n        method: 'GET',\n        ...options,\n      });\n    },\n    async fetchOne(id: TIdentifier, options?: TApiOptions): Promise<ApiResponse<M>> {\n      return await this.request(id.toString(), {\n        method: 'GET',\n        ...options,\n      });\n    },\n    async fetchMany(ids: TIdentifier[], options?: TApiOptions): Promise<ApiResponse<M[]>> {\n      return await this.request('', {\n        method: 'GET',\n        ...options,\n        body: {\n          ids,\n        },\n      });\n    },\n    async createOne<Request extends Partial<M>>(data: Request, options?: TApiOptions): Promise<ApiResponse<M>> {\n      return await this.request('', {\n        method: 'POST',\n        ...options,\n        body: data,\n      });\n    },\n    async updateOne(id: TIdentifier, data: Partial<M>, options?: TApiOptions): Promise<ApiResponse<M>> {\n      return await this.request(id.toString(), {\n        method: 'PATCH',\n        ...options,\n        body: data,\n      });\n    },\n    async updateMany(ids: TIdentifier[], data: Partial<M>, options?: TApiOptions): Promise<ApiResponse<M[]>> {\n      return await this.request('', {\n        method: 'PATCH',\n        ...options,\n        body: {\n          ids,\n          data,\n        },\n      });\n    },\n    async deleteOne(id: TIdentifier, options?: TApiOptions): Promise<ApiResponse<null>> {\n      return await this.request(id.toString(), {\n        method: 'DELETE',\n        ...options,\n      });\n    },\n    async deleteMany(ids: TIdentifier[], options?: TApiOptions): Promise<ApiResponse<null>> {\n      return await this.request('', {\n        method: 'DELETE',\n        ...options,\n        body: {\n          ids,\n        },\n      });\n    },\n  };\n}\n\nexport function defineApi<M extends Model, E = {}>(ModelClass: new () => M, setup?: ISetup<M, E>): IApiDefinition<M, E> {\n  const setupConfig = getSetupConfig(ModelClass, setup);\n  const baseEndpoints = getBaseEndpoints(ModelClass, setupConfig);\n  const endpointsWithBaseContext = {} as E;\n\n  let setupEndpoints = {} as E;\n  if (setup && setup.endpoints) {\n    setupEndpoints = setup.endpoints;\n  }\n\n  Object.keys(setupEndpoints as object).forEach((key: string) => {\n    const setupKey = key as keyof typeof setupEndpoints;\n    const method = setupEndpoints[setupKey] as TMethod;\n    endpointsWithBaseContext[setupKey] = method.bind({\n      ...baseEndpoints,\n      ...setupEndpoints,\n    }) as E[keyof E];\n  });\n\n  // We must return a named function, so it can be automatically detected in the controller\n  return function useApi() {\n    return {\n      ...baseEndpoints,\n      ...endpointsWithBaseContext,\n    };\n  };\n}\n\nexport const defineApiExportsForTesting = {\n  getSetupConfig,\n};\n","import { apiConfig } from '../defineConfig';\n\ninterface ISetup {\n  apiUrl?: (() => string) | string;\n}\n\nexport function defineApiUrl<S extends ISetup = ISetup>(setup?: S): () => string {\n  if (setup && setup.apiUrl) {\n    if (typeof setup.apiUrl === 'function') {\n      return setup.apiUrl;\n    } else {\n      const apiUrl = setup.apiUrl;\n      return () => apiUrl;\n    }\n  }\n\n  return () => {\n    return apiConfig.apiUrl ?? '';\n  };\n}\n","import { kebabCase } from 'lodash';\nimport pluralize from 'pluralize';\n\nexport function getInferredUri(ModelClass: object): string {\n  const modelName = (typeof ModelClass === 'function' && ModelClass.prototype !== undefined)\n    ? ModelClass.name\n    : ModelClass.constructor.name;\n  const kebabCaseName = kebabCase(modelName);\n  const segments = kebabCaseName.split('-');\n\n  if (segments.length > 1) {\n    const lastSegment = segments.pop() as string;\n    const pluralized = pluralize(lastSegment);\n\n    return segments\n      .concat(pluralized)\n      .join('-');\n  }\n\n  return pluralize(kebabCaseName);\n}\n","import { getInferredUri } from './getInferredUri';\nimport { Model } from '../Model';\n\ninterface ISetup {\n  uri?: (() => string) | string;\n}\n\nexport function defineUri<M extends Model, S extends ISetup>(ModelClass: new (...args: any[]) => M, setup?: S): (() => string) {\n  if (setup && setup.uri) {\n    if (typeof setup.uri === 'function') {\n      return setup.uri;\n    } else {\n      const uri = setup.uri;\n      return () => uri;\n    }\n  }\n\n  return () => getInferredUri(ModelClass);\n}","export interface IPagination {\n  currentPage: number;\n  lastPage: number;\n  perPage: number;\n  total: number;\n}\n\nexport abstract class ApiResponse<Data> {\n  public _apiResponse = true;\n\n  protected data?: Data | null;\n  protected pagination?: IPagination;\n\n  public abstract isPaginated(): boolean;\n\n  public constructor(data?: Data | null, pagination?: IPagination) {\n    this.data = data;\n    this.pagination = pagination;\n  }\n\n  public getData(): Data | null | undefined {\n    return this.data;\n  }\n\n  public getPagination(): IPagination | undefined {\n    return this.pagination;\n  }\n\n  public hasData(): boolean {\n    return typeof this.data !== 'undefined';\n  }\n\n  public isDataNull(): boolean {\n    return this.data === null;\n  }\n\n  public hasPagination(): boolean {\n    return typeof this.pagination !== 'undefined';\n  }\n}\n\nexport class SimpleResponse<Data> extends ApiResponse<Data> {\n  public isPaginated(): boolean {\n    return false;\n  }\n}\n\nexport class PaginatedResponse<Data> extends ApiResponse<Data> {\n  public isPaginated(): boolean {\n    return true;\n  }\n}\n","import { Model, TModelConstructorType } from '../Model';\n\nexport function createInstance<T extends Model, D extends TModelConstructorType<T>>(\n  ModelClass: new () => T,\n  data?: Partial<D>,\n): T {\n  const instance = new ModelClass();\n  return typeof data !== 'undefined'\n    ? instance.$update(data)\n    : instance;\n}\n","export function deepMerge(target: object, source: object): void {\n  for (const key in source) {\n    if (source.hasOwnProperty(key)) {\n      const targetKey = key as keyof typeof target;\n      const sourceKey = key as keyof typeof source;\n      if (\n        target.hasOwnProperty(key) &&\n        typeof target[targetKey] === 'object' &&\n        typeof source[sourceKey] === 'object'\n      ) {\n        deepMerge(target[targetKey], source[sourceKey]);\n      } else {\n        target[targetKey] = source[sourceKey];\n      }\n    }\n  }\n}\n","import { Model } from './Model';\nimport { computed, DeepReadonly, readonly, ref, type Ref, toRef } from 'vue';\nimport { defineStore } from 'pinia';\n\nexport interface ISetup<M extends Model, Methods> {\n  local?: boolean;\n  methods?: Methods & ThisType<IBaseMethods<M> & Methods>;\n}\n\nexport interface IRepositoryDefinition<M extends Model, Methods> {\n  (): TRepository<M, Methods>;\n}\n\nexport type TRepository<M extends Model, Methods> =\n  & IBaseMethods<M>\n  & Methods\n  ;\n\ninterface IBaseMethods<M extends Model> {\n  items: Ref<Map<string, M>>;\n  isEmpty(): boolean;\n  isNotEmpty(): boolean;\n  count(): number;\n  clear(): void;\n  set(items: M[]): void;\n  add(items: M[] | M): void;\n  all(): M[];\n  find(id: string): M | null;\n  first(): M | null;\n  last(): M | null;\n  update(item: M, data?: Partial<M>): void;\n  update(item: string, data: Partial<M>): void;\n  remove(items: (M | string)[] | M | string): void;\n  toArray(): M[];\n  getWatchable(): Readonly<Ref<ReadonlyMap<string, DeepReadonly<M>>>>;\n}\n\nfunction createCollection<M extends Model>(): IBaseMethods<M> {\n  const items = ref(new Map<string, M>()) as Ref<Map<string, M>>;\n  return getBaseMethods(items);\n}\n\nfunction createModelStore<M extends Model>(name: string) {\n  return defineStore(name, () => {\n    return {\n      items: new Map<string, M>(),\n    };\n  });\n}\n\nfunction getBaseMethods<M extends Model>(items: Ref<Map<string, M>>): IBaseMethods<M> {\n  const list = computed(() => Array.from(items.value.values()));\n\n  return {\n    items,\n    isEmpty(): boolean {\n      return this.count() === 0;\n    },\n    isNotEmpty(): boolean {\n      return this.count() > 0;\n    },\n    count(): number {\n      return items.value.size;\n    },\n    clear(): void {\n      items.value.clear();\n    },\n    set(models: M[]): void {\n      this.clear();\n      models.forEach((model: M) => {\n        items.value.set(getModelId(model), model);\n      });\n    },\n    add(items: M[] | M) {\n      if (Array.isArray(items)) {\n        items.forEach((item: M) => this.add(item));\n      } else {\n        this.items.value.set(getModelId(items), items);\n      }\n    },\n    find(id: string): M | null {\n      return items.value.get(id) ?? null;\n    },\n    all(): M[] {\n      return list.value;\n    },\n    first(): M | null {\n      return list.value[0] ?? null;\n    },\n    last(): M | null {\n      return list.value[list.value.length - 1] ?? null;\n    },\n    update(item: string | M, data?: Partial<M>): void {\n      if (typeof data !== 'undefined') {\n        const id: string = typeof item === 'object'\n          ? getModelId(item)\n          : item;\n        const existingItem = this.find(id);\n        if (existingItem) {\n          items.value.set(id, existingItem.$update(data));\n        }\n      } else {\n        const model = item as M;\n        const id = getModelId(model);\n        const existingItem = this.find(id);\n        if (existingItem) {\n          items.value.set(id, existingItem.$update(model));\n        }\n      }\n    },\n    remove(models: (M | string)[] | M | string): void {\n      if (Array.isArray(models)) {\n        models.forEach((model: M | string) => this.remove(model));\n      } else {\n        items.value.delete(\n          typeof models === 'object'\n            ? getModelId(models)\n            : models,\n        );\n      }\n    },\n    toArray(): M[] {\n      return list.value;\n    },\n    getWatchable(): Readonly<Ref<ReadonlyMap<string, DeepReadonly<M>>>> {\n      return readonly(items);\n    },\n  };\n}\n\nfunction getModelId<M extends Model>(model: M): string {\n  const property = (model.constructor as any).primaryKey;\n  return model[property as keyof M] as string;\n}\n\nexport function defineRepository<M extends Model, Methods = {}>(ModelClass: new () => M, setup?: ISetup<M, Methods>): IRepositoryDefinition<M, Methods> {\n  let setupMethods = {} as Methods;\n\n  if (setup && setup.methods) {\n    setupMethods = setup.methods as Methods;\n  }\n\n  if (setup && setup.local) {\n    // We must return a named function, so it can be automatically detected in the controller\n    return function useRepository() {\n      const collection = createCollection<M>();\n\n      return {\n        ...collection,\n        ...setupMethods,\n      };\n    };\n  }\n\n  const useModelStore = createModelStore<M>(ModelClass.name);\n\n  // We must return a named function, so it can be automatically detected in the controller\n  return function useRepository() {\n    const store = useModelStore();\n    const items = toRef(store.items) as Ref<Map<string, M>>;\n    const baseMethods = getBaseMethods(items);\n\n    return {\n      ...baseMethods,\n      ...setupMethods,\n    };\n  };\n}\n\nexport const defineRepositoryExportsForTesting = {\n  getModelId,\n};\n","import { defineStore } from 'pinia';\nimport { ref } from 'vue';\nimport { IPagination } from './ApiResponse';\n\ninterface IPaginationSetup {\n  local?: boolean;\n}\n\ninterface IPaginationDefinition {\n  (): IPaginationInstance;\n}\n\nexport interface IPaginationInstance {\n  get(): IPagination | null;\n  set(pagination: IPagination): void;\n  clear(): void;\n}\n\nfunction defineGlobalPagination(name: string): IPaginationDefinition {\n  const useStore = defineStore(name + 'Pagination', () => {\n    const pagination = ref<IPagination | null>(null);\n\n    return {\n      pagination,\n    };\n  });\n\n  return function useGlobalPagination() {\n    const store = useStore();\n\n    function get(): IPagination | null {\n      return store.pagination;\n    }\n\n    function set(pagination: IPagination | null): void {\n      store.pagination = pagination;\n    }\n\n    function clear(): void {\n      set(null);\n    }\n\n    return {\n      get,\n      set,\n      clear,\n    };\n  }\n}\n\nfunction defineLocalPagination(): IPaginationDefinition {\n  return () => {\n    const _pagination = ref<IPagination | null>(null);\n\n    function get(): IPagination | null {\n      return _pagination.value;\n    }\n\n    function set(pagination: IPagination | null): void {\n      _pagination.value = pagination;\n    }\n\n    function clear(): void {\n      set(null);\n    }\n\n    return {\n      get,\n      set,\n      clear,\n    };\n  };\n}\n\nexport function definePagination(name: string, setup?: IPaginationSetup): IPaginationDefinition {\n  return setup?.local\n    ? defineLocalPagination()\n    : defineGlobalPagination(name);\n}\n","import { Model } from './Model';\nimport { defineApi, type IApiDefinition, type IBaseModelApi, type TApi, type ISetup as IApiSetup } from './defineApi';\nimport { TOverride } from './utils/types';\nimport { defineRepository, type IRepositoryDefinition, type TRepository, type ISetup as IRepositorySetup } from './defineRepository';\nimport { definePagination, IPaginationInstance } from './definePagination';\n\ntype TAsyncFunction = (...args: any[]) => Promise<any>;\n\ntype TActionsContext<M extends Model, ApiEndpoints, CustomRepositoryMethods, CustomActions> =\n  & CustomActions\n  & ThisType<CustomActions & ISetupContext<M, ApiEndpoints, CustomRepositoryMethods>>\n  ;\n\ntype TController<M extends Model, ApiEndpoints, RepositoryMethods, CustomActions> =\n  & IBaseController<M, ApiEndpoints, RepositoryMethods>\n  & CustomActions\n  & TOverride<IBaseModelApi<M>, CustomActions>\n  & TOverride<ApiEndpoints, CustomActions>\n  ;\n\ntype TReactionsTree<ApiEndpoints> = {\n  [K in keyof ApiEndpoints]-?: TReactionFunction;\n};\n\ntype TReactionFunction = (response: any, ...args: any[]) => void;\n\ninterface IBaseController<M extends Model, ApiEndpoints, RepositoryMethods> {\n  api: TApi<M, ApiEndpoints>;\n  repository: TRepository<M, RepositoryMethods>;\n  pagination: IPaginationInstance;\n}\n\ninterface ISetupContext<M extends Model, ApiEndpoints, CustomRepositoryMethods> {\n  api: TApi<M, ApiEndpoints>;\n  repository: TRepository<M, CustomRepositoryMethods>;\n}\n\ninterface ISetup<M extends Model, ApiEndpoints, RepositoryMethods, CustomActions, Reactions> {\n  actions?: TActionsContext<M, ApiEndpoints, RepositoryMethods, CustomActions>;\n  reactions?: Reactions;\n  api?: IApiSetup<M, ApiEndpoints>;\n  repository?: IRepositorySetup<M, RepositoryMethods>;\n}\n\ninterface IControllerDefinition<M extends Model, ApiEndpoints, RepositoryMethods, CustomActions> {\n  (): TController<M, ApiEndpoints, RepositoryMethods, CustomActions>;\n}\n\nfunction _defineController<\n  M extends Model,\n  Reactions extends TReactionsTree<CustomApiEndpoints>,\n  CustomApiEndpoints = {},\n  CustomRepositoryMethods = {},\n  CustomActions = {},\n>(\n  ModelClass: new () => M,\n  apiDefinition?: IApiDefinition<M, CustomApiEndpoints>,\n  repositoryDefinition?: IRepositoryDefinition<M, CustomRepositoryMethods>,\n  setup?: ISetup<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions, Reactions>,\n): IControllerDefinition<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions> {\n  const _useApi = apiDefinition\n    ? apiDefinition\n    : defineApi<M, CustomApiEndpoints>(ModelClass, setup?.api);\n  const _useRepository = repositoryDefinition\n    ? repositoryDefinition\n    : defineRepository<M, CustomRepositoryMethods>(ModelClass, setup?.repository);\n\n  const api = _useApi();\n  const baseActions = {} as typeof api;\n  const setupActions = setup?.actions ?? {} as CustomActions;\n  const setupReactions = setup?.reactions ?? {} as Reactions;\n  const usePagination = definePagination(ModelClass.name);\n\n  function getResponseData(response: any): any {\n    return response._apiResponse\n      ? response.getData()\n      : response;\n  }\n\n  return function useController() {\n    const repository = _useRepository();\n    const pagination = usePagination();\n\n    const responseHandlers = {\n      fetchAll(response: any): void {\n        repository.set(getResponseData(response));\n      },\n      fetchOne(response: any): void {\n        repository.add(getResponseData(response));\n      },\n      fetchMany(response: any): void {\n        repository.add(getResponseData(response));\n      },\n      createOne(response: any): void {\n        repository.add(getResponseData(response));\n      },\n      updateOne(response: any): void {\n        repository.update(getResponseData(response));\n      },\n      updateMany(models: any): void {\n        models.forEach((model: any) => repository.update(model));\n      },\n      deleteOne(_: any, ...args: any[]): void {\n        repository.remove(args[0]);\n      },\n      deleteMany(_: any, ...args: any[]): void {\n        repository.remove(args);\n      },\n    } as Record<keyof typeof api, (response: any, ...args: any[]) => void>;\n\n    Object.keys(api).forEach((key: string) => {\n      const endpointKey = key as keyof typeof api;\n\n      baseActions[endpointKey] = async function (...args: any[]): Promise<any> {\n        const response = await (api[endpointKey] as TAsyncFunction)(...args);\n        if (response._apiResponse && response.isPaginated()) {\n          pagination.set(response.getPagination() ?? null);\n        }\n        if (endpointKey in responseHandlers) {\n          responseHandlers[endpointKey](response, ...args);\n        } else if (endpointKey in setupReactions) {\n          (setupReactions[endpointKey as keyof Reactions] as TReactionFunction)(response, ...args);\n        }\n        return response;\n      } as any;\n    });\n\n    return {\n      api,\n      repository,\n      pagination,\n      ...baseActions,\n      ...setupActions,\n    };\n  };\n}\n\nfunction defineController<\n  M extends Model,\n  Reactions extends TReactionsTree<CustomApiEndpoints>,\n  CustomApiEndpoints = {},\n  CustomRepositoryMethods = {},\n  CustomActions = {},\n>(\n  ModelClass: new () => M,\n  setup?: ISetup<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions, Reactions>,\n): IControllerDefinition<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions>;\nfunction defineController<\n  M extends Model,\n  Reactions extends TReactionsTree<CustomApiEndpoints>,\n  CustomApiEndpoints = {},\n  CustomRepositoryMethods = {},\n  CustomActions = {},\n>(\n  ModelClass: new () => M,\n  apiDefinition: IApiDefinition<M, CustomApiEndpoints>,\n  setup?: ISetup<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions, Reactions>,\n): IControllerDefinition<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions>;\nfunction defineController<\n  M extends Model,\n  Reactions extends TReactionsTree<CustomApiEndpoints>,\n  CustomApiEndpoints = {},\n  CustomRepositoryMethods = {},\n  CustomActions = {},\n>(\n  ModelClass: new () => M,\n  repositoryDefinition: IRepositoryDefinition<M, CustomRepositoryMethods>,\n  setup?: ISetup<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions, Reactions>,\n): IControllerDefinition<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions>;\nfunction defineController<\n  M extends Model,\n  Reactions extends TReactionsTree<CustomApiEndpoints>,\n  CustomApiEndpoints = {},\n  CustomRepositoryMethods = {},\n  CustomActions = {},\n>(\n  ModelClass: new () => M,\n  apiDefinition: IApiDefinition<M, CustomApiEndpoints>,\n  repositoryDefinition: IRepositoryDefinition<M, CustomRepositoryMethods>,\n  setup?: ISetup<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions, Reactions>,\n): IControllerDefinition<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions>;\nfunction defineController<\n  M extends Model,\n  Reactions extends TReactionsTree<CustomApiEndpoints>,\n  CustomApiEndpoints = {},\n  CustomRepositoryMethods = {},\n  CustomActions = {},\n>(\n  ModelClass: new () => M,\n  apiDefinition?: IApiDefinition<M, CustomApiEndpoints> | ISetup<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions, Reactions>,\n  repositoryDefinition?: IRepositoryDefinition<M, CustomRepositoryMethods> | ISetup<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions, Reactions>,\n  setup?: ISetup<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions, Reactions>,\n): IControllerDefinition<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions> {\n  let _apiDefinition: IApiDefinition<M, CustomApiEndpoints> | undefined;\n  let _repositoryDefinition: IRepositoryDefinition<M, CustomRepositoryMethods> | undefined;\n\n  if (arguments.length === 4) {\n    _apiDefinition = apiDefinition as IApiDefinition<M, CustomApiEndpoints>;\n    _repositoryDefinition = repositoryDefinition as IRepositoryDefinition<M, CustomRepositoryMethods>;\n  } else if (arguments.length === 3) {\n    const functionName = arguments[1].name.toLowerCase();\n    const composable = functionName.includes('api')\n      ? 'api'\n      : 'repository';\n    _apiDefinition = composable === 'api'\n      ? arguments[1]\n      : undefined;\n    _repositoryDefinition = composable === 'repository'\n      ? arguments[1]\n      : undefined;\n    setup = arguments[2] as ISetup<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions, Reactions>;\n  } else if (arguments.length === 2) {\n    if (typeof arguments[1] === 'function') {\n      const functionName = arguments[1].name.toLowerCase();\n      const composable = functionName.includes('api')\n        ? 'api'\n        : 'repository';\n      _apiDefinition = composable === 'api'\n        ? arguments[1]\n        : undefined;\n      _repositoryDefinition = composable === 'repository'\n        ? arguments[1]\n        : undefined;\n    } else {\n      setup = arguments[1] as ISetup<M, CustomApiEndpoints, CustomRepositoryMethods, CustomActions, Reactions>;\n    }\n  }\n\n  return _defineController(ModelClass, _apiDefinition, _repositoryDefinition, setup);\n}\n\nexport {\n  defineController,\n};\n"],"mappings":"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","names":["data","options","items","defineStore","ref","_a"]}