@contentrain/query 5.1.1 → 5.1.2
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 +110 -8
- package/dist/cdn/index.cjs +4 -1
- package/dist/cdn/index.d.cts +2 -2
- package/dist/cdn/index.d.mts +2 -2
- package/dist/cdn/index.mjs +2 -2
- package/dist/{cdn-C8uXJe3A.cjs → cdn-5ycdk2ET.cjs} +190 -34
- package/dist/{cdn-D66-Npqt.mjs → cdn-SOuikUcY.mjs} +168 -36
- package/dist/cdn-SOuikUcY.mjs.map +1 -0
- package/dist/cli.cjs +1 -1
- package/dist/cli.mjs +1 -1
- package/dist/{generate-CAoJCGIe.mjs → generate-B5P14n43.mjs} +33 -5
- package/dist/generate-B5P14n43.mjs.map +1 -0
- package/dist/{generate-DWu2BzSt.cjs → generate-DAaCl3Np.cjs} +32 -4
- package/dist/generator/generate.cjs +1 -1
- package/dist/generator/generate.mjs +1 -1
- package/dist/index-BChs94uA.d.cts +285 -0
- package/dist/index-BChs94uA.d.cts.map +1 -0
- package/dist/index-CsCpovuB.d.mts +285 -0
- package/dist/index-CsCpovuB.d.mts.map +1 -0
- package/dist/index.cjs +34 -10
- package/dist/index.d.cts +6 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +6 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +31 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/dist/cdn-D66-Npqt.mjs.map +0 -1
- package/dist/generate-CAoJCGIe.mjs.map +0 -1
- package/dist/index-D5zB3y75.d.mts +0 -127
- package/dist/index-D5zB3y75.d.mts.map +0 -1
- package/dist/index-Xjd0isXU.d.cts +0 -127
- package/dist/index-Xjd0isXU.d.cts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CsCpovuB.d.mts","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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"}
|
package/dist/index.cjs
CHANGED
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_cdn = require("./cdn-
|
|
5
|
+
const require_cdn = require("./cdn-5ycdk2ET.cjs");
|
|
6
6
|
//#region src/runtime/query.ts
|
|
7
7
|
var QueryBuilder = class {
|
|
8
8
|
_data;
|
|
@@ -26,11 +26,16 @@ var QueryBuilder = class {
|
|
|
26
26
|
this._locale = lang;
|
|
27
27
|
return this;
|
|
28
28
|
}
|
|
29
|
-
where(field, value) {
|
|
30
|
-
this._filters.push(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
where(field, opOrValue, value) {
|
|
30
|
+
if (value !== void 0) this._filters.push({
|
|
31
|
+
field,
|
|
32
|
+
op: opOrValue,
|
|
33
|
+
value
|
|
34
|
+
});
|
|
35
|
+
else this._filters.push({
|
|
36
|
+
field,
|
|
37
|
+
op: "eq",
|
|
38
|
+
value: opOrValue
|
|
34
39
|
});
|
|
35
40
|
return this;
|
|
36
41
|
}
|
|
@@ -51,9 +56,12 @@ var QueryBuilder = class {
|
|
|
51
56
|
this._includes.push(...fields);
|
|
52
57
|
return this;
|
|
53
58
|
}
|
|
59
|
+
count() {
|
|
60
|
+
return this.all().length;
|
|
61
|
+
}
|
|
54
62
|
all() {
|
|
55
63
|
let items = this._resolveData();
|
|
56
|
-
for (const
|
|
64
|
+
for (const clause of this._filters) items = items.filter((item) => require_cdn.applyWhere(item, clause));
|
|
57
65
|
if (this._sortField) {
|
|
58
66
|
const field = this._sortField;
|
|
59
67
|
const dir = this._sortOrder === "asc" ? 1 : -1;
|
|
@@ -262,8 +270,17 @@ var DocumentQuery = class {
|
|
|
262
270
|
this._locale = lang;
|
|
263
271
|
return this;
|
|
264
272
|
}
|
|
265
|
-
where(field, value) {
|
|
266
|
-
this._filters.push(
|
|
273
|
+
where(field, opOrValue, value) {
|
|
274
|
+
if (value !== void 0) this._filters.push({
|
|
275
|
+
field,
|
|
276
|
+
op: opOrValue,
|
|
277
|
+
value
|
|
278
|
+
});
|
|
279
|
+
else this._filters.push({
|
|
280
|
+
field,
|
|
281
|
+
op: "eq",
|
|
282
|
+
value: opOrValue
|
|
283
|
+
});
|
|
267
284
|
return this;
|
|
268
285
|
}
|
|
269
286
|
include(...fields) {
|
|
@@ -275,9 +292,12 @@ var DocumentQuery = class {
|
|
|
275
292
|
if (item && this._includes.length > 0 && this._resolver) return this._resolveIncludes(item);
|
|
276
293
|
return item;
|
|
277
294
|
}
|
|
295
|
+
count() {
|
|
296
|
+
return this.all().length;
|
|
297
|
+
}
|
|
278
298
|
all() {
|
|
279
299
|
let items = this._resolveData();
|
|
280
|
-
for (const
|
|
300
|
+
for (const clause of this._filters) items = items.filter((item) => require_cdn.applyWhere(item, clause));
|
|
281
301
|
if (this._includes.length > 0 && this._resolver) items = items.map((item) => this._resolveIncludes(item));
|
|
282
302
|
return items;
|
|
283
303
|
}
|
|
@@ -350,10 +370,14 @@ async function createContentrainClient(projectRoot) {
|
|
|
350
370
|
}
|
|
351
371
|
//#endregion
|
|
352
372
|
exports.ContentrainError = require_cdn.ContentrainError;
|
|
373
|
+
exports.ConversationClient = require_cdn.ConversationClient;
|
|
353
374
|
exports.DictionaryAccessor = DictionaryAccessor;
|
|
354
375
|
exports.DocumentQuery = DocumentQuery;
|
|
376
|
+
exports.FormsClient = require_cdn.FormsClient;
|
|
377
|
+
exports.MediaAccessor = require_cdn.MediaAccessor;
|
|
355
378
|
exports.QueryBuilder = QueryBuilder;
|
|
356
379
|
exports.SingletonAccessor = SingletonAccessor;
|
|
380
|
+
exports.applyWhere = require_cdn.applyWhere;
|
|
357
381
|
exports.createContentrain = require_cdn.createContentrain;
|
|
358
382
|
exports.createContentrainClient = createContentrainClient;
|
|
359
383
|
exports.default = createContentrainClient;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as ContentrainError, n as ContentrainCDNConfig, r as createContentrain, t as ContentrainCDNClient } from "./index-
|
|
1
|
+
import { A as applyWhere, D as EntryMeta, O as WhereClause, S as MediaManifest, _ as FormsClient, a as ConversationClient, b as MediaAsset, c as ConversationHistory, g as FormSubmitResult, h as FormFieldConfig, i as ContentrainError, k as WhereOp, l as ConversationMessage, m as FormConfig, n as ContentrainCDNConfig, o as ConversationClientConfig, r as createContentrain, t as ContentrainCDNClient, u as ConversationResponse, v as FormsClientConfig, x as MediaAssetMeta, y as MediaAccessor } from "./index-BChs94uA.cjs";
|
|
2
2
|
import { ContentStatus, ContentrainConfig, FieldDef, FieldType, ModelDefinition, ModelKind } from "@contentrain/types";
|
|
3
3
|
|
|
4
4
|
//#region src/runtime/query.d.ts
|
|
@@ -22,10 +22,12 @@ declare class QueryBuilder<T extends object> {
|
|
|
22
22
|
constructor(data: Map<string, T[]>, relationMeta?: Record<string, RelationMeta>, resolver?: RelationResolver, defaultLocale?: string);
|
|
23
23
|
locale(lang: string): this;
|
|
24
24
|
where<K extends string & keyof T>(field: K, value: T[K]): this;
|
|
25
|
+
where<K extends string & keyof T>(field: K, op: WhereOp, value: unknown): this;
|
|
25
26
|
sort<K extends string & keyof T>(field: K, order?: 'asc' | 'desc'): this;
|
|
26
27
|
limit(n: number): this;
|
|
27
28
|
offset(n: number): this;
|
|
28
29
|
include(...fields: string[]): this;
|
|
30
|
+
count(): number;
|
|
29
31
|
all(): T[];
|
|
30
32
|
first(): T | undefined;
|
|
31
33
|
private _resolveData;
|
|
@@ -77,8 +79,10 @@ declare class DocumentQuery<T extends object> {
|
|
|
77
79
|
constructor(data: Map<string, T[]>, relationMeta?: Record<string, RelationMeta>, resolver?: RelationResolver, defaultLocale?: string);
|
|
78
80
|
locale(lang: string): this;
|
|
79
81
|
where<K extends string & keyof T>(field: K, value: T[K]): this;
|
|
82
|
+
where<K extends string & keyof T>(field: K, op: WhereOp, value: unknown): this;
|
|
80
83
|
include(...fields: string[]): this;
|
|
81
84
|
bySlug(slug: string): T | undefined;
|
|
85
|
+
count(): number;
|
|
82
86
|
all(): T[];
|
|
83
87
|
first(): T | undefined;
|
|
84
88
|
private _resolveData;
|
|
@@ -105,5 +109,5 @@ declare function createContentrainClient(projectRoot?: string): Promise<{
|
|
|
105
109
|
document: (model: string) => DocumentQuery<Record<string, unknown>>;
|
|
106
110
|
}>;
|
|
107
111
|
//#endregion
|
|
108
|
-
export { type ContentStatus, type ContentrainCDNClient, type ContentrainCDNConfig, type ContentrainConfig, ContentrainError, DictionaryAccessor, DocumentQuery, type FieldDef, type FieldType, type ModelDefinition, type ModelKind, QueryBuilder, type RelationMeta, type RelationResolver, SingletonAccessor, createContentrain, createContentrainClient, createContentrainClient as default };
|
|
112
|
+
export { type ContentStatus, type ContentrainCDNClient, type ContentrainCDNConfig, type ContentrainConfig, ContentrainError, ConversationClient, type ConversationClientConfig, type ConversationHistory, type ConversationMessage, type ConversationResponse, DictionaryAccessor, DocumentQuery, type EntryMeta, type FieldDef, type FieldType, type FormConfig, type FormFieldConfig, type FormSubmitResult, FormsClient, type FormsClientConfig, MediaAccessor, type MediaAsset, type MediaAssetMeta, type MediaManifest, type ModelDefinition, type ModelKind, QueryBuilder, type RelationMeta, type RelationResolver, SingletonAccessor, type WhereClause, type WhereOp, applyWhere, createContentrain, createContentrainClient, createContentrainClient as default };
|
|
109
113
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/runtime/query.ts","../src/runtime/singleton.ts","../src/runtime/dictionary.ts","../src/runtime/document.ts","../src/index.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/runtime/query.ts","../src/runtime/singleton.ts","../src/runtime/dictionary.ts","../src/runtime/document.ts","../src/index.ts"],"mappings":";;;;UAKiB,YAAA;EACf,MAAA;EACA,KAAA;AAAA;AAAA,KAGU,gBAAA,IAAoB,KAAA,UAAe,EAAA,UAAY,MAAA,oBAA0B,MAAA;AAAA,cAExE,YAAA;EAAA,QACH,KAAA;EAAA,QACA,OAAA;EAAA,QACA,QAAA;EAAA,QACA,UAAA;EAAA,QACA,UAAA;EAAA,QACA,MAAA;EAAA,QACA,OAAA;EAAA,QACA,SAAA;EAAA,QACA,aAAA;EAAA,QACA,SAAA;EAAA,QACA,cAAA;cAGN,IAAA,EAAM,GAAA,SAAY,CAAA,KAClB,YAAA,GAAe,MAAA,SAAe,YAAA,GAC9B,QAAA,GAAW,gBAAA,EACX,aAAA;EAQF,MAAA,CAAO,IAAA;EAKP,KAAA,0BAA+B,CAAA,CAAA,CAAG,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,CAAE,CAAA;EACrD,KAAA,0BAA+B,CAAA,CAAA,CAAG,KAAA,EAAO,CAAA,EAAG,EAAA,EAAI,OAAA,EAAS,KAAA;EAUzD,IAAA,0BAA8B,CAAA,CAAA,CAAG,KAAA,EAAO,CAAA,EAAG,KAAA;EAM3C,KAAA,CAAM,CAAA;EAKN,MAAA,CAAO,CAAA;EAKP,OAAA,CAAA,GAAW,MAAA;EAKX,KAAA,CAAA;EAIA,GAAA,CAAA,GAAO,CAAA;EAsCP,KAAA,CAAA,GAAS,CAAA;EAAA,QAID,YAAA;EAAA,QAeA,gBAAA;EAAA,QAoCA,UAAA;AAAA;;;cC3KG,iBAAA,WAA4B,MAAA;EAAA,QAC/B,KAAA;EAAA,QACA,OAAA;EAAA,QACA,cAAA;EAAA,QACA,SAAA;EAAA,QACA,aAAA;EAAA,QACA,aAAA;cAGN,IAAA,EAAM,GAAA,SAAY,CAAA,GAClB,aAAA,WACA,YAAA,GAAe,MAAA;IAAiB,MAAA;IAA2B,KAAA;EAAA,IAC3D,YAAA,IAAgB,KAAA,UAAe,EAAA,UAAY,MAAA;EAQ7C,MAAA,CAAO,IAAA;EAKP,OAAA,CAAA,GAAW,MAAA;EAKX,GAAA,CAAA,GAAO,CAAA;EAAA,QA4BC,gBAAA;EAAA,QAuCA,UAAA;AAAA;;;cCjGG,kBAAA;EAAA,QACH,KAAA;EAAA,QACA,OAAA;EAAA,QACA,cAAA;cAEI,IAAA,EAAM,GAAA,SAAY,MAAA,mBAAyB,aAAA;EAKvD,MAAA,CAAO,IAAA;EAKP,GAAA,CAAA,GAAO,MAAA;EACP,GAAA,CAAI,GAAA;EACJ,GAAA,CAAI,GAAA,UAAa,MAAA,EAAQ,MAAA;EAAA,QAUjB,YAAA;AAAA;;;cCvBG,aAAA;EAAA,QACH,KAAA;EAAA,QACA,OAAA;EAAA,QACA,QAAA;EAAA,QACA,SAAA;EAAA,QACA,aAAA;EAAA,QACA,SAAA;EAAA,QACA,cAAA;cAGN,IAAA,EAAM,GAAA,SAAY,CAAA,KAClB,YAAA,GAAe,MAAA,SAAe,YAAA,GAC9B,QAAA,GAAW,gBAAA,EACX,aAAA;EAQF,MAAA,CAAO,IAAA;EAKP,KAAA,0BAA+B,CAAA,CAAA,CAAG,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,CAAE,CAAA;EACrD,KAAA,0BAA+B,CAAA,CAAA,CAAG,KAAA,EAAO,CAAA,EAAG,EAAA,EAAI,OAAA,EAAS,KAAA;EAUzD,OAAA,CAAA,GAAW,MAAA;EAKX,MAAA,CAAO,IAAA,WAAe,CAAA;EAStB,KAAA,CAAA;EAIA,GAAA,CAAA,GAAO,CAAA;EAWP,KAAA,CAAA,GAAS,CAAA;EAAA,QAID,YAAA;EAAA,QAeA,gBAAA;EAAA,QAoCA,UAAA;AAAA;;;;AHnHV;;;;;;;;;;iBIsBsB,uBAAA,CACpB,WAAA,YACC,OAAA;EACD,KAAA,GAAQ,KAAA,aAAkE,YAAA,CAAN,MAAA;EACpE,SAAA,GAAY,KAAA,aAA2E,iBAAA,CAAN,MAAA;EACjF,UAAA,GAAa,KAAA,aADmE,kBAAA;EAEhF,QAAA,GAAW,KAAA,aAAsE,aAAA,CAAN,MAAA;AAAA"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as ContentrainError, n as ContentrainCDNConfig, r as createContentrain, t as ContentrainCDNClient } from "./index-
|
|
1
|
+
import { A as applyWhere, D as EntryMeta, O as WhereClause, S as MediaManifest, _ as FormsClient, a as ConversationClient, b as MediaAsset, c as ConversationHistory, g as FormSubmitResult, h as FormFieldConfig, i as ContentrainError, k as WhereOp, l as ConversationMessage, m as FormConfig, n as ContentrainCDNConfig, o as ConversationClientConfig, r as createContentrain, t as ContentrainCDNClient, u as ConversationResponse, v as FormsClientConfig, x as MediaAssetMeta, y as MediaAccessor } from "./index-CsCpovuB.mjs";
|
|
2
2
|
import { ContentStatus, ContentrainConfig, FieldDef, FieldType, ModelDefinition, ModelKind } from "@contentrain/types";
|
|
3
3
|
|
|
4
4
|
//#region src/runtime/query.d.ts
|
|
@@ -22,10 +22,12 @@ declare class QueryBuilder<T extends object> {
|
|
|
22
22
|
constructor(data: Map<string, T[]>, relationMeta?: Record<string, RelationMeta>, resolver?: RelationResolver, defaultLocale?: string);
|
|
23
23
|
locale(lang: string): this;
|
|
24
24
|
where<K extends string & keyof T>(field: K, value: T[K]): this;
|
|
25
|
+
where<K extends string & keyof T>(field: K, op: WhereOp, value: unknown): this;
|
|
25
26
|
sort<K extends string & keyof T>(field: K, order?: 'asc' | 'desc'): this;
|
|
26
27
|
limit(n: number): this;
|
|
27
28
|
offset(n: number): this;
|
|
28
29
|
include(...fields: string[]): this;
|
|
30
|
+
count(): number;
|
|
29
31
|
all(): T[];
|
|
30
32
|
first(): T | undefined;
|
|
31
33
|
private _resolveData;
|
|
@@ -77,8 +79,10 @@ declare class DocumentQuery<T extends object> {
|
|
|
77
79
|
constructor(data: Map<string, T[]>, relationMeta?: Record<string, RelationMeta>, resolver?: RelationResolver, defaultLocale?: string);
|
|
78
80
|
locale(lang: string): this;
|
|
79
81
|
where<K extends string & keyof T>(field: K, value: T[K]): this;
|
|
82
|
+
where<K extends string & keyof T>(field: K, op: WhereOp, value: unknown): this;
|
|
80
83
|
include(...fields: string[]): this;
|
|
81
84
|
bySlug(slug: string): T | undefined;
|
|
85
|
+
count(): number;
|
|
82
86
|
all(): T[];
|
|
83
87
|
first(): T | undefined;
|
|
84
88
|
private _resolveData;
|
|
@@ -105,5 +109,5 @@ declare function createContentrainClient(projectRoot?: string): Promise<{
|
|
|
105
109
|
document: (model: string) => DocumentQuery<Record<string, unknown>>;
|
|
106
110
|
}>;
|
|
107
111
|
//#endregion
|
|
108
|
-
export { type ContentStatus, type ContentrainCDNClient, type ContentrainCDNConfig, type ContentrainConfig, ContentrainError, DictionaryAccessor, DocumentQuery, type FieldDef, type FieldType, type ModelDefinition, type ModelKind, QueryBuilder, type RelationMeta, type RelationResolver, SingletonAccessor, createContentrain, createContentrainClient, createContentrainClient as default };
|
|
112
|
+
export { type ContentStatus, type ContentrainCDNClient, type ContentrainCDNConfig, type ContentrainConfig, ContentrainError, ConversationClient, type ConversationClientConfig, type ConversationHistory, type ConversationMessage, type ConversationResponse, DictionaryAccessor, DocumentQuery, type EntryMeta, type FieldDef, type FieldType, type FormConfig, type FormFieldConfig, type FormSubmitResult, FormsClient, type FormsClientConfig, MediaAccessor, type MediaAsset, type MediaAssetMeta, type MediaManifest, type ModelDefinition, type ModelKind, QueryBuilder, type RelationMeta, type RelationResolver, SingletonAccessor, type WhereClause, type WhereOp, applyWhere, createContentrain, createContentrainClient, createContentrainClient as default };
|
|
109
113
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/runtime/query.ts","../src/runtime/singleton.ts","../src/runtime/dictionary.ts","../src/runtime/document.ts","../src/index.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/runtime/query.ts","../src/runtime/singleton.ts","../src/runtime/dictionary.ts","../src/runtime/document.ts","../src/index.ts"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { d as applyWhere, i as MediaAccessor, n as ConversationClient, r as FormsClient, t as createContentrain, u as ContentrainError } from "./cdn-SOuikUcY.mjs";
|
|
2
2
|
//#region src/runtime/query.ts
|
|
3
3
|
var QueryBuilder = class {
|
|
4
4
|
_data;
|
|
@@ -22,11 +22,16 @@ var QueryBuilder = class {
|
|
|
22
22
|
this._locale = lang;
|
|
23
23
|
return this;
|
|
24
24
|
}
|
|
25
|
-
where(field, value) {
|
|
26
|
-
this._filters.push(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
where(field, opOrValue, value) {
|
|
26
|
+
if (value !== void 0) this._filters.push({
|
|
27
|
+
field,
|
|
28
|
+
op: opOrValue,
|
|
29
|
+
value
|
|
30
|
+
});
|
|
31
|
+
else this._filters.push({
|
|
32
|
+
field,
|
|
33
|
+
op: "eq",
|
|
34
|
+
value: opOrValue
|
|
30
35
|
});
|
|
31
36
|
return this;
|
|
32
37
|
}
|
|
@@ -47,9 +52,12 @@ var QueryBuilder = class {
|
|
|
47
52
|
this._includes.push(...fields);
|
|
48
53
|
return this;
|
|
49
54
|
}
|
|
55
|
+
count() {
|
|
56
|
+
return this.all().length;
|
|
57
|
+
}
|
|
50
58
|
all() {
|
|
51
59
|
let items = this._resolveData();
|
|
52
|
-
for (const
|
|
60
|
+
for (const clause of this._filters) items = items.filter((item) => applyWhere(item, clause));
|
|
53
61
|
if (this._sortField) {
|
|
54
62
|
const field = this._sortField;
|
|
55
63
|
const dir = this._sortOrder === "asc" ? 1 : -1;
|
|
@@ -258,8 +266,17 @@ var DocumentQuery = class {
|
|
|
258
266
|
this._locale = lang;
|
|
259
267
|
return this;
|
|
260
268
|
}
|
|
261
|
-
where(field, value) {
|
|
262
|
-
this._filters.push(
|
|
269
|
+
where(field, opOrValue, value) {
|
|
270
|
+
if (value !== void 0) this._filters.push({
|
|
271
|
+
field,
|
|
272
|
+
op: opOrValue,
|
|
273
|
+
value
|
|
274
|
+
});
|
|
275
|
+
else this._filters.push({
|
|
276
|
+
field,
|
|
277
|
+
op: "eq",
|
|
278
|
+
value: opOrValue
|
|
279
|
+
});
|
|
263
280
|
return this;
|
|
264
281
|
}
|
|
265
282
|
include(...fields) {
|
|
@@ -271,9 +288,12 @@ var DocumentQuery = class {
|
|
|
271
288
|
if (item && this._includes.length > 0 && this._resolver) return this._resolveIncludes(item);
|
|
272
289
|
return item;
|
|
273
290
|
}
|
|
291
|
+
count() {
|
|
292
|
+
return this.all().length;
|
|
293
|
+
}
|
|
274
294
|
all() {
|
|
275
295
|
let items = this._resolveData();
|
|
276
|
-
for (const
|
|
296
|
+
for (const clause of this._filters) items = items.filter((item) => applyWhere(item, clause));
|
|
277
297
|
if (this._includes.length > 0 && this._resolver) items = items.map((item) => this._resolveIncludes(item));
|
|
278
298
|
return items;
|
|
279
299
|
}
|
|
@@ -345,6 +365,6 @@ async function createContentrainClient(projectRoot) {
|
|
|
345
365
|
return await import(pathToFileURL(resolve(projectRoot ?? process.cwd(), ".contentrain", "client", "index.mjs")).href);
|
|
346
366
|
}
|
|
347
367
|
//#endregion
|
|
348
|
-
export { ContentrainError, DictionaryAccessor, DocumentQuery, QueryBuilder, SingletonAccessor, createContentrain, createContentrainClient, createContentrainClient as default };
|
|
368
|
+
export { ContentrainError, ConversationClient, DictionaryAccessor, DocumentQuery, FormsClient, MediaAccessor, QueryBuilder, SingletonAccessor, applyWhere, createContentrain, createContentrainClient, createContentrainClient as default };
|
|
349
369
|
|
|
350
370
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/runtime/query.ts","../src/runtime/singleton.ts","../src/runtime/dictionary.ts","../src/runtime/document.ts","../src/index.ts"],"sourcesContent":["export interface RelationMeta {\n target: string | string[]\n multi: boolean\n}\n\nexport type RelationResolver = (model: string, id: string, locale: string | null) => Record<string, unknown> | undefined\n\nexport class QueryBuilder<T extends object> {\n private _data: Map<string, T[]>\n private _locale: string | null = null\n private _filters: Array<(item: T) => boolean> = []\n private _sortField: string | null = null\n private _sortOrder: 'asc' | 'desc' = 'asc'\n private _limit: number | null = null\n private _offset = 0\n private _includes: string[] = []\n private _relationMeta: Record<string, RelationMeta>\n private _resolver: RelationResolver | null\n private _defaultLocale: string | null\n\n constructor(\n data: Map<string, T[]>,\n relationMeta?: Record<string, RelationMeta>,\n resolver?: RelationResolver,\n defaultLocale?: string,\n ) {\n this._data = data\n this._relationMeta = relationMeta ?? {}\n this._resolver = resolver ?? null\n this._defaultLocale = defaultLocale ?? null\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n where<K extends string & keyof T>(field: K, value: T[K]): this {\n this._filters.push((item) => {\n const v = item[field]\n if (Array.isArray(v)) return v.includes(value)\n return v === value\n })\n return this\n }\n\n sort<K extends string & keyof T>(field: K, order: 'asc' | 'desc' = 'asc'): this {\n this._sortField = field\n this._sortOrder = order\n return this\n }\n\n limit(n: number): this {\n this._limit = n\n return this\n }\n\n offset(n: number): this {\n this._offset = n\n return this\n }\n\n include(...fields: string[]): this {\n this._includes.push(...fields)\n return this\n }\n\n all(): T[] {\n let items = this._resolveData()\n\n // Filter\n for (const filter of this._filters) {\n items = items.filter(filter)\n }\n\n // Sort\n if (this._sortField) {\n const field = this._sortField\n const dir = this._sortOrder === 'asc' ? 1 : -1\n items.sort((a, b) => {\n const va = (a as Record<string, unknown>)[field]\n const vb = (b as Record<string, unknown>)[field]\n if (va == null && vb == null) return 0\n if (va == null) return dir\n if (vb == null) return -dir\n if (va < vb) return -dir\n if (va > vb) return dir\n return 0\n })\n }\n\n // Pagination\n if (this._offset > 0 || this._limit !== null) {\n const end = this._limit !== null ? this._offset + this._limit : undefined\n items = items.slice(this._offset, end)\n }\n\n // Resolve relations (after pagination for efficiency)\n if (this._includes.length > 0 && this._resolver) {\n items = items.map(item => this._resolveIncludes(item))\n }\n\n return items\n }\n\n first(): T | undefined {\n return this.all()[0]\n }\n\n private _resolveData(): T[] {\n if (this._locale) {\n return [...(this._data.get(this._locale) ?? [])]\n }\n if (this._defaultLocale) {\n const defaultData = this._data.get(this._defaultLocale)\n if (defaultData) return [...defaultData]\n }\n const firstKey = this._data.keys().next().value\n if (firstKey !== undefined) {\n return [...(this._data.get(firstKey) ?? [])]\n }\n return []\n }\n\n private _resolveIncludes(item: T): T {\n const resolved = { ...item }\n const src = item as Record<string, unknown>\n const dst = resolved as Record<string, unknown>\n for (const field of this._includes) {\n const meta = this._relationMeta[field]\n if (!meta) continue\n const targets = Array.isArray(meta.target) ? meta.target : [meta.target]\n\n if (meta.multi) {\n const ids = src[field]\n if (Array.isArray(ids)) {\n dst[field] = ids.map((id) => {\n if (typeof id === 'string') {\n return this._resolveId(targets, id) ?? id\n }\n if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n return this._resolveId([polyObj.model], polyObj.ref) ?? id\n }\n return id\n })\n }\n } else {\n const id = src[field]\n if (typeof id === 'string') {\n dst[field] = this._resolveId(targets, id) ?? id\n } else if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n dst[field] = this._resolveId([polyObj.model], polyObj.ref) ?? id\n }\n }\n }\n return resolved\n }\n\n private _resolveId(targets: string[], id: string): Record<string, unknown> | undefined {\n for (const target of targets) {\n const result = this._resolver!(target, id, this._locale)\n if (result) return result\n }\n return undefined\n }\n}\n","export class SingletonAccessor<T extends Record<string, unknown>> {\n private _data: Map<string, T>\n private _locale: string | null = null\n private _defaultLocale: string | null\n private _includes: string[] = []\n private _relationMeta: Record<string, { target: string | string[]; multi: boolean }> = {}\n private _resolveEntry?: (model: string, id: string, locale: string) => unknown\n\n constructor(\n data: Map<string, T>,\n defaultLocale?: string,\n relationMeta?: Record<string, { target: string | string[]; multi: boolean }>,\n resolveEntry?: (model: string, id: string, locale: string) => unknown,\n ) {\n this._data = data\n this._defaultLocale = defaultLocale ?? null\n if (relationMeta) this._relationMeta = relationMeta\n this._resolveEntry = resolveEntry\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n include(...fields: string[]): this {\n this._includes.push(...fields)\n return this\n }\n\n get(): T {\n if (this._locale) {\n const d = this._data.get(this._locale)\n if (!d) throw new Error(`No data for locale \"${this._locale}\"`)\n if (this._includes.length > 0) return this._resolveIncludes(d, this._locale)\n return d\n }\n\n const locale = this._defaultLocale ?? undefined\n let data: T | undefined\n\n if (locale) {\n data = this._data.get(locale)\n }\n if (!data) {\n const firstKey = this._data.keys().next().value\n if (firstKey !== undefined) {\n data = this._data.get(firstKey)\n }\n }\n if (!data) throw new Error('No data available')\n\n if (this._includes.length > 0) {\n return this._resolveIncludes(data, locale ?? 'en')\n }\n return data\n }\n\n private _resolveIncludes(item: T, locale: string): T {\n if (!this._resolveEntry || this._includes.length === 0) return item\n const resolved = { ...item }\n const src = item as Record<string, unknown>\n const dst = resolved as Record<string, unknown>\n\n for (const field of this._includes) {\n const meta = this._relationMeta[field]\n if (!meta) continue\n const targets = Array.isArray(meta.target) ? meta.target : [meta.target]\n\n if (meta.multi) {\n const ids = src[field]\n if (Array.isArray(ids)) {\n dst[field] = ids.map((id) => {\n if (typeof id === 'string') {\n return this._resolveId(targets, id, locale) ?? id\n }\n if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n return this._resolveId([polyObj.model], polyObj.ref, locale) ?? id\n }\n return id\n })\n }\n } else {\n const id = src[field]\n if (typeof id === 'string') {\n dst[field] = this._resolveId(targets, id, locale) ?? id\n } else if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n dst[field] = this._resolveId([polyObj.model], polyObj.ref, locale) ?? id\n }\n }\n }\n\n return resolved\n }\n\n private _resolveId(targets: string[], id: string, locale: string): unknown {\n if (!this._resolveEntry) return undefined\n for (const model of targets) {\n const result = this._resolveEntry(model, id, locale)\n if (result) return result\n }\n return undefined\n }\n}\n","export class DictionaryAccessor {\n private _data: Map<string, Record<string, string>>\n private _locale: string | null = null\n private _defaultLocale: string | null\n\n constructor(data: Map<string, Record<string, string>>, defaultLocale?: string) {\n this._data = data\n this._defaultLocale = defaultLocale ?? null\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n get(): Record<string, string>\n get(key: string): string | undefined\n get(key: string, params: Record<string, string | number>): string\n get(key?: string, params?: Record<string, string | number>): Record<string, string> | string | undefined {\n const dict = this._resolveData()\n if (key === undefined) return dict\n const value = dict[key]\n if (value === undefined) return undefined\n if (params) return interpolate(value, params)\n return value\n }\n\n private _resolveData(): Record<string, string> {\n if (this._locale) {\n return this._data.get(this._locale) ?? {}\n }\n if (this._defaultLocale) {\n const d = this._data.get(this._defaultLocale)\n if (d) return d\n }\n const firstKey = this._data.keys().next().value\n if (firstKey !== undefined) {\n return this._data.get(firstKey) ?? {}\n }\n return {}\n }\n}\n\nfunction interpolate(template: string, params: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key: string) => {\n const val = params[key]\n return val !== undefined ? String(val) : match\n })\n}\n","import type { RelationMeta, RelationResolver } from './query.js'\n\nexport class DocumentQuery<T extends object> {\n private _data: Map<string, T[]>\n private _locale: string | null = null\n private _filters: Array<(item: T) => boolean> = []\n private _includes: string[] = []\n private _relationMeta: Record<string, RelationMeta>\n private _resolver: RelationResolver | null\n private _defaultLocale: string | null\n\n constructor(\n data: Map<string, T[]>,\n relationMeta?: Record<string, RelationMeta>,\n resolver?: RelationResolver,\n defaultLocale?: string,\n ) {\n this._data = data\n this._relationMeta = relationMeta ?? {}\n this._resolver = resolver ?? null\n this._defaultLocale = defaultLocale ?? null\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n where<K extends string & keyof T>(field: K, value: T[K]): this {\n this._filters.push((item) => item[field] === value)\n return this\n }\n\n include(...fields: string[]): this {\n this._includes.push(...fields)\n return this\n }\n\n bySlug(slug: string): T | undefined {\n const items = this._resolveData()\n const item = items.find(i => (i as Record<string, unknown>)['slug'] === slug)\n if (item && this._includes.length > 0 && this._resolver) {\n return this._resolveIncludes(item)\n }\n return item\n }\n\n all(): T[] {\n let items = this._resolveData()\n for (const filter of this._filters) {\n items = items.filter(filter)\n }\n if (this._includes.length > 0 && this._resolver) {\n items = items.map(item => this._resolveIncludes(item))\n }\n return items\n }\n\n first(): T | undefined {\n return this.all()[0]\n }\n\n private _resolveData(): T[] {\n if (this._locale) {\n return [...(this._data.get(this._locale) ?? [])]\n }\n if (this._defaultLocale) {\n const defaultData = this._data.get(this._defaultLocale)\n if (defaultData) return [...defaultData]\n }\n const firstKey = this._data.keys().next().value\n if (firstKey !== undefined) {\n return [...(this._data.get(firstKey) ?? [])]\n }\n return []\n }\n\n private _resolveIncludes(item: T): T {\n const resolved = { ...item }\n const src = item as Record<string, unknown>\n const dst = resolved as Record<string, unknown>\n for (const field of this._includes) {\n const meta = this._relationMeta[field]\n if (!meta) continue\n const targets = Array.isArray(meta.target) ? meta.target : [meta.target]\n\n if (meta.multi) {\n const ids = src[field]\n if (Array.isArray(ids)) {\n dst[field] = ids.map((id) => {\n if (typeof id === 'string') {\n return this._resolveId(targets, id) ?? id\n }\n if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n return this._resolveId([polyObj.model], polyObj.ref) ?? id\n }\n return id\n })\n }\n } else {\n const id = src[field]\n if (typeof id === 'string') {\n dst[field] = this._resolveId(targets, id) ?? id\n } else if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n dst[field] = this._resolveId([polyObj.model], polyObj.ref) ?? id\n }\n }\n }\n return resolved\n }\n\n private _resolveId(targets: string[], id: string): Record<string, unknown> | undefined {\n for (const target of targets) {\n const result = this._resolver!(target, id, this._locale)\n if (result) return result\n }\n return undefined\n }\n}\n","// Runtime exports — used by framework SDK authors and generated client\nexport { QueryBuilder } from './runtime/query.js'\nexport type { RelationMeta, RelationResolver } from './runtime/query.js'\nexport { SingletonAccessor } from './runtime/singleton.js'\nexport { DictionaryAccessor } from './runtime/dictionary.js'\nexport { DocumentQuery } from './runtime/document.js'\n\n// Re-export types from @contentrain/types that SDK consumers need\nexport type {\n FieldType,\n ModelKind,\n ContentStatus,\n FieldDef,\n ModelDefinition,\n ContentrainConfig,\n} from '@contentrain/types'\n\n/**\n * Factory for framework SDK authors.\n * Returns the generated client module loaded from .contentrain/client/.\n *\n * Usage (Nuxt composable):\n * ```ts\n * import { createContentrainClient } from '@contentrain/query'\n * const client = createContentrainClient()\n * const posts = client.query('blog-post').locale('en').all()\n * ```\n */\nexport async function createContentrainClient(\n projectRoot?: string,\n): Promise<{\n query: (model: string) => import('./runtime/query.js').QueryBuilder<Record<string, unknown>>\n singleton: (model: string) => import('./runtime/singleton.js').SingletonAccessor<Record<string, unknown>>\n dictionary: (model: string) => import('./runtime/dictionary.js').DictionaryAccessor\n document: (model: string) => import('./runtime/document.js').DocumentQuery<Record<string, unknown>>\n}> {\n const { resolve } = await import('node:path')\n const { pathToFileURL } = await import('node:url')\n const root = projectRoot ?? process.cwd()\n const clientPath = resolve(root, '.contentrain', 'client', 'index.mjs')\n const client = await import(pathToFileURL(clientPath).href)\n return client\n}\n\n// CDN client factory — async, HTTP-based\nexport { createContentrain } from './cdn/index.js'\nexport type { ContentrainCDNConfig, ContentrainCDNClient } from './cdn/index.js'\nexport { ContentrainError } from './cdn/errors.js'\n\n// Sync factory for CJS — requires generated client to be pre-loaded\nexport { createContentrainClient as default }\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/runtime/query.ts","../src/runtime/singleton.ts","../src/runtime/dictionary.ts","../src/runtime/document.ts","../src/index.ts"],"sourcesContent":["import type { WhereOp, WhereClause } from '../shared/where.js'\nimport { applyWhere } from '../shared/where.js'\n\nexport type { WhereOp }\n\nexport interface RelationMeta {\n target: string | string[]\n multi: boolean\n}\n\nexport type RelationResolver = (model: string, id: string, locale: string | null) => Record<string, unknown> | undefined\n\nexport class QueryBuilder<T extends object> {\n private _data: Map<string, T[]>\n private _locale: string | null = null\n private _filters: WhereClause[] = []\n private _sortField: string | null = null\n private _sortOrder: 'asc' | 'desc' = 'asc'\n private _limit: number | null = null\n private _offset = 0\n private _includes: string[] = []\n private _relationMeta: Record<string, RelationMeta>\n private _resolver: RelationResolver | null\n private _defaultLocale: string | null\n\n constructor(\n data: Map<string, T[]>,\n relationMeta?: Record<string, RelationMeta>,\n resolver?: RelationResolver,\n defaultLocale?: string,\n ) {\n this._data = data\n this._relationMeta = relationMeta ?? {}\n this._resolver = resolver ?? null\n this._defaultLocale = defaultLocale ?? null\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n where<K extends string & keyof T>(field: K, value: T[K]): this\n where<K extends string & keyof T>(field: K, op: WhereOp, value: unknown): this\n where<K extends string & keyof T>(field: K, opOrValue: WhereOp | T[K], value?: unknown): this {\n if (value !== undefined) {\n this._filters.push({ field, op: opOrValue as WhereOp, value })\n } else {\n this._filters.push({ field, op: 'eq', value: opOrValue })\n }\n return this\n }\n\n sort<K extends string & keyof T>(field: K, order: 'asc' | 'desc' = 'asc'): this {\n this._sortField = field\n this._sortOrder = order\n return this\n }\n\n limit(n: number): this {\n this._limit = n\n return this\n }\n\n offset(n: number): this {\n this._offset = n\n return this\n }\n\n include(...fields: string[]): this {\n this._includes.push(...fields)\n return this\n }\n\n count(): number {\n return this.all().length\n }\n\n all(): T[] {\n let items = this._resolveData()\n\n // Filter\n for (const clause of this._filters) {\n items = items.filter(item => applyWhere(item, clause))\n }\n\n // Sort\n if (this._sortField) {\n const field = this._sortField\n const dir = this._sortOrder === 'asc' ? 1 : -1\n items.sort((a, b) => {\n const va = (a as Record<string, unknown>)[field]\n const vb = (b as Record<string, unknown>)[field]\n if (va == null && vb == null) return 0\n if (va == null) return dir\n if (vb == null) return -dir\n if (va < vb) return -dir\n if (va > vb) return dir\n return 0\n })\n }\n\n // Pagination\n if (this._offset > 0 || this._limit !== null) {\n const end = this._limit !== null ? this._offset + this._limit : undefined\n items = items.slice(this._offset, end)\n }\n\n // Resolve relations (after pagination for efficiency)\n if (this._includes.length > 0 && this._resolver) {\n items = items.map(item => this._resolveIncludes(item))\n }\n\n return items\n }\n\n first(): T | undefined {\n return this.all()[0]\n }\n\n private _resolveData(): T[] {\n if (this._locale) {\n return [...(this._data.get(this._locale) ?? [])]\n }\n if (this._defaultLocale) {\n const defaultData = this._data.get(this._defaultLocale)\n if (defaultData) return [...defaultData]\n }\n const firstKey = this._data.keys().next().value\n if (firstKey !== undefined) {\n return [...(this._data.get(firstKey) ?? [])]\n }\n return []\n }\n\n private _resolveIncludes(item: T): T {\n const resolved = { ...item }\n const src = item as Record<string, unknown>\n const dst = resolved as Record<string, unknown>\n for (const field of this._includes) {\n const meta = this._relationMeta[field]\n if (!meta) continue\n const targets = Array.isArray(meta.target) ? meta.target : [meta.target]\n\n if (meta.multi) {\n const ids = src[field]\n if (Array.isArray(ids)) {\n dst[field] = ids.map((id) => {\n if (typeof id === 'string') {\n return this._resolveId(targets, id) ?? id\n }\n if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n return this._resolveId([polyObj.model], polyObj.ref) ?? id\n }\n return id\n })\n }\n } else {\n const id = src[field]\n if (typeof id === 'string') {\n dst[field] = this._resolveId(targets, id) ?? id\n } else if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n dst[field] = this._resolveId([polyObj.model], polyObj.ref) ?? id\n }\n }\n }\n return resolved\n }\n\n private _resolveId(targets: string[], id: string): Record<string, unknown> | undefined {\n for (const target of targets) {\n const result = this._resolver!(target, id, this._locale)\n if (result) return result\n }\n return undefined\n }\n}\n","export class SingletonAccessor<T extends Record<string, unknown>> {\n private _data: Map<string, T>\n private _locale: string | null = null\n private _defaultLocale: string | null\n private _includes: string[] = []\n private _relationMeta: Record<string, { target: string | string[]; multi: boolean }> = {}\n private _resolveEntry?: (model: string, id: string, locale: string) => unknown\n\n constructor(\n data: Map<string, T>,\n defaultLocale?: string,\n relationMeta?: Record<string, { target: string | string[]; multi: boolean }>,\n resolveEntry?: (model: string, id: string, locale: string) => unknown,\n ) {\n this._data = data\n this._defaultLocale = defaultLocale ?? null\n if (relationMeta) this._relationMeta = relationMeta\n this._resolveEntry = resolveEntry\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n include(...fields: string[]): this {\n this._includes.push(...fields)\n return this\n }\n\n get(): T {\n if (this._locale) {\n const d = this._data.get(this._locale)\n if (!d) throw new Error(`No data for locale \"${this._locale}\"`)\n if (this._includes.length > 0) return this._resolveIncludes(d, this._locale)\n return d\n }\n\n const locale = this._defaultLocale ?? undefined\n let data: T | undefined\n\n if (locale) {\n data = this._data.get(locale)\n }\n if (!data) {\n const firstKey = this._data.keys().next().value\n if (firstKey !== undefined) {\n data = this._data.get(firstKey)\n }\n }\n if (!data) throw new Error('No data available')\n\n if (this._includes.length > 0) {\n return this._resolveIncludes(data, locale ?? 'en')\n }\n return data\n }\n\n private _resolveIncludes(item: T, locale: string): T {\n if (!this._resolveEntry || this._includes.length === 0) return item\n const resolved = { ...item }\n const src = item as Record<string, unknown>\n const dst = resolved as Record<string, unknown>\n\n for (const field of this._includes) {\n const meta = this._relationMeta[field]\n if (!meta) continue\n const targets = Array.isArray(meta.target) ? meta.target : [meta.target]\n\n if (meta.multi) {\n const ids = src[field]\n if (Array.isArray(ids)) {\n dst[field] = ids.map((id) => {\n if (typeof id === 'string') {\n return this._resolveId(targets, id, locale) ?? id\n }\n if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n return this._resolveId([polyObj.model], polyObj.ref, locale) ?? id\n }\n return id\n })\n }\n } else {\n const id = src[field]\n if (typeof id === 'string') {\n dst[field] = this._resolveId(targets, id, locale) ?? id\n } else if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n dst[field] = this._resolveId([polyObj.model], polyObj.ref, locale) ?? id\n }\n }\n }\n\n return resolved\n }\n\n private _resolveId(targets: string[], id: string, locale: string): unknown {\n if (!this._resolveEntry) return undefined\n for (const model of targets) {\n const result = this._resolveEntry(model, id, locale)\n if (result) return result\n }\n return undefined\n }\n}\n","export class DictionaryAccessor {\n private _data: Map<string, Record<string, string>>\n private _locale: string | null = null\n private _defaultLocale: string | null\n\n constructor(data: Map<string, Record<string, string>>, defaultLocale?: string) {\n this._data = data\n this._defaultLocale = defaultLocale ?? null\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n get(): Record<string, string>\n get(key: string): string | undefined\n get(key: string, params: Record<string, string | number>): string\n get(key?: string, params?: Record<string, string | number>): Record<string, string> | string | undefined {\n const dict = this._resolveData()\n if (key === undefined) return dict\n const value = dict[key]\n if (value === undefined) return undefined\n if (params) return interpolate(value, params)\n return value\n }\n\n private _resolveData(): Record<string, string> {\n if (this._locale) {\n return this._data.get(this._locale) ?? {}\n }\n if (this._defaultLocale) {\n const d = this._data.get(this._defaultLocale)\n if (d) return d\n }\n const firstKey = this._data.keys().next().value\n if (firstKey !== undefined) {\n return this._data.get(firstKey) ?? {}\n }\n return {}\n }\n}\n\nfunction interpolate(template: string, params: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key: string) => {\n const val = params[key]\n return val !== undefined ? String(val) : match\n })\n}\n","import type { RelationMeta, RelationResolver } from './query.js'\nimport type { WhereOp, WhereClause } from '../shared/where.js'\nimport { applyWhere } from '../shared/where.js'\n\nexport class DocumentQuery<T extends object> {\n private _data: Map<string, T[]>\n private _locale: string | null = null\n private _filters: WhereClause[] = []\n private _includes: string[] = []\n private _relationMeta: Record<string, RelationMeta>\n private _resolver: RelationResolver | null\n private _defaultLocale: string | null\n\n constructor(\n data: Map<string, T[]>,\n relationMeta?: Record<string, RelationMeta>,\n resolver?: RelationResolver,\n defaultLocale?: string,\n ) {\n this._data = data\n this._relationMeta = relationMeta ?? {}\n this._resolver = resolver ?? null\n this._defaultLocale = defaultLocale ?? null\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n where<K extends string & keyof T>(field: K, value: T[K]): this\n where<K extends string & keyof T>(field: K, op: WhereOp, value: unknown): this\n where<K extends string & keyof T>(field: K, opOrValue: WhereOp | T[K], value?: unknown): this {\n if (value !== undefined) {\n this._filters.push({ field, op: opOrValue as WhereOp, value })\n } else {\n this._filters.push({ field, op: 'eq', value: opOrValue })\n }\n return this\n }\n\n include(...fields: string[]): this {\n this._includes.push(...fields)\n return this\n }\n\n bySlug(slug: string): T | undefined {\n const items = this._resolveData()\n const item = items.find(i => (i as Record<string, unknown>)['slug'] === slug)\n if (item && this._includes.length > 0 && this._resolver) {\n return this._resolveIncludes(item)\n }\n return item\n }\n\n count(): number {\n return this.all().length\n }\n\n all(): T[] {\n let items = this._resolveData()\n for (const clause of this._filters) {\n items = items.filter(item => applyWhere(item, clause))\n }\n if (this._includes.length > 0 && this._resolver) {\n items = items.map(item => this._resolveIncludes(item))\n }\n return items\n }\n\n first(): T | undefined {\n return this.all()[0]\n }\n\n private _resolveData(): T[] {\n if (this._locale) {\n return [...(this._data.get(this._locale) ?? [])]\n }\n if (this._defaultLocale) {\n const defaultData = this._data.get(this._defaultLocale)\n if (defaultData) return [...defaultData]\n }\n const firstKey = this._data.keys().next().value\n if (firstKey !== undefined) {\n return [...(this._data.get(firstKey) ?? [])]\n }\n return []\n }\n\n private _resolveIncludes(item: T): T {\n const resolved = { ...item }\n const src = item as Record<string, unknown>\n const dst = resolved as Record<string, unknown>\n for (const field of this._includes) {\n const meta = this._relationMeta[field]\n if (!meta) continue\n const targets = Array.isArray(meta.target) ? meta.target : [meta.target]\n\n if (meta.multi) {\n const ids = src[field]\n if (Array.isArray(ids)) {\n dst[field] = ids.map((id) => {\n if (typeof id === 'string') {\n return this._resolveId(targets, id) ?? id\n }\n if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n return this._resolveId([polyObj.model], polyObj.ref) ?? id\n }\n return id\n })\n }\n } else {\n const id = src[field]\n if (typeof id === 'string') {\n dst[field] = this._resolveId(targets, id) ?? id\n } else if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n dst[field] = this._resolveId([polyObj.model], polyObj.ref) ?? id\n }\n }\n }\n return resolved\n }\n\n private _resolveId(targets: string[], id: string): Record<string, unknown> | undefined {\n for (const target of targets) {\n const result = this._resolver!(target, id, this._locale)\n if (result) return result\n }\n return undefined\n }\n}\n","// Runtime exports — used by framework SDK authors and generated client\nexport { QueryBuilder } from './runtime/query.js'\nexport type { RelationMeta, RelationResolver, WhereOp } from './runtime/query.js'\nexport { SingletonAccessor } from './runtime/singleton.js'\nexport { DictionaryAccessor } from './runtime/dictionary.js'\nexport { DocumentQuery } from './runtime/document.js'\n\n// Shared utilities\nexport type { WhereClause } from './shared/where.js'\nexport { applyWhere } from './shared/where.js'\n\n// Re-export types from @contentrain/types that SDK consumers need\nexport type {\n FieldType,\n ModelKind,\n ContentStatus,\n FieldDef,\n ModelDefinition,\n ContentrainConfig,\n} from '@contentrain/types'\n\n/**\n * Factory for framework SDK authors.\n * Returns the generated client module loaded from .contentrain/client/.\n *\n * Usage (Nuxt composable):\n * ```ts\n * import { createContentrainClient } from '@contentrain/query'\n * const client = createContentrainClient()\n * const posts = client.query('blog-post').locale('en').all()\n * ```\n */\nexport async function createContentrainClient(\n projectRoot?: string,\n): Promise<{\n query: (model: string) => import('./runtime/query.js').QueryBuilder<Record<string, unknown>>\n singleton: (model: string) => import('./runtime/singleton.js').SingletonAccessor<Record<string, unknown>>\n dictionary: (model: string) => import('./runtime/dictionary.js').DictionaryAccessor\n document: (model: string) => import('./runtime/document.js').DocumentQuery<Record<string, unknown>>\n}> {\n const { resolve } = await import('node:path')\n const { pathToFileURL } = await import('node:url')\n const root = projectRoot ?? process.cwd()\n const clientPath = resolve(root, '.contentrain', 'client', 'index.mjs')\n const client = await import(pathToFileURL(clientPath).href)\n return client\n}\n\n// CDN client factory — async, HTTP-based\nexport { createContentrain } from './cdn/index.js'\nexport type { ContentrainCDNConfig, ContentrainCDNClient } from './cdn/index.js'\nexport { ContentrainError } from './cdn/errors.js'\n\n// CDN module re-exports — media, forms, metadata\nexport { MediaAccessor } from './cdn/media-accessor.js'\nexport type { MediaAsset, MediaAssetMeta, MediaManifest } from './cdn/media-accessor.js'\nexport { FormsClient } from './cdn/forms-client.js'\nexport type { FormConfig, FormFieldConfig, FormSubmitResult, FormsClientConfig } from './cdn/forms-client.js'\nexport type { EntryMeta } from './cdn/collection-query.js'\nexport { ConversationClient } from './cdn/conversation-client.js'\nexport type {\n ConversationClientConfig,\n ConversationResponse,\n ConversationMessage,\n ConversationHistory,\n} from './cdn/conversation-client.js'\n\n// Sync factory for CJS — requires generated client to be pre-loaded\nexport { createContentrainClient as default }\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contentrain/query",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Optional type-safe query SDK for Contentrain — generated TypeScript client for platform-independent JSON content",
|
|
6
6
|
"type": "module",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"url": "git+https://github.com/Contentrain/ai.git",
|
|
10
10
|
"directory": "packages/sdk/js"
|
|
11
11
|
},
|
|
12
|
-
"homepage": "https://
|
|
12
|
+
"homepage": "https://ai.contentrain.io/packages/sdk",
|
|
13
13
|
"bugs": {
|
|
14
14
|
"url": "https://github.com/Contentrain/ai/issues"
|
|
15
15
|
},
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"dist"
|
|
63
63
|
],
|
|
64
64
|
"dependencies": {
|
|
65
|
-
"@contentrain/types": "0.
|
|
65
|
+
"@contentrain/types": "0.4.0"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@types/node": "^22.0.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cdn-D66-Npqt.mjs","names":["applyWhere"],"sources":["../src/cdn/errors.ts","../src/cdn/http-transport.ts","../src/cdn/collection-query.ts","../src/cdn/singleton-accessor.ts","../src/cdn/dictionary-accessor.ts","../src/cdn/document-query.ts","../src/cdn/index.ts"],"sourcesContent":["export class ContentrainError extends Error {\n constructor(\n public status: number,\n message: string,\n ) {\n super(message)\n this.name = 'ContentrainError'\n }\n}\n","import { ContentrainError } from './errors.js'\nimport type { CollectionDataSource, SingletonDataSource, DictionaryDataSource, DocumentDataSource } from './data-source.js'\n\ninterface CacheEntry {\n data: unknown\n etag: string\n}\n\nexport class HttpTransport {\n private _baseUrl: string\n private _projectId: string\n private _apiKey: string\n private _cache = new Map<string, CacheEntry>()\n\n constructor(config: { baseUrl: string; projectId: string; apiKey: string }) {\n this._baseUrl = config.baseUrl.replace(/\\/+$/, '')\n this._projectId = config.projectId\n this._apiKey = config.apiKey\n }\n\n async fetch<T>(path: string): Promise<T> {\n const url = `${this._baseUrl}/${this._projectId}/${path}`\n const cached = this._cache.get(path)\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${this._apiKey}`,\n }\n if (cached?.etag) {\n headers['If-None-Match'] = cached.etag\n }\n\n const res = await globalThis.fetch(url, { headers })\n\n if (res.status === 304 && cached) return cached.data as T\n if (!res.ok) throw new ContentrainError(res.status, await res.text())\n\n const data = (await res.json()) as T\n const etag = res.headers.get('etag') ?? ''\n if (etag) {\n this._cache.set(path, { data, etag })\n }\n return data\n }\n\n collection<T>(modelId: string): CollectionDataSource<T> {\n return {\n getAll: async (locale) => {\n const map = await this.fetch<Record<string, T>>(`content/${modelId}/${locale}.json`)\n return Object.entries(map).map(([id, entry]) => Object.assign({ id }, entry as object) as T)\n },\n getOne: async (id, locale) => {\n const map = await this.fetch<Record<string, T>>(`content/${modelId}/${locale}.json`)\n const entry = map[id]\n return entry ? { id, ...entry as object } as T : null\n },\n }\n }\n\n singleton<T>(modelId: string): SingletonDataSource<T> {\n return {\n get: (locale) => this.fetch<T>(`content/${modelId}/${locale}.json`),\n }\n }\n\n dictionary(modelId: string): DictionaryDataSource {\n return {\n get: (locale) => this.fetch<Record<string, string>>(`content/${modelId}/${locale}.json`),\n }\n }\n\n document<T>(modelId: string): DocumentDataSource<T> {\n return {\n getIndex: (locale) => this.fetch<T[]>(`documents/${modelId}/_index/${locale}.json`),\n getBySlug: (slug, locale) => this.fetch(`documents/${modelId}/${slug}/${locale}.json`),\n }\n }\n}\n","import type { CollectionDataSource } from './data-source.js'\nimport type { HttpTransport } from './http-transport.js'\n\ntype WhereOp = 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'contains'\n\ninterface WhereClause {\n field: string\n op: WhereOp\n value: unknown\n}\n\nexport class CdnCollectionQuery<T extends object> {\n private _transport: HttpTransport\n private _source: CollectionDataSource<T>\n private _modelId: string\n private _locale: string = 'en'\n private _filters: WhereClause[] = []\n private _sortField: string | null = null\n private _sortOrder: 'asc' | 'desc' = 'asc'\n private _limit: number | null = null\n private _offset = 0\n private _includes: string[] = []\n\n constructor(transport: HttpTransport, modelId: string, defaultLocale?: string) {\n this._transport = transport\n this._source = transport.collection<T>(modelId)\n this._modelId = modelId\n if (defaultLocale) this._locale = defaultLocale\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n where(field: string, op: WhereOp, value: unknown): this {\n this._filters.push({ field, op, value })\n return this\n }\n\n sort(field: string, order: 'asc' | 'desc' = 'asc'): this {\n this._sortField = field\n this._sortOrder = order\n return this\n }\n\n limit(n: number): this {\n this._limit = n\n return this\n }\n\n offset(n: number): this {\n this._offset = n\n return this\n }\n\n include(...fields: string[]): this {\n this._includes.push(...fields)\n return this\n }\n\n async all(): Promise<T[]> {\n let items = await this._source.getAll(this._locale)\n\n // Filter\n for (const clause of this._filters) {\n items = items.filter(item => applyWhere(item, clause))\n }\n\n // Sort\n if (this._sortField) {\n const field = this._sortField\n const dir = this._sortOrder === 'asc' ? 1 : -1\n items = items.toSorted((a, b) => {\n const va = (a as Record<string, unknown>)[field]\n const vb = (b as Record<string, unknown>)[field]\n if (va == null && vb == null) return 0\n if (va == null) return dir\n if (vb == null) return -dir\n if (va < vb) return -dir\n if (va > vb) return dir\n return 0\n })\n }\n\n // Pagination\n if (this._offset > 0 || this._limit !== null) {\n const end = this._limit !== null ? this._offset + this._limit : undefined\n items = items.slice(this._offset, end)\n }\n\n // Resolve relations\n if (this._includes.length > 0) {\n items = await this._resolveIncludes(items)\n }\n\n return items\n }\n\n async first(): Promise<T | undefined> {\n const items = await this.all()\n return items[0]\n }\n\n private async _resolveIncludes(items: T[]): Promise<T[]> {\n // Prefetch related collections to avoid N+1\n const cache = new Map<string, Map<string, Record<string, unknown>>>()\n\n for (const field of this._includes) {\n // Collect all IDs for this field\n for (const item of items) {\n const val = (item as Record<string, unknown>)[field]\n const ids = Array.isArray(val) ? val : val ? [val] : []\n for (const id of ids) {\n if (typeof id !== 'string') continue\n // We don't know the target model from here, so we use field name as hint\n // In production, model metadata would provide this mapping\n if (!cache.has(field)) {\n try {\n const related = await this._transport.fetch<Record<string, unknown>>(`content/${field}/${this._locale}.json`)\n const map = new Map<string, Record<string, unknown>>()\n for (const [entryId, entry] of Object.entries(related)) {\n map.set(entryId, { id: entryId, ...entry as object })\n }\n cache.set(field, map)\n } catch {\n cache.set(field, new Map())\n }\n break\n }\n }\n }\n }\n\n return items.map(item => {\n const resolved = { ...item }\n const dst = resolved as Record<string, unknown>\n for (const field of this._includes) {\n const related = cache.get(field)\n if (!related) continue\n const val = (item as Record<string, unknown>)[field]\n if (Array.isArray(val)) {\n dst[field] = val.map(id => typeof id === 'string' ? (related.get(id) ?? id) : id)\n } else if (typeof val === 'string') {\n dst[field] = related.get(val) ?? val\n }\n }\n return resolved\n })\n }\n}\n\nfunction applyWhere<T>(item: T, clause: WhereClause): boolean {\n const val = (item as Record<string, unknown>)[clause.field]\n switch (clause.op) {\n case 'eq': return val === clause.value\n case 'ne': return val !== clause.value\n case 'gt': return (val as number) > (clause.value as number)\n case 'gte': return (val as number) >= (clause.value as number)\n case 'lt': return (val as number) < (clause.value as number)\n case 'lte': return (val as number) <= (clause.value as number)\n case 'in': return Array.isArray(clause.value) && (clause.value as unknown[]).includes(val)\n case 'contains': {\n if (typeof val === 'string') return val.includes(clause.value as string)\n if (Array.isArray(val)) return val.includes(clause.value)\n return false\n }\n default: return true\n }\n}\n","import type { SingletonDataSource } from './data-source.js'\n\nexport class CdnSingletonAccessor<T extends Record<string, unknown>> {\n private _source: SingletonDataSource<T>\n private _locale: string = 'en'\n\n constructor(source: SingletonDataSource<T>, defaultLocale?: string) {\n this._source = source\n if (defaultLocale) this._locale = defaultLocale\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n async get(): Promise<T> {\n return this._source.get(this._locale)\n }\n}\n","import type { DictionaryDataSource } from './data-source.js'\n\nexport class CdnDictionaryAccessor {\n private _source: DictionaryDataSource\n private _locale: string = 'en'\n\n constructor(source: DictionaryDataSource, defaultLocale?: string) {\n this._source = source\n if (defaultLocale) this._locale = defaultLocale\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n async get(): Promise<Record<string, string>>\n async get(key: string): Promise<string | undefined>\n async get(key: string, params: Record<string, string | number>): Promise<string>\n async get(key?: string, params?: Record<string, string | number>): Promise<Record<string, string> | string | undefined> {\n const dict = await this._source.get(this._locale)\n if (key === undefined) return dict\n const value = dict[key]\n if (value === undefined) return undefined\n if (params) return interpolate(value, params)\n return value\n }\n}\n\nfunction interpolate(template: string, params: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key: string) => {\n const val = params[key]\n return val !== undefined ? String(val) : match\n })\n}\n","import type { DocumentDataSource } from './data-source.js'\n\ntype WhereOp = 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'contains'\n\ninterface WhereClause {\n field: string\n op: WhereOp\n value: unknown\n}\n\nexport class CdnDocumentQuery<T extends object> {\n private _source: DocumentDataSource<T>\n private _locale: string = 'en'\n private _filters: WhereClause[] = []\n\n constructor(source: DocumentDataSource<T>, defaultLocale?: string) {\n this._source = source\n if (defaultLocale) this._locale = defaultLocale\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n where(field: string, op: WhereOp, value: unknown): this {\n this._filters.push({ field, op, value })\n return this\n }\n\n async all(): Promise<T[]> {\n let items = await this._source.getIndex(this._locale)\n\n for (const clause of this._filters) {\n items = items.filter(item => applyWhere(item, clause))\n }\n\n return items\n }\n\n async first(): Promise<T | undefined> {\n const items = await this.all()\n return items[0]\n }\n\n async bySlug(slug: string): Promise<{ frontmatter: T; body: string; html: string } | null> {\n return this._source.getBySlug(slug, this._locale)\n }\n}\n\nfunction applyWhere<T>(item: T, clause: WhereClause): boolean {\n const val = (item as Record<string, unknown>)[clause.field]\n switch (clause.op) {\n case 'eq': return val === clause.value\n case 'ne': return val !== clause.value\n case 'gt': return (val as number) > (clause.value as number)\n case 'gte': return (val as number) >= (clause.value as number)\n case 'lt': return (val as number) < (clause.value as number)\n case 'lte': return (val as number) <= (clause.value as number)\n case 'in': return Array.isArray(clause.value) && (clause.value as unknown[]).includes(val)\n case 'contains': {\n if (typeof val === 'string') return val.includes(clause.value as string)\n if (Array.isArray(val)) return val.includes(clause.value)\n return false\n }\n default: return true\n }\n}\n","import { HttpTransport } from './http-transport.js'\nimport { CdnCollectionQuery } from './collection-query.js'\nimport { CdnSingletonAccessor } from './singleton-accessor.js'\nimport { CdnDictionaryAccessor } from './dictionary-accessor.js'\nimport { CdnDocumentQuery } from './document-query.js'\n\nexport interface ContentrainCDNConfig {\n projectId: string\n apiKey: string\n baseUrl?: string\n defaultLocale?: string\n}\n\nexport type ContentrainCDNClient = ReturnType<typeof createContentrain>\n\nexport function createContentrain(config: ContentrainCDNConfig) {\n const transport = new HttpTransport({\n baseUrl: config.baseUrl ?? 'https://studio.contentrain.io/api/cdn/v1',\n projectId: config.projectId,\n apiKey: config.apiKey,\n })\n const defaultLocale = config.defaultLocale\n\n return {\n collection: <T extends object = Record<string, unknown>>(modelId: string) =>\n new CdnCollectionQuery<T>(transport, modelId, defaultLocale),\n\n singleton: <T extends Record<string, unknown> = Record<string, unknown>>(modelId: string) =>\n new CdnSingletonAccessor<T>(transport.singleton<T>(modelId), defaultLocale),\n\n dictionary: (modelId: string) =>\n new CdnDictionaryAccessor(transport.dictionary(modelId), defaultLocale),\n\n document: <T extends object = Record<string, unknown>>(modelId: string) =>\n new CdnDocumentQuery<T>(transport.document<T>(modelId), defaultLocale),\n\n manifest: () => transport.fetch<unknown>('_manifest.json'),\n models: () => transport.fetch<unknown[]>('models/_index.json'),\n model: (id: string) => transport.fetch<unknown>(`models/${id}.json`),\n }\n}\n\n// Re-exports\nexport { ContentrainError } from './errors.js'\nexport type { CollectionDataSource, SingletonDataSource, DictionaryDataSource, DocumentDataSource } from './data-source.js'\nexport { HttpTransport } from './http-transport.js'\nexport { CdnCollectionQuery } from './collection-query.js'\nexport { CdnSingletonAccessor } from './singleton-accessor.js'\nexport { CdnDictionaryAccessor } from './dictionary-accessor.js'\nexport { CdnDocumentQuery } from './document-query.js'\n"],"mappings":"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"}
|