@utilsy/cms-nextjs 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -2
- package/dist/{client-I3rZOjS6.d.cts → client-awWyf-VL.d.cts} +9 -0
- package/dist/{client-I3rZOjS6.d.ts → client-awWyf-VL.d.ts} +9 -0
- package/dist/index.cjs +107 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +109 -3
- package/dist/index.d.ts +109 -3
- package/dist/index.js +96 -2
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +26 -0
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +12 -2
- package/dist/react.d.ts +12 -2
- package/dist/react.js +26 -1
- package/dist/react.js.map +1 -1
- package/package.json +2 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h as CmsBlogCategoryDto, b as BlogCategory, i as CmsBlogCommentDto, c as BlogComment, j as CmsBlogPostDto, g as BlogPost, o as CmsContentEntryDto, s as ContentEntry } from './client-
|
|
2
|
-
export { B as BlogApi, a as BlogAuthor, d as BlogCommentReply, e as BlogEngagement, f as BlogLikeResult, C as CmsApiResponse, k as CmsBlogPostsPage, l as CmsClient, m as CmsClientConfig, n as CmsContentEntriesPage, p as CmsContentTypeDto, q as ConfirmNewsletterResult, r as ContentApi, t as ContentFilters, u as ContentTypeMeta, v as CreateBlogCommentInput, w as CreateBlogCommentResult, F as FetchRequestInit, L as LeadSubmissionData, x as LeadsApi, y as ListBlogPostsQuery, z as ListContentEntriesQuery, M as MappedContentEntriesPage, N as NewsletterActionResult, A as NewsletterApi, D as NewsletterSubscriberSummary, S as SubmitLeadOptions, E as SubmitLeadResult, G as SubscribeNewsletterInput, U as UnsubscribeNewsletterInput, H as UpdateNewsletterPreferencesInput, I as createCmsClient, J as serializeContentFilters } from './client-
|
|
1
|
+
import { h as CmsBlogCategoryDto, b as BlogCategory, i as CmsBlogCommentDto, c as BlogComment, j as CmsBlogPostDto, g as BlogPost, o as CmsContentEntryDto, s as ContentEntry } from './client-awWyf-VL.js';
|
|
2
|
+
export { B as BlogApi, a as BlogAuthor, d as BlogCommentReply, e as BlogEngagement, f as BlogLikeResult, C as CmsApiResponse, k as CmsBlogPostsPage, l as CmsClient, m as CmsClientConfig, n as CmsContentEntriesPage, p as CmsContentTypeDto, q as ConfirmNewsletterResult, r as ContentApi, t as ContentFilters, u as ContentTypeMeta, v as CreateBlogCommentInput, w as CreateBlogCommentResult, F as FetchRequestInit, L as LeadSubmissionData, x as LeadsApi, y as ListBlogPostsQuery, z as ListContentEntriesQuery, M as MappedContentEntriesPage, N as NewsletterActionResult, A as NewsletterApi, D as NewsletterSubscriberSummary, S as SubmitLeadOptions, E as SubmitLeadResult, G as SubscribeNewsletterInput, U as UnsubscribeNewsletterInput, H as UpdateNewsletterPreferencesInput, I as createCmsClient, J as serializeContentFilters } from './client-awWyf-VL.js';
|
|
3
3
|
|
|
4
4
|
declare function mediaUrl(value: unknown): string | undefined;
|
|
5
5
|
declare function mapCmsPostToBlogPost(dto: CmsBlogPostDto): BlogPost;
|
|
@@ -8,4 +8,110 @@ declare function mapCmsCategoryToBlogCategory(dto: CmsBlogCategoryDto): BlogCate
|
|
|
8
8
|
|
|
9
9
|
declare function mapCmsEntryToContentEntry(dto: CmsContentEntryDto): ContentEntry;
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Aligns with Utilsy CMS content-type field definitions (admin schema).
|
|
13
|
+
* Entry `data` uses these shapes at runtime for COMPONENT and DYNAMIC_ZONE fields.
|
|
14
|
+
*/
|
|
15
|
+
declare const ContentTypeCategory: {
|
|
16
|
+
readonly COLLECTION: "COLLECTION";
|
|
17
|
+
readonly SINGLE: "SINGLE";
|
|
18
|
+
readonly COMPONENT: "COMPONENT";
|
|
19
|
+
};
|
|
20
|
+
type ContentTypeCategory = (typeof ContentTypeCategory)[keyof typeof ContentTypeCategory];
|
|
21
|
+
declare const FieldType: {
|
|
22
|
+
readonly TEXT: "TEXT";
|
|
23
|
+
readonly TEXTAREA: "TEXTAREA";
|
|
24
|
+
readonly RICHTEXT: "RICHTEXT";
|
|
25
|
+
readonly NUMBER: "NUMBER";
|
|
26
|
+
readonly BOOLEAN: "BOOLEAN";
|
|
27
|
+
readonly DATE: "DATE";
|
|
28
|
+
readonly DATETIME: "DATETIME";
|
|
29
|
+
readonly TIME: "TIME";
|
|
30
|
+
readonly EMAIL: "EMAIL";
|
|
31
|
+
readonly URL: "URL";
|
|
32
|
+
readonly MEDIA: "MEDIA";
|
|
33
|
+
readonly RELATION: "RELATION";
|
|
34
|
+
readonly JSON: "JSON";
|
|
35
|
+
readonly ENUM: "ENUM";
|
|
36
|
+
readonly PHONE: "PHONE";
|
|
37
|
+
readonly WEEKDAY: "WEEKDAY";
|
|
38
|
+
readonly COMPONENT: "COMPONENT";
|
|
39
|
+
readonly DYNAMIC_ZONE: "DYNAMIC_ZONE";
|
|
40
|
+
readonly PAGE_EDITOR: "PAGE_EDITOR";
|
|
41
|
+
};
|
|
42
|
+
type FieldType = (typeof FieldType)[keyof typeof FieldType];
|
|
43
|
+
type ComponentFieldConfig = {
|
|
44
|
+
componentId: string;
|
|
45
|
+
repeatable?: boolean;
|
|
46
|
+
};
|
|
47
|
+
type DynamicZoneFieldConfig = {
|
|
48
|
+
components: string[];
|
|
49
|
+
};
|
|
50
|
+
type ContentTypeField = {
|
|
51
|
+
name: string;
|
|
52
|
+
type: FieldType | string;
|
|
53
|
+
label?: string;
|
|
54
|
+
description?: string;
|
|
55
|
+
required?: boolean;
|
|
56
|
+
unique?: boolean;
|
|
57
|
+
default?: unknown;
|
|
58
|
+
validation?: {
|
|
59
|
+
min?: number;
|
|
60
|
+
max?: number;
|
|
61
|
+
minLength?: number;
|
|
62
|
+
maxLength?: number;
|
|
63
|
+
pattern?: string;
|
|
64
|
+
enum?: string[];
|
|
65
|
+
};
|
|
66
|
+
options?: {
|
|
67
|
+
multiple?: boolean;
|
|
68
|
+
placeholder?: string;
|
|
69
|
+
helpText?: string;
|
|
70
|
+
[key: string]: unknown;
|
|
71
|
+
};
|
|
72
|
+
component?: ComponentFieldConfig;
|
|
73
|
+
dynamicZone?: DynamicZoneFieldConfig;
|
|
74
|
+
relation?: {
|
|
75
|
+
contentTypeId: string;
|
|
76
|
+
relationType: string;
|
|
77
|
+
displayField?: string;
|
|
78
|
+
};
|
|
79
|
+
sortOrder?: number;
|
|
80
|
+
};
|
|
81
|
+
/** Discriminator for dynamic zone blocks (`__component` = component content type apiId). */
|
|
82
|
+
type DynamicZoneBlock = {
|
|
83
|
+
__component: string;
|
|
84
|
+
[key: string]: unknown;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
declare function isPlainObject(value: unknown): value is Record<string, unknown>;
|
|
88
|
+
/**
|
|
89
|
+
* Safely coerce CMS `fields` JSON to typed field definitions (skips invalid entries).
|
|
90
|
+
*/
|
|
91
|
+
declare function parseContentTypeFields(raw: unknown): ContentTypeField[];
|
|
92
|
+
declare function findContentTypeField(fields: ContentTypeField[] | undefined, fieldName: string): ContentTypeField | undefined;
|
|
93
|
+
/**
|
|
94
|
+
* Read a top-level field from entry data.
|
|
95
|
+
*/
|
|
96
|
+
declare function getEntryFieldValue(entry: Pick<ContentEntry, "data">, fieldName: string): unknown;
|
|
97
|
+
/**
|
|
98
|
+
* COMPONENT field: single object or repeatable array of objects.
|
|
99
|
+
* Returns a normalized array (empty if missing/invalid).
|
|
100
|
+
*/
|
|
101
|
+
declare function getComponentItems(entry: Pick<ContentEntry, "data">, fieldName: string): Record<string, unknown>[];
|
|
102
|
+
/**
|
|
103
|
+
* Single COMPONENT instance (first item when repeatable, or the object when not).
|
|
104
|
+
*/
|
|
105
|
+
declare function getComponentItem(entry: Pick<ContentEntry, "data">, fieldName: string): Record<string, unknown> | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* DYNAMIC_ZONE field: array of blocks with `__component` apiId discriminator.
|
|
108
|
+
*/
|
|
109
|
+
declare function getDynamicZoneBlocks(entry: Pick<ContentEntry, "data">, fieldName: string): DynamicZoneBlock[];
|
|
110
|
+
/** Blocks in a dynamic zone that match a component apiId. */
|
|
111
|
+
declare function filterDynamicZoneByComponent(blocks: DynamicZoneBlock[], componentApiId: string): DynamicZoneBlock[];
|
|
112
|
+
/** Whether a field definition is a repeatable component. */
|
|
113
|
+
declare function isRepeatableComponentField(field: ContentTypeField): boolean;
|
|
114
|
+
/** Whether a field definition is a dynamic zone. */
|
|
115
|
+
declare function isDynamicZoneField(field: ContentTypeField): boolean;
|
|
116
|
+
|
|
117
|
+
export { BlogCategory, BlogComment, BlogPost, CmsBlogCategoryDto, CmsBlogCommentDto, CmsBlogPostDto, CmsContentEntryDto, type ComponentFieldConfig, ContentEntry, ContentTypeCategory, type ContentTypeField, type DynamicZoneBlock, type DynamicZoneFieldConfig, FieldType, filterDynamicZoneByComponent, findContentTypeField, getComponentItem, getComponentItems, getDynamicZoneBlocks, getEntryFieldValue, isDynamicZoneField, isPlainObject, isRepeatableComponentField, mapCmsCategoryToBlogCategory, mapCmsCommentToBlogComment, mapCmsEntryToContentEntry, mapCmsPostToBlogPost, mediaUrl, parseContentTypeFields };
|
package/dist/index.js
CHANGED
|
@@ -237,6 +237,7 @@ function mapContentType(dto) {
|
|
|
237
237
|
id,
|
|
238
238
|
name: dto.name ?? "",
|
|
239
239
|
apiId: dto.apiId ?? "",
|
|
240
|
+
category: dto.category,
|
|
240
241
|
fields: dto.fields,
|
|
241
242
|
status: dto.status
|
|
242
243
|
};
|
|
@@ -287,13 +288,23 @@ function createContentApi(ctx) {
|
|
|
287
288
|
if (!page?.docs) return null;
|
|
288
289
|
return {
|
|
289
290
|
entries: page.docs.map(mapCmsEntryToContentEntry),
|
|
290
|
-
totalDocs: page.totalDocs
|
|
291
|
+
totalDocs: page.totalDocs,
|
|
292
|
+
...page.category ? { category: page.category } : {},
|
|
293
|
+
...page.maxEntries != null ? { maxEntries: page.maxEntries } : {}
|
|
291
294
|
};
|
|
292
295
|
},
|
|
293
296
|
async getMappedEntry(contentTypeApiId, idOrSlug, init) {
|
|
294
297
|
const dto = await this.getEntry(contentTypeApiId, idOrSlug, init);
|
|
295
298
|
if (!dto) return null;
|
|
296
299
|
return mapCmsEntryToContentEntry(dto);
|
|
300
|
+
},
|
|
301
|
+
async getSingleMappedEntry(contentTypeApiId, init) {
|
|
302
|
+
const page = await this.listMappedEntries(
|
|
303
|
+
contentTypeApiId,
|
|
304
|
+
{ limit: 1, page: 1 },
|
|
305
|
+
init
|
|
306
|
+
);
|
|
307
|
+
return page?.entries?.[0] ?? null;
|
|
297
308
|
}
|
|
298
309
|
};
|
|
299
310
|
}
|
|
@@ -378,6 +389,89 @@ function createCmsClient(config) {
|
|
|
378
389
|
};
|
|
379
390
|
}
|
|
380
391
|
|
|
381
|
-
|
|
392
|
+
// src/content/field-types.ts
|
|
393
|
+
var ContentTypeCategory = {
|
|
394
|
+
COLLECTION: "COLLECTION",
|
|
395
|
+
SINGLE: "SINGLE",
|
|
396
|
+
COMPONENT: "COMPONENT"
|
|
397
|
+
};
|
|
398
|
+
var FieldType = {
|
|
399
|
+
TEXT: "TEXT",
|
|
400
|
+
TEXTAREA: "TEXTAREA",
|
|
401
|
+
RICHTEXT: "RICHTEXT",
|
|
402
|
+
NUMBER: "NUMBER",
|
|
403
|
+
BOOLEAN: "BOOLEAN",
|
|
404
|
+
DATE: "DATE",
|
|
405
|
+
DATETIME: "DATETIME",
|
|
406
|
+
TIME: "TIME",
|
|
407
|
+
EMAIL: "EMAIL",
|
|
408
|
+
URL: "URL",
|
|
409
|
+
MEDIA: "MEDIA",
|
|
410
|
+
RELATION: "RELATION",
|
|
411
|
+
JSON: "JSON",
|
|
412
|
+
ENUM: "ENUM",
|
|
413
|
+
PHONE: "PHONE",
|
|
414
|
+
WEEKDAY: "WEEKDAY",
|
|
415
|
+
COMPONENT: "COMPONENT",
|
|
416
|
+
DYNAMIC_ZONE: "DYNAMIC_ZONE",
|
|
417
|
+
PAGE_EDITOR: "PAGE_EDITOR"
|
|
418
|
+
};
|
|
419
|
+
|
|
420
|
+
// src/content/structured-data.ts
|
|
421
|
+
function isPlainObject(value) {
|
|
422
|
+
return value != null && typeof value === "object" && !Array.isArray(value);
|
|
423
|
+
}
|
|
424
|
+
function parseContentTypeFields(raw) {
|
|
425
|
+
if (!Array.isArray(raw)) return [];
|
|
426
|
+
const out = [];
|
|
427
|
+
for (const item of raw) {
|
|
428
|
+
if (!isPlainObject(item)) continue;
|
|
429
|
+
const name = item.name;
|
|
430
|
+
const type = item.type;
|
|
431
|
+
if (typeof name !== "string" || !name.trim()) continue;
|
|
432
|
+
if (typeof type !== "string" || !type.trim()) continue;
|
|
433
|
+
out.push(item);
|
|
434
|
+
}
|
|
435
|
+
return out;
|
|
436
|
+
}
|
|
437
|
+
function findContentTypeField(fields, fieldName) {
|
|
438
|
+
return fields?.find((f) => f.name === fieldName);
|
|
439
|
+
}
|
|
440
|
+
function getEntryFieldValue(entry, fieldName) {
|
|
441
|
+
return entry.data[fieldName];
|
|
442
|
+
}
|
|
443
|
+
function getComponentItems(entry, fieldName) {
|
|
444
|
+
const value = entry.data[fieldName];
|
|
445
|
+
if (value == null) return [];
|
|
446
|
+
if (Array.isArray(value)) {
|
|
447
|
+
return value.filter(isPlainObject);
|
|
448
|
+
}
|
|
449
|
+
if (isPlainObject(value)) {
|
|
450
|
+
return [value];
|
|
451
|
+
}
|
|
452
|
+
return [];
|
|
453
|
+
}
|
|
454
|
+
function getComponentItem(entry, fieldName) {
|
|
455
|
+
const items = getComponentItems(entry, fieldName);
|
|
456
|
+
return items[0];
|
|
457
|
+
}
|
|
458
|
+
function getDynamicZoneBlocks(entry, fieldName) {
|
|
459
|
+
const value = entry.data[fieldName];
|
|
460
|
+
if (!Array.isArray(value)) return [];
|
|
461
|
+
return value.filter(
|
|
462
|
+
(item) => isPlainObject(item) && typeof item.__component === "string" && item.__component.length > 0
|
|
463
|
+
);
|
|
464
|
+
}
|
|
465
|
+
function filterDynamicZoneByComponent(blocks, componentApiId) {
|
|
466
|
+
return blocks.filter((b) => b.__component === componentApiId);
|
|
467
|
+
}
|
|
468
|
+
function isRepeatableComponentField(field) {
|
|
469
|
+
return field.type === FieldType.COMPONENT && field.component?.repeatable === true;
|
|
470
|
+
}
|
|
471
|
+
function isDynamicZoneField(field) {
|
|
472
|
+
return field.type === FieldType.DYNAMIC_ZONE;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
export { ContentTypeCategory, FieldType, createCmsClient, filterDynamicZoneByComponent, findContentTypeField, getComponentItem, getComponentItems, getDynamicZoneBlocks, getEntryFieldValue, isDynamicZoneField, isPlainObject, isRepeatableComponentField, mapCmsCategoryToBlogCategory, mapCmsCommentToBlogComment, mapCmsEntryToContentEntry, mapCmsPostToBlogPost, mediaUrl, parseContentTypeFields, serializeContentFilters };
|
|
382
476
|
//# sourceMappingURL=index.js.map
|
|
383
477
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/http.ts","../src/blog/mappers.ts","../src/blog/endpoints.ts","../src/content/filters.ts","../src/content/mappers.ts","../src/content/endpoints.ts","../src/leads/endpoints.ts","../src/newsletter/endpoints.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { CmsApiResponse, FetchRequestInit } from \"./types.js\";\n\nexport type RequestContext = {\n baseUrl: string;\n siteId?: string;\n fetchFn: typeof fetch;\n defaultHeaders: Record<string, string>;\n};\n\nexport function appendSiteId(path: string, siteId?: string): string {\n if (!siteId) return path;\n const sep = path.includes(\"?\") ? \"&\" : \"?\";\n return `${path}${sep}siteId=${encodeURIComponent(siteId)}`;\n}\n\nexport function buildPublicUrl(ctx: RequestContext, path: string): string {\n return `${ctx.baseUrl}${appendSiteId(path, ctx.siteId)}`;\n}\n\nexport async function unwrapResponse<T>(res: Response): Promise<T> {\n const json = (await res.json()) as CmsApiResponse<T> & Record<string, unknown>;\n if (!res.ok) {\n const message =\n (json as CmsApiResponse<T>).message ??\n (`Request failed (${res.status})` as string);\n throw new Error(message);\n }\n const hasEntryIdentity = \"_id\" in json || \"id\" in json;\n const hasListDocs = \"docs\" in json && Array.isArray(json.docs);\n const isDataEnvelope =\n json.data !== undefined &&\n \"message\" in json &&\n !hasListDocs &&\n !hasEntryIdentity;\n\n if (isDataEnvelope) {\n return json.data as T;\n }\n return json as T;\n}\n\n/** @deprecated Use unwrapResponse — kept as alias for blog module */\nexport const unwrap = unwrapResponse;\n\nexport async function publicGet<T>(\n ctx: RequestContext,\n path: string,\n init?: FetchRequestInit,\n): Promise<T> {\n const res = await ctx.fetchFn(buildPublicUrl(ctx, path), {\n ...init,\n headers: {\n \"Content-Type\": \"application/json\",\n ...ctx.defaultHeaders,\n ...(init?.headers as Record<string, string> | undefined),\n },\n });\n return unwrapResponse<T>(res);\n}\n\nexport async function publicGetNullable<T>(\n ctx: RequestContext,\n path: string,\n init?: FetchRequestInit,\n): Promise<T | null> {\n try {\n return await publicGet<T>(ctx, path, init);\n } catch {\n return null;\n }\n}\n\nexport async function publicPost<T>(\n ctx: RequestContext,\n path: string,\n body: unknown,\n init?: FetchRequestInit,\n): Promise<T> {\n const res = await ctx.fetchFn(buildPublicUrl(ctx, path), {\n ...init,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...ctx.defaultHeaders,\n ...(init?.headers as Record<string, string> | undefined),\n },\n body: JSON.stringify(body),\n });\n return unwrapResponse<T>(res);\n}\n","import type {\n BlogCategory,\n BlogComment,\n BlogPost,\n CmsBlogCategoryDto,\n CmsBlogCommentDto,\n CmsBlogPostDto,\n} from \"./types.js\";\n\nexport function mediaUrl(value: unknown): string | undefined {\n if (!value) return undefined;\n if (typeof value === \"string\") return value;\n if (typeof value === \"object\" && value !== null && \"url\" in value) {\n return String((value as { url: string }).url);\n }\n return undefined;\n}\n\nexport function mapCmsPostToBlogPost(dto: CmsBlogPostDto): BlogPost {\n const data = dto.data ?? {};\n const title = String(dto.title ?? data.title ?? \"Untitled\");\n const slug = String(dto.slug ?? data.slug ?? dto.id);\n const excerpt = String(dto.excerpt ?? data.excerpt ?? \"\");\n const body = String(dto.content ?? data.content ?? \"\");\n const tags = dto.tags ?? (Array.isArray(data.tags) ? (data.tags as string[]) : []);\n const category = dto.categories?.[0]?.name ?? \"General\";\n const publishedAt = String(\n dto.published_at ?? data.published_at ?? dto.createdAt ?? new Date().toISOString(),\n );\n const authorName = String(data.author_name ?? \"Editor\");\n const imageSrc = mediaUrl(dto.featured_image ?? data.featured_image);\n\n const wordCount = body.replace(/<[^>]+>/g, \" \").split(/\\s+/).filter(Boolean).length;\n\n return {\n postId: dto.id,\n slug,\n title,\n excerpt,\n category,\n tags,\n publishedAt,\n readMinutes: Math.max(1, Math.ceil(wordCount / 200)),\n author: {\n name: authorName,\n avatarInitials: authorName.slice(0, 2).toUpperCase(),\n },\n imageSrc,\n imageAlt: title,\n body,\n stats: dto.stats,\n };\n}\n\nexport function mapCmsCommentToBlogComment(dto: CmsBlogCommentDto): BlogComment {\n return {\n id: dto.id,\n name: dto.name,\n message: dto.message,\n avatarUrl: dto.avatarUrl,\n postedAt: dto.postedAt,\n replies: (dto.replyComment ?? []).map((r) => ({\n id: r.id,\n userId: r.userId,\n message: r.message,\n postedAt: r.postedAt,\n })),\n };\n}\n\nexport function mapCmsCategoryToBlogCategory(dto: CmsBlogCategoryDto): BlogCategory {\n return {\n id: dto.id,\n name: dto.name,\n slug: dto.slug,\n description: dto.description,\n sortOrder: dto.sortOrder,\n };\n}\n","import {\n appendSiteId,\n buildPublicUrl,\n publicGetNullable,\n unwrapResponse,\n type RequestContext,\n} from \"../http.js\";\nimport type { FetchRequestInit } from \"../types.js\";\nimport {\n mapCmsCategoryToBlogCategory,\n mapCmsCommentToBlogComment,\n mapCmsPostToBlogPost,\n} from \"./mappers.js\";\nimport type {\n BlogCategory,\n BlogComment,\n BlogEngagement,\n BlogLikeResult,\n BlogPost,\n CmsBlogCategoryDto,\n CmsBlogCommentDto,\n CmsBlogPostDto,\n CmsBlogPostsPage,\n CreateBlogCommentInput,\n CreateBlogCommentResult,\n ListBlogPostsQuery,\n} from \"./types.js\";\n\nexport type BlogRequestContext = RequestContext & {\n blogBasePath: string;\n};\n\nexport function createBlogApi(ctx: BlogRequestContext) {\n const prefix = ctx.blogBasePath;\n\n return {\n listPosts(query?: ListBlogPostsQuery, init?: FetchRequestInit) {\n const qs = new URLSearchParams();\n if (query?.page) qs.set(\"page\", String(query.page));\n if (query?.limit) qs.set(\"limit\", String(query.limit));\n if (query?.search) qs.set(\"search\", query.search);\n if (query?.tag) qs.set(\"tag\", query.tag);\n const queryStr = qs.toString();\n const path = `${prefix}/posts${queryStr ? `?${queryStr}` : \"\"}`;\n return publicGetNullable<CmsBlogPostsPage>(ctx, path, init);\n },\n\n getPostBySlug(slug: string, init?: FetchRequestInit) {\n return publicGetNullable<CmsBlogPostDto>(\n ctx,\n `${prefix}/posts/${encodeURIComponent(slug)}`,\n init,\n );\n },\n\n listCategories(init?: FetchRequestInit) {\n return publicGetNullable<CmsBlogCategoryDto[]>(ctx, `${prefix}/categories`, init);\n },\n\n listComments(postId: string, init?: FetchRequestInit) {\n return publicGetNullable<CmsBlogCommentDto[]>(\n ctx,\n `${prefix}/posts/${encodeURIComponent(postId)}/comments`,\n init,\n );\n },\n\n async createComment(postId: string, body: CreateBlogCommentInput) {\n const url = buildPublicUrl(\n ctx,\n `${prefix}/posts/${encodeURIComponent(postId)}/comments`,\n );\n const res = await ctx.fetchFn(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...ctx.defaultHeaders,\n },\n body: JSON.stringify(body),\n });\n return unwrapResponse<CreateBlogCommentResult>(res);\n },\n\n getEngagement(postId: string, options?: { visitorId?: string }, init?: FetchRequestInit) {\n return publicGetNullable<BlogEngagement>(\n ctx,\n `${prefix}/posts/${encodeURIComponent(postId)}/engagement`,\n {\n ...init,\n headers: {\n ...(init?.headers as Record<string, string> | undefined),\n ...(options?.visitorId ? { \"x-visitor-id\": options.visitorId } : {}),\n },\n },\n );\n },\n\n async toggleLike(postId: string, options?: { visitorId?: string }) {\n const url = buildPublicUrl(ctx, `${prefix}/posts/${encodeURIComponent(postId)}/like`);\n const res = await ctx.fetchFn(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...ctx.defaultHeaders,\n ...(options?.visitorId ? { \"x-visitor-id\": options.visitorId } : {}),\n },\n });\n return unwrapResponse<BlogLikeResult>(res);\n },\n\n async listMappedPosts(query?: ListBlogPostsQuery, init?: FetchRequestInit) {\n const page = await this.listPosts(query, init);\n if (!page?.docs?.length) return null;\n return {\n posts: page.docs.map(mapCmsPostToBlogPost),\n total: page.total,\n page: page.page,\n limit: page.limit,\n };\n },\n\n async getMappedPostBySlug(slug: string, init?: FetchRequestInit): Promise<BlogPost | null> {\n const dto = await this.getPostBySlug(slug, init);\n if (!dto) return null;\n return mapCmsPostToBlogPost(dto);\n },\n\n async listMappedCategories(init?: FetchRequestInit): Promise<BlogCategory[] | null> {\n const dtos = await this.listCategories(init);\n if (!dtos) return null;\n return dtos.map(mapCmsCategoryToBlogCategory);\n },\n\n async listMappedComments(postId: string, init?: FetchRequestInit): Promise<BlogComment[] | null> {\n const dtos = await this.listComments(postId, init);\n if (!dtos) return null;\n return dtos.map(mapCmsCommentToBlogComment);\n },\n };\n}\n\nexport type BlogApi = ReturnType<typeof createBlogApi>;\n","export type ContentFilters = Record<string, unknown>;\n\nexport function serializeContentFilters(filters: ContentFilters): string {\n return JSON.stringify(filters);\n}\n","import type {\n CmsContentEntryDto,\n CmsContentTypeDto,\n ContentEntry,\n ContentTypeMeta,\n} from \"./types.js\";\n\nfunction resolveId(dto: { _id?: string; id?: string }): string {\n if (dto.id) return String(dto.id);\n if (dto._id) return String(dto._id);\n return \"\";\n}\n\nfunction mapContentType(dto?: CmsContentTypeDto): ContentTypeMeta | undefined {\n if (!dto) return undefined;\n const id = resolveId(dto);\n return {\n id,\n name: dto.name ?? \"\",\n apiId: dto.apiId ?? \"\",\n fields: dto.fields,\n status: dto.status,\n };\n}\n\nexport function mapCmsEntryToContentEntry(dto: CmsContentEntryDto): ContentEntry {\n const contentTypeId =\n dto.contentTypeId != null\n ? String(dto.contentTypeId)\n : dto.contentType\n ? resolveId(dto.contentType)\n : \"\";\n\n return {\n id: resolveId(dto),\n contentTypeId,\n contentType: mapContentType(dto.contentType),\n status: dto.status ?? \"PUBLISHED\",\n data: dto.data ?? {},\n createdAt: dto.createdAt,\n updatedAt: dto.updatedAt,\n };\n}\n","import { publicGetNullable, type RequestContext } from \"../http.js\";\nimport type { FetchRequestInit } from \"../types.js\";\nimport { serializeContentFilters } from \"./filters.js\";\nimport { mapCmsEntryToContentEntry } from \"./mappers.js\";\nimport type {\n CmsContentEntriesPage,\n CmsContentEntryDto,\n ContentEntry,\n ListContentEntriesQuery,\n MappedContentEntriesPage,\n} from \"./types.js\";\n\nexport type ContentRequestContext = RequestContext & {\n contentBasePath: string;\n};\n\nfunction buildListQueryString(query?: ListContentEntriesQuery): string {\n const qs = new URLSearchParams();\n if (query?.page != null) qs.set(\"page\", String(query.page));\n if (query?.limit != null) qs.set(\"limit\", String(query.limit));\n if (query?.search) qs.set(\"search\", query.search);\n if (query?.sort) qs.set(\"sort\", query.sort);\n if (query?.order) qs.set(\"order\", query.order);\n if (query?.filters && Object.keys(query.filters).length > 0) {\n qs.set(\"filters\", serializeContentFilters(query.filters));\n }\n return qs.toString();\n}\n\nexport function createContentApi(ctx: ContentRequestContext) {\n const prefix = ctx.contentBasePath;\n\n return {\n listEntries(\n contentTypeApiId: string,\n query?: ListContentEntriesQuery,\n init?: FetchRequestInit,\n ) {\n const queryStr = buildListQueryString(query);\n const path = `${prefix}/${encodeURIComponent(contentTypeApiId)}${\n queryStr ? `?${queryStr}` : \"\"\n }`;\n return publicGetNullable<CmsContentEntriesPage>(ctx, path, init);\n },\n\n getEntry(contentTypeApiId: string, idOrSlug: string, init?: FetchRequestInit) {\n return publicGetNullable<CmsContentEntryDto>(\n ctx,\n `${prefix}/${encodeURIComponent(contentTypeApiId)}/${encodeURIComponent(idOrSlug)}`,\n init,\n );\n },\n\n async listMappedEntries(\n contentTypeApiId: string,\n query?: ListContentEntriesQuery,\n init?: FetchRequestInit,\n ): Promise<MappedContentEntriesPage | null> {\n const page = await this.listEntries(contentTypeApiId, query, init);\n if (!page?.docs) return null;\n return {\n entries: page.docs.map(mapCmsEntryToContentEntry),\n totalDocs: page.totalDocs,\n };\n },\n\n async getMappedEntry(\n contentTypeApiId: string,\n idOrSlug: string,\n init?: FetchRequestInit,\n ): Promise<ContentEntry | null> {\n const dto = await this.getEntry(contentTypeApiId, idOrSlug, init);\n if (!dto) return null;\n return mapCmsEntryToContentEntry(dto);\n },\n };\n}\n\nexport type ContentApi = ReturnType<typeof createContentApi>;\n","import { buildPublicUrl, unwrapResponse, type RequestContext } from \"../http.js\";\nimport type { FetchRequestInit } from \"../types.js\";\nimport type { LeadSubmissionData, SubmitLeadOptions, SubmitLeadResult } from \"./types.js\";\n\nexport type LeadsRequestContext = RequestContext & {\n contentBasePath: string;\n};\n\nexport function createLeadsApi(ctx: LeadsRequestContext) {\n const prefix = ctx.contentBasePath;\n\n return {\n async submit(\n contentTypeApiId: string,\n data: LeadSubmissionData,\n options?: SubmitLeadOptions,\n init?: FetchRequestInit,\n ): Promise<SubmitLeadResult> {\n const url = buildPublicUrl(\n ctx,\n `${prefix}/${encodeURIComponent(contentTypeApiId)}/submissions`,\n );\n\n const body: { data: LeadSubmissionData; status?: string } = { data };\n if (options?.status) {\n body.status = options.status;\n }\n\n const res = await ctx.fetchFn(url, {\n ...init,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...ctx.defaultHeaders,\n ...(init?.headers as Record<string, string> | undefined),\n },\n body: JSON.stringify(body),\n });\n\n return unwrapResponse<SubmitLeadResult>(res);\n },\n };\n}\n\nexport type LeadsApi = ReturnType<typeof createLeadsApi>;\n","import { publicGet, publicPost, type RequestContext } from \"../http.js\";\nimport type { FetchRequestInit } from \"../types.js\";\nimport type {\n ConfirmNewsletterResult,\n NewsletterActionResult,\n SubscribeNewsletterInput,\n UnsubscribeNewsletterInput,\n UpdateNewsletterPreferencesInput,\n} from \"./types.js\";\n\nexport type NewsletterRequestContext = RequestContext & {\n newsletterBasePath: string;\n};\n\nexport function createNewsletterApi(ctx: NewsletterRequestContext) {\n const prefix = ctx.newsletterBasePath;\n\n return {\n subscribe(input: SubscribeNewsletterInput, init?: FetchRequestInit) {\n return publicPost<NewsletterActionResult>(ctx, `${prefix}/subscribe`, input, init);\n },\n\n unsubscribe(input: UnsubscribeNewsletterInput, init?: FetchRequestInit) {\n const body: UnsubscribeNewsletterInput = {};\n if (input.token) body.token = input.token;\n if (input.email) body.email = input.email;\n return publicPost<NewsletterActionResult>(ctx, `${prefix}/unsubscribe`, body, init);\n },\n\n confirm(token: string, init?: FetchRequestInit) {\n const path = `${prefix}/confirm/${encodeURIComponent(token)}`;\n return publicGet<ConfirmNewsletterResult>(ctx, path, init);\n },\n\n updatePreferences(input: UpdateNewsletterPreferencesInput, init?: FetchRequestInit) {\n return publicPost<NewsletterActionResult>(ctx, `${prefix}/preferences`, input, init);\n },\n };\n}\n\nexport type NewsletterApi = ReturnType<typeof createNewsletterApi>;\n","import { createBlogApi } from \"./blog/endpoints.js\";\nimport type { BlogApi } from \"./blog/endpoints.js\";\nimport { createContentApi } from \"./content/endpoints.js\";\nimport type { ContentApi } from \"./content/endpoints.js\";\nimport { createLeadsApi } from \"./leads/endpoints.js\";\nimport type { LeadsApi } from \"./leads/endpoints.js\";\nimport { createNewsletterApi } from \"./newsletter/endpoints.js\";\nimport type { NewsletterApi } from \"./newsletter/endpoints.js\";\n\nexport type CmsClientConfig = {\n /** Base URL, e.g. https://cms-gateway.example.com */\n baseUrl: string;\n /** CMS site Mongo id — appended as ?siteId= on every public request */\n siteId?: string;\n /**\n * Path prefix before /public/blog, /public/api, and /public/newsletter.\n * Default '' for gateway-cms direct (/public/blog/..., etc.).\n * Use '/api/backend/cms' when routing through the main API gateway.\n */\n pathPrefix?: string;\n fetch?: typeof fetch;\n defaultHeaders?: Record<string, string>;\n};\n\nexport type CmsClient = {\n blog: BlogApi;\n content: ContentApi;\n leads: LeadsApi;\n newsletter: NewsletterApi;\n};\n\nfunction normalizeBaseUrl(url: string): string {\n return url.replace(/\\/$/, \"\");\n}\n\nfunction normalizePathPrefix(prefix: string): string {\n const trimmed = prefix.replace(/\\/$/, \"\");\n if (!trimmed) return \"\";\n return trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`;\n}\n\nexport function createCmsClient(config: CmsClientConfig): CmsClient {\n const baseUrl = normalizeBaseUrl(config.baseUrl);\n const pathPrefix = normalizePathPrefix(config.pathPrefix ?? \"\");\n const blogBasePath = `${pathPrefix}/public/blog`.replace(/\\/+/g, \"/\");\n const contentBasePath = `${pathPrefix}/public/api`.replace(/\\/+/g, \"/\");\n const newsletterBasePath = `${pathPrefix}/public/newsletter`.replace(/\\/+/g, \"/\");\n\n const ctx = {\n baseUrl,\n siteId: config.siteId,\n fetchFn: config.fetch ?? globalThis.fetch.bind(globalThis),\n defaultHeaders: config.defaultHeaders ?? {},\n };\n\n return {\n blog: createBlogApi({ ...ctx, blogBasePath }),\n content: createContentApi({ ...ctx, contentBasePath }),\n leads: createLeadsApi({ ...ctx, contentBasePath }),\n newsletter: createNewsletterApi({ ...ctx, newsletterBasePath }),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/http.ts","../src/blog/mappers.ts","../src/blog/endpoints.ts","../src/content/filters.ts","../src/content/mappers.ts","../src/content/endpoints.ts","../src/leads/endpoints.ts","../src/newsletter/endpoints.ts","../src/client.ts","../src/content/field-types.ts","../src/content/structured-data.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { CmsApiResponse, FetchRequestInit } from \"./types.js\";\n\nexport type RequestContext = {\n baseUrl: string;\n siteId?: string;\n fetchFn: typeof fetch;\n defaultHeaders: Record<string, string>;\n};\n\nexport function appendSiteId(path: string, siteId?: string): string {\n if (!siteId) return path;\n const sep = path.includes(\"?\") ? \"&\" : \"?\";\n return `${path}${sep}siteId=${encodeURIComponent(siteId)}`;\n}\n\nexport function buildPublicUrl(ctx: RequestContext, path: string): string {\n return `${ctx.baseUrl}${appendSiteId(path, ctx.siteId)}`;\n}\n\nexport async function unwrapResponse<T>(res: Response): Promise<T> {\n const json = (await res.json()) as CmsApiResponse<T> & Record<string, unknown>;\n if (!res.ok) {\n const message =\n (json as CmsApiResponse<T>).message ??\n (`Request failed (${res.status})` as string);\n throw new Error(message);\n }\n const hasEntryIdentity = \"_id\" in json || \"id\" in json;\n const hasListDocs = \"docs\" in json && Array.isArray(json.docs);\n const isDataEnvelope =\n json.data !== undefined &&\n \"message\" in json &&\n !hasListDocs &&\n !hasEntryIdentity;\n\n if (isDataEnvelope) {\n return json.data as T;\n }\n return json as T;\n}\n\n/** @deprecated Use unwrapResponse — kept as alias for blog module */\nexport const unwrap = unwrapResponse;\n\nexport async function publicGet<T>(\n ctx: RequestContext,\n path: string,\n init?: FetchRequestInit,\n): Promise<T> {\n const res = await ctx.fetchFn(buildPublicUrl(ctx, path), {\n ...init,\n headers: {\n \"Content-Type\": \"application/json\",\n ...ctx.defaultHeaders,\n ...(init?.headers as Record<string, string> | undefined),\n },\n });\n return unwrapResponse<T>(res);\n}\n\nexport async function publicGetNullable<T>(\n ctx: RequestContext,\n path: string,\n init?: FetchRequestInit,\n): Promise<T | null> {\n try {\n return await publicGet<T>(ctx, path, init);\n } catch {\n return null;\n }\n}\n\nexport async function publicPost<T>(\n ctx: RequestContext,\n path: string,\n body: unknown,\n init?: FetchRequestInit,\n): Promise<T> {\n const res = await ctx.fetchFn(buildPublicUrl(ctx, path), {\n ...init,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...ctx.defaultHeaders,\n ...(init?.headers as Record<string, string> | undefined),\n },\n body: JSON.stringify(body),\n });\n return unwrapResponse<T>(res);\n}\n","import type {\n BlogCategory,\n BlogComment,\n BlogPost,\n CmsBlogCategoryDto,\n CmsBlogCommentDto,\n CmsBlogPostDto,\n} from \"./types.js\";\n\nexport function mediaUrl(value: unknown): string | undefined {\n if (!value) return undefined;\n if (typeof value === \"string\") return value;\n if (typeof value === \"object\" && value !== null && \"url\" in value) {\n return String((value as { url: string }).url);\n }\n return undefined;\n}\n\nexport function mapCmsPostToBlogPost(dto: CmsBlogPostDto): BlogPost {\n const data = dto.data ?? {};\n const title = String(dto.title ?? data.title ?? \"Untitled\");\n const slug = String(dto.slug ?? data.slug ?? dto.id);\n const excerpt = String(dto.excerpt ?? data.excerpt ?? \"\");\n const body = String(dto.content ?? data.content ?? \"\");\n const tags = dto.tags ?? (Array.isArray(data.tags) ? (data.tags as string[]) : []);\n const category = dto.categories?.[0]?.name ?? \"General\";\n const publishedAt = String(\n dto.published_at ?? data.published_at ?? dto.createdAt ?? new Date().toISOString(),\n );\n const authorName = String(data.author_name ?? \"Editor\");\n const imageSrc = mediaUrl(dto.featured_image ?? data.featured_image);\n\n const wordCount = body.replace(/<[^>]+>/g, \" \").split(/\\s+/).filter(Boolean).length;\n\n return {\n postId: dto.id,\n slug,\n title,\n excerpt,\n category,\n tags,\n publishedAt,\n readMinutes: Math.max(1, Math.ceil(wordCount / 200)),\n author: {\n name: authorName,\n avatarInitials: authorName.slice(0, 2).toUpperCase(),\n },\n imageSrc,\n imageAlt: title,\n body,\n stats: dto.stats,\n };\n}\n\nexport function mapCmsCommentToBlogComment(dto: CmsBlogCommentDto): BlogComment {\n return {\n id: dto.id,\n name: dto.name,\n message: dto.message,\n avatarUrl: dto.avatarUrl,\n postedAt: dto.postedAt,\n replies: (dto.replyComment ?? []).map((r) => ({\n id: r.id,\n userId: r.userId,\n message: r.message,\n postedAt: r.postedAt,\n })),\n };\n}\n\nexport function mapCmsCategoryToBlogCategory(dto: CmsBlogCategoryDto): BlogCategory {\n return {\n id: dto.id,\n name: dto.name,\n slug: dto.slug,\n description: dto.description,\n sortOrder: dto.sortOrder,\n };\n}\n","import {\n appendSiteId,\n buildPublicUrl,\n publicGetNullable,\n unwrapResponse,\n type RequestContext,\n} from \"../http.js\";\nimport type { FetchRequestInit } from \"../types.js\";\nimport {\n mapCmsCategoryToBlogCategory,\n mapCmsCommentToBlogComment,\n mapCmsPostToBlogPost,\n} from \"./mappers.js\";\nimport type {\n BlogCategory,\n BlogComment,\n BlogEngagement,\n BlogLikeResult,\n BlogPost,\n CmsBlogCategoryDto,\n CmsBlogCommentDto,\n CmsBlogPostDto,\n CmsBlogPostsPage,\n CreateBlogCommentInput,\n CreateBlogCommentResult,\n ListBlogPostsQuery,\n} from \"./types.js\";\n\nexport type BlogRequestContext = RequestContext & {\n blogBasePath: string;\n};\n\nexport function createBlogApi(ctx: BlogRequestContext) {\n const prefix = ctx.blogBasePath;\n\n return {\n listPosts(query?: ListBlogPostsQuery, init?: FetchRequestInit) {\n const qs = new URLSearchParams();\n if (query?.page) qs.set(\"page\", String(query.page));\n if (query?.limit) qs.set(\"limit\", String(query.limit));\n if (query?.search) qs.set(\"search\", query.search);\n if (query?.tag) qs.set(\"tag\", query.tag);\n const queryStr = qs.toString();\n const path = `${prefix}/posts${queryStr ? `?${queryStr}` : \"\"}`;\n return publicGetNullable<CmsBlogPostsPage>(ctx, path, init);\n },\n\n getPostBySlug(slug: string, init?: FetchRequestInit) {\n return publicGetNullable<CmsBlogPostDto>(\n ctx,\n `${prefix}/posts/${encodeURIComponent(slug)}`,\n init,\n );\n },\n\n listCategories(init?: FetchRequestInit) {\n return publicGetNullable<CmsBlogCategoryDto[]>(ctx, `${prefix}/categories`, init);\n },\n\n listComments(postId: string, init?: FetchRequestInit) {\n return publicGetNullable<CmsBlogCommentDto[]>(\n ctx,\n `${prefix}/posts/${encodeURIComponent(postId)}/comments`,\n init,\n );\n },\n\n async createComment(postId: string, body: CreateBlogCommentInput) {\n const url = buildPublicUrl(\n ctx,\n `${prefix}/posts/${encodeURIComponent(postId)}/comments`,\n );\n const res = await ctx.fetchFn(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...ctx.defaultHeaders,\n },\n body: JSON.stringify(body),\n });\n return unwrapResponse<CreateBlogCommentResult>(res);\n },\n\n getEngagement(postId: string, options?: { visitorId?: string }, init?: FetchRequestInit) {\n return publicGetNullable<BlogEngagement>(\n ctx,\n `${prefix}/posts/${encodeURIComponent(postId)}/engagement`,\n {\n ...init,\n headers: {\n ...(init?.headers as Record<string, string> | undefined),\n ...(options?.visitorId ? { \"x-visitor-id\": options.visitorId } : {}),\n },\n },\n );\n },\n\n async toggleLike(postId: string, options?: { visitorId?: string }) {\n const url = buildPublicUrl(ctx, `${prefix}/posts/${encodeURIComponent(postId)}/like`);\n const res = await ctx.fetchFn(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...ctx.defaultHeaders,\n ...(options?.visitorId ? { \"x-visitor-id\": options.visitorId } : {}),\n },\n });\n return unwrapResponse<BlogLikeResult>(res);\n },\n\n async listMappedPosts(query?: ListBlogPostsQuery, init?: FetchRequestInit) {\n const page = await this.listPosts(query, init);\n if (!page?.docs?.length) return null;\n return {\n posts: page.docs.map(mapCmsPostToBlogPost),\n total: page.total,\n page: page.page,\n limit: page.limit,\n };\n },\n\n async getMappedPostBySlug(slug: string, init?: FetchRequestInit): Promise<BlogPost | null> {\n const dto = await this.getPostBySlug(slug, init);\n if (!dto) return null;\n return mapCmsPostToBlogPost(dto);\n },\n\n async listMappedCategories(init?: FetchRequestInit): Promise<BlogCategory[] | null> {\n const dtos = await this.listCategories(init);\n if (!dtos) return null;\n return dtos.map(mapCmsCategoryToBlogCategory);\n },\n\n async listMappedComments(postId: string, init?: FetchRequestInit): Promise<BlogComment[] | null> {\n const dtos = await this.listComments(postId, init);\n if (!dtos) return null;\n return dtos.map(mapCmsCommentToBlogComment);\n },\n };\n}\n\nexport type BlogApi = ReturnType<typeof createBlogApi>;\n","export type ContentFilters = Record<string, unknown>;\n\nexport function serializeContentFilters(filters: ContentFilters): string {\n return JSON.stringify(filters);\n}\n","import type {\n CmsContentEntryDto,\n CmsContentTypeDto,\n ContentEntry,\n ContentTypeMeta,\n} from \"./types.js\";\n\nfunction resolveId(dto: { _id?: string; id?: string }): string {\n if (dto.id) return String(dto.id);\n if (dto._id) return String(dto._id);\n return \"\";\n}\n\nfunction mapContentType(dto?: CmsContentTypeDto): ContentTypeMeta | undefined {\n if (!dto) return undefined;\n const id = resolveId(dto);\n return {\n id,\n name: dto.name ?? \"\",\n apiId: dto.apiId ?? \"\",\n category: dto.category,\n fields: dto.fields,\n status: dto.status,\n };\n}\n\nexport function mapCmsEntryToContentEntry(dto: CmsContentEntryDto): ContentEntry {\n const contentTypeId =\n dto.contentTypeId != null\n ? String(dto.contentTypeId)\n : dto.contentType\n ? resolveId(dto.contentType)\n : \"\";\n\n return {\n id: resolveId(dto),\n contentTypeId,\n contentType: mapContentType(dto.contentType),\n status: dto.status ?? \"PUBLISHED\",\n data: dto.data ?? {},\n createdAt: dto.createdAt,\n updatedAt: dto.updatedAt,\n };\n}\n","import { publicGetNullable, type RequestContext } from \"../http.js\";\nimport type { FetchRequestInit } from \"../types.js\";\nimport { serializeContentFilters } from \"./filters.js\";\nimport { mapCmsEntryToContentEntry } from \"./mappers.js\";\nimport type {\n CmsContentEntriesPage,\n CmsContentEntryDto,\n ContentEntry,\n ListContentEntriesQuery,\n MappedContentEntriesPage,\n} from \"./types.js\";\n\nexport type ContentRequestContext = RequestContext & {\n contentBasePath: string;\n};\n\nfunction buildListQueryString(query?: ListContentEntriesQuery): string {\n const qs = new URLSearchParams();\n if (query?.page != null) qs.set(\"page\", String(query.page));\n if (query?.limit != null) qs.set(\"limit\", String(query.limit));\n if (query?.search) qs.set(\"search\", query.search);\n if (query?.sort) qs.set(\"sort\", query.sort);\n if (query?.order) qs.set(\"order\", query.order);\n if (query?.filters && Object.keys(query.filters).length > 0) {\n qs.set(\"filters\", serializeContentFilters(query.filters));\n }\n return qs.toString();\n}\n\nexport function createContentApi(ctx: ContentRequestContext) {\n const prefix = ctx.contentBasePath;\n\n return {\n listEntries(\n contentTypeApiId: string,\n query?: ListContentEntriesQuery,\n init?: FetchRequestInit,\n ) {\n const queryStr = buildListQueryString(query);\n const path = `${prefix}/${encodeURIComponent(contentTypeApiId)}${\n queryStr ? `?${queryStr}` : \"\"\n }`;\n return publicGetNullable<CmsContentEntriesPage>(ctx, path, init);\n },\n\n getEntry(contentTypeApiId: string, idOrSlug: string, init?: FetchRequestInit) {\n return publicGetNullable<CmsContentEntryDto>(\n ctx,\n `${prefix}/${encodeURIComponent(contentTypeApiId)}/${encodeURIComponent(idOrSlug)}`,\n init,\n );\n },\n\n async listMappedEntries(\n contentTypeApiId: string,\n query?: ListContentEntriesQuery,\n init?: FetchRequestInit,\n ): Promise<MappedContentEntriesPage | null> {\n const page = await this.listEntries(contentTypeApiId, query, init);\n if (!page?.docs) return null;\n return {\n entries: page.docs.map(mapCmsEntryToContentEntry),\n totalDocs: page.totalDocs,\n ...(page.category ? { category: page.category } : {}),\n ...(page.maxEntries != null ? { maxEntries: page.maxEntries } : {}),\n };\n },\n\n async getMappedEntry(\n contentTypeApiId: string,\n idOrSlug: string,\n init?: FetchRequestInit,\n ): Promise<ContentEntry | null> {\n const dto = await this.getEntry(contentTypeApiId, idOrSlug, init);\n if (!dto) return null;\n return mapCmsEntryToContentEntry(dto);\n },\n\n async getSingleMappedEntry(\n contentTypeApiId: string,\n init?: FetchRequestInit,\n ): Promise<ContentEntry | null> {\n const page = await this.listMappedEntries(\n contentTypeApiId,\n { limit: 1, page: 1 },\n init,\n );\n return page?.entries?.[0] ?? null;\n },\n };\n}\n\nexport type ContentApi = ReturnType<typeof createContentApi>;\n","import { buildPublicUrl, unwrapResponse, type RequestContext } from \"../http.js\";\nimport type { FetchRequestInit } from \"../types.js\";\nimport type { LeadSubmissionData, SubmitLeadOptions, SubmitLeadResult } from \"./types.js\";\n\nexport type LeadsRequestContext = RequestContext & {\n contentBasePath: string;\n};\n\nexport function createLeadsApi(ctx: LeadsRequestContext) {\n const prefix = ctx.contentBasePath;\n\n return {\n async submit(\n contentTypeApiId: string,\n data: LeadSubmissionData,\n options?: SubmitLeadOptions,\n init?: FetchRequestInit,\n ): Promise<SubmitLeadResult> {\n const url = buildPublicUrl(\n ctx,\n `${prefix}/${encodeURIComponent(contentTypeApiId)}/submissions`,\n );\n\n const body: { data: LeadSubmissionData; status?: string } = { data };\n if (options?.status) {\n body.status = options.status;\n }\n\n const res = await ctx.fetchFn(url, {\n ...init,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...ctx.defaultHeaders,\n ...(init?.headers as Record<string, string> | undefined),\n },\n body: JSON.stringify(body),\n });\n\n return unwrapResponse<SubmitLeadResult>(res);\n },\n };\n}\n\nexport type LeadsApi = ReturnType<typeof createLeadsApi>;\n","import { publicGet, publicPost, type RequestContext } from \"../http.js\";\nimport type { FetchRequestInit } from \"../types.js\";\nimport type {\n ConfirmNewsletterResult,\n NewsletterActionResult,\n SubscribeNewsletterInput,\n UnsubscribeNewsletterInput,\n UpdateNewsletterPreferencesInput,\n} from \"./types.js\";\n\nexport type NewsletterRequestContext = RequestContext & {\n newsletterBasePath: string;\n};\n\nexport function createNewsletterApi(ctx: NewsletterRequestContext) {\n const prefix = ctx.newsletterBasePath;\n\n return {\n subscribe(input: SubscribeNewsletterInput, init?: FetchRequestInit) {\n return publicPost<NewsletterActionResult>(ctx, `${prefix}/subscribe`, input, init);\n },\n\n unsubscribe(input: UnsubscribeNewsletterInput, init?: FetchRequestInit) {\n const body: UnsubscribeNewsletterInput = {};\n if (input.token) body.token = input.token;\n if (input.email) body.email = input.email;\n return publicPost<NewsletterActionResult>(ctx, `${prefix}/unsubscribe`, body, init);\n },\n\n confirm(token: string, init?: FetchRequestInit) {\n const path = `${prefix}/confirm/${encodeURIComponent(token)}`;\n return publicGet<ConfirmNewsletterResult>(ctx, path, init);\n },\n\n updatePreferences(input: UpdateNewsletterPreferencesInput, init?: FetchRequestInit) {\n return publicPost<NewsletterActionResult>(ctx, `${prefix}/preferences`, input, init);\n },\n };\n}\n\nexport type NewsletterApi = ReturnType<typeof createNewsletterApi>;\n","import { createBlogApi } from \"./blog/endpoints.js\";\nimport type { BlogApi } from \"./blog/endpoints.js\";\nimport { createContentApi } from \"./content/endpoints.js\";\nimport type { ContentApi } from \"./content/endpoints.js\";\nimport { createLeadsApi } from \"./leads/endpoints.js\";\nimport type { LeadsApi } from \"./leads/endpoints.js\";\nimport { createNewsletterApi } from \"./newsletter/endpoints.js\";\nimport type { NewsletterApi } from \"./newsletter/endpoints.js\";\n\nexport type CmsClientConfig = {\n /** Base URL, e.g. https://cms-gateway.example.com */\n baseUrl: string;\n /** CMS site Mongo id — appended as ?siteId= on every public request */\n siteId?: string;\n /**\n * Path prefix before /public/blog, /public/api, and /public/newsletter.\n * Default '' for gateway-cms direct (/public/blog/..., etc.).\n * Use '/api/backend/cms' when routing through the main API gateway.\n */\n pathPrefix?: string;\n fetch?: typeof fetch;\n defaultHeaders?: Record<string, string>;\n};\n\nexport type CmsClient = {\n blog: BlogApi;\n content: ContentApi;\n leads: LeadsApi;\n newsletter: NewsletterApi;\n};\n\nfunction normalizeBaseUrl(url: string): string {\n return url.replace(/\\/$/, \"\");\n}\n\nfunction normalizePathPrefix(prefix: string): string {\n const trimmed = prefix.replace(/\\/$/, \"\");\n if (!trimmed) return \"\";\n return trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`;\n}\n\nexport function createCmsClient(config: CmsClientConfig): CmsClient {\n const baseUrl = normalizeBaseUrl(config.baseUrl);\n const pathPrefix = normalizePathPrefix(config.pathPrefix ?? \"\");\n const blogBasePath = `${pathPrefix}/public/blog`.replace(/\\/+/g, \"/\");\n const contentBasePath = `${pathPrefix}/public/api`.replace(/\\/+/g, \"/\");\n const newsletterBasePath = `${pathPrefix}/public/newsletter`.replace(/\\/+/g, \"/\");\n\n const ctx = {\n baseUrl,\n siteId: config.siteId,\n fetchFn: config.fetch ?? globalThis.fetch.bind(globalThis),\n defaultHeaders: config.defaultHeaders ?? {},\n };\n\n return {\n blog: createBlogApi({ ...ctx, blogBasePath }),\n content: createContentApi({ ...ctx, contentBasePath }),\n leads: createLeadsApi({ ...ctx, contentBasePath }),\n newsletter: createNewsletterApi({ ...ctx, newsletterBasePath }),\n };\n}\n","/**\n * Aligns with Utilsy CMS content-type field definitions (admin schema).\n * Entry `data` uses these shapes at runtime for COMPONENT and DYNAMIC_ZONE fields.\n */\n\nexport const ContentTypeCategory = {\n COLLECTION: \"COLLECTION\",\n SINGLE: \"SINGLE\",\n COMPONENT: \"COMPONENT\",\n} as const;\n\nexport type ContentTypeCategory =\n (typeof ContentTypeCategory)[keyof typeof ContentTypeCategory];\n\nexport const FieldType = {\n TEXT: \"TEXT\",\n TEXTAREA: \"TEXTAREA\",\n RICHTEXT: \"RICHTEXT\",\n NUMBER: \"NUMBER\",\n BOOLEAN: \"BOOLEAN\",\n DATE: \"DATE\",\n DATETIME: \"DATETIME\",\n TIME: \"TIME\",\n EMAIL: \"EMAIL\",\n URL: \"URL\",\n MEDIA: \"MEDIA\",\n RELATION: \"RELATION\",\n JSON: \"JSON\",\n ENUM: \"ENUM\",\n PHONE: \"PHONE\",\n WEEKDAY: \"WEEKDAY\",\n COMPONENT: \"COMPONENT\",\n DYNAMIC_ZONE: \"DYNAMIC_ZONE\",\n PAGE_EDITOR: \"PAGE_EDITOR\",\n} as const;\n\nexport type FieldType = (typeof FieldType)[keyof typeof FieldType];\n\nexport type ComponentFieldConfig = {\n componentId: string;\n repeatable?: boolean;\n};\n\nexport type DynamicZoneFieldConfig = {\n components: string[];\n};\n\nexport type ContentTypeField = {\n name: string;\n type: FieldType | string;\n label?: string;\n description?: string;\n required?: boolean;\n unique?: boolean;\n default?: unknown;\n validation?: {\n min?: number;\n max?: number;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n enum?: string[];\n };\n options?: {\n multiple?: boolean;\n placeholder?: string;\n helpText?: string;\n [key: string]: unknown;\n };\n component?: ComponentFieldConfig;\n dynamicZone?: DynamicZoneFieldConfig;\n relation?: {\n contentTypeId: string;\n relationType: string;\n displayField?: string;\n };\n sortOrder?: number;\n};\n\n/** Discriminator for dynamic zone blocks (`__component` = component content type apiId). */\nexport type DynamicZoneBlock = {\n __component: string;\n [key: string]: unknown;\n};\n","import type { ContentEntry } from \"./types.js\";\nimport type { ContentTypeField, DynamicZoneBlock } from \"./field-types.js\";\nimport { FieldType } from \"./field-types.js\";\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/**\n * Safely coerce CMS `fields` JSON to typed field definitions (skips invalid entries).\n */\nexport function parseContentTypeFields(raw: unknown): ContentTypeField[] {\n if (!Array.isArray(raw)) return [];\n const out: ContentTypeField[] = [];\n for (const item of raw) {\n if (!isPlainObject(item)) continue;\n const name = item.name;\n const type = item.type;\n if (typeof name !== \"string\" || !name.trim()) continue;\n if (typeof type !== \"string\" || !type.trim()) continue;\n out.push(item as ContentTypeField);\n }\n return out;\n}\n\nexport function findContentTypeField(\n fields: ContentTypeField[] | undefined,\n fieldName: string,\n): ContentTypeField | undefined {\n return fields?.find((f) => f.name === fieldName);\n}\n\n/**\n * Read a top-level field from entry data.\n */\nexport function getEntryFieldValue(\n entry: Pick<ContentEntry, \"data\">,\n fieldName: string,\n): unknown {\n return entry.data[fieldName];\n}\n\n/**\n * COMPONENT field: single object or repeatable array of objects.\n * Returns a normalized array (empty if missing/invalid).\n */\nexport function getComponentItems(\n entry: Pick<ContentEntry, \"data\">,\n fieldName: string,\n): Record<string, unknown>[] {\n const value = entry.data[fieldName];\n if (value == null) return [];\n if (Array.isArray(value)) {\n return value.filter(isPlainObject);\n }\n if (isPlainObject(value)) {\n return [value];\n }\n return [];\n}\n\n/**\n * Single COMPONENT instance (first item when repeatable, or the object when not).\n */\nexport function getComponentItem(\n entry: Pick<ContentEntry, \"data\">,\n fieldName: string,\n): Record<string, unknown> | undefined {\n const items = getComponentItems(entry, fieldName);\n return items[0];\n}\n\n/**\n * DYNAMIC_ZONE field: array of blocks with `__component` apiId discriminator.\n */\nexport function getDynamicZoneBlocks(\n entry: Pick<ContentEntry, \"data\">,\n fieldName: string,\n): DynamicZoneBlock[] {\n const value = entry.data[fieldName];\n if (!Array.isArray(value)) return [];\n return value.filter(\n (item): item is DynamicZoneBlock =>\n isPlainObject(item) &&\n typeof item.__component === \"string\" &&\n item.__component.length > 0,\n );\n}\n\n/** Blocks in a dynamic zone that match a component apiId. */\nexport function filterDynamicZoneByComponent(\n blocks: DynamicZoneBlock[],\n componentApiId: string,\n): DynamicZoneBlock[] {\n return blocks.filter((b) => b.__component === componentApiId);\n}\n\n/** Whether a field definition is a repeatable component. */\nexport function isRepeatableComponentField(field: ContentTypeField): boolean {\n return (\n field.type === FieldType.COMPONENT && field.component?.repeatable === true\n );\n}\n\n/** Whether a field definition is a dynamic zone. */\nexport function isDynamicZoneField(field: ContentTypeField): boolean {\n return field.type === FieldType.DYNAMIC_ZONE;\n}\n"]}
|
package/dist/react.cjs
CHANGED
|
@@ -190,6 +190,31 @@ function useContentEntry(contentTypeApiId, idOrSlug, options) {
|
|
|
190
190
|
}, [refetch]);
|
|
191
191
|
return { entry, loading, error, refetch };
|
|
192
192
|
}
|
|
193
|
+
function useSingleContentEntry(contentTypeApiId, options) {
|
|
194
|
+
const client = useCmsClient();
|
|
195
|
+
const [entry, setEntry] = react.useState(null);
|
|
196
|
+
const [loading, setLoading] = react.useState(true);
|
|
197
|
+
const [error, setError] = react.useState(null);
|
|
198
|
+
const enabled = options?.enabled !== false && !!contentTypeApiId;
|
|
199
|
+
const refetch = react.useCallback(async () => {
|
|
200
|
+
if (!enabled) return;
|
|
201
|
+
setLoading(true);
|
|
202
|
+
setError(null);
|
|
203
|
+
try {
|
|
204
|
+
const data = await client.content.getSingleMappedEntry(contentTypeApiId);
|
|
205
|
+
setEntry(data);
|
|
206
|
+
} catch (e) {
|
|
207
|
+
setError(e instanceof Error ? e : new Error(String(e)));
|
|
208
|
+
setEntry(null);
|
|
209
|
+
} finally {
|
|
210
|
+
setLoading(false);
|
|
211
|
+
}
|
|
212
|
+
}, [client, contentTypeApiId, enabled]);
|
|
213
|
+
react.useEffect(() => {
|
|
214
|
+
refetch();
|
|
215
|
+
}, [refetch]);
|
|
216
|
+
return { entry, loading, error, refetch };
|
|
217
|
+
}
|
|
193
218
|
function useSubmitLead(contentTypeApiId) {
|
|
194
219
|
const client = useCmsClient();
|
|
195
220
|
const [submitting, setSubmitting] = react.useState(false);
|
|
@@ -315,6 +340,7 @@ exports.useNewsletterConfirm = useNewsletterConfirm;
|
|
|
315
340
|
exports.useNewsletterSubscribe = useNewsletterSubscribe;
|
|
316
341
|
exports.useNewsletterUnsubscribe = useNewsletterUnsubscribe;
|
|
317
342
|
exports.useNewsletterUpdatePreferences = useNewsletterUpdatePreferences;
|
|
343
|
+
exports.useSingleContentEntry = useSingleContentEntry;
|
|
318
344
|
exports.useSubmitLead = useSubmitLead;
|
|
319
345
|
exports.useVisitorId = useVisitorId;
|
|
320
346
|
//# sourceMappingURL=react.cjs.map
|
package/dist/react.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/react/context.ts","../src/react/provider.tsx","../src/react/use-cms-client.ts","../src/react/use-visitor-id.ts","../src/react/use-blog-engagement.ts","../src/react/use-blog-like.ts","../src/react/use-blog-comments.ts","../src/react/use-content-entries.ts","../src/react/use-content-entry.ts","../src/react/use-submit-lead.ts","../src/react/use-newsletter.ts"],"names":["createContext","useContext","useState","useEffect","useCallback"],"mappings":"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","file":"react.cjs","sourcesContent":["import { createContext } from \"react\";\nimport type { CmsClient } from \"../client.js\";\n\nexport const CmsClientContext = createContext<CmsClient | null>(null);\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { CmsClient } from \"../client.js\";\nimport { CmsClientContext } from \"./context.js\";\n\nexport type CmsProviderProps = {\n client: CmsClient;\n children: ReactNode;\n};\n\nexport function CmsProvider({ client, children }: CmsProviderProps) {\n return <CmsClientContext.Provider value={client}>{children}</CmsClientContext.Provider>;\n}\n","\"use client\";\n\nimport { useContext } from \"react\";\nimport type { CmsClient } from \"../client.js\";\nimport { CmsClientContext } from \"./context.js\";\n\nexport function useCmsClient(): CmsClient {\n const client = useContext(CmsClientContext);\n if (!client) {\n throw new Error(\"useCmsClient must be used within a <CmsProvider client={...}>\");\n }\n return client;\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nconst DEFAULT_STORAGE_KEY = \"utilsy_cms_visitor_id\";\n\nexport type UseVisitorIdOptions = {\n storageKey?: string;\n};\n\nexport function useVisitorId(options?: UseVisitorIdOptions): string {\n const storageKey = options?.storageKey ?? DEFAULT_STORAGE_KEY;\n const [visitorId, setVisitorId] = useState(\"\");\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n let id = localStorage.getItem(storageKey);\n if (!id) {\n id =\n typeof crypto !== \"undefined\" && \"randomUUID\" in crypto\n ? crypto.randomUUID()\n : `v-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n localStorage.setItem(storageKey, id);\n }\n setVisitorId(id);\n }, [storageKey]);\n\n return visitorId;\n}\n\n/** Non-hook helper for event handlers */\nexport function getVisitorId(storageKey = DEFAULT_STORAGE_KEY): string {\n if (typeof window === \"undefined\") return \"\";\n let id = localStorage.getItem(storageKey);\n if (!id) {\n id =\n typeof crypto !== \"undefined\" && \"randomUUID\" in crypto\n ? crypto.randomUUID()\n : `v-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n localStorage.setItem(storageKey, id);\n }\n return id;\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport type { BlogEngagement } from \"../blog/types.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\nimport { getVisitorId } from \"./use-visitor-id.js\";\n\nexport type UseBlogEngagementOptions = {\n visitorId?: string;\n storageKey?: string;\n};\n\nexport function useBlogEngagement(postId: string, options?: UseBlogEngagementOptions) {\n const client = useCmsClient();\n const [engagement, setEngagement] = useState<BlogEngagement | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const refetch = useCallback(async () => {\n if (!postId) return;\n setLoading(true);\n setError(null);\n try {\n const visitorId =\n options?.visitorId ??\n (typeof window !== \"undefined\" ? getVisitorId(options?.storageKey) : undefined);\n const data = await client.blog.getEngagement(postId, { visitorId });\n setEngagement(data);\n } catch (e) {\n setError(e instanceof Error ? e : new Error(String(e)));\n } finally {\n setLoading(false);\n }\n }, [client, postId, options?.visitorId, options?.storageKey]);\n\n useEffect(() => {\n refetch();\n }, [refetch]);\n\n return { engagement, loading, error, refetch };\n}\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\nimport { useBlogEngagement } from \"./use-blog-engagement.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\nimport { getVisitorId } from \"./use-visitor-id.js\";\n\nexport type UseBlogLikeOptions = {\n visitorId?: string;\n storageKey?: string;\n};\n\nexport function useBlogLike(postId: string, options?: UseBlogLikeOptions) {\n const client = useCmsClient();\n const { engagement, loading: engagementLoading, refetch } = useBlogEngagement(postId, options);\n const [toggling, setToggling] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const toggle = useCallback(async () => {\n if (!postId) return;\n setToggling(true);\n setError(null);\n try {\n const visitorId =\n options?.visitorId ??\n (typeof window !== \"undefined\" ? getVisitorId(options?.storageKey) : undefined);\n await client.blog.toggleLike(postId, { visitorId });\n await refetch();\n } catch (e) {\n setError(e instanceof Error ? e : new Error(String(e)));\n } finally {\n setToggling(false);\n }\n }, [client, postId, options?.visitorId, options?.storageKey, refetch]);\n\n return {\n liked: engagement?.likedByMe ?? false,\n likeCount: engagement?.likeCount ?? 0,\n viewCount: engagement?.viewCount ?? 0,\n commentCount: engagement?.commentCount ?? 0,\n loading: engagementLoading,\n toggling,\n error,\n toggle,\n refetch,\n };\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport type { BlogComment, CreateBlogCommentInput } from \"../blog/types.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\n\nexport function useBlogComments(postId: string) {\n const client = useCmsClient();\n const [comments, setComments] = useState<BlogComment[]>([]);\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const refetch = useCallback(async () => {\n if (!postId) return;\n setLoading(true);\n setError(null);\n try {\n const data = await client.blog.listMappedComments(postId);\n setComments(data ?? []);\n } catch (e) {\n setError(e instanceof Error ? e : new Error(String(e)));\n } finally {\n setLoading(false);\n }\n }, [client, postId]);\n\n useEffect(() => {\n refetch();\n }, [refetch]);\n\n const submitComment = useCallback(\n async (input: CreateBlogCommentInput) => {\n if (!postId) return;\n setSubmitting(true);\n setError(null);\n try {\n await client.blog.createComment(postId, input);\n await refetch();\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n setError(err);\n throw err;\n } finally {\n setSubmitting(false);\n }\n },\n [client, postId, refetch],\n );\n\n return { comments, loading, submitting, error, refetch, submitComment };\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport type { ContentEntry, ListContentEntriesQuery } from \"../content/types.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\n\nexport type UseContentEntriesOptions = {\n enabled?: boolean;\n};\n\nexport function useContentEntries(\n contentTypeApiId: string,\n query?: ListContentEntriesQuery,\n options?: UseContentEntriesOptions,\n) {\n const client = useCmsClient();\n const [entries, setEntries] = useState<ContentEntry[]>([]);\n const [totalDocs, setTotalDocs] = useState(0);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const enabled = options?.enabled !== false && !!contentTypeApiId;\n const queryKey = JSON.stringify(query ?? {});\n\n const refetch = useCallback(async () => {\n if (!enabled) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.content.listMappedEntries(contentTypeApiId, query);\n setEntries(result?.entries ?? []);\n setTotalDocs(result?.totalDocs ?? 0);\n } catch (e) {\n setError(e instanceof Error ? e : new Error(String(e)));\n setEntries([]);\n setTotalDocs(0);\n } finally {\n setLoading(false);\n }\n }, [client, contentTypeApiId, enabled, queryKey, query]);\n\n useEffect(() => {\n refetch();\n }, [refetch]);\n\n return { entries, totalDocs, loading, error, refetch };\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport type { ContentEntry } from \"../content/types.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\n\nexport type UseContentEntryOptions = {\n enabled?: boolean;\n};\n\nexport function useContentEntry(\n contentTypeApiId: string,\n idOrSlug: string,\n options?: UseContentEntryOptions,\n) {\n const client = useCmsClient();\n const [entry, setEntry] = useState<ContentEntry | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const enabled = options?.enabled !== false && !!contentTypeApiId && !!idOrSlug;\n\n const refetch = useCallback(async () => {\n if (!enabled) return;\n setLoading(true);\n setError(null);\n try {\n const data = await client.content.getMappedEntry(contentTypeApiId, idOrSlug);\n setEntry(data);\n } catch (e) {\n setError(e instanceof Error ? e : new Error(String(e)));\n setEntry(null);\n } finally {\n setLoading(false);\n }\n }, [client, contentTypeApiId, idOrSlug, enabled]);\n\n useEffect(() => {\n refetch();\n }, [refetch]);\n\n return { entry, loading, error, refetch };\n}\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\nimport type { LeadSubmissionData, SubmitLeadOptions, SubmitLeadResult } from \"../leads/types.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\n\nexport function useSubmitLead(contentTypeApiId: string) {\n const client = useCmsClient();\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const submit = useCallback(\n async (\n data: LeadSubmissionData,\n options?: SubmitLeadOptions,\n ): Promise<SubmitLeadResult | null> => {\n if (!contentTypeApiId) return null;\n setSubmitting(true);\n setError(null);\n try {\n return await client.leads.submit(contentTypeApiId, data, options);\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n setError(err);\n return null;\n } finally {\n setSubmitting(false);\n }\n },\n [client, contentTypeApiId],\n );\n\n return { submit, submitting, error };\n}\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\nimport type {\n ConfirmNewsletterResult,\n NewsletterActionResult,\n SubscribeNewsletterInput,\n UnsubscribeNewsletterInput,\n UpdateNewsletterPreferencesInput,\n} from \"../newsletter/types.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\n\nexport function useNewsletterSubscribe() {\n const client = useCmsClient();\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const subscribe = useCallback(\n async (input: SubscribeNewsletterInput): Promise<NewsletterActionResult | null> => {\n setSubmitting(true);\n setError(null);\n try {\n return await client.newsletter.subscribe(input);\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n setError(err);\n return null;\n } finally {\n setSubmitting(false);\n }\n },\n [client],\n );\n\n return { subscribe, submitting, error };\n}\n\nexport function useNewsletterUnsubscribe() {\n const client = useCmsClient();\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const unsubscribe = useCallback(\n async (input: UnsubscribeNewsletterInput): Promise<NewsletterActionResult | null> => {\n setSubmitting(true);\n setError(null);\n try {\n return await client.newsletter.unsubscribe(input);\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n setError(err);\n return null;\n } finally {\n setSubmitting(false);\n }\n },\n [client],\n );\n\n return { unsubscribe, submitting, error };\n}\n\nexport function useNewsletterUpdatePreferences() {\n const client = useCmsClient();\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const updatePreferences = useCallback(\n async (\n input: UpdateNewsletterPreferencesInput,\n ): Promise<NewsletterActionResult | null> => {\n setSubmitting(true);\n setError(null);\n try {\n return await client.newsletter.updatePreferences(input);\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n setError(err);\n return null;\n } finally {\n setSubmitting(false);\n }\n },\n [client],\n );\n\n return { updatePreferences, submitting, error };\n}\n\nexport function useNewsletterConfirm() {\n const client = useCmsClient();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const confirm = useCallback(\n async (token: string): Promise<ConfirmNewsletterResult | null> => {\n if (!token) return null;\n setLoading(true);\n setError(null);\n try {\n return await client.newsletter.confirm(token);\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n setError(err);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [client],\n );\n\n return { confirm, loading, error };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/react/context.ts","../src/react/provider.tsx","../src/react/use-cms-client.ts","../src/react/use-visitor-id.ts","../src/react/use-blog-engagement.ts","../src/react/use-blog-like.ts","../src/react/use-blog-comments.ts","../src/react/use-content-entries.ts","../src/react/use-content-entry.ts","../src/react/use-single-content-entry.ts","../src/react/use-submit-lead.ts","../src/react/use-newsletter.ts"],"names":["createContext","useContext","useState","useEffect","useCallback"],"mappings":"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","file":"react.cjs","sourcesContent":["import { createContext } from \"react\";\nimport type { CmsClient } from \"../client.js\";\n\nexport const CmsClientContext = createContext<CmsClient | null>(null);\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { CmsClient } from \"../client.js\";\nimport { CmsClientContext } from \"./context.js\";\n\nexport type CmsProviderProps = {\n client: CmsClient;\n children: ReactNode;\n};\n\nexport function CmsProvider({ client, children }: CmsProviderProps) {\n return <CmsClientContext.Provider value={client}>{children}</CmsClientContext.Provider>;\n}\n","\"use client\";\n\nimport { useContext } from \"react\";\nimport type { CmsClient } from \"../client.js\";\nimport { CmsClientContext } from \"./context.js\";\n\nexport function useCmsClient(): CmsClient {\n const client = useContext(CmsClientContext);\n if (!client) {\n throw new Error(\"useCmsClient must be used within a <CmsProvider client={...}>\");\n }\n return client;\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nconst DEFAULT_STORAGE_KEY = \"utilsy_cms_visitor_id\";\n\nexport type UseVisitorIdOptions = {\n storageKey?: string;\n};\n\nexport function useVisitorId(options?: UseVisitorIdOptions): string {\n const storageKey = options?.storageKey ?? DEFAULT_STORAGE_KEY;\n const [visitorId, setVisitorId] = useState(\"\");\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n let id = localStorage.getItem(storageKey);\n if (!id) {\n id =\n typeof crypto !== \"undefined\" && \"randomUUID\" in crypto\n ? crypto.randomUUID()\n : `v-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n localStorage.setItem(storageKey, id);\n }\n setVisitorId(id);\n }, [storageKey]);\n\n return visitorId;\n}\n\n/** Non-hook helper for event handlers */\nexport function getVisitorId(storageKey = DEFAULT_STORAGE_KEY): string {\n if (typeof window === \"undefined\") return \"\";\n let id = localStorage.getItem(storageKey);\n if (!id) {\n id =\n typeof crypto !== \"undefined\" && \"randomUUID\" in crypto\n ? crypto.randomUUID()\n : `v-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n localStorage.setItem(storageKey, id);\n }\n return id;\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport type { BlogEngagement } from \"../blog/types.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\nimport { getVisitorId } from \"./use-visitor-id.js\";\n\nexport type UseBlogEngagementOptions = {\n visitorId?: string;\n storageKey?: string;\n};\n\nexport function useBlogEngagement(postId: string, options?: UseBlogEngagementOptions) {\n const client = useCmsClient();\n const [engagement, setEngagement] = useState<BlogEngagement | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const refetch = useCallback(async () => {\n if (!postId) return;\n setLoading(true);\n setError(null);\n try {\n const visitorId =\n options?.visitorId ??\n (typeof window !== \"undefined\" ? getVisitorId(options?.storageKey) : undefined);\n const data = await client.blog.getEngagement(postId, { visitorId });\n setEngagement(data);\n } catch (e) {\n setError(e instanceof Error ? e : new Error(String(e)));\n } finally {\n setLoading(false);\n }\n }, [client, postId, options?.visitorId, options?.storageKey]);\n\n useEffect(() => {\n refetch();\n }, [refetch]);\n\n return { engagement, loading, error, refetch };\n}\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\nimport { useBlogEngagement } from \"./use-blog-engagement.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\nimport { getVisitorId } from \"./use-visitor-id.js\";\n\nexport type UseBlogLikeOptions = {\n visitorId?: string;\n storageKey?: string;\n};\n\nexport function useBlogLike(postId: string, options?: UseBlogLikeOptions) {\n const client = useCmsClient();\n const { engagement, loading: engagementLoading, refetch } = useBlogEngagement(postId, options);\n const [toggling, setToggling] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const toggle = useCallback(async () => {\n if (!postId) return;\n setToggling(true);\n setError(null);\n try {\n const visitorId =\n options?.visitorId ??\n (typeof window !== \"undefined\" ? getVisitorId(options?.storageKey) : undefined);\n await client.blog.toggleLike(postId, { visitorId });\n await refetch();\n } catch (e) {\n setError(e instanceof Error ? e : new Error(String(e)));\n } finally {\n setToggling(false);\n }\n }, [client, postId, options?.visitorId, options?.storageKey, refetch]);\n\n return {\n liked: engagement?.likedByMe ?? false,\n likeCount: engagement?.likeCount ?? 0,\n viewCount: engagement?.viewCount ?? 0,\n commentCount: engagement?.commentCount ?? 0,\n loading: engagementLoading,\n toggling,\n error,\n toggle,\n refetch,\n };\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport type { BlogComment, CreateBlogCommentInput } from \"../blog/types.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\n\nexport function useBlogComments(postId: string) {\n const client = useCmsClient();\n const [comments, setComments] = useState<BlogComment[]>([]);\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const refetch = useCallback(async () => {\n if (!postId) return;\n setLoading(true);\n setError(null);\n try {\n const data = await client.blog.listMappedComments(postId);\n setComments(data ?? []);\n } catch (e) {\n setError(e instanceof Error ? e : new Error(String(e)));\n } finally {\n setLoading(false);\n }\n }, [client, postId]);\n\n useEffect(() => {\n refetch();\n }, [refetch]);\n\n const submitComment = useCallback(\n async (input: CreateBlogCommentInput) => {\n if (!postId) return;\n setSubmitting(true);\n setError(null);\n try {\n await client.blog.createComment(postId, input);\n await refetch();\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n setError(err);\n throw err;\n } finally {\n setSubmitting(false);\n }\n },\n [client, postId, refetch],\n );\n\n return { comments, loading, submitting, error, refetch, submitComment };\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport type { ContentEntry, ListContentEntriesQuery } from \"../content/types.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\n\nexport type UseContentEntriesOptions = {\n enabled?: boolean;\n};\n\nexport function useContentEntries(\n contentTypeApiId: string,\n query?: ListContentEntriesQuery,\n options?: UseContentEntriesOptions,\n) {\n const client = useCmsClient();\n const [entries, setEntries] = useState<ContentEntry[]>([]);\n const [totalDocs, setTotalDocs] = useState(0);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const enabled = options?.enabled !== false && !!contentTypeApiId;\n const queryKey = JSON.stringify(query ?? {});\n\n const refetch = useCallback(async () => {\n if (!enabled) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.content.listMappedEntries(contentTypeApiId, query);\n setEntries(result?.entries ?? []);\n setTotalDocs(result?.totalDocs ?? 0);\n } catch (e) {\n setError(e instanceof Error ? e : new Error(String(e)));\n setEntries([]);\n setTotalDocs(0);\n } finally {\n setLoading(false);\n }\n }, [client, contentTypeApiId, enabled, queryKey, query]);\n\n useEffect(() => {\n refetch();\n }, [refetch]);\n\n return { entries, totalDocs, loading, error, refetch };\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport type { ContentEntry } from \"../content/types.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\n\nexport type UseContentEntryOptions = {\n enabled?: boolean;\n};\n\nexport function useContentEntry(\n contentTypeApiId: string,\n idOrSlug: string,\n options?: UseContentEntryOptions,\n) {\n const client = useCmsClient();\n const [entry, setEntry] = useState<ContentEntry | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const enabled = options?.enabled !== false && !!contentTypeApiId && !!idOrSlug;\n\n const refetch = useCallback(async () => {\n if (!enabled) return;\n setLoading(true);\n setError(null);\n try {\n const data = await client.content.getMappedEntry(contentTypeApiId, idOrSlug);\n setEntry(data);\n } catch (e) {\n setError(e instanceof Error ? e : new Error(String(e)));\n setEntry(null);\n } finally {\n setLoading(false);\n }\n }, [client, contentTypeApiId, idOrSlug, enabled]);\n\n useEffect(() => {\n refetch();\n }, [refetch]);\n\n return { entry, loading, error, refetch };\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport type { ContentEntry } from \"../content/types.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\n\nexport type UseSingleContentEntryOptions = {\n enabled?: boolean;\n};\n\nexport function useSingleContentEntry(\n contentTypeApiId: string,\n options?: UseSingleContentEntryOptions,\n) {\n const client = useCmsClient();\n const [entry, setEntry] = useState<ContentEntry | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const enabled = options?.enabled !== false && !!contentTypeApiId;\n\n const refetch = useCallback(async () => {\n if (!enabled) return;\n setLoading(true);\n setError(null);\n try {\n const data = await client.content.getSingleMappedEntry(contentTypeApiId);\n setEntry(data);\n } catch (e) {\n setError(e instanceof Error ? e : new Error(String(e)));\n setEntry(null);\n } finally {\n setLoading(false);\n }\n }, [client, contentTypeApiId, enabled]);\n\n useEffect(() => {\n refetch();\n }, [refetch]);\n\n return { entry, loading, error, refetch };\n}\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\nimport type { LeadSubmissionData, SubmitLeadOptions, SubmitLeadResult } from \"../leads/types.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\n\nexport function useSubmitLead(contentTypeApiId: string) {\n const client = useCmsClient();\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const submit = useCallback(\n async (\n data: LeadSubmissionData,\n options?: SubmitLeadOptions,\n ): Promise<SubmitLeadResult | null> => {\n if (!contentTypeApiId) return null;\n setSubmitting(true);\n setError(null);\n try {\n return await client.leads.submit(contentTypeApiId, data, options);\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n setError(err);\n return null;\n } finally {\n setSubmitting(false);\n }\n },\n [client, contentTypeApiId],\n );\n\n return { submit, submitting, error };\n}\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\nimport type {\n ConfirmNewsletterResult,\n NewsletterActionResult,\n SubscribeNewsletterInput,\n UnsubscribeNewsletterInput,\n UpdateNewsletterPreferencesInput,\n} from \"../newsletter/types.js\";\nimport { useCmsClient } from \"./use-cms-client.js\";\n\nexport function useNewsletterSubscribe() {\n const client = useCmsClient();\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const subscribe = useCallback(\n async (input: SubscribeNewsletterInput): Promise<NewsletterActionResult | null> => {\n setSubmitting(true);\n setError(null);\n try {\n return await client.newsletter.subscribe(input);\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n setError(err);\n return null;\n } finally {\n setSubmitting(false);\n }\n },\n [client],\n );\n\n return { subscribe, submitting, error };\n}\n\nexport function useNewsletterUnsubscribe() {\n const client = useCmsClient();\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const unsubscribe = useCallback(\n async (input: UnsubscribeNewsletterInput): Promise<NewsletterActionResult | null> => {\n setSubmitting(true);\n setError(null);\n try {\n return await client.newsletter.unsubscribe(input);\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n setError(err);\n return null;\n } finally {\n setSubmitting(false);\n }\n },\n [client],\n );\n\n return { unsubscribe, submitting, error };\n}\n\nexport function useNewsletterUpdatePreferences() {\n const client = useCmsClient();\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const updatePreferences = useCallback(\n async (\n input: UpdateNewsletterPreferencesInput,\n ): Promise<NewsletterActionResult | null> => {\n setSubmitting(true);\n setError(null);\n try {\n return await client.newsletter.updatePreferences(input);\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n setError(err);\n return null;\n } finally {\n setSubmitting(false);\n }\n },\n [client],\n );\n\n return { updatePreferences, submitting, error };\n}\n\nexport function useNewsletterConfirm() {\n const client = useCmsClient();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const confirm = useCallback(\n async (token: string): Promise<ConfirmNewsletterResult | null> => {\n if (!token) return null;\n setLoading(true);\n setError(null);\n try {\n return await client.newsletter.confirm(token);\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n setError(err);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [client],\n );\n\n return { confirm, loading, error };\n}\n"]}
|
package/dist/react.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
|
-
import { l as CmsClient, e as BlogEngagement, c as BlogComment, v as CreateBlogCommentInput, z as ListContentEntriesQuery, s as ContentEntry, L as LeadSubmissionData, S as SubmitLeadOptions, E as SubmitLeadResult, q as ConfirmNewsletterResult, G as SubscribeNewsletterInput, N as NewsletterActionResult, U as UnsubscribeNewsletterInput, H as UpdateNewsletterPreferencesInput } from './client-
|
|
3
|
+
import { l as CmsClient, e as BlogEngagement, c as BlogComment, v as CreateBlogCommentInput, z as ListContentEntriesQuery, s as ContentEntry, L as LeadSubmissionData, S as SubmitLeadOptions, E as SubmitLeadResult, q as ConfirmNewsletterResult, G as SubscribeNewsletterInput, N as NewsletterActionResult, U as UnsubscribeNewsletterInput, H as UpdateNewsletterPreferencesInput } from './client-awWyf-VL.cjs';
|
|
4
4
|
|
|
5
5
|
type CmsProviderProps = {
|
|
6
6
|
client: CmsClient;
|
|
@@ -74,6 +74,16 @@ declare function useContentEntry(contentTypeApiId: string, idOrSlug: string, opt
|
|
|
74
74
|
refetch: () => Promise<void>;
|
|
75
75
|
};
|
|
76
76
|
|
|
77
|
+
type UseSingleContentEntryOptions = {
|
|
78
|
+
enabled?: boolean;
|
|
79
|
+
};
|
|
80
|
+
declare function useSingleContentEntry(contentTypeApiId: string, options?: UseSingleContentEntryOptions): {
|
|
81
|
+
entry: ContentEntry | null;
|
|
82
|
+
loading: boolean;
|
|
83
|
+
error: Error | null;
|
|
84
|
+
refetch: () => Promise<void>;
|
|
85
|
+
};
|
|
86
|
+
|
|
77
87
|
declare function useSubmitLead(contentTypeApiId: string): {
|
|
78
88
|
submit: (data: LeadSubmissionData, options?: SubmitLeadOptions) => Promise<SubmitLeadResult | null>;
|
|
79
89
|
submitting: boolean;
|
|
@@ -101,4 +111,4 @@ declare function useNewsletterConfirm(): {
|
|
|
101
111
|
error: Error | null;
|
|
102
112
|
};
|
|
103
113
|
|
|
104
|
-
export { CmsProvider, type CmsProviderProps, type UseBlogEngagementOptions, type UseBlogLikeOptions, type UseContentEntriesOptions, type UseContentEntryOptions, type UseVisitorIdOptions, getVisitorId, useBlogComments, useBlogEngagement, useBlogLike, useCmsClient, useContentEntries, useContentEntry, useNewsletterConfirm, useNewsletterSubscribe, useNewsletterUnsubscribe, useNewsletterUpdatePreferences, useSubmitLead, useVisitorId };
|
|
114
|
+
export { CmsProvider, type CmsProviderProps, type UseBlogEngagementOptions, type UseBlogLikeOptions, type UseContentEntriesOptions, type UseContentEntryOptions, type UseSingleContentEntryOptions, type UseVisitorIdOptions, getVisitorId, useBlogComments, useBlogEngagement, useBlogLike, useCmsClient, useContentEntries, useContentEntry, useNewsletterConfirm, useNewsletterSubscribe, useNewsletterUnsubscribe, useNewsletterUpdatePreferences, useSingleContentEntry, useSubmitLead, useVisitorId };
|