@foxscheduling/shared 0.1.0 → 0.2.0
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.
|
@@ -1,2 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PARTNER_DEFAULT_PAGE_SIZE = exports.PARTNER_MAX_PAGE_SIZE = void 0;
|
|
4
|
+
exports.resolvePartnerPageParams = resolvePartnerPageParams;
|
|
5
|
+
exports.partnerPaginate = partnerPaginate;
|
|
6
|
+
exports.isValidYearMonth = isValidYearMonth;
|
|
7
|
+
/** Maximum number of items the Partner API returns in a single list page. */
|
|
8
|
+
exports.PARTNER_MAX_PAGE_SIZE = 100;
|
|
9
|
+
/** Default page size when no limit is supplied. */
|
|
10
|
+
exports.PARTNER_DEFAULT_PAGE_SIZE = 100;
|
|
11
|
+
function toBoundedInt(value, fallback, min, max) {
|
|
12
|
+
const parsed = typeof value === "string" ? Number.parseInt(value, 10) : value ?? fallback;
|
|
13
|
+
const n = Number.isFinite(parsed) ? Math.floor(parsed) : fallback;
|
|
14
|
+
return Math.min(Math.max(min, n), max);
|
|
15
|
+
}
|
|
16
|
+
/** Clamp raw pagination params to valid bounds (limit 1–100, offset >= 0). */
|
|
17
|
+
function resolvePartnerPageParams(input) {
|
|
18
|
+
const limit = toBoundedInt(input?.limit, exports.PARTNER_DEFAULT_PAGE_SIZE, 1, exports.PARTNER_MAX_PAGE_SIZE);
|
|
19
|
+
const offset = toBoundedInt(input?.offset, 0, 0, Number.MAX_SAFE_INTEGER);
|
|
20
|
+
return { limit, offset };
|
|
21
|
+
}
|
|
22
|
+
/** Slice a full array into a typed {@link PartnerPage}, enforcing the max page size. */
|
|
23
|
+
function partnerPaginate(items, input) {
|
|
24
|
+
const { limit, offset } = resolvePartnerPageParams(input);
|
|
25
|
+
const slice = items.slice(offset, offset + limit);
|
|
26
|
+
return {
|
|
27
|
+
items: slice,
|
|
28
|
+
total: items.length,
|
|
29
|
+
limit,
|
|
30
|
+
offset,
|
|
31
|
+
hasMore: offset + slice.length < items.length,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const YEAR_MONTH_PATTERN = /^\d{4}-(0[1-9]|1[0-2])$/;
|
|
35
|
+
/** True when `value` matches the `YYYY-MM` format (e.g. "2026-06"). */
|
|
36
|
+
function isValidYearMonth(value) {
|
|
37
|
+
return typeof value === "string" && YEAR_MONTH_PATTERN.test(value);
|
|
38
|
+
}
|
|
@@ -66,4 +66,85 @@ export interface CreatePartnerApiKeyResponseDto {
|
|
|
66
66
|
key: PartnerApiKeyPublicDto;
|
|
67
67
|
api_key: string;
|
|
68
68
|
}
|
|
69
|
+
/** Maximum number of items the Partner API returns in a single list page. */
|
|
70
|
+
export declare const PARTNER_MAX_PAGE_SIZE = 100;
|
|
71
|
+
/** Default page size when no limit is supplied. */
|
|
72
|
+
export declare const PARTNER_DEFAULT_PAGE_SIZE = 100;
|
|
73
|
+
/** A single page of Partner API list results. */
|
|
74
|
+
export interface PartnerPage<T> {
|
|
75
|
+
/** Items in this page (never more than {@link PARTNER_MAX_PAGE_SIZE}). */
|
|
76
|
+
items: T[];
|
|
77
|
+
/** Total number of items available across all pages. */
|
|
78
|
+
total: number;
|
|
79
|
+
/** Effective page size used for this response. */
|
|
80
|
+
limit: number;
|
|
81
|
+
/** Offset used for this response. */
|
|
82
|
+
offset: number;
|
|
83
|
+
/** True when more items exist beyond this page. */
|
|
84
|
+
hasMore: boolean;
|
|
85
|
+
}
|
|
86
|
+
/** Raw pagination inputs (query strings or numbers). */
|
|
87
|
+
export interface PartnerPaginationInput {
|
|
88
|
+
limit?: number | string;
|
|
89
|
+
offset?: number | string;
|
|
90
|
+
}
|
|
91
|
+
/** Clamp raw pagination params to valid bounds (limit 1–100, offset >= 0). */
|
|
92
|
+
export declare function resolvePartnerPageParams(input?: PartnerPaginationInput): {
|
|
93
|
+
limit: number;
|
|
94
|
+
offset: number;
|
|
95
|
+
};
|
|
96
|
+
/** Slice a full array into a typed {@link PartnerPage}, enforcing the max page size. */
|
|
97
|
+
export declare function partnerPaginate<T>(items: T[], input?: PartnerPaginationInput): PartnerPage<T>;
|
|
98
|
+
/** True when `value` matches the `YYYY-MM` format (e.g. "2026-06"). */
|
|
99
|
+
export declare function isValidYearMonth(value: string | undefined | null): boolean;
|
|
100
|
+
/** Color theme for an embedded booking page. */
|
|
101
|
+
export type PartnerEmbedTheme = "light" | "dark" | "auto";
|
|
102
|
+
/** How the popup widget opens the booking page. */
|
|
103
|
+
export type PartnerEmbedOpenMode = "popup" | "newTab";
|
|
104
|
+
/** Options for {@link PartnerEmbedCodeDto} generation. */
|
|
105
|
+
export interface PartnerEmbedOptions {
|
|
106
|
+
/** Book a specific service path/slug instead of the business landing page. */
|
|
107
|
+
servicePath?: string;
|
|
108
|
+
/** Color theme. Defaults to "auto". */
|
|
109
|
+
theme?: PartnerEmbedTheme;
|
|
110
|
+
/** Hide the business header/details inside the embed. Defaults to false. */
|
|
111
|
+
hidePageDetails?: boolean;
|
|
112
|
+
/** Show the light/dark toggle. Defaults to true. */
|
|
113
|
+
showThemeToggle?: boolean;
|
|
114
|
+
/** Inline iframe height in px. Defaults to 760. */
|
|
115
|
+
heightPx?: number;
|
|
116
|
+
/** Inline iframe border-radius key (none|sm|medium|lg|xl|2xl). Defaults to "medium". */
|
|
117
|
+
iframeBorderRadius?: string;
|
|
118
|
+
/** Popup vs new tab for the script widget. Defaults to "popup". */
|
|
119
|
+
openMode?: PartnerEmbedOpenMode;
|
|
120
|
+
/** Popup button text. Defaults to "Book now". */
|
|
121
|
+
buttonText?: string;
|
|
122
|
+
/** Popup button background color (hex). */
|
|
123
|
+
buttonBackgroundColor?: string;
|
|
124
|
+
/** Popup button text color (hex). */
|
|
125
|
+
buttonTextColor?: string;
|
|
126
|
+
/** Popup button border radius in px. */
|
|
127
|
+
buttonBorderRadiusPx?: number;
|
|
128
|
+
}
|
|
129
|
+
/** Resolved embed options actually applied (after defaults). */
|
|
130
|
+
export interface PartnerEmbedAppliedOptions {
|
|
131
|
+
servicePath?: string;
|
|
132
|
+
theme: PartnerEmbedTheme;
|
|
133
|
+
hidePageDetails: boolean;
|
|
134
|
+
showThemeToggle: boolean;
|
|
135
|
+
heightPx: number;
|
|
136
|
+
iframeBorderRadius: string;
|
|
137
|
+
openMode: PartnerEmbedOpenMode;
|
|
138
|
+
}
|
|
139
|
+
/** Booking embed code for a business (iframe + popup script + raw URL). */
|
|
140
|
+
export interface PartnerEmbedCodeDto {
|
|
141
|
+
/** Fully-qualified booking URL with the chosen options applied. */
|
|
142
|
+
bookingUrl: string;
|
|
143
|
+
/** Inline iframe HTML snippet. */
|
|
144
|
+
iframe: string;
|
|
145
|
+
/** Popup widget `<script>` snippet. */
|
|
146
|
+
popupScript: string;
|
|
147
|
+
/** The options actually applied after defaults. */
|
|
148
|
+
appliedOptions: PartnerEmbedAppliedOptions;
|
|
149
|
+
}
|
|
69
150
|
//# sourceMappingURL=partnerDto.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partnerDto.d.ts","sourceRoot":"","sources":["../../../src/types/partnerDto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AACnD,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC;AACxC,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC;AACpC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAE1C,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,kEAAkE;AAClE,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,uDAAuD;AACvD,MAAM,WAAW,8BAA8B;IAC7C,GAAG,EAAE,sBAAsB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
1
|
+
{"version":3,"file":"partnerDto.d.ts","sourceRoot":"","sources":["../../../src/types/partnerDto.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,4 +66,85 @@ export interface CreatePartnerApiKeyResponseDto {
|
|
|
66
66
|
key: PartnerApiKeyPublicDto;
|
|
67
67
|
api_key: string;
|
|
68
68
|
}
|
|
69
|
+
/** Maximum number of items the Partner API returns in a single list page. */
|
|
70
|
+
export declare const PARTNER_MAX_PAGE_SIZE = 100;
|
|
71
|
+
/** Default page size when no limit is supplied. */
|
|
72
|
+
export declare const PARTNER_DEFAULT_PAGE_SIZE = 100;
|
|
73
|
+
/** A single page of Partner API list results. */
|
|
74
|
+
export interface PartnerPage<T> {
|
|
75
|
+
/** Items in this page (never more than {@link PARTNER_MAX_PAGE_SIZE}). */
|
|
76
|
+
items: T[];
|
|
77
|
+
/** Total number of items available across all pages. */
|
|
78
|
+
total: number;
|
|
79
|
+
/** Effective page size used for this response. */
|
|
80
|
+
limit: number;
|
|
81
|
+
/** Offset used for this response. */
|
|
82
|
+
offset: number;
|
|
83
|
+
/** True when more items exist beyond this page. */
|
|
84
|
+
hasMore: boolean;
|
|
85
|
+
}
|
|
86
|
+
/** Raw pagination inputs (query strings or numbers). */
|
|
87
|
+
export interface PartnerPaginationInput {
|
|
88
|
+
limit?: number | string;
|
|
89
|
+
offset?: number | string;
|
|
90
|
+
}
|
|
91
|
+
/** Clamp raw pagination params to valid bounds (limit 1–100, offset >= 0). */
|
|
92
|
+
export declare function resolvePartnerPageParams(input?: PartnerPaginationInput): {
|
|
93
|
+
limit: number;
|
|
94
|
+
offset: number;
|
|
95
|
+
};
|
|
96
|
+
/** Slice a full array into a typed {@link PartnerPage}, enforcing the max page size. */
|
|
97
|
+
export declare function partnerPaginate<T>(items: T[], input?: PartnerPaginationInput): PartnerPage<T>;
|
|
98
|
+
/** True when `value` matches the `YYYY-MM` format (e.g. "2026-06"). */
|
|
99
|
+
export declare function isValidYearMonth(value: string | undefined | null): boolean;
|
|
100
|
+
/** Color theme for an embedded booking page. */
|
|
101
|
+
export type PartnerEmbedTheme = "light" | "dark" | "auto";
|
|
102
|
+
/** How the popup widget opens the booking page. */
|
|
103
|
+
export type PartnerEmbedOpenMode = "popup" | "newTab";
|
|
104
|
+
/** Options for {@link PartnerEmbedCodeDto} generation. */
|
|
105
|
+
export interface PartnerEmbedOptions {
|
|
106
|
+
/** Book a specific service path/slug instead of the business landing page. */
|
|
107
|
+
servicePath?: string;
|
|
108
|
+
/** Color theme. Defaults to "auto". */
|
|
109
|
+
theme?: PartnerEmbedTheme;
|
|
110
|
+
/** Hide the business header/details inside the embed. Defaults to false. */
|
|
111
|
+
hidePageDetails?: boolean;
|
|
112
|
+
/** Show the light/dark toggle. Defaults to true. */
|
|
113
|
+
showThemeToggle?: boolean;
|
|
114
|
+
/** Inline iframe height in px. Defaults to 760. */
|
|
115
|
+
heightPx?: number;
|
|
116
|
+
/** Inline iframe border-radius key (none|sm|medium|lg|xl|2xl). Defaults to "medium". */
|
|
117
|
+
iframeBorderRadius?: string;
|
|
118
|
+
/** Popup vs new tab for the script widget. Defaults to "popup". */
|
|
119
|
+
openMode?: PartnerEmbedOpenMode;
|
|
120
|
+
/** Popup button text. Defaults to "Book now". */
|
|
121
|
+
buttonText?: string;
|
|
122
|
+
/** Popup button background color (hex). */
|
|
123
|
+
buttonBackgroundColor?: string;
|
|
124
|
+
/** Popup button text color (hex). */
|
|
125
|
+
buttonTextColor?: string;
|
|
126
|
+
/** Popup button border radius in px. */
|
|
127
|
+
buttonBorderRadiusPx?: number;
|
|
128
|
+
}
|
|
129
|
+
/** Resolved embed options actually applied (after defaults). */
|
|
130
|
+
export interface PartnerEmbedAppliedOptions {
|
|
131
|
+
servicePath?: string;
|
|
132
|
+
theme: PartnerEmbedTheme;
|
|
133
|
+
hidePageDetails: boolean;
|
|
134
|
+
showThemeToggle: boolean;
|
|
135
|
+
heightPx: number;
|
|
136
|
+
iframeBorderRadius: string;
|
|
137
|
+
openMode: PartnerEmbedOpenMode;
|
|
138
|
+
}
|
|
139
|
+
/** Booking embed code for a business (iframe + popup script + raw URL). */
|
|
140
|
+
export interface PartnerEmbedCodeDto {
|
|
141
|
+
/** Fully-qualified booking URL with the chosen options applied. */
|
|
142
|
+
bookingUrl: string;
|
|
143
|
+
/** Inline iframe HTML snippet. */
|
|
144
|
+
iframe: string;
|
|
145
|
+
/** Popup widget `<script>` snippet. */
|
|
146
|
+
popupScript: string;
|
|
147
|
+
/** The options actually applied after defaults. */
|
|
148
|
+
appliedOptions: PartnerEmbedAppliedOptions;
|
|
149
|
+
}
|
|
69
150
|
//# sourceMappingURL=partnerDto.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partnerDto.d.ts","sourceRoot":"","sources":["../../src/types/partnerDto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AACnD,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC;AACxC,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC;AACpC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAE1C,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,kEAAkE;AAClE,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,uDAAuD;AACvD,MAAM,WAAW,8BAA8B;IAC7C,GAAG,EAAE,sBAAsB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
1
|
+
{"version":3,"file":"partnerDto.d.ts","sourceRoot":"","sources":["../../src/types/partnerDto.ts"],"names":[],"mappings":"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"}
|
package/dist/types/partnerDto.js
CHANGED
|
@@ -1 +1,32 @@
|
|
|
1
|
-
|
|
1
|
+
/** Maximum number of items the Partner API returns in a single list page. */
|
|
2
|
+
export const PARTNER_MAX_PAGE_SIZE = 100;
|
|
3
|
+
/** Default page size when no limit is supplied. */
|
|
4
|
+
export const PARTNER_DEFAULT_PAGE_SIZE = 100;
|
|
5
|
+
function toBoundedInt(value, fallback, min, max) {
|
|
6
|
+
const parsed = typeof value === "string" ? Number.parseInt(value, 10) : value ?? fallback;
|
|
7
|
+
const n = Number.isFinite(parsed) ? Math.floor(parsed) : fallback;
|
|
8
|
+
return Math.min(Math.max(min, n), max);
|
|
9
|
+
}
|
|
10
|
+
/** Clamp raw pagination params to valid bounds (limit 1–100, offset >= 0). */
|
|
11
|
+
export function resolvePartnerPageParams(input) {
|
|
12
|
+
const limit = toBoundedInt(input?.limit, PARTNER_DEFAULT_PAGE_SIZE, 1, PARTNER_MAX_PAGE_SIZE);
|
|
13
|
+
const offset = toBoundedInt(input?.offset, 0, 0, Number.MAX_SAFE_INTEGER);
|
|
14
|
+
return { limit, offset };
|
|
15
|
+
}
|
|
16
|
+
/** Slice a full array into a typed {@link PartnerPage}, enforcing the max page size. */
|
|
17
|
+
export function partnerPaginate(items, input) {
|
|
18
|
+
const { limit, offset } = resolvePartnerPageParams(input);
|
|
19
|
+
const slice = items.slice(offset, offset + limit);
|
|
20
|
+
return {
|
|
21
|
+
items: slice,
|
|
22
|
+
total: items.length,
|
|
23
|
+
limit,
|
|
24
|
+
offset,
|
|
25
|
+
hasMore: offset + slice.length < items.length,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const YEAR_MONTH_PATTERN = /^\d{4}-(0[1-9]|1[0-2])$/;
|
|
29
|
+
/** True when `value` matches the `YYYY-MM` format (e.g. "2026-06"). */
|
|
30
|
+
export function isValidYearMonth(value) {
|
|
31
|
+
return typeof value === "string" && YEAR_MONTH_PATTERN.test(value);
|
|
32
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@foxscheduling/shared",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Shared utilities and interfaces for FoxScheduling backend and frontend",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -31,7 +31,12 @@
|
|
|
31
31
|
"default": "./dist/types/index.js"
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
|
-
"files": [
|
|
34
|
+
"files": [
|
|
35
|
+
"dist"
|
|
36
|
+
],
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
35
40
|
"scripts": {
|
|
36
41
|
"build": "tsc && tsc -p tsconfig.cjs.json && node scripts/rename-cjs.mjs",
|
|
37
42
|
"dev": "tsc --watch",
|
|
@@ -43,4 +48,4 @@
|
|
|
43
48
|
"dependencies": {
|
|
44
49
|
"dayjs": "^1.11.19"
|
|
45
50
|
}
|
|
46
|
-
}
|
|
51
|
+
}
|