{"version":3,"file":"pagination.mjs","sources":["../../../src/core-api/service/pagination.ts"],"sourcesContent":["import { omit, has, toNumber, isNil } from 'lodash/fp';\n\nimport { errors, pagination } from '@strapi/utils';\n\ninterface BasePaginationParams {\n  withCount?: boolean | 't' | '1' | 'true' | 'f' | '0' | 'false' | 0 | 1;\n}\n\ntype PagedPagination = BasePaginationParams & {\n  page?: number;\n  pageSize?: number;\n};\n\ntype OffsetPagination = BasePaginationParams & {\n  start?: number;\n  limit?: number;\n};\n\nexport type PaginationParams = PagedPagination | OffsetPagination;\n\ntype PaginationInfo =\n  | {\n      page: number;\n      pageSize: number;\n    }\n  | {\n      start: number;\n      limit: number;\n    };\n\n/**\n * Default limit values from config\n */\nconst getLimitConfigDefaults = () => ({\n  defaultLimit: toNumber(strapi.config.get('api.rest.defaultLimit', 25)),\n  maxLimit: toNumber(strapi.config.get('api.rest.maxLimit')) || null,\n});\n\nconst isOffsetPagination = (pagination?: PaginationParams): pagination is OffsetPagination =>\n  has('start', pagination) || has('limit', pagination);\n\nconst isPagedPagination = (pagination?: PaginationParams): pagination is PagedPagination =>\n  has('page', pagination) || has('pageSize', pagination) || !isOffsetPagination(pagination);\n\nconst shouldCount = (params: { pagination?: PaginationParams }) => {\n  if (has('pagination.withCount', params)) {\n    const withCount = params.pagination?.withCount;\n\n    if (typeof withCount === 'boolean') {\n      return withCount;\n    }\n\n    if (typeof withCount === 'undefined') {\n      return false;\n    }\n\n    if (['true', 't', '1', 1].includes(withCount)) {\n      return true;\n    }\n\n    if (['false', 'f', '0', 0].includes(withCount)) {\n      return false;\n    }\n\n    throw new errors.ValidationError(\n      'Invalid withCount parameter. Expected \"t\",\"1\",\"true\",\"false\",\"0\",\"f\"'\n    );\n  }\n\n  return Boolean(strapi.config.get('api.rest.withCount', true));\n};\n\nconst getPaginationInfo = (params: { pagination?: PaginationParams }): PaginationInfo => {\n  const { defaultLimit, maxLimit } = getLimitConfigDefaults();\n\n  const { start, limit } = pagination.withDefaultPagination(params.pagination || {}, {\n    defaults: { offset: { limit: defaultLimit }, page: { pageSize: defaultLimit } },\n    maxLimit: maxLimit || -1,\n  });\n\n  return { start, limit };\n};\n\nconst transformPaginationResponse = (\n  paginationInfo: PaginationInfo,\n  total: number | undefined,\n  isPaged: boolean\n) => {\n  const transform = isPaged\n    ? pagination.transformPagedPaginationInfo\n    : pagination.transformOffsetPaginationInfo;\n\n  const paginationResponse = transform(paginationInfo, total!);\n\n  if (isNil(total)) {\n    // Ignore total and pageCount if `total` value is not available.\n    return omit(['total', 'pageCount'], paginationResponse) as ReturnType<typeof transform>;\n  }\n\n  return paginationResponse;\n};\n\nexport { isPagedPagination, shouldCount, getPaginationInfo, transformPaginationResponse };\n"],"names":["getLimitConfigDefaults","defaultLimit","toNumber","strapi","config","get","maxLimit","isOffsetPagination","pagination","has","isPagedPagination","shouldCount","params","withCount","includes","errors","ValidationError","Boolean","getPaginationInfo","start","limit","withDefaultPagination","defaults","offset","page","pageSize","transformPaginationResponse","paginationInfo","total","isPaged","transform","transformPagedPaginationInfo","transformOffsetPaginationInfo","paginationResponse","isNil","omit"],"mappings":";;;AA8BA;;IAGA,MAAMA,sBAAAA,GAAyB,KAAO;AACpCC,QAAAA,YAAAA,EAAcC,SAASC,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,uBAAA,EAAyB,EAAA,CAAA,CAAA;AAClEC,QAAAA,QAAAA,EAAUJ,SAASC,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,mBAAA,CAAA,CAAA,IAAyB;KAChE,CAAA;AAEA,MAAME,qBAAqB,CAACC,UAAAA,GAC1BC,IAAI,OAAA,EAASD,UAAAA,CAAAA,IAAeC,IAAI,OAAA,EAASD,UAAAA,CAAAA;AAE3C,MAAME,iBAAAA,GAAoB,CAACF,UAAAA,GACzBC,GAAAA,CAAI,MAAA,EAAQD,eAAeC,GAAAA,CAAI,UAAA,EAAYD,UAAAA,CAAAA,IAAe,CAACD,kBAAAA,CAAmBC,UAAAA;AAEhF,MAAMG,cAAc,CAACC,MAAAA,GAAAA;IACnB,IAAIH,GAAAA,CAAI,wBAAwBG,MAAAA,CAAAA,EAAS;QACvC,MAAMC,SAAAA,GAAYD,MAAAA,CAAOJ,UAAU,EAAEK,SAAAA;QAErC,IAAI,OAAOA,cAAc,SAAA,EAAW;YAClC,OAAOA,SAAAA;AACT,QAAA;QAEA,IAAI,OAAOA,cAAc,WAAA,EAAa;YACpC,OAAO,KAAA;AACT,QAAA;QAEA,IAAI;AAAC,YAAA,MAAA;AAAQ,YAAA,GAAA;AAAK,YAAA,GAAA;AAAK,YAAA;SAAE,CAACC,QAAQ,CAACD,SAAAA,CAAAA,EAAY;YAC7C,OAAO,IAAA;AACT,QAAA;QAEA,IAAI;AAAC,YAAA,OAAA;AAAS,YAAA,GAAA;AAAK,YAAA,GAAA;AAAK,YAAA;SAAE,CAACC,QAAQ,CAACD,SAAAA,CAAAA,EAAY;YAC9C,OAAO,KAAA;AACT,QAAA;QAEA,MAAM,IAAIE,MAAAA,CAAOC,eAAe,CAC9B,sEAAA,CAAA;AAEJ,IAAA;AAEA,IAAA,OAAOC,QAAQd,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,oBAAA,EAAsB,IAAA,CAAA,CAAA;AACzD;AAEA,MAAMa,oBAAoB,CAACN,MAAAA,GAAAA;AACzB,IAAA,MAAM,EAAEX,YAAY,EAAEK,QAAQ,EAAE,GAAGN,sBAAAA,EAAAA;AAEnC,IAAA,MAAM,EAAEmB,KAAK,EAAEC,KAAK,EAAE,GAAGZ,UAAAA,CAAWa,qBAAqB,CAACT,MAAAA,CAAOJ,UAAU,IAAI,EAAC,EAAG;QACjFc,QAAAA,EAAU;YAAEC,MAAAA,EAAQ;gBAAEH,KAAAA,EAAOnB;AAAa,aAAA;YAAGuB,IAAAA,EAAM;gBAAEC,QAAAA,EAAUxB;AAAa;AAAE,SAAA;AAC9EK,QAAAA,QAAAA,EAAUA,YAAY;AACxB,KAAA,CAAA;IAEA,OAAO;AAAEa,QAAAA,KAAAA;AAAOC,QAAAA;AAAM,KAAA;AACxB;AAEA,MAAMM,2BAAAA,GAA8B,CAClCC,cAAAA,EACAC,KAAAA,EACAC,OAAAA,GAAAA;AAEA,IAAA,MAAMC,YAAYD,OAAAA,GACdrB,UAAAA,CAAWuB,4BAA4B,GACvCvB,WAAWwB,6BAA6B;IAE5C,MAAMC,kBAAAA,GAAqBH,UAAUH,cAAAA,EAAgBC,KAAAA,CAAAA;AAErD,IAAA,IAAIM,MAAMN,KAAAA,CAAAA,EAAQ;;AAEhB,QAAA,OAAOO,IAAAA,CAAK;AAAC,YAAA,OAAA;AAAS,YAAA;SAAY,EAAEF,kBAAAA,CAAAA;AACtC,IAAA;IAEA,OAAOA,kBAAAA;AACT;;;;"}