@trokky/client 2.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.
- package/README.md +833 -0
- package/dist/cache/manager.d.ts +47 -0
- package/dist/cache/manager.d.ts.map +1 -0
- package/dist/cache/manager.js +100 -0
- package/dist/cache/manager.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +159 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/client.d.ts +221 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +310 -0
- package/dist/client.js.map +1 -0
- package/dist/document/client.d.ts +57 -0
- package/dist/document/client.d.ts.map +1 -0
- package/dist/document/client.js +176 -0
- package/dist/document/client.js.map +1 -0
- package/dist/generator/document-generator.d.ts +50 -0
- package/dist/generator/document-generator.d.ts.map +1 -0
- package/dist/generator/document-generator.js +329 -0
- package/dist/generator/document-generator.js.map +1 -0
- package/dist/generator/index.d.ts +121 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +559 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/http/client.d.ts +117 -0
- package/dist/http/client.d.ts.map +1 -0
- package/dist/http/client.js +411 -0
- package/dist/http/client.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/media/helper.d.ts +89 -0
- package/dist/media/helper.d.ts.map +1 -0
- package/dist/media/helper.js +197 -0
- package/dist/media/helper.js.map +1 -0
- package/dist/media/url-builder.d.ts +142 -0
- package/dist/media/url-builder.d.ts.map +1 -0
- package/dist/media/url-builder.js +280 -0
- package/dist/media/url-builder.js.map +1 -0
- package/dist/query/builder.d.ts +270 -0
- package/dist/query/builder.d.ts.map +1 -0
- package/dist/query/builder.js +731 -0
- package/dist/query/builder.js.map +1 -0
- package/dist/query/index.d.ts +6 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +5 -0
- package/dist/query/index.js.map +1 -0
- package/dist/react/hooks.d.ts +42 -0
- package/dist/react/hooks.d.ts.map +1 -0
- package/dist/react/hooks.js +59 -0
- package/dist/react/hooks.js.map +1 -0
- package/dist/react/index.d.ts +6 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +6 -0
- package/dist/react/index.js.map +1 -0
- package/dist/server/index.d.ts +9 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +8 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/media-proxy.d.ts +102 -0
- package/dist/server/media-proxy.d.ts.map +1 -0
- package/dist/server/media-proxy.js +160 -0
- package/dist/server/media-proxy.js.map +1 -0
- package/dist/shortcodes/index.d.ts +11 -0
- package/dist/shortcodes/index.d.ts.map +1 -0
- package/dist/shortcodes/index.js +10 -0
- package/dist/shortcodes/index.js.map +1 -0
- package/dist/shortcodes/parser.d.ts +32 -0
- package/dist/shortcodes/parser.d.ts.map +1 -0
- package/dist/shortcodes/parser.js +88 -0
- package/dist/shortcodes/parser.js.map +1 -0
- package/dist/shortcodes/resolver.d.ts +57 -0
- package/dist/shortcodes/resolver.d.ts.map +1 -0
- package/dist/shortcodes/resolver.js +97 -0
- package/dist/shortcodes/resolver.js.map +1 -0
- package/dist/shortcodes/types.d.ts +17 -0
- package/dist/shortcodes/types.d.ts.map +1 -0
- package/dist/shortcodes/types.js +6 -0
- package/dist/shortcodes/types.js.map +1 -0
- package/dist/types/index.d.ts +134 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +101 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fluent Image URL Builder
|
|
3
|
+
* Provides a chainable API for building media URLs with transformations
|
|
4
|
+
*
|
|
5
|
+
* Inspired by Sanity's @sanity/image-url builder
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Fluent builder for constructing media URLs with transformations
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const url = client.imageUrl(article.featuredImage)
|
|
13
|
+
* .width(800)
|
|
14
|
+
* .height(400)
|
|
15
|
+
* .format('webp')
|
|
16
|
+
* .quality(85)
|
|
17
|
+
* .url()
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export class ImageUrlBuilder {
|
|
21
|
+
constructor(options) {
|
|
22
|
+
this.options = options;
|
|
23
|
+
this.mediaId = null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Set the image source from a media field value
|
|
27
|
+
*/
|
|
28
|
+
image(source) {
|
|
29
|
+
if (!source) {
|
|
30
|
+
this.mediaId = null;
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
if (typeof source === 'string') {
|
|
34
|
+
this.mediaId = source;
|
|
35
|
+
}
|
|
36
|
+
else if (source.asset?._ref) {
|
|
37
|
+
this.mediaId = source.asset._ref;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.mediaId = null;
|
|
41
|
+
}
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Set image width
|
|
46
|
+
*/
|
|
47
|
+
width(w) {
|
|
48
|
+
this._width = Math.round(w);
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Set image height
|
|
53
|
+
*/
|
|
54
|
+
height(h) {
|
|
55
|
+
this._height = Math.round(h);
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Set both width and height
|
|
60
|
+
*/
|
|
61
|
+
size(w, h) {
|
|
62
|
+
this._width = Math.round(w);
|
|
63
|
+
this._height = Math.round(h);
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Set image format
|
|
68
|
+
*/
|
|
69
|
+
format(fmt) {
|
|
70
|
+
this._format = fmt;
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Set image quality (1-100)
|
|
75
|
+
*/
|
|
76
|
+
quality(q) {
|
|
77
|
+
this._quality = Math.max(1, Math.min(100, Math.round(q)));
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Set image fit mode
|
|
82
|
+
*/
|
|
83
|
+
fit(mode) {
|
|
84
|
+
this._fit = mode;
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Use a predefined variant (e.g., 'thumbnail', 'medium', 'large')
|
|
89
|
+
* When a variant is set, other transformations are ignored
|
|
90
|
+
*/
|
|
91
|
+
variant(name) {
|
|
92
|
+
this._variant = name;
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Apply blur effect (0-100)
|
|
97
|
+
*/
|
|
98
|
+
blur(amount) {
|
|
99
|
+
this._blur = Math.max(0, Math.min(100, amount));
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Apply sharpening (0-100)
|
|
104
|
+
*/
|
|
105
|
+
sharpen(amount) {
|
|
106
|
+
this._sharpen = Math.max(0, Math.min(100, amount));
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Convert to grayscale
|
|
111
|
+
*/
|
|
112
|
+
grayscale() {
|
|
113
|
+
this._grayscale = true;
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
// Convenience presets
|
|
117
|
+
/**
|
|
118
|
+
* Preset for thumbnail size (200x200 cover)
|
|
119
|
+
*/
|
|
120
|
+
thumbnail() {
|
|
121
|
+
return this.variant('thumbnail');
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Preset for medium size
|
|
125
|
+
*/
|
|
126
|
+
medium() {
|
|
127
|
+
return this.variant('medium');
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Preset for large size
|
|
131
|
+
*/
|
|
132
|
+
large() {
|
|
133
|
+
return this.variant('large');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get the original file without transformations
|
|
137
|
+
*/
|
|
138
|
+
original() {
|
|
139
|
+
this._variant = 'original';
|
|
140
|
+
return this;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Auto-select best format for browser
|
|
144
|
+
*/
|
|
145
|
+
auto() {
|
|
146
|
+
this._format = 'auto';
|
|
147
|
+
return this;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Build and return the URL string
|
|
151
|
+
*/
|
|
152
|
+
url() {
|
|
153
|
+
if (!this.mediaId) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
const isProxy = !!this.options.proxyPath;
|
|
157
|
+
// When using proxyPath, it replaces the full path (e.g., '/media')
|
|
158
|
+
// When using baseUrl, we need to add /media prefix
|
|
159
|
+
const basePath = isProxy
|
|
160
|
+
? this.options.proxyPath
|
|
161
|
+
: `${this.options.baseUrl}/media`;
|
|
162
|
+
// Build URL with transformation parameters
|
|
163
|
+
const params = new URLSearchParams();
|
|
164
|
+
// For proxy mode with variants, convert to width params
|
|
165
|
+
if (isProxy && this._variant && this._variant !== 'original') {
|
|
166
|
+
const variantWidths = {
|
|
167
|
+
thumbnail: 300,
|
|
168
|
+
medium: 800,
|
|
169
|
+
large: 1200
|
|
170
|
+
};
|
|
171
|
+
const width = variantWidths[this._variant];
|
|
172
|
+
if (width) {
|
|
173
|
+
params.set('w', width.toString());
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
// Use explicit width/height if set
|
|
178
|
+
if (this._width)
|
|
179
|
+
params.set('w', this._width.toString());
|
|
180
|
+
if (this._height)
|
|
181
|
+
params.set('h', this._height.toString());
|
|
182
|
+
}
|
|
183
|
+
if (this._format && this._format !== 'auto')
|
|
184
|
+
params.set('fm', this._format);
|
|
185
|
+
if (this._quality)
|
|
186
|
+
params.set('q', this._quality.toString());
|
|
187
|
+
if (this._fit)
|
|
188
|
+
params.set('fit', this._fit);
|
|
189
|
+
if (this._blur)
|
|
190
|
+
params.set('blur', this._blur.toString());
|
|
191
|
+
if (this._sharpen)
|
|
192
|
+
params.set('sharp', this._sharpen.toString());
|
|
193
|
+
if (this._grayscale)
|
|
194
|
+
params.set('grayscale', '1');
|
|
195
|
+
const queryString = params.toString();
|
|
196
|
+
// For non-proxy mode with variants, use the /variants/ path
|
|
197
|
+
if (!isProxy && this._variant) {
|
|
198
|
+
if (this._variant === 'original') {
|
|
199
|
+
return `${basePath}/${this.mediaId}/file`;
|
|
200
|
+
}
|
|
201
|
+
return `${basePath}/${this.mediaId}/variants/${this._variant}`;
|
|
202
|
+
}
|
|
203
|
+
// Return URL with query params
|
|
204
|
+
return `${basePath}/${this.mediaId}/file${queryString ? `?${queryString}` : ''}`;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Build URL string (alias for url())
|
|
208
|
+
*/
|
|
209
|
+
toString() {
|
|
210
|
+
return this.url() || '';
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Create an image URL builder factory
|
|
215
|
+
*/
|
|
216
|
+
export function createImageUrlBuilder(options) {
|
|
217
|
+
return function urlFor(source) {
|
|
218
|
+
return new ImageUrlBuilder(options).image(source);
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Get responsive srcset for an image
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* ```typescript
|
|
226
|
+
* const srcset = getSrcSet(article.image, {
|
|
227
|
+
* baseUrl: 'http://localhost:3000/api',
|
|
228
|
+
* widths: [400, 800, 1200]
|
|
229
|
+
* })
|
|
230
|
+
* // Returns: "/media/abc123/file?w=400 400w, /media/abc123/file?w=800 800w, ..."
|
|
231
|
+
* ```
|
|
232
|
+
*/
|
|
233
|
+
export function getSrcSet(source, options) {
|
|
234
|
+
if (!source?.asset?._ref) {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
const mediaId = source.asset._ref;
|
|
238
|
+
const isProxy = !!options.proxyPath;
|
|
239
|
+
// When using proxyPath, it replaces the full path (e.g., '/media')
|
|
240
|
+
// When using baseUrl, we need to add /media prefix
|
|
241
|
+
const basePath = isProxy
|
|
242
|
+
? options.proxyPath
|
|
243
|
+
: `${options.baseUrl}/media`;
|
|
244
|
+
// If using named variants (only for non-proxy mode)
|
|
245
|
+
if (options.variants && !isProxy) {
|
|
246
|
+
const variantWidths = {
|
|
247
|
+
thumbnail: 300,
|
|
248
|
+
medium: 800,
|
|
249
|
+
large: 1200,
|
|
250
|
+
original: 1920
|
|
251
|
+
};
|
|
252
|
+
return options.variants
|
|
253
|
+
.map(variant => {
|
|
254
|
+
const width = variantWidths[variant] || 800;
|
|
255
|
+
const url = variant === 'original'
|
|
256
|
+
? `${basePath}/${mediaId}/file`
|
|
257
|
+
: `${basePath}/${mediaId}/variants/${variant}`;
|
|
258
|
+
return `${url} ${width}w`;
|
|
259
|
+
})
|
|
260
|
+
.join(', ');
|
|
261
|
+
}
|
|
262
|
+
// Use custom widths or defaults (works for both proxy and non-proxy)
|
|
263
|
+
const widths = options.widths || [400, 800, 1200, 1920];
|
|
264
|
+
return widths
|
|
265
|
+
.map(w => `${basePath}/${mediaId}/file?w=${w} ${w}w`)
|
|
266
|
+
.join(', ');
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Get the best variant for a given viewport width
|
|
270
|
+
*/
|
|
271
|
+
export function getBestVariant(maxWidth) {
|
|
272
|
+
if (maxWidth <= 200)
|
|
273
|
+
return 'thumbnail';
|
|
274
|
+
if (maxWidth <= 800)
|
|
275
|
+
return 'medium';
|
|
276
|
+
if (maxWidth <= 1200)
|
|
277
|
+
return 'large';
|
|
278
|
+
return 'original';
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=url-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-builder.js","sourceRoot":"","sources":["../../src/media/url-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fluent Query Builder
|
|
3
|
+
* Provides a chainable API for building document queries with reference expansion
|
|
4
|
+
*/
|
|
5
|
+
import type { HttpClient } from '../http/client.js';
|
|
6
|
+
import type { CacheManager } from '../cache/manager.js';
|
|
7
|
+
import type { BaseDocument } from '../types/index.js';
|
|
8
|
+
export interface QueryBuilderOptions {
|
|
9
|
+
/** Use cache for this query */
|
|
10
|
+
useCache?: boolean;
|
|
11
|
+
/** Disable cache busting timestamp */
|
|
12
|
+
noTimestamp?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface ExpandConfig {
|
|
15
|
+
/** Field name to expand */
|
|
16
|
+
field: string;
|
|
17
|
+
/** Whether it's an array of references */
|
|
18
|
+
isArray?: boolean;
|
|
19
|
+
/** Nested expansions */
|
|
20
|
+
expand?: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Fluent query builder for Trokky documents
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const articles = await client
|
|
28
|
+
* .from('article')
|
|
29
|
+
* .published()
|
|
30
|
+
* .expand('category')
|
|
31
|
+
* .expand('author')
|
|
32
|
+
* .sort({ _createdAt: 'desc' })
|
|
33
|
+
* .limit(10)
|
|
34
|
+
* .fetch()
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare class QueryBuilder<T extends BaseDocument = BaseDocument> {
|
|
38
|
+
private http;
|
|
39
|
+
private cache;
|
|
40
|
+
private _type;
|
|
41
|
+
private _filter;
|
|
42
|
+
private _sort;
|
|
43
|
+
private _limit?;
|
|
44
|
+
private _offset?;
|
|
45
|
+
private _select?;
|
|
46
|
+
private _expand;
|
|
47
|
+
private _options;
|
|
48
|
+
constructor(http: HttpClient, cache: CacheManager, type: string);
|
|
49
|
+
/**
|
|
50
|
+
* Filter by published status (_status === 'published')
|
|
51
|
+
*/
|
|
52
|
+
published(): this;
|
|
53
|
+
/**
|
|
54
|
+
* Filter by draft status (_status === 'draft')
|
|
55
|
+
*/
|
|
56
|
+
draft(): this;
|
|
57
|
+
/**
|
|
58
|
+
* Add filter conditions
|
|
59
|
+
* @param conditions Filter object or field name
|
|
60
|
+
* @param value Value if first param is field name
|
|
61
|
+
*/
|
|
62
|
+
where(conditions: Record<string, any>): this;
|
|
63
|
+
where(field: string, value: any): this;
|
|
64
|
+
/**
|
|
65
|
+
* Add equality filter
|
|
66
|
+
*/
|
|
67
|
+
eq(field: string, value: any): this;
|
|
68
|
+
/**
|
|
69
|
+
* Add not-equal filter
|
|
70
|
+
*/
|
|
71
|
+
neq(field: string, value: any): this;
|
|
72
|
+
/**
|
|
73
|
+
* Add greater-than filter
|
|
74
|
+
*/
|
|
75
|
+
gt(field: string, value: any): this;
|
|
76
|
+
/**
|
|
77
|
+
* Add greater-than-or-equal filter
|
|
78
|
+
*/
|
|
79
|
+
gte(field: string, value: any): this;
|
|
80
|
+
/**
|
|
81
|
+
* Add less-than filter
|
|
82
|
+
*/
|
|
83
|
+
lt(field: string, value: any): this;
|
|
84
|
+
/**
|
|
85
|
+
* Add less-than-or-equal filter
|
|
86
|
+
*/
|
|
87
|
+
lte(field: string, value: any): this;
|
|
88
|
+
/**
|
|
89
|
+
* Add in-array filter
|
|
90
|
+
*/
|
|
91
|
+
in(field: string, values: any[]): this;
|
|
92
|
+
/**
|
|
93
|
+
* Add not-in-array filter
|
|
94
|
+
*/
|
|
95
|
+
notIn(field: string, values: any[]): this;
|
|
96
|
+
/**
|
|
97
|
+
* Add text search filter
|
|
98
|
+
*/
|
|
99
|
+
search(term: string, fields?: string[]): this;
|
|
100
|
+
/**
|
|
101
|
+
* Expand a reference field (resolve the reference to full document)
|
|
102
|
+
* @param field Field name to expand. Use 'field[]' syntax for array references
|
|
103
|
+
*/
|
|
104
|
+
expand(field: string): this;
|
|
105
|
+
/**
|
|
106
|
+
* Set sort order
|
|
107
|
+
* @param sortConfig Sort configuration object
|
|
108
|
+
*/
|
|
109
|
+
sort(sortConfig: Record<string, 'asc' | 'desc' | 1 | -1>): this;
|
|
110
|
+
/**
|
|
111
|
+
* Sort by field ascending
|
|
112
|
+
*/
|
|
113
|
+
sortAsc(field: string): this;
|
|
114
|
+
/**
|
|
115
|
+
* Sort by field descending
|
|
116
|
+
*/
|
|
117
|
+
sortDesc(field: string): this;
|
|
118
|
+
/**
|
|
119
|
+
* Sort by creation date (newest first)
|
|
120
|
+
*/
|
|
121
|
+
newest(): this;
|
|
122
|
+
/**
|
|
123
|
+
* Sort by creation date (oldest first)
|
|
124
|
+
*/
|
|
125
|
+
oldest(): this;
|
|
126
|
+
/**
|
|
127
|
+
* Limit number of results
|
|
128
|
+
*/
|
|
129
|
+
limit(count: number): this;
|
|
130
|
+
/**
|
|
131
|
+
* Skip first N results
|
|
132
|
+
*/
|
|
133
|
+
offset(count: number): this;
|
|
134
|
+
/**
|
|
135
|
+
* Skip first N results (alias for offset)
|
|
136
|
+
*/
|
|
137
|
+
skip(count: number): this;
|
|
138
|
+
/**
|
|
139
|
+
* Select specific fields only
|
|
140
|
+
*/
|
|
141
|
+
select(...fields: string[]): this;
|
|
142
|
+
/**
|
|
143
|
+
* Disable caching for this query
|
|
144
|
+
*/
|
|
145
|
+
noCache(): this;
|
|
146
|
+
/**
|
|
147
|
+
* Add cache-busting timestamp to prevent stale data
|
|
148
|
+
*/
|
|
149
|
+
fresh(): this;
|
|
150
|
+
/**
|
|
151
|
+
* Execute the query and return results
|
|
152
|
+
*/
|
|
153
|
+
fetch(): Promise<T[]>;
|
|
154
|
+
/**
|
|
155
|
+
* Execute the query and return results with metadata
|
|
156
|
+
*/
|
|
157
|
+
fetchWithMeta(): Promise<{
|
|
158
|
+
documents: T[];
|
|
159
|
+
total?: number;
|
|
160
|
+
offset?: number;
|
|
161
|
+
limit?: number;
|
|
162
|
+
hasMore?: boolean;
|
|
163
|
+
}>;
|
|
164
|
+
/**
|
|
165
|
+
* Get first result or null
|
|
166
|
+
*/
|
|
167
|
+
first(): Promise<T | null>;
|
|
168
|
+
/**
|
|
169
|
+
* Get count of matching documents
|
|
170
|
+
*/
|
|
171
|
+
count(): Promise<number>;
|
|
172
|
+
/**
|
|
173
|
+
* Check if any documents match the query
|
|
174
|
+
*/
|
|
175
|
+
exists(): Promise<boolean>;
|
|
176
|
+
/**
|
|
177
|
+
* Check if references have already been expanded by the server
|
|
178
|
+
*/
|
|
179
|
+
private hasExpandedReferences;
|
|
180
|
+
/**
|
|
181
|
+
* Expand references in documents
|
|
182
|
+
*/
|
|
183
|
+
private expandReferences;
|
|
184
|
+
/**
|
|
185
|
+
* Check if a value is a reference object
|
|
186
|
+
*/
|
|
187
|
+
private isReference;
|
|
188
|
+
/**
|
|
189
|
+
* Get a nested value from an object using dot notation path
|
|
190
|
+
* @param obj The object to traverse
|
|
191
|
+
* @param path Dot-separated path (e.g., 'documentation.featuredDocument')
|
|
192
|
+
*/
|
|
193
|
+
private getNestedValue;
|
|
194
|
+
/**
|
|
195
|
+
* Set a nested value in an object using dot notation path
|
|
196
|
+
* @param obj The object to modify
|
|
197
|
+
* @param path Dot-separated path (e.g., 'documentation.featuredDocument')
|
|
198
|
+
* @param value The value to set
|
|
199
|
+
*/
|
|
200
|
+
private setNestedValue;
|
|
201
|
+
/**
|
|
202
|
+
* Infer type from reference ID (e.g., 'category-abc123' -> 'category')
|
|
203
|
+
*/
|
|
204
|
+
private inferTypeFromRef;
|
|
205
|
+
/**
|
|
206
|
+
* Extract document from API response
|
|
207
|
+
*/
|
|
208
|
+
private extractDocument;
|
|
209
|
+
/**
|
|
210
|
+
* Fetch a single referenced document
|
|
211
|
+
*/
|
|
212
|
+
private fetchReference;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Singleton query builder for fetching a single document by type
|
|
216
|
+
*/
|
|
217
|
+
export declare class SingletonBuilder<T extends BaseDocument = BaseDocument> {
|
|
218
|
+
private http;
|
|
219
|
+
private cache;
|
|
220
|
+
private _type;
|
|
221
|
+
private _id?;
|
|
222
|
+
private _expand;
|
|
223
|
+
private _options;
|
|
224
|
+
constructor(http: HttpClient, cache: CacheManager, _type: string, _id?: string | undefined);
|
|
225
|
+
/**
|
|
226
|
+
* Expand a reference field
|
|
227
|
+
*/
|
|
228
|
+
expand(field: string): this;
|
|
229
|
+
/**
|
|
230
|
+
* Disable caching
|
|
231
|
+
*/
|
|
232
|
+
noCache(): this;
|
|
233
|
+
/**
|
|
234
|
+
* Fetch fresh data with cache busting
|
|
235
|
+
*/
|
|
236
|
+
fresh(): this;
|
|
237
|
+
/**
|
|
238
|
+
* Execute and return the singleton document
|
|
239
|
+
*/
|
|
240
|
+
fetch(): Promise<T | null>;
|
|
241
|
+
/**
|
|
242
|
+
* Check if references have already been expanded by the server
|
|
243
|
+
*/
|
|
244
|
+
private hasExpandedReferences;
|
|
245
|
+
/**
|
|
246
|
+
* Expand references in a single document
|
|
247
|
+
*/
|
|
248
|
+
private expandReferences;
|
|
249
|
+
private isReference;
|
|
250
|
+
/**
|
|
251
|
+
* Get a nested value from an object using dot notation path
|
|
252
|
+
* @param obj The object to traverse
|
|
253
|
+
* @param path Dot-separated path (e.g., 'documentation.featuredDocument')
|
|
254
|
+
*/
|
|
255
|
+
private getNestedValue;
|
|
256
|
+
/**
|
|
257
|
+
* Set a nested value in an object using dot notation path
|
|
258
|
+
* @param obj The object to modify
|
|
259
|
+
* @param path Dot-separated path (e.g., 'documentation.featuredDocument')
|
|
260
|
+
* @param value The value to set
|
|
261
|
+
*/
|
|
262
|
+
private setNestedValue;
|
|
263
|
+
private inferTypeFromRef;
|
|
264
|
+
/**
|
|
265
|
+
* Extract document from API response
|
|
266
|
+
*/
|
|
267
|
+
private extractDocument;
|
|
268
|
+
private fetchReference;
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/query/builder.ts"],"names":[],"mappings":"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"}
|