@murumets-ee/content 0.98.0 → 0.101.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.
Files changed (64) hide show
  1. package/dist/admin.mjs +1 -1
  2. package/dist/block-resolver.d.mts +18 -0
  3. package/dist/block-resolver.d.mts.map +1 -1
  4. package/dist/block-resolver.mjs +1 -1
  5. package/dist/block-resolver.mjs.map +1 -1
  6. package/dist/chrome-provider.d.mts +1 -1
  7. package/dist/chrome-provider.mjs +1 -1
  8. package/dist/client.d.mts +2 -2
  9. package/dist/client.mjs +1 -1
  10. package/dist/client.mjs.map +1 -1
  11. package/dist/context-DtHgyrgb.mjs +2 -0
  12. package/dist/{context-D7eEItCY.mjs.map → context-DtHgyrgb.mjs.map} +1 -1
  13. package/dist/document-site-B8tmEqLw.mjs +2 -0
  14. package/dist/document-site-B8tmEqLw.mjs.map +1 -0
  15. package/dist/entities/index.d.mts +2 -2
  16. package/dist/entities/index.mjs +1 -1
  17. package/dist/{index-C3VyZLjf.d.mts → index-Bni-PiIz.d.mts} +2 -2
  18. package/dist/{index-C3VyZLjf.d.mts.map → index-Bni-PiIz.d.mts.map} +1 -1
  19. package/dist/index.d.mts +4 -4
  20. package/dist/index.mjs +1 -1
  21. package/dist/locale-registry-COsJrVZl.mjs +2 -0
  22. package/dist/locale-registry-COsJrVZl.mjs.map +1 -0
  23. package/dist/lock-service.d.mts +1 -1
  24. package/dist/plugin-CvPWz399.mjs +2 -0
  25. package/dist/plugin-CvPWz399.mjs.map +1 -0
  26. package/dist/plugin.d.mts +2 -2
  27. package/dist/plugin.d.mts.map +1 -1
  28. package/dist/plugin.mjs +1 -1
  29. package/dist/resolve.mjs +1 -1
  30. package/dist/routes-D-NWP0hK.mjs +2 -0
  31. package/dist/routes-D-NWP0hK.mjs.map +1 -0
  32. package/dist/{routing-strategy-DV7KGarX.d.mts → routing-strategy-DVWB7qPp.d.mts} +2 -2
  33. package/dist/{routing-strategy-DV7KGarX.d.mts.map → routing-strategy-DVWB7qPp.d.mts.map} +1 -1
  34. package/dist/seed.d.mts.map +1 -1
  35. package/dist/seed.mjs +1 -1
  36. package/dist/seed.mjs.map +1 -1
  37. package/dist/site-chrome-BAtQaAqC.mjs +2 -0
  38. package/dist/{site-chrome-DvP9SXGu.mjs.map → site-chrome-BAtQaAqC.mjs.map} +1 -1
  39. package/dist/{site-chrome-CUE16iIz.d.mts → site-chrome-BiV3zhw0.d.mts} +3 -2
  40. package/dist/{site-chrome-CUE16iIz.d.mts.map → site-chrome-BiV3zhw0.d.mts.map} +1 -1
  41. package/dist/translation-provenance--dHtcmfg.d.mts +253 -0
  42. package/dist/translation-provenance--dHtcmfg.d.mts.map +1 -0
  43. package/dist/translation-provenance-eqhsGAyi.mjs +2 -0
  44. package/dist/translation-provenance-eqhsGAyi.mjs.map +1 -0
  45. package/dist/translation.d.mts +2 -0
  46. package/dist/translation.mjs +1 -0
  47. package/dist/{types-B3K2p9t8.d.mts → types-wMTglM4j.d.mts} +13 -4
  48. package/dist/types-wMTglM4j.d.mts.map +1 -0
  49. package/dist/{versionable-ByZgfpp0.d.mts → versionable-D2JjselN.d.mts} +2 -2
  50. package/dist/{versionable-ByZgfpp0.d.mts.map → versionable-D2JjselN.d.mts.map} +1 -1
  51. package/dist/{versions-C5_IJpI8.mjs → versions-B0_9TtZ0.mjs} +2 -2
  52. package/dist/{versions-C5_IJpI8.mjs.map → versions-B0_9TtZ0.mjs.map} +1 -1
  53. package/package.json +14 -10
  54. package/dist/context-D7eEItCY.mjs +0 -2
  55. package/dist/locale-registry-Bn6e_nM7.mjs +0 -2
  56. package/dist/locale-registry-Bn6e_nM7.mjs.map +0 -1
  57. package/dist/plugin-DmyWYmuE.mjs +0 -2
  58. package/dist/plugin-DmyWYmuE.mjs.map +0 -1
  59. package/dist/registry-CaPbY5lm.mjs +0 -2
  60. package/dist/registry-CaPbY5lm.mjs.map +0 -1
  61. package/dist/routes-B6TJ5qiR.mjs +0 -2
  62. package/dist/routes-B6TJ5qiR.mjs.map +0 -1
  63. package/dist/site-chrome-DvP9SXGu.mjs +0 -2
  64. package/dist/types-B3K2p9t8.d.mts.map +0 -1
package/dist/admin.mjs CHANGED
@@ -1 +1 @@
1
- import{n as e,r as t,t as n}from"./routes-B6TJ5qiR.mjs";export{e as PATH_RESOLVE_PERMISSION,t as pathRoutes,n as redirectRoutes};
1
+ import{n as e,r as t,t as n}from"./routes-D-NWP0hK.mjs";export{e as PATH_RESOLVE_PERMISSION,t as pathRoutes,n as redirectRoutes};
@@ -113,6 +113,13 @@ interface ResolvedBlockTree {
113
113
  * has a value for at least one declared part.
114
114
  */
115
115
  readonly detail?: DocumentDetail;
116
+ /**
117
+ * Block type → the data a plugin's provider resolved for it
118
+ * (`blocks.dataProviders`, davatoidud-toolkit PR04) — only for the types this
119
+ * tree draws, and absent when there is none. Each value is validated by the
120
+ * block that draws it.
121
+ */
122
+ readonly blockData?: Readonly<Record<string, unknown>>;
116
123
  }
117
124
  /**
118
125
  * What resolving COLLECTION blocks needs from the app — built once per app by
@@ -218,6 +225,17 @@ interface BlockResolverDeps {
218
225
  readonly steps: readonly DocumentBreadcrumb[];
219
226
  readonly ancestors: readonly BlockTreeRef[];
220
227
  } | undefined>) | undefined;
228
+ /**
229
+ * Resolve the plugin-owned data the tree's block types draw
230
+ * (`blocks.dataProviders`, davatoidud-toolkit PR04). Asked once per tree, only
231
+ * with the types the tree contains that have a provider, and charged against
232
+ * the response's collection allowance and budget like the breadcrumb trail —
233
+ * a provider reads a table, so a list response must not become one read per
234
+ * row. Omit and no tree carries `blockData`.
235
+ */
236
+ resolveBlockData?: ((types: readonly string[], locale: string) => Promise<Record<string, unknown>>) | undefined;
237
+ /** The block types that have a provider — what {@link resolveBlockData} may be asked about. */
238
+ blockDataTypes?: ReadonlySet<string> | undefined;
221
239
  /**
222
240
  * Embedded documents (forms D002) — a block that names another document
223
241
  * shows that document's PUBLISHED tree in its place. Omit and every embed
@@ -1 +1 @@
1
- {"version":3,"file":"block-resolver.d.mts","names":[],"sources":["../src/embedded-documents.ts","../src/block-resolver.ts"],"mappings":"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"}
1
+ {"version":3,"file":"block-resolver.d.mts","names":[],"sources":["../src/embedded-documents.ts","../src/block-resolver.ts"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as e,t}from"./resolve-context-DklN53BH.mjs";import{r as n}from"./enumerate-CYHJKQz6.mjs";import{n as r}from"./breadcrumbs-BqSuMNac.mjs";import{createSystemReachResolver as i}from"@murumets-ee/core";import{QueryClient as a}from"@murumets-ee/entity/query";import{inArray as o}from"drizzle-orm";import{collectLinkValues as s,linkValueKey as c}from"@murumets-ee/blocks/links";import{breadcrumbLabelOf as l,canvasSiteFormat as u,collectBoundColumnsInTree as d,collectEmbeds as f,createCollectionReader as p,detailNeedsBody as m,detailPartsInTree as h,distinctEmbeddedDocuments as g,effectiveCollectionSources as _,effectiveDetailSpecs as v,embedReferenceKey as y,hasConfiguredLiveSources as b,loadCanvasLiveValues as x,materializeServerTemplate as S,readSpotCrop as C,resolveDocumentDetail as w,resolveLinks as T,resolveTreeCollections as E,sameSpotCrop as D,serverBlockStructureLookup as O,serverBoundColumnsInTree as k,serverCollectionFieldLookup as A,serverEmbedLookup as j,serverTemplateMaterializer as M,templateNamespace as N}from"@murumets-ee/blocks/server";function P(e){return Array.isArray(e)}function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function I(e,t){let n=structuredClone(e),r=e=>{if(P(e))for(let n of e)F(n)&&(typeof n.id==`string`&&(n.id=`${t}${n.id}`),r(n.children))};return r(n),Array.isArray(n)?n:[]}async function L(e,t,n,r){if(n===void 0||n.lookup.size===0)return{expanded:[]};R(e,n.lookup);let i=f(e,n.lookup,{onDropped:e=>r?.warn({entity:t.entity,dropped:e},`content: a block tree embeds more documents than one page may show; the rest show nothing`)});if(i.length===0)return{expanded:[]};let a=g(i),o=t.budget.claim(`block`,a.length),s=a.slice(0,o);if(s.length<a.length&&r?.warn({entity:t.entity,dropped:a.length-s.length},`content: the response budget is spent; some embedded documents show nothing`),s.length===0)return{expanded:[]};let c;try{c=await n.load(s,t.locale)}catch(e){return r?.warn({err:e,entity:t.entity},`content: loading embedded documents failed; they show nothing`),{expanded:s}}let l=new Map(i.map(e=>[e.blockId,e])),u=e=>{if(P(e))for(let t of e){if(!F(t))continue;let e=typeof t.id==`string`?l.get(t.id):void 0;if(e===void 0){u(t.children);continue}let n=c.get(y(e));n!==void 0&&(t.children=I(n,`${e.blockId}~`))}};return u(e),{expanded:s}}function R(e,t){let n=(e,r)=>{if(!(!P(e)||r>64)){for(let i of e)if(F(i)){if(typeof i.type==`string`&&t.has(i.type)){i.children!==void 0&&(i.children=[]);continue}n(i.children,r+1)}}};n(e,0)}const z=i(`embed-resolver`);function B(e){for(let[t,n]of Object.entries(e.allFields))if(n.type===`blockTree`)return t}async function V(e,t,n){let r=new Map,i=new Map;for(let e of t){let t=i.get(e.entity)??[];t.push(e.id),i.set(e.entity,t)}for(let[t,s]of i){let i=e.entities.get(t),c=i===void 0?void 0:B(i);if(i===void 0||c===void 0)continue;let l;try{let r=new a({entity:i,db:e.db.readOnly,logger:e.logger.child({resolve:`embedded-document`,entity:t}),contextResolver:z}),c=r.getTable().id;l=await r.findMany({where:o(c,s),locale:n,limit:s.length})}catch(n){e.logger.warn({err:n,entity:t,count:s.length},`content: reading embedded documents failed — they render empty`);continue}for(let e of l){let n=e,i=n.id,a=n[c];typeof i==`string`&&Array.isArray(a)&&r.set(y({entity:t,id:i}),a)}}return r}const H=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function U(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function W(e){return Array.isArray(e)}const G=new Set(Object.keys({id:!0,url:!0,mimeType:!0,width:!0,height:!0,alt:!0,title:!0,variants:!0,sources:!0,avifSources:!0,focalPoint:!0,blurDataUrl:!0,crop:!0,spotSources:!0}));function K(e,t){if(!U(e))return null;let n=e.id;if(typeof n!=`string`||!H.test(n)||typeof e.url!=`string`||e.url===``)return null;let r=Object.keys(e).filter(e=>!G.has(e));return r.length>0?(t?.(r),null):!q(e.alt,`string`)||!q(e.title,`string`)||!q(e.mimeType,`string`)||!q(e.width,`number`)||!q(e.height,`number`)||!q(e.blurDataUrl,`string`)||e.variants!==void 0&&e.variants!==null&&!U(e.variants)||e.focalPoint!==void 0&&e.focalPoint!==null&&!U(e.focalPoint)||e.sources!==void 0&&e.sources!==null&&(!U(e.sources)||!Object.values(e.sources).every(e=>Array.isArray(e)))||e.avifSources!==void 0&&e.avifSources!==null&&(!U(e.avifSources)||!Object.values(e.avifSources).every(e=>Array.isArray(e)))||e.crop!==void 0&&e.crop!==null&&!U(e.crop)||e.spotSources!==void 0&&e.spotSources!==null&&!Array.isArray(e.spotSources)?null:n}function q(e,t){return e==null||typeof e===t}function J(e,t,n,r){if(n>256){r.truncated=!0;return}let i=e=>{for(let t of e)r.nearMissKeys.add(t)};if(W(e)){for(let a=0;a<e.length;a+=1){let o=K(e[a],i);o===null?J(e[a],t,n+1,r):t.push({container:e,key:a,id:o,crop:C(e[a])})}return}if(U(e))for(let[a,o]of Object.entries(e)){let s=K(o,i);s===null?J(o,t,n+1,r):t.push({container:e,key:a,id:s,crop:C(o)})}}function Y(e){let t={id:e.id,url:e.url,variants:e.variants,focalPoint:e.focalPoint,sources:e.sources};return e.avifSources!==void 0&&Object.keys(e.avifSources).length>0&&(t.avifSources=e.avifSources),e.mimeType!==null&&(t.mimeType=e.mimeType),e.width!==null&&(t.width=e.width),e.height!==null&&(t.height=e.height),e.alt!==null&&(t.alt=e.alt),e.title!==null&&(t.title=e.title),e.blurDataUrl!==null&&(t.blurDataUrl=e.blurDataUrl),t}function X(e,t){if(!(t===void 0||e.spotSources===void 0))return e.spotSources.find(e=>D(e.crop,t)&&e.sources.length>0)}function ee(e,t){let n=Y(e),r=X(e,t),i=r?.sources[r.sources.length-1];if(r!==void 0&&i!==void 0){n.url=i.url,n.width=i.width,n.height=i.height,n.focalPoint={x:.5,y:.5},n.sources={natural:r.sources};let e=r.avifSources;e!==void 0&&e.length===r.sources.length&&e.every((e,t)=>e.width===r.sources[t]?.width&&e.height===r.sources[t]?.height)?n.avifSources={natural:e}:delete n.avifSources}return n.crop={x:t.x,y:t.y,w:t.w,h:t.h},n}function te(e,t){let n=t===null?null:e.crop===void 0?Y(t):ee(t,e.crop);if(Array.isArray(e.container)){typeof e.key==`number`&&(e.container[e.key]=n);return}typeof e.key==`string`&&(e.container[e.key]=n)}async function Z(e,t,n){let r=e,i=[];if(t.template!==void 0){let e=t.boundValues?.id;if(typeof e==`string`&&e!==``){let a=(n.materializeTemplate??S)(t.template,N(t.entity,e));r=a.blocks,i=a.boundColumns}else r=[],n.logger?.warn({entity:t.entity,field:t.field},`content: a templated document arrived without its row id, so its template is served EMPTY — its block ids could not be namespaced to it (editor F124)`)}else if(t.rowIsForeign!==!0&&t.boundValues!==void 0&&W(e))try{i=(n.boundColumnsOf??k)(e)}catch(e){n.logger?.warn({err:e,entity:t.entity,field:t.field},`content: could not enumerate the bound columns of a block tree, so its bound-field links render plain`)}let a=t.boundValues??{},o=i.filter(e=>Object.hasOwn(a,e)).map(e=>a[e]);if(!W(r))throw n.logger?.warn({entity:t.entity,field:t.field},`content: stored block tree is not an array — nothing to resolve, so this field is served EMPTY rather than as stored (the caller retries this throw with an exhausted budget, and a non-array fails that identically)`),TypeError(`content: block tree \`${t.entity}.${t.field}\` is not an array; nothing to resolve.`);let{expanded:l}=await L(r,{locale:t.locale,budget:t.budget,entity:t.entity},n.embeddedDocuments,n.logger),u=[],d={truncated:!1,nearMissKeys:new Set};J(r,u,0,d),d.truncated&&n.logger?.warn({entity:t.entity,field:t.field,cap:256},`content: block tree is nested deeper than the media walk descends — any media ref below the bound keeps the url recorded when an editor picked it, which may be signed`),d.nearMissKeys.size>0&&n.logger?.debug({entity:t.entity,field:t.field,keys:[...d.nearMissKeys].sort()},`content: a value looked like a media ref but carried keys outside the projection, so it was left alone. If these are media refs, they keep their stored urls`);let f=[...s(r,64),...s(o,64)],p=[],m=[];for(let e of f)e.kind===`media`&&(H.test(e.id)?p.push(e.id):m.push({kind:`link`,ref:c(e),reason:`unresolvable`}));let g=Q([...u.map(e=>e.id),...p]),_=[];for(let e of f)e.kind===`entity`&&(H.test(e.id)?_.push($(e.entity,e.id)):m.push({kind:`link`,ref:c(e),reason:`unresolvable`}));let v=[...m];!n.resolveMedia&&g.length>0&&n.logger?.debug({entity:t.entity,field:t.field,count:g.length},`content: no media resolver wired for block trees — every media ref resolves to null`);let y=n.resolveMedia?t.budget.claim(`block`,g.length):0,b=g.slice(0,y),x=n.resolveMedia?new Set(g.slice(y)):new Set;for(let e of g.slice(y))v.push({kind:`media`,ref:e,reason:x.has(e)?`budget`:`unresolvable`});let C=Q(_),w=t.budget.claim(`block`,C.length),E=C.slice(0,w),D=new Set(C.slice(w)),O=await oe(b,t.locale,n,t.entity);for(let e of u)te(e,O.get(e.id)??null);for(let e of b)O.has(e)||v.push({kind:`media`,ref:e,reason:`unresolvable`});let A=await se(E,t.locale,n,t.entity),j=await T(f,{renderContext:`request`,locale:t.locale,resolveEntityHref:({entity:e,id:t})=>A.get($(e,t))??null,resolveMediaHref:e=>O.get(e)?.url??null}),M={};for(let[e,t]of j)M[e]=t.href;for(let e of f){if(e.kind!==`entity`&&e.kind!==`media`)continue;let t=c(e);M[t]!==null&&M[t]!==void 0||v.push({kind:`link`,ref:t,reason:ie(e,D,x)})}let P=n.resolveLiveValues,F=P===void 0?0:t.budget.claim(`block`,1),[{results:I,cardMedia:R},z]=await Promise.all([ne(r,t,n),F>0&&P!==void 0?(async()=>P(r,t.locale))().catch(e=>{n.logger?.warn({err:e},`blocks: resolveLiveValues rejected; this tree draws no live values`)}):Promise.resolve(void 0)]),B,V=[];if(t.boundValues!==void 0){let e=h(W(r)?r:[]),i=new Set(e);if(i.delete(`breadcrumbs`),n.resolveDetail!==void 0)try{let e=i;if(e.has(`body`)&&n.detailNeedsBody?.(t.entity,e,t.boundValues)===!0&&t.budget.claim(`block`,1)<1){let r=new Set(e);r.delete(`body`),e=r,n.logger?.warn({entity:t.entity,field:t.field},`blocks: the response budget is spent; this tree is delivered without its HTML body`)}e.size>0&&(B=n.resolveDetail(t.entity,t.boundValues,t.locale,e))}catch(e){n.logger?.warn({err:e,entity:t.entity},`blocks: resolveDetail threw; this tree carries no detail`)}if(e.has(`breadcrumbs`)&&n.resolveBreadcrumbs!==void 0)if(t.claimCollection?.()!==!0||t.budget.claim(`block`,1)<1)n.logger?.warn({entity:t.entity,field:t.field},`blocks: the response’s allowance is spent; this tree is delivered without its breadcrumbs`);else try{let e=await n.resolveBreadcrumbs(t.entity,t.boundValues,t.locale);e!==void 0&&e.steps.length>0&&(B={...B,breadcrumbs:e.steps},V.push(...e.ancestors))}catch(e){n.logger?.warn({err:e,entity:t.entity},`blocks: resolveBreadcrumbs threw; this tree carries no breadcrumbs`)}}let U=new Map;for(let e of O.keys())U.set($(`media`,e),{entity:`media`,id:e});for(let e of R)U.set($(`media`,e),{entity:`media`,id:e});for(let e of I.values())if(e.entity!==null)for(let t of e.rows)U.set($(e.entity,t.id),{entity:e.entity,id:t.id});for(let e of V)U.set($(e.entity,e.id),e);for(let e of l)U.set($(e.entity,e.id),{entity:e.entity,id:e.id});for(let e of A.keys()){if(U.has(e))continue;let t=e.indexOf(` `);if(t<=0)continue;let n=e.slice(0,t),r=e.slice(t+1);r!==``&&U.set(e,{entity:n,id:r})}return{resolved:1,blocks:r,links:M,...v.length>0&&{unresolved:ae(v)},...U.size>0&&{refs:[...U.values()]},...I.size>0&&{collections:Object.fromEntries(I)},...z!==void 0&&Object.keys(z.sources).length>0&&{live:{sources:z.sources,values:z.values}},...n.currency!==void 0&&{currency:n.currency},...B!==void 0&&{detail:B}}}async function ne(e,t,n){let r=n.collections,i=t.canReadEntity,a=t.claimCollection;if(r===void 0||i===void 0||a===void 0)return{results:new Map,cardMedia:new Set};let o=n.resolveMedia,s=new Set;return{results:await E(e,r.sourceFieldOf,{sources:r.sources,getEntity:r.getEntity,clientFor:r.clientFor,canRead:i,resolveImages:o===void 0?void 0:async e=>{let n=[...await o(e,{locale:t.locale})].filter(([,e])=>e.mimeType?.startsWith(`image/`)===!0);for(let[e]of n)s.add(e);return new Map(n.map(([e,t])=>[e,{url:t.url,alt:t.alt,width:t.width,height:t.height,focalPoint:t.focalPoint,sources:t.sources,...t.avifSources!==void 0&&Object.keys(t.avifSources).length>0&&{avifSources:t.avifSources},blurDataUrl:t.blurDataUrl}]))},resolveHrefs:(e,r)=>n.resolvePublishedPaths(e,r,t.locale),locale:t.locale,renderContext:`request`,current:re(t.entity,t.boundValues),...t.page!==void 0&&{page:t.page},claim:()=>a()&&t.budget.claim(`block`,1)>=1,logger:n.logger}),cardMedia:s}}function re(e,t){let n=t?.id;if(!(t===void 0||typeof n!=`string`||n===``))return{entity:e,id:n,values:t}}function ie(e,t,n){return e.kind===`entity`&&t.has($(e.entity,e.id))||e.kind===`media`&&n.has(e.id)?`budget`:`unresolvable`}function Q(e){return[...new Set(e)]}function $(e,t){return[e,t].join(` `)}function ae(e){let t=new Set,n=[];for(let r of e){let e=`${r.kind} ${r.ref}`;t.has(e)||(t.add(e),n.push(r))}return n}async function oe(e,t,n,r){if(e.length===0||!n.resolveMedia)return new Map;try{return await n.resolveMedia(e,{locale:t,spots:!0})}catch(e){return n.logger?.warn({entity:r,err:e},"content: media resolver threw while resolving a block tree — its media refs resolve to null (if this is a ForbiddenError, the requesting role is missing `media:view`)"),new Map}}async function se(e,t,n,r){let i=new Map;if(e.length===0)return i;let a=new Map;for(let t of e){let e=t.indexOf(` `),n=t.slice(0,e),r=t.slice(e+1),i=a.get(n);i?i.push(r):a.set(n,[r])}for(let[e,o]of a)try{let r=await n.resolvePublishedPaths(e,o,t);for(let[t,n]of r)i.set($(e,t),n)}catch(t){n.logger?.warn({entity:r,entityType:e,err:t},`content: path resolution threw for a block-tree link target — its links render as plain text`)}return i}function ce(i,a){let o=null,s=i=>{if(o?.app===i)return o.deps;let s=e(i),{sources:c}=_(i),f=c.length===0?void 0:{sources:c,sourceFieldOf:A(),getEntity:e=>i.entities.get(e),clientFor:e=>p(e,i)},h=M(),g=O(),y=v(i).specs,S={...f!==void 0&&{collections:f},boundColumnsOf:e=>d(e,g),materializeTemplate:(e,t)=>h(e,t),resolveMedia:a.resolveMedia,resolvePublishedPaths:async(e,t,r)=>{let i=await s.filterPublished(e,t,r);return i.size===0?new Map:n(e,[...i],r,s)},logger:i.logger,...b()&&{resolveLiveValues:(e,t)=>x(e,{locale:t,logger:i.logger})},currency:u(a.defaultLocale).currency,resolveBreadcrumbs:async(e,n,a)=>{let o=n.id;if(typeof o!=`string`||o===``)return;let s=i.entities.get(e);if(s===void 0)return;let c=l(s,n),u=await r({entityType:e,id:o,locale:a,...c!==void 0&&{label:c}},t(i));return u===void 0?void 0:{steps:u.steps,ancestors:u.ancestors}},...y.size>0&&{resolveDetail:(e,t,n,r)=>{let i=y.get(e);return i===void 0?void 0:w(i,t,n,r)},detailNeedsBody:(e,t,n)=>{let r=y.get(e);return r!==void 0&&m(r,t,n)}}},C=j();return C.size>0&&(S.embeddedDocuments={lookup:C,load:(e,t)=>V(i,e,t)}),o={app:i,deps:S},S};return async(e,t)=>{let n=await i();return Z(e,{...t,locale:t.locale??a.defaultLocale},s(n))}}export{ce as createBlockResolver,Z as resolveBlockTree};
1
+ import{i as e,t}from"./resolve-context-DklN53BH.mjs";import{r as n}from"./enumerate-CYHJKQz6.mjs";import{n as r}from"./breadcrumbs-BqSuMNac.mjs";import{createSystemReachResolver as i}from"@murumets-ee/core";import{QueryClient as a}from"@murumets-ee/entity/query";import{inArray as o}from"drizzle-orm";import{collectLinkValues as s,linkValueKey as c}from"@murumets-ee/blocks/links";import{blockTypesInTree as l,breadcrumbLabelOf as u,canvasSiteFormat as d,collectBoundColumnsInTree as f,collectEmbeds as p,contributedBlockDataProviders as m,createCollectionReader as h,detailNeedsBody as g,detailPartsInTree as _,distinctEmbeddedDocuments as v,effectiveCollectionSources as y,effectiveDetailSpecs as b,embedReferenceKey as x,hasConfiguredLiveSources as S,loadCanvasLiveValues as C,materializeServerTemplate as w,readSpotCrop as T,resolveBlockData as E,resolveDocumentDetail as D,resolveLinks as O,resolveTreeCollections as k,sameSpotCrop as A,serverBlockStructureLookup as j,serverBoundColumnsInTree as ee,serverCollectionFieldLookup as M,serverEmbedLookup as N,serverTemplateMaterializer as P,templateNamespace as F}from"@murumets-ee/blocks/server";function I(e){return Array.isArray(e)}function L(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function R(e,t){let n=structuredClone(e),r=e=>{if(I(e))for(let n of e)L(n)&&(typeof n.id==`string`&&(n.id=`${t}${n.id}`),r(n.children))};return r(n),Array.isArray(n)?n:[]}async function te(e,t,n,r){if(n===void 0||n.lookup.size===0)return{expanded:[]};z(e,n.lookup);let i=p(e,n.lookup,{onDropped:e=>r?.warn({entity:t.entity,dropped:e},`content: a block tree embeds more documents than one page may show; the rest show nothing`)});if(i.length===0)return{expanded:[]};let a=v(i),o=t.budget.claim(`block`,a.length),s=a.slice(0,o);if(s.length<a.length&&r?.warn({entity:t.entity,dropped:a.length-s.length},`content: the response budget is spent; some embedded documents show nothing`),s.length===0)return{expanded:[]};let c;try{c=await n.load(s,t.locale)}catch(e){return r?.warn({err:e,entity:t.entity},`content: loading embedded documents failed; they show nothing`),{expanded:s}}let l=new Map(i.map(e=>[e.blockId,e])),u=e=>{if(I(e))for(let t of e){if(!L(t))continue;let e=typeof t.id==`string`?l.get(t.id):void 0;if(e===void 0){u(t.children);continue}let n=c.get(x(e));n!==void 0&&(t.children=R(n,`${e.blockId}~`))}};return u(e),{expanded:s}}function z(e,t){let n=(e,r)=>{if(!(!I(e)||r>64)){for(let i of e)if(L(i)){if(typeof i.type==`string`&&t.has(i.type)){i.children!==void 0&&(i.children=[]);continue}n(i.children,r+1)}}};n(e,0)}const B=i(`embed-resolver`);function V(e){for(let[t,n]of Object.entries(e.allFields))if(n.type===`blockTree`)return t}async function H(e,t,n){let r=new Map,i=new Map;for(let e of t){let t=i.get(e.entity)??[];t.push(e.id),i.set(e.entity,t)}for(let[t,s]of i){let i=e.entities.get(t),c=i===void 0?void 0:V(i);if(i===void 0||c===void 0)continue;let l;try{let r=new a({entity:i,db:e.db.readOnly,logger:e.logger.child({resolve:`embedded-document`,entity:t}),contextResolver:B}),c=r.getTable().id;l=await r.findMany({where:o(c,s),locale:n,limit:s.length})}catch(n){e.logger.warn({err:n,entity:t,count:s.length},`content: reading embedded documents failed — they render empty`);continue}for(let e of l){let n=e,i=n.id,a=n[c];typeof i==`string`&&Array.isArray(a)&&r.set(x({entity:t,id:i}),a)}}return r}const U=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function W(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function G(e){return Array.isArray(e)}const K=new Set(Object.keys({id:!0,url:!0,mimeType:!0,width:!0,height:!0,alt:!0,title:!0,variants:!0,sources:!0,avifSources:!0,focalPoint:!0,blurDataUrl:!0,crop:!0,spotSources:!0}));function q(e,t){if(!W(e))return null;let n=e.id;if(typeof n!=`string`||!U.test(n)||typeof e.url!=`string`||e.url===``)return null;let r=Object.keys(e).filter(e=>!K.has(e));return r.length>0?(t?.(r),null):!J(e.alt,`string`)||!J(e.title,`string`)||!J(e.mimeType,`string`)||!J(e.width,`number`)||!J(e.height,`number`)||!J(e.blurDataUrl,`string`)||e.variants!==void 0&&e.variants!==null&&!W(e.variants)||e.focalPoint!==void 0&&e.focalPoint!==null&&!W(e.focalPoint)||e.sources!==void 0&&e.sources!==null&&(!W(e.sources)||!Object.values(e.sources).every(e=>Array.isArray(e)))||e.avifSources!==void 0&&e.avifSources!==null&&(!W(e.avifSources)||!Object.values(e.avifSources).every(e=>Array.isArray(e)))||e.crop!==void 0&&e.crop!==null&&!W(e.crop)||e.spotSources!==void 0&&e.spotSources!==null&&!Array.isArray(e.spotSources)?null:n}function J(e,t){return e==null||typeof e===t}function Y(e,t,n,r){if(n>256){r.truncated=!0;return}let i=e=>{for(let t of e)r.nearMissKeys.add(t)};if(G(e)){for(let a=0;a<e.length;a+=1){let o=q(e[a],i);o===null?Y(e[a],t,n+1,r):t.push({container:e,key:a,id:o,crop:T(e[a])})}return}if(W(e))for(let[a,o]of Object.entries(e)){let s=q(o,i);s===null?Y(o,t,n+1,r):t.push({container:e,key:a,id:s,crop:T(o)})}}function X(e){let t={id:e.id,url:e.url,variants:e.variants,focalPoint:e.focalPoint,sources:e.sources};return e.avifSources!==void 0&&Object.keys(e.avifSources).length>0&&(t.avifSources=e.avifSources),e.mimeType!==null&&(t.mimeType=e.mimeType),e.width!==null&&(t.width=e.width),e.height!==null&&(t.height=e.height),e.alt!==null&&(t.alt=e.alt),e.title!==null&&(t.title=e.title),e.blurDataUrl!==null&&(t.blurDataUrl=e.blurDataUrl),t}function ne(e,t){if(!(t===void 0||e.spotSources===void 0))return e.spotSources.find(e=>A(e.crop,t)&&e.sources.length>0)}function re(e,t){let n=X(e),r=ne(e,t),i=r?.sources[r.sources.length-1];if(r!==void 0&&i!==void 0){n.url=i.url,n.width=i.width,n.height=i.height,n.focalPoint={x:.5,y:.5},n.sources={natural:r.sources};let e=r.avifSources;e!==void 0&&e.length===r.sources.length&&e.every((e,t)=>e.width===r.sources[t]?.width&&e.height===r.sources[t]?.height)?n.avifSources={natural:e}:delete n.avifSources}return n.crop={x:t.x,y:t.y,w:t.w,h:t.h},n}function ie(e,t){let n=t===null?null:e.crop===void 0?X(t):re(t,e.crop);if(Array.isArray(e.container)){typeof e.key==`number`&&(e.container[e.key]=n);return}typeof e.key==`string`&&(e.container[e.key]=n)}async function Z(e,t,n){let r=e,i=[];if(t.template!==void 0){let e=t.boundValues?.id;if(typeof e==`string`&&e!==``){let a=(n.materializeTemplate??w)(t.template,F(t.entity,e));r=a.blocks,i=a.boundColumns}else r=[],n.logger?.warn({entity:t.entity,field:t.field},`content: a templated document arrived without its row id, so its template is served EMPTY — its block ids could not be namespaced to it (editor F124)`)}else if(t.rowIsForeign!==!0&&t.boundValues!==void 0&&G(e))try{i=(n.boundColumnsOf??ee)(e)}catch(e){n.logger?.warn({err:e,entity:t.entity,field:t.field},`content: could not enumerate the bound columns of a block tree, so its bound-field links render plain`)}let a=t.boundValues??{},o=i.filter(e=>Object.hasOwn(a,e)).map(e=>a[e]);if(!G(r))throw n.logger?.warn({entity:t.entity,field:t.field},`content: stored block tree is not an array — nothing to resolve, so this field is served EMPTY rather than as stored (the caller retries this throw with an exhausted budget, and a non-array fails that identically)`),TypeError(`content: block tree \`${t.entity}.${t.field}\` is not an array; nothing to resolve.`);let{expanded:u}=await te(r,{locale:t.locale,budget:t.budget,entity:t.entity},n.embeddedDocuments,n.logger),d=[],f={truncated:!1,nearMissKeys:new Set};Y(r,d,0,f),f.truncated&&n.logger?.warn({entity:t.entity,field:t.field,cap:256},`content: block tree is nested deeper than the media walk descends — any media ref below the bound keeps the url recorded when an editor picked it, which may be signed`),f.nearMissKeys.size>0&&n.logger?.debug({entity:t.entity,field:t.field,keys:[...f.nearMissKeys].sort()},`content: a value looked like a media ref but carried keys outside the projection, so it was left alone. If these are media refs, they keep their stored urls`);let p=[...s(r,64),...s(o,64)],m=[],h=[];for(let e of p)e.kind===`media`&&(U.test(e.id)?m.push(e.id):h.push({kind:`link`,ref:c(e),reason:`unresolvable`}));let g=Q([...d.map(e=>e.id),...m]),v=[];for(let e of p)e.kind===`entity`&&(U.test(e.id)?v.push($(e.entity,e.id)):h.push({kind:`link`,ref:c(e),reason:`unresolvable`}));let y=[...h];!n.resolveMedia&&g.length>0&&n.logger?.debug({entity:t.entity,field:t.field,count:g.length},`content: no media resolver wired for block trees — every media ref resolves to null`);let b=n.resolveMedia?t.budget.claim(`block`,g.length):0,x=g.slice(0,b),S=n.resolveMedia?new Set(g.slice(b)):new Set;for(let e of g.slice(b))y.push({kind:`media`,ref:e,reason:S.has(e)?`budget`:`unresolvable`});let C=Q(v),T=t.budget.claim(`block`,C.length),E=C.slice(0,T),D=new Set(C.slice(T)),k=await le(x,t.locale,n,t.entity);for(let e of d)ie(e,k.get(e.id)??null);for(let e of x)k.has(e)||y.push({kind:`media`,ref:e,reason:`unresolvable`});let A=await ue(E,t.locale,n,t.entity),j=await O(p,{renderContext:`request`,locale:t.locale,resolveEntityHref:({entity:e,id:t})=>A.get($(e,t))??null,resolveMediaHref:e=>k.get(e)?.url??null}),M={};for(let[e,t]of j)M[e]=t.href;for(let e of p){if(e.kind!==`entity`&&e.kind!==`media`)continue;let t=c(e);M[t]!==null&&M[t]!==void 0||y.push({kind:`link`,ref:t,reason:se(e,D,S)})}let N=n.resolveLiveValues,P=N===void 0?0:t.budget.claim(`block`,1),[{results:I,cardMedia:L},R]=await Promise.all([ae(r,t,n),P>0&&N!==void 0?(async()=>N(r,t.locale))().catch(e=>{n.logger?.warn({err:e},`blocks: resolveLiveValues rejected; this tree draws no live values`)}):Promise.resolve(void 0)]),z,B=[];if(t.boundValues!==void 0){let e=_(G(r)?r:[]),i=new Set(e);if(i.delete(`breadcrumbs`),n.resolveDetail!==void 0)try{let e=i;if(e.has(`body`)&&n.detailNeedsBody?.(t.entity,e,t.boundValues)===!0&&t.budget.claim(`block`,1)<1){let r=new Set(e);r.delete(`body`),e=r,n.logger?.warn({entity:t.entity,field:t.field},`blocks: the response budget is spent; this tree is delivered without its HTML body`)}e.size>0&&(z=n.resolveDetail(t.entity,t.boundValues,t.locale,e))}catch(e){n.logger?.warn({err:e,entity:t.entity},`blocks: resolveDetail threw; this tree carries no detail`)}if(e.has(`breadcrumbs`)&&n.resolveBreadcrumbs!==void 0)if(t.claimCollection?.()!==!0||t.budget.claim(`block`,1)<1)n.logger?.warn({entity:t.entity,field:t.field},`blocks: the response’s allowance is spent; this tree is delivered without its breadcrumbs`);else try{let e=await n.resolveBreadcrumbs(t.entity,t.boundValues,t.locale);e!==void 0&&e.steps.length>0&&(z={...z,breadcrumbs:e.steps},B.push(...e.ancestors))}catch(e){n.logger?.warn({err:e,entity:t.entity},`blocks: resolveBreadcrumbs threw; this tree carries no breadcrumbs`)}}let V;if(n.resolveBlockData!==void 0&&n.blockDataTypes!==void 0){let e=[...l(r)].filter(e=>n.blockDataTypes?.has(e));if(e.length>0)if(t.claimCollection?.()!==!0||t.budget.claim(`block`,1)<1)n.logger?.warn({entity:t.entity,field:t.field},`blocks: the response’s allowance is spent; this tree is delivered without its block data`);else try{let r=await n.resolveBlockData(e,t.locale);Object.keys(r).length>0&&(V=r)}catch(e){n.logger?.warn({err:e,entity:t.entity},`blocks: resolveBlockData threw; this tree carries no block data`)}}let H=new Map;for(let e of k.keys())H.set($(`media`,e),{entity:`media`,id:e});for(let e of L)H.set($(`media`,e),{entity:`media`,id:e});for(let e of I.values())if(e.entity!==null)for(let t of e.rows)H.set($(e.entity,t.id),{entity:e.entity,id:t.id});for(let e of B)H.set($(e.entity,e.id),e);for(let e of u)H.set($(e.entity,e.id),{entity:e.entity,id:e.id});for(let e of A.keys()){if(H.has(e))continue;let t=e.indexOf(` `);if(t<=0)continue;let n=e.slice(0,t),r=e.slice(t+1);r!==``&&H.set(e,{entity:n,id:r})}return{resolved:1,blocks:r,links:M,...y.length>0&&{unresolved:ce(y)},...H.size>0&&{refs:[...H.values()]},...I.size>0&&{collections:Object.fromEntries(I)},...R!==void 0&&Object.keys(R.sources).length>0&&{live:{sources:R.sources,values:R.values}},...n.currency!==void 0&&{currency:n.currency},...z!==void 0&&{detail:z},...V!==void 0&&{blockData:V}}}async function ae(e,t,n){let r=n.collections,i=t.canReadEntity,a=t.claimCollection;if(r===void 0||i===void 0||a===void 0)return{results:new Map,cardMedia:new Set};let o=n.resolveMedia,s=new Set;return{results:await k(e,r.sourceFieldOf,{sources:r.sources,getEntity:r.getEntity,clientFor:r.clientFor,canRead:i,resolveImages:o===void 0?void 0:async e=>{let n=[...await o(e,{locale:t.locale})].filter(([,e])=>e.mimeType?.startsWith(`image/`)===!0);for(let[e]of n)s.add(e);return new Map(n.map(([e,t])=>[e,{url:t.url,alt:t.alt,width:t.width,height:t.height,focalPoint:t.focalPoint,sources:t.sources,...t.avifSources!==void 0&&Object.keys(t.avifSources).length>0&&{avifSources:t.avifSources},blurDataUrl:t.blurDataUrl}]))},resolveHrefs:(e,r)=>n.resolvePublishedPaths(e,r,t.locale),locale:t.locale,renderContext:`request`,current:oe(t.entity,t.boundValues),...t.page!==void 0&&{page:t.page},claim:()=>a()&&t.budget.claim(`block`,1)>=1,logger:n.logger}),cardMedia:s}}function oe(e,t){let n=t?.id;if(!(t===void 0||typeof n!=`string`||n===``))return{entity:e,id:n,values:t}}function se(e,t,n){return e.kind===`entity`&&t.has($(e.entity,e.id))||e.kind===`media`&&n.has(e.id)?`budget`:`unresolvable`}function Q(e){return[...new Set(e)]}function $(e,t){return[e,t].join(` `)}function ce(e){let t=new Set,n=[];for(let r of e){let e=`${r.kind} ${r.ref}`;t.has(e)||(t.add(e),n.push(r))}return n}async function le(e,t,n,r){if(e.length===0||!n.resolveMedia)return new Map;try{return await n.resolveMedia(e,{locale:t,spots:!0})}catch(e){return n.logger?.warn({entity:r,err:e},"content: media resolver threw while resolving a block tree — its media refs resolve to null (if this is a ForbiddenError, the requesting role is missing `media:view`)"),new Map}}async function ue(e,t,n,r){let i=new Map;if(e.length===0)return i;let a=new Map;for(let t of e){let e=t.indexOf(` `),n=t.slice(0,e),r=t.slice(e+1),i=a.get(n);i?i.push(r):a.set(n,[r])}for(let[e,o]of a)try{let r=await n.resolvePublishedPaths(e,o,t);for(let[t,n]of r)i.set($(e,t),n)}catch(t){n.logger?.warn({entity:r,entityType:e,err:t},`content: path resolution threw for a block-tree link target — its links render as plain text`)}return i}function de(i,a){let o=null,s=i=>{if(o?.app===i)return o.deps;let s=e(i),{sources:c}=y(i),l=c.length===0?void 0:{sources:c,sourceFieldOf:M(),getEntity:e=>i.entities.get(e),clientFor:e=>h(e,i)},p=P(),_=j(),v=b(i).specs,x={...l!==void 0&&{collections:l},boundColumnsOf:e=>f(e,_),materializeTemplate:(e,t)=>p(e,t),resolveMedia:a.resolveMedia,resolvePublishedPaths:async(e,t,r)=>{let i=await s.filterPublished(e,t,r);return i.size===0?new Map:n(e,[...i],r,s)},logger:i.logger,...S()&&{resolveLiveValues:(e,t)=>C(e,{locale:t,logger:i.logger})},currency:d(a.defaultLocale).currency,resolveBreadcrumbs:async(e,n,a)=>{let o=n.id;if(typeof o!=`string`||o===``)return;let s=i.entities.get(e);if(s===void 0)return;let c=u(s,n),l=await r({entityType:e,id:o,locale:a,...c!==void 0&&{label:c}},t(i));return l===void 0?void 0:{steps:l.steps,ancestors:l.ancestors}},...v.size>0&&{resolveDetail:(e,t,n,r)=>{let i=v.get(e);return i===void 0?void 0:D(i,t,n,r)},detailNeedsBody:(e,t,n)=>{let r=v.get(e);return r!==void 0&&g(r,t,n)}}},w=m();w.size>0&&(x.blockDataTypes=new Set(w.keys()),x.resolveBlockData=(e,t)=>E(e,{locale:t,surface:`site`,logger:i.logger,providers:w}));let T=N();return T.size>0&&(x.embeddedDocuments={lookup:T,load:(e,t)=>H(i,e,t)}),o={app:i,deps:x},x};return async(e,t)=>{let n=await i();return Z(e,{...t,locale:t.locale??a.defaultLocale},s(n))}}export{de as createBlockResolver,Z as resolveBlockTree};
2
2
  //# sourceMappingURL=block-resolver.mjs.map