@contentrain/query 5.1.1 → 5.1.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.
@@ -152,6 +152,7 @@ function emitTypes(models) {
152
152
  "// Re-generate with: npx contentrain-query generate",
153
153
  "",
154
154
  "export type ContentStatus = 'draft' | 'published' | 'in_review' | 'rejected' | 'archived'",
155
+ "export type WhereOp = 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'contains'",
155
156
  ""
156
157
  ];
157
158
  for (const model of models) {
@@ -175,10 +176,12 @@ function emitTypes(models) {
175
176
  lines.push(`export interface QueryBuilder<T> {
176
177
  locale(lang: string): QueryBuilder<T>
177
178
  where<K extends keyof T>(field: K, value: T[K]): QueryBuilder<T>
179
+ where<K extends keyof T>(field: K, op: WhereOp, value: unknown): QueryBuilder<T>
178
180
  sort<K extends keyof T>(field: K, order?: 'asc' | 'desc'): QueryBuilder<T>
179
181
  limit(n: number): QueryBuilder<T>
180
182
  offset(n: number): QueryBuilder<T>
181
183
  include(...fields: string[]): QueryBuilder<T>
184
+ count(): number
182
185
  first(): T | undefined
183
186
  all(): T[]
184
187
  }`);
@@ -199,8 +202,10 @@ function emitTypes(models) {
199
202
  lines.push(`export interface DocumentQuery<T> {
200
203
  locale(lang: string): DocumentQuery<T>
201
204
  where<K extends keyof T>(field: K, value: T[K]): DocumentQuery<T>
205
+ where<K extends keyof T>(field: K, op: WhereOp, value: unknown): DocumentQuery<T>
202
206
  include(...fields: string[]): DocumentQuery<T>
203
207
  bySlug(slug: string): T | undefined
208
+ count(): number
204
209
  first(): T | undefined
205
210
  all(): T[]
206
211
  }`);
@@ -690,19 +695,41 @@ function parseDataFileName(fileName) {
690
695
  };
691
696
  }
692
697
  const RUNTIME_CODE = `
698
+ // ─── Runtime Helpers ───
699
+
700
+ function _applyWhere(item, clause) {
701
+ const val = item[clause.field];
702
+ switch (clause.op) {
703
+ case 'eq': return Array.isArray(val) ? val.includes(clause.value) : val === clause.value;
704
+ case 'ne': return val !== clause.value;
705
+ case 'gt': return val > clause.value;
706
+ case 'gte': return val >= clause.value;
707
+ case 'lt': return val < clause.value;
708
+ case 'lte': return val <= clause.value;
709
+ case 'in': return Array.isArray(clause.value) && clause.value.includes(val);
710
+ case 'contains': {
711
+ if (typeof val === 'string') return val.includes(clause.value);
712
+ if (Array.isArray(val)) return val.includes(clause.value);
713
+ return false;
714
+ }
715
+ default: return true;
716
+ }
717
+ }
718
+
693
719
  // ─── Runtime Classes ───
694
720
 
695
721
  class QueryBuilder {
696
722
  constructor(data, relationMeta, resolver, defaultLocale) { this._data = data; this._filters = []; this._sortField = null; this._sortOrder = 'asc'; this._limit = null; this._offset = 0; this._locale = null; this._includes = []; this._relationMeta = relationMeta || {}; this._resolver = resolver || null; this._defaultLocale = defaultLocale || null; }
697
723
  locale(lang) { this._locale = lang; return this; }
698
- where(field, value) { this._filters.push(item => { const v = item[field]; return Array.isArray(v) ? v.includes(value) : v === value; }); return this; }
724
+ where(field, opOrValue, value) { if (value !== undefined) { this._filters.push({ field, op: opOrValue, value }); } else { this._filters.push({ field, op: 'eq', value: opOrValue }); } return this; }
699
725
  sort(field, order = 'asc') { this._sortField = field; this._sortOrder = order; return this; }
700
726
  limit(n) { this._limit = n; return this; }
701
727
  offset(n) { this._offset = n; return this; }
702
728
  include(...fields) { this._includes.push(...fields); return this; }
729
+ count() { return this.all().length; }
703
730
  all() {
704
731
  let items; if (this._locale) { items = [...(this._data.get(this._locale) ?? [])]; } else if (this._defaultLocale && this._data.has(this._defaultLocale)) { items = [...this._data.get(this._defaultLocale)]; } else { items = [...(this._data.get(this._data.keys().next().value) ?? [])]; }
705
- for (const f of this._filters) items = items.filter(f);
732
+ for (const clause of this._filters) items = items.filter(item => _applyWhere(item, clause));
706
733
  if (this._sortField) { const sf = this._sortField; const d = this._sortOrder === 'asc' ? 1 : -1; items.sort((a, b) => { const va = a[sf], vb = b[sf]; if (va == null && vb == null) return 0; if (va == null) return d; if (vb == null) return -d; return va < vb ? -d : va > vb ? d : 0; }); }
707
734
  if (this._offset > 0 || this._limit !== null) { const end = this._limit !== null ? this._offset + this._limit : undefined; items = items.slice(this._offset, end); }
708
735
  if (this._includes.length > 0 && this._resolver) { items = items.map(item => this._resolveIncludes(item)); }
@@ -761,15 +788,16 @@ class DictionaryAccessor {
761
788
  class DocumentQuery {
762
789
  constructor(data, relationMeta, resolver, defaultLocale) { this._data = data; this._filters = []; this._locale = null; this._includes = []; this._relationMeta = relationMeta || {}; this._resolver = resolver || null; this._defaultLocale = defaultLocale || null; }
763
790
  locale(lang) { this._locale = lang; return this; }
764
- where(field, value) { this._filters.push(item => item[field] === value); return this; }
791
+ where(field, opOrValue, value) { if (value !== undefined) { this._filters.push({ field, op: opOrValue, value }); } else { this._filters.push({ field, op: 'eq', value: opOrValue }); } return this; }
765
792
  include(...fields) { this._includes.push(...fields); return this; }
766
793
  bySlug(slug) {
767
794
  const items = this._resolveData(); const item = items.find(x => x.slug === slug);
768
795
  if (item && this._includes.length > 0 && this._resolver) return this._resolveIncludes(item);
769
796
  return item;
770
797
  }
798
+ count() { return this.all().length; }
771
799
  first() { return this.all()[0]; }
772
- all() { let items = this._resolveData(); for (const f of this._filters) items = items.filter(f); if (this._includes.length > 0 && this._resolver) { items = items.map(item => this._resolveIncludes(item)); } return items; }
800
+ all() { let items = this._resolveData(); for (const clause of this._filters) items = items.filter(item => _applyWhere(item, clause)); if (this._includes.length > 0 && this._resolver) { items = items.map(item => this._resolveIncludes(item)); } return items; }
773
801
  _resolveData() { let key; if (this._locale) { key = this._locale; } else if (this._defaultLocale && this._data.has(this._defaultLocale)) { key = this._defaultLocale; } else { key = this._data.keys().next().value; } return [...(this._data.get(key) ?? [])]; }
774
802
  _resolveIncludes(item) {
775
803
  const resolved = { ...item };
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_generate = require("../generate-DWu2BzSt.cjs");
2
+ const require_generate = require("../generate-DAaCl3Np.cjs");
3
3
  exports.generate = require_generate.generate;
@@ -1,2 +1,2 @@
1
- import { t as generate } from "../generate-CAoJCGIe.mjs";
1
+ import { t as generate } from "../generate-B5P14n43.mjs";
2
2
  export { generate };
@@ -0,0 +1,285 @@
1
+ //#region src/cdn/data-source.d.ts
2
+ interface CollectionDataSource<T> {
3
+ getAll(locale: string): Promise<T[]>;
4
+ getOne(id: string, locale: string): Promise<T | null>;
5
+ }
6
+ interface SingletonDataSource<T> {
7
+ get(locale: string): Promise<T>;
8
+ }
9
+ interface DictionaryDataSource {
10
+ get(locale: string): Promise<Record<string, string>>;
11
+ }
12
+ interface DocumentDataSource<T> {
13
+ getIndex(locale: string): Promise<T[]>;
14
+ getBySlug(slug: string, locale: string): Promise<{
15
+ frontmatter: T;
16
+ body: string;
17
+ html: string;
18
+ } | null>;
19
+ }
20
+ //#endregion
21
+ //#region src/cdn/http-transport.d.ts
22
+ declare class HttpTransport {
23
+ private _baseUrl;
24
+ private _projectId;
25
+ private _apiKey;
26
+ private _cache;
27
+ constructor(config: {
28
+ baseUrl: string;
29
+ projectId: string;
30
+ apiKey: string;
31
+ });
32
+ buildUrl(path: string): string;
33
+ fetch<T>(path: string): Promise<T>;
34
+ collection<T>(modelId: string): CollectionDataSource<T>;
35
+ singleton<T>(modelId: string): SingletonDataSource<T>;
36
+ dictionary(modelId: string): DictionaryDataSource;
37
+ document<T>(modelId: string): DocumentDataSource<T>;
38
+ }
39
+ //#endregion
40
+ //#region src/shared/where.d.ts
41
+ type WhereOp = 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'contains';
42
+ interface WhereClause {
43
+ field: string;
44
+ op: WhereOp;
45
+ value: unknown;
46
+ }
47
+ declare function applyWhere<T>(item: T, clause: WhereClause): boolean;
48
+ //#endregion
49
+ //#region src/cdn/collection-query.d.ts
50
+ interface EntryMeta {
51
+ status?: string;
52
+ publish_at?: string;
53
+ expire_at?: string;
54
+ updated_by?: string;
55
+ approved_by?: string;
56
+ [key: string]: unknown;
57
+ }
58
+ declare class CdnCollectionQuery<T extends object> {
59
+ private _transport;
60
+ private _source;
61
+ private _modelId;
62
+ private _locale;
63
+ private _filters;
64
+ private _sortField;
65
+ private _sortOrder;
66
+ private _limit;
67
+ private _offset;
68
+ private _includes;
69
+ private _withMeta;
70
+ constructor(transport: HttpTransport, modelId: string, defaultLocale?: string);
71
+ locale(lang: string): this;
72
+ where(field: string, op: WhereOp, value: unknown): this;
73
+ sort(field: string, order?: 'asc' | 'desc'): this;
74
+ limit(n: number): this;
75
+ offset(n: number): this;
76
+ include(...fields: string[]): this;
77
+ withMeta(): this;
78
+ all(): Promise<T[]>;
79
+ count(): Promise<number>;
80
+ first(): Promise<T | undefined>;
81
+ private _resolveIncludes;
82
+ private _enrichMeta;
83
+ }
84
+ //#endregion
85
+ //#region src/cdn/singleton-accessor.d.ts
86
+ declare class CdnSingletonAccessor<T extends Record<string, unknown>> {
87
+ private _source;
88
+ private _locale;
89
+ constructor(source: SingletonDataSource<T>, defaultLocale?: string);
90
+ locale(lang: string): this;
91
+ get(): Promise<T>;
92
+ }
93
+ //#endregion
94
+ //#region src/cdn/dictionary-accessor.d.ts
95
+ declare class CdnDictionaryAccessor {
96
+ private _source;
97
+ private _locale;
98
+ constructor(source: DictionaryDataSource, defaultLocale?: string);
99
+ locale(lang: string): this;
100
+ get(): Promise<Record<string, string>>;
101
+ get(key: string): Promise<string | undefined>;
102
+ get(key: string, params: Record<string, string | number>): Promise<string>;
103
+ }
104
+ //#endregion
105
+ //#region src/cdn/document-query.d.ts
106
+ declare class CdnDocumentQuery<T extends object> {
107
+ private _source;
108
+ private _locale;
109
+ private _filters;
110
+ constructor(source: DocumentDataSource<T>, defaultLocale?: string);
111
+ locale(lang: string): this;
112
+ where(field: string, op: WhereOp, value: unknown): this;
113
+ all(): Promise<T[]>;
114
+ count(): Promise<number>;
115
+ first(): Promise<T | undefined>;
116
+ bySlug(slug: string): Promise<{
117
+ frontmatter: T;
118
+ body: string;
119
+ html: string;
120
+ } | null>;
121
+ }
122
+ //#endregion
123
+ //#region src/cdn/media-accessor.d.ts
124
+ interface MediaAssetMeta {
125
+ width?: number;
126
+ height?: number;
127
+ format?: string;
128
+ size?: number;
129
+ blurhash?: string | null;
130
+ alt?: string | null;
131
+ }
132
+ interface MediaAsset {
133
+ original: string;
134
+ variants: Record<string, string>;
135
+ meta: MediaAssetMeta;
136
+ }
137
+ interface MediaManifest {
138
+ version: string;
139
+ assets: Record<string, MediaAsset>;
140
+ }
141
+ declare class MediaAccessor {
142
+ private _transport;
143
+ private _manifest;
144
+ constructor(transport: HttpTransport);
145
+ manifest(): Promise<MediaManifest>;
146
+ assets(): Promise<Record<string, MediaAsset>>;
147
+ asset(path: string): Promise<MediaAsset | null>;
148
+ list(): Promise<Array<{
149
+ path: string;
150
+ } & MediaAsset>>;
151
+ resolve(asset: MediaAsset, variant?: string): string;
152
+ url(asset: MediaAsset, variant?: string): string;
153
+ }
154
+ //#endregion
155
+ //#region src/cdn/forms-client.d.ts
156
+ interface FormFieldConfig {
157
+ id: string;
158
+ type: string;
159
+ required?: boolean;
160
+ label?: string;
161
+ placeholder?: string;
162
+ options?: Array<{
163
+ value: string;
164
+ label: string;
165
+ }>;
166
+ pattern?: string;
167
+ min?: number;
168
+ max?: number;
169
+ }
170
+ interface FormConfig {
171
+ modelId: string;
172
+ fields: FormFieldConfig[];
173
+ captchaType?: 'turnstile' | null;
174
+ successMessage?: string;
175
+ honeypotField?: string;
176
+ }
177
+ interface FormSubmitResult {
178
+ success: boolean;
179
+ message?: string;
180
+ errors?: Array<{
181
+ field: string;
182
+ message: string;
183
+ }>;
184
+ }
185
+ interface FormsClientConfig {
186
+ baseUrl: string;
187
+ projectId: string;
188
+ apiKey?: string;
189
+ }
190
+ declare class FormsClient {
191
+ private _baseUrl;
192
+ private _projectId;
193
+ private _apiKey;
194
+ constructor(config: FormsClientConfig);
195
+ config(modelId: string): Promise<FormConfig>;
196
+ submit(modelId: string, data: Record<string, unknown>, options?: {
197
+ captchaToken?: string;
198
+ }): Promise<FormSubmitResult>;
199
+ }
200
+ //#endregion
201
+ //#region src/cdn/conversation-client.d.ts
202
+ interface ConversationContext {
203
+ activeModelId?: string | null;
204
+ activeLocale?: string;
205
+ activeEntryId?: string | null;
206
+ panelState?: string;
207
+ activeBranch?: string | null;
208
+ }
209
+ interface ConversationSendOptions {
210
+ conversationId?: string;
211
+ context?: ConversationContext;
212
+ }
213
+ interface ConversationToolResult {
214
+ id: string;
215
+ name: string;
216
+ result: unknown;
217
+ }
218
+ interface ConversationUsage {
219
+ inputTokens: number;
220
+ outputTokens: number;
221
+ }
222
+ interface ConversationResponse {
223
+ conversationId: string;
224
+ message: string;
225
+ toolResults?: ConversationToolResult[];
226
+ usage: ConversationUsage;
227
+ }
228
+ interface ConversationMessage {
229
+ id: string;
230
+ role: 'user' | 'assistant';
231
+ content: string | unknown[];
232
+ toolCalls?: unknown[];
233
+ model?: string;
234
+ usage?: ConversationUsage;
235
+ createdAt: string;
236
+ }
237
+ interface ConversationHistory {
238
+ conversationId: string;
239
+ messages: ConversationMessage[];
240
+ }
241
+ interface ConversationClientConfig {
242
+ baseUrl: string;
243
+ projectId: string;
244
+ apiKey: string;
245
+ }
246
+ declare class ConversationClient {
247
+ private _baseUrl;
248
+ private _projectId;
249
+ private _apiKey;
250
+ constructor(config: ConversationClientConfig);
251
+ send(message: string, options?: ConversationSendOptions): Promise<ConversationResponse>;
252
+ history(conversationId: string, options?: {
253
+ limit?: number;
254
+ }): Promise<ConversationHistory>;
255
+ }
256
+ //#endregion
257
+ //#region src/cdn/errors.d.ts
258
+ declare class ContentrainError extends Error {
259
+ status: number;
260
+ constructor(status: number, message: string);
261
+ }
262
+ //#endregion
263
+ //#region src/cdn/index.d.ts
264
+ interface ContentrainCDNConfig {
265
+ projectId: string;
266
+ apiKey: string;
267
+ baseUrl?: string;
268
+ defaultLocale?: string;
269
+ }
270
+ type ContentrainCDNClient = ReturnType<typeof createContentrain>;
271
+ declare function createContentrain(config: ContentrainCDNConfig): {
272
+ collection: <T extends object = Record<string, unknown>>(modelId: string) => CdnCollectionQuery<T>;
273
+ singleton: <T extends Record<string, unknown> = Record<string, unknown>>(modelId: string) => CdnSingletonAccessor<T>;
274
+ dictionary: (modelId: string) => CdnDictionaryAccessor;
275
+ document: <T extends object = Record<string, unknown>>(modelId: string) => CdnDocumentQuery<T>;
276
+ media: () => MediaAccessor;
277
+ form: () => FormsClient;
278
+ conversation: () => ConversationClient;
279
+ manifest: () => Promise<unknown>;
280
+ models: () => Promise<unknown[]>;
281
+ model: (id: string) => Promise<unknown>;
282
+ };
283
+ //#endregion
284
+ export { applyWhere as A, CdnDocumentQuery as C, EntryMeta as D, CdnCollectionQuery as E, SingletonDataSource as F, CollectionDataSource as M, DictionaryDataSource as N, WhereClause as O, DocumentDataSource as P, MediaManifest as S, CdnSingletonAccessor as T, FormsClient as _, ConversationClient as a, MediaAsset as b, ConversationHistory as c, ConversationSendOptions as d, ConversationToolResult as f, FormSubmitResult as g, FormFieldConfig as h, ContentrainError as i, HttpTransport as j, WhereOp as k, ConversationMessage as l, FormConfig as m, ContentrainCDNConfig as n, ConversationClientConfig as o, ConversationUsage as p, createContentrain as r, ConversationContext as s, ContentrainCDNClient as t, ConversationResponse as u, FormsClientConfig as v, CdnDictionaryAccessor as w, MediaAssetMeta as x, MediaAccessor as y };
285
+ //# sourceMappingURL=index-BChs94uA.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BChs94uA.d.cts","names":[],"sources":["../src/cdn/data-source.ts","../src/cdn/http-transport.ts","../src/shared/where.ts","../src/cdn/collection-query.ts","../src/cdn/singleton-accessor.ts","../src/cdn/dictionary-accessor.ts","../src/cdn/document-query.ts","../src/cdn/media-accessor.ts","../src/cdn/forms-client.ts","../src/cdn/conversation-client.ts","../src/cdn/errors.ts","../src/cdn/index.ts"],"mappings":"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"}
@@ -0,0 +1,285 @@
1
+ //#region src/cdn/data-source.d.ts
2
+ interface CollectionDataSource<T> {
3
+ getAll(locale: string): Promise<T[]>;
4
+ getOne(id: string, locale: string): Promise<T | null>;
5
+ }
6
+ interface SingletonDataSource<T> {
7
+ get(locale: string): Promise<T>;
8
+ }
9
+ interface DictionaryDataSource {
10
+ get(locale: string): Promise<Record<string, string>>;
11
+ }
12
+ interface DocumentDataSource<T> {
13
+ getIndex(locale: string): Promise<T[]>;
14
+ getBySlug(slug: string, locale: string): Promise<{
15
+ frontmatter: T;
16
+ body: string;
17
+ html: string;
18
+ } | null>;
19
+ }
20
+ //#endregion
21
+ //#region src/cdn/http-transport.d.ts
22
+ declare class HttpTransport {
23
+ private _baseUrl;
24
+ private _projectId;
25
+ private _apiKey;
26
+ private _cache;
27
+ constructor(config: {
28
+ baseUrl: string;
29
+ projectId: string;
30
+ apiKey: string;
31
+ });
32
+ buildUrl(path: string): string;
33
+ fetch<T>(path: string): Promise<T>;
34
+ collection<T>(modelId: string): CollectionDataSource<T>;
35
+ singleton<T>(modelId: string): SingletonDataSource<T>;
36
+ dictionary(modelId: string): DictionaryDataSource;
37
+ document<T>(modelId: string): DocumentDataSource<T>;
38
+ }
39
+ //#endregion
40
+ //#region src/shared/where.d.ts
41
+ type WhereOp = 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'contains';
42
+ interface WhereClause {
43
+ field: string;
44
+ op: WhereOp;
45
+ value: unknown;
46
+ }
47
+ declare function applyWhere<T>(item: T, clause: WhereClause): boolean;
48
+ //#endregion
49
+ //#region src/cdn/collection-query.d.ts
50
+ interface EntryMeta {
51
+ status?: string;
52
+ publish_at?: string;
53
+ expire_at?: string;
54
+ updated_by?: string;
55
+ approved_by?: string;
56
+ [key: string]: unknown;
57
+ }
58
+ declare class CdnCollectionQuery<T extends object> {
59
+ private _transport;
60
+ private _source;
61
+ private _modelId;
62
+ private _locale;
63
+ private _filters;
64
+ private _sortField;
65
+ private _sortOrder;
66
+ private _limit;
67
+ private _offset;
68
+ private _includes;
69
+ private _withMeta;
70
+ constructor(transport: HttpTransport, modelId: string, defaultLocale?: string);
71
+ locale(lang: string): this;
72
+ where(field: string, op: WhereOp, value: unknown): this;
73
+ sort(field: string, order?: 'asc' | 'desc'): this;
74
+ limit(n: number): this;
75
+ offset(n: number): this;
76
+ include(...fields: string[]): this;
77
+ withMeta(): this;
78
+ all(): Promise<T[]>;
79
+ count(): Promise<number>;
80
+ first(): Promise<T | undefined>;
81
+ private _resolveIncludes;
82
+ private _enrichMeta;
83
+ }
84
+ //#endregion
85
+ //#region src/cdn/singleton-accessor.d.ts
86
+ declare class CdnSingletonAccessor<T extends Record<string, unknown>> {
87
+ private _source;
88
+ private _locale;
89
+ constructor(source: SingletonDataSource<T>, defaultLocale?: string);
90
+ locale(lang: string): this;
91
+ get(): Promise<T>;
92
+ }
93
+ //#endregion
94
+ //#region src/cdn/dictionary-accessor.d.ts
95
+ declare class CdnDictionaryAccessor {
96
+ private _source;
97
+ private _locale;
98
+ constructor(source: DictionaryDataSource, defaultLocale?: string);
99
+ locale(lang: string): this;
100
+ get(): Promise<Record<string, string>>;
101
+ get(key: string): Promise<string | undefined>;
102
+ get(key: string, params: Record<string, string | number>): Promise<string>;
103
+ }
104
+ //#endregion
105
+ //#region src/cdn/document-query.d.ts
106
+ declare class CdnDocumentQuery<T extends object> {
107
+ private _source;
108
+ private _locale;
109
+ private _filters;
110
+ constructor(source: DocumentDataSource<T>, defaultLocale?: string);
111
+ locale(lang: string): this;
112
+ where(field: string, op: WhereOp, value: unknown): this;
113
+ all(): Promise<T[]>;
114
+ count(): Promise<number>;
115
+ first(): Promise<T | undefined>;
116
+ bySlug(slug: string): Promise<{
117
+ frontmatter: T;
118
+ body: string;
119
+ html: string;
120
+ } | null>;
121
+ }
122
+ //#endregion
123
+ //#region src/cdn/media-accessor.d.ts
124
+ interface MediaAssetMeta {
125
+ width?: number;
126
+ height?: number;
127
+ format?: string;
128
+ size?: number;
129
+ blurhash?: string | null;
130
+ alt?: string | null;
131
+ }
132
+ interface MediaAsset {
133
+ original: string;
134
+ variants: Record<string, string>;
135
+ meta: MediaAssetMeta;
136
+ }
137
+ interface MediaManifest {
138
+ version: string;
139
+ assets: Record<string, MediaAsset>;
140
+ }
141
+ declare class MediaAccessor {
142
+ private _transport;
143
+ private _manifest;
144
+ constructor(transport: HttpTransport);
145
+ manifest(): Promise<MediaManifest>;
146
+ assets(): Promise<Record<string, MediaAsset>>;
147
+ asset(path: string): Promise<MediaAsset | null>;
148
+ list(): Promise<Array<{
149
+ path: string;
150
+ } & MediaAsset>>;
151
+ resolve(asset: MediaAsset, variant?: string): string;
152
+ url(asset: MediaAsset, variant?: string): string;
153
+ }
154
+ //#endregion
155
+ //#region src/cdn/forms-client.d.ts
156
+ interface FormFieldConfig {
157
+ id: string;
158
+ type: string;
159
+ required?: boolean;
160
+ label?: string;
161
+ placeholder?: string;
162
+ options?: Array<{
163
+ value: string;
164
+ label: string;
165
+ }>;
166
+ pattern?: string;
167
+ min?: number;
168
+ max?: number;
169
+ }
170
+ interface FormConfig {
171
+ modelId: string;
172
+ fields: FormFieldConfig[];
173
+ captchaType?: 'turnstile' | null;
174
+ successMessage?: string;
175
+ honeypotField?: string;
176
+ }
177
+ interface FormSubmitResult {
178
+ success: boolean;
179
+ message?: string;
180
+ errors?: Array<{
181
+ field: string;
182
+ message: string;
183
+ }>;
184
+ }
185
+ interface FormsClientConfig {
186
+ baseUrl: string;
187
+ projectId: string;
188
+ apiKey?: string;
189
+ }
190
+ declare class FormsClient {
191
+ private _baseUrl;
192
+ private _projectId;
193
+ private _apiKey;
194
+ constructor(config: FormsClientConfig);
195
+ config(modelId: string): Promise<FormConfig>;
196
+ submit(modelId: string, data: Record<string, unknown>, options?: {
197
+ captchaToken?: string;
198
+ }): Promise<FormSubmitResult>;
199
+ }
200
+ //#endregion
201
+ //#region src/cdn/conversation-client.d.ts
202
+ interface ConversationContext {
203
+ activeModelId?: string | null;
204
+ activeLocale?: string;
205
+ activeEntryId?: string | null;
206
+ panelState?: string;
207
+ activeBranch?: string | null;
208
+ }
209
+ interface ConversationSendOptions {
210
+ conversationId?: string;
211
+ context?: ConversationContext;
212
+ }
213
+ interface ConversationToolResult {
214
+ id: string;
215
+ name: string;
216
+ result: unknown;
217
+ }
218
+ interface ConversationUsage {
219
+ inputTokens: number;
220
+ outputTokens: number;
221
+ }
222
+ interface ConversationResponse {
223
+ conversationId: string;
224
+ message: string;
225
+ toolResults?: ConversationToolResult[];
226
+ usage: ConversationUsage;
227
+ }
228
+ interface ConversationMessage {
229
+ id: string;
230
+ role: 'user' | 'assistant';
231
+ content: string | unknown[];
232
+ toolCalls?: unknown[];
233
+ model?: string;
234
+ usage?: ConversationUsage;
235
+ createdAt: string;
236
+ }
237
+ interface ConversationHistory {
238
+ conversationId: string;
239
+ messages: ConversationMessage[];
240
+ }
241
+ interface ConversationClientConfig {
242
+ baseUrl: string;
243
+ projectId: string;
244
+ apiKey: string;
245
+ }
246
+ declare class ConversationClient {
247
+ private _baseUrl;
248
+ private _projectId;
249
+ private _apiKey;
250
+ constructor(config: ConversationClientConfig);
251
+ send(message: string, options?: ConversationSendOptions): Promise<ConversationResponse>;
252
+ history(conversationId: string, options?: {
253
+ limit?: number;
254
+ }): Promise<ConversationHistory>;
255
+ }
256
+ //#endregion
257
+ //#region src/cdn/errors.d.ts
258
+ declare class ContentrainError extends Error {
259
+ status: number;
260
+ constructor(status: number, message: string);
261
+ }
262
+ //#endregion
263
+ //#region src/cdn/index.d.ts
264
+ interface ContentrainCDNConfig {
265
+ projectId: string;
266
+ apiKey: string;
267
+ baseUrl?: string;
268
+ defaultLocale?: string;
269
+ }
270
+ type ContentrainCDNClient = ReturnType<typeof createContentrain>;
271
+ declare function createContentrain(config: ContentrainCDNConfig): {
272
+ collection: <T extends object = Record<string, unknown>>(modelId: string) => CdnCollectionQuery<T>;
273
+ singleton: <T extends Record<string, unknown> = Record<string, unknown>>(modelId: string) => CdnSingletonAccessor<T>;
274
+ dictionary: (modelId: string) => CdnDictionaryAccessor;
275
+ document: <T extends object = Record<string, unknown>>(modelId: string) => CdnDocumentQuery<T>;
276
+ media: () => MediaAccessor;
277
+ form: () => FormsClient;
278
+ conversation: () => ConversationClient;
279
+ manifest: () => Promise<unknown>;
280
+ models: () => Promise<unknown[]>;
281
+ model: (id: string) => Promise<unknown>;
282
+ };
283
+ //#endregion
284
+ export { applyWhere as A, CdnDocumentQuery as C, EntryMeta as D, CdnCollectionQuery as E, SingletonDataSource as F, CollectionDataSource as M, DictionaryDataSource as N, WhereClause as O, DocumentDataSource as P, MediaManifest as S, CdnSingletonAccessor as T, FormsClient as _, ConversationClient as a, MediaAsset as b, ConversationHistory as c, ConversationSendOptions as d, ConversationToolResult as f, FormSubmitResult as g, FormFieldConfig as h, ContentrainError as i, HttpTransport as j, WhereOp as k, ConversationMessage as l, FormConfig as m, ContentrainCDNConfig as n, ConversationClientConfig as o, ConversationUsage as p, createContentrain as r, ConversationContext as s, ContentrainCDNClient as t, ConversationResponse as u, FormsClientConfig as v, CdnDictionaryAccessor as w, MediaAssetMeta as x, MediaAccessor as y };
285
+ //# sourceMappingURL=index-CsCpovuB.d.mts.map