@b10cks/client 1.5.0 → 1.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 +23 -0
- package/dist/index.cjs +19 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +46 -1
- package/dist/index.mjs +613 -560
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -7
- package/dist/index.js +0 -19
- package/dist/index.js.map +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/content.ts","../src/data-api.ts","../src/preview-bridge.ts","../src/editable.ts","../src/preview-store.ts","../src/sitemap.ts","../src/index.ts"],"sourcesContent":["import type { B10cksLink } from './types'\n\nexport interface B10cksLinkResolved {\n href: string\n target: string\n}\n\n/**\n * Resolves a B10cksLink value to a plain { href, target } object.\n *\n * - `'email'` links produce a `mailto:` href with optional subject/body/cc/bcc query params.\n * - `'url'` and `'internal'` links use the stored `url` field; an `anchor` is appended as a\n * hash fragment when present.\n * - `'asset'` links cannot be resolved to a URL without the asset record — returns `undefined`.\n * - Locale prefixing and router integration are intentionally left to the caller.\n */\nexport function resolveB10cksLink(\n link: B10cksLink | undefined | null\n): B10cksLinkResolved | undefined {\n if (!link) return undefined\n\n if (link.type === 'email') {\n const params = new URLSearchParams()\n if (link.subject) params.set('subject', link.subject)\n if (link.body) params.set('body', link.body)\n if (link.cc) params.set('cc', link.cc)\n if (link.bcc) params.set('bcc', link.bcc)\n const query = params.toString()\n return { href: `mailto:${link.email}${query ? `?${query}` : ''}`, target: '_self' }\n }\n\n if (link.type === 'asset') {\n return undefined\n }\n\n // 'url' and 'internal' share url + target + optional anchor\n const target = link.target ?? '_self'\n let href = link.url ?? ''\n if ('anchor' in link && link.anchor) {\n href = `${href.trimEnd()}#${link.anchor}`\n }\n\n return { href, target }\n}\n","import type {\n IBCollectionResponse,\n Endpoint,\n IBBaseQueryParams,\n IBBlock,\n IBContent,\n IBContentQueryParams,\n IBDataEntry,\n IBDataSource,\n IBGetBlocksParams,\n IBGetContentsParams,\n IBGetRedirectsParams,\n IBRedirect,\n IBRedirectLookupResult,\n IBSearchParams,\n IBSearchResponse,\n IBSearchResult,\n IBSitemapEntry,\n IBSpace,\n} from './types'\n\ntype ApiQueryParams = Omit<IBBaseQueryParams, 'token'> & Record<string, unknown>\ntype ApiCollectionResponse<T> =\n | T[]\n | IBCollectionResponse<T>\n | { data: T[]; rv?: string | number }\n | { data: IBCollectionResponse<T>; rv?: string | number }\ntype ApiCollectionResult<T> =\n | ApiCollectionResponse<T>\n | { data: ApiCollectionResponse<T>; rv?: string | number }\n\nexport interface CollectionFetchOptions {\n allPages?: boolean\n}\n\nexport interface RedirectFetchOptions extends CollectionFetchOptions {\n forceRefresh?: boolean\n}\n\nexport interface DataApiClient {\n get<T>(\n endpoint: Endpoint,\n params?: ApiQueryParams\n ): Promise<T | { data: T; rv?: string | number }>\n getAll<T>(endpoint: Endpoint, params?: ApiQueryParams): Promise<T[]>\n post?<T>(endpoint: string, body?: unknown, params?: ApiQueryParams): Promise<T>\n setRv(value: string | number): void\n}\n\nexport type RedirectMap = Record<string, { target: string; status_code: number }>\n\nexport interface GetConfigOptions extends Omit<IBContentQueryParams, 'token' | 'full_slug'> {\n slug?: string\n language?: string\n bypassCache?: boolean\n}\n\nfunction serializeFilterValue(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined\n if (typeof value === 'boolean') return String(value)\n if (typeof value === 'number') return String(value)\n if (typeof value === 'string') return value\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n const obj = value as Record<string, unknown>\n\n if ('null' in obj) return 'null:'\n if ('!null' in obj) return '!null:'\n if ('between' in obj) {\n const [from, to] = obj.between as [string, string]\n return `${from}...${to}`\n }\n\n const ops = [\n 'eq', 'neq', 'like', '!like', '^like', 'like$',\n 'lt', 'gt', 'lte', 'gte', 'in', '!in', 'empty', '!empty',\n ] as const\n for (const op of ops) {\n if (op in obj) {\n const val = obj[op]\n if (Array.isArray(val)) return `${op}:${val.join(',')}`\n return `${op}:${String(val)}`\n }\n }\n }\n\n return undefined\n}\n\nexport function serializeFilter(filter: Record<string, unknown>): Record<string, string> {\n const result: Record<string, string> = {}\n for (const [key, value] of Object.entries(filter)) {\n const serialized = serializeFilterValue(value)\n if (serialized !== undefined) {\n result[key] = serialized\n }\n }\n return result\n}\n\nfunction buildParamsWithFilter(\n params: Record<string, unknown>,\n filter: unknown,\n sort: string | string[] | undefined\n): ApiQueryParams {\n const filterParams =\n filter && typeof filter === 'object'\n ? serializeFilter(filter as Record<string, unknown>)\n : {}\n const sortParam =\n Array.isArray(sort) ? { sort: sort.join(',') } : sort != null ? { sort } : {}\n return { ...params, ...filterParams, ...sortParam }\n}\n\nexport class B10cksDataApi {\n private redirectsCache: RedirectMap | null = null\n private readonly configCache = new Map<string, unknown>()\n\n constructor(private readonly client: DataApiClient) {}\n\n async getResource<T>(endpoint: Endpoint, params: ApiQueryParams = {}): Promise<T> {\n const response = await this.client.get<T>(endpoint, params)\n return this.unwrapResource(response)\n }\n\n async getCollection<T>(\n endpoint: Endpoint,\n params: ApiQueryParams = {},\n options: CollectionFetchOptions = {}\n ): Promise<T[]> {\n if (options.allPages) {\n return this.client.getAll<T>(endpoint, params)\n }\n\n const response = await this.client.get<ApiCollectionResponse<T>>(endpoint, params)\n return this.unwrapCollection(response)\n }\n\n async getContent<T = Record<string, unknown>>(\n fullSlug: string,\n params: Omit<IBContentQueryParams, 'token' | 'full_slug'> = {}\n ): Promise<IBContent<T>> {\n return this.getResource<IBContent<T>>(`contents/${fullSlug}`, params)\n }\n\n async getContents<T = Record<string, unknown>>(\n params: IBGetContentsParams = {},\n options: CollectionFetchOptions = {}\n ): Promise<IBContent<T>[]> {\n const { filter, sort, ...rest } = params\n return this.getCollection<IBContent<T>>(\n 'contents',\n buildParamsWithFilter(rest, filter, sort),\n options\n )\n }\n\n async getBlock(blockId: string, params: ApiQueryParams = {}): Promise<IBBlock> {\n return this.getResource<IBBlock>(`blocks/${blockId}`, params)\n }\n\n async getBlocks(\n params: IBGetBlocksParams = {},\n options: CollectionFetchOptions = {}\n ): Promise<IBBlock[]> {\n const { filter, ...rest } = params\n return this.getCollection<IBBlock>(\n 'blocks',\n buildParamsWithFilter(rest, filter, undefined),\n options\n )\n }\n\n async search<T = Record<string, unknown>>(\n params: IBSearchParams\n ): Promise<IBSearchResponse<T>> {\n const response = await this.client.get<IBSearchResponse<T>>(\n 'search',\n params as unknown as ApiQueryParams\n )\n if (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n 'meta' in (response as Record<string, unknown>)\n ) {\n return response as IBSearchResponse<T>\n }\n if (typeof response === 'object' && response !== null && 'data' in response) {\n const inner = (response as { data: unknown }).data\n if (\n typeof inner === 'object' &&\n inner !== null &&\n 'meta' in inner &&\n 'data' in inner\n ) {\n return inner as IBSearchResponse<T>\n }\n }\n return response as unknown as IBSearchResponse<T>\n }\n\n async getSitemap(\n params: Omit<IBContentQueryParams, 'token'> = {},\n options: CollectionFetchOptions = {}\n ): Promise<IBSitemapEntry[]> {\n return this.getCollection<IBSitemapEntry>('sitemap', params, options)\n }\n\n async getDataEntries(\n source: string,\n params: ApiQueryParams = {},\n options: CollectionFetchOptions = {}\n ): Promise<IBDataEntry[]> {\n return this.getCollection<IBDataEntry>(`datasources/${source}/entries`, params, options)\n }\n\n async getDataSources(\n params: ApiQueryParams = {},\n options: CollectionFetchOptions = {}\n ): Promise<IBDataSource[]> {\n return this.getCollection<IBDataSource>('datasources', params, options)\n }\n\n async getSpace(params: ApiQueryParams = {}): Promise<IBSpace> {\n return this.getResource<IBSpace>('spaces/me', params)\n }\n\n async lookupRedirect(source: string): Promise<IBRedirectLookupResult | false> {\n if (!this.client.post) {\n throw new Error(\n 'lookupRedirect requires a client that supports POST. Use ApiClient from @b10cks/client.'\n )\n }\n return this.client.post<IBRedirectLookupResult | false>('redirects/lookup', { source })\n }\n\n async getRedirects(params?: IBGetRedirectsParams, forceRefresh?: boolean): Promise<RedirectMap>\n async getRedirects(\n params?: IBGetRedirectsParams,\n options?: RedirectFetchOptions\n ): Promise<RedirectMap>\n async getRedirects(\n params: IBGetRedirectsParams = {},\n forceRefreshOrOptions: boolean | RedirectFetchOptions = false\n ): Promise<RedirectMap> {\n const { allPages = false, forceRefresh = false } =\n typeof forceRefreshOrOptions === 'boolean'\n ? { allPages: true, forceRefresh: forceRefreshOrOptions }\n : forceRefreshOrOptions\n\n if (allPages && this.redirectsCache && !forceRefresh) {\n return this.redirectsCache\n }\n\n const { filter, ...rest } = params\n const flatParams = buildParamsWithFilter(rest, filter, undefined)\n const redirects = await this.getCollection<IBRedirect>('redirects', flatParams, { allPages })\n const map = Object.fromEntries(\n redirects.map(({ source, target, status_code }) => [source, { target, status_code }])\n )\n\n if (allPages) {\n this.redirectsCache = map\n }\n\n return map\n }\n\n async getConfig<T = Record<string, unknown>>({\n slug = '_config',\n language_iso,\n language,\n bypassCache = false,\n ...params\n }: GetConfigOptions = {}): Promise<T> {\n const normalizedLanguage = language_iso ?? language\n const cacheKey = JSON.stringify({ slug, language_iso: normalizedLanguage, ...params })\n if (!bypassCache && this.configCache.has(cacheKey)) {\n return this.configCache.get(cacheKey) as T\n }\n\n const configContent = await this.getContent<Record<string, unknown>>(slug, {\n ...params,\n language_iso: normalizedLanguage,\n })\n const value = (configContent.content ?? {}) as T\n\n if (!bypassCache) {\n this.configCache.set(cacheKey, value)\n }\n\n return value\n }\n\n async syncRevision(fallbackRv = 426713400): Promise<string | number> {\n const space = await this.getSpace()\n const nextRv = space.rv || fallbackRv\n this.client.setRv(nextRv)\n return nextRv\n }\n\n clearCache() {\n this.redirectsCache = null\n this.configCache.clear()\n }\n\n private unwrapResource<T>(response: T | { data: T }): T {\n if (typeof response === 'object' && response !== null && 'data' in response) {\n return (response as { data: T }).data\n }\n\n return response\n }\n\n private unwrapCollection<T>(response: ApiCollectionResult<T>): T[] {\n if (Array.isArray(response)) {\n return response\n }\n\n if (typeof response === 'object' && response !== null && 'data' in response) {\n if (Array.isArray(response.data)) {\n return response.data\n }\n\n if (\n typeof response.data === 'object' &&\n response.data !== null &&\n 'data' in response.data &&\n Array.isArray(response.data.data)\n ) {\n return response.data.data\n }\n }\n\n return []\n }\n}\n\nexport function createB10cksDataApi(client: DataApiClient): B10cksDataApi {\n return new B10cksDataApi(client)\n}\n","/** Addresses a field within a block, supporting nested objects and arrays. */\nexport type FieldPath = (string | number)[]\n\nexport type ContentUpdateEvent = {\n content: Record<string, unknown>\n}\n\n/** Granular update: replace the value at `path` within the content tree. */\nexport type ContentPatchEvent = {\n path: FieldPath\n value: unknown\n}\n\nexport type SelectUpdateEvent = {\n selectedItem: string\n}\n\nexport type FieldUpdateEvent = {\n itemId: string\n /** Path to the field within the block. Preferred over `field`. */\n path?: FieldPath\n /** @deprecated Use `path`. Kept for flat string fields. */\n field?: string\n value: unknown\n}\n\n/**\n * Deep-select a specific field (e.g. a rich text field) so the editor opens\n * its own editor for that field instead of editing it inline in the preview.\n */\nexport type FieldSelectEvent = {\n itemId: string\n path: FieldPath\n}\n\nexport type EventType =\n | 'CONTENT_UPDATE'\n | 'CONTENT_PATCH'\n | 'SELECT_UPDATE'\n | 'HOVER_UPDATE'\n | 'FIELD_UPDATE'\n | 'FIELD_SELECT'\n\nexport type EventPayloadMap = {\n CONTENT_UPDATE: ContentUpdateEvent\n CONTENT_PATCH: ContentPatchEvent\n SELECT_UPDATE: SelectUpdateEvent\n HOVER_UPDATE: SelectUpdateEvent\n FIELD_UPDATE: FieldUpdateEvent\n FIELD_SELECT: FieldSelectEvent\n}\n\nconst EVENT_TYPES: ReadonlySet<string> = new Set<EventType>([\n 'CONTENT_UPDATE',\n 'CONTENT_PATCH',\n 'SELECT_UPDATE',\n 'HOVER_UPDATE',\n 'FIELD_UPDATE',\n 'FIELD_SELECT',\n])\n\n/** Sent by the preview to announce it is ready to receive events. */\nconst BRIDGE_READY = 'B10CKS_BRIDGE_READY'\n\ntype EventCallback<T> = (payload: T) => void\n\nexport type BridgeEvent = {\n type: EventType\n payload: EventPayloadMap[EventType]\n b10cksId?: string\n}\n\nexport interface PreviewBridgeInitOptions {\n /**\n * Origins the editor is allowed to post from. When provided, messages from\n * any other origin are ignored. When omitted, the bridge locks onto the\n * origin of the first valid message it receives (trust-on-first-use).\n */\n allowedOrigins?: string[]\n}\n\nexport class PreviewBridge {\n private static instance: PreviewBridge\n private readonly listeners: Partial<Record<EventType, Set<EventCallback<unknown>>>> = {}\n private initialized = false\n private allowedOrigins: string[] | null = null\n /** Origin of the editor, captured from the first trusted message. */\n private parentOrigin: string | null = null\n\n private constructor() {}\n\n static getInstance() {\n if (!PreviewBridge.instance) {\n PreviewBridge.instance = new PreviewBridge()\n }\n return PreviewBridge.instance\n }\n\n init(options: PreviewBridgeInitOptions = {}) {\n if (!this.isInPreviewMode() || this.initialized) {\n return\n }\n\n this.allowedOrigins = options.allowedOrigins ?? null\n window.addEventListener('message', this.handleMessage)\n this.initialized = true\n\n // Announce readiness so the editor can target this preview by origin.\n window.parent.postMessage({ type: BRIDGE_READY }, '*')\n }\n\n destroy() {\n if (this.initialized && typeof window !== 'undefined') {\n window.removeEventListener('message', this.handleMessage)\n }\n this.initialized = false\n this.parentOrigin = null\n for (const eventType of Object.keys(this.listeners) as EventType[]) {\n this.listeners[eventType]?.clear()\n }\n }\n\n isInPreviewMode(): boolean {\n return typeof window !== 'undefined' && window.self !== window.top\n }\n\n on<T extends EventType>(eventType: T, callback: EventCallback<EventPayloadMap[T]>): () => void {\n if (!this.isInPreviewMode()) {\n return () => {}\n }\n\n const listeners = this.listeners[eventType] || new Set<EventCallback<unknown>>()\n this.listeners[eventType] = listeners\n listeners.add(callback as EventCallback<unknown>)\n\n return () => {\n listeners.delete(callback as EventCallback<unknown>)\n }\n }\n\n selectItem(selectedItem: string) {\n this.post('SELECT_UPDATE', { selectedItem })\n }\n\n /** Deep-select a nested field (e.g. a rich text field) in the editor. */\n selectField(itemId: string, path: FieldPath) {\n this.post('FIELD_SELECT', { itemId, path })\n }\n\n /** @deprecated Prefer {@link updateFieldAt} with a path. */\n updateField(itemId: string, field: string, value: string) {\n this.post('FIELD_UPDATE', { itemId, field, value })\n }\n\n /** Stream an inline edit back to the editor, addressed by path. */\n updateFieldAt(itemId: string, path: FieldPath, value: unknown) {\n this.post('FIELD_UPDATE', { itemId, path, value })\n }\n\n private post<T extends EventType>(type: T, payload: EventPayloadMap[T]) {\n if (!this.isInPreviewMode()) {\n return\n }\n\n window.parent.postMessage({ type, payload }, this.parentOrigin ?? '*')\n }\n\n private handleMessage = (event: MessageEvent) => {\n if (!this.isOriginTrusted(event.origin)) {\n return\n }\n\n if (!event.data || typeof event.data !== 'object') {\n return\n }\n\n const { type, payload } = event.data as BridgeEvent\n if (!type || !EVENT_TYPES.has(type) || !payload) {\n return\n }\n\n // Lock onto the editor's origin on the first trusted, valid message.\n if (!this.parentOrigin && event.origin && event.origin !== 'null') {\n this.parentOrigin = event.origin\n }\n\n this.notify(type, payload as never)\n }\n\n private isOriginTrusted(origin: string): boolean {\n if (this.parentOrigin) {\n return origin === this.parentOrigin\n }\n if (this.allowedOrigins) {\n return this.allowedOrigins.includes(origin)\n }\n // Trust-on-first-use: accept the first message and lock onto its origin.\n return true\n }\n\n private notify<T extends EventType>(type: T, payload: EventPayloadMap[T]) {\n const callbacks = this.listeners[type]\n if (!callbacks) {\n return\n }\n\n for (const callback of callbacks) {\n ;(callback as EventCallback<EventPayloadMap[T]>)(payload)\n }\n }\n}\n\nexport const previewBridge = PreviewBridge.getInstance()\n","import type { FieldPath, SelectUpdateEvent } from './preview-bridge'\n\nimport { previewBridge } from './preview-bridge'\n\nconst STYLE_ID = 'b10cks-preview-style'\nconst SCROLL_OFFSET_VAR = '--b10cks-scroll-offset'\n\n/**\n * Inject the preview outline styles once. Selected/hovered blocks get an\n * outline; `.b10cks-preview` carries a `scroll-margin-top` so scroll-into-view\n * clears a fixed app header. Set the offset via {@link setPreviewScrollOffset}\n * or the `--b10cks-scroll-offset` CSS variable.\n */\nexport function ensurePreviewStyles(): void {\n if (typeof document === 'undefined' || document.getElementById(STYLE_ID)) {\n return\n }\n\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = `\n .b10cks-preview { scroll-margin-top: var(${SCROLL_OFFSET_VAR}, 0px); }\n .b10cks-hover,\n .b10cks-preview:hover {\n outline: 2px dashed rgba(59, 130, 246, 0.5);\n outline-offset: 2px;\n }\n .b10cks-selected {\n outline: 2px solid rgb(59, 130, 246) !important;\n outline-offset: 2px;\n }\n `\n document.head.appendChild(style)\n}\n\n/**\n * Set the scroll offset used when a selected block is scrolled into view.\n * Pass your fixed header's height so selection no longer overshoots beneath it.\n * A number is treated as pixels; strings are used verbatim (e.g. `\"5rem\"`).\n */\nexport function setPreviewScrollOffset(offset: number | string): void {\n if (typeof document === 'undefined') {\n return\n }\n const value = typeof offset === 'number' ? `${offset}px` : offset\n document.documentElement.style.setProperty(SCROLL_OFFSET_VAR, value)\n}\n\nexport interface AttachEditableOptions {\n id: string\n onSelectChange?: (selected: boolean) => void\n onHoverChange?: (hovered: boolean) => void\n /** Scroll the element into view when it becomes selected. Default true. */\n scrollOnSelect?: boolean\n}\n\n/**\n * Wire a DOM element as a selectable block: click selects it in the editor,\n * and editor-driven select/hover toggle outline classes. Honors the configured\n * scroll offset and only scrolls when the element isn't already in view.\n * Returns a cleanup function. No-op outside preview mode.\n */\nexport function attachEditable(el: HTMLElement, options: AttachEditableOptions): () => void {\n if (!previewBridge.isInPreviewMode() || !options.id) {\n return () => {}\n }\n\n ensurePreviewStyles()\n const { id, onSelectChange, onHoverChange, scrollOnSelect = true } = options\n\n el.classList.add('b10cks-preview')\n\n const handleClick = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n previewBridge.selectItem(id)\n }\n\n const handleSelect = ({ selectedItem }: SelectUpdateEvent) => {\n const selected = selectedItem === id\n el.classList.toggle('b10cks-selected', selected)\n if (selected && scrollOnSelect) {\n scrollIntoViewIfNeeded(el)\n }\n onSelectChange?.(selected)\n }\n\n const handleHover = ({ selectedItem }: SelectUpdateEvent) => {\n const hovered = selectedItem === id\n el.classList.toggle('b10cks-hover', hovered)\n onHoverChange?.(hovered)\n }\n\n el.addEventListener('click', handleClick)\n const offSelect = previewBridge.on('SELECT_UPDATE', handleSelect)\n const offHover = previewBridge.on('HOVER_UPDATE', handleHover)\n\n return () => {\n el.removeEventListener('click', handleClick)\n offSelect()\n offHover()\n el.classList.remove('b10cks-preview', 'b10cks-selected', 'b10cks-hover')\n }\n}\n\nexport type EditableFieldMode = 'inline' | 'select'\n\nexport interface AttachEditableFieldOptions {\n id: string\n /** @deprecated Use `path`. Kept for flat string fields. */\n field?: string\n path?: FieldPath\n /**\n * `inline` makes the element contenteditable and streams plain-text edits\n * back to the editor — suitable for simple string fields only. `select`\n * instead deep-selects the field so the editor opens its own editor, which\n * is the right choice for rich text and other complex types. Default\n * `inline`, or `select` automatically when no `field` is given but a `path`\n * targets a complex value.\n */\n mode?: EditableFieldMode\n}\n\n/**\n * Wire a DOM element for field editing. Returns a cleanup function. No-op\n * outside preview mode. See {@link AttachEditableFieldOptions.mode}.\n */\nexport function attachEditableField(\n el: HTMLElement,\n options: AttachEditableFieldOptions\n): () => void {\n if (!previewBridge.isInPreviewMode() || !options.id) {\n return () => {}\n }\n\n const { id, field, path, mode = 'inline' } = options\n\n if (mode === 'select') {\n ensurePreviewStyles()\n el.classList.add('b10cks-preview')\n\n const handleClick = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n if (path) {\n previewBridge.selectField(id, path)\n } else {\n previewBridge.selectItem(id)\n }\n }\n\n el.addEventListener('click', handleClick)\n return () => {\n el.removeEventListener('click', handleClick)\n el.classList.remove('b10cks-preview')\n }\n }\n\n el.setAttribute('contenteditable', 'true')\n\n const handleInput = (event: Event) => {\n const value = (event.target as HTMLElement).innerText\n if (path) {\n previewBridge.updateFieldAt(id, path, value)\n } else {\n previewBridge.updateField(id, field ?? '', value)\n }\n }\n\n el.addEventListener('input', handleInput)\n return () => {\n el.removeEventListener('input', handleInput)\n el.removeAttribute('contenteditable')\n }\n}\n\nfunction scrollIntoViewIfNeeded(el: HTMLElement): void {\n if (typeof el.scrollIntoView === 'function') {\n el.scrollIntoView({ block: 'nearest', behavior: 'smooth' })\n }\n}\n","import type { FieldPath } from './preview-bridge'\n\nimport { previewBridge } from './preview-bridge'\n\n/** Read the value at `path` within `target`, or undefined if absent. */\nexport function getAtPath(target: unknown, path: FieldPath): unknown {\n let current = target\n for (const key of path) {\n if (current == null || typeof current !== 'object') {\n return undefined\n }\n current = (current as Record<string | number, unknown>)[key]\n }\n return current\n}\n\n/** Return a copy of `target` with the value at `path` replaced. Immutable. */\nexport function setAtPath<T>(target: T, path: FieldPath, value: unknown): T {\n if (path.length === 0) {\n return value as T\n }\n\n const [key, ...rest] = path\n if (key === undefined) {\n return value as T\n }\n\n if (typeof key === 'number') {\n const next = Array.isArray(target) ? (target as unknown[]).slice() : []\n next[key] = setAtPath(next[key], rest, value)\n return next as unknown as T\n }\n\n const next: Record<string, unknown> =\n target && typeof target === 'object' && !Array.isArray(target)\n ? { ...(target as Record<string, unknown>) }\n : {}\n next[key] = setAtPath(next[key], rest, value)\n return next as T\n}\n\ntype Listener = () => void\n\n/**\n * A framework-agnostic, reactive holder for the content tree shown in the\n * preview. The editor pushes whole-tree (`CONTENT_UPDATE`) or granular\n * (`CONTENT_PATCH`) changes; subscribers re-render from the new snapshot.\n */\nexport class PreviewStore<T = Record<string, unknown>> {\n private content: T\n private readonly listeners = new Set<Listener>()\n\n constructor(initial: T) {\n this.content = initial\n }\n\n subscribe = (listener: Listener): (() => void) => {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n getSnapshot = (): T => this.content\n\n setContent(next: T) {\n this.content = next\n this.emit()\n }\n\n patch(path: FieldPath, value: unknown) {\n this.content = setAtPath(this.content, path, value)\n this.emit()\n }\n\n private emit() {\n for (const listener of this.listeners) {\n listener()\n }\n }\n}\n\n/**\n * Feed the singleton bridge's content events into a {@link PreviewStore}.\n * Returns an unsubscribe function. No-op outside preview mode.\n */\nexport function bindPreviewStore<T>(store: PreviewStore<T>): () => void {\n const offUpdate = previewBridge.on('CONTENT_UPDATE', ({ content }) => {\n store.setContent(content as T)\n })\n const offPatch = previewBridge.on('CONTENT_PATCH', ({ path, value }) => {\n store.patch(path, value)\n })\n\n return () => {\n offUpdate()\n offPatch()\n }\n}\n","import type { IBSitemapEntry } from './types'\n\nexport function normalizePathSegment(value: string | null | undefined): string {\n return (value ?? '').trim().replace(/^\\/+|\\/+$/g, '')\n}\n\n/**\n * Combines a b10cks `full_slug` and `language_iso` into a rooted, locale-prefixed path.\n *\n * - The slug `home` is treated as the root (`/` or `/<locale>`).\n * - Slugs that already start with the locale prefix are not double-prefixed.\n */\nexport function buildLocalizedPath(\n fullSlug: string | null | undefined,\n languageIso: string | null | undefined\n): string {\n const slug = normalizePathSegment(fullSlug)\n const locale = normalizePathSegment(languageIso)\n\n if (!locale) {\n return slug && slug !== 'home' ? `/${slug}` : '/'\n }\n\n if (!slug || slug === 'home') {\n return `/${locale}`\n }\n\n const localePrefix = `${locale}/`\n if (slug === locale || slug.startsWith(localePrefix)) {\n return `/${slug}`\n }\n\n return `/${locale}/${slug}`\n}\n\nfunction toAbsoluteUrl(path: string, siteUrl?: string): string | null {\n if (!siteUrl) return null\n try {\n return new URL(path, siteUrl).toString()\n } catch {\n return null\n }\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n}\n\nexport interface SitemapFilterOptions {\n /** Absolute base URL used for deduplication. Without it, paths are compared as strings. */\n siteUrl?: string\n /** Only include entries for this locale (ISO code). */\n locale?: string\n}\n\n/**\n * Filters sitemap entries by locale, deduplicates by resolved URL, and drops `noindex` entries.\n */\nexport function filterSitemapEntries(\n entries: IBSitemapEntry[],\n options: SitemapFilterOptions = {}\n): IBSitemapEntry[] {\n const { siteUrl, locale } = options\n const seen = new Set<string>()\n\n return entries.filter((entry) => {\n if (locale && entry.language_iso !== locale) return false\n if (entry.meta?.robots?.toLowerCase().includes('noindex')) return false\n\n const path = buildLocalizedPath(entry.full_slug, entry.language_iso)\n const key = siteUrl ? (toAbsoluteUrl(path, siteUrl) ?? path) : path\n if (seen.has(key)) return false\n\n seen.add(key)\n return true\n })\n}\n\n/**\n * Renders `IBSitemapEntry[]` as a `<urlset>` XML string.\n * Pass `siteUrl` to emit absolute `<loc>` values; without it, relative paths are used.\n */\nexport function renderSitemapXml(entries: IBSitemapEntry[], siteUrl?: string): string {\n const urls = entries\n .map((entry) => {\n const path = buildLocalizedPath(entry.full_slug, entry.language_iso)\n const loc = siteUrl ? toAbsoluteUrl(path, siteUrl) : path\n if (!loc) return ''\n const lines = [' <url>', ` <loc>${escapeXml(loc)}</loc>`]\n if (entry.published_at) lines.push(` <lastmod>${escapeXml(entry.published_at)}</lastmod>`)\n lines.push(' </url>')\n return lines.join('\\n')\n })\n .filter(Boolean)\n .join('\\n')\n\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">',\n urls,\n '</urlset>',\n ].join('\\n')\n}\n\n/**\n * Renders a list of sitemap paths as a `<sitemapindex>` XML string.\n */\nexport function renderSitemapIndex(paths: string[], siteUrl?: string): string {\n const sitemaps = paths\n .map((path) => {\n const loc = siteUrl ? toAbsoluteUrl(path, siteUrl) : path\n if (!loc) return ''\n return [' <sitemap>', ` <loc>${escapeXml(loc)}</loc>`, ' </sitemap>'].join('\\n')\n })\n .filter(Boolean)\n .join('\\n')\n\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">',\n sitemaps,\n '</sitemapindex>',\n ].join('\\n')\n}\n","import type {\n B10cksApiClientOptions,\n Endpoint,\n FetchClient,\n IBBaseQueryParams,\n IBCollectionResponse,\n IBMeta,\n IBResponse,\n} from './types'\n\nexport interface B10cksApiClientRvOptions {\n getRv?: () => string | number\n setRv?: (value: string | number) => void\n}\n\nexport * from './content'\nexport * from './data-api'\nexport * from './editable'\nexport * from './preview-bridge'\nexport * from './preview-store'\nexport * from './sitemap'\nexport type * from './types'\nexport * as types from './types'\n\ntype ApiResourceResponse<T> = IBResponse<T> | T\ntype ApiCollectionResponse<T> =\n | IBCollectionResponse<T>\n | IBResponse<IBCollectionResponse<T>>\n | T[]\n | { data: T[]; meta?: IBMeta; rv?: string | number }\n\nexport class ApiClient {\n private readonly baseUrl: string\n readonly token: string\n private readonly vid: string\n private readonly fetchClient: FetchClient\n private readonly getRvFn?: () => string | number\n private readonly setRvFn?: (value: string | number) => void\n /**\n * Per-instance revision store, used when no `getRv`/`setRv` callbacks are\n * supplied. Kept on the instance (not module scope) so concurrent requests\n * in a server runtime cannot leak revisions into one another. Server callers\n * that need request-scoped persistence should pass `getRv`/`setRv`.\n */\n private rvValue: string | number = 0\n\n constructor(options: B10cksApiClientOptions, requestUrl?: URL | string) {\n this.baseUrl = options.baseUrl.endsWith('/') ? options.baseUrl.slice(0, -1) : options.baseUrl\n this.token = options.token\n const defaultFetch =\n typeof globalThis.fetch === 'function' ? globalThis.fetch.bind(globalThis) : null\n if (options.fetchClient) {\n this.fetchClient = options.fetchClient\n } else if (defaultFetch) {\n this.fetchClient = defaultFetch as FetchClient\n } else {\n throw new Error(\n 'No fetch implementation available. Provide `fetchClient` in ApiClient options.'\n )\n }\n\n this.getRvFn = options.getRv\n this.setRvFn = options.setRv\n\n const url = this.resolveRequestUrl(requestUrl)\n this.vid = options.version || 'published'\n this.setRv(url?.searchParams.get('b10cks_rv') || options.rv || 0)\n }\n\n async get<T>(\n endpoint: Endpoint,\n params: Omit<IBBaseQueryParams, 'token'> & Record<string, unknown> = {}\n ): Promise<ApiResourceResponse<T>> {\n const url = this.buildUrl(endpoint, {\n vid: this.vid,\n rv: this.getRv(),\n ...params,\n token: this.token,\n })\n\n const payload = await this.fetchClient(url)\n const response = await this.parseResponse<ApiResourceResponse<T>>(payload)\n\n if (this.hasRevision(response)) {\n this.setRv(response.rv)\n }\n\n return response\n }\n\n async post<T>(\n endpoint: string,\n body?: unknown,\n params: Omit<IBBaseQueryParams, 'token'> & Record<string, unknown> = {}\n ): Promise<T> {\n const url = this.buildUrl(endpoint, {\n vid: this.vid,\n rv: this.getRv(),\n ...params,\n token: this.token,\n })\n\n const payload = await this.fetchClient(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n\n return this.parseResponse<T>(payload)\n }\n\n async getAll<T>(\n endpoint: Endpoint,\n params: Omit<IBBaseQueryParams, 'token'> & Record<string, unknown> = {}\n ): Promise<T[]> {\n const firstResponse = await this.get<IBCollectionResponse<T> & { meta?: IBMeta }>(endpoint, {\n ...params,\n page: 1,\n })\n const normalizedFirstResponse = this.normalizeCollectionResponse<T>(firstResponse)\n\n if (normalizedFirstResponse.rv) {\n this.setRv(normalizedFirstResponse.rv)\n }\n\n if (!normalizedFirstResponse.meta || normalizedFirstResponse.meta.last_page <= 1) {\n return normalizedFirstResponse.data\n }\n\n const pageRequests = Array.from(\n { length: normalizedFirstResponse.meta.last_page - 1 },\n (_, i) => this.get<IBCollectionResponse<T>>(endpoint, { ...params, page: i + 2 })\n )\n\n const allResponses = await Promise.all(pageRequests)\n\n return normalizedFirstResponse.data.concat(\n allResponses.flatMap((response) => this.normalizeCollectionResponse<T>(response).data)\n )\n }\n\n setRv(value: string | number) {\n if (this.setRvFn) {\n this.setRvFn(value)\n } else {\n this.rvValue = value\n }\n }\n\n getRv() {\n if (this.getRvFn) {\n return this.getRvFn()\n }\n return this.rvValue\n }\n\n private async parseResponse<T>(payload: unknown): Promise<T> {\n if (this.isFetchResponse(payload)) {\n if (!payload.ok) {\n throw new Error(`Request failed with status ${payload.status}`)\n }\n\n return (await payload.json()) as T\n }\n\n return payload as T\n }\n\n private normalizeCollectionResponse<T>(response: ApiCollectionResponse<T>) {\n if (this.isCollectionResponseEnvelope(response)) {\n const nestedResponse = response.data\n\n return {\n data: nestedResponse.data,\n meta: (nestedResponse as IBCollectionResponse<T> & { meta?: IBMeta }).meta,\n rv: response.rv || nestedResponse.rv,\n }\n }\n\n if (Array.isArray(response)) {\n return { data: response, meta: undefined, rv: undefined }\n }\n\n if (typeof response === 'object' && response !== null && 'data' in response) {\n const {\n data,\n meta,\n rv: responseRv,\n } = response as {\n data: T[]\n meta?: IBMeta\n rv?: string | number\n }\n return { data, meta, rv: responseRv }\n }\n\n return { data: [], meta: undefined, rv: undefined }\n }\n\n private buildUrl(endpoint: string, params: Record<string, unknown>): string {\n const url = new URL(`${this.baseUrl}/v1/${endpoint}`)\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value))\n }\n })\n\n return url.toString()\n }\n\n private resolveRequestUrl(requestUrl?: URL | string): URL | null {\n if (!requestUrl) {\n return null\n }\n\n if (requestUrl instanceof URL) {\n return requestUrl\n }\n\n return new URL(requestUrl, 'http://localhost')\n }\n\n private isFetchResponse(value: unknown): value is Response {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'json' in value &&\n typeof (value as Response).json === 'function' &&\n 'ok' in value\n )\n }\n\n private hasRevision(value: unknown): value is { rv: string | number } {\n return typeof value === 'object' && value !== null && 'rv' in value\n }\n\n private isCollectionResponseEnvelope<T>(\n value: ApiCollectionResponse<T>\n ): value is IBResponse<IBCollectionResponse<T>> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'data' in value &&\n typeof value.data === 'object' &&\n value.data !== null &&\n 'data' in value.data &&\n Array.isArray(value.data.data)\n )\n }\n}\n"],"names":["resolveB10cksLink","link","params","query","target","href","serializeFilterValue","value","obj","from","to","ops","op","val","serializeFilter","filter","result","key","serialized","buildParamsWithFilter","sort","filterParams","sortParam","B10cksDataApi","client","endpoint","response","options","fullSlug","rest","blockId","inner","source","forceRefreshOrOptions","allPages","forceRefresh","flatParams","redirects","map","status_code","slug","language_iso","language","bypassCache","normalizedLanguage","cacheKey","fallbackRv","nextRv","createB10cksDataApi","EVENT_TYPES","BRIDGE_READY","PreviewBridge","eventType","callback","listeners","selectedItem","itemId","path","field","type","payload","event","origin","callbacks","previewBridge","STYLE_ID","SCROLL_OFFSET_VAR","ensurePreviewStyles","style","setPreviewScrollOffset","offset","attachEditable","el","id","onSelectChange","onHoverChange","scrollOnSelect","handleClick","handleSelect","selected","scrollIntoViewIfNeeded","handleHover","hovered","offSelect","offHover","attachEditableField","mode","handleInput","getAtPath","current","setAtPath","next","PreviewStore","initial","listener","bindPreviewStore","store","offUpdate","content","offPatch","normalizePathSegment","buildLocalizedPath","languageIso","locale","localePrefix","toAbsoluteUrl","siteUrl","escapeXml","filterSitemapEntries","entries","seen","entry","renderSitemapXml","loc","lines","renderSitemapIndex","paths","ApiClient","requestUrl","defaultFetch","url","body","firstResponse","normalizedFirstResponse","pageRequests","_","i","allResponses","nestedResponse","data","meta","responseRv"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/content.ts","../src/data-api.ts","../src/preview-bridge.ts","../src/editable.ts","../src/preview-store.ts","../src/sitemap.ts","../src/types.ts","../src/index.ts"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@b10cks/client",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "Core b10cks API client",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Michael Wallner @ Coder's Cantina",
|
|
@@ -15,25 +15,27 @@
|
|
|
15
15
|
],
|
|
16
16
|
"type": "module",
|
|
17
17
|
"sideEffects": false,
|
|
18
|
-
"main": "./dist/index.
|
|
18
|
+
"main": "./dist/index.cjs",
|
|
19
19
|
"module": "./dist/index.mjs",
|
|
20
20
|
"types": "./dist/index.d.ts",
|
|
21
21
|
"exports": {
|
|
22
22
|
".": {
|
|
23
23
|
"types": "./dist/index.d.ts",
|
|
24
24
|
"import": "./dist/index.mjs",
|
|
25
|
-
"require": "./dist/index.
|
|
25
|
+
"require": "./dist/index.cjs"
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"publishConfig": {
|
|
29
29
|
"access": "public"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
+
"@microsoft/api-extractor": "^7.58.7",
|
|
32
33
|
"chalk": "^5.6.2",
|
|
33
|
-
"
|
|
34
|
+
"happy-dom": "^20.10.6",
|
|
35
|
+
"vite": "^8.1.3",
|
|
34
36
|
"vite-plugin-banner": "^0.8.1",
|
|
35
|
-
"vite-plugin-dts": "^
|
|
36
|
-
"vitest": "^
|
|
37
|
+
"vite-plugin-dts": "^5.0.3",
|
|
38
|
+
"vitest": "^4.1.9"
|
|
37
39
|
},
|
|
38
40
|
"release": {
|
|
39
41
|
"branches": [
|
|
@@ -43,7 +45,7 @@
|
|
|
43
45
|
"scripts": {
|
|
44
46
|
"build": "vite build",
|
|
45
47
|
"dev": "vite build --watch",
|
|
46
|
-
"test": "vitest",
|
|
48
|
+
"test": "vitest run --passWithNoTests",
|
|
47
49
|
"lint": "oxlint src",
|
|
48
50
|
"clean": "rm -rf dist",
|
|
49
51
|
"lint:fix": "oxlint --fix src",
|
package/dist/index.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function P(i){if(!i)return;if(i.type==="email"){const n=new URLSearchParams;i.subject&&n.set("subject",i.subject),i.body&&n.set("body",i.body),i.cc&&n.set("cc",i.cc),i.bcc&&n.set("bcc",i.bcc);const s=n.toString();return{href:`mailto:${i.email}${s?`?${s}`:""}`,target:"_self"}}if(i.type==="asset")return;const t=i.target??"_self";let e=i.url??"";return"anchor"in i&&i.anchor&&(e=`${e.trimEnd()}#${i.anchor}`),{href:e,target:t}}function T(i){if(i!=null){if(typeof i=="boolean"||typeof i=="number")return String(i);if(typeof i=="string")return i;if(typeof i=="object"&&!Array.isArray(i)){const t=i;if("null"in t)return"null:";if("!null"in t)return"!null:";if("between"in t){const[n,s]=t.between;return`${n}...${s}`}const e=["eq","neq","like","!like","^like","like$","lt","gt","lte","gte","in","!in","empty","!empty"];for(const n of e)if(n in t){const s=t[n];return Array.isArray(s)?`${n}:${s.join(",")}`:`${n}:${String(s)}`}}}}function R(i){const t={};for(const[e,n]of Object.entries(i)){const s=T(n);s!==void 0&&(t[e]=s)}return t}function m(i,t,e){const n=t&&typeof t=="object"?R(t):{},s=Array.isArray(e)?{sort:e.join(",")}:e!=null?{sort:e}:{};return{...i,...n,...s}}class A{constructor(t){this.client=t}redirectsCache=null;configCache=new Map;async getResource(t,e={}){const n=await this.client.get(t,e);return this.unwrapResource(n)}async getCollection(t,e={},n={}){if(n.allPages)return this.client.getAll(t,e);const s=await this.client.get(t,e);return this.unwrapCollection(s)}async getContent(t,e={}){return this.getResource(`contents/${t}`,e)}async getContents(t={},e={}){const{filter:n,sort:s,...r}=t;return this.getCollection("contents",m(r,n,s),e)}async getBlock(t,e={}){return this.getResource(`blocks/${t}`,e)}async getBlocks(t={},e={}){const{filter:n,...s}=t;return this.getCollection("blocks",m(s,n,void 0),e)}async search(t){const e=await this.client.get("search",t);if(typeof e=="object"&&e!==null&&"data"in e&&"meta"in e)return e;if(typeof e=="object"&&e!==null&&"data"in e){const n=e.data;if(typeof n=="object"&&n!==null&&"meta"in n&&"data"in n)return n}return e}async getSitemap(t={},e={}){return this.getCollection("sitemap",t,e)}async getDataEntries(t,e={},n={}){return this.getCollection(`datasources/${t}/entries`,e,n)}async getDataSources(t={},e={}){return this.getCollection("datasources",t,e)}async getSpace(t={}){return this.getResource("spaces/me",t)}async lookupRedirect(t){if(!this.client.post)throw new Error("lookupRedirect requires a client that supports POST. Use ApiClient from @b10cks/client.");return this.client.post("redirects/lookup",{source:t})}async getRedirects(t={},e=!1){const{allPages:n=!1,forceRefresh:s=!1}=typeof e=="boolean"?{allPages:!0,forceRefresh:e}:e;if(n&&this.redirectsCache&&!s)return this.redirectsCache;const{filter:r,...o}=t,a=m(o,r,void 0),c=await this.getCollection("redirects",a,{allPages:n}),d=Object.fromEntries(c.map(({source:g,target:u,status_code:f})=>[g,{target:u,status_code:f}]));return n&&(this.redirectsCache=d),d}async getConfig({slug:t="_config",language_iso:e,language:n,bypassCache:s=!1,...r}={}){const o=e??n,a=JSON.stringify({slug:t,language_iso:o,...r});if(!s&&this.configCache.has(a))return this.configCache.get(a);const d=(await this.getContent(t,{...r,language_iso:o})).content??{};return s||this.configCache.set(a,d),d}async syncRevision(t=426713400){const n=(await this.getSpace()).rv||t;return this.client.setRv(n),n}clearCache(){this.redirectsCache=null,this.configCache.clear()}unwrapResource(t){return typeof t=="object"&&t!==null&&"data"in t?t.data:t}unwrapCollection(t){if(Array.isArray(t))return t;if(typeof t=="object"&&t!==null&&"data"in t){if(Array.isArray(t.data))return t.data;if(typeof t.data=="object"&&t.data!==null&&"data"in t.data&&Array.isArray(t.data.data))return t.data.data}return[]}}function k(i){return new A(i)}const j=new Set(["CONTENT_UPDATE","CONTENT_PATCH","SELECT_UPDATE","HOVER_UPDATE","FIELD_UPDATE","FIELD_SELECT"]),L="B10CKS_BRIDGE_READY";class h{static instance;listeners={};initialized=!1;allowedOrigins=null;parentOrigin=null;constructor(){}static getInstance(){return h.instance||(h.instance=new h),h.instance}init(t={}){!this.isInPreviewMode()||this.initialized||(this.allowedOrigins=t.allowedOrigins??null,window.addEventListener("message",this.handleMessage),this.initialized=!0,window.parent.postMessage({type:L},"*"))}destroy(){this.initialized&&typeof window<"u"&&window.removeEventListener("message",this.handleMessage),this.initialized=!1,this.parentOrigin=null;for(const t of Object.keys(this.listeners))this.listeners[t]?.clear()}isInPreviewMode(){return typeof window<"u"&&window.self!==window.top}on(t,e){if(!this.isInPreviewMode())return()=>{};const n=this.listeners[t]||new Set;return this.listeners[t]=n,n.add(e),()=>{n.delete(e)}}selectItem(t){this.post("SELECT_UPDATE",{selectedItem:t})}selectField(t,e){this.post("FIELD_SELECT",{itemId:t,path:e})}updateField(t,e,n){this.post("FIELD_UPDATE",{itemId:t,field:e,value:n})}updateFieldAt(t,e,n){this.post("FIELD_UPDATE",{itemId:t,path:e,value:n})}post(t,e){this.isInPreviewMode()&&window.parent.postMessage({type:t,payload:e},this.parentOrigin??"*")}handleMessage=t=>{if(!this.isOriginTrusted(t.origin)||!t.data||typeof t.data!="object")return;const{type:e,payload:n}=t.data;!e||!j.has(e)||!n||(!this.parentOrigin&&t.origin&&t.origin!=="null"&&(this.parentOrigin=t.origin),this.notify(e,n))};isOriginTrusted(t){return this.parentOrigin?t===this.parentOrigin:this.allowedOrigins?this.allowedOrigins.includes(t):!0}notify(t,e){const n=this.listeners[t];if(n)for(const s of n)s(e)}}const l=h.getInstance(),C="b10cks-preview-style",S="--b10cks-scroll-offset";function v(){if(typeof document>"u"||document.getElementById(C))return;const i=document.createElement("style");i.id=C,i.textContent=`
|
|
2
|
-
.b10cks-preview { scroll-margin-top: var(${S}, 0px); }
|
|
3
|
-
.b10cks-hover,
|
|
4
|
-
.b10cks-preview:hover {
|
|
5
|
-
outline: 2px dashed rgba(59, 130, 246, 0.5);
|
|
6
|
-
outline-offset: 2px;
|
|
7
|
-
}
|
|
8
|
-
.b10cks-selected {
|
|
9
|
-
outline: 2px solid rgb(59, 130, 246) !important;
|
|
10
|
-
outline-offset: 2px;
|
|
11
|
-
}
|
|
12
|
-
`,document.head.appendChild(i)}function _(i){if(typeof document>"u")return;const t=typeof i=="number"?`${i}px`:i;document.documentElement.style.setProperty(S,t)}function F(i,t){if(!l.isInPreviewMode()||!t.id)return()=>{};v();const{id:e,onSelectChange:n,onHoverChange:s,scrollOnSelect:r=!0}=t;i.classList.add("b10cks-preview");const o=u=>{u.preventDefault(),u.stopPropagation(),l.selectItem(e)},a=({selectedItem:u})=>{const f=u===e;i.classList.toggle("b10cks-selected",f),f&&r&&$(i),n?.(f)},c=({selectedItem:u})=>{const f=u===e;i.classList.toggle("b10cks-hover",f),s?.(f)};i.addEventListener("click",o);const d=l.on("SELECT_UPDATE",a),g=l.on("HOVER_UPDATE",c);return()=>{i.removeEventListener("click",o),d(),g(),i.classList.remove("b10cks-preview","b10cks-selected","b10cks-hover")}}function O(i,t){if(!l.isInPreviewMode()||!t.id)return()=>{};const{id:e,field:n,path:s,mode:r="inline"}=t;if(r==="select"){v(),i.classList.add("b10cks-preview");const a=c=>{c.preventDefault(),c.stopPropagation(),s?l.selectField(e,s):l.selectItem(e)};return i.addEventListener("click",a),()=>{i.removeEventListener("click",a),i.classList.remove("b10cks-preview")}}i.setAttribute("contenteditable","true");const o=a=>{const c=a.target.innerText;s?l.updateFieldAt(e,s,c):l.updateField(e,n??"",c)};return i.addEventListener("input",o),()=>{i.removeEventListener("input",o),i.removeAttribute("contenteditable")}}function $(i){typeof i.scrollIntoView=="function"&&i.scrollIntoView({block:"nearest",behavior:"smooth"})}function D(i,t){let e=i;for(const n of t){if(e==null||typeof e!="object")return;e=e[n]}return e}function p(i,t,e){if(t.length===0)return e;const[n,...s]=t;if(n===void 0)return e;if(typeof n=="number"){const o=Array.isArray(i)?i.slice():[];return o[n]=p(o[n],s,e),o}const r=i&&typeof i=="object"&&!Array.isArray(i)?{...i}:{};return r[n]=p(r[n],s,e),r}class I{content;listeners=new Set;constructor(t){this.content=t}subscribe=t=>(this.listeners.add(t),()=>{this.listeners.delete(t)});getSnapshot=()=>this.content;setContent(t){this.content=t,this.emit()}patch(t,e){this.content=p(this.content,t,e),this.emit()}emit(){for(const t of this.listeners)t()}}function U(i){const t=l.on("CONTENT_UPDATE",({content:n})=>{i.setContent(n)}),e=l.on("CONTENT_PATCH",({path:n,value:s})=>{i.patch(n,s)});return()=>{t(),e()}}function y(i){return(i??"").trim().replace(/^\/+|\/+$/g,"")}function w(i,t){const e=y(i),n=y(t);if(!n)return e&&e!=="home"?`/${e}`:"/";if(!e||e==="home")return`/${n}`;const s=`${n}/`;return e===n||e.startsWith(s)?`/${e}`:`/${n}/${e}`}function E(i,t){if(!t)return null;try{return new URL(i,t).toString()}catch{return null}}function b(i){return i.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function x(i,t={}){const{siteUrl:e,locale:n}=t,s=new Set;return i.filter(r=>{if(n&&r.language_iso!==n||r.meta?.robots?.toLowerCase().includes("noindex"))return!1;const o=w(r.full_slug,r.language_iso),a=e?E(o,e)??o:o;return s.has(a)?!1:(s.add(a),!0)})}function z(i,t){return['<?xml version="1.0" encoding="UTF-8"?>','<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',i.map(n=>{const s=w(n.full_slug,n.language_iso),r=t?E(s,t):s;if(!r)return"";const o=[" <url>",` <loc>${b(r)}</loc>`];return n.published_at&&o.push(` <lastmod>${b(n.published_at)}</lastmod>`),o.push(" </url>"),o.join(`
|
|
13
|
-
`)}).filter(Boolean).join(`
|
|
14
|
-
`),"</urlset>"].join(`
|
|
15
|
-
`)}function M(i,t){return['<?xml version="1.0" encoding="UTF-8"?>','<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',i.map(n=>{const s=t?E(n,t):n;return s?[" <sitemap>",` <loc>${b(s)}</loc>`," </sitemap>"].join(`
|
|
16
|
-
`):""}).filter(Boolean).join(`
|
|
17
|
-
`),"</sitemapindex>"].join(`
|
|
18
|
-
`)}const B=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));class N{baseUrl;token;vid;fetchClient;getRvFn;setRvFn;rvValue=0;constructor(t,e){this.baseUrl=t.baseUrl.endsWith("/")?t.baseUrl.slice(0,-1):t.baseUrl,this.token=t.token;const n=typeof globalThis.fetch=="function"?globalThis.fetch.bind(globalThis):null;if(t.fetchClient)this.fetchClient=t.fetchClient;else if(n)this.fetchClient=n;else throw new Error("No fetch implementation available. Provide `fetchClient` in ApiClient options.");this.getRvFn=t.getRv,this.setRvFn=t.setRv;const s=this.resolveRequestUrl(e);this.vid=t.version||"published",this.setRv(s?.searchParams.get("b10cks_rv")||t.rv||0)}async get(t,e={}){const n=this.buildUrl(t,{vid:this.vid,rv:this.getRv(),...e,token:this.token}),s=await this.fetchClient(n),r=await this.parseResponse(s);return this.hasRevision(r)&&this.setRv(r.rv),r}async post(t,e,n={}){const s=this.buildUrl(t,{vid:this.vid,rv:this.getRv(),...n,token:this.token}),r=await this.fetchClient(s,{method:"POST",headers:{"Content-Type":"application/json"},body:e!==void 0?JSON.stringify(e):void 0});return this.parseResponse(r)}async getAll(t,e={}){const n=await this.get(t,{...e,page:1}),s=this.normalizeCollectionResponse(n);if(s.rv&&this.setRv(s.rv),!s.meta||s.meta.last_page<=1)return s.data;const r=Array.from({length:s.meta.last_page-1},(a,c)=>this.get(t,{...e,page:c+2})),o=await Promise.all(r);return s.data.concat(o.flatMap(a=>this.normalizeCollectionResponse(a).data))}setRv(t){this.setRvFn?this.setRvFn(t):this.rvValue=t}getRv(){return this.getRvFn?this.getRvFn():this.rvValue}async parseResponse(t){if(this.isFetchResponse(t)){if(!t.ok)throw new Error(`Request failed with status ${t.status}`);return await t.json()}return t}normalizeCollectionResponse(t){if(this.isCollectionResponseEnvelope(t)){const e=t.data;return{data:e.data,meta:e.meta,rv:t.rv||e.rv}}if(Array.isArray(t))return{data:t,meta:void 0,rv:void 0};if(typeof t=="object"&&t!==null&&"data"in t){const{data:e,meta:n,rv:s}=t;return{data:e,meta:n,rv:s}}return{data:[],meta:void 0,rv:void 0}}buildUrl(t,e){const n=new URL(`${this.baseUrl}/v1/${t}`);return Object.entries(e).forEach(([s,r])=>{r!=null&&n.searchParams.append(s,String(r))}),n.toString()}resolveRequestUrl(t){return t?t instanceof URL?t:new URL(t,"http://localhost"):null}isFetchResponse(t){return typeof t=="object"&&t!==null&&"json"in t&&typeof t.json=="function"&&"ok"in t}hasRevision(t){return typeof t=="object"&&t!==null&&"rv"in t}isCollectionResponseEnvelope(t){return typeof t=="object"&&t!==null&&"data"in t&&typeof t.data=="object"&&t.data!==null&&"data"in t.data&&Array.isArray(t.data.data)}}exports.ApiClient=N;exports.B10cksDataApi=A;exports.PreviewBridge=h;exports.PreviewStore=I;exports.attachEditable=F;exports.attachEditableField=O;exports.bindPreviewStore=U;exports.buildLocalizedPath=w;exports.createB10cksDataApi=k;exports.ensurePreviewStyles=v;exports.filterSitemapEntries=x;exports.getAtPath=D;exports.normalizePathSegment=y;exports.previewBridge=l;exports.renderSitemapIndex=M;exports.renderSitemapXml=z;exports.resolveB10cksLink=P;exports.serializeFilter=R;exports.setAtPath=p;exports.setPreviewScrollOffset=_;exports.types=B;
|
|
19
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/content.ts","../src/data-api.ts","../src/preview-bridge.ts","../src/editable.ts","../src/preview-store.ts","../src/sitemap.ts","../src/index.ts"],"sourcesContent":["import type { B10cksLink } from './types'\n\nexport interface B10cksLinkResolved {\n href: string\n target: string\n}\n\n/**\n * Resolves a B10cksLink value to a plain { href, target } object.\n *\n * - `'email'` links produce a `mailto:` href with optional subject/body/cc/bcc query params.\n * - `'url'` and `'internal'` links use the stored `url` field; an `anchor` is appended as a\n * hash fragment when present.\n * - `'asset'` links cannot be resolved to a URL without the asset record — returns `undefined`.\n * - Locale prefixing and router integration are intentionally left to the caller.\n */\nexport function resolveB10cksLink(\n link: B10cksLink | undefined | null\n): B10cksLinkResolved | undefined {\n if (!link) return undefined\n\n if (link.type === 'email') {\n const params = new URLSearchParams()\n if (link.subject) params.set('subject', link.subject)\n if (link.body) params.set('body', link.body)\n if (link.cc) params.set('cc', link.cc)\n if (link.bcc) params.set('bcc', link.bcc)\n const query = params.toString()\n return { href: `mailto:${link.email}${query ? `?${query}` : ''}`, target: '_self' }\n }\n\n if (link.type === 'asset') {\n return undefined\n }\n\n // 'url' and 'internal' share url + target + optional anchor\n const target = link.target ?? '_self'\n let href = link.url ?? ''\n if ('anchor' in link && link.anchor) {\n href = `${href.trimEnd()}#${link.anchor}`\n }\n\n return { href, target }\n}\n","import type {\n IBCollectionResponse,\n Endpoint,\n IBBaseQueryParams,\n IBBlock,\n IBContent,\n IBContentQueryParams,\n IBDataEntry,\n IBDataSource,\n IBGetBlocksParams,\n IBGetContentsParams,\n IBGetRedirectsParams,\n IBRedirect,\n IBRedirectLookupResult,\n IBSearchParams,\n IBSearchResponse,\n IBSearchResult,\n IBSitemapEntry,\n IBSpace,\n} from './types'\n\ntype ApiQueryParams = Omit<IBBaseQueryParams, 'token'> & Record<string, unknown>\ntype ApiCollectionResponse<T> =\n | T[]\n | IBCollectionResponse<T>\n | { data: T[]; rv?: string | number }\n | { data: IBCollectionResponse<T>; rv?: string | number }\ntype ApiCollectionResult<T> =\n | ApiCollectionResponse<T>\n | { data: ApiCollectionResponse<T>; rv?: string | number }\n\nexport interface CollectionFetchOptions {\n allPages?: boolean\n}\n\nexport interface RedirectFetchOptions extends CollectionFetchOptions {\n forceRefresh?: boolean\n}\n\nexport interface DataApiClient {\n get<T>(\n endpoint: Endpoint,\n params?: ApiQueryParams\n ): Promise<T | { data: T; rv?: string | number }>\n getAll<T>(endpoint: Endpoint, params?: ApiQueryParams): Promise<T[]>\n post?<T>(endpoint: string, body?: unknown, params?: ApiQueryParams): Promise<T>\n setRv(value: string | number): void\n}\n\nexport type RedirectMap = Record<string, { target: string; status_code: number }>\n\nexport interface GetConfigOptions extends Omit<IBContentQueryParams, 'token' | 'full_slug'> {\n slug?: string\n language?: string\n bypassCache?: boolean\n}\n\nfunction serializeFilterValue(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined\n if (typeof value === 'boolean') return String(value)\n if (typeof value === 'number') return String(value)\n if (typeof value === 'string') return value\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n const obj = value as Record<string, unknown>\n\n if ('null' in obj) return 'null:'\n if ('!null' in obj) return '!null:'\n if ('between' in obj) {\n const [from, to] = obj.between as [string, string]\n return `${from}...${to}`\n }\n\n const ops = [\n 'eq', 'neq', 'like', '!like', '^like', 'like$',\n 'lt', 'gt', 'lte', 'gte', 'in', '!in', 'empty', '!empty',\n ] as const\n for (const op of ops) {\n if (op in obj) {\n const val = obj[op]\n if (Array.isArray(val)) return `${op}:${val.join(',')}`\n return `${op}:${String(val)}`\n }\n }\n }\n\n return undefined\n}\n\nexport function serializeFilter(filter: Record<string, unknown>): Record<string, string> {\n const result: Record<string, string> = {}\n for (const [key, value] of Object.entries(filter)) {\n const serialized = serializeFilterValue(value)\n if (serialized !== undefined) {\n result[key] = serialized\n }\n }\n return result\n}\n\nfunction buildParamsWithFilter(\n params: Record<string, unknown>,\n filter: unknown,\n sort: string | string[] | undefined\n): ApiQueryParams {\n const filterParams =\n filter && typeof filter === 'object'\n ? serializeFilter(filter as Record<string, unknown>)\n : {}\n const sortParam =\n Array.isArray(sort) ? { sort: sort.join(',') } : sort != null ? { sort } : {}\n return { ...params, ...filterParams, ...sortParam }\n}\n\nexport class B10cksDataApi {\n private redirectsCache: RedirectMap | null = null\n private readonly configCache = new Map<string, unknown>()\n\n constructor(private readonly client: DataApiClient) {}\n\n async getResource<T>(endpoint: Endpoint, params: ApiQueryParams = {}): Promise<T> {\n const response = await this.client.get<T>(endpoint, params)\n return this.unwrapResource(response)\n }\n\n async getCollection<T>(\n endpoint: Endpoint,\n params: ApiQueryParams = {},\n options: CollectionFetchOptions = {}\n ): Promise<T[]> {\n if (options.allPages) {\n return this.client.getAll<T>(endpoint, params)\n }\n\n const response = await this.client.get<ApiCollectionResponse<T>>(endpoint, params)\n return this.unwrapCollection(response)\n }\n\n async getContent<T = Record<string, unknown>>(\n fullSlug: string,\n params: Omit<IBContentQueryParams, 'token' | 'full_slug'> = {}\n ): Promise<IBContent<T>> {\n return this.getResource<IBContent<T>>(`contents/${fullSlug}`, params)\n }\n\n async getContents<T = Record<string, unknown>>(\n params: IBGetContentsParams = {},\n options: CollectionFetchOptions = {}\n ): Promise<IBContent<T>[]> {\n const { filter, sort, ...rest } = params\n return this.getCollection<IBContent<T>>(\n 'contents',\n buildParamsWithFilter(rest, filter, sort),\n options\n )\n }\n\n async getBlock(blockId: string, params: ApiQueryParams = {}): Promise<IBBlock> {\n return this.getResource<IBBlock>(`blocks/${blockId}`, params)\n }\n\n async getBlocks(\n params: IBGetBlocksParams = {},\n options: CollectionFetchOptions = {}\n ): Promise<IBBlock[]> {\n const { filter, ...rest } = params\n return this.getCollection<IBBlock>(\n 'blocks',\n buildParamsWithFilter(rest, filter, undefined),\n options\n )\n }\n\n async search<T = Record<string, unknown>>(\n params: IBSearchParams\n ): Promise<IBSearchResponse<T>> {\n const response = await this.client.get<IBSearchResponse<T>>(\n 'search',\n params as unknown as ApiQueryParams\n )\n if (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n 'meta' in (response as Record<string, unknown>)\n ) {\n return response as IBSearchResponse<T>\n }\n if (typeof response === 'object' && response !== null && 'data' in response) {\n const inner = (response as { data: unknown }).data\n if (\n typeof inner === 'object' &&\n inner !== null &&\n 'meta' in inner &&\n 'data' in inner\n ) {\n return inner as IBSearchResponse<T>\n }\n }\n return response as unknown as IBSearchResponse<T>\n }\n\n async getSitemap(\n params: Omit<IBContentQueryParams, 'token'> = {},\n options: CollectionFetchOptions = {}\n ): Promise<IBSitemapEntry[]> {\n return this.getCollection<IBSitemapEntry>('sitemap', params, options)\n }\n\n async getDataEntries(\n source: string,\n params: ApiQueryParams = {},\n options: CollectionFetchOptions = {}\n ): Promise<IBDataEntry[]> {\n return this.getCollection<IBDataEntry>(`datasources/${source}/entries`, params, options)\n }\n\n async getDataSources(\n params: ApiQueryParams = {},\n options: CollectionFetchOptions = {}\n ): Promise<IBDataSource[]> {\n return this.getCollection<IBDataSource>('datasources', params, options)\n }\n\n async getSpace(params: ApiQueryParams = {}): Promise<IBSpace> {\n return this.getResource<IBSpace>('spaces/me', params)\n }\n\n async lookupRedirect(source: string): Promise<IBRedirectLookupResult | false> {\n if (!this.client.post) {\n throw new Error(\n 'lookupRedirect requires a client that supports POST. Use ApiClient from @b10cks/client.'\n )\n }\n return this.client.post<IBRedirectLookupResult | false>('redirects/lookup', { source })\n }\n\n async getRedirects(params?: IBGetRedirectsParams, forceRefresh?: boolean): Promise<RedirectMap>\n async getRedirects(\n params?: IBGetRedirectsParams,\n options?: RedirectFetchOptions\n ): Promise<RedirectMap>\n async getRedirects(\n params: IBGetRedirectsParams = {},\n forceRefreshOrOptions: boolean | RedirectFetchOptions = false\n ): Promise<RedirectMap> {\n const { allPages = false, forceRefresh = false } =\n typeof forceRefreshOrOptions === 'boolean'\n ? { allPages: true, forceRefresh: forceRefreshOrOptions }\n : forceRefreshOrOptions\n\n if (allPages && this.redirectsCache && !forceRefresh) {\n return this.redirectsCache\n }\n\n const { filter, ...rest } = params\n const flatParams = buildParamsWithFilter(rest, filter, undefined)\n const redirects = await this.getCollection<IBRedirect>('redirects', flatParams, { allPages })\n const map = Object.fromEntries(\n redirects.map(({ source, target, status_code }) => [source, { target, status_code }])\n )\n\n if (allPages) {\n this.redirectsCache = map\n }\n\n return map\n }\n\n async getConfig<T = Record<string, unknown>>({\n slug = '_config',\n language_iso,\n language,\n bypassCache = false,\n ...params\n }: GetConfigOptions = {}): Promise<T> {\n const normalizedLanguage = language_iso ?? language\n const cacheKey = JSON.stringify({ slug, language_iso: normalizedLanguage, ...params })\n if (!bypassCache && this.configCache.has(cacheKey)) {\n return this.configCache.get(cacheKey) as T\n }\n\n const configContent = await this.getContent<Record<string, unknown>>(slug, {\n ...params,\n language_iso: normalizedLanguage,\n })\n const value = (configContent.content ?? {}) as T\n\n if (!bypassCache) {\n this.configCache.set(cacheKey, value)\n }\n\n return value\n }\n\n async syncRevision(fallbackRv = 426713400): Promise<string | number> {\n const space = await this.getSpace()\n const nextRv = space.rv || fallbackRv\n this.client.setRv(nextRv)\n return nextRv\n }\n\n clearCache() {\n this.redirectsCache = null\n this.configCache.clear()\n }\n\n private unwrapResource<T>(response: T | { data: T }): T {\n if (typeof response === 'object' && response !== null && 'data' in response) {\n return (response as { data: T }).data\n }\n\n return response\n }\n\n private unwrapCollection<T>(response: ApiCollectionResult<T>): T[] {\n if (Array.isArray(response)) {\n return response\n }\n\n if (typeof response === 'object' && response !== null && 'data' in response) {\n if (Array.isArray(response.data)) {\n return response.data\n }\n\n if (\n typeof response.data === 'object' &&\n response.data !== null &&\n 'data' in response.data &&\n Array.isArray(response.data.data)\n ) {\n return response.data.data\n }\n }\n\n return []\n }\n}\n\nexport function createB10cksDataApi(client: DataApiClient): B10cksDataApi {\n return new B10cksDataApi(client)\n}\n","/** Addresses a field within a block, supporting nested objects and arrays. */\nexport type FieldPath = (string | number)[]\n\nexport type ContentUpdateEvent = {\n content: Record<string, unknown>\n}\n\n/** Granular update: replace the value at `path` within the content tree. */\nexport type ContentPatchEvent = {\n path: FieldPath\n value: unknown\n}\n\nexport type SelectUpdateEvent = {\n selectedItem: string\n}\n\nexport type FieldUpdateEvent = {\n itemId: string\n /** Path to the field within the block. Preferred over `field`. */\n path?: FieldPath\n /** @deprecated Use `path`. Kept for flat string fields. */\n field?: string\n value: unknown\n}\n\n/**\n * Deep-select a specific field (e.g. a rich text field) so the editor opens\n * its own editor for that field instead of editing it inline in the preview.\n */\nexport type FieldSelectEvent = {\n itemId: string\n path: FieldPath\n}\n\nexport type EventType =\n | 'CONTENT_UPDATE'\n | 'CONTENT_PATCH'\n | 'SELECT_UPDATE'\n | 'HOVER_UPDATE'\n | 'FIELD_UPDATE'\n | 'FIELD_SELECT'\n\nexport type EventPayloadMap = {\n CONTENT_UPDATE: ContentUpdateEvent\n CONTENT_PATCH: ContentPatchEvent\n SELECT_UPDATE: SelectUpdateEvent\n HOVER_UPDATE: SelectUpdateEvent\n FIELD_UPDATE: FieldUpdateEvent\n FIELD_SELECT: FieldSelectEvent\n}\n\nconst EVENT_TYPES: ReadonlySet<string> = new Set<EventType>([\n 'CONTENT_UPDATE',\n 'CONTENT_PATCH',\n 'SELECT_UPDATE',\n 'HOVER_UPDATE',\n 'FIELD_UPDATE',\n 'FIELD_SELECT',\n])\n\n/** Sent by the preview to announce it is ready to receive events. */\nconst BRIDGE_READY = 'B10CKS_BRIDGE_READY'\n\ntype EventCallback<T> = (payload: T) => void\n\nexport type BridgeEvent = {\n type: EventType\n payload: EventPayloadMap[EventType]\n b10cksId?: string\n}\n\nexport interface PreviewBridgeInitOptions {\n /**\n * Origins the editor is allowed to post from. When provided, messages from\n * any other origin are ignored. When omitted, the bridge locks onto the\n * origin of the first valid message it receives (trust-on-first-use).\n */\n allowedOrigins?: string[]\n}\n\nexport class PreviewBridge {\n private static instance: PreviewBridge\n private readonly listeners: Partial<Record<EventType, Set<EventCallback<unknown>>>> = {}\n private initialized = false\n private allowedOrigins: string[] | null = null\n /** Origin of the editor, captured from the first trusted message. */\n private parentOrigin: string | null = null\n\n private constructor() {}\n\n static getInstance() {\n if (!PreviewBridge.instance) {\n PreviewBridge.instance = new PreviewBridge()\n }\n return PreviewBridge.instance\n }\n\n init(options: PreviewBridgeInitOptions = {}) {\n if (!this.isInPreviewMode() || this.initialized) {\n return\n }\n\n this.allowedOrigins = options.allowedOrigins ?? null\n window.addEventListener('message', this.handleMessage)\n this.initialized = true\n\n // Announce readiness so the editor can target this preview by origin.\n window.parent.postMessage({ type: BRIDGE_READY }, '*')\n }\n\n destroy() {\n if (this.initialized && typeof window !== 'undefined') {\n window.removeEventListener('message', this.handleMessage)\n }\n this.initialized = false\n this.parentOrigin = null\n for (const eventType of Object.keys(this.listeners) as EventType[]) {\n this.listeners[eventType]?.clear()\n }\n }\n\n isInPreviewMode(): boolean {\n return typeof window !== 'undefined' && window.self !== window.top\n }\n\n on<T extends EventType>(eventType: T, callback: EventCallback<EventPayloadMap[T]>): () => void {\n if (!this.isInPreviewMode()) {\n return () => {}\n }\n\n const listeners = this.listeners[eventType] || new Set<EventCallback<unknown>>()\n this.listeners[eventType] = listeners\n listeners.add(callback as EventCallback<unknown>)\n\n return () => {\n listeners.delete(callback as EventCallback<unknown>)\n }\n }\n\n selectItem(selectedItem: string) {\n this.post('SELECT_UPDATE', { selectedItem })\n }\n\n /** Deep-select a nested field (e.g. a rich text field) in the editor. */\n selectField(itemId: string, path: FieldPath) {\n this.post('FIELD_SELECT', { itemId, path })\n }\n\n /** @deprecated Prefer {@link updateFieldAt} with a path. */\n updateField(itemId: string, field: string, value: string) {\n this.post('FIELD_UPDATE', { itemId, field, value })\n }\n\n /** Stream an inline edit back to the editor, addressed by path. */\n updateFieldAt(itemId: string, path: FieldPath, value: unknown) {\n this.post('FIELD_UPDATE', { itemId, path, value })\n }\n\n private post<T extends EventType>(type: T, payload: EventPayloadMap[T]) {\n if (!this.isInPreviewMode()) {\n return\n }\n\n window.parent.postMessage({ type, payload }, this.parentOrigin ?? '*')\n }\n\n private handleMessage = (event: MessageEvent) => {\n if (!this.isOriginTrusted(event.origin)) {\n return\n }\n\n if (!event.data || typeof event.data !== 'object') {\n return\n }\n\n const { type, payload } = event.data as BridgeEvent\n if (!type || !EVENT_TYPES.has(type) || !payload) {\n return\n }\n\n // Lock onto the editor's origin on the first trusted, valid message.\n if (!this.parentOrigin && event.origin && event.origin !== 'null') {\n this.parentOrigin = event.origin\n }\n\n this.notify(type, payload as never)\n }\n\n private isOriginTrusted(origin: string): boolean {\n if (this.parentOrigin) {\n return origin === this.parentOrigin\n }\n if (this.allowedOrigins) {\n return this.allowedOrigins.includes(origin)\n }\n // Trust-on-first-use: accept the first message and lock onto its origin.\n return true\n }\n\n private notify<T extends EventType>(type: T, payload: EventPayloadMap[T]) {\n const callbacks = this.listeners[type]\n if (!callbacks) {\n return\n }\n\n for (const callback of callbacks) {\n ;(callback as EventCallback<EventPayloadMap[T]>)(payload)\n }\n }\n}\n\nexport const previewBridge = PreviewBridge.getInstance()\n","import type { FieldPath, SelectUpdateEvent } from './preview-bridge'\n\nimport { previewBridge } from './preview-bridge'\n\nconst STYLE_ID = 'b10cks-preview-style'\nconst SCROLL_OFFSET_VAR = '--b10cks-scroll-offset'\n\n/**\n * Inject the preview outline styles once. Selected/hovered blocks get an\n * outline; `.b10cks-preview` carries a `scroll-margin-top` so scroll-into-view\n * clears a fixed app header. Set the offset via {@link setPreviewScrollOffset}\n * or the `--b10cks-scroll-offset` CSS variable.\n */\nexport function ensurePreviewStyles(): void {\n if (typeof document === 'undefined' || document.getElementById(STYLE_ID)) {\n return\n }\n\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = `\n .b10cks-preview { scroll-margin-top: var(${SCROLL_OFFSET_VAR}, 0px); }\n .b10cks-hover,\n .b10cks-preview:hover {\n outline: 2px dashed rgba(59, 130, 246, 0.5);\n outline-offset: 2px;\n }\n .b10cks-selected {\n outline: 2px solid rgb(59, 130, 246) !important;\n outline-offset: 2px;\n }\n `\n document.head.appendChild(style)\n}\n\n/**\n * Set the scroll offset used when a selected block is scrolled into view.\n * Pass your fixed header's height so selection no longer overshoots beneath it.\n * A number is treated as pixels; strings are used verbatim (e.g. `\"5rem\"`).\n */\nexport function setPreviewScrollOffset(offset: number | string): void {\n if (typeof document === 'undefined') {\n return\n }\n const value = typeof offset === 'number' ? `${offset}px` : offset\n document.documentElement.style.setProperty(SCROLL_OFFSET_VAR, value)\n}\n\nexport interface AttachEditableOptions {\n id: string\n onSelectChange?: (selected: boolean) => void\n onHoverChange?: (hovered: boolean) => void\n /** Scroll the element into view when it becomes selected. Default true. */\n scrollOnSelect?: boolean\n}\n\n/**\n * Wire a DOM element as a selectable block: click selects it in the editor,\n * and editor-driven select/hover toggle outline classes. Honors the configured\n * scroll offset and only scrolls when the element isn't already in view.\n * Returns a cleanup function. No-op outside preview mode.\n */\nexport function attachEditable(el: HTMLElement, options: AttachEditableOptions): () => void {\n if (!previewBridge.isInPreviewMode() || !options.id) {\n return () => {}\n }\n\n ensurePreviewStyles()\n const { id, onSelectChange, onHoverChange, scrollOnSelect = true } = options\n\n el.classList.add('b10cks-preview')\n\n const handleClick = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n previewBridge.selectItem(id)\n }\n\n const handleSelect = ({ selectedItem }: SelectUpdateEvent) => {\n const selected = selectedItem === id\n el.classList.toggle('b10cks-selected', selected)\n if (selected && scrollOnSelect) {\n scrollIntoViewIfNeeded(el)\n }\n onSelectChange?.(selected)\n }\n\n const handleHover = ({ selectedItem }: SelectUpdateEvent) => {\n const hovered = selectedItem === id\n el.classList.toggle('b10cks-hover', hovered)\n onHoverChange?.(hovered)\n }\n\n el.addEventListener('click', handleClick)\n const offSelect = previewBridge.on('SELECT_UPDATE', handleSelect)\n const offHover = previewBridge.on('HOVER_UPDATE', handleHover)\n\n return () => {\n el.removeEventListener('click', handleClick)\n offSelect()\n offHover()\n el.classList.remove('b10cks-preview', 'b10cks-selected', 'b10cks-hover')\n }\n}\n\nexport type EditableFieldMode = 'inline' | 'select'\n\nexport interface AttachEditableFieldOptions {\n id: string\n /** @deprecated Use `path`. Kept for flat string fields. */\n field?: string\n path?: FieldPath\n /**\n * `inline` makes the element contenteditable and streams plain-text edits\n * back to the editor — suitable for simple string fields only. `select`\n * instead deep-selects the field so the editor opens its own editor, which\n * is the right choice for rich text and other complex types. Default\n * `inline`, or `select` automatically when no `field` is given but a `path`\n * targets a complex value.\n */\n mode?: EditableFieldMode\n}\n\n/**\n * Wire a DOM element for field editing. Returns a cleanup function. No-op\n * outside preview mode. See {@link AttachEditableFieldOptions.mode}.\n */\nexport function attachEditableField(\n el: HTMLElement,\n options: AttachEditableFieldOptions\n): () => void {\n if (!previewBridge.isInPreviewMode() || !options.id) {\n return () => {}\n }\n\n const { id, field, path, mode = 'inline' } = options\n\n if (mode === 'select') {\n ensurePreviewStyles()\n el.classList.add('b10cks-preview')\n\n const handleClick = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n if (path) {\n previewBridge.selectField(id, path)\n } else {\n previewBridge.selectItem(id)\n }\n }\n\n el.addEventListener('click', handleClick)\n return () => {\n el.removeEventListener('click', handleClick)\n el.classList.remove('b10cks-preview')\n }\n }\n\n el.setAttribute('contenteditable', 'true')\n\n const handleInput = (event: Event) => {\n const value = (event.target as HTMLElement).innerText\n if (path) {\n previewBridge.updateFieldAt(id, path, value)\n } else {\n previewBridge.updateField(id, field ?? '', value)\n }\n }\n\n el.addEventListener('input', handleInput)\n return () => {\n el.removeEventListener('input', handleInput)\n el.removeAttribute('contenteditable')\n }\n}\n\nfunction scrollIntoViewIfNeeded(el: HTMLElement): void {\n if (typeof el.scrollIntoView === 'function') {\n el.scrollIntoView({ block: 'nearest', behavior: 'smooth' })\n }\n}\n","import type { FieldPath } from './preview-bridge'\n\nimport { previewBridge } from './preview-bridge'\n\n/** Read the value at `path` within `target`, or undefined if absent. */\nexport function getAtPath(target: unknown, path: FieldPath): unknown {\n let current = target\n for (const key of path) {\n if (current == null || typeof current !== 'object') {\n return undefined\n }\n current = (current as Record<string | number, unknown>)[key]\n }\n return current\n}\n\n/** Return a copy of `target` with the value at `path` replaced. Immutable. */\nexport function setAtPath<T>(target: T, path: FieldPath, value: unknown): T {\n if (path.length === 0) {\n return value as T\n }\n\n const [key, ...rest] = path\n if (key === undefined) {\n return value as T\n }\n\n if (typeof key === 'number') {\n const next = Array.isArray(target) ? (target as unknown[]).slice() : []\n next[key] = setAtPath(next[key], rest, value)\n return next as unknown as T\n }\n\n const next: Record<string, unknown> =\n target && typeof target === 'object' && !Array.isArray(target)\n ? { ...(target as Record<string, unknown>) }\n : {}\n next[key] = setAtPath(next[key], rest, value)\n return next as T\n}\n\ntype Listener = () => void\n\n/**\n * A framework-agnostic, reactive holder for the content tree shown in the\n * preview. The editor pushes whole-tree (`CONTENT_UPDATE`) or granular\n * (`CONTENT_PATCH`) changes; subscribers re-render from the new snapshot.\n */\nexport class PreviewStore<T = Record<string, unknown>> {\n private content: T\n private readonly listeners = new Set<Listener>()\n\n constructor(initial: T) {\n this.content = initial\n }\n\n subscribe = (listener: Listener): (() => void) => {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n getSnapshot = (): T => this.content\n\n setContent(next: T) {\n this.content = next\n this.emit()\n }\n\n patch(path: FieldPath, value: unknown) {\n this.content = setAtPath(this.content, path, value)\n this.emit()\n }\n\n private emit() {\n for (const listener of this.listeners) {\n listener()\n }\n }\n}\n\n/**\n * Feed the singleton bridge's content events into a {@link PreviewStore}.\n * Returns an unsubscribe function. No-op outside preview mode.\n */\nexport function bindPreviewStore<T>(store: PreviewStore<T>): () => void {\n const offUpdate = previewBridge.on('CONTENT_UPDATE', ({ content }) => {\n store.setContent(content as T)\n })\n const offPatch = previewBridge.on('CONTENT_PATCH', ({ path, value }) => {\n store.patch(path, value)\n })\n\n return () => {\n offUpdate()\n offPatch()\n }\n}\n","import type { IBSitemapEntry } from './types'\n\nexport function normalizePathSegment(value: string | null | undefined): string {\n return (value ?? '').trim().replace(/^\\/+|\\/+$/g, '')\n}\n\n/**\n * Combines a b10cks `full_slug` and `language_iso` into a rooted, locale-prefixed path.\n *\n * - The slug `home` is treated as the root (`/` or `/<locale>`).\n * - Slugs that already start with the locale prefix are not double-prefixed.\n */\nexport function buildLocalizedPath(\n fullSlug: string | null | undefined,\n languageIso: string | null | undefined\n): string {\n const slug = normalizePathSegment(fullSlug)\n const locale = normalizePathSegment(languageIso)\n\n if (!locale) {\n return slug && slug !== 'home' ? `/${slug}` : '/'\n }\n\n if (!slug || slug === 'home') {\n return `/${locale}`\n }\n\n const localePrefix = `${locale}/`\n if (slug === locale || slug.startsWith(localePrefix)) {\n return `/${slug}`\n }\n\n return `/${locale}/${slug}`\n}\n\nfunction toAbsoluteUrl(path: string, siteUrl?: string): string | null {\n if (!siteUrl) return null\n try {\n return new URL(path, siteUrl).toString()\n } catch {\n return null\n }\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n}\n\nexport interface SitemapFilterOptions {\n /** Absolute base URL used for deduplication. Without it, paths are compared as strings. */\n siteUrl?: string\n /** Only include entries for this locale (ISO code). */\n locale?: string\n}\n\n/**\n * Filters sitemap entries by locale, deduplicates by resolved URL, and drops `noindex` entries.\n */\nexport function filterSitemapEntries(\n entries: IBSitemapEntry[],\n options: SitemapFilterOptions = {}\n): IBSitemapEntry[] {\n const { siteUrl, locale } = options\n const seen = new Set<string>()\n\n return entries.filter((entry) => {\n if (locale && entry.language_iso !== locale) return false\n if (entry.meta?.robots?.toLowerCase().includes('noindex')) return false\n\n const path = buildLocalizedPath(entry.full_slug, entry.language_iso)\n const key = siteUrl ? (toAbsoluteUrl(path, siteUrl) ?? path) : path\n if (seen.has(key)) return false\n\n seen.add(key)\n return true\n })\n}\n\n/**\n * Renders `IBSitemapEntry[]` as a `<urlset>` XML string.\n * Pass `siteUrl` to emit absolute `<loc>` values; without it, relative paths are used.\n */\nexport function renderSitemapXml(entries: IBSitemapEntry[], siteUrl?: string): string {\n const urls = entries\n .map((entry) => {\n const path = buildLocalizedPath(entry.full_slug, entry.language_iso)\n const loc = siteUrl ? toAbsoluteUrl(path, siteUrl) : path\n if (!loc) return ''\n const lines = [' <url>', ` <loc>${escapeXml(loc)}</loc>`]\n if (entry.published_at) lines.push(` <lastmod>${escapeXml(entry.published_at)}</lastmod>`)\n lines.push(' </url>')\n return lines.join('\\n')\n })\n .filter(Boolean)\n .join('\\n')\n\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">',\n urls,\n '</urlset>',\n ].join('\\n')\n}\n\n/**\n * Renders a list of sitemap paths as a `<sitemapindex>` XML string.\n */\nexport function renderSitemapIndex(paths: string[], siteUrl?: string): string {\n const sitemaps = paths\n .map((path) => {\n const loc = siteUrl ? toAbsoluteUrl(path, siteUrl) : path\n if (!loc) return ''\n return [' <sitemap>', ` <loc>${escapeXml(loc)}</loc>`, ' </sitemap>'].join('\\n')\n })\n .filter(Boolean)\n .join('\\n')\n\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">',\n sitemaps,\n '</sitemapindex>',\n ].join('\\n')\n}\n","import type {\n B10cksApiClientOptions,\n Endpoint,\n FetchClient,\n IBBaseQueryParams,\n IBCollectionResponse,\n IBMeta,\n IBResponse,\n} from './types'\n\nexport interface B10cksApiClientRvOptions {\n getRv?: () => string | number\n setRv?: (value: string | number) => void\n}\n\nexport * from './content'\nexport * from './data-api'\nexport * from './editable'\nexport * from './preview-bridge'\nexport * from './preview-store'\nexport * from './sitemap'\nexport type * from './types'\nexport * as types from './types'\n\ntype ApiResourceResponse<T> = IBResponse<T> | T\ntype ApiCollectionResponse<T> =\n | IBCollectionResponse<T>\n | IBResponse<IBCollectionResponse<T>>\n | T[]\n | { data: T[]; meta?: IBMeta; rv?: string | number }\n\nexport class ApiClient {\n private readonly baseUrl: string\n readonly token: string\n private readonly vid: string\n private readonly fetchClient: FetchClient\n private readonly getRvFn?: () => string | number\n private readonly setRvFn?: (value: string | number) => void\n /**\n * Per-instance revision store, used when no `getRv`/`setRv` callbacks are\n * supplied. Kept on the instance (not module scope) so concurrent requests\n * in a server runtime cannot leak revisions into one another. Server callers\n * that need request-scoped persistence should pass `getRv`/`setRv`.\n */\n private rvValue: string | number = 0\n\n constructor(options: B10cksApiClientOptions, requestUrl?: URL | string) {\n this.baseUrl = options.baseUrl.endsWith('/') ? options.baseUrl.slice(0, -1) : options.baseUrl\n this.token = options.token\n const defaultFetch =\n typeof globalThis.fetch === 'function' ? globalThis.fetch.bind(globalThis) : null\n if (options.fetchClient) {\n this.fetchClient = options.fetchClient\n } else if (defaultFetch) {\n this.fetchClient = defaultFetch as FetchClient\n } else {\n throw new Error(\n 'No fetch implementation available. Provide `fetchClient` in ApiClient options.'\n )\n }\n\n this.getRvFn = options.getRv\n this.setRvFn = options.setRv\n\n const url = this.resolveRequestUrl(requestUrl)\n this.vid = options.version || 'published'\n this.setRv(url?.searchParams.get('b10cks_rv') || options.rv || 0)\n }\n\n async get<T>(\n endpoint: Endpoint,\n params: Omit<IBBaseQueryParams, 'token'> & Record<string, unknown> = {}\n ): Promise<ApiResourceResponse<T>> {\n const url = this.buildUrl(endpoint, {\n vid: this.vid,\n rv: this.getRv(),\n ...params,\n token: this.token,\n })\n\n const payload = await this.fetchClient(url)\n const response = await this.parseResponse<ApiResourceResponse<T>>(payload)\n\n if (this.hasRevision(response)) {\n this.setRv(response.rv)\n }\n\n return response\n }\n\n async post<T>(\n endpoint: string,\n body?: unknown,\n params: Omit<IBBaseQueryParams, 'token'> & Record<string, unknown> = {}\n ): Promise<T> {\n const url = this.buildUrl(endpoint, {\n vid: this.vid,\n rv: this.getRv(),\n ...params,\n token: this.token,\n })\n\n const payload = await this.fetchClient(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n\n return this.parseResponse<T>(payload)\n }\n\n async getAll<T>(\n endpoint: Endpoint,\n params: Omit<IBBaseQueryParams, 'token'> & Record<string, unknown> = {}\n ): Promise<T[]> {\n const firstResponse = await this.get<IBCollectionResponse<T> & { meta?: IBMeta }>(endpoint, {\n ...params,\n page: 1,\n })\n const normalizedFirstResponse = this.normalizeCollectionResponse<T>(firstResponse)\n\n if (normalizedFirstResponse.rv) {\n this.setRv(normalizedFirstResponse.rv)\n }\n\n if (!normalizedFirstResponse.meta || normalizedFirstResponse.meta.last_page <= 1) {\n return normalizedFirstResponse.data\n }\n\n const pageRequests = Array.from(\n { length: normalizedFirstResponse.meta.last_page - 1 },\n (_, i) => this.get<IBCollectionResponse<T>>(endpoint, { ...params, page: i + 2 })\n )\n\n const allResponses = await Promise.all(pageRequests)\n\n return normalizedFirstResponse.data.concat(\n allResponses.flatMap((response) => this.normalizeCollectionResponse<T>(response).data)\n )\n }\n\n setRv(value: string | number) {\n if (this.setRvFn) {\n this.setRvFn(value)\n } else {\n this.rvValue = value\n }\n }\n\n getRv() {\n if (this.getRvFn) {\n return this.getRvFn()\n }\n return this.rvValue\n }\n\n private async parseResponse<T>(payload: unknown): Promise<T> {\n if (this.isFetchResponse(payload)) {\n if (!payload.ok) {\n throw new Error(`Request failed with status ${payload.status}`)\n }\n\n return (await payload.json()) as T\n }\n\n return payload as T\n }\n\n private normalizeCollectionResponse<T>(response: ApiCollectionResponse<T>) {\n if (this.isCollectionResponseEnvelope(response)) {\n const nestedResponse = response.data\n\n return {\n data: nestedResponse.data,\n meta: (nestedResponse as IBCollectionResponse<T> & { meta?: IBMeta }).meta,\n rv: response.rv || nestedResponse.rv,\n }\n }\n\n if (Array.isArray(response)) {\n return { data: response, meta: undefined, rv: undefined }\n }\n\n if (typeof response === 'object' && response !== null && 'data' in response) {\n const {\n data,\n meta,\n rv: responseRv,\n } = response as {\n data: T[]\n meta?: IBMeta\n rv?: string | number\n }\n return { data, meta, rv: responseRv }\n }\n\n return { data: [], meta: undefined, rv: undefined }\n }\n\n private buildUrl(endpoint: string, params: Record<string, unknown>): string {\n const url = new URL(`${this.baseUrl}/v1/${endpoint}`)\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value))\n }\n })\n\n return url.toString()\n }\n\n private resolveRequestUrl(requestUrl?: URL | string): URL | null {\n if (!requestUrl) {\n return null\n }\n\n if (requestUrl instanceof URL) {\n return requestUrl\n }\n\n return new URL(requestUrl, 'http://localhost')\n }\n\n private isFetchResponse(value: unknown): value is Response {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'json' in value &&\n typeof (value as Response).json === 'function' &&\n 'ok' in value\n )\n }\n\n private hasRevision(value: unknown): value is { rv: string | number } {\n return typeof value === 'object' && value !== null && 'rv' in value\n }\n\n private isCollectionResponseEnvelope<T>(\n value: ApiCollectionResponse<T>\n ): value is IBResponse<IBCollectionResponse<T>> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'data' in value &&\n typeof value.data === 'object' &&\n value.data !== null &&\n 'data' in value.data &&\n Array.isArray(value.data.data)\n )\n }\n}\n"],"names":["resolveB10cksLink","link","params","query","target","href","serializeFilterValue","value","obj","from","to","ops","op","val","serializeFilter","filter","result","key","serialized","buildParamsWithFilter","sort","filterParams","sortParam","B10cksDataApi","client","endpoint","response","options","fullSlug","rest","blockId","inner","source","forceRefreshOrOptions","allPages","forceRefresh","flatParams","redirects","map","status_code","slug","language_iso","language","bypassCache","normalizedLanguage","cacheKey","fallbackRv","nextRv","createB10cksDataApi","EVENT_TYPES","BRIDGE_READY","PreviewBridge","eventType","callback","listeners","selectedItem","itemId","path","field","type","payload","event","origin","callbacks","previewBridge","STYLE_ID","SCROLL_OFFSET_VAR","ensurePreviewStyles","style","setPreviewScrollOffset","offset","attachEditable","el","id","onSelectChange","onHoverChange","scrollOnSelect","handleClick","handleSelect","selected","scrollIntoViewIfNeeded","handleHover","hovered","offSelect","offHover","attachEditableField","mode","handleInput","getAtPath","current","setAtPath","next","PreviewStore","initial","listener","bindPreviewStore","store","offUpdate","content","offPatch","normalizePathSegment","buildLocalizedPath","languageIso","locale","localePrefix","toAbsoluteUrl","siteUrl","escapeXml","filterSitemapEntries","entries","seen","entry","renderSitemapXml","loc","lines","renderSitemapIndex","paths","ApiClient","requestUrl","defaultFetch","url","body","firstResponse","normalizedFirstResponse","pageRequests","_","i","allResponses","nestedResponse","data","meta","responseRv"],"mappings":"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"}
|