{"version":3,"file":"pagination-PBtyt024.cjs","names":["issues: string","pageNum: number","pageSize: number","options: unknown","Paginator: {\n  paginate: <T>(coll: T[], opts: PaginationOptions) => Paginated<T>;\n  // paginate1: <T>(coll: T[], opts: PaginationOptions) => Paginated<T>;\n}","coll: T[]"],"sources":["../src/domain/pagination.ts"],"sourcesContent":["import { Result } from \"@carbonteq/fp\";\nimport { z } from \"zod\";\nimport { fromZodError } from \"zod-validation-error\";\nimport { ValidationError } from \"./base.errors.js\";\n\nexport class PaginationOptionsValidationError extends ValidationError {\n  constructor(issues: string) {\n    super(`Invalid pagination options: ${issues}`);\n  }\n}\n\nconst DEFAULT_PAGINATION_OPTS = {\n  pageNum: 1,\n  pageSize: 100,\n} as const;\n\nconst DISCRIMINANT = Symbol(\"PaginationOptions\");\n\nexport class PaginationOptions {\n  static readonly DEFAULT_PAGE_NUM = DEFAULT_PAGINATION_OPTS.pageNum;\n  static readonly DEFAULT_PAGE_SIZE = DEFAULT_PAGINATION_OPTS.pageSize;\n\n  /** Offset (Assumes page 0 is your first page) */\n  readonly offset: number;\n\n  /** Offset (Assumes page 1 is your first page) */\n  // readonly offset1: number;\n\n  private static readonly schema = z.object({\n    pageNum: z.coerce\n      .number()\n      .positive()\n      .default(DEFAULT_PAGINATION_OPTS.pageNum),\n    pageSize: z.coerce\n      .number()\n      .positive()\n      .default(DEFAULT_PAGINATION_OPTS.pageSize),\n  });\n  private readonly _DISCRIMINATOR = DISCRIMINANT;\n\n  private constructor(\n    readonly pageNum: number,\n    readonly pageSize: number,\n  ) {\n    this.offset = pageSize * pageNum;\n    // this.offset1 = pageSize * (pageNum - 1);\n  }\n\n  /**\n   * Validate the passed options to create `PaginationOptions` instance\n   * @param options - Pagination Options\n   * @param {number} options.pageNum - Page Number (default = 1)\n   * @param {number} options.pageSize - Page Size (default = 100)\n   * @returns {PaginationOptions} PaginationOptions instance\n   */\n  static create(\n    options: unknown,\n  ): Result<PaginationOptions, PaginationOptionsValidationError> {\n    const r = PaginationOptions.schema.safeParse(options);\n\n    if (r.success) {\n      return Result.Ok(new PaginationOptions(r.data.pageNum, r.data.pageSize));\n    }\n\n    const err = fromZodError(r.error);\n    return Result.Err(new PaginationOptionsValidationError(err.message));\n  }\n}\n\nexport interface Paginated<T> {\n  data: T[];\n  readonly pageNum: number;\n  readonly pageSize: number;\n  readonly totalPages: number;\n}\n\nexport const Paginator: {\n  paginate: <T>(coll: T[], opts: PaginationOptions) => Paginated<T>;\n  // paginate1: <T>(coll: T[], opts: PaginationOptions) => Paginated<T>;\n} = {\n  paginate<T>(\n    coll: T[],\n    { pageNum, pageSize, offset: offset0 }: PaginationOptions,\n  ): Paginated<T> {\n    const totalPages = Math.ceil(coll.length / pageSize) || 1;\n    const collSlice = coll.slice(offset0, offset0 + pageSize);\n\n    return { data: collSlice, pageNum, pageSize, totalPages };\n  },\n  // paginate1<T>(\n  // \tcoll: T[],\n  // \t{ pageNum, pageSize, offset1 }: PaginationOptions,\n  // ): Paginated<T> {\n  // \tconst totalPages = Math.ceil(coll.length / pageSize) || 1;\n  // \tconst collSlice = coll.slice(offset1, offset1 + pageSize);\n  //\n  // \treturn { data: collSlice, pageNum, pageSize, totalPages };\n  // },\n} as const;\n"],"mappings":";;;;;;;;AAKA,IAAa,mCAAb,cAAsD,oCAAgB;CACpE,YAAYA,QAAgB;AAC1B,SAAO,8BAA8B,OAAO,EAAE;CAC/C;AACF;AAED,MAAM,0BAA0B;CAC9B,SAAS;CACT,UAAU;AACX;AAED,MAAM,eAAe,OAAO,oBAAoB;AAEhD,IAAa,oBAAb,MAAa,kBAAkB;CAC7B,OAAgB,mBAAmB,wBAAwB;CAC3D,OAAgB,oBAAoB,wBAAwB;;CAQ5D,OAAwB,SAAS,MAAE,OAAO;EACxC,SAAS,MAAE,OACR,QAAQ,CACR,UAAU,CACV,QAAQ,wBAAwB,QAAQ;EAC3C,UAAU,MAAE,OACT,QAAQ,CACR,UAAU,CACV,QAAQ,wBAAwB,SAAS;CAC7C,EAAC;CACF,iBAAkC;CAElC,YACWC,SACAC,UACT;AAFS,OAAA,UAAA;AACA,OAAA,WAAA;AAET,OAAK,SAAS,WAAW;CAE1B;;;;;;;;CASD,OAAO,OACLC,SAC6D;EAC7D,MAAM,IAAI,kBAAkB,OAAO,UAAU,QAAQ;AAErD,MAAI,EAAE,QACJ,QAAO,sBAAO,GAAG,IAAI,kBAAkB,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU;EAG1E,MAAM,MAAM,uCAAa,EAAE,MAAM;AACjC,SAAO,sBAAO,IAAI,IAAI,iCAAiC,IAAI,SAAS;CACrE;AACF;AASD,MAAaC,YAGT,EACF,SACEC,MACA,EAAE,SAAS,UAAU,QAAQ,SAA4B,EAC3C;CACd,MAAM,aAAa,KAAK,KAAK,KAAK,SAAS,SAAS,IAAI;CACxD,MAAM,YAAY,KAAK,MAAM,SAAS,UAAU,SAAS;AAEzD,QAAO;EAAE,MAAM;EAAW;EAAS;EAAU;CAAY;AAC1D,EAUF"}