{"version":3,"sources":["../src/index.ts","../src/provider.ts","../src/utils/mapOperator.ts","../src/utils/generateSort.ts","../src/utils/generateFilter.ts","../src/utils/axios.ts"],"sourcesContent":["import { stringify } from \"query-string\";\nimport { dataProvider } from \"./provider.js\";\n\nexport default dataProvider;\n\nexport * from \"./utils/index.js\";\n\nexport { stringify };\n","import type { AxiosInstance } from \"axios\";\nimport { stringify } from \"query-string\";\nimport type { DataProvider } from \"@refinedev/core\";\nimport { axiosInstance, generateSort, generateFilter } from \"./utils\";\n\ntype MethodTypes = \"get\" | \"delete\" | \"head\" | \"options\";\ntype MethodTypesWithBody = \"post\" | \"put\" | \"patch\";\n\nexport const dataProvider = (\n  apiUrl: string,\n  httpClient: AxiosInstance = axiosInstance,\n): Omit<\n  Required<DataProvider>,\n  \"createMany\" | \"updateMany\" | \"deleteMany\"\n> => ({\n  getList: async ({ resource, pagination, filters, sorters, meta }) => {\n    const url = `${apiUrl}/${resource}`;\n\n    const {\n      currentPage = 1,\n      pageSize = 10,\n      mode = \"server\",\n    } = pagination ?? {};\n\n    const { headers: headersFromMeta, method } = meta ?? {};\n    const requestMethod = (method as MethodTypes) ?? \"get\";\n\n    const queryFilters = generateFilter(filters);\n\n    const query: {\n      _start?: number;\n      _end?: number;\n      _sort?: string;\n      _order?: string;\n    } = {};\n\n    if (mode === \"server\") {\n      query._start = (currentPage - 1) * pageSize;\n      query._end = currentPage * pageSize;\n    }\n\n    const generatedSort = generateSort(sorters);\n    if (generatedSort) {\n      const { _sort, _order } = generatedSort;\n      query._sort = _sort.join(\",\");\n      query._order = _order.join(\",\");\n    }\n\n    const combinedQuery = { ...query, ...queryFilters };\n    const urlWithQuery = Object.keys(combinedQuery).length\n      ? `${url}?${stringify(combinedQuery)}`\n      : url;\n\n    const { data, headers } = await httpClient[requestMethod](urlWithQuery, {\n      headers: headersFromMeta,\n    });\n\n    const total = +headers[\"x-total-count\"];\n\n    return {\n      data,\n      total: total || data.length,\n    };\n  },\n\n  getMany: async ({ resource, ids, meta }) => {\n    const { headers, method } = meta ?? {};\n    const requestMethod = (method as MethodTypes) ?? \"get\";\n\n    const { data } = await httpClient[requestMethod](\n      `${apiUrl}/${resource}?${stringify({ id: ids })}`,\n      { headers },\n    );\n\n    return {\n      data,\n    };\n  },\n\n  create: async ({ resource, variables, meta }) => {\n    const url = `${apiUrl}/${resource}`;\n\n    const { headers, method } = meta ?? {};\n    const requestMethod = (method as MethodTypesWithBody) ?? \"post\";\n\n    const { data } = await httpClient[requestMethod](url, variables, {\n      headers,\n    });\n\n    return {\n      data,\n    };\n  },\n\n  update: async ({ resource, id, variables, meta }) => {\n    const url = `${apiUrl}/${resource}/${id}`;\n\n    const { headers, method } = meta ?? {};\n    const requestMethod = (method as MethodTypesWithBody) ?? \"patch\";\n\n    const { data } = await httpClient[requestMethod](url, variables, {\n      headers,\n    });\n\n    return {\n      data,\n    };\n  },\n\n  getOne: async ({ resource, id, meta }) => {\n    const url = `${apiUrl}/${resource}/${id}`;\n\n    const { headers, method } = meta ?? {};\n    const requestMethod = (method as MethodTypes) ?? \"get\";\n\n    const { data } = await httpClient[requestMethod](url, { headers });\n\n    return {\n      data,\n    };\n  },\n\n  deleteOne: async ({ resource, id, variables, meta }) => {\n    const url = `${apiUrl}/${resource}/${id}`;\n\n    const { headers, method } = meta ?? {};\n    const requestMethod = (method as MethodTypesWithBody) ?? \"delete\";\n\n    const { data } = await httpClient[requestMethod](url, {\n      data: variables,\n      headers,\n    });\n\n    return {\n      data,\n    };\n  },\n\n  getApiUrl: () => {\n    return apiUrl;\n  },\n\n  custom: async ({\n    url,\n    method,\n    filters,\n    sorters,\n    payload,\n    query,\n    headers,\n  }) => {\n    let requestUrl = `${url}?`;\n\n    if (sorters) {\n      const generatedSort = generateSort(sorters);\n      if (generatedSort) {\n        const { _sort, _order } = generatedSort;\n        const sortQuery = {\n          _sort: _sort.join(\",\"),\n          _order: _order.join(\",\"),\n        };\n        requestUrl = `${requestUrl}&${stringify(sortQuery)}`;\n      }\n    }\n\n    if (filters) {\n      const filterQuery = generateFilter(filters);\n      requestUrl = `${requestUrl}&${stringify(filterQuery)}`;\n    }\n\n    if (query) {\n      requestUrl = `${requestUrl}&${stringify(query)}`;\n    }\n\n    let axiosResponse;\n    switch (method) {\n      case \"put\":\n      case \"post\":\n      case \"patch\":\n        axiosResponse = await httpClient[method](url, payload, {\n          headers,\n        });\n        break;\n      case \"delete\":\n        axiosResponse = await httpClient.delete(url, {\n          data: payload,\n          headers: headers,\n        });\n        break;\n      default:\n        axiosResponse = await httpClient.get(requestUrl, {\n          headers,\n        });\n        break;\n    }\n\n    const { data } = axiosResponse;\n\n    return Promise.resolve({ data });\n  },\n});\n","import type { CrudOperators } from \"@refinedev/core\";\n\nexport const mapOperator = (operator: CrudOperators): string => {\n  switch (operator) {\n    case \"ne\":\n    case \"gte\":\n    case \"lte\":\n      return `_${operator}`;\n    case \"contains\":\n      return \"_like\";\n    default:\n      return \"\";\n  }\n};\n","import type { CrudSorting } from \"@refinedev/core\";\n\nexport const generateSort = (sorters?: CrudSorting) => {\n  if (sorters && sorters.length > 0) {\n    const _sort: string[] = [];\n    const _order: string[] = [];\n\n    sorters.map((item) => {\n      _sort.push(item.field);\n      _order.push(item.order);\n    });\n\n    return {\n      _sort,\n      _order,\n    };\n  }\n\n  return;\n};\n","import type { CrudFilters } from \"@refinedev/core\";\nimport { mapOperator } from \"./mapOperator\";\n\nexport const generateFilter = (filters?: CrudFilters) => {\n  const queryFilters: { [key: string]: string } = {};\n\n  if (filters) {\n    filters.map((filter) => {\n      if (filter.operator === \"or\" || filter.operator === \"and\") {\n        throw new Error(\n          `[@refinedev/simple-rest]: \\`operator: ${filter.operator}\\` is not supported. You can create custom data provider. https://refine.dev/docs/api-reference/core/providers/data-provider/#creating-a-data-provider`,\n        );\n      }\n\n      if (\"field\" in filter) {\n        const { field, operator, value } = filter;\n\n        if (field === \"q\") {\n          queryFilters[field] = value;\n          return;\n        }\n\n        const mappedOperator = mapOperator(operator);\n        queryFilters[`${field}${mappedOperator}`] = value;\n      }\n    });\n  }\n\n  return queryFilters;\n};\n","import type { HttpError } from \"@refinedev/core\";\nimport axios from \"axios\";\n\nconst axiosInstance = axios.create();\n\naxiosInstance.interceptors.response.use(\n  (response) => {\n    return response;\n  },\n  (error) => {\n    const customError: HttpError = {\n      ...error,\n      message: error.response?.data?.message,\n      statusCode: error.response?.status,\n    };\n\n    return Promise.reject(customError);\n  },\n);\n\nexport { axiosInstance };\n"],"mappings":"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","names":["stringify"]}