@longzai-intelligence/pagination 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +36 -203
  2. package/dist/hono.cjs +1 -0
  3. package/dist/hono.d.cts +15 -0
  4. package/dist/hono.d.mts +15 -0
  5. package/dist/hono.mjs +1 -0
  6. package/dist/index-C4IwIpFc.d.mts +199 -0
  7. package/dist/index-DpbbjAwO.d.cts +199 -0
  8. package/dist/index.cjs +1 -1
  9. package/dist/index.d.cts +79 -80
  10. package/dist/index.d.mts +79 -80
  11. package/dist/index.mjs +1 -1
  12. package/dist/typeorm.cjs +1 -0
  13. package/dist/typeorm.d.cts +26 -0
  14. package/dist/typeorm.d.mts +26 -0
  15. package/dist/typeorm.mjs +1 -0
  16. package/dist/utils-B200OLT-.cjs +1 -0
  17. package/dist/utils-DsM7-PZL.mjs +1 -0
  18. package/package.json +29 -5
  19. package/.turbo/turbo-build.log +0 -22
  20. package/.turbo/turbo-lint.log +0 -1
  21. package/.turbo/turbo-test$colon$coverage.log +0 -36
  22. package/.turbo/turbo-test.log +0 -14
  23. package/.turbo/turbo-typecheck.log +0 -4
  24. package/CHANGELOG.md +0 -11
  25. package/coverage/base.css +0 -224
  26. package/coverage/block-navigation.js +0 -87
  27. package/coverage/coverage-final.json +0 -12
  28. package/coverage/favicon.png +0 -0
  29. package/coverage/index.html +0 -161
  30. package/coverage/prettify.css +0 -1
  31. package/coverage/prettify.js +0 -2
  32. package/coverage/sort-arrow-sprite.png +0 -0
  33. package/coverage/sorter.js +0 -210
  34. package/coverage/src/adapters/index.html +0 -131
  35. package/coverage/src/adapters/index.ts.html +0 -118
  36. package/coverage/src/adapters/typeorm.adapter.ts.html +0 -940
  37. package/coverage/src/index.html +0 -116
  38. package/coverage/src/index.ts.html +0 -253
  39. package/coverage/src/types/index.html +0 -176
  40. package/coverage/src/types/index.ts.html +0 -133
  41. package/coverage/src/types/pagination.types.ts.html +0 -292
  42. package/coverage/src/types/result.types.ts.html +0 -415
  43. package/coverage/src/types/sort.types.ts.html +0 -265
  44. package/coverage/src/types/typeorm.d.ts.html +0 -196
  45. package/coverage/src/utils/index.html +0 -146
  46. package/coverage/src/utils/index.ts.html +0 -178
  47. package/coverage/src/utils/pagination.util.ts.html +0 -703
  48. package/coverage/src/utils/validation.util.ts.html +0 -535
  49. package/eslint.config.ts +0 -3
  50. package/src/__tests__/index.test.ts +0 -66
  51. package/src/__tests__/pagination.util.test.ts +0 -253
  52. package/src/__tests__/typeorm.adapter.test.ts +0 -214
  53. package/src/__tests__/validation.util.test.ts +0 -122
  54. package/src/adapters/index.ts +0 -11
  55. package/src/adapters/typeorm.adapter.ts +0 -285
  56. package/src/index.ts +0 -56
  57. package/src/types/index.ts +0 -16
  58. package/src/types/pagination.types.ts +0 -69
  59. package/src/types/result.types.ts +0 -110
  60. package/src/types/sort.types.ts +0 -60
  61. package/src/types/typeorm.d.ts +0 -37
  62. package/src/utils/index.ts +0 -31
  63. package/src/utils/pagination.util.ts +0 -206
  64. package/src/utils/validation.util.ts +0 -150
  65. package/tsconfig/.cache/app.tsbuildinfo +0 -1
  66. package/tsconfig/.cache/build.tsbuildinfo +0 -1
  67. package/tsconfig/.cache/node.tsbuildinfo +0 -1
  68. package/tsconfig/.cache/test.tsbuildinfo +0 -1
  69. package/tsconfig/app.json +0 -12
  70. package/tsconfig/node.json +0 -11
  71. package/tsconfig/test.json +0 -14
  72. package/tsconfig.json +0 -9
  73. package/tsdown.config.ts +0 -6
  74. package/vitest.config.ts +0 -3
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e={page:1,pageSize:20,maxPageSize:100,minPageSize:1};function t(t){return{page:Math.max(1,Math.floor(t?.page??e.page)),pageSize:Math.min(e.maxPageSize,Math.max(e.minPageSize,Math.floor(t?.pageSize??e.pageSize)))}}function n(t){return{limit:Math.min(e.maxPageSize,Math.max(e.minPageSize,Math.floor(t?.limit??e.pageSize))),offset:Math.max(0,Math.floor(t?.offset??0))}}function r(e,t){return(e-1)*t}function i(e,t){return t<=0?0:Math.ceil(e/t)}function a(e,t){return e<t}function o(e){return e>1}function s(e,t){let n=Math.max(1,t);return{page:Math.floor(e/n)+1,pageSize:n}}function c(e,t){let n=Math.max(1,e),r=Math.max(1,t);return{offset:(n-1)*r,limit:r}}function l(e,t,n,r){let s=i(t,r);return{items:e,total:t,page:n,pageSize:r,totalPages:s,hasNextPage:a(n,s),hasPreviousPage:o(n)}}function u(e){return typeof e==`object`&&!!e}function d(e){return typeof e==`number`&&Number.isInteger(e)&&e>=1}function f(t){return typeof t==`number`&&Number.isInteger(t)&&t>=e.minPageSize&&t<=e.maxPageSize}function p(e){return typeof e==`number`&&Number.isInteger(e)&&e>=0}function m(t){return typeof t==`number`&&Number.isInteger(t)&&t>=e.minPageSize&&t<=e.maxPageSize}function h(e){if(!u(e))return!1;let t=e.page,n=e.pageSize;return(t===void 0||d(t))&&(n===void 0||f(n))}function g(e){if(!u(e))return!1;let t=e.limit,n=e.offset;return(t===void 0||m(t))&&(n===void 0||p(n))}function _(e){return e!==void 0&&`mapper`in e}function v(e,t,n,r){let s=i(t,r);return{items:e,total:t,page:n,pageSize:r,totalPages:s,hasNextPage:a(n,s),hasPreviousPage:o(n)}}async function y(e,n,i){let{page:a,pageSize:o}=t(n),s={skip:r(a,o),take:o,where:i?.where,relations:i?.relations,select:i?.select,order:i?.order??{createdAt:`DESC`}},[c,l]=await e.findAndCount(s);return _(i)?v(await Promise.all(c.map(i.mapper)),l,a,o):v(c,l,a,o)}async function b(e,n,i){let{page:a,pageSize:o}=t(n),s=r(a,o);e.skip(s).take(o);let[c,l]=await e.getManyAndCount();return v(i?await Promise.all(c.map(i)):c,l,a,o)}function x(e,t){return e.createQueryBuilder(t??e.metadata.name.toLowerCase())}exports.PAGINATION_DEFAULTS=e,exports.calculateOffset=r,exports.calculateTotalPages=i,exports.createPaginatedResult=l,exports.createPaginationQueryBuilder=x,exports.hasNextPage=a,exports.hasPreviousPage=o,exports.isValidLimit=m,exports.isValidOffset=p,exports.isValidOffsetPagination=g,exports.isValidPage=d,exports.isValidPageSize=f,exports.isValidPagination=h,exports.normalizeOffsetPagination=n,exports.normalizePagination=t,exports.offsetToPage=s,exports.pageToOffset=c,exports.paginateWithQueryBuilder=b,exports.paginateWithRepository=y;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./utils-B200OLT-.cjs`);let t=require(`zod`);function n(e){if(e===void 0)return;let t=Number(e);return Number.isNaN(t)?void 0:t}function r(r){let i=r?.pageSizeField??`pageSize`,a=e.u({pageSize:r?.defaultPageSize,maxPageSize:r?.maxPageSize}),o=e.P({mode:`page`,pageSizeField:i}),s=r?.sortFields?e.C([...r.sortFields]):t.z.object({}),c=o.merge(s).extend(r?.businessFields??{});return{querySchema:c,resultSchema:e.O(t.z.unknown(),{mode:`page`,pageSizeField:i}),defaults:a,normalize(e){return a.normalize({page:e?.page,pageSize:e?.[i]})},parseQuery(e){let t={};if(e.page!==void 0&&(t.page=n(e.page)),e[i]!==void 0&&(t[i]=n(e[i])),e.sortBy!==void 0&&(t.sortBy=e.sortBy),e.sortOrder!==void 0&&(t.sortOrder=e.sortOrder),r?.businessFields)for(let n of Object.keys(r.businessFields))e[n]!==void 0&&(t[n]=e[n]);return c.parse(t)},buildResult(t,n,r,i){return e.l(t,n,r,i)}}}function i(e){if(e===void 0)return;let t=Number(e);return Number.isNaN(t)?void 0:t}function a(n){let r=n?.cursorField??`cursor`,a=e.P({mode:`cursor`,cursorField:r}).extend(n?.businessFields??{});return{querySchema:a,resultSchema:e.O(t.z.unknown(),{mode:`cursor`}),parseQuery(e){let t={};if(e[r]!==void 0&&(t[r]=e[r]),e.limit!==void 0&&(t.limit=i(e.limit)),n?.businessFields)for(let r of Object.keys(n.businessFields))e[r]!==void 0&&(t[r]=e[r]);return a.parse(t)},buildResult(e,t,n){return{items:e,nextCursor:t,previousCursor:null,hasMore:n}}}}function o(e){if(e===void 0)return;let t=Number(e);return Number.isNaN(t)?void 0:t}function s(n){let r=e.P({mode:`offset`,fields:{limit:!0,offset:!1}}).extend(n?.businessFields??{});return{querySchema:r,resultSchema:e.O(t.z.unknown(),{mode:`compact`}),parseQuery(e){let t={};if(e.limit!==void 0&&(t.limit=o(e.limit)),n?.businessFields)for(let r of Object.keys(n.businessFields))e[r]!==void 0&&(t[r]=e[r]);return r.parse(t)},buildResult(e,t,n){return{items:e,total:t,hasMore:n}}}}function c(e){if(e===void 0)return;let t=Number(e);return Number.isNaN(t)?void 0:t}function l(n){let r=n?.mode??`page`,i=n?.pageSizeField??`pageSize`,a=e.P({mode:r,pageSizeField:i}).extend(n?.businessFields??{});return{querySchema:a,resultSchema:e.O(t.z.unknown(),{mode:`compact`}),parseQuery(e){let t={};if(r===`page`?(e.page!==void 0&&(t.page=c(e.page)),e[i]!==void 0&&(t[i]=c(e[i]))):(e.limit!==void 0&&(t.limit=c(e.limit)),e.offset!==void 0&&(t.offset=c(e.offset))),n?.businessFields)for(let r of Object.keys(n.businessFields))e[r]!==void 0&&(t[r]=e[r]);return a.parse(t)},buildResult(e,t,n){return{items:e,total:t,hasMore:n}}}}exports.CursorPaginationParamsSchema=e.A,exports.MultiSortParamsSchema=e._,exports.OffsetPaginationParamsSchema=e.j,exports.PAGINATION_DEFAULTS=e.k,exports.PaginationDefaultsSchema=e.M,exports.PaginationParamsSchema=e.N,exports.SortItemSchema=e.v,exports.SortOrderSchema=e.y,exports.SortParamsSchema=e.b,exports.calculateOffset=e.s,exports.calculateTotalPages=e.c,exports.createCompactListPreset=l,exports.createCompactPaginatedResultSchema=e.w,exports.createCursorPaginatedResultSchema=e.T,exports.createInfiniteScrollPreset=a,exports.createMultiSortParamsSchema=e.x,exports.createOffsetPaginatedResultSchema=e.E,exports.createPaginatedResult=e.l,exports.createPaginatedResultSchema=e.D,exports.createPaginationDefaults=e.u,exports.createPaginationSchema=e.P,exports.createResultSchema=e.O,exports.createSortItemSchema=e.S,exports.createSortParamsSchema=e.C,exports.createTablePreset=r,exports.createTimelinePreset=s,exports.hasNextPage=e.d,exports.hasPreviousPage=e.f,exports.isValidLimit=e.t,exports.isValidOffset=e.n,exports.isValidOffsetPagination=e.r,exports.isValidPage=e.i,exports.isValidPageSize=e.a,exports.isValidPagination=e.o,exports.normalizeOffsetPagination=e.p,exports.normalizePagination=e.m,exports.offsetToPage=e.h,exports.pageToOffset=e.g;
package/dist/index.d.cts CHANGED
@@ -1,64 +1,7 @@
1
- import { FindManyOptions, FindOptionsOrder, ObjectLiteral, Repository, SelectQueryBuilder } from "typeorm";
1
+ import { A as createPaginationSchema, C as CursorPaginationParamsSchema, D as PaginationDefaultsSchema, E as PaginationDefaults, O as PaginationParams, S as CursorPaginationParams, T as OffsetPaginationParamsSchema, _ as createCursorPaginatedResultSchema, a as SortOrder, b as createResultSchema, c as SortParamsSchema, d as createSortParamsSchema, f as CompactPaginatedResult, g as createCompactPaginatedResultSchema, h as PaginatedResult, i as SortItemSchema, k as PaginationParamsSchema, l as createMultiSortParamsSchema, m as OffsetPaginatedResult, n as MultiSortParamsSchema, o as SortOrderSchema, p as CursorPaginatedResult, r as SortItem, s as SortParams, t as MultiSortParams, u as createSortItemSchema, v as createOffsetPaginatedResultSchema, w as OffsetPaginationParams, x as PAGINATION_DEFAULTS, y as createPaginatedResultSchema } from "./index-DpbbjAwO.cjs";
2
+ import * as _$zod from "zod";
3
+ import { z } from "zod";
2
4
 
3
- //#region src/types/pagination.types.d.ts
4
- type PaginationParams = {
5
- page?: number;
6
- pageSize?: number;
7
- };
8
- type OffsetPaginationParams = {
9
- limit?: number;
10
- offset?: number;
11
- };
12
- type CursorPaginationParams = {
13
- cursor?: string;
14
- limit?: number;
15
- };
16
- declare const PAGINATION_DEFAULTS: {
17
- readonly page: 1;
18
- readonly pageSize: 20;
19
- readonly maxPageSize: 100;
20
- readonly minPageSize: 1;
21
- };
22
- type PaginationDefaults = typeof PAGINATION_DEFAULTS;
23
- //#endregion
24
- //#region src/types/result.types.d.ts
25
- type PaginatedResult<T> = {
26
- items: T[];
27
- total: number;
28
- page: number;
29
- pageSize: number;
30
- totalPages: number;
31
- hasNextPage: boolean;
32
- hasPreviousPage: boolean;
33
- };
34
- type OffsetPaginatedResult<T> = {
35
- items: T[];
36
- total: number;
37
- limit: number;
38
- offset: number;
39
- hasMore: boolean;
40
- };
41
- type CursorPaginatedResult<T> = {
42
- items: T[];
43
- nextCursor: string | null;
44
- previousCursor: string | null;
45
- hasMore: boolean;
46
- };
47
- //#endregion
48
- //#region src/types/sort.types.d.ts
49
- type SortOrder = 'asc' | 'desc';
50
- type SortParams<T extends string = string> = {
51
- sortBy?: T;
52
- sortOrder?: SortOrder;
53
- };
54
- type SortItem<T extends string = string> = {
55
- field: T;
56
- order: SortOrder;
57
- };
58
- type MultiSortParams<T extends string = string> = {
59
- sort?: SortItem<T>[];
60
- };
61
- //#endregion
62
5
  //#region src/utils/pagination.util.d.ts
63
6
  type OffsetPaginationResult = {
64
7
  page: number;
@@ -77,6 +20,20 @@ declare function hasPreviousPage(page: number): boolean;
77
20
  declare function offsetToPage(offset: number, limit: number): OffsetPaginationResult;
78
21
  declare function pageToOffset(page: number, pageSize: number): PagePaginationResult;
79
22
  declare function createPaginatedResult<T>(items: T[], total: number, page: number, pageSize: number): PaginatedResult<T>;
23
+ type PaginationDefaultsOverrides = {
24
+ page?: number;
25
+ pageSize?: number;
26
+ maxPageSize?: number;
27
+ minPageSize?: number;
28
+ };
29
+ declare function createPaginationDefaults(overrides?: PaginationDefaultsOverrides): {
30
+ normalize(params?: PaginationParams): Required<PaginationParams>;
31
+ normalizeOffset(params?: OffsetPaginationParams): Required<OffsetPaginationParams>;
32
+ page: number;
33
+ pageSize: number;
34
+ maxPageSize: number;
35
+ minPageSize: number;
36
+ };
80
37
  //#endregion
81
38
  //#region src/utils/validation.util.d.ts
82
39
  type PaginationValidationResult = {
@@ -94,24 +51,66 @@ declare function isValidLimit(limit: unknown): limit is number;
94
51
  declare function isValidPagination(params: unknown): params is PaginationValidationResult;
95
52
  declare function isValidOffsetPagination(params: unknown): params is OffsetPaginationValidationResult;
96
53
  //#endregion
97
- //#region src/adapters/typeorm.adapter.d.ts
98
- type EntityMapper<TEntity, TDto> = (entity: TEntity) => TDto | Promise<TDto>;
99
- type TypeOrmPaginateOptionsWithMapper<TEntity extends ObjectLiteral, TDto> = {
100
- mapper: EntityMapper<TEntity, TDto>;
101
- order?: FindOptionsOrder<TEntity>;
102
- where?: FindManyOptions<TEntity>['where'];
103
- relations?: FindManyOptions<TEntity>['relations'];
104
- select?: FindManyOptions<TEntity>['select'];
105
- };
106
- type TypeOrmPaginateOptionsNoMapper<TEntity extends ObjectLiteral> = {
107
- order?: FindOptionsOrder<TEntity>;
108
- where?: FindManyOptions<TEntity>['where'];
109
- relations?: FindManyOptions<TEntity>['relations'];
110
- select?: FindManyOptions<TEntity>['select'];
111
- };
112
- type TypeOrmPaginateOptions<TEntity extends ObjectLiteral, TDto = TEntity> = TypeOrmPaginateOptionsWithMapper<TEntity, TDto> | TypeOrmPaginateOptionsNoMapper<TEntity>;
113
- declare function paginateWithRepository<TEntity extends ObjectLiteral, TDto = TEntity>(repository: Repository<TEntity>, params: PaginationParams, options?: TypeOrmPaginateOptions<TEntity, TDto>): Promise<PaginatedResult<TEntity | TDto>>;
114
- declare function paginateWithQueryBuilder<TEntity extends ObjectLiteral, TDto = TEntity>(queryBuilder: SelectQueryBuilder<TEntity>, params: PaginationParams, mapper?: EntityMapper<TEntity, TDto>): Promise<PaginatedResult<TEntity | TDto>>;
115
- declare function createPaginationQueryBuilder<TEntity extends ObjectLiteral>(repository: Repository<TEntity>, alias?: string): SelectQueryBuilder<TEntity>;
54
+ //#region src/presets/types.d.ts
55
+ type PaginationPreset<Q, R> = {
56
+ querySchema: _$zod.ZodTypeAny;
57
+ resultSchema: _$zod.ZodTypeAny;
58
+ parseQuery(query: Record<string, string | undefined>): Q;
59
+ buildResult(...args: unknown[]): R;
60
+ };
61
+ type TablePresetConfig = {
62
+ pageSizeField?: 'pageSize' | 'limit';
63
+ defaultPageSize?: number;
64
+ maxPageSize?: number;
65
+ sortFields?: readonly [string, ...string[]];
66
+ businessFields?: Record<string, _$zod.ZodTypeAny>;
67
+ };
68
+ type TablePreset<Q = Record<string, unknown>> = PaginationPreset<Q, PaginatedResult<unknown>> & {
69
+ defaults: ReturnType<typeof createPaginationDefaults>;
70
+ normalize(params?: Record<string, unknown>): {
71
+ page: number;
72
+ pageSize: number;
73
+ };
74
+ };
75
+ type InfiniteScrollPresetConfig = {
76
+ cursorField?: string;
77
+ defaultPageSize?: number;
78
+ businessFields?: Record<string, _$zod.ZodTypeAny>;
79
+ };
80
+ type InfiniteScrollPreset<Q = Record<string, unknown>> = PaginationPreset<Q, CursorPaginatedResult<unknown>>;
81
+ type TimelinePresetConfig = {
82
+ defaultLimit?: number;
83
+ maxLimit?: number;
84
+ businessFields?: Record<string, _$zod.ZodTypeAny>;
85
+ };
86
+ type TimelinePreset<Q = Record<string, unknown>> = PaginationPreset<Q, CompactPaginatedResult<unknown>>;
87
+ type CompactListPresetConfig = {
88
+ mode?: 'page' | 'offset';
89
+ pageSizeField?: string;
90
+ defaultPageSize?: number;
91
+ businessFields?: Record<string, _$zod.ZodTypeAny>;
92
+ };
93
+ type CompactListPreset<Q = Record<string, unknown>> = PaginationPreset<Q, CompactPaginatedResult<unknown>>;
94
+ //#endregion
95
+ //#region src/presets/table.preset.d.ts
96
+ declare function createTablePreset<TSort extends readonly [string, ...string[]], TBusiness extends Record<string, z.ZodTypeAny>>(config?: TablePresetConfig & {
97
+ sortFields?: TSort;
98
+ businessFields?: TBusiness;
99
+ }): TablePreset;
100
+ //#endregion
101
+ //#region src/presets/infinite-scroll.preset.d.ts
102
+ declare function createInfiniteScrollPreset<TBusiness extends Record<string, z.ZodTypeAny>>(config?: InfiniteScrollPresetConfig & {
103
+ businessFields?: TBusiness;
104
+ }): InfiniteScrollPreset;
105
+ //#endregion
106
+ //#region src/presets/timeline.preset.d.ts
107
+ declare function createTimelinePreset<TBusiness extends Record<string, z.ZodTypeAny>>(config?: TimelinePresetConfig & {
108
+ businessFields?: TBusiness;
109
+ }): TimelinePreset;
110
+ //#endregion
111
+ //#region src/presets/compact-list.preset.d.ts
112
+ declare function createCompactListPreset<TBusiness extends Record<string, z.ZodTypeAny>>(config?: CompactListPresetConfig & {
113
+ businessFields?: TBusiness;
114
+ }): CompactListPreset;
116
115
  //#endregion
117
- export { type CursorPaginatedResult, type CursorPaginationParams, type EntityMapper, type MultiSortParams, type OffsetPaginatedResult, type OffsetPaginationParams, type OffsetPaginationResult, type OffsetPaginationValidationResult, PAGINATION_DEFAULTS, type PagePaginationResult, type PaginatedResult, type PaginationDefaults, type PaginationParams, type PaginationValidationResult, type SortItem, type SortOrder, type SortParams, type TypeOrmPaginateOptions, calculateOffset, calculateTotalPages, createPaginatedResult, createPaginationQueryBuilder, hasNextPage, hasPreviousPage, isValidLimit, isValidOffset, isValidOffsetPagination, isValidPage, isValidPageSize, isValidPagination, normalizeOffsetPagination, normalizePagination, offsetToPage, pageToOffset, paginateWithQueryBuilder, paginateWithRepository };
116
+ export { type CompactListPreset, type CompactListPresetConfig, type CompactPaginatedResult, type CursorPaginatedResult, type CursorPaginationParams, CursorPaginationParamsSchema, type InfiniteScrollPreset, type InfiniteScrollPresetConfig, type MultiSortParams, MultiSortParamsSchema, type OffsetPaginatedResult, type OffsetPaginationParams, OffsetPaginationParamsSchema, type OffsetPaginationResult, type OffsetPaginationValidationResult, PAGINATION_DEFAULTS, type PagePaginationResult, type PaginatedResult, type PaginationDefaults, PaginationDefaultsSchema, type PaginationParams, PaginationParamsSchema, type PaginationPreset, type PaginationValidationResult, type SortItem, SortItemSchema, type SortOrder, SortOrderSchema, type SortParams, SortParamsSchema, type TablePreset, type TablePresetConfig, type TimelinePreset, type TimelinePresetConfig, calculateOffset, calculateTotalPages, createCompactListPreset, createCompactPaginatedResultSchema, createCursorPaginatedResultSchema, createInfiniteScrollPreset, createMultiSortParamsSchema, createOffsetPaginatedResultSchema, createPaginatedResult, createPaginatedResultSchema, createPaginationDefaults, createPaginationSchema, createResultSchema, createSortItemSchema, createSortParamsSchema, createTablePreset, createTimelinePreset, hasNextPage, hasPreviousPage, isValidLimit, isValidOffset, isValidOffsetPagination, isValidPage, isValidPageSize, isValidPagination, normalizeOffsetPagination, normalizePagination, offsetToPage, pageToOffset };
package/dist/index.d.mts CHANGED
@@ -1,64 +1,7 @@
1
- import { FindManyOptions, FindOptionsOrder, ObjectLiteral, Repository, SelectQueryBuilder } from "typeorm";
1
+ import { A as createPaginationSchema, C as CursorPaginationParamsSchema, D as PaginationDefaultsSchema, E as PaginationDefaults, O as PaginationParams, S as CursorPaginationParams, T as OffsetPaginationParamsSchema, _ as createCursorPaginatedResultSchema, a as SortOrder, b as createResultSchema, c as SortParamsSchema, d as createSortParamsSchema, f as CompactPaginatedResult, g as createCompactPaginatedResultSchema, h as PaginatedResult, i as SortItemSchema, k as PaginationParamsSchema, l as createMultiSortParamsSchema, m as OffsetPaginatedResult, n as MultiSortParamsSchema, o as SortOrderSchema, p as CursorPaginatedResult, r as SortItem, s as SortParams, t as MultiSortParams, u as createSortItemSchema, v as createOffsetPaginatedResultSchema, w as OffsetPaginationParams, x as PAGINATION_DEFAULTS, y as createPaginatedResultSchema } from "./index-C4IwIpFc.mjs";
2
+ import * as _$zod from "zod";
3
+ import { z } from "zod";
2
4
 
3
- //#region src/types/pagination.types.d.ts
4
- type PaginationParams = {
5
- page?: number;
6
- pageSize?: number;
7
- };
8
- type OffsetPaginationParams = {
9
- limit?: number;
10
- offset?: number;
11
- };
12
- type CursorPaginationParams = {
13
- cursor?: string;
14
- limit?: number;
15
- };
16
- declare const PAGINATION_DEFAULTS: {
17
- readonly page: 1;
18
- readonly pageSize: 20;
19
- readonly maxPageSize: 100;
20
- readonly minPageSize: 1;
21
- };
22
- type PaginationDefaults = typeof PAGINATION_DEFAULTS;
23
- //#endregion
24
- //#region src/types/result.types.d.ts
25
- type PaginatedResult<T> = {
26
- items: T[];
27
- total: number;
28
- page: number;
29
- pageSize: number;
30
- totalPages: number;
31
- hasNextPage: boolean;
32
- hasPreviousPage: boolean;
33
- };
34
- type OffsetPaginatedResult<T> = {
35
- items: T[];
36
- total: number;
37
- limit: number;
38
- offset: number;
39
- hasMore: boolean;
40
- };
41
- type CursorPaginatedResult<T> = {
42
- items: T[];
43
- nextCursor: string | null;
44
- previousCursor: string | null;
45
- hasMore: boolean;
46
- };
47
- //#endregion
48
- //#region src/types/sort.types.d.ts
49
- type SortOrder = 'asc' | 'desc';
50
- type SortParams<T extends string = string> = {
51
- sortBy?: T;
52
- sortOrder?: SortOrder;
53
- };
54
- type SortItem<T extends string = string> = {
55
- field: T;
56
- order: SortOrder;
57
- };
58
- type MultiSortParams<T extends string = string> = {
59
- sort?: SortItem<T>[];
60
- };
61
- //#endregion
62
5
  //#region src/utils/pagination.util.d.ts
63
6
  type OffsetPaginationResult = {
64
7
  page: number;
@@ -77,6 +20,20 @@ declare function hasPreviousPage(page: number): boolean;
77
20
  declare function offsetToPage(offset: number, limit: number): OffsetPaginationResult;
78
21
  declare function pageToOffset(page: number, pageSize: number): PagePaginationResult;
79
22
  declare function createPaginatedResult<T>(items: T[], total: number, page: number, pageSize: number): PaginatedResult<T>;
23
+ type PaginationDefaultsOverrides = {
24
+ page?: number;
25
+ pageSize?: number;
26
+ maxPageSize?: number;
27
+ minPageSize?: number;
28
+ };
29
+ declare function createPaginationDefaults(overrides?: PaginationDefaultsOverrides): {
30
+ normalize(params?: PaginationParams): Required<PaginationParams>;
31
+ normalizeOffset(params?: OffsetPaginationParams): Required<OffsetPaginationParams>;
32
+ page: number;
33
+ pageSize: number;
34
+ maxPageSize: number;
35
+ minPageSize: number;
36
+ };
80
37
  //#endregion
81
38
  //#region src/utils/validation.util.d.ts
82
39
  type PaginationValidationResult = {
@@ -94,24 +51,66 @@ declare function isValidLimit(limit: unknown): limit is number;
94
51
  declare function isValidPagination(params: unknown): params is PaginationValidationResult;
95
52
  declare function isValidOffsetPagination(params: unknown): params is OffsetPaginationValidationResult;
96
53
  //#endregion
97
- //#region src/adapters/typeorm.adapter.d.ts
98
- type EntityMapper<TEntity, TDto> = (entity: TEntity) => TDto | Promise<TDto>;
99
- type TypeOrmPaginateOptionsWithMapper<TEntity extends ObjectLiteral, TDto> = {
100
- mapper: EntityMapper<TEntity, TDto>;
101
- order?: FindOptionsOrder<TEntity>;
102
- where?: FindManyOptions<TEntity>['where'];
103
- relations?: FindManyOptions<TEntity>['relations'];
104
- select?: FindManyOptions<TEntity>['select'];
105
- };
106
- type TypeOrmPaginateOptionsNoMapper<TEntity extends ObjectLiteral> = {
107
- order?: FindOptionsOrder<TEntity>;
108
- where?: FindManyOptions<TEntity>['where'];
109
- relations?: FindManyOptions<TEntity>['relations'];
110
- select?: FindManyOptions<TEntity>['select'];
111
- };
112
- type TypeOrmPaginateOptions<TEntity extends ObjectLiteral, TDto = TEntity> = TypeOrmPaginateOptionsWithMapper<TEntity, TDto> | TypeOrmPaginateOptionsNoMapper<TEntity>;
113
- declare function paginateWithRepository<TEntity extends ObjectLiteral, TDto = TEntity>(repository: Repository<TEntity>, params: PaginationParams, options?: TypeOrmPaginateOptions<TEntity, TDto>): Promise<PaginatedResult<TEntity | TDto>>;
114
- declare function paginateWithQueryBuilder<TEntity extends ObjectLiteral, TDto = TEntity>(queryBuilder: SelectQueryBuilder<TEntity>, params: PaginationParams, mapper?: EntityMapper<TEntity, TDto>): Promise<PaginatedResult<TEntity | TDto>>;
115
- declare function createPaginationQueryBuilder<TEntity extends ObjectLiteral>(repository: Repository<TEntity>, alias?: string): SelectQueryBuilder<TEntity>;
54
+ //#region src/presets/types.d.ts
55
+ type PaginationPreset<Q, R> = {
56
+ querySchema: _$zod.ZodTypeAny;
57
+ resultSchema: _$zod.ZodTypeAny;
58
+ parseQuery(query: Record<string, string | undefined>): Q;
59
+ buildResult(...args: unknown[]): R;
60
+ };
61
+ type TablePresetConfig = {
62
+ pageSizeField?: 'pageSize' | 'limit';
63
+ defaultPageSize?: number;
64
+ maxPageSize?: number;
65
+ sortFields?: readonly [string, ...string[]];
66
+ businessFields?: Record<string, _$zod.ZodTypeAny>;
67
+ };
68
+ type TablePreset<Q = Record<string, unknown>> = PaginationPreset<Q, PaginatedResult<unknown>> & {
69
+ defaults: ReturnType<typeof createPaginationDefaults>;
70
+ normalize(params?: Record<string, unknown>): {
71
+ page: number;
72
+ pageSize: number;
73
+ };
74
+ };
75
+ type InfiniteScrollPresetConfig = {
76
+ cursorField?: string;
77
+ defaultPageSize?: number;
78
+ businessFields?: Record<string, _$zod.ZodTypeAny>;
79
+ };
80
+ type InfiniteScrollPreset<Q = Record<string, unknown>> = PaginationPreset<Q, CursorPaginatedResult<unknown>>;
81
+ type TimelinePresetConfig = {
82
+ defaultLimit?: number;
83
+ maxLimit?: number;
84
+ businessFields?: Record<string, _$zod.ZodTypeAny>;
85
+ };
86
+ type TimelinePreset<Q = Record<string, unknown>> = PaginationPreset<Q, CompactPaginatedResult<unknown>>;
87
+ type CompactListPresetConfig = {
88
+ mode?: 'page' | 'offset';
89
+ pageSizeField?: string;
90
+ defaultPageSize?: number;
91
+ businessFields?: Record<string, _$zod.ZodTypeAny>;
92
+ };
93
+ type CompactListPreset<Q = Record<string, unknown>> = PaginationPreset<Q, CompactPaginatedResult<unknown>>;
94
+ //#endregion
95
+ //#region src/presets/table.preset.d.ts
96
+ declare function createTablePreset<TSort extends readonly [string, ...string[]], TBusiness extends Record<string, z.ZodTypeAny>>(config?: TablePresetConfig & {
97
+ sortFields?: TSort;
98
+ businessFields?: TBusiness;
99
+ }): TablePreset;
100
+ //#endregion
101
+ //#region src/presets/infinite-scroll.preset.d.ts
102
+ declare function createInfiniteScrollPreset<TBusiness extends Record<string, z.ZodTypeAny>>(config?: InfiniteScrollPresetConfig & {
103
+ businessFields?: TBusiness;
104
+ }): InfiniteScrollPreset;
105
+ //#endregion
106
+ //#region src/presets/timeline.preset.d.ts
107
+ declare function createTimelinePreset<TBusiness extends Record<string, z.ZodTypeAny>>(config?: TimelinePresetConfig & {
108
+ businessFields?: TBusiness;
109
+ }): TimelinePreset;
110
+ //#endregion
111
+ //#region src/presets/compact-list.preset.d.ts
112
+ declare function createCompactListPreset<TBusiness extends Record<string, z.ZodTypeAny>>(config?: CompactListPresetConfig & {
113
+ businessFields?: TBusiness;
114
+ }): CompactListPreset;
116
115
  //#endregion
117
- export { type CursorPaginatedResult, type CursorPaginationParams, type EntityMapper, type MultiSortParams, type OffsetPaginatedResult, type OffsetPaginationParams, type OffsetPaginationResult, type OffsetPaginationValidationResult, PAGINATION_DEFAULTS, type PagePaginationResult, type PaginatedResult, type PaginationDefaults, type PaginationParams, type PaginationValidationResult, type SortItem, type SortOrder, type SortParams, type TypeOrmPaginateOptions, calculateOffset, calculateTotalPages, createPaginatedResult, createPaginationQueryBuilder, hasNextPage, hasPreviousPage, isValidLimit, isValidOffset, isValidOffsetPagination, isValidPage, isValidPageSize, isValidPagination, normalizeOffsetPagination, normalizePagination, offsetToPage, pageToOffset, paginateWithQueryBuilder, paginateWithRepository };
116
+ export { type CompactListPreset, type CompactListPresetConfig, type CompactPaginatedResult, type CursorPaginatedResult, type CursorPaginationParams, CursorPaginationParamsSchema, type InfiniteScrollPreset, type InfiniteScrollPresetConfig, type MultiSortParams, MultiSortParamsSchema, type OffsetPaginatedResult, type OffsetPaginationParams, OffsetPaginationParamsSchema, type OffsetPaginationResult, type OffsetPaginationValidationResult, PAGINATION_DEFAULTS, type PagePaginationResult, type PaginatedResult, type PaginationDefaults, PaginationDefaultsSchema, type PaginationParams, PaginationParamsSchema, type PaginationPreset, type PaginationValidationResult, type SortItem, SortItemSchema, type SortOrder, SortOrderSchema, type SortParams, SortParamsSchema, type TablePreset, type TablePresetConfig, type TimelinePreset, type TimelinePresetConfig, calculateOffset, calculateTotalPages, createCompactListPreset, createCompactPaginatedResultSchema, createCursorPaginatedResultSchema, createInfiniteScrollPreset, createMultiSortParamsSchema, createOffsetPaginatedResultSchema, createPaginatedResult, createPaginatedResultSchema, createPaginationDefaults, createPaginationSchema, createResultSchema, createSortItemSchema, createSortParamsSchema, createTablePreset, createTimelinePreset, hasNextPage, hasPreviousPage, isValidLimit, isValidOffset, isValidOffsetPagination, isValidPage, isValidPageSize, isValidPagination, normalizeOffsetPagination, normalizePagination, offsetToPage, pageToOffset };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- const e={page:1,pageSize:20,maxPageSize:100,minPageSize:1};function t(t){return{page:Math.max(1,Math.floor(t?.page??e.page)),pageSize:Math.min(e.maxPageSize,Math.max(e.minPageSize,Math.floor(t?.pageSize??e.pageSize)))}}function n(t){return{limit:Math.min(e.maxPageSize,Math.max(e.minPageSize,Math.floor(t?.limit??e.pageSize))),offset:Math.max(0,Math.floor(t?.offset??0))}}function r(e,t){return(e-1)*t}function i(e,t){return t<=0?0:Math.ceil(e/t)}function a(e,t){return e<t}function o(e){return e>1}function s(e,t){let n=Math.max(1,t);return{page:Math.floor(e/n)+1,pageSize:n}}function c(e,t){let n=Math.max(1,e),r=Math.max(1,t);return{offset:(n-1)*r,limit:r}}function l(e,t,n,r){let s=i(t,r);return{items:e,total:t,page:n,pageSize:r,totalPages:s,hasNextPage:a(n,s),hasPreviousPage:o(n)}}function u(e){return typeof e==`object`&&!!e}function d(e){return typeof e==`number`&&Number.isInteger(e)&&e>=1}function f(t){return typeof t==`number`&&Number.isInteger(t)&&t>=e.minPageSize&&t<=e.maxPageSize}function p(e){return typeof e==`number`&&Number.isInteger(e)&&e>=0}function m(t){return typeof t==`number`&&Number.isInteger(t)&&t>=e.minPageSize&&t<=e.maxPageSize}function h(e){if(!u(e))return!1;let t=e.page,n=e.pageSize;return(t===void 0||d(t))&&(n===void 0||f(n))}function g(e){if(!u(e))return!1;let t=e.limit,n=e.offset;return(t===void 0||m(t))&&(n===void 0||p(n))}function _(e){return e!==void 0&&`mapper`in e}function v(e,t,n,r){let s=i(t,r);return{items:e,total:t,page:n,pageSize:r,totalPages:s,hasNextPage:a(n,s),hasPreviousPage:o(n)}}async function y(e,n,i){let{page:a,pageSize:o}=t(n),s={skip:r(a,o),take:o,where:i?.where,relations:i?.relations,select:i?.select,order:i?.order??{createdAt:`DESC`}},[c,l]=await e.findAndCount(s);return _(i)?v(await Promise.all(c.map(i.mapper)),l,a,o):v(c,l,a,o)}async function b(e,n,i){let{page:a,pageSize:o}=t(n),s=r(a,o);e.skip(s).take(o);let[c,l]=await e.getManyAndCount();return v(i?await Promise.all(c.map(i)):c,l,a,o)}function x(e,t){return e.createQueryBuilder(t??e.metadata.name.toLowerCase())}export{e as PAGINATION_DEFAULTS,r as calculateOffset,i as calculateTotalPages,l as createPaginatedResult,x as createPaginationQueryBuilder,a as hasNextPage,o as hasPreviousPage,m as isValidLimit,p as isValidOffset,g as isValidOffsetPagination,d as isValidPage,f as isValidPageSize,h as isValidPagination,n as normalizeOffsetPagination,t as normalizePagination,s as offsetToPage,c as pageToOffset,b as paginateWithQueryBuilder,y as paginateWithRepository};
1
+ import{A as e,C as t,D as n,E as r,M as i,N as a,O as o,P as s,S as c,T as l,_ as u,a as d,b as f,c as p,d as m,f as h,g,h as _,i as v,j as y,k as b,l as x,m as S,n as C,o as w,p as T,r as E,s as D,t as O,u as k,v as A,w as j,x as M,y as N}from"./utils-DsM7-PZL.mjs";import{z as P}from"zod";function F(e){if(e===void 0)return;let t=Number(e);return Number.isNaN(t)?void 0:t}function I(e){let n=e?.pageSizeField??`pageSize`,r=k({pageSize:e?.defaultPageSize,maxPageSize:e?.maxPageSize}),i=s({mode:`page`,pageSizeField:n}),a=e?.sortFields?t([...e.sortFields]):P.object({}),c=i.merge(a).extend(e?.businessFields??{});return{querySchema:c,resultSchema:o(P.unknown(),{mode:`page`,pageSizeField:n}),defaults:r,normalize(e){return r.normalize({page:e?.page,pageSize:e?.[n]})},parseQuery(t){let r={};if(t.page!==void 0&&(r.page=F(t.page)),t[n]!==void 0&&(r[n]=F(t[n])),t.sortBy!==void 0&&(r.sortBy=t.sortBy),t.sortOrder!==void 0&&(r.sortOrder=t.sortOrder),e?.businessFields)for(let n of Object.keys(e.businessFields))t[n]!==void 0&&(r[n]=t[n]);return c.parse(r)},buildResult(e,t,n,r){return x(e,t,n,r)}}}function L(e){if(e===void 0)return;let t=Number(e);return Number.isNaN(t)?void 0:t}function R(e){let t=e?.cursorField??`cursor`,n=s({mode:`cursor`,cursorField:t}).extend(e?.businessFields??{});return{querySchema:n,resultSchema:o(P.unknown(),{mode:`cursor`}),parseQuery(r){let i={};if(r[t]!==void 0&&(i[t]=r[t]),r.limit!==void 0&&(i.limit=L(r.limit)),e?.businessFields)for(let t of Object.keys(e.businessFields))r[t]!==void 0&&(i[t]=r[t]);return n.parse(i)},buildResult(e,t,n){return{items:e,nextCursor:t,previousCursor:null,hasMore:n}}}}function z(e){if(e===void 0)return;let t=Number(e);return Number.isNaN(t)?void 0:t}function B(e){let t=s({mode:`offset`,fields:{limit:!0,offset:!1}}).extend(e?.businessFields??{});return{querySchema:t,resultSchema:o(P.unknown(),{mode:`compact`}),parseQuery(n){let r={};if(n.limit!==void 0&&(r.limit=z(n.limit)),e?.businessFields)for(let t of Object.keys(e.businessFields))n[t]!==void 0&&(r[t]=n[t]);return t.parse(r)},buildResult(e,t,n){return{items:e,total:t,hasMore:n}}}}function V(e){if(e===void 0)return;let t=Number(e);return Number.isNaN(t)?void 0:t}function H(e){let t=e?.mode??`page`,n=e?.pageSizeField??`pageSize`,r=s({mode:t,pageSizeField:n}).extend(e?.businessFields??{});return{querySchema:r,resultSchema:o(P.unknown(),{mode:`compact`}),parseQuery(i){let a={};if(t===`page`?(i.page!==void 0&&(a.page=V(i.page)),i[n]!==void 0&&(a[n]=V(i[n]))):(i.limit!==void 0&&(a.limit=V(i.limit)),i.offset!==void 0&&(a.offset=V(i.offset))),e?.businessFields)for(let t of Object.keys(e.businessFields))i[t]!==void 0&&(a[t]=i[t]);return r.parse(a)},buildResult(e,t,n){return{items:e,total:t,hasMore:n}}}}export{e as CursorPaginationParamsSchema,u as MultiSortParamsSchema,y as OffsetPaginationParamsSchema,b as PAGINATION_DEFAULTS,i as PaginationDefaultsSchema,a as PaginationParamsSchema,A as SortItemSchema,N as SortOrderSchema,f as SortParamsSchema,D as calculateOffset,p as calculateTotalPages,H as createCompactListPreset,j as createCompactPaginatedResultSchema,l as createCursorPaginatedResultSchema,R as createInfiniteScrollPreset,M as createMultiSortParamsSchema,r as createOffsetPaginatedResultSchema,x as createPaginatedResult,n as createPaginatedResultSchema,k as createPaginationDefaults,s as createPaginationSchema,o as createResultSchema,c as createSortItemSchema,t as createSortParamsSchema,I as createTablePreset,B as createTimelinePreset,m as hasNextPage,h as hasPreviousPage,O as isValidLimit,C as isValidOffset,E as isValidOffsetPagination,v as isValidPage,d as isValidPageSize,w as isValidPagination,T as normalizeOffsetPagination,S as normalizePagination,_ as offsetToPage,g as pageToOffset};
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./utils-B200OLT-.cjs`);function t(e){return e!==void 0&&`mapper`in e}function n(t,n,r,i){let a=e.c(n,i);return{items:t,total:n,page:r,pageSize:i,totalPages:a,hasNextPage:e.d(r,a),hasPreviousPage:e.f(r)}}async function r(r,i,a){let{page:o,pageSize:s}=e.m(i),c={skip:e.s(o,s),take:s,where:a?.where,relations:a?.relations,select:a?.select,order:a?.order??{createdAt:`DESC`}},[l,u]=await r.findAndCount(c);return t(a)?n(await Promise.all(l.map(a.mapper)),u,o,s):n(l,u,o,s)}async function i(t,r,i){let{page:a,pageSize:o}=e.m(r),s=e.s(a,o);t.skip(s).take(o);let[c,l]=await t.getManyAndCount();return n(i?await Promise.all(c.map(i)):c,l,a,o)}function a(e,t){return e.createQueryBuilder(t??e.metadata.name.toLowerCase())}exports.createPaginationQueryBuilder=a,exports.paginateWithQueryBuilder=i,exports.paginateWithRepository=r;
@@ -0,0 +1,26 @@
1
+ import { O as PaginationParams, h as PaginatedResult } from "./index-DpbbjAwO.cjs";
2
+ import { FindManyOptions, FindOptionsOrder, ObjectLiteral, Repository, SelectQueryBuilder } from "typeorm";
3
+
4
+ //#region src/adapters/typeorm/types.d.ts
5
+ type EntityMapper<TEntity, TDto> = (entity: TEntity) => TDto | Promise<TDto>;
6
+ type TypeOrmPaginateOptionsWithMapper<TEntity extends ObjectLiteral, TDto> = {
7
+ mapper: EntityMapper<TEntity, TDto>;
8
+ order?: FindOptionsOrder<TEntity>;
9
+ where?: FindManyOptions<TEntity>['where'];
10
+ relations?: FindManyOptions<TEntity>['relations'];
11
+ select?: FindManyOptions<TEntity>['select'];
12
+ };
13
+ type TypeOrmPaginateOptionsNoMapper<TEntity extends ObjectLiteral> = {
14
+ order?: FindOptionsOrder<TEntity>;
15
+ where?: FindManyOptions<TEntity>['where'];
16
+ relations?: FindManyOptions<TEntity>['relations'];
17
+ select?: FindManyOptions<TEntity>['select'];
18
+ };
19
+ type TypeOrmPaginateOptions<TEntity extends ObjectLiteral, TDto = TEntity> = TypeOrmPaginateOptionsWithMapper<TEntity, TDto> | TypeOrmPaginateOptionsNoMapper<TEntity>;
20
+ //#endregion
21
+ //#region src/adapters/typeorm/adapter.d.ts
22
+ declare function paginateWithRepository<TEntity extends ObjectLiteral, TDto = TEntity>(repository: Repository<TEntity>, params: PaginationParams, options?: TypeOrmPaginateOptions<TEntity, TDto>): Promise<PaginatedResult<TEntity | TDto>>;
23
+ declare function paginateWithQueryBuilder<TEntity extends ObjectLiteral, TDto = TEntity>(queryBuilder: SelectQueryBuilder<TEntity>, params: PaginationParams, mapper?: EntityMapper<TEntity, TDto>): Promise<PaginatedResult<TEntity | TDto>>;
24
+ declare function createPaginationQueryBuilder<TEntity extends ObjectLiteral>(repository: Repository<TEntity>, alias?: string): SelectQueryBuilder<TEntity>;
25
+ //#endregion
26
+ export { type EntityMapper, type TypeOrmPaginateOptions, createPaginationQueryBuilder, paginateWithQueryBuilder, paginateWithRepository };
@@ -0,0 +1,26 @@
1
+ import { O as PaginationParams, h as PaginatedResult } from "./index-C4IwIpFc.mjs";
2
+ import { FindManyOptions, FindOptionsOrder, ObjectLiteral, Repository, SelectQueryBuilder } from "typeorm";
3
+
4
+ //#region src/adapters/typeorm/types.d.ts
5
+ type EntityMapper<TEntity, TDto> = (entity: TEntity) => TDto | Promise<TDto>;
6
+ type TypeOrmPaginateOptionsWithMapper<TEntity extends ObjectLiteral, TDto> = {
7
+ mapper: EntityMapper<TEntity, TDto>;
8
+ order?: FindOptionsOrder<TEntity>;
9
+ where?: FindManyOptions<TEntity>['where'];
10
+ relations?: FindManyOptions<TEntity>['relations'];
11
+ select?: FindManyOptions<TEntity>['select'];
12
+ };
13
+ type TypeOrmPaginateOptionsNoMapper<TEntity extends ObjectLiteral> = {
14
+ order?: FindOptionsOrder<TEntity>;
15
+ where?: FindManyOptions<TEntity>['where'];
16
+ relations?: FindManyOptions<TEntity>['relations'];
17
+ select?: FindManyOptions<TEntity>['select'];
18
+ };
19
+ type TypeOrmPaginateOptions<TEntity extends ObjectLiteral, TDto = TEntity> = TypeOrmPaginateOptionsWithMapper<TEntity, TDto> | TypeOrmPaginateOptionsNoMapper<TEntity>;
20
+ //#endregion
21
+ //#region src/adapters/typeorm/adapter.d.ts
22
+ declare function paginateWithRepository<TEntity extends ObjectLiteral, TDto = TEntity>(repository: Repository<TEntity>, params: PaginationParams, options?: TypeOrmPaginateOptions<TEntity, TDto>): Promise<PaginatedResult<TEntity | TDto>>;
23
+ declare function paginateWithQueryBuilder<TEntity extends ObjectLiteral, TDto = TEntity>(queryBuilder: SelectQueryBuilder<TEntity>, params: PaginationParams, mapper?: EntityMapper<TEntity, TDto>): Promise<PaginatedResult<TEntity | TDto>>;
24
+ declare function createPaginationQueryBuilder<TEntity extends ObjectLiteral>(repository: Repository<TEntity>, alias?: string): SelectQueryBuilder<TEntity>;
25
+ //#endregion
26
+ export { type EntityMapper, type TypeOrmPaginateOptions, createPaginationQueryBuilder, paginateWithQueryBuilder, paginateWithRepository };
@@ -0,0 +1 @@
1
+ import{c as e,d as t,f as n,m as r,s as i}from"./utils-DsM7-PZL.mjs";function a(e){return e!==void 0&&`mapper`in e}function o(r,i,a,o){let s=e(i,o);return{items:r,total:i,page:a,pageSize:o,totalPages:s,hasNextPage:t(a,s),hasPreviousPage:n(a)}}async function s(e,t,n){let{page:s,pageSize:c}=r(t),l={skip:i(s,c),take:c,where:n?.where,relations:n?.relations,select:n?.select,order:n?.order??{createdAt:`DESC`}},[u,d]=await e.findAndCount(l);return a(n)?o(await Promise.all(u.map(n.mapper)),d,s,c):o(u,d,s,c)}async function c(e,t,n){let{page:a,pageSize:s}=r(t),c=i(a,s);e.skip(c).take(s);let[l,u]=await e.getManyAndCount();return o(n?await Promise.all(l.map(n)):l,u,a,s)}function l(e,t){return e.createQueryBuilder(t??e.metadata.name.toLowerCase())}export{l as createPaginationQueryBuilder,c as paginateWithQueryBuilder,s as paginateWithRepository};
@@ -0,0 +1 @@
1
+ let e=require(`zod`);const t=e.z.object({page:e.z.literal(1),pageSize:e.z.literal(20),maxPageSize:e.z.literal(100),minPageSize:e.z.literal(1)}),n=e.z.object({page:e.z.number().int().positive().optional(),pageSize:e.z.number().int().positive().optional()}),r=e.z.object({limit:e.z.number().int().positive().optional(),offset:e.z.number().int().nonnegative().optional()}),i=e.z.object({cursor:e.z.string().optional(),limit:e.z.number().int().positive().optional()});function a(t){let{mode:n,pageSizeField:r=`pageSize`,cursorField:i=`cursor`,fields:a}=t;if(n===`page`){let t=a?.page===!1?{}:{page:e.z.number().int().positive().optional()},n=a?.pageSize===!1?{}:{[r]:e.z.number().int().positive().optional()};return e.z.object({...t,...n})}if(n===`offset`){let t=a?.limit===!1?{}:{limit:e.z.number().int().positive().optional()},n=a?.offset===!1?{}:{offset:e.z.number().int().nonnegative().optional()};return e.z.object({...t,...n})}if(n===`cursor`){let t=a?.cursor===!1?{}:{[i]:e.z.string().optional()},n=a?.limit===!1?{}:{limit:e.z.number().int().positive().optional()};return e.z.object({...t,...n})}throw Error(`不支持的分页模式: ${n}`)}const o={page:1,pageSize:20,maxPageSize:100,minPageSize:1};function s(t){return e.z.object({items:e.z.array(t),total:e.z.number().int().nonnegative(),page:e.z.number().int().positive(),pageSize:e.z.number().int().positive(),totalPages:e.z.number().int().nonnegative(),hasNextPage:e.z.boolean(),hasPreviousPage:e.z.boolean()})}function c(t){return e.z.object({items:e.z.array(t),total:e.z.number().int().nonnegative(),limit:e.z.number().int().nonnegative(),offset:e.z.number().int().nonnegative(),hasMore:e.z.boolean()})}function l(t){return e.z.object({items:e.z.array(t),nextCursor:e.z.string().nullable(),previousCursor:e.z.string().nullable(),hasMore:e.z.boolean()})}function u(t){return e.z.object({items:e.z.array(t),total:e.z.number().int().nonnegative(),hasMore:e.z.boolean()})}function d(t,n){let{mode:r,pageSizeField:i=`pageSize`}=n;if(r===`page`)return e.z.object({items:e.z.array(t),total:e.z.number().int().nonnegative(),page:e.z.number().int().positive(),[i]:e.z.number().int().positive(),totalPages:e.z.number().int().nonnegative(),hasNextPage:e.z.boolean(),hasPreviousPage:e.z.boolean()});if(r===`offset`)return e.z.object({items:e.z.array(t),total:e.z.number().int().nonnegative(),limit:e.z.number().int().nonnegative(),offset:e.z.number().int().nonnegative(),hasMore:e.z.boolean()});if(r===`cursor`)return e.z.object({items:e.z.array(t),nextCursor:e.z.string().nullable(),previousCursor:e.z.string().nullable(),hasMore:e.z.boolean()});if(r===`compact`)return e.z.object({items:e.z.array(t),total:e.z.number().int().nonnegative(),hasMore:e.z.boolean()});throw Error(`不支持的结果模式: ${r}`)}const f=e.z.enum([`asc`,`desc`]);function p(t){return e.z.object({sortBy:e.z.enum(t).optional(),sortOrder:f.optional()})}const m=e.z.object({sortBy:e.z.string().optional(),sortOrder:f.optional()});function h(t){return e.z.object({field:e.z.enum(t),order:f})}const g=e.z.object({field:e.z.string(),order:f});function _(t){return e.z.object({sort:e.z.array(h(t)).optional()})}const v=e.z.object({sort:e.z.array(g).optional()});function y(e){return{page:Math.max(1,Math.floor(e?.page??o.page)),pageSize:Math.min(o.maxPageSize,Math.max(o.minPageSize,Math.floor(e?.pageSize??o.pageSize)))}}function b(e){return{limit:Math.min(o.maxPageSize,Math.max(o.minPageSize,Math.floor(e?.limit??o.pageSize))),offset:Math.max(0,Math.floor(e?.offset??0))}}function x(e,t){return(e-1)*t}function S(e,t){return t<=0?0:Math.ceil(e/t)}function C(e,t){return e<t}function w(e){return e>1}function T(e,t){let n=Math.max(1,t);return{page:Math.floor(e/n)+1,pageSize:n}}function E(e,t){let n=Math.max(1,e),r=Math.max(1,t);return{offset:(n-1)*r,limit:r}}function D(e,t,n,r){let i=S(t,r);return{items:e,total:t,page:n,pageSize:r,totalPages:i,hasNextPage:C(n,i),hasPreviousPage:w(n)}}function O(e){let t={page:e?.page??o.page,pageSize:e?.pageSize??o.pageSize,maxPageSize:e?.maxPageSize??o.maxPageSize,minPageSize:e?.minPageSize??o.minPageSize};return{...t,normalize(e){return{page:Math.max(1,Math.floor(e?.page??t.page)),pageSize:Math.min(t.maxPageSize,Math.max(t.minPageSize,Math.floor(e?.pageSize??t.pageSize)))}},normalizeOffset(e){return{limit:Math.min(t.maxPageSize,Math.max(t.minPageSize,Math.floor(e?.limit??t.pageSize))),offset:Math.max(0,Math.floor(e?.offset??0))}}}}function k(e){return typeof e==`object`&&!!e}function A(e){return typeof e==`number`&&Number.isInteger(e)&&e>=1}function j(e){return typeof e==`number`&&Number.isInteger(e)&&e>=o.minPageSize&&e<=o.maxPageSize}function M(e){return typeof e==`number`&&Number.isInteger(e)&&e>=0}function N(e){return typeof e==`number`&&Number.isInteger(e)&&e>=o.minPageSize&&e<=o.maxPageSize}function P(e){if(!k(e))return!1;let t=e.page,n=e.pageSize;return(t===void 0||A(t))&&(n===void 0||j(n))}function F(e){if(!k(e))return!1;let t=e.limit,n=e.offset;return(t===void 0||N(t))&&(n===void 0||M(n))}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return f}});
@@ -0,0 +1 @@
1
+ import{z as e}from"zod";const t=e.object({page:e.literal(1),pageSize:e.literal(20),maxPageSize:e.literal(100),minPageSize:e.literal(1)}),n=e.object({page:e.number().int().positive().optional(),pageSize:e.number().int().positive().optional()}),r=e.object({limit:e.number().int().positive().optional(),offset:e.number().int().nonnegative().optional()}),i=e.object({cursor:e.string().optional(),limit:e.number().int().positive().optional()});function a(t){let{mode:n,pageSizeField:r=`pageSize`,cursorField:i=`cursor`,fields:a}=t;if(n===`page`){let t=a?.page===!1?{}:{page:e.number().int().positive().optional()},n=a?.pageSize===!1?{}:{[r]:e.number().int().positive().optional()};return e.object({...t,...n})}if(n===`offset`){let t=a?.limit===!1?{}:{limit:e.number().int().positive().optional()},n=a?.offset===!1?{}:{offset:e.number().int().nonnegative().optional()};return e.object({...t,...n})}if(n===`cursor`){let t=a?.cursor===!1?{}:{[i]:e.string().optional()},n=a?.limit===!1?{}:{limit:e.number().int().positive().optional()};return e.object({...t,...n})}throw Error(`不支持的分页模式: ${n}`)}const o={page:1,pageSize:20,maxPageSize:100,minPageSize:1};function s(t){return e.object({items:e.array(t),total:e.number().int().nonnegative(),page:e.number().int().positive(),pageSize:e.number().int().positive(),totalPages:e.number().int().nonnegative(),hasNextPage:e.boolean(),hasPreviousPage:e.boolean()})}function c(t){return e.object({items:e.array(t),total:e.number().int().nonnegative(),limit:e.number().int().nonnegative(),offset:e.number().int().nonnegative(),hasMore:e.boolean()})}function l(t){return e.object({items:e.array(t),nextCursor:e.string().nullable(),previousCursor:e.string().nullable(),hasMore:e.boolean()})}function u(t){return e.object({items:e.array(t),total:e.number().int().nonnegative(),hasMore:e.boolean()})}function d(t,n){let{mode:r,pageSizeField:i=`pageSize`}=n;if(r===`page`)return e.object({items:e.array(t),total:e.number().int().nonnegative(),page:e.number().int().positive(),[i]:e.number().int().positive(),totalPages:e.number().int().nonnegative(),hasNextPage:e.boolean(),hasPreviousPage:e.boolean()});if(r===`offset`)return e.object({items:e.array(t),total:e.number().int().nonnegative(),limit:e.number().int().nonnegative(),offset:e.number().int().nonnegative(),hasMore:e.boolean()});if(r===`cursor`)return e.object({items:e.array(t),nextCursor:e.string().nullable(),previousCursor:e.string().nullable(),hasMore:e.boolean()});if(r===`compact`)return e.object({items:e.array(t),total:e.number().int().nonnegative(),hasMore:e.boolean()});throw Error(`不支持的结果模式: ${r}`)}const f=e.enum([`asc`,`desc`]);function p(t){return e.object({sortBy:e.enum(t).optional(),sortOrder:f.optional()})}const m=e.object({sortBy:e.string().optional(),sortOrder:f.optional()});function h(t){return e.object({field:e.enum(t),order:f})}const g=e.object({field:e.string(),order:f});function _(t){return e.object({sort:e.array(h(t)).optional()})}const v=e.object({sort:e.array(g).optional()});function y(e){return{page:Math.max(1,Math.floor(e?.page??o.page)),pageSize:Math.min(o.maxPageSize,Math.max(o.minPageSize,Math.floor(e?.pageSize??o.pageSize)))}}function b(e){return{limit:Math.min(o.maxPageSize,Math.max(o.minPageSize,Math.floor(e?.limit??o.pageSize))),offset:Math.max(0,Math.floor(e?.offset??0))}}function x(e,t){return(e-1)*t}function S(e,t){return t<=0?0:Math.ceil(e/t)}function C(e,t){return e<t}function w(e){return e>1}function T(e,t){let n=Math.max(1,t);return{page:Math.floor(e/n)+1,pageSize:n}}function E(e,t){let n=Math.max(1,e),r=Math.max(1,t);return{offset:(n-1)*r,limit:r}}function D(e,t,n,r){let i=S(t,r);return{items:e,total:t,page:n,pageSize:r,totalPages:i,hasNextPage:C(n,i),hasPreviousPage:w(n)}}function O(e){let t={page:e?.page??o.page,pageSize:e?.pageSize??o.pageSize,maxPageSize:e?.maxPageSize??o.maxPageSize,minPageSize:e?.minPageSize??o.minPageSize};return{...t,normalize(e){return{page:Math.max(1,Math.floor(e?.page??t.page)),pageSize:Math.min(t.maxPageSize,Math.max(t.minPageSize,Math.floor(e?.pageSize??t.pageSize)))}},normalizeOffset(e){return{limit:Math.min(t.maxPageSize,Math.max(t.minPageSize,Math.floor(e?.limit??t.pageSize))),offset:Math.max(0,Math.floor(e?.offset??0))}}}}function k(e){return typeof e==`object`&&!!e}function A(e){return typeof e==`number`&&Number.isInteger(e)&&e>=1}function j(e){return typeof e==`number`&&Number.isInteger(e)&&e>=o.minPageSize&&e<=o.maxPageSize}function M(e){return typeof e==`number`&&Number.isInteger(e)&&e>=0}function N(e){return typeof e==`number`&&Number.isInteger(e)&&e>=o.minPageSize&&e<=o.maxPageSize}function P(e){if(!k(e))return!1;let t=e.page,n=e.pageSize;return(t===void 0||A(t))&&(n===void 0||j(n))}function F(e){if(!k(e))return!1;let t=e.limit,n=e.offset;return(t===void 0||N(t))&&(n===void 0||M(n))}export{i as A,p as C,s as D,c as E,t as M,n as N,d as O,a as P,h as S,l as T,v as _,j as a,m as b,S as c,C as d,w as f,E as g,T as h,A as i,r as j,o as k,D as l,y as m,M as n,P as o,b as p,F as r,x as s,N as t,O as u,g as v,u as w,_ as x,f as y};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@longzai-intelligence/pagination",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "types": "./dist/index.d.mts",
@@ -12,8 +12,24 @@
12
12
  },
13
13
  "import": "./dist/index.mjs",
14
14
  "require": "./dist/index.cjs"
15
+ },
16
+ "./typeorm": {
17
+ "types": "./dist/typeorm.d.mts",
18
+ "import": "./dist/typeorm.mjs",
19
+ "require": "./dist/typeorm.cjs"
20
+ },
21
+ "./hono": {
22
+ "types": {
23
+ "import": "./dist/hono.d.mts",
24
+ "require": "./dist/hono.d.cts"
25
+ },
26
+ "import": "./dist/hono.mjs",
27
+ "require": "./dist/hono.cjs"
15
28
  }
16
29
  },
30
+ "files": [
31
+ "dist"
32
+ ],
17
33
  "scripts": {
18
34
  "build": "tsdown",
19
35
  "build:prod": "NODE_ENV=production tsdown",
@@ -32,22 +48,30 @@
32
48
  "upgrade-deps": "ncu -u"
33
49
  },
34
50
  "peerDependencies": {
35
- "typeorm": "^0.3.0"
51
+ "hono": "^4.0.0",
52
+ "typeorm": "^0.3.0",
53
+ "zod": "^4.0.0"
36
54
  },
37
55
  "peerDependenciesMeta": {
56
+ "hono": {
57
+ "optional": true
58
+ },
38
59
  "typeorm": {
39
60
  "optional": true
61
+ },
62
+ "zod": {
63
+ "optional": true
40
64
  }
41
65
  },
42
66
  "devDependencies": {
43
- "@types/bun": "1.3.11",
67
+ "@types/bun": "1.3.12",
44
68
  "@types/node": "^25.6.0",
45
69
  "eslint": "^10.2.0",
46
70
  "rimraf": "^6.1.3",
47
71
  "typescript": "^6.0.2",
48
72
  "vitest": "^4.1.4",
49
- "@longzai-intelligence/eslint-preset-library": "0.0.5",
50
- "@longzai-intelligence/vitest-config": "0.0.5",
73
+ "@longzai-intelligence/eslint-preset-library": "0.0.6",
74
+ "@longzai-intelligence/vitest-config": "0.0.7",
51
75
  "@longzai-intelligence/typescript-config": "0.0.3",
52
76
  "tsdown": "^0.21.7",
53
77
  "@longzai-intelligence/tsdown-config": "0.0.1"
@@ -1,22 +0,0 @@
1
- $ tsdown
2
- ℹ tsdown v0.21.7 powered by rolldown v1.0.0-rc.12
3
- ℹ config file: /Volumes/JZAO/j-projects/workspaces/longzai/longzai-intelligence/longzai-intelligence/packages/pagination/tsdown.config.ts
4
- (node:62059) ExperimentalWarning: Type Stripping is an experimental feature and might change at any time
5
- (Use `node --trace-warnings ...` to show where the warning was created)
6
- ℹ entry: src/index.ts
7
- ℹ tsconfig: tsconfig/app.json
8
- ℹ Build start
9
- ℹ Cleaning 8 files
10
- ℹ [CJS] dist/index.cjs 9.63 kB │ gzip: 2.45 kB
11
- ℹ [CJS] dist/index.cjs.map 19.04 kB │ gzip: 4.55 kB
12
- ℹ [CJS] 2 files, total: 28.66 kB
13
- ℹ [CJS] dist/index.d.cts.map 2.74 kB │ gzip: 0.82 kB
14
- ℹ [CJS] dist/index.d.cts 5.36 kB │ gzip: 1.21 kB
15
- ℹ [CJS] 2 files, total: 8.10 kB
16
- ✔ Build complete in 679ms
17
- ℹ [ESM] dist/index.mjs 9.02 kB │ gzip: 2.33 kB
18
- ℹ [ESM] dist/index.mjs.map 19.04 kB │ gzip: 4.55 kB
19
- ℹ [ESM] dist/index.d.mts.map 2.74 kB │ gzip: 0.82 kB
20
- ℹ [ESM] dist/index.d.mts 5.36 kB │ gzip: 1.21 kB
21
- ℹ [ESM] 4 files, total: 36.16 kB
22
- ✔ Build complete in 680ms
@@ -1 +0,0 @@
1
- $ eslint .