@kanonak-protocol/sdk 5.13.0 → 5.15.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 (39) hide show
  1. package/dist/browser.js +1 -1
  2. package/dist/{chunk-IHB7UVEH.js → chunk-4PY3JJH3.js} +4 -4
  3. package/dist/{chunk-S6VSAKXB.js → chunk-5NH5XDGO.js} +1 -1
  4. package/dist/{chunk-EZSHR3CB.js → chunk-LYSCTQC2.js} +1 -1
  5. package/dist/chunk-MK6UVFOJ.js +2 -0
  6. package/dist/chunk-Q6XQ5IXW.js +63 -0
  7. package/dist/chunk-SVUMCLK5.js +1 -0
  8. package/dist/chunk-V3IPBWWU.js +1 -0
  9. package/dist/chunk-V6KIDED2.js +1 -0
  10. package/dist/chunk-YW6P24RF.js +1 -0
  11. package/dist/index.js +1 -1
  12. package/dist/kanonaks/walkDefinedKanonaks.d.ts +22 -0
  13. package/dist/parsing/KanonakObjectParser.d.ts +22 -0
  14. package/dist/parsing/index.js +1 -1
  15. package/dist/reasoning/ReasoningResult.d.ts +19 -0
  16. package/dist/reasoning/index.js +1 -1
  17. package/dist/resolution/ResourceTypeClassifier.d.ts +24 -0
  18. package/dist/resolution/TypeDirectedResolver.d.ts +37 -0
  19. package/dist/resolution/index.d.ts +3 -2
  20. package/dist/resolution/index.js +1 -1
  21. package/dist/search/index.js +1 -1
  22. package/dist/server/index.js +1 -1
  23. package/dist/transformations/expressionRuntimeTree.d.ts +40 -0
  24. package/dist/transformations/index.d.ts +2 -0
  25. package/dist/transformations/index.js +22 -22
  26. package/dist/uri-helpers/index.js +1 -1
  27. package/dist/validation/documentModel.d.ts +2 -15
  28. package/dist/validation/index.js +1 -1
  29. package/dist/validation/rules/repository/PropertyRangeRequiredRule.d.ts +4 -0
  30. package/dist/validation/rules/repository/SubPropertyOfReferenceRule.d.ts +4 -2
  31. package/package.json +2 -2
  32. package/dist/chunk-4SQZBFJJ.js +0 -2
  33. package/dist/chunk-6U26UASC.js +0 -1
  34. package/dist/chunk-7BHDZHJY.js +0 -1
  35. package/dist/chunk-7K5TAJ44.js +0 -63
  36. package/dist/chunk-GZPLWII7.js +0 -1
  37. package/dist/chunk-MX3DEXMV.js +0 -1
  38. package/dist/chunk-TVSHIXLA.js +0 -1
  39. package/dist/chunk-ZP6P7HNU.js +0 -1
@@ -9,9 +9,10 @@ export { KanonakUrlResolver } from './KanonakUrlResolver.js';
9
9
  export type { UrlAddress, PublisherUrlAddress, PackageUrlAddress, ResourceUrlAddress, VersionSpec, UrlForm, } from './KanonakUrlResolver.js';
10
10
  export type { ResourceResolutionResult } from './ResourceResolutionResult.js';
11
11
  export { TypeResolver } from './TypeResolver.js';
12
- export { propertiesInScope, resolvePropertyStep, contextTypesOf, subjectUri, superClassChain, } from './TypeDirectedResolver.js';
12
+ export { propertiesInScope, resolvePropertyStep, contextTypesOf, subjectUri, superClassChain, propertyClassOf, isPropertySubject, isObjectPropertySubject, isDatatypePropertySubject, } from './TypeDirectedResolver.js';
13
13
  export type { PropertyDescriptor, PropertyKind, StepResolution } from './TypeDirectedResolver.js';
14
- export { ResourceTypeClassifier } from './ResourceTypeClassifier.js';
14
+ export { ResourceTypeClassifier, corePropertyClassOf } from './ResourceTypeClassifier.js';
15
+ export type { PropertyClassKind } from './ResourceTypeClassifier.js';
15
16
  export { findInstancesByType } from './InstanceSearch.js';
16
17
  export type { InstanceSearchResult } from './InstanceSearch.js';
17
18
  export { compareVersions, versionsEqual, formatVersion, parseVersionString, createVersion, isCompatibleVersion, isMajorCompatible, pickHighestDocument, versionOperatorFromChar, versionOperatorToChar, } from './VersionUtils.js';
@@ -1 +1 @@
1
- import{a as p,b as y}from"../chunk-PEUTCG3B.js";import{a as s}from"../chunk-PEJALHXK.js";import{a as k}from"../chunk-SC5M74NM.js";import{a as o,b as q,c as r,d as t,e as u,f as v,g as w,h as x}from"../chunk-ZP6P7HNU.js";import"../chunk-6U26UASC.js";import{a as m,b as n}from"../chunk-GZPLWII7.js";import"../chunk-7BHDZHJY.js";import{a as l}from"../chunk-FUUTGGJS.js";import{a,b,c,d,e,f,g,h,i,j}from"../chunk-2ACBWC7K.js";export{l as KanonakUri,p as KanonakUriBuilder,s as KanonakUrlResolver,m as ResourceResolver,o as ResourceTypeClassifier,n as TypeResolver,k as assertPackageIdentity,c as compareVersions,x as contextTypesOf,f as createVersion,y as findInstancesByType,r as formatKanonakAddress,e as formatVersion,h as isCompatibleVersion,i as isMajorCompatible,q as parseKanonakAddress,g as parseVersionString,j as pickHighestDocument,v as propertiesInScope,w as resolvePropertyStep,t as subjectUri,u as superClassChain,a as versionOperatorFromChar,b as versionOperatorToChar,d as versionsEqual};
1
+ import{a as B,b as D}from"../chunk-PEUTCG3B.js";import{a as C}from"../chunk-PEJALHXK.js";import{a as k}from"../chunk-SC5M74NM.js";import{a as m,b as n,c as o,d as p,n as q,o as r,p as s,q as t,r as u,s as v,t as w,u as x,v as y,w as z,x as A}from"../chunk-SVUMCLK5.js";import"../chunk-YW6P24RF.js";import{a as l}from"../chunk-FUUTGGJS.js";import{a,b,c,d,e,f,g,h,i,j}from"../chunk-2ACBWC7K.js";export{l as KanonakUri,B as KanonakUriBuilder,C as KanonakUrlResolver,m as ResourceResolver,r as ResourceTypeClassifier,n as TypeResolver,k as assertPackageIdentity,c as compareVersions,A as contextTypesOf,q as corePropertyClassOf,f as createVersion,D as findInstancesByType,p as formatKanonakAddress,e as formatVersion,h as isCompatibleVersion,x as isDatatypePropertySubject,i as isMajorCompatible,w as isObjectPropertySubject,v as isPropertySubject,o as parseKanonakAddress,g as parseVersionString,j as pickHighestDocument,y as propertiesInScope,u as propertyClassOf,z as resolvePropertyStep,s as subjectUri,t as superClassChain,a as versionOperatorFromChar,b as versionOperatorToChar,d as versionsEqual};
@@ -1,4 +1,4 @@
1
- import{a as g}from"../chunk-IHB7UVEH.js";import"../chunk-QHABFCRC.js";import"../chunk-4NO7MHS7.js";import"../chunk-PEUTCG3B.js";import"../chunk-PEJALHXK.js";import"../chunk-SC5M74NM.js";import"../chunk-MX3DEXMV.js";import"../chunk-NJ3AZYQD.js";import{d as m,h as S}from"../chunk-ZP6P7HNU.js";import"../chunk-6U26UASC.js";import"../chunk-GZPLWII7.js";import{c as v,m as p,r as E}from"../chunk-7BHDZHJY.js";import"../chunk-FUUTGGJS.js";import{c as x}from"../chunk-2ACBWC7K.js";import{homedir as P}from"os";import{join as d}from"path";import{existsSync as M,mkdirSync as D,readFileSync as j,writeFileSync as O}from"fs";import{createHash as C}from"crypto";import{pathToFileURL as B}from"url";var h="Xenova/all-MiniLM-L6-v2",w="q8",b=32;async function F(r){let{pipeline:e,env:t}=r.transformers;t.cacheDir=r.modelCacheDir??d(P(),".kanonak","models");let n=await e("feature-extraction",h,{dtype:w});return async s=>(await n(s,{pooling:"mean",normalize:!0})).tolist()}async function z(r){let e=d(r,"node_modules","@huggingface","transformers"),t=JSON.parse(j(d(e,"package.json"),"utf-8")),n=I(t);if(!n)throw new Error(`@huggingface/transformers at ${e} exposes no resolvable ESM entry.`);let s=await import(B(d(e,n)).href);return typeof s.pipeline=="function"?s:s.default}function I(r){let e=r.exports,t=n=>typeof n=="string"?n:n?.default;return typeof e=="string"?e:t(e?.node?.import)??t(e?.import)??t(e?.default)??r.module??r.main}var y=null;async function U(){return y||(y=(async()=>{let r;try{r=await import("@huggingface/transformers")}catch(e){throw new Error(`Semantic search requires the embedding runtime, which is an optional dependency.
1
+ import{a as g}from"../chunk-4PY3JJH3.js";import"../chunk-QHABFCRC.js";import"../chunk-4NO7MHS7.js";import"../chunk-PEUTCG3B.js";import"../chunk-PEJALHXK.js";import"../chunk-SC5M74NM.js";import"../chunk-V6KIDED2.js";import"../chunk-NJ3AZYQD.js";import{p as m,x as S}from"../chunk-SVUMCLK5.js";import{c as v,m as p,r as E}from"../chunk-YW6P24RF.js";import"../chunk-FUUTGGJS.js";import{c as x}from"../chunk-2ACBWC7K.js";import{homedir as P}from"os";import{join as d}from"path";import{existsSync as M,mkdirSync as D,readFileSync as j,writeFileSync as O}from"fs";import{createHash as C}from"crypto";import{pathToFileURL as B}from"url";var h="Xenova/all-MiniLM-L6-v2",w="q8",b=32;async function F(r){let{pipeline:e,env:t}=r.transformers;t.cacheDir=r.modelCacheDir??d(P(),".kanonak","models");let n=await e("feature-extraction",h,{dtype:w});return async s=>(await n(s,{pooling:"mean",normalize:!0})).tolist()}async function z(r){let e=d(r,"node_modules","@huggingface","transformers"),t=JSON.parse(j(d(e,"package.json"),"utf-8")),n=I(t);if(!n)throw new Error(`@huggingface/transformers at ${e} exposes no resolvable ESM entry.`);let s=await import(B(d(e,n)).href);return typeof s.pipeline=="function"?s:s.default}function I(r){let e=r.exports,t=n=>typeof n=="string"?n:n?.default;return typeof e=="string"?e:t(e?.node?.import)??t(e?.import)??t(e?.default)??r.module??r.main}var y=null;async function U(){return y||(y=(async()=>{let r;try{r=await import("@huggingface/transformers")}catch(e){throw new Error(`Semantic search requires the embedding runtime, which is an optional dependency.
2
2
  Install it with:
3
3
  npm install @huggingface/transformers
4
4
  (underlying import error: ${e.message})`)}return F({transformers:r})})()),y}function H(r,e){let t=0;for(let n=0;n<r.length;n++)t+=r[n]*e[n];return t}function R(r,e){return e?r.version?e.version?x(r.version,e.version)>0:!0:!1:!0}function K(r,e){let t=g(r,e),n=[t.label],s=S(e);if(s.length>0){let i=E(r,s[0]),a=i?g(r,i).label:s[0].name;a&&n.push(`\u2014 a ${a}.`)}return t.summary&&n.push(t.summary),n.join(" ")}function q(r){let e=new Map;for(let t of r){if(!(t instanceof v))continue;let n=m(t);if(!n)continue;let s=p(n),i=e.get(s);(!i||R(n,m(i)))&&e.set(s,t)}return[...e.values()].sort((t,n)=>{let s=m(t)?p(m(t)):t.name,i=m(n)?p(m(n)):n.name;return s.localeCompare(i)})}var k=class{entries=[];embedder;constructor(e={}){this.embedder=e.embedder}resolveEmbedder(){return this.embedder?Promise.resolve(this.embedder):U()}get size(){return this.entries.length}async build(e,t={}){let n=q(e);if(t.include&&(n=n.filter(t.include)),n.length===0)return this.entries=[],{size:0,cached:!1};let s=n.map(o=>K(e,o)),i=t.cacheDir,a;if(i){let o=C("sha256").update(h+"|"+w+`
@@ -1,4 +1,4 @@
1
- import{c as we}from"../chunk-L2KE7B3K.js";import{j as te}from"../chunk-IHB7UVEH.js";import"../chunk-QHABFCRC.js";import{a as fe,d as Q,f as be,h as Z}from"../chunk-CC44JAOT.js";import{e as ke,g as ye,j as G,k as X}from"../chunk-UXYCUGSF.js";import{a as me}from"../chunk-4NO7MHS7.js";import"../chunk-PEUTCG3B.js";import{a as $e}from"../chunk-PEJALHXK.js";import"../chunk-SC5M74NM.js";import{a as q,b as z}from"../chunk-ITKOKDBG.js";import{l as re}from"../chunk-MX3DEXMV.js";import{a as O}from"../chunk-NJ3AZYQD.js";import{b as Se}from"../chunk-ZP6P7HNU.js";import"../chunk-6U26UASC.js";import"../chunk-GZPLWII7.js";import{c as ve,s as ee}from"../chunk-7BHDZHJY.js";import"../chunk-FUUTGGJS.js";import{c as L,e as D,f as H,g as he}from"../chunk-2ACBWC7K.js";import{readFileSync as ie,writeFileSync as je,mkdirSync as Ce}from"fs";import{join as oe}from"path";import Fe from"js-yaml";var Re=[{publisher:"kanonak.org",package_:"core-kanonak"},{publisher:"kanonak.org",package_:"site"},{publisher:"kanonak.org",package_:"link"},{publisher:"kanonak.org",package_:"look-tokens"},{publisher:"kanonak.org",package_:"look-styles"},{publisher:"kanonak.org",package_:"look"},{publisher:"kanonak.org",package_:"universal-look"}];function U(t){return Re}function F(t){return`${t.publisher}/${t.package_}`}function Y(t){let e={"kanonak.org/look-styles":"pages render UNSTYLED \u2014 generated CSS stops at the :root token block","kanonak.org/look-tokens":"the :root block loses the universal design-token floor (colors, fonts, spacing)","kanonak.org/universal-look":"resources without their own look render as an empty HTML comment","kanonak.org/look":"band vocabulary (Hero, PropertyList, \u2026) is unresolvable \u2014 declared looks cannot render","kanonak.org/site":"the site vocabulary (content, navigation) is unresolvable \u2014 the base stylesheet cannot bind","kanonak.org/core-kanonak":"the Package/Publisher classes are unresolvable \u2014 package and publisher pages degrade","kanonak.org/link":"link vocabulary is unresolvable \u2014 cross-reference styling degrades"},s=[];for(let r of t)if(r.origin==="missing"){let i=F(r),o=e[i]??"whatever this package contributes to rendering is lost";s.push(`Render-stack package ${i} is MISSING (${r.reason??"unknown reason"}) \u2014 ${o}. Fix: kanonak install ${i} (as the user running the render), or restore network access to ${r.publisher}.`)}else r.resolvedButNotInCatalog&&s.push(`Render-stack package ${F(r)} resolved (${r.origin}) but is NOT in the parsed catalog \u2014 this is a closure-scoping bug; please report it.`);return s}function ne(t){let{publisher:e,availablePublishers:s,catalog:r,lookRenderer:i,localNamespaces:o,rawByNsKey:m,renderStack:p,producers:k,lockSource:c,configSource:h}=t,n=new Map,g=new Map,w=new Map,v=new Set;for(let $ of r){if(!($ instanceof ve))continue;let R=$.namespace||"";if(!o.has(R))continue;n.set(`${R}/${$.name}`,$);let _=R.split("/")[1]??"",[j,N]=_.split("@");if(!j||!N)continue;let K=he(N);K&&(v.has(_)||(v.add(_),g.has(j)||g.set(j,[]),g.get(j).push({verStr:N,version:K})),$.name===j&&w.set(_,$))}for(let $ of g.values())$.sort((R,_)=>L(_.version,R.version));return{publisher:e,availablePublishers:s,catalog:r,lookRenderer:i,localNamespaces:o,rawByNsKey:m,bySubject:n,pkgVersions:g,pkgSelfByVer:w,renderStack:p,...k?{producers:k}:{},...c?{lockSource:c}:{},...h?{configSource:h}:{}}}async function ce(t,e={}){let s=new O,r=new me(s),i=[],o=[];for(let l of Z(t)){let u;try{u=ie(l,"utf-8")}catch{continue}let y;try{y=s.parse(u).metadata?.namespace_}catch{continue}if(!y?.version)continue;let I=y.version;o.push({publisher:y.publisher,package_:y.package_,verStr:D(I),version:I,source:u})}o.sort((l,u)=>L(u.version,l.version));for(let l of o)await r.saveDocumentAsync(s.parse(l.source),`${l.publisher}/${l.package_}@${l.verStr}`),i.push({publisher:l.publisher,package_:l.package_,verStr:l.verStr,source:l.source});let m=[...new Set(i.map(l=>l.publisher))].sort(),p=e.publisher;if(p){if(!m.includes(p))throw new Error(`Publisher "${p}" not found in workspace. Available: ${m.join(", ")||"(none)"}`)}else if(m.length===1)p=m[0];else throw m.length===0?new Error(`No Kanonak packages found under ${t}`):new Error(`Workspace has multiple publishers (${m.join(", ")}). Pass --publisher <domain> to choose which one to serve.`);let k=new Set,c=new Map;for(let l of i)l.publisher===p&&(k.add(`${l.publisher}/${l.package_}@${l.verStr}`),c.set(`${l.package_}@${l.verStr}`,l.source));let h=Q(),n=new fe(h,!0,s),g={};e.httpCache&&(g.getFromCache=e.httpCache.getFromCache,g.onFetch=e.httpCache.onFetch),e.fetchFn&&(g.fetchFn=e.fetchFn);let w=e.repository??new be(r,n,new X(g)),v=e.log??(()=>{}),$=U(void 0),R=[],_=l=>l.map(u=>u.metadata.namespace_?.version).filter(u=>u!==void 0).sort((u,y)=>L(y,u)).map(D);if(!e.repository){v(`[render-stack] resolving ${$.length} ambient look-stack package(s); cache: ${h}`);let l=e.fetchFn?new G({fetchFn:e.fetchFn}):new G;for(let u of $){let y=F(u),I=await r.getDocumentsByNamespaceAsync(u.publisher,u.package_);if(I.length>0){let d=_(I);R.push({...u,origin:"workspace",versions:d}),v(`[render-stack] ${y} \u2014 workspace (${d.join(", ")})`);continue}let a=await n.getDocumentsByNamespaceAsync(u.publisher,u.package_);if(a.length>0){let d=_(a);R.push({...u,origin:"cache",versions:d}),v(`[render-stack] ${y} \u2014 cache (${d.join(", ")})`);continue}try{let f=(await l.getLock(u.publisher))?.packages[`${u.publisher}/${u.package_}`];if(!f){let C=`publisher ${u.publisher} reachable but its lock does not pin ${u.package_}`;R.push({...u,origin:"missing",reason:C}),v(`[render-stack] ${y} \u2014 MISSING: ${C}`);continue}let S=f.version,b=f.resolved,E=await(e.fetchFn?e.fetchFn(b,u.publisher):ke(b));if(!E.ok){let C=`fetch ${b} failed: HTTP ${E.status} ${E.statusText}`;R.push({...u,origin:"missing",reason:C}),v(`[render-stack] ${y} \u2014 MISSING: ${C}`);continue}let ge=await E.text();await r.saveDocumentAsync(s.parse(ge),`${u.publisher}/${u.package_}@${S}`);try{let C=oe(h,u.publisher);Ce(C,{recursive:!0}),je(oe(C,`${u.package_}@${S}.kan.yml`),ge,"utf-8"),R.push({...u,origin:"fetched",versions:[S]}),v(`[render-stack] ${y}@${S} \u2014 fetched from ${b}, installed to cache`)}catch(C){R.push({...u,origin:"fetched",versions:[S]}),v(`[render-stack] ${y}@${S} \u2014 fetched from ${b}, but cache ${h} is NOT WRITABLE (${C.message}); usable for this load only \u2014 every load will re-fetch it`)}}catch(d){let f=`fetch failed: ${d.message}`;R.push({...u,origin:"missing",reason:f}),v(`[render-stack] ${y} \u2014 MISSING: ${f}`)}}}let j=w;if(!e.repository){let l=(await r.getAllDocumentsAsync()).filter(y=>y.metadata.namespace_?.publisher===p),u=await q(l,w);for(let y of $)u.add(F(y));j=new z(w,u)}let N=await new re(s).parseKanonaks(j),K=new te(N),T=(l,u)=>ee(N,{publisher:l,package_:u,name:u}).length>0,V;if(e.repository){V=[];for(let l of $){let u=await w.getDocumentsByNamespaceAsync(l.publisher,l.package_);V.push(u.length>0?{...l,origin:"repository",versions:_(u)}:{...l,origin:"missing",reason:"not present in the caller-supplied repository"})}}else V=R.map(l=>l.origin==="missing"||T(l.publisher,l.package_)?l:{...l,resolvedButNotInCatalog:!0});let J=Y(V);for(let l of J)v(`[render-stack] WARNING: ${l}`);let W={contractSource:"universal-default",cachePath:h,packages:V,warnings:J},B;try{B=ie(oe(t,"kanonak.lock"),"utf-8")}catch{B=Ne(p,i,s)}let A;try{A=ie(oe(t,".well-known","kanonak.json"),"utf-8")}catch{A=void 0}return ne({publisher:p,availablePublishers:m,catalog:N,lookRenderer:K,localNamespaces:k,rawByNsKey:c,renderStack:W,...B?{lockSource:B}:{},...A?{configSource:A}:{}})}function Ne(t,e,s){let r=new Map;for(let o of e)o.publisher===t&&(r.has(o.package_)||r.set(o.package_,{verStr:o.verStr,source:o.source}));if(r.size===0)return;let i={};for(let o of[...r.keys()].sort()){let{verStr:m,source:p}=r.get(o),k={},c;try{c=s.parse(p).metadata?.imports}catch{c=void 0}for(let n of c?.[t]??[]){let g=r.get(n.packageName);g&&(k[`${t}/${n.packageName}`]=g.verStr)}let h={};for(let n of Object.keys(k).sort())h[n]=k[n];i[`${t}/${o}`]={version:m,resolved:`https://${t}/${o}/${m}.kan.yml`,integrity:we(p),dependencies:h}}return Fe.dump({version:"1",lastUpdated:"",packages:i},{lineWidth:-1,sortKeys:!1,quotingType:'"'})}import{existsSync as Me,readFileSync as Ie,writeFileSync as De,mkdirSync as Ke}from"fs";import{join as xe}from"path";async function le(t,e={}){let s=new O,r=Se(t),i=r.kind==="resource"?r.uri.publisher:r.publisher,o=e.log??(()=>{}),m=e.cacheRoot??Q(),p=(a,d,f)=>xe(m,a,`${d}@${f}.kan.yml`),k=new Set,c=new Set,h=new Map,n=new X({getFromCache:(a,d,f)=>{let S=p(a,d,f),b=Me(S)?Ie(S,"utf-8"):null;return b!==null&&k.add(`${a}/${d}`),b},onFetch:(a,d,f,S)=>{c.add(`${a}/${d}`);try{let b=xe(m,a);Ke(b,{recursive:!0}),De(p(a,d,f),S,"utf-8")}catch(b){h.set(`${a}/${d}`,b.message),o(`[render] fetched ${a}/${d}@${f} but cache ${m} is NOT WRITABLE (${b.message}); usable for this load only \u2014 every load will re-fetch it`)}},...e.fetchFn?{fetchFn:e.fetchFn}:{}}),g=new G(e.fetchFn?{fetchFn:e.fetchFn}:void 0),w;if(r.kind==="resource"){let a=r.uri.version;w=[a?{package_:r.uri.package_,version:`${a.major}.${a.minor}.${a.patch}`}:{package_:r.uri.package_}]}else if(r.kind==="package"){let a=r.version;w=[a?{package_:r.package_,version:`${a.major}.${a.minor}.${a.patch}`}:{package_:r.package_}]}else w=((await g.getConfig(i)).featured_packages??[]).map(d=>({package_:d}));let v=async(a,d,f)=>{try{let S=f?s.buildImport(d,"=",f,a):s.buildImport(d,"*","0.0.0",a),b=await n.getHighestCompatibleVersionAsync(a,S);return b?{doc:b}:{doc:null,error:`${a} did not resolve ${d}${f?`@${f}`:""} (not in its index, or unreachable)`}}catch(S){return{doc:null,error:S.message}}},$=[],R=[];for(let a of w){let{doc:d,error:f}=await v(i,a.package_,a.version);d?$.push(d):f&&R.push(f)}if($.length===0)throw new Error(`Could not fetch any package for address "${t}" from publisher "${i}".`+(R.length>0?` Reasons: ${R.join("; ")}`:""));let _=U(),j="universal-default",N=a=>a.map(d=>d.metadata.namespace_?.version).filter(d=>d!==void 0).sort((d,f)=>L(f,d)).map(D);o(`[render-stack] resolving ${_.length} ambient look-stack package(s) (contract: ${j}); cache: ${m}`);let K=[],T=[];for(let a of _){let d=F(a),{doc:f,error:S}=await v(a.publisher,a.package_,void 0);if(f){K.push(f);let b=N([f]),E=c.has(d)?"fetched":k.has(d)?"cache":"fetched";T.push({...a,origin:E,versions:b}),o(`[render-stack] ${d} \u2014 ${E} (${b.join(", ")})`+(h.has(d)?" [cache write FAILED \u2014 will re-fetch next load]":""))}else T.push({...a,origin:"missing",reason:S??"unresolved"}),o(`[render-stack] ${d} \u2014 MISSING: ${S??"unresolved"}`)}let V=await q([...$,...K],n),J=new z(n,V),W=await new re(s).parseKanonaks(J),B=new te(W),A=T.map(a=>a.origin==="missing"||ee(W,{publisher:a.publisher,package_:a.package_,name:a.package_}).length>0?a:{...a,resolvedButNotInCatalog:!0}),l=Y(A);for(let a of l)o(`[render-stack] WARNING: ${a}`);let u={contractSource:j,cachePath:m,packages:A,warnings:l},y=new Set,I=new Map;for(let a of await n.getAllDocumentsAsync()){let d=a.metadata.namespace_;if(!d?.version||d.publisher!==i)continue;let f=D(d.version),S=`${d.publisher}/${d.package_}@${f}`;y.add(S);let b=await n.getDocumentContentAsync(S);b!==null&&I.set(`${d.package_}@${f}`,b)}return ne({publisher:i,availablePublishers:[i],catalog:W,lookRenderer:B,localNamespaces:y,rawByNsKey:I,renderStack:u})}import{VersionOperator as ae}from"@kanonak-protocol/types/document/models/enums";function se(t){let{lookRenderer:e,publisher:s,renderStack:r,catalog:i}=t,o=e.explainStylesheet(e.publisherSubject(s)),m=[...o.tokens.entries()].map(([n,g])=>({name:n,value:g.value,source:`${g.sourceNamespace}/${g.sourceName}`,level:g.level})),p=o.baseStylesheet,k={present:p.css!==void 0,...p.sourceNamespace!==void 0?{source:p.sourceNamespace}:{},...p.scope!==void 0?{scope:p.scope}:{},...p.css!==void 0?{bytes:p.css.length}:{},...p.problem!==void 0?{problem:p.problem}:{},candidates:p.candidates},c=new Map;for(let n of i){let g=n.namespace;g&&c.set(g,(c.get(g)??0)+1)}let h=[...c.entries()].map(([n,g])=>({namespace:n,resources:g})).sort((n,g)=>n.namespace.localeCompare(g.namespace));return{publisher:s,renderStack:{contractSource:r.contractSource,cachePath:r.cachePath,packages:r.packages.map(n=>({package_:F(n),origin:n.origin,...n.versions!==void 0?{versions:n.versions}:{},...n.reason!==void 0?{reason:n.reason}:{},...n.resolvedButNotInCatalog!==void 0?{resolvedButNotInCatalog:n.resolvedButNotInCatalog}:{}}))},stylesheet:{tokens:m,baseStylesheet:k,...o.look?{look:{sourceClass:`${o.look.sourceClass.publisher}/${o.look.sourceClass.package_}/${o.look.sourceClass.name}`}}:{}},catalog:h,warnings:[...r.warnings,...o.warnings.filter(n=>!r.warnings.includes(n))]}}function Ve(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function de(t){let e=Ve,s=t.warnings.length===0,r=t.warnings.length===0?'<p class="ok">\u2713 No problems detected \u2014 the render stack is fully resolved and pages should be styled.</p>':t.warnings.map(c=>`<div class="warn">\u26A0 ${e(c)}</div>`).join(`
1
+ import{c as we}from"../chunk-L2KE7B3K.js";import{j as te}from"../chunk-4PY3JJH3.js";import"../chunk-QHABFCRC.js";import{a as fe,d as Q,f as be,h as Z}from"../chunk-CC44JAOT.js";import{e as ke,g as ye,j as G,k as X}from"../chunk-UXYCUGSF.js";import{a as me}from"../chunk-4NO7MHS7.js";import"../chunk-PEUTCG3B.js";import{a as $e}from"../chunk-PEJALHXK.js";import"../chunk-SC5M74NM.js";import{a as q,b as z}from"../chunk-ITKOKDBG.js";import{m as re}from"../chunk-V6KIDED2.js";import{a as O}from"../chunk-NJ3AZYQD.js";import{c as Se}from"../chunk-SVUMCLK5.js";import{c as ve,s as ee}from"../chunk-YW6P24RF.js";import"../chunk-FUUTGGJS.js";import{c as L,e as D,f as H,g as he}from"../chunk-2ACBWC7K.js";import{readFileSync as ie,writeFileSync as je,mkdirSync as Ce}from"fs";import{join as oe}from"path";import Fe from"js-yaml";var Re=[{publisher:"kanonak.org",package_:"core-kanonak"},{publisher:"kanonak.org",package_:"site"},{publisher:"kanonak.org",package_:"link"},{publisher:"kanonak.org",package_:"look-tokens"},{publisher:"kanonak.org",package_:"look-styles"},{publisher:"kanonak.org",package_:"look"},{publisher:"kanonak.org",package_:"universal-look"}];function U(t){return Re}function F(t){return`${t.publisher}/${t.package_}`}function Y(t){let e={"kanonak.org/look-styles":"pages render UNSTYLED \u2014 generated CSS stops at the :root token block","kanonak.org/look-tokens":"the :root block loses the universal design-token floor (colors, fonts, spacing)","kanonak.org/universal-look":"resources without their own look render as an empty HTML comment","kanonak.org/look":"band vocabulary (Hero, PropertyList, \u2026) is unresolvable \u2014 declared looks cannot render","kanonak.org/site":"the site vocabulary (content, navigation) is unresolvable \u2014 the base stylesheet cannot bind","kanonak.org/core-kanonak":"the Package/Publisher classes are unresolvable \u2014 package and publisher pages degrade","kanonak.org/link":"link vocabulary is unresolvable \u2014 cross-reference styling degrades"},s=[];for(let r of t)if(r.origin==="missing"){let i=F(r),o=e[i]??"whatever this package contributes to rendering is lost";s.push(`Render-stack package ${i} is MISSING (${r.reason??"unknown reason"}) \u2014 ${o}. Fix: kanonak install ${i} (as the user running the render), or restore network access to ${r.publisher}.`)}else r.resolvedButNotInCatalog&&s.push(`Render-stack package ${F(r)} resolved (${r.origin}) but is NOT in the parsed catalog \u2014 this is a closure-scoping bug; please report it.`);return s}function ne(t){let{publisher:e,availablePublishers:s,catalog:r,lookRenderer:i,localNamespaces:o,rawByNsKey:m,renderStack:p,producers:k,lockSource:c,configSource:h}=t,n=new Map,g=new Map,w=new Map,v=new Set;for(let $ of r){if(!($ instanceof ve))continue;let R=$.namespace||"";if(!o.has(R))continue;n.set(`${R}/${$.name}`,$);let _=R.split("/")[1]??"",[j,N]=_.split("@");if(!j||!N)continue;let K=he(N);K&&(v.has(_)||(v.add(_),g.has(j)||g.set(j,[]),g.get(j).push({verStr:N,version:K})),$.name===j&&w.set(_,$))}for(let $ of g.values())$.sort((R,_)=>L(_.version,R.version));return{publisher:e,availablePublishers:s,catalog:r,lookRenderer:i,localNamespaces:o,rawByNsKey:m,bySubject:n,pkgVersions:g,pkgSelfByVer:w,renderStack:p,...k?{producers:k}:{},...c?{lockSource:c}:{},...h?{configSource:h}:{}}}async function ce(t,e={}){let s=new O,r=new me(s),i=[],o=[];for(let l of Z(t)){let u;try{u=ie(l,"utf-8")}catch{continue}let y;try{y=s.parse(u).metadata?.namespace_}catch{continue}if(!y?.version)continue;let I=y.version;o.push({publisher:y.publisher,package_:y.package_,verStr:D(I),version:I,source:u})}o.sort((l,u)=>L(u.version,l.version));for(let l of o)await r.saveDocumentAsync(s.parse(l.source),`${l.publisher}/${l.package_}@${l.verStr}`),i.push({publisher:l.publisher,package_:l.package_,verStr:l.verStr,source:l.source});let m=[...new Set(i.map(l=>l.publisher))].sort(),p=e.publisher;if(p){if(!m.includes(p))throw new Error(`Publisher "${p}" not found in workspace. Available: ${m.join(", ")||"(none)"}`)}else if(m.length===1)p=m[0];else throw m.length===0?new Error(`No Kanonak packages found under ${t}`):new Error(`Workspace has multiple publishers (${m.join(", ")}). Pass --publisher <domain> to choose which one to serve.`);let k=new Set,c=new Map;for(let l of i)l.publisher===p&&(k.add(`${l.publisher}/${l.package_}@${l.verStr}`),c.set(`${l.package_}@${l.verStr}`,l.source));let h=Q(),n=new fe(h,!0,s),g={};e.httpCache&&(g.getFromCache=e.httpCache.getFromCache,g.onFetch=e.httpCache.onFetch),e.fetchFn&&(g.fetchFn=e.fetchFn);let w=e.repository??new be(r,n,new X(g)),v=e.log??(()=>{}),$=U(void 0),R=[],_=l=>l.map(u=>u.metadata.namespace_?.version).filter(u=>u!==void 0).sort((u,y)=>L(y,u)).map(D);if(!e.repository){v(`[render-stack] resolving ${$.length} ambient look-stack package(s); cache: ${h}`);let l=e.fetchFn?new G({fetchFn:e.fetchFn}):new G;for(let u of $){let y=F(u),I=await r.getDocumentsByNamespaceAsync(u.publisher,u.package_);if(I.length>0){let d=_(I);R.push({...u,origin:"workspace",versions:d}),v(`[render-stack] ${y} \u2014 workspace (${d.join(", ")})`);continue}let a=await n.getDocumentsByNamespaceAsync(u.publisher,u.package_);if(a.length>0){let d=_(a);R.push({...u,origin:"cache",versions:d}),v(`[render-stack] ${y} \u2014 cache (${d.join(", ")})`);continue}try{let f=(await l.getLock(u.publisher))?.packages[`${u.publisher}/${u.package_}`];if(!f){let C=`publisher ${u.publisher} reachable but its lock does not pin ${u.package_}`;R.push({...u,origin:"missing",reason:C}),v(`[render-stack] ${y} \u2014 MISSING: ${C}`);continue}let S=f.version,b=f.resolved,E=await(e.fetchFn?e.fetchFn(b,u.publisher):ke(b));if(!E.ok){let C=`fetch ${b} failed: HTTP ${E.status} ${E.statusText}`;R.push({...u,origin:"missing",reason:C}),v(`[render-stack] ${y} \u2014 MISSING: ${C}`);continue}let ge=await E.text();await r.saveDocumentAsync(s.parse(ge),`${u.publisher}/${u.package_}@${S}`);try{let C=oe(h,u.publisher);Ce(C,{recursive:!0}),je(oe(C,`${u.package_}@${S}.kan.yml`),ge,"utf-8"),R.push({...u,origin:"fetched",versions:[S]}),v(`[render-stack] ${y}@${S} \u2014 fetched from ${b}, installed to cache`)}catch(C){R.push({...u,origin:"fetched",versions:[S]}),v(`[render-stack] ${y}@${S} \u2014 fetched from ${b}, but cache ${h} is NOT WRITABLE (${C.message}); usable for this load only \u2014 every load will re-fetch it`)}}catch(d){let f=`fetch failed: ${d.message}`;R.push({...u,origin:"missing",reason:f}),v(`[render-stack] ${y} \u2014 MISSING: ${f}`)}}}let j=w;if(!e.repository){let l=(await r.getAllDocumentsAsync()).filter(y=>y.metadata.namespace_?.publisher===p),u=await q(l,w);for(let y of $)u.add(F(y));j=new z(w,u)}let N=await new re(s).parseKanonaks(j),K=new te(N),T=(l,u)=>ee(N,{publisher:l,package_:u,name:u}).length>0,V;if(e.repository){V=[];for(let l of $){let u=await w.getDocumentsByNamespaceAsync(l.publisher,l.package_);V.push(u.length>0?{...l,origin:"repository",versions:_(u)}:{...l,origin:"missing",reason:"not present in the caller-supplied repository"})}}else V=R.map(l=>l.origin==="missing"||T(l.publisher,l.package_)?l:{...l,resolvedButNotInCatalog:!0});let J=Y(V);for(let l of J)v(`[render-stack] WARNING: ${l}`);let W={contractSource:"universal-default",cachePath:h,packages:V,warnings:J},B;try{B=ie(oe(t,"kanonak.lock"),"utf-8")}catch{B=Ne(p,i,s)}let A;try{A=ie(oe(t,".well-known","kanonak.json"),"utf-8")}catch{A=void 0}return ne({publisher:p,availablePublishers:m,catalog:N,lookRenderer:K,localNamespaces:k,rawByNsKey:c,renderStack:W,...B?{lockSource:B}:{},...A?{configSource:A}:{}})}function Ne(t,e,s){let r=new Map;for(let o of e)o.publisher===t&&(r.has(o.package_)||r.set(o.package_,{verStr:o.verStr,source:o.source}));if(r.size===0)return;let i={};for(let o of[...r.keys()].sort()){let{verStr:m,source:p}=r.get(o),k={},c;try{c=s.parse(p).metadata?.imports}catch{c=void 0}for(let n of c?.[t]??[]){let g=r.get(n.packageName);g&&(k[`${t}/${n.packageName}`]=g.verStr)}let h={};for(let n of Object.keys(k).sort())h[n]=k[n];i[`${t}/${o}`]={version:m,resolved:`https://${t}/${o}/${m}.kan.yml`,integrity:we(p),dependencies:h}}return Fe.dump({version:"1",lastUpdated:"",packages:i},{lineWidth:-1,sortKeys:!1,quotingType:'"'})}import{existsSync as Me,readFileSync as Ie,writeFileSync as De,mkdirSync as Ke}from"fs";import{join as xe}from"path";async function le(t,e={}){let s=new O,r=Se(t),i=r.kind==="resource"?r.uri.publisher:r.publisher,o=e.log??(()=>{}),m=e.cacheRoot??Q(),p=(a,d,f)=>xe(m,a,`${d}@${f}.kan.yml`),k=new Set,c=new Set,h=new Map,n=new X({getFromCache:(a,d,f)=>{let S=p(a,d,f),b=Me(S)?Ie(S,"utf-8"):null;return b!==null&&k.add(`${a}/${d}`),b},onFetch:(a,d,f,S)=>{c.add(`${a}/${d}`);try{let b=xe(m,a);Ke(b,{recursive:!0}),De(p(a,d,f),S,"utf-8")}catch(b){h.set(`${a}/${d}`,b.message),o(`[render] fetched ${a}/${d}@${f} but cache ${m} is NOT WRITABLE (${b.message}); usable for this load only \u2014 every load will re-fetch it`)}},...e.fetchFn?{fetchFn:e.fetchFn}:{}}),g=new G(e.fetchFn?{fetchFn:e.fetchFn}:void 0),w;if(r.kind==="resource"){let a=r.uri.version;w=[a?{package_:r.uri.package_,version:`${a.major}.${a.minor}.${a.patch}`}:{package_:r.uri.package_}]}else if(r.kind==="package"){let a=r.version;w=[a?{package_:r.package_,version:`${a.major}.${a.minor}.${a.patch}`}:{package_:r.package_}]}else w=((await g.getConfig(i)).featured_packages??[]).map(d=>({package_:d}));let v=async(a,d,f)=>{try{let S=f?s.buildImport(d,"=",f,a):s.buildImport(d,"*","0.0.0",a),b=await n.getHighestCompatibleVersionAsync(a,S);return b?{doc:b}:{doc:null,error:`${a} did not resolve ${d}${f?`@${f}`:""} (not in its index, or unreachable)`}}catch(S){return{doc:null,error:S.message}}},$=[],R=[];for(let a of w){let{doc:d,error:f}=await v(i,a.package_,a.version);d?$.push(d):f&&R.push(f)}if($.length===0)throw new Error(`Could not fetch any package for address "${t}" from publisher "${i}".`+(R.length>0?` Reasons: ${R.join("; ")}`:""));let _=U(),j="universal-default",N=a=>a.map(d=>d.metadata.namespace_?.version).filter(d=>d!==void 0).sort((d,f)=>L(f,d)).map(D);o(`[render-stack] resolving ${_.length} ambient look-stack package(s) (contract: ${j}); cache: ${m}`);let K=[],T=[];for(let a of _){let d=F(a),{doc:f,error:S}=await v(a.publisher,a.package_,void 0);if(f){K.push(f);let b=N([f]),E=c.has(d)?"fetched":k.has(d)?"cache":"fetched";T.push({...a,origin:E,versions:b}),o(`[render-stack] ${d} \u2014 ${E} (${b.join(", ")})`+(h.has(d)?" [cache write FAILED \u2014 will re-fetch next load]":""))}else T.push({...a,origin:"missing",reason:S??"unresolved"}),o(`[render-stack] ${d} \u2014 MISSING: ${S??"unresolved"}`)}let V=await q([...$,...K],n),J=new z(n,V),W=await new re(s).parseKanonaks(J),B=new te(W),A=T.map(a=>a.origin==="missing"||ee(W,{publisher:a.publisher,package_:a.package_,name:a.package_}).length>0?a:{...a,resolvedButNotInCatalog:!0}),l=Y(A);for(let a of l)o(`[render-stack] WARNING: ${a}`);let u={contractSource:j,cachePath:m,packages:A,warnings:l},y=new Set,I=new Map;for(let a of await n.getAllDocumentsAsync()){let d=a.metadata.namespace_;if(!d?.version||d.publisher!==i)continue;let f=D(d.version),S=`${d.publisher}/${d.package_}@${f}`;y.add(S);let b=await n.getDocumentContentAsync(S);b!==null&&I.set(`${d.package_}@${f}`,b)}return ne({publisher:i,availablePublishers:[i],catalog:W,lookRenderer:B,localNamespaces:y,rawByNsKey:I,renderStack:u})}import{VersionOperator as ae}from"@kanonak-protocol/types/document/models/enums";function se(t){let{lookRenderer:e,publisher:s,renderStack:r,catalog:i}=t,o=e.explainStylesheet(e.publisherSubject(s)),m=[...o.tokens.entries()].map(([n,g])=>({name:n,value:g.value,source:`${g.sourceNamespace}/${g.sourceName}`,level:g.level})),p=o.baseStylesheet,k={present:p.css!==void 0,...p.sourceNamespace!==void 0?{source:p.sourceNamespace}:{},...p.scope!==void 0?{scope:p.scope}:{},...p.css!==void 0?{bytes:p.css.length}:{},...p.problem!==void 0?{problem:p.problem}:{},candidates:p.candidates},c=new Map;for(let n of i){let g=n.namespace;g&&c.set(g,(c.get(g)??0)+1)}let h=[...c.entries()].map(([n,g])=>({namespace:n,resources:g})).sort((n,g)=>n.namespace.localeCompare(g.namespace));return{publisher:s,renderStack:{contractSource:r.contractSource,cachePath:r.cachePath,packages:r.packages.map(n=>({package_:F(n),origin:n.origin,...n.versions!==void 0?{versions:n.versions}:{},...n.reason!==void 0?{reason:n.reason}:{},...n.resolvedButNotInCatalog!==void 0?{resolvedButNotInCatalog:n.resolvedButNotInCatalog}:{}}))},stylesheet:{tokens:m,baseStylesheet:k,...o.look?{look:{sourceClass:`${o.look.sourceClass.publisher}/${o.look.sourceClass.package_}/${o.look.sourceClass.name}`}}:{}},catalog:h,warnings:[...r.warnings,...o.warnings.filter(n=>!r.warnings.includes(n))]}}function Ve(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function de(t){let e=Ve,s=t.warnings.length===0,r=t.warnings.length===0?'<p class="ok">\u2713 No problems detected \u2014 the render stack is fully resolved and pages should be styled.</p>':t.warnings.map(c=>`<div class="warn">\u26A0 ${e(c)}</div>`).join(`
2
2
  `),i=t.renderStack.packages.map(c=>{let h=c.origin!=="missing"&&!c.resolvedButNotInCatalog,n=c.origin==="missing"?'<span class="bad">MISSING</span>':c.resolvedButNotInCatalog?`<span class="bad">${e(c.origin)} (not in catalog)</span>`:`<span class="good">${e(c.origin)}</span>`,g=c.reason?e(c.reason):e((c.versions??[]).join(", "));return`<tr class="${h?"":"row-bad"}"><td><code>${e(c.package_)}</code></td><td>${n}</td><td>${g}</td></tr>`}).join(`
3
3
  `),o=t.stylesheet.baseStylesheet,m=o.present?`<p><span class="good">\u2713 present</span> \u2014 <code>${e(o.source??"")}</code> (${o.bytes} bytes, ${e(o.scope??"")})</p>`:`<p><span class="bad">\u2717 MISSING</span>${o.problem?` \u2014 ${e(o.problem)}`:""}${o.candidates.length>0?`<br>candidates considered: ${o.candidates.map(c=>`<code>${e(c)}</code>`).join(", ")}`:""}</p><p>Without the base stylesheet, generated CSS stops at the <code>:root</code> token block and pages appear unstyled.</p>`,p=t.stylesheet.tokens.map(c=>`<tr><td><code>--kan-${e(c.name)}</code></td><td><code>${e(c.value)}</code></td><td><code>${e(c.source)}</code></td><td>${e(c.level)}</td></tr>`).join(`
4
4
  `),k=t.catalog.map(c=>`<tr><td><code>${e(c.namespace)}</code></td><td>${c.resources}</td></tr>`).join(`
@@ -0,0 +1,40 @@
1
+ import type { DefinedKanonak } from '../kanonaks/DefinedKanonak.js';
2
+ /**
3
+ * A node in the expression RUNTIME's tree format — the JSON contract
4
+ * `@kanonak-protocol/expression` evaluates (its `ExprNode`): `type` is the
5
+ * node class's canonical versionless URI, operand keys are the frozen `tx`
6
+ * operand property local names, references are canonical versionless URI
7
+ * strings. Declared here so the SDK does not depend on the runtime package;
8
+ * the shape is pinned by the runtime's shared conformance vectors.
9
+ */
10
+ export interface ExpressionRuntimeNode {
11
+ type: string;
12
+ [operandOrValue: string]: unknown;
13
+ }
14
+ /**
15
+ * Serialize a parsed `tx` expression (a `SubjectKanonak` or
16
+ * `EmbeddedKanonak` from `KanonakObjectParser`) into the expression
17
+ * runtime's tree format, so an authored rule can be EVALUATED through
18
+ * `@kanonak-protocol/expression` — the adapter owed since runtime#71,
19
+ * and the second half (with `ReasoningResult.getPropertyClosures`) of
20
+ * the runtime#16 pipeline: parse → reason → adapt → evaluate.
21
+ *
22
+ * Purely mechanical, driven by the resolved object model:
23
+ *
24
+ * - the node's `type` statement (matched by canonical URI, never by
25
+ * local name) becomes the runtime `type` — its target's versionless
26
+ * canonical URI;
27
+ * - every other statement becomes a field keyed by the predicate's
28
+ * LOCAL name — which is exact here, not a heuristic: the runtime's
29
+ * operand keys ARE the frozen `tx` property local names, and the
30
+ * predicate arrives already resolved to its canonical URI;
31
+ * - embeddeds recurse; references serialize as versionless canonical
32
+ * URI strings (so `tx.UriLiteral.refTo` and `tx.viaProperty` carry
33
+ * exactly the identity the runtime's ordered comparisons and the
34
+ * reasoner's closure tables share); scalars pass through.
35
+ *
36
+ * Fails loudly on shapes the runtime cannot evaluate — a node with no
37
+ * (or more than one) declared type, or a duplicated operand — rather
38
+ * than emitting a tree that would misevaluate.
39
+ */
40
+ export declare function toExpressionRuntimeTree(node: DefinedKanonak): ExpressionRuntimeNode;
@@ -9,6 +9,8 @@ export * from './DocAst.js';
9
9
  export * from './DocAstUriConstants.js';
10
10
  export * from './FormatOverride.js';
11
11
  export { ReferenceResolver } from './ReferenceResolver.js';
12
+ export { toExpressionRuntimeTree } from './expressionRuntimeTree.js';
13
+ export type { ExpressionRuntimeNode } from './expressionRuntimeTree.js';
12
14
  export type { IDocumentAstBackend } from './backends/IDocumentAstBackend.js';
13
15
  export { HtmlBackend } from './backends/HtmlBackend.js';
14
16
  export { JsonBackend } from './backends/JsonBackend.js';
@@ -1,33 +1,33 @@
1
- import{b as Y,c as An,d as Sn,e as ce,f as Te,g as O,h as wn,i as X,j as q}from"../chunk-IHB7UVEH.js";import{a as se}from"../chunk-EZSHR3CB.js";import"../chunk-QHABFCRC.js";import"../chunk-4NO7MHS7.js";import"../chunk-S6VSAKXB.js";import"../chunk-PEJALHXK.js";import{d as kn,e as bn,f as hn,g as Dn,l as ie}from"../chunk-MX3DEXMV.js";import{a as ae}from"../chunk-NJ3AZYQD.js";import"../chunk-6U26UASC.js";import"../chunk-GZPLWII7.js";import{b as N,c as D,d as K,g as M,h as P,i as F,j as W,l as H,n as L,o as A,r as S}from"../chunk-7BHDZHJY.js";import"../chunk-FUUTGGJS.js";import{g as oe}from"../chunk-2ACBWC7K.js";var $e="kanonak.org",Ue="document-ast",i=e=>({publisher:$e,package_:Ue,name:e}),m={Document:i("Document"),Block:i("Block"),Inline:i("Inline"),StructuredValue:i("StructuredValue"),Heading:i("Heading"),Paragraph:i("Paragraph"),RawBlock:i("RawBlock"),Text:i("Text"),StructuredMap:i("StructuredMap"),StructuredEntry:i("StructuredEntry"),StructuredList:i("StructuredList"),StringScalar:i("StringScalar"),IntegerScalar:i("IntegerScalar"),EscapeHint:i("EscapeHint"),MediaType:i("MediaType"),metadata:i("metadata"),children:i("children"),level:i("level"),inlines:i("inlines"),text:i("text"),entries:i("entries"),key:i("key"),value:i("value"),escapeHint:i("escapeHint"),items:i("items"),stringValue:i("stringValue"),integerValue:i("integerValue"),rawContent:i("rawContent"),mediaType:i("mediaType"),mimeType:i("mimeType"),ESC_RAW:i("esc-raw"),ESC_YAML_SAFE:i("esc-yaml-safe"),ESC_TOML_STRING:i("esc-toml-string"),ESC_TOML_MULTILINE:i("esc-toml-multiline"),ESC_JSON:i("esc-json"),ESC_DYNAMODB_BOOL:i("esc-dynamodb-bool"),ESC_DYNAMODB_NUMBER:i("esc-dynamodb-number"),ESC_DYNAMODB_NULL:i("esc-dynamodb-null"),TEXT_PLAIN:i("text-plain"),TEXT_MARKDOWN:i("text-markdown"),TEXT_HTML:i("text-html"),TEXT_CSS:i("text-css"),APPLICATION_JSON:i("application-json"),TEXT_YAML:i("text-yaml"),IMAGE_SVG_XML:i("image-svg-xml"),ResourceLink:i("ResourceLink"),target:i("target"),linkLabel:i("linkLabel"),PropertyList:i("PropertyList"),propertyEntries:i("propertyEntries"),PropertyEntry:i("PropertyEntry"),propertyKey:i("propertyKey"),propertyValue:i("propertyValue"),Table:i("Table"),tableColumnLabels:i("tableColumnLabels"),tableRows:i("tableRows"),TableRow:i("TableRow"),tableCells:i("tableCells")};function ue(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var j=class{backendUri="kanonak.org/transformations/markdown-with-frontmatter";render(n,t){let r=xe(n.metadata,t),o=Le(n.children),s=["---",...r,"---","",o].join(`
1
+ import{b as X,c as Un,d as Vn,e as pe,f as ve,g as M,h as Rn,i as q,j as G}from"../chunk-4PY3JJH3.js";import{a as le}from"../chunk-LYSCTQC2.js";import"../chunk-QHABFCRC.js";import"../chunk-4NO7MHS7.js";import"../chunk-5NH5XDGO.js";import"../chunk-PEJALHXK.js";import{a as ce,b as ue,c as de,e as $n,f as Tn,g as Bn,h as xn,m as fe}from"../chunk-V6KIDED2.js";import{a as se}from"../chunk-NJ3AZYQD.js";import{e as U}from"../chunk-SVUMCLK5.js";import{b as Y,c as D,d as E,g as $,h as T,i as B,j as w,k as me,l as x,n as N,o as S,r as A}from"../chunk-YW6P24RF.js";import"../chunk-FUUTGGJS.js";import{g as ie}from"../chunk-2ACBWC7K.js";var Le="kanonak.org",Oe="document-ast",i=e=>({publisher:Le,package_:Oe,name:e}),m={Document:i("Document"),Block:i("Block"),Inline:i("Inline"),StructuredValue:i("StructuredValue"),Heading:i("Heading"),Paragraph:i("Paragraph"),RawBlock:i("RawBlock"),Text:i("Text"),StructuredMap:i("StructuredMap"),StructuredEntry:i("StructuredEntry"),StructuredList:i("StructuredList"),StringScalar:i("StringScalar"),IntegerScalar:i("IntegerScalar"),EscapeHint:i("EscapeHint"),MediaType:i("MediaType"),metadata:i("metadata"),children:i("children"),level:i("level"),inlines:i("inlines"),text:i("text"),entries:i("entries"),key:i("key"),value:i("value"),escapeHint:i("escapeHint"),items:i("items"),stringValue:i("stringValue"),integerValue:i("integerValue"),rawContent:i("rawContent"),mediaType:i("mediaType"),mimeType:i("mimeType"),ESC_RAW:i("esc-raw"),ESC_YAML_SAFE:i("esc-yaml-safe"),ESC_TOML_STRING:i("esc-toml-string"),ESC_TOML_MULTILINE:i("esc-toml-multiline"),ESC_JSON:i("esc-json"),ESC_DYNAMODB_BOOL:i("esc-dynamodb-bool"),ESC_DYNAMODB_NUMBER:i("esc-dynamodb-number"),ESC_DYNAMODB_NULL:i("esc-dynamodb-null"),TEXT_PLAIN:i("text-plain"),TEXT_MARKDOWN:i("text-markdown"),TEXT_HTML:i("text-html"),TEXT_CSS:i("text-css"),APPLICATION_JSON:i("application-json"),TEXT_YAML:i("text-yaml"),IMAGE_SVG_XML:i("image-svg-xml"),ResourceLink:i("ResourceLink"),target:i("target"),linkLabel:i("linkLabel"),PropertyList:i("PropertyList"),propertyEntries:i("propertyEntries"),PropertyEntry:i("PropertyEntry"),propertyKey:i("propertyKey"),propertyValue:i("propertyValue"),Table:i("Table"),tableColumnLabels:i("tableColumnLabels"),tableRows:i("tableRows"),TableRow:i("TableRow"),tableCells:i("tableCells")};function ge(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var V=class{backendUri="kanonak.org/transformations/markdown-with-frontmatter";render(n,t){let r=Ie(n.metadata,t),o=Ke(n.children),s=["---",...r,"---","",o].join(`
2
2
  `);return t?.trailingNewline&&(s.endsWith(`
3
3
  `)||(s+=`
4
- `)),s}};function xe(e,n){if(!e)return[];let t=new Map;for(let c of e.entries)t.set(I(c.key),c);let r=new Map;if(n?.metadataRenames)for(let[c,u]of n.metadataRenames)r.set(I(c),u);let a=(n?.metadataKeys??e.entries.map(c=>c.key)).map(I),s=[];for(let c of a){let u=t.get(c);if(!u)continue;let f=r.get(c),l=I(f??c),d=me(u.value,u.escapeHint);d!==void 0&&s.push(`${l}: ${d}`)}return s}function I(e){let n=e.lastIndexOf(".");return n===-1?e:e.substring(n+1)||e}function me(e,n){switch(e.kind){case"StringScalar":return Ve(e.stringValue,n);case"IntegerScalar":return String(e.integerValue);case"StructuredList":{let t=[];for(let r of e.items){let o=me(r,n);o!==void 0&&t.push(o)}return t.join(", ")}case"StructuredMap":return;default:return}}function Ve(e,n){return!n||ue(n,m.ESC_RAW)?e:ue(n,m.ESC_YAML_SAFE)?ve(e):e}function ve(e){return e.includes(`
4
+ `)),s}};function Ie(e,n){if(!e)return[];let t=new Map;for(let c of e.entries)t.set(P(c.key),c);let r=new Map;if(n?.metadataRenames)for(let[c,u]of n.metadataRenames)r.set(P(c),u);let a=(n?.metadataKeys??e.entries.map(c=>c.key)).map(P),s=[];for(let c of a){let u=t.get(c);if(!u)continue;let f=r.get(c),l=P(f??c),d=ye(u.value,u.escapeHint);d!==void 0&&s.push(`${l}: ${d}`)}return s}function P(e){let n=e.lastIndexOf(".");return n===-1?e:e.substring(n+1)||e}function ye(e,n){switch(e.kind){case"StringScalar":return _e(e.stringValue,n);case"IntegerScalar":return String(e.integerValue);case"StructuredList":{let t=[];for(let r of e.items){let o=ye(r,n);o!==void 0&&t.push(o)}return t.join(", ")}case"StructuredMap":return;default:return}}function _e(e,n){return!n||ge(n,m.ESC_RAW)?e:ge(n,m.ESC_YAML_SAFE)?Ce(e):e}function Ce(e){return e.includes(`
5
5
  `)?`|-
6
6
  ${e.replace(/\n/g,`
7
- `).trimEnd()}`:/[:#\[\]{}&*!|>'"%@`,]/.test(e)?`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:e}function Le(e){let n=[];for(let t of e){let r=J(t);r&&n.push(r)}return n.join(`
7
+ `).trimEnd()}`:/[:#\[\]{}&*!|>'"%@`,]/.test(e)?`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:e}function Ke(e){let n=[];for(let t of e){let r=z(t);r&&n.push(r)}return n.join(`
8
8
 
9
- `)}function J(e){switch(e.kind){case"Heading":return`${"#".repeat(e.level)} ${_(e.inlines)}`;case"Paragraph":return _(e.inlines);case"RawBlock":return e.rawContent;case"PropertyList":return de(e);case"Table":return Oe(e);default:return""}}function Oe(e){let n=e.tableColumnLabels??[],t=e.tableRows??[];if(n.length===0&&t.length===0)return"";let r=`| ${n.map(G).join(" | ")} |`,o=`| ${n.map(()=>"---").join(" | ")} |`,a=t.map(s=>`| ${(s.tableCells??[]).map(Ie).join(" | ")} |`);return[r,o,...a].join(`
10
- `)}function Ie(e){let n=e;return!n||typeof n!="object"||!n.kind?"":n.kind==="Text"||n.kind==="ResourceLink"||n.kind==="Badge"?G(_([n])):G(J(n).replace(/\n+/g," "))}function G(e){return e==null?"":String(e).replace(/\|/g,"\\|")}function de(e,n=0){if(!e.propertyEntries||e.propertyEntries.length===0)return"";let t=" ".repeat(n),r=[];for(let o of e.propertyEntries){let a=`${t}**${o.propertyKey}:**`,s=_e(o.propertyValue,n+1);s.includes(`
9
+ `)}function z(e){switch(e.kind){case"Heading":return`${"#".repeat(e.level)} ${F(e.inlines)}`;case"Paragraph":return F(e.inlines);case"RawBlock":return e.rawContent;case"PropertyList":return ke(e);case"Table":return Ne(e);default:return""}}function Ne(e){let n=e.tableColumnLabels??[],t=e.tableRows??[];if(n.length===0&&t.length===0)return"";let r=`| ${n.map(J).join(" | ")} |`,o=`| ${n.map(()=>"---").join(" | ")} |`,a=t.map(s=>`| ${(s.tableCells??[]).map(Me).join(" | ")} |`);return[r,o,...a].join(`
10
+ `)}function Me(e){let n=e;return!n||typeof n!="object"||!n.kind?"":n.kind==="Text"||n.kind==="ResourceLink"||n.kind==="Badge"?J(F([n])):J(z(n).replace(/\n+/g," "))}function J(e){return e==null?"":String(e).replace(/\|/g,"\\|")}function ke(e,n=0){if(!e.propertyEntries||e.propertyEntries.length===0)return"";let t=" ".repeat(n),r=[];for(let o of e.propertyEntries){let a=`${t}**${o.propertyKey}:**`,s=Pe(o.propertyValue,n+1);s.includes(`
11
11
  `)?r.push(`${a}
12
12
  ${s}`):r.push(`${a} ${s}`)}return r.join(`
13
13
 
14
- `)}function _e(e,n){if(!e||e.length===0)return"";let t=[],r=[];for(let o of e){let a=o;!a||typeof a!="object"||!a.kind||(a.kind==="Text"||a.kind==="ResourceLink"||a.kind==="Badge"?t.push(_([a])):a.kind==="PropertyList"?r.push(de(a,n)):r.push(J(a)))}return r.length===0?t.join(""):t.length===0?r.join(`
14
+ `)}function Pe(e,n){if(!e||e.length===0)return"";let t=[],r=[];for(let o of e){let a=o;!a||typeof a!="object"||!a.kind||(a.kind==="Text"||a.kind==="ResourceLink"||a.kind==="Badge"?t.push(F([a])):a.kind==="PropertyList"?r.push(ke(a,n)):r.push(z(a)))}return r.length===0?t.join(""):t.length===0?r.join(`
15
15
 
16
16
  `):`${t.join("")}
17
17
 
18
18
  ${r.join(`
19
19
 
20
- `)}`}function _(e){let n=[];for(let t of e)t.kind==="Text"?n.push(t.text):t.kind==="ResourceLink"?n.push(Re(t)):t.kind==="Badge"&&n.push(Ce(t));return n.join("")}function Re(e){let n=le(e.target);if(!n)return e.linkLabel??"[unresolved link]";let t=A(n),r=e.linkLabel&&e.linkLabel.length>0?e.linkLabel:n.name,o=e.linkTooltip?` "${fe(e.linkTooltip)}"`:"";return`[${r}](${t}${o})`}function Ce(e){if(!e.badgeTarget)return`*${e.badgeLabel}*`;let n=le(e.badgeTarget);if(!n)return`*${e.badgeLabel}*`;let t=A(n),r=e.badgeTooltip?` "${fe(e.badgeTooltip)}"`:"";return`*[${e.badgeLabel}](${t}${r})*`}function fe(e){return e==null?"":String(e).replace(/"/g,'\\"')}function le(e){if(!e||typeof e!="object")return;let n=e;if(n.subject&&n.subject.publisher&&n.subject.package_&&n.subject.name){let r={publisher:n.subject.publisher,package_:n.subject.package_,name:n.subject.name};return n.subject.version&&(r.version=n.subject.version),r}let t=e;if(typeof t.namespace=="string"&&typeof t.name=="string"&&t.name.length>0){let r=/^([^/]+)\/([^@]+)@(\d+)\.(\d+)\.(\d+)$/.exec(t.namespace);if(r)return{publisher:r[1],package_:r[2],name:t.name,version:{major:Number(r[3]),minor:Number(r[4]),patch:Number(r[5])}}}}function Ne(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var E=class{backendUri="kanonak.org/transformations/toml";render(n,t){let o=Ke(n.metadata,t).join(`
20
+ `)}`}function F(e){let n=[];for(let t of e)t.kind==="Text"?n.push(t.text):t.kind==="ResourceLink"?n.push(Fe(t)):t.kind==="Badge"&&n.push(We(t));return n.join("")}function Fe(e){let n=he(e.target);if(!n)return e.linkLabel??"[unresolved link]";let t=S(n),r=e.linkLabel&&e.linkLabel.length>0?e.linkLabel:n.name,o=e.linkTooltip?` "${be(e.linkTooltip)}"`:"";return`[${r}](${t}${o})`}function We(e){if(!e.badgeTarget)return`*${e.badgeLabel}*`;let n=he(e.badgeTarget);if(!n)return`*${e.badgeLabel}*`;let t=S(n),r=e.badgeTooltip?` "${be(e.badgeTooltip)}"`:"";return`*[${e.badgeLabel}](${t}${r})*`}function be(e){return e==null?"":String(e).replace(/"/g,'\\"')}function he(e){if(!e||typeof e!="object")return;let n=e;if(n.subject&&n.subject.publisher&&n.subject.package_&&n.subject.name){let r={publisher:n.subject.publisher,package_:n.subject.package_,name:n.subject.name};return n.subject.version&&(r.version=n.subject.version),r}let t=e;if(typeof t.namespace=="string"&&typeof t.name=="string"&&t.name.length>0){let r=/^([^/]+)\/([^@]+)@(\d+)\.(\d+)\.(\d+)$/.exec(t.namespace);if(r)return{publisher:r[1],package_:r[2],name:t.name,version:{major:Number(r[3]),minor:Number(r[4]),patch:Number(r[5])}}}}function He(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var R=class{backendUri="kanonak.org/transformations/toml";render(n,t){let o=Ye(n.metadata,t).join(`
21
21
  `);return t?.trailingNewline&&(o.endsWith(`
22
22
  `)||(o+=`
23
- `)),o}};function Ke(e,n){if(!e)return[];let t=new Map;for(let a of e.entries)t.set(a.key,a);let r=n?.metadataKeys??e.entries.map(a=>a.key),o=[];for(let a of r){let s=t.get(a);if(!s)continue;let c=n?.metadataRenames.get(a)??a,u=pe(s.value,s.escapeHint);u!==void 0&&o.push(`${c} = ${u}`)}return o}function pe(e,n){switch(e.kind){case"StringScalar":return Me(e.stringValue,n);case"IntegerScalar":return String(e.integerValue);case"StructuredList":{let t=[];for(let r of e.items){let o=pe(r,n);o!==void 0&&t.push(o)}return`[${t.join(", ")}]`}case"StructuredMap":return;default:return}}function Me(e,n){return n&&Ne(n,m.ESC_TOML_MULTILINE)?Fe(e):Pe(e)}function Pe(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n")}"`}function Fe(e){return`"""
23
+ `)),o}};function Ye(e,n){if(!e)return[];let t=new Map;for(let a of e.entries)t.set(a.key,a);let r=n?.metadataKeys??e.entries.map(a=>a.key),o=[];for(let a of r){let s=t.get(a);if(!s)continue;let c=n?.metadataRenames.get(a)??a,u=De(s.value,s.escapeHint);u!==void 0&&o.push(`${c} = ${u}`)}return o}function De(e,n){switch(e.kind){case"StringScalar":return Xe(e.stringValue,n);case"IntegerScalar":return String(e.integerValue);case"StructuredList":{let t=[];for(let r of e.items){let o=De(r,n);o!==void 0&&t.push(o)}return`[${t.join(", ")}]`}case"StructuredMap":return;default:return}}function Xe(e,n){return n&&He(n,m.ESC_TOML_MULTILINE)?Ge(e):qe(e)}function qe(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n")}"`}function Ge(e){return`"""
24
24
  ${e.replace(/"""/g,'\\"\\"\\"')}
25
- """`}var B=class{backendUri="kanonak.org/transformations/json";render(n,t){let r=JSON.stringify(n,null,2);return t?.trailingNewline&&!r.endsWith(`
25
+ """`}var v=class{backendUri="kanonak.org/transformations/json";render(n,t){let r=JSON.stringify(n,null,2);return t?.trailingNewline&&!r.endsWith(`
26
26
  `)?r+`
27
- `:r}};function z(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var T=class{backendUri="kanonak.org/transformations/html";render(n,t){let r=Ye(n.children);if(t?.omitWrapper){let c=r.endsWith(`
27
+ `:r}};function Q(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var L=class{backendUri="kanonak.org/transformations/html";render(n,t){let r=Qe(n.children);if(t?.omitWrapper){let c=r.endsWith(`
28
28
  `)?r:`${r}
29
29
  `;return t.trailingNewline===!1&&c.endsWith(`
30
- `)?c.slice(0,-1):c}let o=We(n.metadata)??"Untitled",a=He(n.metadata,t),s=`<!DOCTYPE html>
30
+ `)?c.slice(0,-1):c}let o=Je(n.metadata)??"Untitled",a=ze(n.metadata,t),s=`<!DOCTYPE html>
31
31
  <html lang="en">
32
32
  <head>
33
33
  <meta charset="utf-8">
@@ -57,35 +57,35 @@ ${a}${r}
57
57
  </body>
58
58
  </html>
59
59
  `;return t?.trailingNewline===!1&&s.endsWith(`
60
- `)?s.slice(0,-1):s}};function We(e){if(e){for(let n of e.entries)if((n.key==="title"||n.key==="name")&&n.value.kind==="StringScalar")return n.value.stringValue}}function He(e,n){if(!e||e.entries.length===0)return"";let t=n?.metadataKeys??e.entries.map(a=>a.key),r=new Map(e.entries.map(a=>[a.key,a])),o=[];for(let a of t){let s=r.get(a);if(!s)continue;let c=n?.metadataRenames.get(a)??a,u=ge(s.value);u!==void 0&&o.push(` <dt>${y(c)}</dt>
60
+ `)?s.slice(0,-1):s}};function Je(e){if(e){for(let n of e.entries)if((n.key==="title"||n.key==="name")&&n.value.kind==="StringScalar")return n.value.stringValue}}function ze(e,n){if(!e||e.entries.length===0)return"";let t=n?.metadataKeys??e.entries.map(a=>a.key),r=new Map(e.entries.map(a=>[a.key,a])),o=[];for(let a of t){let s=r.get(a);if(!s)continue;let c=n?.metadataRenames.get(a)??a,u=we(s.value);u!==void 0&&o.push(` <dt>${y(c)}</dt>
61
61
  <dd>${u}</dd>`)}return o.length===0?"":`<dl class="metadata">
62
62
  ${o.join(`
63
63
  `)}
64
64
  </dl>
65
- `}function ge(e){switch(e.kind){case"StringScalar":return y(e.stringValue);case"IntegerScalar":return String(e.integerValue);case"StructuredList":{let n=[];for(let t of e.items){let r=ge(t);r!==void 0&&n.push(`<code>${r}</code>`)}return n.join(", ")}case"StructuredMap":return;default:return}}function Ye(e){let n=[];for(let t of e){let r=Q(t);r&&n.push(r)}return n.join(`
66
- `)}function Q(e){switch(e.kind){case"Heading":{let n=Math.max(1,Math.min(6,e.level));return`<h${n}>${R(e.inlines)}</h${n}>`}case"Paragraph":return`<p>${R(e.inlines)}</p>`;case"RawBlock":return Qe(e);case"PropertyList":return Je(e);case"Table":return Xe(e);default:return""}}function Xe(e){let n=e.tableColumnLabels??[],t=e.tableRows??[],r=n.length>0?`<thead>
65
+ `}function we(e){switch(e.kind){case"StringScalar":return y(e.stringValue);case"IntegerScalar":return String(e.integerValue);case"StructuredList":{let n=[];for(let t of e.items){let r=we(t);r!==void 0&&n.push(`<code>${r}</code>`)}return n.join(", ")}case"StructuredMap":return;default:return}}function Qe(e){let n=[];for(let t of e){let r=Z(t);r&&n.push(r)}return n.join(`
66
+ `)}function Z(e){switch(e.kind){case"Heading":{let n=Math.max(1,Math.min(6,e.level));return`<h${n}>${W(e.inlines)}</h${n}>`}case"Paragraph":return`<p>${W(e.inlines)}</p>`;case"RawBlock":return on(e);case"PropertyList":return tn(e);case"Table":return Ze(e);default:return""}}function Ze(e){let n=e.tableColumnLabels??[],t=e.tableRows??[],r=n.length>0?`<thead>
67
67
  <tr>${n.map(a=>`<th>${y(a)}</th>`).join("")}</tr>
68
68
  </thead>
69
69
  `:"",o=t.length>0?`<tbody>
70
- ${t.map(qe).join(`
70
+ ${t.map(en).join(`
71
71
  `)}
72
72
  </tbody>
73
73
  `:"";return`<table class="property-table">
74
- ${r}${o}</table>`}function qe(e){return` <tr>${(e.tableCells??[]).map(r=>`<td>${Ge(r)}</td>`).join("")}</tr>`}function Ge(e){let n=e;return!n||typeof n!="object"||!n.kind?"":n.kind==="Text"||n.kind==="ResourceLink"||n.kind==="Badge"?R([n]):Q(n)}function Je(e){if(!e.propertyEntries||e.propertyEntries.length===0)return"";let n=[];for(let t of e.propertyEntries){let o=`<dt${t.propertyTooltip?` title="${w(t.propertyTooltip)}"`:""}>${y(t.propertyKey)}</dt>`,a=`<dd>${ze(t.propertyValue)}</dd>`;n.push(o,a)}return`<dl class="property-list">
74
+ ${r}${o}</table>`}function en(e){return` <tr>${(e.tableCells??[]).map(r=>`<td>${nn(r)}</td>`).join("")}</tr>`}function nn(e){let n=e;return!n||typeof n!="object"||!n.kind?"":n.kind==="Text"||n.kind==="ResourceLink"||n.kind==="Badge"?W([n]):Z(n)}function tn(e){if(!e.propertyEntries||e.propertyEntries.length===0)return"";let n=[];for(let t of e.propertyEntries){let o=`<dt${t.propertyTooltip?` title="${j(t.propertyTooltip)}"`:""}>${y(t.propertyKey)}</dt>`,a=`<dd>${rn(t.propertyValue)}</dd>`;n.push(o,a)}return`<dl class="property-list">
75
75
  ${n.join(`
76
76
  `)}
77
- </dl>`}function ze(e){if(!e||e.length===0)return"";let n=[];for(let t of e){let r=t;!r||typeof r!="object"||!r.kind||(r.kind==="Text"||r.kind==="ResourceLink"||r.kind==="Badge"?n.push(R([r])):n.push(Q(r)))}return n.join("")}function Qe(e){let n=e.mediaType;return n&&z(n,m.TEXT_MARKDOWN)?Y(e.rawContent):n&&z(n,m.TEXT_HTML)?e.rawContent:n&&z(n,m.IMAGE_SVG_XML)?`<figure class="svg-figure">
77
+ </dl>`}function rn(e){if(!e||e.length===0)return"";let n=[];for(let t of e){let r=t;!r||typeof r!="object"||!r.kind||(r.kind==="Text"||r.kind==="ResourceLink"||r.kind==="Badge"?n.push(W([r])):n.push(Z(r)))}return n.join("")}function on(e){let n=e.mediaType;return n&&Q(n,m.TEXT_MARKDOWN)?X(e.rawContent):n&&Q(n,m.TEXT_HTML)?e.rawContent:n&&Q(n,m.IMAGE_SVG_XML)?`<figure class="svg-figure">
78
78
  ${e.rawContent}
79
- </figure>`:`<pre${n?` class="media-${w(n.name)}"`:""}><code>${y(e.rawContent)}</code></pre>`}function R(e){let n=[];for(let t of e)t.kind==="Text"?n.push(y(t.text)):t.kind==="ResourceLink"?n.push(Ze(t)):t.kind==="Badge"&&n.push(en(t));return n.join("")}function Ze(e){let n=ye(e.target);if(!n)return y(e.linkLabel??"[unresolved link]");let t=A(n),r=e.linkLabel&&e.linkLabel.length>0?e.linkLabel:n.name,o=e.linkTooltip?` title="${w(e.linkTooltip)}"`:"";return`<a class="kan-link" href="${w(t)}"${o}>${y(r)}</a>`}function en(e){let n=e.badgeTooltip?` title="${w(e.badgeTooltip)}"`:"",t=y(e.badgeLabel);if(!e.badgeTarget)return`<span class="kan-badge"${n}>${t}</span>`;let r=ye(e.badgeTarget);if(!r)return`<span class="kan-badge"${n}>${t}</span>`;let o=A(r);return`<a class="kan-badge" href="${w(o)}"${n}>${t}</a>`}function ye(e){if(!e||typeof e!="object")return;let n=e;if(n.subject&&n.subject.publisher&&n.subject.package_&&n.subject.name){let r={publisher:n.subject.publisher,package_:n.subject.package_,name:n.subject.name};return n.subject.version&&(r.version=n.subject.version),r}let t=e;if(typeof t.namespace=="string"&&typeof t.name=="string"&&t.name.length>0){let r=/^([^/]+)\/([^@]+)@(\d+)\.(\d+)\.(\d+)$/.exec(t.namespace);if(r)return{publisher:r[1],package_:r[2],name:t.name,version:{major:Number(r[3]),minor:Number(r[4]),patch:Number(r[5])}}}}function y(e){return e==null?"":String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function w(e){return e==null?"":String(e).replace(/"/g,"&quot;").replace(/&/g,"&amp;")}function nn(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var $=class{backendUri="kanonak.org/transformations/svg";render(n,t){for(let r of n.children)if(r.kind==="RawBlock"&&r.mediaType&&nn(r.mediaType,m.IMAGE_SVG_XML)){let o=r.rawContent;return t?.trailingNewline&&!o.endsWith(`
79
+ </figure>`:`<pre${n?` class="media-${j(n.name)}"`:""}><code>${y(e.rawContent)}</code></pre>`}function W(e){let n=[];for(let t of e)t.kind==="Text"?n.push(y(t.text)):t.kind==="ResourceLink"?n.push(an(t)):t.kind==="Badge"&&n.push(sn(t));return n.join("")}function an(e){let n=Se(e.target);if(!n)return y(e.linkLabel??"[unresolved link]");let t=S(n),r=e.linkLabel&&e.linkLabel.length>0?e.linkLabel:n.name,o=e.linkTooltip?` title="${j(e.linkTooltip)}"`:"";return`<a class="kan-link" href="${j(t)}"${o}>${y(r)}</a>`}function sn(e){let n=e.badgeTooltip?` title="${j(e.badgeTooltip)}"`:"",t=y(e.badgeLabel);if(!e.badgeTarget)return`<span class="kan-badge"${n}>${t}</span>`;let r=Se(e.badgeTarget);if(!r)return`<span class="kan-badge"${n}>${t}</span>`;let o=S(r);return`<a class="kan-badge" href="${j(o)}"${n}>${t}</a>`}function Se(e){if(!e||typeof e!="object")return;let n=e;if(n.subject&&n.subject.publisher&&n.subject.package_&&n.subject.name){let r={publisher:n.subject.publisher,package_:n.subject.package_,name:n.subject.name};return n.subject.version&&(r.version=n.subject.version),r}let t=e;if(typeof t.namespace=="string"&&typeof t.name=="string"&&t.name.length>0){let r=/^([^/]+)\/([^@]+)@(\d+)\.(\d+)\.(\d+)$/.exec(t.namespace);if(r)return{publisher:r[1],package_:r[2],name:t.name,version:{major:Number(r[3]),minor:Number(r[4]),patch:Number(r[5])}}}}function y(e){return e==null?"":String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function j(e){return e==null?"":String(e).replace(/"/g,"&quot;").replace(/&/g,"&amp;")}function cn(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var O=class{backendUri="kanonak.org/transformations/svg";render(n,t){for(let r of n.children)if(r.kind==="RawBlock"&&r.mediaType&&cn(r.mediaType,m.IMAGE_SVG_XML)){let o=r.rawContent;return t?.trailingNewline&&!o.endsWith(`
80
80
  `)&&(o+=`
81
- `),o}return'<svg xmlns="http://www.w3.org/2000/svg" width="1" height="1"/>'}};function tn(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var U=class{backendUri="kanonak.org/transformations/stylesheet";render(n,t){let r=[];for(let a of n.children)a.kind==="RawBlock"&&a.mediaType&&tn(a.mediaType,m.TEXT_CSS)&&r.push(a.rawContent);let o=r.join(`
81
+ `),o}return'<svg xmlns="http://www.w3.org/2000/svg" width="1" height="1"/>'}};function un(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var I=class{backendUri="kanonak.org/transformations/stylesheet";render(n,t){let r=[];for(let a of n.children)a.kind==="RawBlock"&&a.mediaType&&un(a.mediaType,m.TEXT_CSS)&&r.push(a.rawContent);let o=r.join(`
82
82
 
83
83
  `);return t?.trailingNewline&&o.length>0&&!o.endsWith(`
84
84
  `)&&(o+=`
85
- `),o}};function rn(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var x=class{backendUri="kanonak.org/transformations/yaml";render(n,t){let r=[];for(let a of n.children)a.kind==="RawBlock"&&a.mediaType&&rn(a.mediaType,m.TEXT_YAML)&&r.push(a.rawContent);let o=r.join(`
85
+ `),o}};function mn(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var _=class{backendUri="kanonak.org/transformations/yaml";render(n,t){let r=[];for(let a of n.children)a.kind==="RawBlock"&&a.mediaType&&mn(a.mediaType,m.TEXT_YAML)&&r.push(a.rawContent);let o=r.join(`
86
86
 
87
87
  `);return t?.trailingNewline&&o.length>0&&!o.endsWith(`
88
88
  `)&&(o+=`
89
- `),o}};function V(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var v=class{backendUri="kanonak.org/transformations/dynamodb-json";render(n,t){if(!n.metadata)throw new Error("dynamodb-json backend: Document has no `metadata` channel. This backend serializes Document.metadata into DynamoDB attribute-value JSON \u2014 the transformation must populate that channel. (No silent empty artifact.)");let r=ke(n.metadata,t),o=JSON.stringify(r,null,2);return t?.trailingNewline&&!o.endsWith(`
89
+ `),o}};function C(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var K=class{backendUri="kanonak.org/transformations/dynamodb-json";render(n,t){if(!n.metadata)throw new Error("dynamodb-json backend: Document has no `metadata` channel. This backend serializes Document.metadata into DynamoDB attribute-value JSON \u2014 the transformation must populate that channel. (No silent empty artifact.)");let r=Ae(n.metadata,t),o=JSON.stringify(r,null,2);return t?.trailingNewline&&!o.endsWith(`
90
90
  `)&&(o+=`
91
- `),o}};function ke(e,n){let t=new Map;for(let a of e.entries)t.set(a.key,a);let r=n?.metadataKeys??e.entries.map(a=>a.key),o={};for(let a of r){let s=t.get(a);if(!s)continue;let c=n?.metadataRenames.get(a)??a;o[c]=be(s.value,s.escapeHint)}return{M:o}}function be(e,n){switch(e.kind){case"StructuredMap":return ke(e);case"StructuredList":return{L:e.items.map(t=>be(t,void 0))};case"StringScalar":return on(e.stringValue,n??e.escapeHint);case"IntegerScalar":return an(e.integerValue,n??e.escapeHint)}}function on(e,n){if(n&&V(n,m.ESC_DYNAMODB_BOOL)){if(e==="true")return{BOOL:!0};if(e==="false")return{BOOL:!1};throw new Error(`dynamodb-json backend: a StringScalar hinted esc-dynamodb-bool must have the value "true" or "false"; got ${JSON.stringify(e)}.`)}if(n&&V(n,m.ESC_DYNAMODB_NULL))return{NULL:!0};if(n&&V(n,m.ESC_DYNAMODB_NUMBER)){if(e.trim()===""||Number.isNaN(Number(e)))throw new Error(`dynamodb-json backend: a StringScalar hinted esc-dynamodb-number must hold a numeric literal; got ${JSON.stringify(e)}.`);return{N:e}}return{S:e}}function an(e,n){if(n&&V(n,m.ESC_DYNAMODB_BOOL))throw new Error(`dynamodb-json backend: esc-dynamodb-bool cannot apply to an IntegerScalar (value ${e}). Use a StringScalar "true"/"false".`);if(n&&V(n,m.ESC_DYNAMODB_NULL))throw new Error(`dynamodb-json backend: esc-dynamodb-null cannot apply to an IntegerScalar (value ${e}). Use a StringScalar hinted esc-dynamodb-null.`);return{N:String(e)}}var sn={"markdown-with-frontmatter":{formatUri:"kanonak.org/transformations/markdown-with-frontmatter",extension:".md"},"plain-markdown":{formatUri:"kanonak.org/transformations/plain-markdown",extension:".md"},toml:{formatUri:"kanonak.org/transformations/toml",extension:".toml"},json:{formatUri:"kanonak.org/transformations/json",extension:".json"},html:{formatUri:"kanonak.org/transformations/html",extension:".html"},svg:{formatUri:"kanonak.org/transformations/svg",extension:".svg"},stylesheet:{formatUri:"kanonak.org/transformations/stylesheet",extension:".css"},yaml:{formatUri:"kanonak.org/transformations/yaml",extension:".yaml"},"dynamodb-json":{formatUri:"kanonak.org/transformations/dynamodb-json",extension:".json"}},h=class extends Error{},C=class{backends=new Map;constructor(){this.register(new j),this.register(new E),this.register(new B),this.register(new T),this.register(new $),this.register(new U),this.register(new x),this.register(new v)}register(n){this.backends.set(n.backendUri,n)}async run(n){let t=n.transformationKanonaks??n.allKanonaks,r=O(n.transformation,t);if(!r.outputs.has(n.outputFormat))throw new h(`Transformation "${r.name}" does not declare output format "${n.outputFormat}". Declared: ${Array.from(r.outputs).join(", ")}`);let o=this.findBackend(n.outputFormat);if(!o)throw new h(`No backend registered for OutputFormat "${n.outputFormat}".`);let a=new X(n.repository,n.parser,n.objectParser),s=new ce(a,n.allKanonaks,r.fragments);return r.kind==="instance"?this.runInstance(r,n,o,s):this.runSet(r,n,o,s)}async runInstance(n,t,r,o){let a=he(t.instances,n.inputPattern.requires),s=De(a,n.inputPattern.sortBy),c=[];for(let u of s){let f=new Map;f.set("input",u);let l=await o.evaluate(n.rule,f);Z(l,n.name,`input "${u.name}"`);let d=ee(await o.evaluate(n.artifactName,f),n.name,`input "${u.name}"`),g=ne(n.overrides.get(t.outputFormat),t.runtimeOverride),k=r.render(l,g);c.push({fileName:d,format:t.outputFormat,content:k,source:{kind:"instance",sourceName:u.name}})}return c}async runSet(n,t,r,o){let a=he(t.instances,n.inputPattern.requires),s=De(a,n.inputPattern.sortBy);return n.partitionBy?this.runSetWithPartition(n,s,t,r,o):this.runSetSingle(n,s,t,r,o)}async runSetSingle(n,t,r,o,a){let s=new Map;s.set("inputs",t);let c=await a.evaluate(n.rule,s);Z(c,n.name,"set");let u=ee(await a.evaluate(n.artifactName,s),n.name,"set"),f=ne(n.overrides.get(r.outputFormat),r.runtimeOverride),l=o.render(c,f);return[{fileName:u,format:r.outputFormat,content:l,source:{kind:"set",memberCount:t.length}}]}async runSetWithPartition(n,t,r,o,a){let s=n.partitionBy,c=new Map,u=[];for(let l of t){let d=mn(l,s);if(d==null)continue;let g=dn(d),k=c.get(g);k||(k={keyValue:d,keyDisplay:fn(d),members:[]},c.set(g,k),u.push(g)),k.members.push(l)}let f=[];for(let l of u){let d=c.get(l),g=new Map;g.set("inputs",d.members),g.set("key",d.keyValue);let k=await a.evaluate(n.rule,g);Z(k,n.name,`partition "${d.keyDisplay}"`);let je=ee(await a.evaluate(n.artifactName,g),n.name,`partition "${d.keyDisplay}"`),Ee=ne(n.overrides.get(r.outputFormat),r.runtimeOverride),Be=o.render(k,Ee);f.push({fileName:je,format:r.outputFormat,content:Be,source:{kind:"set",memberCount:d.members.length,partitionKey:d.keyDisplay}})}return f}findBackend(n){let t=sn[n];if(t)return this.backends.get(t.formatUri)}};function he(e,n){return n.length===0?e:e.filter(t=>{for(let r of n)if(!un(t,r))return!1;return!0})}function De(e,n){if(n.length===0)return e;let t=[...e];return t.sort((r,o)=>{for(let a of n){let s=Ae(r,a.byProperty),c=Ae(o,a.byProperty),u=cn(s,c,a.order);if(u!==0)return u}return 0}),t}function Ae(e,n){for(let t of e.statement){let r=te(t);if(!(!r||!L(r,n))){if(t instanceof M||t instanceof P||t instanceof F)return t.object;if(t instanceof H)throw new h(`Sort property "${n.name}" on instance "${e.name??"?"}" resolves to a list \u2014 list-typed properties are not sortable. Use a scalar property.`);if(t instanceof W)throw new h(`Sort property "${n.name}" on instance "${e.name??"?"}" resolves to a reference \u2014 reference-typed properties don't have a natural total order. Use a scalar property.`)}}}function cn(e,n,t){if(e===void 0&&n===void 0)return 0;if(e===void 0)return t==="ascending"?1:-1;if(n===void 0)return t==="ascending"?-1:1;let r;return typeof e=="number"&&typeof n=="number"?r=e-n:r=String(e).localeCompare(String(n)),t==="ascending"?r:-r}function un(e,n){for(let t of e.statement){let r=te(t);if(!r||!L(r,n))continue;let o=t.object;if(o!=null&&!(typeof o=="string"&&o.length===0)&&!(Array.isArray(o)&&o.length===0))return!0}return!1}function mn(e,n){for(let t of e.statement){let r=te(t);if(!(!r||!L(r,n))&&(t instanceof M||t instanceof P||t instanceof F||t instanceof W||t instanceof H))return t.object}}function te(e){return e.predicate?.subject}function dn(e){if(e===void 0)return" undef";if(e===null)return" null";if(typeof e=="string")return`s:${e}`;if(typeof e=="number")return`n:${e}`;if(typeof e=="boolean")return`b:${e}`;if(e instanceof K){let n=e.subject;return`r:${n.publisher}/${n.package_}/${n.name}`}if(e instanceof N){let n=e.name??"";return`k:${e.namespace??""}/${n}`}if(typeof e=="object"&&e!==null&&typeof e.name=="string"&&typeof e.publisher=="string"){let n=e;return`u:${n.publisher}/${n.package_}/${n.name}`}return`o:${JSON.stringify(e)}`}function fn(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):e instanceof K?e.subject.name:e instanceof N?e.name??"":typeof e=="object"&&e!==null&&typeof e.name=="string"?e.name:""}function Z(e,n,t){if(typeof e!="object"||e===null||e.kind!=="Document")throw new h(`Transformation "${n}" rule did not yield a Document for ${t}. Got: ${Se(e)}`)}function ee(e,n,t){if(typeof e=="string")return e;if(Array.isArray(e)&&e.every(ln))return e.map(r=>String(r)).join("");throw new h(`Transformation "${n}" artifactName did not yield a string for ${t}. Got: ${Se(e)}`)}function ln(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"}function Se(e){if(e===void 0)return"undefined";if(e===null)return"null";if(Array.isArray(e))return`array(${e.length})`;if(typeof e=="object"){let n=e.kind;return n?`object(kind=${n})`:"object"}return typeof e}function ne(e,n){if(!e&&!n)return;let t={metadataRenames:n?.metadataRenames??e?.metadataRenames??new Map},r=n?.metadataKeys??e?.metadataKeys;r!==void 0&&(t.metadataKeys=r);let o=n?.trailingNewline??e?.trailingNewline;o!==void 0&&(t.trailingNewline=o);let a=n?.omitWrapper??e?.omitWrapper;return a!==void 0&&(t.omitWrapper=a),t}var p=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="RenderError"}cause},we={publisher:"kanonak.org",package_:"derivation",name:"default"},re=class{constructor(n,t=new ae,r=new ie){this.repository=n;this.parser=t;this.objectParser=r}repository;parser;objectParser;runner=new C;cachedCatalog=void 0;invalidate(){this.cachedCatalog=void 0}async renderViaLook(n){let t=await this.getCatalog(),r=S(t,n.resource);if(!(r instanceof D))throw new p(`Resource not found: ${b(n.resource)}`);let o=new q(t),a;if(n.format.name==="html")a=await o.renderHtml(r);else if(n.format.name==="stylesheet")a=o.renderStylesheet(r);else throw new p(`LookRenderer does not support format ${b(n.format)} \u2014 only formats.html and formats.stylesheet are implemented in v0.1.`);return{content:a,format:n.format,filename:r.name}}async findDerivation(n){let t=await this.getCatalog(),r=S(t,n.resource);if(!(r instanceof D))return;let o=n.variant??we;return se(r,n.format,o,t)}async render(n){if(n.format.name==="html"||n.format.name==="stylesheet"){let a=await this.getCatalog(),s=S(a,n.resource);if(s instanceof D){let u=new q(a).findCascadedLook(s);if(u&&!gn(u.sourceClass)){let f=await this.findDerivation(n);if(!f||pn(f))return this.renderViaLook({resource:n.resource,format:n.format})}}}let t=await this.findDerivation(n);if(!t)throw new p(`No derivation found for ${b(n.resource)} \u2192 format ${b(n.format)}`+(n.variant?` variant ${b(n.variant)}`:""));let r=oe(t.transformation.version),o={transformation:{publisher:t.transformation.publisher,package_:t.transformation.package_,name:t.transformation.name,...r?{version:r}:{}},input:n.resource,format:n.format};return n.omitWrapper!==void 0&&(o.omitWrapper=n.omitWrapper),this.runTransformation(o)}async runTransformation(n){let t=await this.getCatalog(),r=S(t,n.transformation);if(!(r instanceof D))throw new p(`Transformation not found: ${b(n.transformation)}`);let o=S(t,n.input);if(!(o instanceof D))throw new p(`Input resource not found: ${b(n.input)}`);let a=O(r,t),s=yn(a.outputs,n.format);if(!s)throw new p(`Transformation ${b(n.transformation)} declares outputs [${[...a.outputs].join(", ")}], none of which corresponds to format ${b(n.format)}`);let c;try{c=await this.runner.run({transformation:r,instances:[o],allKanonaks:t,repository:this.repository,parser:this.parser,objectParser:this.objectParser,outputFormat:s,...n.omitWrapper!==void 0?{runtimeOverride:{metadataRenames:new Map,omitWrapper:n.omitWrapper}}:{}})}catch(u){throw new p(`Transformation execution failed: ${u.message}`,u)}if(c.length===0)throw new p("Transformation produced no artifacts");return{content:c[0].content,format:n.format,filename:c[0].fileName}}async getCatalog(){return this.cachedCatalog||(this.cachedCatalog=await this.objectParser.parseKanonaks(this.repository)),this.cachedCatalog}};function b(e){return`${e.publisher}/${e.package_}/${e.name}`}function pn(e){return typeof e.source=="string"?!1:e.source.publisher==="kanonak.org"&&e.source.package_==="core-rdf"&&e.source.name==="Resource"}function gn(e){return e.publisher==="kanonak.org"&&e.package_==="core-rdf"&&e.name==="Resource"}function yn(e,n){let t=n.name;if(e.has(t))return t;for(let r of e)if(r.startsWith(t+"-")||r===t)return r}export{U as CssBackend,we as DEFAULT_VARIANT,m as DOCAST,Ue as DOCAST_PKG,$e as DOCAST_PUB,v as DynamoDbBackend,ce as ExpressionEngineV3,Sn as ExpressionEvalErrorV3,T as HtmlBackend,B as JsonBackend,j as MarkdownFrontmatterBackend,X as ReferenceResolver,p as RenderError,sn as SUPPORTED_FORMATS_V3,$ as SvgBackend,Dn as TX_V3,bn as TX_V3_PKG,kn as TX_V3_PUB,hn as TX_V3_VERSION_MAJOR,E as TomlBackend,re as TransformationEngine,Te as TransformationLoadErrorV3,h as TransformationRunnerErrorV3,C as TransformationRunnerV3,x as YamlBackend,wn as compileExpression,O as compileTransformationV3,An as isRawStringV3,Y as renderMarkdownToHtml};
91
+ `),o}};function Ae(e,n){let t=new Map;for(let a of e.entries)t.set(a.key,a);let r=n?.metadataKeys??e.entries.map(a=>a.key),o={};for(let a of r){let s=t.get(a);if(!s)continue;let c=n?.metadataRenames.get(a)??a;o[c]=je(s.value,s.escapeHint)}return{M:o}}function je(e,n){switch(e.kind){case"StructuredMap":return Ae(e);case"StructuredList":return{L:e.items.map(t=>je(t,void 0))};case"StringScalar":return dn(e.stringValue,n??e.escapeHint);case"IntegerScalar":return fn(e.integerValue,n??e.escapeHint)}}function dn(e,n){if(n&&C(n,m.ESC_DYNAMODB_BOOL)){if(e==="true")return{BOOL:!0};if(e==="false")return{BOOL:!1};throw new Error(`dynamodb-json backend: a StringScalar hinted esc-dynamodb-bool must have the value "true" or "false"; got ${JSON.stringify(e)}.`)}if(n&&C(n,m.ESC_DYNAMODB_NULL))return{NULL:!0};if(n&&C(n,m.ESC_DYNAMODB_NUMBER)){if(e.trim()===""||Number.isNaN(Number(e)))throw new Error(`dynamodb-json backend: a StringScalar hinted esc-dynamodb-number must hold a numeric literal; got ${JSON.stringify(e)}.`);return{N:e}}return{S:e}}function fn(e,n){if(n&&C(n,m.ESC_DYNAMODB_BOOL))throw new Error(`dynamodb-json backend: esc-dynamodb-bool cannot apply to an IntegerScalar (value ${e}). Use a StringScalar "true"/"false".`);if(n&&C(n,m.ESC_DYNAMODB_NULL))throw new Error(`dynamodb-json backend: esc-dynamodb-null cannot apply to an IntegerScalar (value ${e}). Use a StringScalar hinted esc-dynamodb-null.`);return{N:String(e)}}var ln={"markdown-with-frontmatter":{formatUri:"kanonak.org/transformations/markdown-with-frontmatter",extension:".md"},"plain-markdown":{formatUri:"kanonak.org/transformations/plain-markdown",extension:".md"},toml:{formatUri:"kanonak.org/transformations/toml",extension:".toml"},json:{formatUri:"kanonak.org/transformations/json",extension:".json"},html:{formatUri:"kanonak.org/transformations/html",extension:".html"},svg:{formatUri:"kanonak.org/transformations/svg",extension:".svg"},stylesheet:{formatUri:"kanonak.org/transformations/stylesheet",extension:".css"},yaml:{formatUri:"kanonak.org/transformations/yaml",extension:".yaml"},"dynamodb-json":{formatUri:"kanonak.org/transformations/dynamodb-json",extension:".json"}},h=class extends Error{},H=class{backends=new Map;constructor(){this.register(new V),this.register(new R),this.register(new v),this.register(new L),this.register(new O),this.register(new I),this.register(new _),this.register(new K)}register(n){this.backends.set(n.backendUri,n)}async run(n){let t=n.transformationKanonaks??n.allKanonaks,r=M(n.transformation,t);if(!r.outputs.has(n.outputFormat))throw new h(`Transformation "${r.name}" does not declare output format "${n.outputFormat}". Declared: ${Array.from(r.outputs).join(", ")}`);let o=this.findBackend(n.outputFormat);if(!o)throw new h(`No backend registered for OutputFormat "${n.outputFormat}".`);let a=new q(n.repository,n.parser,n.objectParser),s=new pe(a,n.allKanonaks,r.fragments);return r.kind==="instance"?this.runInstance(r,n,o,s):this.runSet(r,n,o,s)}async runInstance(n,t,r,o){let a=Ee(t.instances,n.inputPattern.requires),s=$e(a,n.inputPattern.sortBy),c=[];for(let u of s){let f=new Map;f.set("input",u);let l=await o.evaluate(n.rule,f);ee(l,n.name,`input "${u.name}"`);let d=ne(await o.evaluate(n.artifactName,f),n.name,`input "${u.name}"`),g=te(n.overrides.get(t.outputFormat),t.runtimeOverride),k=r.render(l,g);c.push({fileName:d,format:t.outputFormat,content:k,source:{kind:"instance",sourceName:u.name}})}return c}async runSet(n,t,r,o){let a=Ee(t.instances,n.inputPattern.requires),s=$e(a,n.inputPattern.sortBy);return n.partitionBy?this.runSetWithPartition(n,s,t,r,o):this.runSetSingle(n,s,t,r,o)}async runSetSingle(n,t,r,o,a){let s=new Map;s.set("inputs",t);let c=await a.evaluate(n.rule,s);ee(c,n.name,"set");let u=ne(await a.evaluate(n.artifactName,s),n.name,"set"),f=te(n.overrides.get(r.outputFormat),r.runtimeOverride),l=o.render(c,f);return[{fileName:u,format:r.outputFormat,content:l,source:{kind:"set",memberCount:t.length}}]}async runSetWithPartition(n,t,r,o,a){let s=n.partitionBy,c=new Map,u=[];for(let l of t){let d=yn(l,s);if(d==null)continue;let g=kn(d),k=c.get(g);k||(k={keyValue:d,keyDisplay:bn(d),members:[]},c.set(g,k),u.push(g)),k.members.push(l)}let f=[];for(let l of u){let d=c.get(l),g=new Map;g.set("inputs",d.members),g.set("key",d.keyValue);let k=await a.evaluate(n.rule,g);ee(k,n.name,`partition "${d.keyDisplay}"`);let Ue=ne(await a.evaluate(n.artifactName,g),n.name,`partition "${d.keyDisplay}"`),Ve=te(n.overrides.get(r.outputFormat),r.runtimeOverride),Re=o.render(k,Ve);f.push({fileName:Ue,format:r.outputFormat,content:Re,source:{kind:"set",memberCount:d.members.length,partitionKey:d.keyDisplay}})}return f}findBackend(n){let t=ln[n];if(t)return this.backends.get(t.formatUri)}};function Ee(e,n){return n.length===0?e:e.filter(t=>{for(let r of n)if(!gn(t,r))return!1;return!0})}function $e(e,n){if(n.length===0)return e;let t=[...e];return t.sort((r,o)=>{for(let a of n){let s=Te(r,a.byProperty),c=Te(o,a.byProperty),u=pn(s,c,a.order);if(u!==0)return u}return 0}),t}function Te(e,n){for(let t of e.statement){let r=re(t);if(!(!r||!N(r,n))){if(t instanceof $||t instanceof T||t instanceof B)return t.object;if(t instanceof x)throw new h(`Sort property "${n.name}" on instance "${e.name??"?"}" resolves to a list \u2014 list-typed properties are not sortable. Use a scalar property.`);if(t instanceof w)throw new h(`Sort property "${n.name}" on instance "${e.name??"?"}" resolves to a reference \u2014 reference-typed properties don't have a natural total order. Use a scalar property.`)}}}function pn(e,n,t){if(e===void 0&&n===void 0)return 0;if(e===void 0)return t==="ascending"?1:-1;if(n===void 0)return t==="ascending"?-1:1;let r;return typeof e=="number"&&typeof n=="number"?r=e-n:r=String(e).localeCompare(String(n)),t==="ascending"?r:-r}function gn(e,n){for(let t of e.statement){let r=re(t);if(!r||!N(r,n))continue;let o=t.object;if(o!=null&&!(typeof o=="string"&&o.length===0)&&!(Array.isArray(o)&&o.length===0))return!0}return!1}function yn(e,n){for(let t of e.statement){let r=re(t);if(!(!r||!N(r,n))&&(t instanceof $||t instanceof T||t instanceof B||t instanceof w||t instanceof x))return t.object}}function re(e){return e.predicate?.subject}function kn(e){if(e===void 0)return" undef";if(e===null)return" null";if(typeof e=="string")return`s:${e}`;if(typeof e=="number")return`n:${e}`;if(typeof e=="boolean")return`b:${e}`;if(e instanceof E){let n=e.subject;return`r:${n.publisher}/${n.package_}/${n.name}`}if(e instanceof Y){let n=e.name??"";return`k:${e.namespace??""}/${n}`}if(typeof e=="object"&&e!==null&&typeof e.name=="string"&&typeof e.publisher=="string"){let n=e;return`u:${n.publisher}/${n.package_}/${n.name}`}return`o:${JSON.stringify(e)}`}function bn(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):e instanceof E?e.subject.name:e instanceof Y?e.name??"":typeof e=="object"&&e!==null&&typeof e.name=="string"?e.name:""}function ee(e,n,t){if(typeof e!="object"||e===null||e.kind!=="Document")throw new h(`Transformation "${n}" rule did not yield a Document for ${t}. Got: ${Be(e)}`)}function ne(e,n,t){if(typeof e=="string")return e;if(Array.isArray(e)&&e.every(hn))return e.map(r=>String(r)).join("");throw new h(`Transformation "${n}" artifactName did not yield a string for ${t}. Got: ${Be(e)}`)}function hn(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"}function Be(e){if(e===void 0)return"undefined";if(e===null)return"null";if(Array.isArray(e))return`array(${e.length})`;if(typeof e=="object"){let n=e.kind;return n?`object(kind=${n})`:"object"}return typeof e}function te(e,n){if(!e&&!n)return;let t={metadataRenames:n?.metadataRenames??e?.metadataRenames??new Map},r=n?.metadataKeys??e?.metadataKeys;r!==void 0&&(t.metadataKeys=r);let o=n?.trailingNewline??e?.trailingNewline;o!==void 0&&(t.trailingNewline=o);let a=n?.omitWrapper??e?.omitWrapper;return a!==void 0&&(t.omitWrapper=a),t}var p=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="RenderError"}cause},xe={publisher:"kanonak.org",package_:"derivation",name:"default"},oe=class{constructor(n,t=new se,r=new fe){this.repository=n;this.parser=t;this.objectParser=r}repository;parser;objectParser;runner=new H;cachedCatalog=void 0;invalidate(){this.cachedCatalog=void 0}async renderViaLook(n){let t=await this.getCatalog(),r=A(t,n.resource);if(!(r instanceof D))throw new p(`Resource not found: ${b(n.resource)}`);let o=new G(t),a;if(n.format.name==="html")a=await o.renderHtml(r);else if(n.format.name==="stylesheet")a=o.renderStylesheet(r);else throw new p(`LookRenderer does not support format ${b(n.format)} \u2014 only formats.html and formats.stylesheet are implemented in v0.1.`);return{content:a,format:n.format,filename:r.name}}async findDerivation(n){let t=await this.getCatalog(),r=A(t,n.resource);if(!(r instanceof D))return;let o=n.variant??xe;return le(r,n.format,o,t)}async render(n){if(n.format.name==="html"||n.format.name==="stylesheet"){let a=await this.getCatalog(),s=A(a,n.resource);if(s instanceof D){let u=new G(a).findCascadedLook(s);if(u&&!wn(u.sourceClass)){let f=await this.findDerivation(n);if(!f||Dn(f))return this.renderViaLook({resource:n.resource,format:n.format})}}}let t=await this.findDerivation(n);if(!t)throw new p(`No derivation found for ${b(n.resource)} \u2192 format ${b(n.format)}`+(n.variant?` variant ${b(n.variant)}`:""));let r=ie(t.transformation.version),o={transformation:{publisher:t.transformation.publisher,package_:t.transformation.package_,name:t.transformation.name,...r?{version:r}:{}},input:n.resource,format:n.format};return n.omitWrapper!==void 0&&(o.omitWrapper=n.omitWrapper),this.runTransformation(o)}async runTransformation(n){let t=await this.getCatalog(),r=A(t,n.transformation);if(!(r instanceof D))throw new p(`Transformation not found: ${b(n.transformation)}`);let o=A(t,n.input);if(!(o instanceof D))throw new p(`Input resource not found: ${b(n.input)}`);let a=M(r,t),s=Sn(a.outputs,n.format);if(!s)throw new p(`Transformation ${b(n.transformation)} declares outputs [${[...a.outputs].join(", ")}], none of which corresponds to format ${b(n.format)}`);let c;try{c=await this.runner.run({transformation:r,instances:[o],allKanonaks:t,repository:this.repository,parser:this.parser,objectParser:this.objectParser,outputFormat:s,...n.omitWrapper!==void 0?{runtimeOverride:{metadataRenames:new Map,omitWrapper:n.omitWrapper}}:{}})}catch(u){throw new p(`Transformation execution failed: ${u.message}`,u)}if(c.length===0)throw new p("Transformation produced no artifacts");return{content:c[0].content,format:n.format,filename:c[0].fileName}}async getCatalog(){return this.cachedCatalog||(this.cachedCatalog=await this.objectParser.parseKanonaks(this.repository)),this.cachedCatalog}};function b(e){return`${e.publisher}/${e.package_}/${e.name}`}function Dn(e){return typeof e.source=="string"?!1:e.source.publisher==="kanonak.org"&&e.source.package_==="core-rdf"&&e.source.name==="Resource"}function wn(e){return e.publisher==="kanonak.org"&&e.package_==="core-rdf"&&e.name==="Resource"}function Sn(e,n){let t=n.name;if(e.has(t))return t;for(let r of e)if(r.startsWith(t+"-")||r===t)return r}var An="kanonak.org/core-rdf/type";function ae(e){let n=En(e),t,r={type:""};for(let o of e.statement){let a=o.predicate?.subject;if(!a)throw new Error(`Expression node ${n} has a statement with no resolved predicate`);if(U(a)===An){if(!(o instanceof w))throw new Error(`Expression node ${n} has a non-reference 'type' statement`);if(t!==void 0)throw new Error(`Expression node ${n} declares more than one type \u2014 a runtime tree node is exactly one operator/literal/leaf class`);t=U(o.object.subject);continue}let s=a.name;if(s in r)throw new Error(`Expression node ${n} declares operand '${s}' more than once`);r[s]=jn(o,n,s)}if(t===void 0)throw new Error(`Expression node ${n} declares no type \u2014 the runtime dispatches on it`);return r.type=t,r}function jn(e,n,t){if(e instanceof $||e instanceof de||e instanceof T||e instanceof B)return e.object;if(e instanceof w)return U(e.object.subject);if(e instanceof me)return ae(e.object);if(e instanceof x)return(e.object??[]).map((r,o)=>{if(r instanceof E)return U(r.subject);if(r instanceof ce)return ae(r);if(r instanceof ue)return r.value;throw new Error(`Expression node ${n}: '${t}'[${o}] is not a serializable list item`)});throw new Error(`Expression node ${n}: operand '${t}' has an unserializable statement kind`)}function En(e){let n=e;return n.name?`'${n.name}'`:"(embedded)"}export{I as CssBackend,xe as DEFAULT_VARIANT,m as DOCAST,Oe as DOCAST_PKG,Le as DOCAST_PUB,K as DynamoDbBackend,pe as ExpressionEngineV3,Vn as ExpressionEvalErrorV3,L as HtmlBackend,v as JsonBackend,V as MarkdownFrontmatterBackend,q as ReferenceResolver,p as RenderError,ln as SUPPORTED_FORMATS_V3,O as SvgBackend,xn as TX_V3,Tn as TX_V3_PKG,$n as TX_V3_PUB,Bn as TX_V3_VERSION_MAJOR,R as TomlBackend,oe as TransformationEngine,ve as TransformationLoadErrorV3,h as TransformationRunnerErrorV3,H as TransformationRunnerV3,_ as YamlBackend,Rn as compileExpression,M as compileTransformationV3,Un as isRawStringV3,X as renderMarkdownToHtml,ae as toExpressionRuntimeTree};
@@ -1 +1 @@
1
- import{a as n}from"../chunk-6U26UASC.js";import{m as a,n as b,o as c,p as d,q as e,r as f,s as g,t as h,u as i,v as j,w as k,x as l,y as m}from"../chunk-7BHDZHJY.js";import"../chunk-FUUTGGJS.js";import"../chunk-2ACBWC7K.js";export{n as SingleDocumentRepository,g as findAllResourcesByCanonicalUri,f as findSubjectByUri,e as findSubjectsByType,i as getDatatypeValue,l as getEmbeddedValue,m as getListValues,k as getReferenceUri,j as getStringValue,h as hasProperty,d as hasType,c as toCanonicalUrl,a as uriKey,b as uriMatches};
1
+ import{m as a,n as b,o as c,p as d,q as e,r as f,s as g,t as h,u as i,v as j,w as k,x as l,y as m,z as n}from"../chunk-YW6P24RF.js";import"../chunk-FUUTGGJS.js";import"../chunk-2ACBWC7K.js";export{n as SingleDocumentRepository,g as findAllResourcesByCanonicalUri,f as findSubjectByUri,e as findSubjectsByType,i as getDatatypeValue,l as getEmbeddedValue,m as getListValues,k as getReferenceUri,j as getStringValue,h as hasProperty,d as hasType,c as toCanonicalUrl,a as uriKey,b as uriMatches};
@@ -2,7 +2,6 @@ import type { IKanonakDocumentRepository } from '@kanonak-protocol/types/documen
2
2
  import type { KanonakDocument, Import, DocumentReference } from '@kanonak-protocol/types/document/models/types';
3
3
  import type { ValidationCache } from './ValidationCache.js';
4
4
  import type { Kanonak } from '../kanonaks/Kanonak.js';
5
- import { DefinedKanonak } from '../kanonaks/DefinedKanonak.js';
6
5
  /**
7
6
  * Shared object-model substrate for repository validation rules (#65).
8
7
  *
@@ -47,20 +46,8 @@ export declare function getDocumentKanonaks(document: KanonakDocument, repositor
47
46
  * {@link getCatalogKanonaks}.
48
47
  */
49
48
  export declare function getAuthoredKanonaks(document: KanonakDocument, repository: IKanonakDocumentRepository, cache?: ValidationCache): Promise<Kanonak[]>;
50
- /** A DefinedKanonak visited during a walk, with a human-facing locator path. */
51
- export interface WalkNode {
52
- readonly kanonak: DefinedKanonak;
53
- /** `subjectName` for a subject, `subjectName/childName/...` for embeddeds. */
54
- readonly path: string;
55
- }
56
- /**
57
- * Depth-first visit of every DefinedKanonak reachable from `roots`: each
58
- * subject, then every embedded kanonak nested in its statements (single
59
- * embeddeds and embedded list items), at any depth. The visitor sees one node
60
- * at a time and should inspect only that node's OWN statements — the walk
61
- * handles the recursion.
62
- */
63
- export declare function walkDefinedKanonaks(roots: Kanonak[], visit: (node: WalkNode) => void): void;
49
+ export { walkDefinedKanonaks } from '../kanonaks/walkDefinedKanonaks.js';
50
+ export type { WalkNode } from '../kanonaks/walkDefinedKanonaks.js';
64
51
  /** `publisher/package@major.minor.patch` — matches `SubjectKanonak.namespace`
65
52
  * and the parser's `sourceDoc`. Undefined for a document without a namespace. */
66
53
  export declare function namespaceOf(document: KanonakDocument): string | undefined;
@@ -1 +1 @@
1
- import{A,B,C,D,E,F,G,J as H,K as I,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}from"../chunk-7K5TAJ44.js";import"../chunk-ITKOKDBG.js";import"../chunk-MX3DEXMV.js";import"../chunk-NJ3AZYQD.js";import"../chunk-ZP6P7HNU.js";import"../chunk-6U26UASC.js";import"../chunk-GZPLWII7.js";import"../chunk-7BHDZHJY.js";import"../chunk-FUUTGGJS.js";import"../chunk-2ACBWC7K.js";export{u as AmbiguousReferenceRule,A as ClassDefinitionRule,n as ClassHierarchyCycleRule,H as DiamondNameClashRule,C as DisplayLensScopeRule,k as EmbeddedKanonakTypeRule,l as ImportExistenceRule,I as KanonakObjectValidator,D as LookSemanticSvgPathRule,B as MarkdownLinkRule,s as NamespaceImportCycleRule,f as NamespacePrefixRule,w as ObjectPropertyValueValidationRule,c as OntologyValidationError,a as OntologyValidationResult,G as OwlOneOfRule,j as PackageHeaderRule,x as PropertyDomainRule,o as PropertyHierarchyCycleRule,y as PropertyKindRangeConsistencyRule,v as PropertyRangeReferenceRule,p as PropertyRangeRequiredRule,h as PropertyTypeSpecificityRule,z as ReservedNameShadowRule,g as ResourceNamingRule,F as ShaclShapeRule,q as SubClassOfReferenceRule,r as SubPropertyOfReferenceRule,i as SubjectKanonakTypeRequiredRule,E as TxExpressionPathRule,t as UnresolvedPredicateRule,m as UnresolvedReferenceRule,e as ValidationCache,d as ValidationContext,b as ValidationSeverity};
1
+ import{A,B,C,D,E,F,G,J as H,K as I,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}from"../chunk-Q6XQ5IXW.js";import"../chunk-ITKOKDBG.js";import"../chunk-V6KIDED2.js";import"../chunk-NJ3AZYQD.js";import"../chunk-SVUMCLK5.js";import"../chunk-YW6P24RF.js";import"../chunk-FUUTGGJS.js";import"../chunk-2ACBWC7K.js";export{u as AmbiguousReferenceRule,A as ClassDefinitionRule,n as ClassHierarchyCycleRule,H as DiamondNameClashRule,C as DisplayLensScopeRule,k as EmbeddedKanonakTypeRule,l as ImportExistenceRule,I as KanonakObjectValidator,D as LookSemanticSvgPathRule,B as MarkdownLinkRule,s as NamespaceImportCycleRule,f as NamespacePrefixRule,w as ObjectPropertyValueValidationRule,c as OntologyValidationError,a as OntologyValidationResult,G as OwlOneOfRule,j as PackageHeaderRule,x as PropertyDomainRule,o as PropertyHierarchyCycleRule,y as PropertyKindRangeConsistencyRule,v as PropertyRangeReferenceRule,p as PropertyRangeRequiredRule,h as PropertyTypeSpecificityRule,z as ReservedNameShadowRule,g as ResourceNamingRule,F as ShaclShapeRule,q as SubClassOfReferenceRule,r as SubPropertyOfReferenceRule,i as SubjectKanonakTypeRequiredRule,E as TxExpressionPathRule,t as UnresolvedPredicateRule,m as UnresolvedReferenceRule,e as ValidationCache,d as ValidationContext,b as ValidationSeverity};
@@ -11,6 +11,10 @@ import type { ValidationCache } from '../../ValidationCache.js';
11
11
  * literal `'range'` dict key and falsely reported "must have a range" for a
12
12
  * property authored with `rdfs.range:` (#65 Gap B). Whether the declared range
13
13
  * actually RESOLVES is `PropertyRangeReferenceRule`'s concern.
14
+ *
15
+ * The Object/Datatype test is subsumption over the declared type, so a
16
+ * property declared with an OWL characteristic owes a range exactly like the
17
+ * `owl.ObjectProperty` it descends from.
14
18
  */
15
19
  export declare class PropertyRangeRequiredRule implements IRepositoryValidationRule {
16
20
  readonly ruleName = "PropertyRangeRequired";
@@ -7,8 +7,10 @@ import type { ValidationCache } from '../../ValidationCache.js';
7
7
  * Every `subPropertyOf` target must resolve to a defined or imported property.
8
8
  * Reads the resolved object model: the target is a `ReferenceKanonak` resolved
9
9
  * through the import closure (alias-agnostic), and its existence + property-ness
10
- * are checked by `findSubjectByUri` + `ResourceTypeClassifier`, never by a
11
- * hardcoded built-in-name list or `split('.')` alias extraction.
10
+ * are checked by `findSubjectByUri` + `isPropertySubject`, never by a
11
+ * hardcoded built-in-name list or `split('.')` alias extraction. Property-ness
12
+ * is decided by subsumption, so an OWL characteristic
13
+ * (`type: owl.TransitiveProperty`) is a property on both sides of the edge.
12
14
  */
13
15
  export declare class SubPropertyOfReferenceRule implements IRepositoryValidationRule {
14
16
  readonly ruleName = "SubPropertyOfReference";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kanonak-protocol/sdk",
3
- "version": "5.13.0",
3
+ "version": "5.15.0",
4
4
  "description": "TypeScript SDK for the Kanonak Protocol — parse, resolve, validate, reason over, and render .kan.yml packages.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -126,7 +126,7 @@
126
126
  ],
127
127
  "dependencies": {
128
128
  "@kanonak-protocol/canonical": "^0.1.3",
129
- "@kanonak-protocol/types": "^5.13.0",
129
+ "@kanonak-protocol/types": "^5.15.0",
130
130
  "ignore": "^7.0.5",
131
131
  "js-yaml": "^4.1.0",
132
132
  "yaml": "^2.7.0"
@@ -1,2 +0,0 @@
1
- import{e as F}from"./chunk-UXYCUGSF.js";import{H as ye,I as me}from"./chunk-7K5TAJ44.js";import{a as ne,b as I,c as pe,h as B,l as x}from"./chunk-MX3DEXMV.js";import{a as b,d as K,e as fe,f as ge}from"./chunk-ZP6P7HNU.js";import{i as de}from"./chunk-GZPLWII7.js";import{b as ee,c as A,d as E,f as re,g as oe,h as se,i as ae,j as ie,k as ce,l as L,m as N,r as G,t as le,v as $,w as ue,y as V}from"./chunk-7BHDZHJY.js";import{a as te}from"./chunk-FUUTGGJS.js";import{d as Z}from"./chunk-2ACBWC7K.js";var be=(a=>(a.Class="Class",a.DatatypeProperty="DatatypeProperty",a.ObjectProperty="ObjectProperty",a.AnnotationProperty="AnnotationProperty",a.Instance="Instance",a.Datatype="Datatype",a.Unknown="Unknown",a))(be||{}),Ce=(i=>(i.InstanceOf="instanceOf",i.SubClassOf="subClassOf",i.Domain="domain",i.Range="range",i.ObjectRelationship="objectRelationship",i.SubPropertyOf="subPropertyOf",i.PropertyValue="propertyValue",i.EmbeddedLink="embeddedLink",i))(Ce||{}),z=class{static async buildFromRepository(n,t){let s=await new x().parseKanonaks(n),o=await n.getAllDocumentsAsync(),c=[],a=[],i=new Set,d=new Set,f=new Map;for(let y of s){let l=y;l.name&&(b.isClassType(l)&&i.add(l.name),(b.isObjectPropertyType(l)||b.isGenericPropertyType(l))&&d.add(l.name))}for(let y of o)for(let[l,u]of Object.entries(y.body))d.has(l)&&u?.range&&typeof u.range=="string"&&f.set(l,u.range);let p=new Map;for(let y of s){let l=y;l.name&&p.set(l.name,l)}for(let y of o){let l=y.metadata.namespace_,u=l?`${l.publisher}/${l.package_}`:"",m=l?.version?`${l.version.major}.${l.version.minor}.${l.version.patch}`:"",C=he(y);for(let[h,g]of Object.entries(y.body)){if(!g||typeof g!="object")continue;let O=p.get(h),k="Unknown";if(O){let v=O;b.isClassType(v)?k="Class":b.isObjectPropertyType(v)?k="ObjectProperty":b.isDatatypePropertyType(v)?k="DatatypeProperty":b.isAnnotationPropertyType(v)?k="AnnotationProperty":b.isDatatypeType(v)?k="Datatype":b.isGenericPropertyType(v)?k="ObjectProperty":b.isInstanceOfKnownClass(v,i)&&(k="Instance")}let S=u&&m?`${u}/${h}@${m}`:h,Q={};for(let[v,U]of Object.entries(g))v!=="type"&&(typeof U!="object"||U===null)&&(Q[v]=U);c.push({id:S,label:g.label??h,type:k,namespace:u,properties:Q}),ke(S,g,k,i,d,a,u,m,C,t),H(S,g,d,f,c,a,u,m,C),Ue(S,O,a)}}return{nodes:c,edges:a}}static buildFromDocument(n,t){let r=[],s=[],o=n.metadata.namespace_,c=o?.version?`${o.version.major}.${o.version.minor}.${o.version.patch}`:"",a=o?`${o.publisher}/${o.package_}`:"",i=new Set,d=new Set,f=new Map,p=he(n);for(let[u,m]of Object.entries(n.body)){let C=m?.type;C&&(Ke(C,p)&&i.add(u),De(C,p)&&(d.add(u),m.range&&typeof m.range=="string"&&f.set(u,m.range)))}for(let[u,m]of Object.entries(n.body)){if(!m||typeof m!="object")continue;let C=m.type,h=Me(C,u,i,p),g=a&&c?`${a}/${u}@${c}`:u,O={};for(let[k,S]of Object.entries(m))k!=="type"&&(typeof S!="object"||S===null)&&(O[k]=S);r.push({id:g,label:m.label??u,type:h,namespace:a,properties:O}),ke(g,m,h,i,d,s,a,c,p,t),H(g,m,d,f,r,s,a,c,p)}let y=new Set(r.map(u=>u.id)),l=s.filter(u=>y.has(u.source)&&y.has(u.target));return{nodes:r,edges:l}}};function he(e,n){let t=new Map;if(e.metadata?.imports)for(let[r,s]of Object.entries(e.metadata.imports))for(let o of s){let c=o.alias??o.packageName,a=o.version,i=`${a.major}.${a.minor}.${a.patch}`;t.set(c,{publisher:r,package_:o.packageName,version:i})}return t}var Se={"kanonak.org/core-rdf/Class":"Class","kanonak.org/core-owl/Class":"Class","kanonak.org/core-rdfs/Class":"Class","kanonak.org/core-owl/ObjectProperty":"ObjectProperty","kanonak.org/core-owl/DatatypeProperty":"DatatypeProperty","kanonak.org/core-owl/AnnotationProperty":"AnnotationProperty","kanonak.org/core-rdf/Property":"ObjectProperty","kanonak.org/core-rdfs/Datatype":"Datatype"},xe=new Set(["kanonak.org/core-owl/ObjectProperty","kanonak.org/core-owl/DatatypeProperty","kanonak.org/core-owl/AnnotationProperty","kanonak.org/core-rdf/Property"]);function q(e,n){if(e.includes(".")){let t=e.indexOf("."),r=e.substring(0,t),s=e.substring(t+1),o=n.get(r);if(o)return`${o.publisher}/${o.package_}/${s}`}return null}function Ke(e,n){let t=q(e,n);return t?Se[t]==="Class":!1}function De(e,n){let t=q(e,n);return t?xe.has(t):!1}function Me(e,n,t,r){if(!e||e==="Package")return"Unknown";let s=q(e,r);if(s){let c=Se[s];if(c)return c;let a=s.split("/").pop()?.split("@")[0]??"";return t.has(a)?"Instance":"Unknown"}let o=e.split(".").pop()??e;return t.has(o)?"Instance":"Unknown"}var Oe=new Set(["type","label","comment","version","publisher","imports","license","match","alias","package"]);function ke(e,n,t,r,s,o,c,a,i,d){let f=n.type,p=n.subClassOf;if(p){let h=Array.isArray(p)?p:[p];for(let g of h)typeof g=="string"&&o.push({source:e,target:w(g,c,a,i),type:"subClassOf",label:"subClassOf"})}let y=n.subPropertyOf;if(y){let h=Array.isArray(y)?y:[y];for(let g of h)typeof g=="string"&&o.push({source:e,target:w(g,c,a,i),type:"subPropertyOf",label:"subPropertyOf"})}let l=n.domain,u=n.range;if(d?.includePropertyEdges){let h=[[l,"domain","domain"],[u,"range","range"]];for(let[g,O,k]of h)if(g!=null)for(let S of Array.isArray(g)?g:[g])typeof S=="string"&&o.push({source:e,target:w(S,c,a,i),type:O,label:k})}if(t==="Instance"&&f){let h=f.split(".").pop()??f;o.push({source:e,target:w(h,c,a,i),type:"instanceOf",label:"type"})}if(t==="Instance")for(let[h,g]of Object.entries(n)){if(Oe.has(h)||!s.has(h))continue;let O=Array.isArray(g)?g:[g];for(let k of O)typeof k=="string"&&Fe(k)&&o.push({source:e,target:w(k,c,a,i),type:"propertyValue",label:h,propertyId:w(h,c,a,i)})}if((t==="ObjectProperty"||t==="DatatypeProperty"||l&&u)&&l&&u){let h=typeof l=="string"?l:null,g=typeof u=="string"?u:null;h&&g&&o.push({source:w(h,c,a,i),target:w(g,c,a,i),type:"objectRelationship",label:n.label??e.split("/").pop()??"",propertyId:e})}}function H(e,n,t,r,s,o,c,a,i){for(let[d,f]of Object.entries(n)){if(Oe.has(d)||typeof f!="object"||f===null||Array.isArray(f))continue;let p=f,y=`${e}/${d}`,l=r.get(d),u=l?l.split(".").pop()??l:"Unknown",m={};for(let[h,g]of Object.entries(p))(typeof g!="object"||g===null)&&(m[h]=g);s.push({id:y,label:`${u} (embedded)`,type:"Instance",namespace:c,properties:m});let C=c&&a?`${c}/${d}@${a}`:d;o.push({source:e,target:y,type:"propertyValue",label:d,propertyId:t.has(d)?C:void 0}),l&&o.push({source:y,target:w(u,c,a,i),type:"instanceOf",label:"type (inferred)"}),H(y,p,t,r,s,o,c,a,i)}}function Ue(e,n,t){let r=n?.statement;if(Array.isArray(r))for(let s of r){if(!(s instanceof pe))continue;let o=s.predicate?.subject?.name??"";for(let c of s.links){let a=c.target?.subject;if(!a)continue;let i=a.version,d=i&&typeof i.major=="number"?`@${i.major}.${i.minor}.${i.patch}`:"";t.push({source:e,target:`${a.publisher}/${a.package_}/${a.name}${d}`,type:"embeddedLink",label:o})}}}function Fe(e){return!(!e||e.includes(" ")||e.includes(`
2
- `)||e.startsWith("http://")||e.startsWith("https://")||/^\d{4}-\d{2}/.test(e)||/^\d+(\.\d+)?$/.test(e))}function w(e,n,t,r){if(e.includes("@")&&e.includes("/"))return e;if(e.includes(".")){let s=e.indexOf("."),o=e.substring(0,s),c=e.substring(s+1);if(r){let a=r.get(o);if(a)return`${a.publisher}/${a.package_}/${c}@${a.version}`}return n&&t?`${n}/${c}@${t}`:c}return n&&t?`${n}/${e}@${t}`:e}function R(e){let n=e.replace(/^https?:\/\//,"").replace(/^git:\/\//,"").replace(/\/+$/,"").trim();if(!n)throw new Error("Publisher host cannot be empty");return n}var Le="key_thumbprint",_=class{cache=new Map;prCache=new Map;async discoverProtectedResource(n){let t=R(n);if(this.prCache.has(t))return this.prCache.get(t);let r=`https://${t}/.well-known/oauth-protected-resource`,s=await Ge(r),o=s&&Array.isArray(s.authorization_servers)?s.authorization_servers.filter(a=>typeof a=="string"):[],c=o.length>0?o:null;return this.prCache.set(t,c),c}async discover(n){let t=R(n);if(this.cache.has(t))return this.cache.get(t);let r=`https://${t}/.well-known/oauth-authorization-server`,s=await this.tryEndpoint(r);if(!s){let o=`https://${t}/.well-known/openid-configuration`;s=await this.tryEndpoint(o)}return this.cache.set(t,s),s}async supportsOAuth(n){return await this.discover(n)!==null}static supportsPkceS256(n){return n.codeChallengeMethodsSupported?.some(t=>t.toUpperCase()==="S256")??!1}static supportsDynamicRegistration(n){return!!n.registrationEndpoint}static supportsAuthorizationCode(n){return n.responseTypesSupported?.some(t=>t.toLowerCase()==="code")??!1}static supportsEnrollment(n){return!!n.enrollmentEndpoint}static supportsSession(n){return!!n.sessionEndpoint}async tryEndpoint(n){let t;try{t=await fetch(n)}catch(s){let o=s instanceof Error?s.message:String(s);return o.includes("ENOTFOUND")||o.includes("ECONNREFUSED")?(console.error(` OAuth discovery: ${n} \u2014 host unreachable (${o})`),console.error(" If the server is behind a VPN, ensure you are connected.")):o.includes("CERT")||o.includes("SSL")||o.includes("TLS")?(console.error(` OAuth discovery: ${n} \u2014 TLS error (${o})`),console.error(" If using a custom CA certificate, set NODE_EXTRA_CA_CERTS=/path/to/ca.pem")):console.error(` OAuth discovery: ${n} \u2014 network error: ${o}`),null}if(!t.ok)return t.status===404||(t.status===403?(console.error(` OAuth discovery: ${n} \u2014 HTTP 403 Forbidden`),console.error(" Access may be blocked by a firewall, proxy, or WAF.")):t.status>=500&&(console.error(` OAuth discovery: ${n} \u2014 HTTP ${t.status} server error`),console.error(" The authorization server returned an internal error. Contact your IDP administrator."))),null;let r;try{r=await t.json()}catch{return console.error(` OAuth discovery: ${n} \u2014 response is not valid JSON`),console.error(" The endpoint may be returning HTML instead of JSON. Check IDP configuration."),null}return{issuer:P(r.issuer),authorizationEndpoint:P(r.authorization_endpoint),tokenEndpoint:P(r.token_endpoint),registrationEndpoint:P(r.registration_endpoint),revocationEndpoint:P(r.revocation_endpoint),scopesSupported:T(r.scopes_supported),responseTypesSupported:T(r.response_types_supported),grantTypesSupported:T(r.grant_types_supported),codeChallengeMethodsSupported:T(r.code_challenge_methods_supported),tokenEndpointAuthMethodsSupported:T(r.token_endpoint_auth_methods_supported),dpopSigningAlgValuesSupported:T(r.dpop_signing_alg_values_supported),enrollmentEndpoint:P(r.enrollment_endpoint),enrollmentIssuanceProtocols:T(r.enrollment_issuance_protocols),enrollmentKeyTypes:T(r.enrollment_key_types),enrollmentScopesSupported:T(r.enrollment_scopes_supported),enrollmentConsentBindingParam:P(r.enrollment_consent_binding_param),sessionEndpoint:P(r.session_endpoint),sessionEndpointAuthMethod:P(r.session_endpoint_auth_method)}}};async function Ge(e){try{let n=await fetch(e);return n.ok?await n.json():null}catch{return null}}function P(e){return typeof e=="string"?e:null}function T(e){return Array.isArray(e)?e.filter(n=>typeof n=="string"):null}function ve(e){let n=e.headers.get("WWW-Authenticate")??void 0,t=e.headers.get("DPoP-Nonce")??void 0;if(!n&&!t)return;let r={wwwAuthenticate:n??""};if(t&&(r.nonce=t),n){let s=n.match(/acr_values\s*=\s*"([^"]*)"/i);s&&(r.acrValues=s[1])}return r}function Ve(e){try{return new URL(e).host}catch{return null}}function Be(e,n={}){let t=n.discovery??new _,r=new Map,s=new Map,o=async i=>{let d=r.get(i);if(d!==void 0)return d;let f=null,p=await t.discoverProtectedResource(i).catch(()=>null);return p&&p.length>0&&(f=Ve(p[0])),r.set(i,f),f},c=async(i,d)=>{if(!e)return null;if(!(d.forceRefresh||d.challenge)&&s.has(i))return s.get(i);let p=await e.resolve(i,d).catch(()=>null);return s.set(i,p),p},a=async(i,d,f,p)=>{let y=await o(d);if(!y)return{res:await F(i,{method:f,redirect:"manual"}),authed:!1};let l=await c(y,{method:f,url:i,...p}),u=l?.headers??{};return{res:await F(i,{method:f,redirect:"manual",headers:u}),authed:!!l}};return async(i,d,f="GET")=>{let p=await a(i,d,f,{});if((p.res.status===401||p.res.status===403)&&p.authed){let y=ve(p.res),l={forceRefresh:y===void 0};return y&&(l.challenge=y),(await a(i,d,f,l)).res}return p.res}}var we="KANONAK_TOKEN";function ze(){return typeof process<"u"&&process.env?process.env:{}}function He(e){return`${we}_${e.toUpperCase().replace(/[^A-Z0-9]+/g,"_")}`}var W=class{tokens;env;constructor(n={}){this.tokens=n.tokens??{},this.env=n.env??ze()}async resolve(n,t){let r=R(n),s=this.tokens[r]??this.env[He(r)]??this.env[we];return s?{headers:{Authorization:`Bearer ${s}`}}:null}};import{canonicalForm as qe,canonicalHash as We}from"@kanonak-protocol/canonical";function X(e){return typeof e=="object"&&e!==null&&Array.isArray(e.subjects)}import{CANONICAL_FORM_VERSION as on}from"@kanonak-protocol/canonical";function Xe(e){return qe(X(e)?e:Te(e))}function Ye(e){return We(X(e)?e:Te(e))}function Te(e){let n=[];for(let t of e)t instanceof A&&n.push({uri:rn(t),statements:Y(t.statement)});return{subjects:n}}function Y(e){let n=[];for(let t of e){let r=tn(t);if(!r)continue;if(t instanceof L&&Je(t.predicate.subject)){n.push(...Ze(t,r));continue}let s=en(t);s&&n.push({predicate:r,value:s})}return n}function Je(e){let n=de("type");return n!==void 0&&e.name==="type"&&e.publisher===n.publisher&&e.package_===n.package_}var Pe=new TextEncoder;function Qe(e,n){let t=Pe.encode(e),r=Pe.encode(n),s=Math.min(t.length,r.length);for(let o=0;o<s;o++)if(t[o]!==r[o])return t[o]-r[o];return t.length-r.length}function Ze(e,n){let t=[];for(let r of e.object){if(!(r instanceof E))throw new Error(`canonicalForm: a multi-valued type statement must contain only entity references, got ${r.constructor?.name??typeof r}`);t.push(J(r))}t.sort(Qe);for(let r=1;r<t.length;r++)if(t[r-1]===t[r])throw new Error(`canonicalForm: duplicate type ${t[r]} in a multi-valued type statement`);return t.map(r=>({predicate:n,value:{ref:r}}))}function en(e){if(e instanceof re&&e.carrier)return{lit:e.lexical??String(e.object),datatype:Ee(e.carrier)};if(e instanceof oe)return{raw:e.object};if(e instanceof se)return{raw:e.lexical??String(e.object)};if(e instanceof ae)return{raw:e.lexical??String(e.object)};if(e instanceof ie)return{ref:J(e.object)};if(e instanceof ce)return je(e.object);if(e instanceof L)return{list:e.object.map(nn)}}function je(e){let n=Y(e.statement);return e.name&&e.name.length>0?{embed:{name:e.name,statements:n}}:{embed:{statements:n}}}function nn(e){if(e instanceof E)return{ref:J(e)};if(e instanceof ne)return je(e);if(e instanceof I){if(e.carrier)return{lit:e.lexical??String(e.value),datatype:Ee(e.carrier)};let n=e.value;if(typeof n=="string")return{raw:n};if(typeof n=="number")return{raw:String(n)};if(typeof n=="boolean")return{raw:String(n)}}if(e instanceof ee)return{embed:{statements:Y(e.statement)}};throw new Error(`canonicalForm: list item of unrecognized kind (${e.constructor?.name??typeof e}); add canonicalization support before hashing data that contains it`)}function Ee(e){return e===B.LangString?"kanonak.org/core-rdf/langString":`kanonak.org/core-xsd/${e}`}function tn(e){let n=e.predicate;if(n)return Re(n.subject)}function rn(e){let n=e.namespace??"",t=e.name??"";return`${n}/${t}`}function J(e){return Re(e.subject)}function Re(e){let n=e.version;return n&&typeof n.major=="number"?`${e.publisher}/${e.package_}@${n.major}.${n.minor}.${n.patch}/${e.name}`:`${e.publisher}/${e.package_}/${e.name}`}var j="kanonak.org",M="core-rdf",Ae="core-xsd",_e={publisher:j,package_:M,name:"subClassOf"},Ie={publisher:j,package_:M,name:"label"},sn={publisher:j,package_:M,name:"comment"},Ne={publisher:j,package_:"core-owl",name:"oneOf"},$e=e=>e;function an(e){let n=ue(e,_e);if(n)return[n];let t=[];for(let r of V(e,_e))r instanceof E&&t.push(r.subject);return t}function cn(e,n,t){if(n.publisher===j&&n.package_===M&&n.name==="Literal")return{kind:"datatype",uri:n};let s=G(e,n);if(s){let o=$e(s);if(b.isDatatypeType(o))return{kind:"datatype",uri:n};if(b.isClassType(o))return{kind:"class",uri:K(s)??n,localName:s.name}}return n.publisher===j&&n.package_===Ae?{kind:"datatype",uri:n}:t==="datatype"?{kind:"datatype",uri:n}:{kind:"class",uri:n,localName:n.name}}function pn(e,n,t){if(!n.range)throw new Error(`Property ${n.uri.publisher}/${n.uri.package_}/${n.uri.name} has no rdfs.range; every property must declare a range. Validate the ontology before introspecting it.`);let r=cn(e,n.range,n.kind),s=n.kind==="object"?"object":n.kind==="datatype"?"datatype":r.kind==="class"?"object":"datatype";return{uri:n.uri,localName:n.uri.name,kind:s,range:r,...n.label!==void 0?{label:n.label}:{},...n.comment!==void 0?{comment:n.comment}:{},...t??{}}}var D=e=>new te(j,Ae,e);function ln(e){return typeof e=="boolean"?D("boolean"):typeof e=="number"?Number.isInteger(e)?D("integer"):D("decimal"):D("string")}function un(e,n){let t=[];for(let r of V(n,Ne))if(r instanceof E){let s=G(e,r.subject),o=(s?K(s):void 0)??r.subject,c=s?$(s,Ie):void 0;t.push({kind:"individual",uri:o,localName:o.name,...c!==void 0?{label:c}:{}})}else r instanceof I&&t.push({kind:"literal",value:r.value,datatype:ln(r.value)});return t}function dn(e,n,t,r){let s=fe(e,n),o=N(n);return ge(e,n).filter(a=>t?!0:a.domains.some(i=>N(i)===o)).map(a=>pn(e,a,me(r,s,a.uri)))}async function fn(e,n,t){let r=e.metadata?.namespace_;if(!r)throw new Error("buildOntologyModel: document has no namespace (publisher/package/version).");let s=t?.includeInherited??!1,o=await new x().parseKanonaks(n),c=ye(o),a=[],i=[],d=new Set;for(let f of o){if(!(f instanceof A)||!b.isClassType($e(f)))continue;let p=K(f);if(!p||p.publisher!==r.publisher||p.package_!==r.package_||p.version&&r.version&&!Z(p.version,r.version))continue;let y=N(p);if(d.has(y))continue;d.add(y);let l=an(f).map(C=>({uri:C,localName:C.name})),u=$(f,Ie),m=$(f,sn);a.push({uri:p,localName:p.name,superClasses:l,properties:dn(o,p,s,c),...u!==void 0?{label:u}:{},...m!==void 0?{comment:m}:{}}),le(f,Ne)&&i.push({uri:p,localName:p.name,members:un(o,f),...u!==void 0?{label:u}:{},...m!==void 0?{comment:m}:{}})}return{classes:a,enums:i}}export{be as a,Ce as b,z as c,R as d,Le as e,_ as f,ve as g,Be as h,W as i,Xe as j,Ye as k,on as l,fn as m};
@@ -1 +0,0 @@
1
- var o=class{constructor(e,n){this.doc=e;this.broader=n}doc;broader;async getAllDocumentsAsync(){return[this.doc]}async getDocumentAsync(e){return this.broader.getDocumentAsync(e)}async getDocumentsByNamespaceAsync(e,n){return this.broader.getDocumentsByNamespaceAsync(e,n)}async getHighestCompatibleVersionAsync(e,n){return this.broader.getHighestCompatibleVersionAsync(e,n)}async saveDocumentAsync(){throw new Error("SingleDocumentRepository is read-only")}async deleteDocumentAsync(){throw new Error("SingleDocumentRepository is read-only")}async clearNamespaceAsync(){throw new Error("SingleDocumentRepository is read-only")}async getAllDocumentReferencesAsync(){return[]}async getDocumentContentAsync(e){return this.broader.getDocumentContentAsync(e)}async getDocumentUriAsync(e){return this.broader.getDocumentUriAsync(e)}};export{o as a};
@@ -1 +0,0 @@
1
- import{a as y}from"./chunk-FUUTGGJS.js";import{c as x,g as j}from"./chunk-2ACBWC7K.js";var c=class{};var m=class extends c{statement=[];unresolvedPredicates=[];sourceDoc=""};var f=class extends m{namespace;name;icon};var i=class e extends c{subject;static parse(t){let n=new e;return n.subject=y.parse(t),n}};var o=class{predicate;object};var s=class extends o{carrier;lexical};var k=class e extends s{static parse(t,n){let r=new e;return r.predicate=i.parse(t),r.object=n,r}};var b=class e extends s{static parse(t,n){let r=new e;return r.predicate=i.parse(t),r.object=n,r}};var l=class extends s{};var u=class e extends o{static parse(t,n){let r=new e;return r.predicate=i.parse(t),r.object=i.parse(n),r}};var g=class extends o{};var K=class extends o{};function se(e){return`${e.publisher}/${e.package_}/${e.name}`}function U(e,t){return e.publisher===t.publisher&&e.package_===t.package_&&e.name===t.name}function ce(e){let t=e.version;return t&&typeof t.major=="number"?`https://${e.publisher}/${e.package_}/${t.major}.${t.minor}.${t.patch}/${e.name}`:`https://${e.publisher}/${e.package_}/${e.name}`}function h(e,t){if(!(e instanceof m))return!1;for(let n of e.statement)if(n.predicate?.subject?.name==="type"&&n instanceof u){let a=n.object;if(U(a.subject,t))return!0}return!1}function me(e,t){let n=[];for(let r of e)r instanceof f&&h(r,t)&&n.push(r);return n}function fe(e,t){let n=t.version,r=n&&typeof n.major=="number"?`${t.publisher}/${t.package_}@${n.major}.${n.minor}.${n.patch}`:void 0;for(let a of e){if(!(a instanceof f)||a.name!==t.name)continue;let p=a.namespace||"";if(r!==void 0){if(p===r)return a}else if(p.startsWith(`${t.publisher}/${t.package_}@`))return a}}function pe(e,t){let n=[];for(let r of e){if(!(r instanceof f)||r.name!==t.name)continue;(r.namespace||"").startsWith(`${t.publisher}/${t.package_}@`)&&n.push(r)}return n.sort((r,a)=>{let p=j((r.namespace||"").split("@")[1]??""),S=j((a.namespace||"").split("@")[1]??"");return p?S?x(S,p):-1:S?1:0}),n}function d(e,t){for(let n of e.statement){let r=n.predicate;if(r?.subject&&U(r.subject,t))return n}}function ue(e,t){return d(e,t)!==void 0}function $(e,t){let n=d(e,t);if(n&&(n instanceof k||n instanceof b||n instanceof l))return n.object}function de(e,t){let n=$(e,t);return typeof n=="string"?n:void 0}function ke(e,t){let n=d(e,t);if(n instanceof u)return n.object.subject}function be(e,t){let n=d(e,t);if(n instanceof g)return n.object}function le(e,t){let n=d(e,t);return n instanceof K?n.object??[]:[]}export{c as a,m as b,f as c,i as d,o as e,s as f,k as g,b as h,l as i,u as j,g as k,K as l,se as m,U as n,ce as o,h as p,me as q,fe as r,pe as s,ue as t,$ as u,de as v,ke as w,be as x,le as y};