@reminix/cli 0.1.10 → 0.1.12

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.
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Pagination utilities for fetching items from paginated API endpoints
3
+ */
4
+ interface PaginatedResponse<T> {
5
+ data: T[];
6
+ nextCursor: string | null;
7
+ hasMore: boolean;
8
+ }
9
+ interface FetchPageParams {
10
+ limit?: number;
11
+ cursor?: string;
12
+ }
13
+ interface FetchPageResult<T> {
14
+ data?: PaginatedResponse<T>;
15
+ error?: unknown;
16
+ }
17
+ interface FetchAllPagesOptions {
18
+ /** Maximum total items to fetch. If not specified, fetches all. */
19
+ maxItems?: number;
20
+ /** Items per page/request (default: 100) */
21
+ pageSize?: number;
22
+ }
23
+ /**
24
+ * Fetch items from a paginated endpoint
25
+ *
26
+ * @param fetchPage - Function that fetches a single page given limit/cursor params
27
+ * @param options - Pagination options (maxItems, pageSize)
28
+ * @returns Array of items (up to maxItems if specified, otherwise all)
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * // Fetch all secrets
33
+ * const allSecrets = await fetchAllPages((params) =>
34
+ * client.GET('/secrets', { params: { query: params } })
35
+ * );
36
+ *
37
+ * // Fetch at most 20 secrets
38
+ * const limitedSecrets = await fetchAllPages(
39
+ * (params) => client.GET('/secrets', { params: { query: params } }),
40
+ * { maxItems: 20 }
41
+ * );
42
+ * ```
43
+ */
44
+ export declare function fetchAllPages<T>(fetchPage: (params: FetchPageParams) => Promise<FetchPageResult<T>>, options?: FetchAllPagesOptions): Promise<T[]>;
45
+ export {};
46
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/lib/pagination.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,UAAU,iBAAiB,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,eAAe,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,oBAAoB;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,SAAS,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EACnE,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,CAAC,EAAE,CAAC,CAwCd"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Pagination utilities for fetching items from paginated API endpoints
3
+ */
4
+ /**
5
+ * Fetch items from a paginated endpoint
6
+ *
7
+ * @param fetchPage - Function that fetches a single page given limit/cursor params
8
+ * @param options - Pagination options (maxItems, pageSize)
9
+ * @returns Array of items (up to maxItems if specified, otherwise all)
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // Fetch all secrets
14
+ * const allSecrets = await fetchAllPages((params) =>
15
+ * client.GET('/secrets', { params: { query: params } })
16
+ * );
17
+ *
18
+ * // Fetch at most 20 secrets
19
+ * const limitedSecrets = await fetchAllPages(
20
+ * (params) => client.GET('/secrets', { params: { query: params } }),
21
+ * { maxItems: 20 }
22
+ * );
23
+ * ```
24
+ */
25
+ export async function fetchAllPages(fetchPage, options = {}) {
26
+ const { maxItems, pageSize = 100 } = options;
27
+ const allItems = [];
28
+ let cursor = undefined;
29
+ do {
30
+ // Calculate how many items to request this page
31
+ const remaining = maxItems !== undefined ? maxItems - allItems.length : pageSize;
32
+ const limit = Math.min(pageSize, remaining);
33
+ // If we've already collected enough, stop
34
+ if (maxItems !== undefined && allItems.length >= maxItems) {
35
+ break;
36
+ }
37
+ const { data, error } = await fetchPage({ limit, cursor });
38
+ if (error) {
39
+ throw new Error(`API error: ${JSON.stringify(error)}`);
40
+ }
41
+ if (!data)
42
+ break;
43
+ allItems.push(...data.data);
44
+ cursor = data.nextCursor ?? undefined;
45
+ // Stop if we've collected enough items
46
+ if (maxItems !== undefined && allItems.length >= maxItems) {
47
+ break;
48
+ }
49
+ if (!data.hasMore)
50
+ break;
51
+ } while (cursor);
52
+ // Trim to maxItems if we fetched slightly more
53
+ if (maxItems !== undefined && allItems.length > maxItems) {
54
+ return allItems.slice(0, maxItems);
55
+ }
56
+ return allItems;
57
+ }
58
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/lib/pagination.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAmE,EACnE,UAAgC,EAAE;IAElC,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,QAAQ,GAAQ,EAAE,CAAC;IACzB,IAAI,MAAM,GAAuB,SAAS,CAAC;IAE3C,GAAG,CAAC;QACF,gDAAgD;QAChD,MAAM,SAAS,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QACjF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE5C,0CAA0C;QAC1C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC1D,MAAM;QACR,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAE3D,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,IAAI;YAAE,MAAM;QAEjB,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC;QAEtC,uCAAuC;QACvC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC1D,MAAM;QACR,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM;IAC3B,CAAC,QAAQ,MAAM,EAAE;IAEjB,+CAA+C;IAC/C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QACzD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reminix/cli",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "description": "Reminix CLI - Command-line interface for Reminix",
5
5
  "license": "Apache-2.0",
6
6
  "author": {