@kanonak-protocol/sdk 5.17.0 → 5.18.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.
@@ -1,2 +1,2 @@
1
- import{e as F}from"./chunk-W35FCNM7.js";import{H as me,I as he}from"./chunk-Q6XQ5IXW.js";import{a as te,b as $,c as le,i as z,m as D}from"./chunk-V6KIDED2.js";import{k as ue,o as O,p as x,q as ge,r as B,v as ye}from"./chunk-SVUMCLK5.js";import{b as ne,c as T,d as _,f as oe,g as se,h as ae,i as ie,j as ce,k as pe,l as L,m as K,r as G,t as de,v as I,w as fe,y as V}from"./chunk-YW6P24RF.js";import{a as re}from"./chunk-FUUTGGJS.js";import{d as ee}from"./chunk-2ACBWC7K.js";var Ce=(a=>(a.Class="Class",a.DatatypeProperty="DatatypeProperty",a.ObjectProperty="ObjectProperty",a.AnnotationProperty="AnnotationProperty",a.Instance="Instance",a.Datatype="Datatype",a.Unknown="Unknown",a))(Ce||{}),Se=(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))(Se||{}),H=class{static async buildFromRepository(n,t){let o=await new D().parseKanonaks(n),s=await n.getAllDocumentsAsync(),c=[],a=[],i=new Set,d=new Set,f=new Map;for(let g of o){let u=g;if(u.name&&(O.isClassType(u)&&i.add(u.name),g instanceof T)){let l=B(o,g);(l==="ObjectProperty"||l==="Property")&&d.add(u.name)}}for(let g of s)for(let[u,l]of Object.entries(g.body))d.has(u)&&l?.range&&typeof l.range=="string"&&f.set(u,l.range);let p=new Map;for(let g of o){let u=g;u.name&&p.set(u.name,u)}for(let g of s){let u=g.metadata.namespace_,l=u?`${u.publisher}/${u.package_}`:"",m=u?.version?`${u.version.major}.${u.version.minor}.${u.version.patch}`:"",b=ke(g);for(let[h,y]of Object.entries(g.body)){if(!y||typeof y!="object")continue;let C=p.get(h),k="Unknown";if(C){let R=C,j=C instanceof T?B(o,C):void 0;O.isClassType(R)?k="Class":j==="ObjectProperty"?k="ObjectProperty":j==="DatatypeProperty"?k="DatatypeProperty":j==="AnnotationProperty"?k="AnnotationProperty":O.isDatatypeType(R)?k="Datatype":j==="Property"?k="ObjectProperty":O.isInstanceOfKnownClass(R,i)&&(k="Instance")}let S=l&&m?`${l}/${h}@${m}`:h,Z={};for(let[R,j]of Object.entries(y))R!=="type"&&(typeof j!="object"||j===null)&&(Z[R]=j);c.push({id:S,label:y.label??h,type:k,namespace:l,properties:Z}),be(S,y,k,i,d,a,l,m,b,t),q(S,y,d,f,c,a,l,m,b),Le(S,C,a)}}return{nodes:c,edges:a}}static buildFromDocument(n,t){let r=[],o=[],s=n.metadata.namespace_,c=s?.version?`${s.version.major}.${s.version.minor}.${s.version.patch}`:"",a=s?`${s.publisher}/${s.package_}`:"",i=new Set,d=new Set,f=new Map,p=ke(n);for(let[l,m]of Object.entries(n.body)){let b=m?.type;b&&(Me(b,p)&&i.add(l),Ue(b,p)&&(d.add(l),m.range&&typeof m.range=="string"&&f.set(l,m.range)))}for(let[l,m]of Object.entries(n.body)){if(!m||typeof m!="object")continue;let b=m.type,h=Fe(b,l,i,p),y=a&&c?`${a}/${l}@${c}`:l,C={};for(let[k,S]of Object.entries(m))k!=="type"&&(typeof S!="object"||S===null)&&(C[k]=S);r.push({id:y,label:m.label??l,type:h,namespace:a,properties:C}),be(y,m,h,i,d,o,a,c,p,t),q(y,m,d,f,r,o,a,c,p)}let g=new Set(r.map(l=>l.id)),u=o.filter(l=>g.has(l.source)&&g.has(l.target));return{nodes:r,edges:u}}};function ke(e,n){let t=new Map;if(e.metadata?.imports)for(let[r,o]of Object.entries(e.metadata.imports))for(let s of o){let c=s.alias??s.packageName,a=s.version,i=`${a.major}.${a.minor}.${a.patch}`;t.set(c,{publisher:r,package_:s.packageName,version:i})}return t}var Oe={"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"},De=new Set(["kanonak.org/core-owl/ObjectProperty","kanonak.org/core-owl/DatatypeProperty","kanonak.org/core-owl/AnnotationProperty","kanonak.org/core-rdf/Property"]);function W(e,n){if(e.includes(".")){let t=e.indexOf("."),r=e.substring(0,t),o=e.substring(t+1),s=n.get(r);if(s)return`${s.publisher}/${s.package_}/${o}`}return null}function Me(e,n){let t=W(e,n);return t?Oe[t]==="Class":!1}function Ue(e,n){let t=W(e,n);return t?De.has(t):!1}function Fe(e,n,t,r){if(!e||e==="Package")return"Unknown";let o=W(e,r);if(o){let c=Oe[o];if(c)return c;let a=o.split("/").pop()?.split("@")[0]??"";return t.has(a)?"Instance":"Unknown"}let s=e.split(".").pop()??e;return t.has(s)?"Instance":"Unknown"}var ve=new Set(["type","label","comment","version","publisher","imports","license","match","alias","package"]);function be(e,n,t,r,o,s,c,a,i,d){let f=n.type,p=n.subClassOf;if(p){let h=Array.isArray(p)?p:[p];for(let y of h)typeof y=="string"&&s.push({source:e,target:v(y,c,a,i),type:"subClassOf",label:"subClassOf"})}let g=n.subPropertyOf;if(g){let h=Array.isArray(g)?g:[g];for(let y of h)typeof y=="string"&&s.push({source:e,target:v(y,c,a,i),type:"subPropertyOf",label:"subPropertyOf"})}let u=n.domain,l=n.range;if(d?.includePropertyEdges){let h=[[u,"domain","domain"],[l,"range","range"]];for(let[y,C,k]of h)if(y!=null)for(let S of Array.isArray(y)?y:[y])typeof S=="string"&&s.push({source:e,target:v(S,c,a,i),type:C,label:k})}if(t==="Instance"&&f){let h=f.split(".").pop()??f;s.push({source:e,target:v(h,c,a,i),type:"instanceOf",label:"type"})}if(t==="Instance")for(let[h,y]of Object.entries(n)){if(ve.has(h)||!o.has(h))continue;let C=Array.isArray(y)?y:[y];for(let k of C)typeof k=="string"&&Ge(k)&&s.push({source:e,target:v(k,c,a,i),type:"propertyValue",label:h,propertyId:v(h,c,a,i)})}if((t==="ObjectProperty"||t==="DatatypeProperty"||u&&l)&&u&&l){let h=typeof u=="string"?u:null,y=typeof l=="string"?l:null;h&&y&&s.push({source:v(h,c,a,i),target:v(y,c,a,i),type:"objectRelationship",label:n.label??e.split("/").pop()??"",propertyId:e})}}function q(e,n,t,r,o,s,c,a,i){for(let[d,f]of Object.entries(n)){if(ve.has(d)||typeof f!="object"||f===null||Array.isArray(f))continue;let p=f,g=`${e}/${d}`,u=r.get(d),l=u?u.split(".").pop()??u:"Unknown",m={};for(let[h,y]of Object.entries(p))(typeof y!="object"||y===null)&&(m[h]=y);o.push({id:g,label:`${l} (embedded)`,type:"Instance",namespace:c,properties:m});let b=c&&a?`${c}/${d}@${a}`:d;s.push({source:e,target:g,type:"propertyValue",label:d,propertyId:t.has(d)?b:void 0}),u&&s.push({source:g,target:v(l,c,a,i),type:"instanceOf",label:"type (inferred)"}),q(g,p,t,r,o,s,c,a,i)}}function Le(e,n,t){let r=n?.statement;if(Array.isArray(r))for(let o of r){if(!(o instanceof le))continue;let s=o.predicate?.subject?.name??"";for(let c of o.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:s})}}}function Ge(e){return!(!e||e.includes(" ")||e.includes(`
1
+ import{e as F}from"./chunk-W35FCNM7.js";import{H as me,I as he}from"./chunk-3O7CRE6J.js";import{a as te,b as $,c as le,i as z,m as D}from"./chunk-V6KIDED2.js";import{k as ue,o as O,p as x,q as ge,r as B,v as ye}from"./chunk-SVUMCLK5.js";import{b as ne,c as T,d as _,f as oe,g as se,h as ae,i as ie,j as ce,k as pe,l as L,m as K,r as G,t as de,v as I,w as fe,y as V}from"./chunk-YW6P24RF.js";import{a as re}from"./chunk-FUUTGGJS.js";import{d as ee}from"./chunk-2ACBWC7K.js";var Ce=(a=>(a.Class="Class",a.DatatypeProperty="DatatypeProperty",a.ObjectProperty="ObjectProperty",a.AnnotationProperty="AnnotationProperty",a.Instance="Instance",a.Datatype="Datatype",a.Unknown="Unknown",a))(Ce||{}),Se=(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))(Se||{}),H=class{static async buildFromRepository(n,t){let o=await new D().parseKanonaks(n),s=await n.getAllDocumentsAsync(),c=[],a=[],i=new Set,d=new Set,f=new Map;for(let g of o){let u=g;if(u.name&&(O.isClassType(u)&&i.add(u.name),g instanceof T)){let l=B(o,g);(l==="ObjectProperty"||l==="Property")&&d.add(u.name)}}for(let g of s)for(let[u,l]of Object.entries(g.body))d.has(u)&&l?.range&&typeof l.range=="string"&&f.set(u,l.range);let p=new Map;for(let g of o){let u=g;u.name&&p.set(u.name,u)}for(let g of s){let u=g.metadata.namespace_,l=u?`${u.publisher}/${u.package_}`:"",m=u?.version?`${u.version.major}.${u.version.minor}.${u.version.patch}`:"",b=ke(g);for(let[h,y]of Object.entries(g.body)){if(!y||typeof y!="object")continue;let C=p.get(h),k="Unknown";if(C){let R=C,j=C instanceof T?B(o,C):void 0;O.isClassType(R)?k="Class":j==="ObjectProperty"?k="ObjectProperty":j==="DatatypeProperty"?k="DatatypeProperty":j==="AnnotationProperty"?k="AnnotationProperty":O.isDatatypeType(R)?k="Datatype":j==="Property"?k="ObjectProperty":O.isInstanceOfKnownClass(R,i)&&(k="Instance")}let S=l&&m?`${l}/${h}@${m}`:h,Z={};for(let[R,j]of Object.entries(y))R!=="type"&&(typeof j!="object"||j===null)&&(Z[R]=j);c.push({id:S,label:y.label??h,type:k,namespace:l,properties:Z}),be(S,y,k,i,d,a,l,m,b,t),q(S,y,d,f,c,a,l,m,b),Le(S,C,a)}}return{nodes:c,edges:a}}static buildFromDocument(n,t){let r=[],o=[],s=n.metadata.namespace_,c=s?.version?`${s.version.major}.${s.version.minor}.${s.version.patch}`:"",a=s?`${s.publisher}/${s.package_}`:"",i=new Set,d=new Set,f=new Map,p=ke(n);for(let[l,m]of Object.entries(n.body)){let b=m?.type;b&&(Me(b,p)&&i.add(l),Ue(b,p)&&(d.add(l),m.range&&typeof m.range=="string"&&f.set(l,m.range)))}for(let[l,m]of Object.entries(n.body)){if(!m||typeof m!="object")continue;let b=m.type,h=Fe(b,l,i,p),y=a&&c?`${a}/${l}@${c}`:l,C={};for(let[k,S]of Object.entries(m))k!=="type"&&(typeof S!="object"||S===null)&&(C[k]=S);r.push({id:y,label:m.label??l,type:h,namespace:a,properties:C}),be(y,m,h,i,d,o,a,c,p,t),q(y,m,d,f,r,o,a,c,p)}let g=new Set(r.map(l=>l.id)),u=o.filter(l=>g.has(l.source)&&g.has(l.target));return{nodes:r,edges:u}}};function ke(e,n){let t=new Map;if(e.metadata?.imports)for(let[r,o]of Object.entries(e.metadata.imports))for(let s of o){let c=s.alias??s.packageName,a=s.version,i=`${a.major}.${a.minor}.${a.patch}`;t.set(c,{publisher:r,package_:s.packageName,version:i})}return t}var Oe={"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"},De=new Set(["kanonak.org/core-owl/ObjectProperty","kanonak.org/core-owl/DatatypeProperty","kanonak.org/core-owl/AnnotationProperty","kanonak.org/core-rdf/Property"]);function W(e,n){if(e.includes(".")){let t=e.indexOf("."),r=e.substring(0,t),o=e.substring(t+1),s=n.get(r);if(s)return`${s.publisher}/${s.package_}/${o}`}return null}function Me(e,n){let t=W(e,n);return t?Oe[t]==="Class":!1}function Ue(e,n){let t=W(e,n);return t?De.has(t):!1}function Fe(e,n,t,r){if(!e||e==="Package")return"Unknown";let o=W(e,r);if(o){let c=Oe[o];if(c)return c;let a=o.split("/").pop()?.split("@")[0]??"";return t.has(a)?"Instance":"Unknown"}let s=e.split(".").pop()??e;return t.has(s)?"Instance":"Unknown"}var ve=new Set(["type","label","comment","version","publisher","imports","license","match","alias","package"]);function be(e,n,t,r,o,s,c,a,i,d){let f=n.type,p=n.subClassOf;if(p){let h=Array.isArray(p)?p:[p];for(let y of h)typeof y=="string"&&s.push({source:e,target:v(y,c,a,i),type:"subClassOf",label:"subClassOf"})}let g=n.subPropertyOf;if(g){let h=Array.isArray(g)?g:[g];for(let y of h)typeof y=="string"&&s.push({source:e,target:v(y,c,a,i),type:"subPropertyOf",label:"subPropertyOf"})}let u=n.domain,l=n.range;if(d?.includePropertyEdges){let h=[[u,"domain","domain"],[l,"range","range"]];for(let[y,C,k]of h)if(y!=null)for(let S of Array.isArray(y)?y:[y])typeof S=="string"&&s.push({source:e,target:v(S,c,a,i),type:C,label:k})}if(t==="Instance"&&f){let h=f.split(".").pop()??f;s.push({source:e,target:v(h,c,a,i),type:"instanceOf",label:"type"})}if(t==="Instance")for(let[h,y]of Object.entries(n)){if(ve.has(h)||!o.has(h))continue;let C=Array.isArray(y)?y:[y];for(let k of C)typeof k=="string"&&Ge(k)&&s.push({source:e,target:v(k,c,a,i),type:"propertyValue",label:h,propertyId:v(h,c,a,i)})}if((t==="ObjectProperty"||t==="DatatypeProperty"||u&&l)&&u&&l){let h=typeof u=="string"?u:null,y=typeof l=="string"?l:null;h&&y&&s.push({source:v(h,c,a,i),target:v(y,c,a,i),type:"objectRelationship",label:n.label??e.split("/").pop()??"",propertyId:e})}}function q(e,n,t,r,o,s,c,a,i){for(let[d,f]of Object.entries(n)){if(ve.has(d)||typeof f!="object"||f===null||Array.isArray(f))continue;let p=f,g=`${e}/${d}`,u=r.get(d),l=u?u.split(".").pop()??u:"Unknown",m={};for(let[h,y]of Object.entries(p))(typeof y!="object"||y===null)&&(m[h]=y);o.push({id:g,label:`${l} (embedded)`,type:"Instance",namespace:c,properties:m});let b=c&&a?`${c}/${d}@${a}`:d;s.push({source:e,target:g,type:"propertyValue",label:d,propertyId:t.has(d)?b:void 0}),u&&s.push({source:g,target:v(l,c,a,i),type:"instanceOf",label:"type (inferred)"}),q(g,p,t,r,o,s,c,a,i)}}function Le(e,n,t){let r=n?.statement;if(Array.isArray(r))for(let o of r){if(!(o instanceof le))continue;let s=o.predicate?.subject?.name??"";for(let c of o.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:s})}}}function Ge(e){return!(!e||e.includes(" ")||e.includes(`
2
2
  `)||e.startsWith("http://")||e.startsWith("https://")||/^\d{4}-\d{2}/.test(e)||/^\d+(\.\d+)?$/.test(e))}function v(e,n,t,r){if(e.includes("@")&&e.includes("/"))return e;if(e.includes(".")){let o=e.indexOf("."),s=e.substring(0,o),c=e.substring(o+1);if(r){let a=r.get(s);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 A(e){let n=e.replace(/^https?:\/\//,"").replace(/^git:\/\//,"").replace(/\/+$/,"").trim();if(!n)throw new Error("Publisher host cannot be empty");return n}var Ve="key_thumbprint",N=class{cache=new Map;prCache=new Map;async discoverProtectedResource(n){let t=A(n);if(this.prCache.has(t))return this.prCache.get(t);let r=`https://${t}/.well-known/oauth-protected-resource`,o=await Be(r),s=o&&Array.isArray(o.authorization_servers)?o.authorization_servers.filter(a=>typeof a=="string"):[],c=s.length>0?s:null;return this.prCache.set(t,c),c}async discover(n){let t=A(n);if(this.cache.has(t))return this.cache.get(t);let r=`https://${t}/.well-known/oauth-authorization-server`,o=await this.tryEndpoint(r);if(!o){let s=`https://${t}/.well-known/openid-configuration`;o=await this.tryEndpoint(s)}return this.cache.set(t,o),o}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(o){let s=o instanceof Error?o.message:String(o);return s.includes("ENOTFOUND")||s.includes("ECONNREFUSED")?(console.error(` OAuth discovery: ${n} \u2014 host unreachable (${s})`),console.error(" If the server is behind a VPN, ensure you are connected.")):s.includes("CERT")||s.includes("SSL")||s.includes("TLS")?(console.error(` OAuth discovery: ${n} \u2014 TLS error (${s})`),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: ${s}`),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:w(r.issuer),authorizationEndpoint:w(r.authorization_endpoint),tokenEndpoint:w(r.token_endpoint),registrationEndpoint:w(r.registration_endpoint),revocationEndpoint:w(r.revocation_endpoint),scopesSupported:P(r.scopes_supported),responseTypesSupported:P(r.response_types_supported),grantTypesSupported:P(r.grant_types_supported),codeChallengeMethodsSupported:P(r.code_challenge_methods_supported),tokenEndpointAuthMethodsSupported:P(r.token_endpoint_auth_methods_supported),dpopSigningAlgValuesSupported:P(r.dpop_signing_alg_values_supported),enrollmentEndpoint:w(r.enrollment_endpoint),enrollmentIssuanceProtocols:P(r.enrollment_issuance_protocols),enrollmentKeyTypes:P(r.enrollment_key_types),enrollmentScopesSupported:P(r.enrollment_scopes_supported),enrollmentConsentBindingParam:w(r.enrollment_consent_binding_param),sessionEndpoint:w(r.session_endpoint),sessionEndpointAuthMethod:w(r.session_endpoint_auth_method)}}};async function Be(e){try{let n=await fetch(e);return n.ok?await n.json():null}catch{return null}}function w(e){return typeof e=="string"?e:null}function P(e){return Array.isArray(e)?e.filter(n=>typeof n=="string"):null}function we(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 o=n.match(/acr_values\s*=\s*"([^"]*)"/i);o&&(r.acrValues=o[1])}return r}function ze(e){try{return new URL(e).host}catch{return null}}function He(e,n={}){let t=n.discovery??new N,r=new Map,o=new Map,s=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=ze(p[0])),r.set(i,f),f},c=async(i,d)=>{if(!e)return null;if(!(d.forceRefresh||d.challenge)&&o.has(i))return o.get(i);let p=await e.resolve(i,d).catch(()=>null);return o.set(i,p),p},a=async(i,d,f,p)=>{let g=await s(d);if(!g)return{res:await F(i,{method:f,redirect:"manual"}),authed:!1};let u=await c(g,{method:f,url:i,...p}),l=u?.headers??{};return{res:await F(i,{method:f,redirect:"manual",headers:l}),authed:!!u}};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 g=we(p.res),u={forceRefresh:g===void 0};return g&&(u.challenge=g),(await a(i,d,f,u)).res}return p.res}}var Pe="KANONAK_TOKEN";function qe(){return typeof process<"u"&&process.env?process.env:{}}function We(e){return`${Pe}_${e.toUpperCase().replace(/[^A-Z0-9]+/g,"_")}`}var X=class{tokens;env;constructor(n={}){this.tokens=n.tokens??{},this.env=n.env??qe()}async resolve(n,t){let r=A(n),o=this.tokens[r]??this.env[We(r)]??this.env[Pe];return o?{headers:{Authorization:`Bearer ${o}`}}:null}};import{canonicalForm as Xe,canonicalHash as Ye}from"@kanonak-protocol/canonical";function Y(e){return typeof e=="object"&&e!==null&&Array.isArray(e.subjects)}import{CANONICAL_FORM_VERSION as an}from"@kanonak-protocol/canonical";function Je(e){return Xe(Y(e)?e:Te(e))}function Qe(e){return Ye(Y(e)?e:Te(e))}function Te(e){let n=[];for(let t of e)t instanceof T&&n.push({uri:sn(t),statements:J(t.statement)});return{subjects:n}}function J(e){let n=[];for(let t of e){let r=on(t);if(!r)continue;if(t instanceof L&&Ze(t.predicate.subject)){n.push(...nn(t,r));continue}let o=tn(t);o&&n.push({predicate:r,value:o})}return n}function Ze(e){let n=ue("type");return n!==void 0&&e.name==="type"&&e.publisher===n.publisher&&e.package_===n.package_}var je=new TextEncoder;function en(e,n){let t=je.encode(e),r=je.encode(n),o=Math.min(t.length,r.length);for(let s=0;s<o;s++)if(t[s]!==r[s])return t[s]-r[s];return t.length-r.length}function nn(e,n){let t=[];for(let r of e.object){if(!(r instanceof _))throw new Error(`canonicalForm: a multi-valued type statement must contain only entity references, got ${r.constructor?.name??typeof r}`);t.push(Q(r))}t.sort(en);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 tn(e){if(e instanceof oe&&e.carrier)return{lit:e.lexical??String(e.object),datatype:Re(e.carrier)};if(e instanceof se)return{raw:e.object};if(e instanceof ae)return{raw:e.lexical??String(e.object)};if(e instanceof ie)return{raw:e.lexical??String(e.object)};if(e instanceof ce)return{ref:Q(e.object)};if(e instanceof pe)return Ee(e.object);if(e instanceof L)return{list:e.object.map(rn)}}function Ee(e){let n=J(e.statement);return e.name&&e.name.length>0?{embed:{name:e.name,statements:n}}:{embed:{statements:n}}}function rn(e){if(e instanceof _)return{ref:Q(e)};if(e instanceof te)return Ee(e);if(e instanceof $){if(e.carrier)return{lit:e.lexical??String(e.value),datatype:Re(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 ne)return{embed:{statements:J(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 Re(e){return e===z.LangString?"kanonak.org/core-rdf/langString":`kanonak.org/core-xsd/${e}`}function on(e){let n=e.predicate;if(n)return _e(n.subject)}function sn(e){let n=e.namespace??"",t=e.name??"";return`${n}/${t}`}function Q(e){return _e(e.subject)}function _e(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 E="kanonak.org",U="core-rdf",Ie="core-xsd",Ae={publisher:E,package_:U,name:"subClassOf"},Ne={publisher:E,package_:U,name:"label"},$e={publisher:E,package_:U,name:"comment"},Ke={publisher:E,package_:"core-owl",name:"oneOf"},xe=e=>e;function cn(e){let n=fe(e,Ae);if(n)return[n];let t=[];for(let r of V(e,Ae))r instanceof _&&t.push(r.subject);return t}function pn(e,n,t){if(n.publisher===E&&n.package_===U&&n.name==="Literal")return{kind:"datatype",uri:n};let o=G(e,n);if(o){let s=xe(o);if(O.isDatatypeType(s))return{kind:"datatype",uri:n};if(O.isClassType(s))return{kind:"class",uri:x(o)??n,localName:o.name}}return n.publisher===E&&n.package_===Ie?{kind:"datatype",uri:n}:t==="datatype"?{kind:"datatype",uri:n}:{kind:"class",uri:n,localName:n.name}}function ln(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=pn(e,n.range,n.kind),o=n.kind==="object"?"object":n.kind==="datatype"?"datatype":r.kind==="class"?"object":"datatype";return{uri:n.uri,localName:n.uri.name,kind:o,range:r,...n.label!==void 0?{label:n.label}:{},...n.comment!==void 0?{comment:n.comment}:{},...t??{}}}var M=e=>new re(E,Ie,e);function un(e){return typeof e=="boolean"?M("boolean"):typeof e=="number"?Number.isInteger(e)?M("integer"):M("decimal"):M("string")}function dn(e,n){let t=[];for(let r of V(n,Ke))if(r instanceof _){let o=G(e,r.subject),s=(o?x(o):void 0)??r.subject,c=o?I(o,Ne):void 0,a=o?I(o,$e):void 0;t.push({kind:"individual",uri:s,localName:s.name,...c!==void 0?{label:c}:{},...a!==void 0?{comment:a}:{}})}else r instanceof $&&t.push({kind:"literal",value:r.value,datatype:un(r.value)});return t}function fn(e,n,t,r){let o=ge(e,n),s=K(n);return ye(e,n).filter(a=>t?!0:a.domains.some(i=>K(i)===s)).map(a=>ln(e,a,he(r,o,a.uri)))}async function gn(e,n,t){let r=e.metadata?.namespace_;if(!r)throw new Error("buildOntologyModel: document has no namespace (publisher/package/version).");let o=t?.includeInherited??!1,s=await new D().parseKanonaks(n),c=me(s),a=[],i=[],d=new Set;for(let f of s){if(!(f instanceof T)||!O.isClassType(xe(f)))continue;let p=x(f);if(!p||p.publisher!==r.publisher||p.package_!==r.package_||p.version&&r.version&&!ee(p.version,r.version))continue;let g=K(p);if(d.has(g))continue;d.add(g);let u=cn(f).map(b=>({uri:b,localName:b.name})),l=I(f,Ne),m=I(f,$e);a.push({uri:p,localName:p.name,superClasses:u,properties:fn(s,p,o,c),...l!==void 0?{label:l}:{},...m!==void 0?{comment:m}:{}}),de(f,Ke)&&i.push({uri:p,localName:p.name,members:dn(s,f),...l!==void 0?{label:l}:{},...m!==void 0?{comment:m}:{}})}return{classes:a,enums:i}}export{Ce as a,Se as b,H as c,A as d,Ve as e,N as f,we as g,He as h,X as i,Je as j,Qe as k,an as l,gn as m};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{a as jr,b as Ar,c as Cr,d as Sr,e as L}from"./chunk-V3IPBWWU.js";import{a as te,b as oe,c as ae}from"./chunk-35A2VF5S.js";import{a as xn,c as F,e as ie,h as se,i as ce,j as Kn}from"./chunk-4PY3JJH3.js";import{a as Ir,b as vr,c as Vr,d as gn,e as hn,f as Pn,g as bn,h as Rn,i as wn,j as In,k as T,l as vn,m as Vn}from"./chunk-QLVKAGUU.js";import{a as En}from"./chunk-LYSCTQC2.js";import"./chunk-QHABFCRC.js";import{a as Se,b as De,c as Ue,d as Oe,e as _e,f as qe,g as Ge,h as Xe,i as Ye}from"./chunk-RLQFTA5D.js";import{a as Me,b as Ne,c as $e,d as Le,e as Fe,f as Te,h as ze,i as Z,j as Q,k as ee,l as re,m as Be,n as We}from"./chunk-W35FCNM7.js";import{a as Ce}from"./chunk-4NO7MHS7.js";import{a as Ur,b as Or,c as _r,d as Mr}from"./chunk-5NH5XDGO.js";import{a as Nr,b as Lr}from"./chunk-PEUTCG3B.js";import{a as $r}from"./chunk-PEJALHXK.js";import{a as He}from"./chunk-SC5M74NM.js";import{A as yn,B as kn,K as fn,a as Fr,b as Tr,c as zr,d as Br,e as Hr,f as Wr,g as qr,h as Gr,i as Xr,j as Yr,k as Jr,l as Zr,m as Qr,n as en,o as rn,p as nn,q as tn,r as on,s as an,t as sn,u as cn,v as pn,w as un,x as ln,y as dn,z as mn}from"./chunk-Q6XQ5IXW.js";import"./chunk-ITKOKDBG.js";import{a as f,b as er,c as pr,i as wr,j as Er,k as xr,l as Kr,m as E}from"./chunk-V6KIDED2.js";import{a as P}from"./chunk-NJ3AZYQD.js";import{a as ur,b as lr,c as M,d as dr,e as R,f as mr,g as yr,i as kr,m as fr,o as gr,p as m,q as hr,v as Pr,w as br,x as Rr}from"./chunk-SVUMCLK5.js";import{a as Je,b as Ze,c as k,d as b,e as rr,f as nr,g as tr,h as or,i as ar,j as ir,k as sr,l as cr,r as j,w,x as N,y as $,z as ne}from"./chunk-YW6P24RF.js";import{a as Qe}from"./chunk-FUUTGGJS.js";import{a as xe,b as _,c as V,d as Ke,e as y,f as Ie,g as ve,h as Ve,i as je,j as Ae}from"./chunk-2ACBWC7K.js";import{a as Dr}from"./chunk-ODIECDN7.js";import{VersionOperator as $t}from"@kanonak-protocol/types/document/models/enums";import*as z from"js-yaml";import{VersionOperator as pe}from"@kanonak-protocol/types/document/models/enums";var jn="0.0.0",g=class{constructor(e,r=new P,n){this.repository=e;this.parser=r;this.objectParser=n??new E(this.parser)}repository;parser;objectParser;imports(){return new x}serializeValue(e,r){return de(e,r)}async buildContentAddressed(e){let r=e.book.toImports(),n=await this.hashBody(e.publisher,r,e.body),t=B(n),a={type:"EphemeralPackage",publisher:e.publisher,imports:r};e.contentHashProperty&&(a[e.contentHashProperty]=n),Object.assign(a,e.header??{}),a.imports=r;let i={[t]:a,...e.body},s=this.dump(i);return{yaml:s,byteCount:le(s),contentHash:n,packageName:t,publisher:e.publisher,resourceCount:Object.keys(e.body).length}}async buildNamed(e){let r=e.book.toImports(),n={type:e.type??"Package",publisher:e.publisher,version:e.version,imports:r},t;e.contentHashProperty&&(t=await this.hashBody(e.publisher,r,e.body),n[e.contentHashProperty]=t),Object.assign(n,e.header??{}),n.imports=r;let a={[e.name]:n,...e.body},i=this.dump(a),s={yaml:i,byteCount:le(i),packageName:e.name,publisher:e.publisher,resourceCount:Object.keys(e.body).length};return t!==void 0&&(s.contentHash=t),s}dump(e){return z.dump(e,{lineWidth:-1})}async hashBody(e,r,n){let t={[ue]:{type:"EphemeralPackage",publisher:e,imports:r},...n},a=this.parser.parse(z.dump(t,{lineWidth:-1})),i=a.metadata.namespace_?.toString(),c=(await this.objectParser.parseKanonaks(new ne(a,this.repository))).filter(u=>u instanceof k&&u.namespace===i&&u.name!==ue);for(let u of c)u.namespace="ephemeral";return T(c)}},ue="__pkgbuilder_probe__";function le(o){return new TextEncoder().encode(o).length}function B(o){let e="sha256:",r=o.startsWith(e)?e.length:0;return`q-${o.slice(r,r+16)}`}var x=class{byKey=new Map;aliases=new Set;ensure(e,r,n,t,a=pe.Major){let i=`${e}/${r}@${n}`,s=this.byKey.get(i);if(s)return s.alias;let c=this.uniqueAlias(t);return this.byKey.set(i,{publisher:e,package_:r,version:n,alias:c,match:a}),c}ref(e){if(!e.version||typeof e.version.major!="number")throw new Error(`Cannot serialize a reference to ${e.publisher}/${e.package_}/${e.name} without a version.`);return`${this.ensure(e.publisher,e.package_,y(e.version),e.package_)}.${e.name}`}refLatest(e,r,n,t){return`${this.ensure(e,r,jn,t??r,pe.Any)}.${n}`}toImports(){let e=new Map;for(let n of this.byKey.values()){let t=e.get(n.publisher)??[];t.push(n),e.set(n.publisher,t)}return[...e.keys()].sort().map(n=>({publisher:n,packages:e.get(n).sort((t,a)=>t.package_<a.package_?-1:1).map(t=>({package:t.package_,match:_(t.match),version:t.version,alias:t.alias}))}))}uniqueAlias(e){let r=K(e)||"pkg",n=r,t=2;for(;this.aliases.has(n);)n=`${r}${t++}`;return this.aliases.add(n),n}};function de(o,e){if(o!=null){if(typeof o=="string"||typeof o=="number"||typeof o=="boolean")return o;if(o instanceof b)return e.ref(o.subject);if(Array.isArray(o)){let r=o.map(n=>de(n,e)).filter(n=>n!==void 0);return r.length>0?r:void 0}if(o instanceof f)throw new Error("Embedded values are not yet supported by PackageBuilder. Produce a literal or a reference, or compose the embedded shape into the output class.");if(An(o))throw new Error(`Value produced a bare URI without a version (${o.publisher}/${o.package_}/${o.name}); cannot serialize it as a reference.`)}}function K(o){return o.replace(/[^A-Za-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")}function An(o){return typeof o=="object"&&o!==null&&typeof o.publisher=="string"&&typeof o.package_=="string"&&typeof o.name=="string"}var A=class{constructor(e){this.producers=e}producers;produced=new Map;producerFor(e,r){return this.producers.find(n=>n.canProduce(e,r))}async produceCached(e,r,n,t){let a=`${r}/${n}@${y(t)}`,i=this.produced.get(a);if(i)return i;let{document:s}=await e.produce(r,n,t);return this.produced.set(a,s),s}async getHighestCompatibleVersionAsync(e,r){let n=this.producerFor(e,r.packageName);if(!n)return null;let t={operator:r.versionOperator,version:r.version},a=await n.resolveVersion(e,r.packageName,t);return a?this.produceCached(n,e,r.packageName,a):null}async getDocumentAsync(e){let r;try{r=M(e)}catch{return null}if(r.kind!=="package"||!r.version)return null;let n=this.producerFor(r.publisher,r.package_);return n?this.produceCached(n,r.publisher,r.package_,r.version):null}async getDocumentsByNamespaceAsync(e,r){return Array.from(this.produced.values()).filter(n=>{let t=n.metadata.namespace_;return t!=null&&t.publisher===e&&t.package_===r})}async getAllDocumentsAsync(){return Array.from(this.produced.values())}async saveDocumentAsync(e,r){throw new Error("ProducerRepository is read-only: a producer is a source, not a store.")}async deleteDocumentAsync(e){throw new Error("ProducerRepository is read-only: a producer is a source, not a store.")}async clearNamespaceAsync(e,r){throw new Error("ProducerRepository is read-only: a producer is a source, not a store.")}async getAllDocumentReferencesAsync(){return[]}async getDocumentContentAsync(e){return null}async getDocumentUriAsync(e){return null}};var H={async authorize(){return{allowed:!0}}},W={async record(){}},I=class extends Error{constructor(r,n){let t=`${r.publisher}/${r.package_}${r.version?`@${r.version.major}.${r.version.minor}.${r.version.patch}`:""}`;super(`Not entitled to produce ${t}${n?`: ${n}`:""}`);this.address=r;this.reason=n;this.name="EntitlementDeniedError"}address;reason},C=class{inner;ctx;policy;meter;constructor(e,r,n=H,t=W){this.inner=e,this.ctx=r,this.policy=n,this.meter=t}canProduce(e,r){return this.inner.canProduce(e,r)}async resolveVersion(e,r,n){return await this.assertAllowed({publisher:e,package_:r,version:n.version}),this.inner.resolveVersion(e,r,n)}async produce(e,r,n){let t={publisher:e,package_:r,version:n};await this.assertAllowed(t);let a=await this.inner.produce(e,r,n);return await this.meter.record(this.ctx,t,a),a}async assertAllowed(e){let r=await this.policy.authorize(this.ctx,e);if(!r.allowed)throw new I(e,r.reason)}};var p="kanonak.org",d="view",me="core-kanonak",Cn={publisher:p,package_:d,name:"rootView"},Sn={publisher:p,package_:d,name:"bind"},Dn={publisher:p,package_:d,name:"produces"},Un={publisher:p,package_:d,name:"projections"},On={publisher:p,package_:d,name:"where"},_n={publisher:p,package_:d,name:"value"},Mn={publisher:p,package_:d,name:"as"},S=class{constructor(e,r=new P){this.repository=e;this.parser=r;this.objectParser=new E(this.parser),this.builder=new g(this.repository,this.parser,this.objectParser)}repository;parser;objectParser;builder;async materialize(e,r={}){let n=await this.objectParser.parseKanonaks(this.repository),t=this.resolveView(n,e),a=w(t,Sn);if(!a)throw new Error(`View ${t.namespace}/${t.name} declares no view.bind; cannot materialize.`);let i=w(t,Dn);if(!i)throw new Error(`View ${t.namespace}/${t.name} is a selection view (no view.produces). In-graph materialization of selection views is not yet supported \u2014 declare a view.produces output class to reshape the result.`);let s=Nn(t),c=ye(n,p,me),u=ye(n,p,d),l=this.builder.imports(),D=l.ensure(p,me,c,"ck"),fe=l.ensure(p,d,u,"v"),ge=l.ref(i),he=new ce(this.repository,this.parser,this.objectParser),q=new ie(he,n),Pe=this.readProjections(n,t),be=Fn(t,On),Re=this.findInstances(n,a,await this.reason(r)),G={},we=new Set;for(let v of Re){if(!await this.passesWhere(q,n,be,v))continue;let O={type:ge};for(let Y of Pe){let Ee=await this.evaluateValue(q,n,Y.value,v),J=this.builder.serializeValue(ke(Ee),l);J!==void 0&&(O[l.ref(Y.as)]=J)}let X=m(v);X&&(O[`${fe}.derivedFrom`]=l.ref(X)),G[this.rowName(v,we)]=O}let U={};r.resolvedAt&&(U[`${D}.resolvedAt`]=r.resolvedAt),r.invocationId&&(U[`${D}.id`]=r.invocationId);let h=await this.builder.buildContentAddressed({publisher:s,book:l,body:G,contentHashProperty:`${D}.contentHash`,header:U});return{yaml:h.yaml,contentHash:h.contentHash,packageName:h.packageName,publisher:h.publisher,rowCount:h.resourceCount}}resolveView(e,r){let n=j(e,r);if(!n)throw new Error(`View ${r.publisher}/${r.package_}/${r.name} not found in the catalog.`);let t=w(n,Cn);if(t){let a=j(e,t);if(!a)throw new Error(`ViewPackage ${r.name} names rootView ${t.name}, which is not in the catalog.`);return a}return n}readProjections(e,r){let n=[];for(let t of $(r,Un)){let a=t instanceof f?t:t instanceof b?j(e,t.subject):void 0;if(!a)continue;let i=N(a,_n),s=w(a,Mn);i&&s&&n.push({value:i,as:s})}return n}async reason(e){return new L({profile:e.reasoningProfile??"owl-rl-classification"}).reason(this.repository)}findInstances(e,r,n){let t=Ln(e),a=[],i=new Set;for(let s of n.getInstancesOfClass(r)){if(i.has(s))continue;i.add(s);let c=t.get(s);c&&a.push(c)}return a.sort((s,c)=>{let u=R(m(s)),l=R(m(c));return u<l?-1:u>l?1:0}),a}async passesWhere(e,r,n,t){for(let a of n){let i=await this.evaluateValue(e,r,a,t);if(!Tn(i))return!1}return!0}async evaluateValue(e,r,n,t){let a=se(n,"view-projection",{catalog:r,depth:0}),i=new Map([["input",t]]);return e.evaluate(a,i)}rowName(e,r){let n=K(e.name)||"row",t=n,a=2;for(;r.has(t);)t=`${n}-${a++}`;return r.add(t),t}};function ke(o){return F(o)?o.value:Array.isArray(o)?o.map(ke):o}function Nn(o){let e=m(o);if(!e)throw new Error(`Could not derive a publisher from view ${o.namespace}/${o.name}.`);return e.publisher}function ye(o,e,r){let n=$n(o,e,r);if(!n)throw new Error(`Package ${e}/${r} is not in the catalog; it must be importable to materialize a view.`);return n}function $n(o,e,r){let n;for(let t of o){if(!(t instanceof k))continue;let a=m(t);!a||a.publisher!==e||a.package_!==r||!a.version||(!n||V(a.version,n)>0)&&(n=a.version)}return n?y(n):void 0}function Ln(o){let e=new Map,r=new Map;for(let n of o){if(!(n instanceof k))continue;let t=m(n);if(!t||!t.version)continue;let a=R(t),i=r.get(a);(!i||V(t.version,i)>0)&&(r.set(a,t.version),e.set(a,n))}return e}function Fn(o,e){let r=N(o,e);return r?[r]:$(o,e).filter(n=>n instanceof f)}function Tn(o){return o===!0?!0:o===!1||o===void 0||o===null?!1:typeof o=="string"?o.length>0:typeof o=="number"?o!==0:F(o)?o.value.length>0:Array.isArray(o)?o.length>0:!!o}export{cn as AmbiguousReferenceRule,ar as BooleanStatement,vn as CANONICAL_FORM_VERSION,wr as Carrier,yn as ClassDefinitionRule,en as ClassHierarchyCycleRule,Ue as CompositeKanonakDocumentRepository,hn as DEFAULT_CONSENT_BINDING_PARAM,Ze as DefinedKanonak,De as DocumentLocation,vr as EdgeType,f as EmbeddedKanonak,Jr as EmbeddedKanonakTypeRule,sr as EmbeddedStatement,I as EntitlementDeniedError,C as EntitlementProducer,Se as FileSystemKanonakDocumentRepository,Dr as GitIgnoreFilter,Vr as GraphBuilder,We as HttpKanonakDocumentRepository,Z as INTEGRITY_PREFIX,x as ImportBook,Zr as ImportExistenceRule,Ce as InMemoryKanonakDocumentRepository,Me as KANONAK_USER_AGENT,Je as Kanonak,Or as KanonakDocumentPositions,E as KanonakObjectParser,fn as KanonakObjectValidator,P as KanonakParser,Qe as KanonakUri,Nr as KanonakUriBuilder,$r as KanonakUrlResolver,fr as KanonakVocabulary,cr as ListStatement,er as LiteralKanonak,qe as LocalFirstRepository,Ge as LockAwareRepository,Kn as LookRenderer,kn as MarkdownLinkRule,pr as MarkdownStatement,an as NamespaceImportCycleRule,Wr as NamespacePrefixRule,Ir as NodeType,or as NumberStatement,Pn as OAuthDiscovery,Cr as OWL_RL_CLASSIFICATION_RULES,un as ObjectPropertyValueValidationRule,zr as OntologyValidationError,Fr as OntologyValidationResult,g as PackageBuilder,Yr as PackageHeaderRule,A as ProducerRepository,ln as PropertyDomainRule,rn as PropertyHierarchyCycleRule,dn as PropertyKindRangeConsistencyRule,Ur as PropertyMetadata,pn as PropertyRangeReferenceRule,nn as PropertyRangeRequiredRule,Gr as PropertyTypeSpecificityRule,ze as PublisherConfigResolver,Be as PublisherIndex,Ar as RDFS_RULES,L as Reasoner,Sr as ReasoningResult,b as ReferenceKanonak,ir as ReferenceStatement,_e as RepositoryFactory,mn as ReservedNameShadowRule,qr as ResourceNamingRule,ur as ResourceResolver,gr as ResourceTypeClassifier,nr as ScalarStatement,rr as Statement,tr as StringStatement,tn as SubClassOfReferenceRule,on as SubPropertyOfReferenceRule,k as SubjectKanonak,Xr as SubjectKanonakTypeRequiredRule,wn as TokenCredentialProvider,jr as TripleStore,lr as TypeResolver,sn as UnresolvedPredicateRule,Qr as UnresolvedReferenceRule,Hr as ValidationCache,Br as ValidationContext,Tr as ValidationSeverity,$t as VersionOperator,S as ViewMaterializer,H as allowAllPolicy,Le as assertHttpsUrl,He as assertPackageIdentity,Ye as buildLocalFirstRepository,Vn as buildOntologyModel,In as canonicalForm,T as canonicalHash,Er as carrierOf,Xe as collectKanonakFiles,V as compareVersions,ae as computeIntegrity,re as computeIntegrityAsync,B as contentAddressedName,Rr as contextTypesOf,Rn as createCredentialedFetch,Ie as createVersion,Kr as extractMarkdownLinks,En as findDerivation,Lr as findInstancesByType,xr as findMalformedReferences,Mr as findMarkdownLinkAt,dr as formatKanonakAddress,y as formatVersion,Oe as getGlobalCachePath,$e as getKanonakUserAgent,Ve as isCompatibleVersion,je as isMajorCompatible,Fe as kanonakFetch,te as loadLockFile,mr as makeUriKey,W as noopMeter,gn as normalizeHost,bn as parseAuthChallenge,M as parseKanonakAddress,Q as parseLockFile,ve as parseVersionString,_r as parseWithPositions,Ae as pickHighestDocument,Pr as propertiesInScope,xn as resolveDisplayValue,br as resolvePropertyStep,K as sanitizeName,oe as saveLockFile,ee as serializeLockFile,Te as setKanonakFetchRetries,Ne as setKanonakUserAgent,m as subjectUri,hr as superClassChain,yr as tripleKey,R as uriKey,kr as uriTriple,xe as versionOperatorFromChar,_ as versionOperatorToChar,Ke as versionsEqual};
1
+ import{a as jr,b as Ar,c as Cr,d as Sr,e as L}from"./chunk-V3IPBWWU.js";import{a as te,b as oe,c as ae}from"./chunk-35A2VF5S.js";import{a as xn,c as F,e as ie,h as se,i as ce,j as Kn}from"./chunk-P36E2UV6.js";import{a as Ir,b as vr,c as Vr,d as gn,e as hn,f as Pn,g as bn,h as Rn,i as wn,j as In,k as T,l as vn,m as Vn}from"./chunk-UNSWF3UN.js";import{a as En}from"./chunk-LYSCTQC2.js";import"./chunk-QHABFCRC.js";import{a as Se,b as De,c as Ue,d as Oe,e as _e,f as qe,g as Ge,h as Xe,i as Ye}from"./chunk-RLQFTA5D.js";import{a as Me,b as Ne,c as $e,d as Le,e as Fe,f as Te,h as ze,i as Z,j as Q,k as ee,l as re,m as Be,n as We}from"./chunk-W35FCNM7.js";import{a as Ce}from"./chunk-4NO7MHS7.js";import{a as Ur,b as Or,c as _r,d as Mr}from"./chunk-5NH5XDGO.js";import{a as Nr,b as Lr}from"./chunk-PEUTCG3B.js";import{a as $r}from"./chunk-PEJALHXK.js";import{a as He}from"./chunk-SC5M74NM.js";import{A as yn,B as kn,K as fn,a as Fr,b as Tr,c as zr,d as Br,e as Hr,f as Wr,g as qr,h as Gr,i as Xr,j as Yr,k as Jr,l as Zr,m as Qr,n as en,o as rn,p as nn,q as tn,r as on,s as an,t as sn,u as cn,v as pn,w as un,x as ln,y as dn,z as mn}from"./chunk-3O7CRE6J.js";import"./chunk-M443OYKT.js";import{a as f,b as er,c as pr,i as wr,j as Er,k as xr,l as Kr,m as E}from"./chunk-V6KIDED2.js";import{a as P}from"./chunk-NJ3AZYQD.js";import{a as ur,b as lr,c as M,d as dr,e as R,f as mr,g as yr,i as kr,m as fr,o as gr,p as m,q as hr,v as Pr,w as br,x as Rr}from"./chunk-SVUMCLK5.js";import{a as Je,b as Ze,c as k,d as b,e as rr,f as nr,g as tr,h as or,i as ar,j as ir,k as sr,l as cr,r as j,w,x as N,y as $,z as ne}from"./chunk-YW6P24RF.js";import{a as Qe}from"./chunk-FUUTGGJS.js";import{a as xe,b as _,c as V,d as Ke,e as y,f as Ie,g as ve,h as Ve,i as je,j as Ae}from"./chunk-2ACBWC7K.js";import{a as Dr}from"./chunk-ODIECDN7.js";import{VersionOperator as $t}from"@kanonak-protocol/types/document/models/enums";import*as z from"js-yaml";import{VersionOperator as pe}from"@kanonak-protocol/types/document/models/enums";var jn="0.0.0",g=class{constructor(e,r=new P,n){this.repository=e;this.parser=r;this.objectParser=n??new E(this.parser)}repository;parser;objectParser;imports(){return new x}serializeValue(e,r){return de(e,r)}async buildContentAddressed(e){let r=e.book.toImports(),n=await this.hashBody(e.publisher,r,e.body),t=B(n),a={type:"EphemeralPackage",publisher:e.publisher,imports:r};e.contentHashProperty&&(a[e.contentHashProperty]=n),Object.assign(a,e.header??{}),a.imports=r;let i={[t]:a,...e.body},s=this.dump(i);return{yaml:s,byteCount:le(s),contentHash:n,packageName:t,publisher:e.publisher,resourceCount:Object.keys(e.body).length}}async buildNamed(e){let r=e.book.toImports(),n={type:e.type??"Package",publisher:e.publisher,version:e.version,imports:r},t;e.contentHashProperty&&(t=await this.hashBody(e.publisher,r,e.body),n[e.contentHashProperty]=t),Object.assign(n,e.header??{}),n.imports=r;let a={[e.name]:n,...e.body},i=this.dump(a),s={yaml:i,byteCount:le(i),packageName:e.name,publisher:e.publisher,resourceCount:Object.keys(e.body).length};return t!==void 0&&(s.contentHash=t),s}dump(e){return z.dump(e,{lineWidth:-1})}async hashBody(e,r,n){let t={[ue]:{type:"EphemeralPackage",publisher:e,imports:r},...n},a=this.parser.parse(z.dump(t,{lineWidth:-1})),i=a.metadata.namespace_?.toString(),c=(await this.objectParser.parseKanonaks(new ne(a,this.repository))).filter(u=>u instanceof k&&u.namespace===i&&u.name!==ue);for(let u of c)u.namespace="ephemeral";return T(c)}},ue="__pkgbuilder_probe__";function le(o){return new TextEncoder().encode(o).length}function B(o){let e="sha256:",r=o.startsWith(e)?e.length:0;return`q-${o.slice(r,r+16)}`}var x=class{byKey=new Map;aliases=new Set;ensure(e,r,n,t,a=pe.Major){let i=`${e}/${r}@${n}`,s=this.byKey.get(i);if(s)return s.alias;let c=this.uniqueAlias(t);return this.byKey.set(i,{publisher:e,package_:r,version:n,alias:c,match:a}),c}ref(e){if(!e.version||typeof e.version.major!="number")throw new Error(`Cannot serialize a reference to ${e.publisher}/${e.package_}/${e.name} without a version.`);return`${this.ensure(e.publisher,e.package_,y(e.version),e.package_)}.${e.name}`}refLatest(e,r,n,t){return`${this.ensure(e,r,jn,t??r,pe.Any)}.${n}`}toImports(){let e=new Map;for(let n of this.byKey.values()){let t=e.get(n.publisher)??[];t.push(n),e.set(n.publisher,t)}return[...e.keys()].sort().map(n=>({publisher:n,packages:e.get(n).sort((t,a)=>t.package_<a.package_?-1:1).map(t=>({package:t.package_,match:_(t.match),version:t.version,alias:t.alias}))}))}uniqueAlias(e){let r=K(e)||"pkg",n=r,t=2;for(;this.aliases.has(n);)n=`${r}${t++}`;return this.aliases.add(n),n}};function de(o,e){if(o!=null){if(typeof o=="string"||typeof o=="number"||typeof o=="boolean")return o;if(o instanceof b)return e.ref(o.subject);if(Array.isArray(o)){let r=o.map(n=>de(n,e)).filter(n=>n!==void 0);return r.length>0?r:void 0}if(o instanceof f)throw new Error("Embedded values are not yet supported by PackageBuilder. Produce a literal or a reference, or compose the embedded shape into the output class.");if(An(o))throw new Error(`Value produced a bare URI without a version (${o.publisher}/${o.package_}/${o.name}); cannot serialize it as a reference.`)}}function K(o){return o.replace(/[^A-Za-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")}function An(o){return typeof o=="object"&&o!==null&&typeof o.publisher=="string"&&typeof o.package_=="string"&&typeof o.name=="string"}var A=class{constructor(e){this.producers=e}producers;produced=new Map;producerFor(e,r){return this.producers.find(n=>n.canProduce(e,r))}async produceCached(e,r,n,t){let a=`${r}/${n}@${y(t)}`,i=this.produced.get(a);if(i)return i;let{document:s}=await e.produce(r,n,t);return this.produced.set(a,s),s}async getHighestCompatibleVersionAsync(e,r){let n=this.producerFor(e,r.packageName);if(!n)return null;let t={operator:r.versionOperator,version:r.version},a=await n.resolveVersion(e,r.packageName,t);return a?this.produceCached(n,e,r.packageName,a):null}async getDocumentAsync(e){let r;try{r=M(e)}catch{return null}if(r.kind!=="package"||!r.version)return null;let n=this.producerFor(r.publisher,r.package_);return n?this.produceCached(n,r.publisher,r.package_,r.version):null}async getDocumentsByNamespaceAsync(e,r){return Array.from(this.produced.values()).filter(n=>{let t=n.metadata.namespace_;return t!=null&&t.publisher===e&&t.package_===r})}async getAllDocumentsAsync(){return Array.from(this.produced.values())}async saveDocumentAsync(e,r){throw new Error("ProducerRepository is read-only: a producer is a source, not a store.")}async deleteDocumentAsync(e){throw new Error("ProducerRepository is read-only: a producer is a source, not a store.")}async clearNamespaceAsync(e,r){throw new Error("ProducerRepository is read-only: a producer is a source, not a store.")}async getAllDocumentReferencesAsync(){return[]}async getDocumentContentAsync(e){return null}async getDocumentUriAsync(e){return null}};var H={async authorize(){return{allowed:!0}}},W={async record(){}},I=class extends Error{constructor(r,n){let t=`${r.publisher}/${r.package_}${r.version?`@${r.version.major}.${r.version.minor}.${r.version.patch}`:""}`;super(`Not entitled to produce ${t}${n?`: ${n}`:""}`);this.address=r;this.reason=n;this.name="EntitlementDeniedError"}address;reason},C=class{inner;ctx;policy;meter;constructor(e,r,n=H,t=W){this.inner=e,this.ctx=r,this.policy=n,this.meter=t}canProduce(e,r){return this.inner.canProduce(e,r)}async resolveVersion(e,r,n){return await this.assertAllowed({publisher:e,package_:r,version:n.version}),this.inner.resolveVersion(e,r,n)}async produce(e,r,n){let t={publisher:e,package_:r,version:n};await this.assertAllowed(t);let a=await this.inner.produce(e,r,n);return await this.meter.record(this.ctx,t,a),a}async assertAllowed(e){let r=await this.policy.authorize(this.ctx,e);if(!r.allowed)throw new I(e,r.reason)}};var p="kanonak.org",d="view",me="core-kanonak",Cn={publisher:p,package_:d,name:"rootView"},Sn={publisher:p,package_:d,name:"bind"},Dn={publisher:p,package_:d,name:"produces"},Un={publisher:p,package_:d,name:"projections"},On={publisher:p,package_:d,name:"where"},_n={publisher:p,package_:d,name:"value"},Mn={publisher:p,package_:d,name:"as"},S=class{constructor(e,r=new P){this.repository=e;this.parser=r;this.objectParser=new E(this.parser),this.builder=new g(this.repository,this.parser,this.objectParser)}repository;parser;objectParser;builder;async materialize(e,r={}){let n=await this.objectParser.parseKanonaks(this.repository),t=this.resolveView(n,e),a=w(t,Sn);if(!a)throw new Error(`View ${t.namespace}/${t.name} declares no view.bind; cannot materialize.`);let i=w(t,Dn);if(!i)throw new Error(`View ${t.namespace}/${t.name} is a selection view (no view.produces). In-graph materialization of selection views is not yet supported \u2014 declare a view.produces output class to reshape the result.`);let s=Nn(t),c=ye(n,p,me),u=ye(n,p,d),l=this.builder.imports(),D=l.ensure(p,me,c,"ck"),fe=l.ensure(p,d,u,"v"),ge=l.ref(i),he=new ce(this.repository,this.parser,this.objectParser),q=new ie(he,n),Pe=this.readProjections(n,t),be=Fn(t,On),Re=this.findInstances(n,a,await this.reason(r)),G={},we=new Set;for(let v of Re){if(!await this.passesWhere(q,n,be,v))continue;let O={type:ge};for(let Y of Pe){let Ee=await this.evaluateValue(q,n,Y.value,v),J=this.builder.serializeValue(ke(Ee),l);J!==void 0&&(O[l.ref(Y.as)]=J)}let X=m(v);X&&(O[`${fe}.derivedFrom`]=l.ref(X)),G[this.rowName(v,we)]=O}let U={};r.resolvedAt&&(U[`${D}.resolvedAt`]=r.resolvedAt),r.invocationId&&(U[`${D}.id`]=r.invocationId);let h=await this.builder.buildContentAddressed({publisher:s,book:l,body:G,contentHashProperty:`${D}.contentHash`,header:U});return{yaml:h.yaml,contentHash:h.contentHash,packageName:h.packageName,publisher:h.publisher,rowCount:h.resourceCount}}resolveView(e,r){let n=j(e,r);if(!n)throw new Error(`View ${r.publisher}/${r.package_}/${r.name} not found in the catalog.`);let t=w(n,Cn);if(t){let a=j(e,t);if(!a)throw new Error(`ViewPackage ${r.name} names rootView ${t.name}, which is not in the catalog.`);return a}return n}readProjections(e,r){let n=[];for(let t of $(r,Un)){let a=t instanceof f?t:t instanceof b?j(e,t.subject):void 0;if(!a)continue;let i=N(a,_n),s=w(a,Mn);i&&s&&n.push({value:i,as:s})}return n}async reason(e){return new L({profile:e.reasoningProfile??"owl-rl-classification"}).reason(this.repository)}findInstances(e,r,n){let t=Ln(e),a=[],i=new Set;for(let s of n.getInstancesOfClass(r)){if(i.has(s))continue;i.add(s);let c=t.get(s);c&&a.push(c)}return a.sort((s,c)=>{let u=R(m(s)),l=R(m(c));return u<l?-1:u>l?1:0}),a}async passesWhere(e,r,n,t){for(let a of n){let i=await this.evaluateValue(e,r,a,t);if(!Tn(i))return!1}return!0}async evaluateValue(e,r,n,t){let a=se(n,"view-projection",{catalog:r,depth:0}),i=new Map([["input",t]]);return e.evaluate(a,i)}rowName(e,r){let n=K(e.name)||"row",t=n,a=2;for(;r.has(t);)t=`${n}-${a++}`;return r.add(t),t}};function ke(o){return F(o)?o.value:Array.isArray(o)?o.map(ke):o}function Nn(o){let e=m(o);if(!e)throw new Error(`Could not derive a publisher from view ${o.namespace}/${o.name}.`);return e.publisher}function ye(o,e,r){let n=$n(o,e,r);if(!n)throw new Error(`Package ${e}/${r} is not in the catalog; it must be importable to materialize a view.`);return n}function $n(o,e,r){let n;for(let t of o){if(!(t instanceof k))continue;let a=m(t);!a||a.publisher!==e||a.package_!==r||!a.version||(!n||V(a.version,n)>0)&&(n=a.version)}return n?y(n):void 0}function Ln(o){let e=new Map,r=new Map;for(let n of o){if(!(n instanceof k))continue;let t=m(n);if(!t||!t.version)continue;let a=R(t),i=r.get(a);(!i||V(t.version,i)>0)&&(r.set(a,t.version),e.set(a,n))}return e}function Fn(o,e){let r=N(o,e);return r?[r]:$(o,e).filter(n=>n instanceof f)}function Tn(o){return o===!0?!0:o===!1||o===void 0||o===null?!1:typeof o=="string"?o.length>0:typeof o=="number"?o!==0:F(o)?o.value.length>0:Array.isArray(o)?o.length>0:!!o}export{cn as AmbiguousReferenceRule,ar as BooleanStatement,vn as CANONICAL_FORM_VERSION,wr as Carrier,yn as ClassDefinitionRule,en as ClassHierarchyCycleRule,Ue as CompositeKanonakDocumentRepository,hn as DEFAULT_CONSENT_BINDING_PARAM,Ze as DefinedKanonak,De as DocumentLocation,vr as EdgeType,f as EmbeddedKanonak,Jr as EmbeddedKanonakTypeRule,sr as EmbeddedStatement,I as EntitlementDeniedError,C as EntitlementProducer,Se as FileSystemKanonakDocumentRepository,Dr as GitIgnoreFilter,Vr as GraphBuilder,We as HttpKanonakDocumentRepository,Z as INTEGRITY_PREFIX,x as ImportBook,Zr as ImportExistenceRule,Ce as InMemoryKanonakDocumentRepository,Me as KANONAK_USER_AGENT,Je as Kanonak,Or as KanonakDocumentPositions,E as KanonakObjectParser,fn as KanonakObjectValidator,P as KanonakParser,Qe as KanonakUri,Nr as KanonakUriBuilder,$r as KanonakUrlResolver,fr as KanonakVocabulary,cr as ListStatement,er as LiteralKanonak,qe as LocalFirstRepository,Ge as LockAwareRepository,Kn as LookRenderer,kn as MarkdownLinkRule,pr as MarkdownStatement,an as NamespaceImportCycleRule,Wr as NamespacePrefixRule,Ir as NodeType,or as NumberStatement,Pn as OAuthDiscovery,Cr as OWL_RL_CLASSIFICATION_RULES,un as ObjectPropertyValueValidationRule,zr as OntologyValidationError,Fr as OntologyValidationResult,g as PackageBuilder,Yr as PackageHeaderRule,A as ProducerRepository,ln as PropertyDomainRule,rn as PropertyHierarchyCycleRule,dn as PropertyKindRangeConsistencyRule,Ur as PropertyMetadata,pn as PropertyRangeReferenceRule,nn as PropertyRangeRequiredRule,Gr as PropertyTypeSpecificityRule,ze as PublisherConfigResolver,Be as PublisherIndex,Ar as RDFS_RULES,L as Reasoner,Sr as ReasoningResult,b as ReferenceKanonak,ir as ReferenceStatement,_e as RepositoryFactory,mn as ReservedNameShadowRule,qr as ResourceNamingRule,ur as ResourceResolver,gr as ResourceTypeClassifier,nr as ScalarStatement,rr as Statement,tr as StringStatement,tn as SubClassOfReferenceRule,on as SubPropertyOfReferenceRule,k as SubjectKanonak,Xr as SubjectKanonakTypeRequiredRule,wn as TokenCredentialProvider,jr as TripleStore,lr as TypeResolver,sn as UnresolvedPredicateRule,Qr as UnresolvedReferenceRule,Hr as ValidationCache,Br as ValidationContext,Tr as ValidationSeverity,$t as VersionOperator,S as ViewMaterializer,H as allowAllPolicy,Le as assertHttpsUrl,He as assertPackageIdentity,Ye as buildLocalFirstRepository,Vn as buildOntologyModel,In as canonicalForm,T as canonicalHash,Er as carrierOf,Xe as collectKanonakFiles,V as compareVersions,ae as computeIntegrity,re as computeIntegrityAsync,B as contentAddressedName,Rr as contextTypesOf,Rn as createCredentialedFetch,Ie as createVersion,Kr as extractMarkdownLinks,En as findDerivation,Lr as findInstancesByType,xr as findMalformedReferences,Mr as findMarkdownLinkAt,dr as formatKanonakAddress,y as formatVersion,Oe as getGlobalCachePath,$e as getKanonakUserAgent,Ve as isCompatibleVersion,je as isMajorCompatible,Fe as kanonakFetch,te as loadLockFile,mr as makeUriKey,W as noopMeter,gn as normalizeHost,bn as parseAuthChallenge,M as parseKanonakAddress,Q as parseLockFile,ve as parseVersionString,_r as parseWithPositions,Ae as pickHighestDocument,Pr as propertiesInScope,xn as resolveDisplayValue,br as resolvePropertyStep,K as sanitizeName,oe as saveLockFile,ee as serializeLockFile,Te as setKanonakFetchRetries,Ne as setKanonakUserAgent,m as subjectUri,hr as superClassChain,yr as tripleKey,R as uriKey,kr as uriTriple,xe as versionOperatorFromChar,_ as versionOperatorToChar,Ke as versionsEqual};
@@ -1,4 +1,4 @@
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.
1
+ import{a as g}from"../chunk-P36E2UV6.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,12 +1,43 @@
1
1
  import type { IKanonakDocumentRepository, KanonakDocument, DocumentReference, Import } from '@kanonak-protocol/types/document/models';
2
+ /**
3
+ * An import edge the closure walk could not resolve to a compatible document.
4
+ * Surfaced to the caller so a partial closure is VISIBLE — a package whose
5
+ * import fails still parses, but every statement authored against the missing
6
+ * package's entities drops into `unresolvedPredicates`, which downstream reads
7
+ * as e.g. a band-less look and an empty page (typescript#91). The edge names
8
+ * exactly what to fix.
9
+ */
10
+ export interface UnresolvedImportEdge {
11
+ /** `publisher/package@version` of the document declaring the import. */
12
+ readonly fromNamespace: string;
13
+ /** The imported package's publisher. */
14
+ readonly publisher: string;
15
+ /** The imported package's name. */
16
+ readonly packageName: string;
17
+ /** The declared constraint, e.g. `^1.21.0`. */
18
+ readonly constraint: string;
19
+ /** Why: no version in the repository satisfies it, or resolution threw. */
20
+ readonly reason: 'no-compatible-version' | 'resolution-error';
21
+ }
22
+ export interface DeriveImportClosureOptions {
23
+ /**
24
+ * Called once per import edge the walk cannot resolve. The walk still
25
+ * proceeds (a render is more useful degraded than absent), but the caller
26
+ * MUST surface these — loadServerModel/loadResourceModel thread them into
27
+ * `RenderStackReport.warnings`; silence is how typescript#91 shipped.
28
+ */
29
+ onUnresolvedEdge?: (edge: UnresolvedImportEdge) => void;
30
+ }
2
31
  /**
3
32
  * The transitive import closure of `seedDocs`, as a set of `publisher/package`
4
33
  * keys: every package reachable by following `imports:` recursively, each import
5
34
  * resolved through `repo`. This is exactly the set of packages a render needs —
6
35
  * what makes a render a pure function of its seed, independent of whatever else
7
- * happens to be in the global cache. Unresolved imports are skipped (the page
8
- * still renders, just without that layer). Cross-publisher imports are followed
9
- * (an import names its own publisher), so the closure can span publishers.
36
+ * happens to be in the global cache. Unresolved imports are reported through
37
+ * `options.onUnresolvedEdge` and then skipped (the page still renders, just
38
+ * without that layer and the report is what keeps that degradation visible).
39
+ * Cross-publisher imports are followed (an import names its own publisher), so
40
+ * the closure can span publishers.
10
41
  *
11
42
  * Resolving every import through `repo` has a deliberate side effect on a
12
43
  * tiered repository: an import only the HTTP tier can satisfy is fetched (and
@@ -14,7 +45,7 @@ import type { IKanonakDocumentRepository, KanonakDocument, DocumentReference, Im
14
45
  * enumerates the full closure. `ValidationCache` relies on this to build a
15
46
  * complete catalog on a cold cache.
16
47
  */
17
- export declare function deriveImportClosure(seedDocs: KanonakDocument[], repo: IKanonakDocumentRepository): Promise<Set<string>>;
48
+ export declare function deriveImportClosure(seedDocs: KanonakDocument[], repo: IKanonakDocumentRepository, options?: DeriveImportClosureOptions): Promise<Set<string>>;
18
49
  /**
19
50
  * Wraps a repository so the catalog enumeration (`getAllDocumentsAsync`) yields
20
51
  * ONLY documents whose `publisher/package` is in `scope` — a render's resolved
@@ -5,6 +5,7 @@ export { route } from './route.js';
5
5
  export { RequestRouter, landingPage } from './requestRouter.js';
6
6
  export type { RequestRouterOptions } from './requestRouter.js';
7
7
  export { deriveImportClosure, ClosureScopedRepository } from './closure.js';
8
+ export type { UnresolvedImportEdge, DeriveImportClosureOptions } from './closure.js';
8
9
  export { UNIVERSAL_RENDER_BASE, resolveRenderContract, renderRefKey, buildRenderStackWarnings, } from './renderStack.js';
9
10
  export type { RenderPackageRef, RenderPackageStatus, RenderStackReport, } from './renderStack.js';
10
11
  export { buildRenderDiagnostics, renderDiagnosticsHtml } from './renderDiagnostics.js';
@@ -1,7 +1,7 @@
1
- import{c as we}from"../chunk-35A2VF5S.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-RLQFTA5D.js";import{e as ke,g as ye,m as G,n as X}from"../chunk-W35FCNM7.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
- `),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
- `),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
- `),k=t.catalog.map(c=>`<tr><td><code>${e(c.namespace)}</code></td><td>${c.resources}</td></tr>`).join(`
1
+ import{c as Pe}from"../chunk-35A2VF5S.js";import{j as oe}from"../chunk-P36E2UV6.js";import"../chunk-QHABFCRC.js";import{a as be,d as X,f as Se,h as ee}from"../chunk-RLQFTA5D.js";import{e as ve,g as $e,m as U,n as Z}from"../chunk-W35FCNM7.js";import{a as ye}from"../chunk-4NO7MHS7.js";import"../chunk-PEUTCG3B.js";import{a as xe}from"../chunk-PEJALHXK.js";import"../chunk-SC5M74NM.js";import{a as H,b as G}from"../chunk-M443OYKT.js";import{m as te}from"../chunk-V6KIDED2.js";import{a as O}from"../chunk-NJ3AZYQD.js";import{c as Re}from"../chunk-SVUMCLK5.js";import{c as we,s as re}from"../chunk-YW6P24RF.js";import"../chunk-FUUTGGJS.js";import{c as V,e as K,f as W,g as ke}from"../chunk-2ACBWC7K.js";import{readFileSync as de,writeFileSync as Ce,mkdirSync as Fe}from"fs";import{join as se}from"path";import Me from"js-yaml";var _e=[{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 q(t){return _e}function N(t){return`${t.publisher}/${t.package_}`}function z(t,e=[]){let c={"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"},r=[];for(let o of t)if(o.origin==="missing"){let s=N(o),m=c[s]??"whatever this package contributes to rendering is lost";r.push(`Render-stack package ${s} is MISSING (${o.reason??"unknown reason"}) \u2014 ${m}. Fix: kanonak install ${s} (as the user running the render), or restore network access to ${o.publisher}.`)}else o.resolvedButNotInCatalog&&r.push(`Render-stack package ${N(o)} resolved (${o.origin}) but is NOT in the parsed catalog \u2014 this is a closure-scoping bug; please report it.`);for(let o of e)r.push(`Import edge ${o.fromNamespace} \u2192 ${o.publisher}/${o.packageName} ${o.constraint} did NOT resolve (${o.reason==="no-compatible-version"?"no compatible version in the repository":"resolution threw"}) \u2014 every statement ${o.fromNamespace} authors against ${o.publisher}/${o.packageName} entities is dropped from the parse as an unresolved predicate (a look declaration loses its bands and pages render empty; see typescript#91). Fix: add a ${o.constraint}-compatible version of ${o.publisher}/${o.packageName} to the workspace or cache (kanonak install ${o.publisher}/${o.packageName}), or bump the import in ${o.fromNamespace}.`);return r}function ne(t){let{publisher:e,availablePublishers:c,catalog:r,lookRenderer:o,localNamespaces:s,rawByNsKey:m,renderStack:d,producers:f,lockSource:l,configSource:h}=t,a=new Map,g=new Map,S=new Map,v=new Set;for(let $ of r){if(!($ instanceof we))continue;let w=$.namespace||"";if(!s.has(w))continue;a.set(`${w}/${$.name}`,$);let P=w.split("/")[1]??"",[_,M]=P.split("@");if(!_||!M)continue;let D=ke(M);D&&(v.has(P)||(v.add(P),g.has(_)||g.set(_,[]),g.get(_).push({verStr:M,version:D})),$.name===_&&S.set(P,$))}for(let $ of g.values())$.sort((w,P)=>V(P.version,w.version));return{publisher:e,availablePublishers:c,catalog:r,lookRenderer:o,localNamespaces:s,rawByNsKey:m,bySubject:a,pkgVersions:g,pkgSelfByVer:S,renderStack:d,...f?{producers:f}:{},...l?{lockSource:l}:{},...h?{configSource:h}:{}}}async function pe(t,e={}){let c=new O,r=new ye(c),o=[],s=[];for(let i of ee(t)){let u;try{u=de(i,"utf-8")}catch{continue}let n;try{n=c.parse(u).metadata?.namespace_}catch{continue}if(!n?.version)continue;let p=n.version;s.push({publisher:n.publisher,package_:n.package_,verStr:K(p),version:p,source:u})}s.sort((i,u)=>V(u.version,i.version));for(let i of s)await r.saveDocumentAsync(c.parse(i.source),`${i.publisher}/${i.package_}@${i.verStr}`),o.push({publisher:i.publisher,package_:i.package_,verStr:i.verStr,source:i.source});let m=[...new Set(o.map(i=>i.publisher))].sort(),d=e.publisher;if(d){if(!m.includes(d))throw new Error(`Publisher "${d}" not found in workspace. Available: ${m.join(", ")||"(none)"}`)}else if(m.length===1)d=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 f=new Set,l=new Map;for(let i of o)i.publisher===d&&(f.add(`${i.publisher}/${i.package_}@${i.verStr}`),l.set(`${i.package_}@${i.verStr}`,i.source));let h=X(),a=new be(h,!0,c),g={};e.httpCache&&(g.getFromCache=e.httpCache.getFromCache,g.onFetch=e.httpCache.onFetch),e.fetchFn&&(g.fetchFn=e.fetchFn);let S=e.repository??new Se(r,a,new Z(g)),v=e.log??(()=>{}),$=q(void 0),w=[],P=i=>i.map(u=>u.metadata.namespace_?.version).filter(u=>u!==void 0).sort((u,n)=>V(n,u)).map(K);if(!e.repository){v(`[render-stack] resolving ${$.length} ambient look-stack package(s); cache: ${h}`);let i=e.fetchFn?new U({fetchFn:e.fetchFn}):new U;for(let u of $){let n=N(u),p=await r.getDocumentsByNamespaceAsync(u.publisher,u.package_);if(p.length>0){let y=P(p);w.push({...u,origin:"workspace",versions:y}),v(`[render-stack] ${n} \u2014 workspace (${y.join(", ")})`);continue}let k=await a.getDocumentsByNamespaceAsync(u.publisher,u.package_);if(k.length>0){let y=P(k);w.push({...u,origin:"cache",versions:y}),v(`[render-stack] ${n} \u2014 cache (${y.join(", ")})`);continue}try{let b=(await i.getLock(u.publisher))?.packages[`${u.publisher}/${u.package_}`];if(!b){let j=`publisher ${u.publisher} reachable but its lock does not pin ${u.package_}`;w.push({...u,origin:"missing",reason:j}),v(`[render-stack] ${n} \u2014 MISSING: ${j}`);continue}let C=b.version,T=b.resolved,Q=await(e.fetchFn?e.fetchFn(T,u.publisher):ve(T));if(!Q.ok){let j=`fetch ${T} failed: HTTP ${Q.status} ${Q.statusText}`;w.push({...u,origin:"missing",reason:j}),v(`[render-stack] ${n} \u2014 MISSING: ${j}`);continue}let fe=await Q.text();await r.saveDocumentAsync(c.parse(fe),`${u.publisher}/${u.package_}@${C}`);try{let j=se(h,u.publisher);Fe(j,{recursive:!0}),Ce(se(j,`${u.package_}@${C}.kan.yml`),fe,"utf-8"),w.push({...u,origin:"fetched",versions:[C]}),v(`[render-stack] ${n}@${C} \u2014 fetched from ${T}, installed to cache`)}catch(j){w.push({...u,origin:"fetched",versions:[C]}),v(`[render-stack] ${n}@${C} \u2014 fetched from ${T}, but cache ${h} is NOT WRITABLE (${j.message}); usable for this load only \u2014 every load will re-fetch it`)}}catch(y){let b=`fetch failed: ${y.message}`;w.push({...u,origin:"missing",reason:b}),v(`[render-stack] ${n} \u2014 MISSING: ${b}`)}}}let _=(await r.getAllDocumentsAsync()).filter(i=>i.metadata.namespace_?.publisher===d);for(let i of $)_.push(...await S.getDocumentsByNamespaceAsync(i.publisher,i.package_));let M=[],D=await H(_,S,{onUnresolvedEdge:i=>M.push(i)}),A=S;if(!e.repository){for(let i of $)D.add(N(i));A=new G(S,D)}let B=await new te(c).parseKanonaks(A),ce=new oe(B),le=(i,u)=>re(B,{publisher:i,package_:u,name:u}).length>0,I;if(e.repository){I=[];for(let i of $){let u=await S.getDocumentsByNamespaceAsync(i.publisher,i.package_);I.push(u.length>0?{...i,origin:"repository",versions:P(u)}:{...i,origin:"missing",reason:"not present in the caller-supplied repository"})}}else I=w.map(i=>i.origin==="missing"||le(i.publisher,i.package_)?i:{...i,resolvedButNotInCatalog:!0});let Y=z(I,M);for(let i of Y)v(`[render-stack] WARNING: ${i}`);let J={contractSource:"universal-default",cachePath:h,packages:I,warnings:Y},E;try{E=de(se(t,"kanonak.lock"),"utf-8")}catch{E=De(d,o,c)}let L;try{L=de(se(t,".well-known","kanonak.json"),"utf-8")}catch{L=void 0}return ne({publisher:d,availablePublishers:m,catalog:B,lookRenderer:ce,localNamespaces:f,rawByNsKey:l,renderStack:J,...E?{lockSource:E}:{},...L?{configSource:L}:{}})}function De(t,e,c){let r=new Map;for(let s of e)s.publisher===t&&(r.has(s.package_)||r.set(s.package_,{verStr:s.verStr,source:s.source}));if(r.size===0)return;let o={};for(let s of[...r.keys()].sort()){let{verStr:m,source:d}=r.get(s),f={},l;try{l=c.parse(d).metadata?.imports}catch{l=void 0}for(let a of l?.[t]??[]){let g=r.get(a.packageName);g&&(f[`${t}/${a.packageName}`]=g.verStr)}let h={};for(let a of Object.keys(f).sort())h[a]=f[a];o[`${t}/${s}`]={version:m,resolved:`https://${t}/${s}/${m}.kan.yml`,integrity:Pe(d),dependencies:h}}return Me.dump({version:"1",lastUpdated:"",packages:o},{lineWidth:-1,sortKeys:!1,quotingType:'"'})}import{existsSync as Ke,readFileSync as Ee,writeFileSync as Ve,mkdirSync as Ae}from"fs";import{join as je}from"path";async function ue(t,e={}){let c=new O,r=Re(t),o=r.kind==="resource"?r.uri.publisher:r.publisher,s=e.log??(()=>{}),m=e.cacheRoot??X(),d=(n,p,k)=>je(m,n,`${p}@${k}.kan.yml`),f=new Set,l=new Set,h=new Map,a=new Z({getFromCache:(n,p,k)=>{let y=d(n,p,k),b=Ke(y)?Ee(y,"utf-8"):null;return b!==null&&f.add(`${n}/${p}`),b},onFetch:(n,p,k,y)=>{l.add(`${n}/${p}`);try{let b=je(m,n);Ae(b,{recursive:!0}),Ve(d(n,p,k),y,"utf-8")}catch(b){h.set(`${n}/${p}`,b.message),s(`[render] fetched ${n}/${p}@${k} 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 U(e.fetchFn?{fetchFn:e.fetchFn}:void 0),S;if(r.kind==="resource"){let n=r.uri.version;S=[n?{package_:r.uri.package_,version:`${n.major}.${n.minor}.${n.patch}`}:{package_:r.uri.package_}]}else if(r.kind==="package"){let n=r.version;S=[n?{package_:r.package_,version:`${n.major}.${n.minor}.${n.patch}`}:{package_:r.package_}]}else S=((await g.getConfig(o)).featured_packages??[]).map(p=>({package_:p}));let v=async(n,p,k)=>{try{let y=k?c.buildImport(p,"=",k,n):c.buildImport(p,"*","0.0.0",n),b=await a.getHighestCompatibleVersionAsync(n,y);return b?{doc:b}:{doc:null,error:`${n} did not resolve ${p}${k?`@${k}`:""} (not in its index, or unreachable)`}}catch(y){return{doc:null,error:y.message}}},$=[],w=[];for(let n of S){let{doc:p,error:k}=await v(o,n.package_,n.version);p?$.push(p):k&&w.push(k)}if($.length===0)throw new Error(`Could not fetch any package for address "${t}" from publisher "${o}".`+(w.length>0?` Reasons: ${w.join("; ")}`:""));let P=q(),_="universal-default",M=n=>n.map(p=>p.metadata.namespace_?.version).filter(p=>p!==void 0).sort((p,k)=>V(k,p)).map(K);s(`[render-stack] resolving ${P.length} ambient look-stack package(s) (contract: ${_}); cache: ${m}`);let D=[],A=[];for(let n of P){let p=N(n),{doc:k,error:y}=await v(n.publisher,n.package_,void 0);if(k){D.push(k);let b=M([k]),C=l.has(p)?"fetched":f.has(p)?"cache":"fetched";A.push({...n,origin:C,versions:b}),s(`[render-stack] ${p} \u2014 ${C} (${b.join(", ")})`+(h.has(p)?" [cache write FAILED \u2014 will re-fetch next load]":""))}else A.push({...n,origin:"missing",reason:y??"unresolved"}),s(`[render-stack] ${p} \u2014 MISSING: ${y??"unresolved"}`)}let B=[],ce=await H([...$,...D],a,{onUnresolvedEdge:n=>B.push(n)}),le=new G(a,ce),I=await new te(c).parseKanonaks(le),Y=new oe(I),J=A.map(n=>n.origin==="missing"||re(I,{publisher:n.publisher,package_:n.package_,name:n.package_}).length>0?n:{...n,resolvedButNotInCatalog:!0}),E=z(J,B);for(let n of E)s(`[render-stack] WARNING: ${n}`);let L={contractSource:_,cachePath:m,packages:J,warnings:E},i=new Set,u=new Map;for(let n of await a.getAllDocumentsAsync()){let p=n.metadata.namespace_;if(!p?.version||p.publisher!==o)continue;let k=K(p.version),y=`${p.publisher}/${p.package_}@${k}`;i.add(y);let b=await a.getDocumentContentAsync(y);b!==null&&u.set(`${p.package_}@${k}`,b)}return ne({publisher:o,availablePublishers:[o],catalog:I,lookRenderer:Y,localNamespaces:i,rawByNsKey:u,renderStack:L})}import{VersionOperator as ie}from"@kanonak-protocol/types/document/models/enums";function ae(t){let{lookRenderer:e,publisher:c,renderStack:r,catalog:o}=t,s=e.explainStylesheet(e.publisherSubject(c)),m=[...s.tokens.entries()].map(([a,g])=>({name:a,value:g.value,source:`${g.sourceNamespace}/${g.sourceName}`,level:g.level})),d=s.baseStylesheet,f={present:d.css!==void 0,...d.sourceNamespace!==void 0?{source:d.sourceNamespace}:{},...d.scope!==void 0?{scope:d.scope}:{},...d.css!==void 0?{bytes:d.css.length}:{},...d.problem!==void 0?{problem:d.problem}:{},candidates:d.candidates},l=new Map;for(let a of o){let g=a.namespace;g&&l.set(g,(l.get(g)??0)+1)}let h=[...l.entries()].map(([a,g])=>({namespace:a,resources:g})).sort((a,g)=>a.namespace.localeCompare(g.namespace));return{publisher:c,renderStack:{contractSource:r.contractSource,cachePath:r.cachePath,packages:r.packages.map(a=>({package_:N(a),origin:a.origin,...a.versions!==void 0?{versions:a.versions}:{},...a.reason!==void 0?{reason:a.reason}:{},...a.resolvedButNotInCatalog!==void 0?{resolvedButNotInCatalog:a.resolvedButNotInCatalog}:{}}))},stylesheet:{tokens:m,baseStylesheet:f,...s.look?{look:{sourceClass:`${s.look.sourceClass.publisher}/${s.look.sourceClass.package_}/${s.look.sourceClass.name}`}}:{}},catalog:h,warnings:[...r.warnings,...s.warnings.filter(a=>!r.warnings.includes(a))]}}function Be(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function ge(t){let e=Be,c=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(l=>`<div class="warn">\u26A0 ${e(l)}</div>`).join(`
2
+ `),o=t.renderStack.packages.map(l=>{let h=l.origin!=="missing"&&!l.resolvedButNotInCatalog,a=l.origin==="missing"?'<span class="bad">MISSING</span>':l.resolvedButNotInCatalog?`<span class="bad">${e(l.origin)} (not in catalog)</span>`:`<span class="good">${e(l.origin)}</span>`,g=l.reason?e(l.reason):e((l.versions??[]).join(", "));return`<tr class="${h?"":"row-bad"}"><td><code>${e(l.package_)}</code></td><td>${a}</td><td>${g}</td></tr>`}).join(`
3
+ `),s=t.stylesheet.baseStylesheet,m=s.present?`<p><span class="good">\u2713 present</span> \u2014 <code>${e(s.source??"")}</code> (${s.bytes} bytes, ${e(s.scope??"")})</p>`:`<p><span class="bad">\u2717 MISSING</span>${s.problem?` \u2014 ${e(s.problem)}`:""}${s.candidates.length>0?`<br>candidates considered: ${s.candidates.map(l=>`<code>${e(l)}</code>`).join(", ")}`:""}</p><p>Without the base stylesheet, generated CSS stops at the <code>:root</code> token block and pages appear unstyled.</p>`,d=t.stylesheet.tokens.map(l=>`<tr><td><code>--kan-${e(l.name)}</code></td><td><code>${e(l.value)}</code></td><td><code>${e(l.source)}</code></td><td>${e(l.level)}</td></tr>`).join(`
4
+ `),f=t.catalog.map(l=>`<tr><td><code>${e(l.namespace)}</code></td><td>${l.resources}</td></tr>`).join(`
5
5
  `);return`<!doctype html>
6
6
  <html lang="en">
7
7
  <head>
@@ -21,12 +21,12 @@ import{c as we}from"../chunk-35A2VF5S.js";import{j as te}from"../chunk-4PY3JJH3.
21
21
  .row-bad td { background: #fff5f5; }
22
22
  .meta { color: #666; font-size: .85rem; }
23
23
  .status-banner { font-size: 1.1rem; padding: .5rem 1rem; border-radius: 6px; display: inline-block; margin-bottom: 1rem;
24
- background: ${s?"#ecfdf3":"#fef2f2"}; border: 1px solid ${s?"#0a7d33":"#b91c1c"}; }
24
+ background: ${c?"#ecfdf3":"#fef2f2"}; border: 1px solid ${c?"#0a7d33":"#b91c1c"}; }
25
25
  </style>
26
26
  </head>
27
27
  <body>
28
28
  <h1>Render diagnostics \u2014 ${e(t.publisher)}</h1>
29
- <p class="status-banner">${s?"\u2713 Healthy":`\u2717 ${t.warnings.length} problem(s) found`}</p>
29
+ <p class="status-banner">${c?"\u2713 Healthy":`\u2717 ${t.warnings.length} problem(s) found`}</p>
30
30
  <p class="meta">Machine-readable version: <a href="/.well-known/kanonak-render.json"><code>/.well-known/kanonak-render.json</code></a></p>
31
31
 
32
32
  <h2>Problems</h2>
@@ -37,7 +37,7 @@ ${r}
37
37
  Contract: <code>${e(t.renderStack.contractSource)}</code> \xB7 Package cache: <code>${e(t.renderStack.cachePath)}</code></p>
38
38
  <table>
39
39
  <tr><th>Package</th><th>Origin</th><th>Versions / reason</th></tr>
40
- ${i}
40
+ ${o}
41
41
  </table>
42
42
 
43
43
  <h2>Base stylesheet</h2>
@@ -48,7 +48,7 @@ ${m}
48
48
  <p class="meta">Resolved for the publisher landing page. Each token shows which resource in the cascade supplied it.</p>
49
49
  ${t.stylesheet.tokens.length===0?'<p><span class="bad">\u2717 No tokens resolved</span></p>':`<table>
50
50
  <tr><th>Token</th><th>Value</th><th>Declared by</th><th>Cascade level</th></tr>
51
- ${p}
51
+ ${d}
52
52
  </table>`}
53
53
 
54
54
  <h2>Look (page body)</h2>
@@ -58,7 +58,7 @@ ${t.stylesheet.look?`<p><span class="good">\u2713</span> Bands resolve from <cod
58
58
  <p class="meta">Everything the renderer can see for this publisher \u2014 the served packages, their import closure, and the ambient render stack.</p>
59
59
  <table>
60
60
  <tr><th>Package version</th><th>Resources</th></tr>
61
- ${k}
61
+ ${f}
62
62
  </table>
63
63
  </body>
64
- </html>`}var x={".html":"text/html; charset=utf-8",".css":"text/css; charset=utf-8",".svg":"image/svg+xml",".md":"text/markdown; charset=utf-8",".kan.yml":"application/yaml; charset=utf-8",".txt":"text/plain; charset=utf-8",".json":"application/json; charset=utf-8"},P=(t,e,s,r)=>({status:t,headers:{"Content-Type":e,...r||{}},body:s}),M=t=>P(404,x[".html"],`<!doctype html><meta charset=utf-8><title>404</title><h1>404</h1><p>Not found: ${t}</p>`),Ae=t=>({status:301,headers:{Location:t},body:""}),Ee=t=>({status:302,headers:{Location:t},body:""});function Le(t){switch(t.kind){case"exact":return{operator:ae.Exact,version:H(t.major,t.minor,t.patch)};case"minor-pin":return{operator:ae.Compatible,version:H(t.major,t.minor,0)};case"major-pin":return{operator:ae.Major,version:H(t.major,0,0)};default:return{operator:ae.Any,version:H(0,0,0)}}}async function Be(t,e,s,r){if(!r)return null;let i=t.producers?.find(k=>k.canProduce(t.publisher,e));if(!i)return null;let o=await i.resolveVersion(t.publisher,e,Le(s));if(!o)return null;let m=D(o);if(s.kind!=="exact")return Ee(`/${e}/${m}.kan.yml`);let{source:p}=await i.produce(t.publisher,e,o);return P(200,x[".kan.yml"],p)}function Pe(t,e,s){let r=t.pkgVersions.get(e);if(!r||r.length===0)return null;switch(s.kind){case"any":return r[0].verStr;case"major-pin":return r.find(i=>i.version.major===s.major)?.verStr??null;case"minor-pin":return r.find(i=>i.version.major===s.major&&i.version.minor===s.minor)?.verStr??null;case"exact":return r.find(i=>i.version.major===s.major&&i.version.minor===s.minor&&i.version.patch===s.patch)?.verStr??null;default:return null}}async function pe(t,e,s=""){let{lookRenderer:r,publisher:i}=t;if(e==="/.well-known/kanonak.json")return t.configSource?P(200,x[".json"],t.configSource):P(200,x[".json"],JSON.stringify(ye(),null,2));if(e==="/kanonak.lock")return t.lockSource?P(200,x[".kan.yml"],t.lockSource):M(e);if(e==="/.well-known/kanonak-render.json")return P(200,x[".json"],JSON.stringify(se(t),null,2));if(e==="/.well-known/kanonak-render")return P(200,x[".html"],de(se(t)));if(e==="/"||e==="/index.html"||e==="/index.css"){let n=r.publisherSubject(i);return e==="/index.css"?P(200,x[".css"],r.renderStylesheet(n)):P(200,x[".html"],await r.renderDocument(n,{rootIndex:!0}))}let o=".html",m=!1,p=e;for(let n of[".kan.yml",".css",".svg",".md",".html"])if(e.endsWith(n)){o=n,m=!0,p=e.slice(0,-n.length);break}let k=!m&&/application\/yaml|text\/yaml/i.test(s),c=p.endsWith("/");c&&p!=="/"&&(p=p.slice(0,-1));let h=$e.parse(p,i);if(!h)return M(e);if(h.kind==="package"){let n=Pe(t,h.package_,h.versionSpec);if(!n)return await Be(t,h.package_,h.versionSpec,o===".kan.yml"||k)??M(e);if(o===".kan.yml"||k){let v=t.rawByNsKey.get(`${h.package_}@${n}`);return v!==void 0?P(200,x[".kan.yml"],v):M(e)}let g=t.pkgSelfByVer.get(`${h.package_}@${n}`);if(!g)return M(e);if(o===".css")return P(200,x[".css"],r.renderStylesheet(g));if(!c)return Ae(p+"/");let w=h.versionSpec.kind==="any";if(w&&!r.hasDeclaredView(g)){let v=(t.pkgVersions.get(h.package_)||[]).map($=>$.verStr);return P(200,x[".html"],r.renderPackageVersionList(h.package_,v,g))}return P(200,x[".html"],await r.renderDocument(g,w?{bareOverview:!0}:void 0))}if(h.kind==="resource"){let n=Pe(t,h.package_,h.versionSpec);if(!n)return M(e);let g=t.bySubject.get(`${i}/${h.package_}@${n}/${h.name}`);if(!g)return M(e);switch(o){case".css":return P(200,x[".css"],r.renderStylesheet(g));case".svg":return P(200,x[".svg"],await r.renderSvg(g));case".md":{let w=r.renderRawMarkdown(g);return w===void 0?M(e):P(200,x[".md"],w)}default:return P(200,x[".html"],await r.renderDocument(g))}}return M(e)}import{readFileSync as Oe}from"fs";var ue=class{constructor(e={}){this.options=e}options;models=new Map;workspaceIndex;clearCache(){this.models.clear(),this.workspaceIndex=void 0}getWorkspaceIndex(){if(this.workspaceIndex)return this.workspaceIndex;let e=new Set,s=new Set;if(this.options.root!==void 0){let r=new O;for(let i of Z(this.options.root))try{let o=r.parse(Oe(i,"utf-8")).metadata?.namespace_;if(!o?.version)continue;let m=o.version;e.add(`${o.publisher}/${o.package_}@${m.major}.${m.minor}.${m.patch}`),s.add(`${o.publisher}/${o.package_}`)}catch{}}return this.workspaceIndex={exact:e,pkgs:s},this.workspaceIndex}async modelFor(e,s,r){let i=this.getWorkspaceIndex(),o={...this.options.fetchFn?{fetchFn:this.options.fetchFn}:{},...this.options.log?{log:this.options.log}:{}},m=s?r?i.exact.has(`${e}/${s}@${r}`):i.pkgs.has(`${e}/${s}`):[...i.pkgs].some(n=>n.startsWith(`${e}/`)),p,k;if(m&&this.options.root!==void 0){let n=this.options.root;p=`ws:${e}`,k=()=>ce(n,{publisher:e,...this.options.log?{log:this.options.log}:{}})}else{let n=s?r?`${e}/${s}@${r}`:`${e}/${s}`:e;p=`rm:${n}`,k=()=>le(n,o)}let c=this.models.get(p);if(c)return c;let h=await k();return h.lookRenderer.setLinkMode("open-world"),this.models.set(p,h),h}async handle(e,s=""){let r=e.split("/").filter(Boolean);if(r.length===0)return{status:200,headers:{"Content-Type":"text/html; charset=utf-8"},body:_e()};let i=r[0];if(!i.includes("."))return{status:404,headers:{"Content-Type":"text/html; charset=utf-8"},body:"<!doctype html><meta charset=utf-8><title>404</title><h1>404</h1><p>Expected a publisher domain as the first path segment: <code>/{publisher}/{package}/{version}/{resource}</code></p>"};let o=r.length>=2&&(r[1]==="index.html"||r[1]==="index.css"||r[1]==="index.txt"||r[1]===".well-known"),m=!o&&r.length>=2?r[1]:void 0,p=!o&&r.length>=3&&/^\d+\.\d+\.\d+$/.test(r[2])?r[2]:void 0,k=await this.modelFor(i,m,p),c=e.endsWith("/")&&r.length>1?"/":"",h="/"+r.slice(1).join("/")+c,n=await pe(k,h,s);return n.headers.Location?{...n,headers:{...n.headers,Location:`/${i}${n.headers.Location}`}}:n}};function _e(){return'<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Kanonak origin</title></head><body style="font-family:system-ui;max-width:40rem;margin:4rem auto;padding:0 1rem"><h1>Kanonak request-driven origin</h1><p>Open a resource by its address:</p><p><code>/{publisher}/{package}/{version}/{resource}</code></p><p>e.g. <code>/kanonak.org/capabilities/2.0.0/Capability</code></p></body></html>'}export{z as ClosureScopedRepository,ue as RequestRouter,Re as UNIVERSAL_RENDER_BASE,se as buildRenderDiagnostics,Y as buildRenderStackWarnings,q as deriveImportClosure,_e as landingPage,le as loadResourceModel,ce as loadServerModel,de as renderDiagnosticsHtml,F as renderRefKey,U as resolveRenderContract,pe as route};
64
+ </html>`}var R={".html":"text/html; charset=utf-8",".css":"text/css; charset=utf-8",".svg":"image/svg+xml",".md":"text/markdown; charset=utf-8",".kan.yml":"application/yaml; charset=utf-8",".txt":"text/plain; charset=utf-8",".json":"application/json; charset=utf-8"},x=(t,e,c,r)=>({status:t,headers:{"Content-Type":e,...r||{}},body:c}),F=t=>x(404,R[".html"],`<!doctype html><meta charset=utf-8><title>404</title><h1>404</h1><p>Not found: ${t}</p>`),Le=t=>({status:301,headers:{Location:t},body:""}),Oe=t=>({status:302,headers:{Location:t},body:""});function Te(t){switch(t.kind){case"exact":return{operator:ie.Exact,version:W(t.major,t.minor,t.patch)};case"minor-pin":return{operator:ie.Compatible,version:W(t.major,t.minor,0)};case"major-pin":return{operator:ie.Major,version:W(t.major,0,0)};default:return{operator:ie.Any,version:W(0,0,0)}}}async function We(t,e,c,r){if(!r)return null;let o=t.producers?.find(f=>f.canProduce(t.publisher,e));if(!o)return null;let s=await o.resolveVersion(t.publisher,e,Te(c));if(!s)return null;let m=K(s);if(c.kind!=="exact")return Oe(`/${e}/${m}.kan.yml`);let{source:d}=await o.produce(t.publisher,e,s);return x(200,R[".kan.yml"],d)}function Ne(t,e,c){let r=t.pkgVersions.get(e);if(!r||r.length===0)return null;switch(c.kind){case"any":return r[0].verStr;case"major-pin":return r.find(o=>o.version.major===c.major)?.verStr??null;case"minor-pin":return r.find(o=>o.version.major===c.major&&o.version.minor===c.minor)?.verStr??null;case"exact":return r.find(o=>o.version.major===c.major&&o.version.minor===c.minor&&o.version.patch===c.patch)?.verStr??null;default:return null}}async function he(t,e,c=""){let{lookRenderer:r,publisher:o}=t;if(e==="/.well-known/kanonak.json")return t.configSource?x(200,R[".json"],t.configSource):x(200,R[".json"],JSON.stringify($e(),null,2));if(e==="/kanonak.lock")return t.lockSource?x(200,R[".kan.yml"],t.lockSource):F(e);if(e==="/.well-known/kanonak-render.json")return x(200,R[".json"],JSON.stringify(ae(t),null,2));if(e==="/.well-known/kanonak-render")return x(200,R[".html"],ge(ae(t)));if(e==="/"||e==="/index.html"||e==="/index.css"){let a=r.publisherSubject(o);return e==="/index.css"?x(200,R[".css"],r.renderStylesheet(a)):x(200,R[".html"],await r.renderDocument(a,{rootIndex:!0}))}let s=".html",m=!1,d=e;for(let a of[".kan.yml",".css",".svg",".md",".html"])if(e.endsWith(a)){s=a,m=!0,d=e.slice(0,-a.length);break}let f=!m&&/application\/yaml|text\/yaml/i.test(c),l=d.endsWith("/");l&&d!=="/"&&(d=d.slice(0,-1));let h=xe.parse(d,o);if(!h)return F(e);if(h.kind==="package"){let a=Ne(t,h.package_,h.versionSpec);if(!a)return await We(t,h.package_,h.versionSpec,s===".kan.yml"||f)??F(e);if(s===".kan.yml"||f){let v=t.rawByNsKey.get(`${h.package_}@${a}`);return v!==void 0?x(200,R[".kan.yml"],v):F(e)}let g=t.pkgSelfByVer.get(`${h.package_}@${a}`);if(!g)return F(e);if(s===".css")return x(200,R[".css"],r.renderStylesheet(g));if(!l)return Le(d+"/");let S=h.versionSpec.kind==="any";if(S&&!r.hasDeclaredView(g)){let v=(t.pkgVersions.get(h.package_)||[]).map($=>$.verStr);return x(200,R[".html"],r.renderPackageVersionList(h.package_,v,g))}return x(200,R[".html"],await r.renderDocument(g,S?{bareOverview:!0}:void 0))}if(h.kind==="resource"){let a=Ne(t,h.package_,h.versionSpec);if(!a)return F(e);let g=t.bySubject.get(`${o}/${h.package_}@${a}/${h.name}`);if(!g)return F(e);switch(s){case".css":return x(200,R[".css"],r.renderStylesheet(g));case".svg":return x(200,R[".svg"],await r.renderSvg(g));case".md":{let S=r.renderRawMarkdown(g);return S===void 0?F(e):x(200,R[".md"],S)}default:return x(200,R[".html"],await r.renderDocument(g))}}return F(e)}import{readFileSync as Ue}from"fs";var me=class{constructor(e={}){this.options=e}options;models=new Map;workspaceIndex;clearCache(){this.models.clear(),this.workspaceIndex=void 0}getWorkspaceIndex(){if(this.workspaceIndex)return this.workspaceIndex;let e=new Set,c=new Set;if(this.options.root!==void 0){let r=new O;for(let o of ee(this.options.root))try{let s=r.parse(Ue(o,"utf-8")).metadata?.namespace_;if(!s?.version)continue;let m=s.version;e.add(`${s.publisher}/${s.package_}@${m.major}.${m.minor}.${m.patch}`),c.add(`${s.publisher}/${s.package_}`)}catch{}}return this.workspaceIndex={exact:e,pkgs:c},this.workspaceIndex}async modelFor(e,c,r){let o=this.getWorkspaceIndex(),s={...this.options.fetchFn?{fetchFn:this.options.fetchFn}:{},...this.options.log?{log:this.options.log}:{}},m=c?r?o.exact.has(`${e}/${c}@${r}`):o.pkgs.has(`${e}/${c}`):[...o.pkgs].some(a=>a.startsWith(`${e}/`)),d,f;if(m&&this.options.root!==void 0){let a=this.options.root;d=`ws:${e}`,f=()=>pe(a,{publisher:e,...this.options.log?{log:this.options.log}:{}})}else{let a=c?r?`${e}/${c}@${r}`:`${e}/${c}`:e;d=`rm:${a}`,f=()=>ue(a,s)}let l=this.models.get(d);if(l)return l;let h=await f();return h.lookRenderer.setLinkMode("open-world"),this.models.set(d,h),h}async handle(e,c=""){let r=e.split("/").filter(Boolean);if(r.length===0)return{status:200,headers:{"Content-Type":"text/html; charset=utf-8"},body:Ie()};let o=r[0];if(!o.includes("."))return{status:404,headers:{"Content-Type":"text/html; charset=utf-8"},body:"<!doctype html><meta charset=utf-8><title>404</title><h1>404</h1><p>Expected a publisher domain as the first path segment: <code>/{publisher}/{package}/{version}/{resource}</code></p>"};let s=r.length>=2&&(r[1]==="index.html"||r[1]==="index.css"||r[1]==="index.txt"||r[1]===".well-known"),m=!s&&r.length>=2?r[1]:void 0,d=!s&&r.length>=3&&/^\d+\.\d+\.\d+$/.test(r[2])?r[2]:void 0,f=await this.modelFor(o,m,d),l=e.endsWith("/")&&r.length>1?"/":"",h="/"+r.slice(1).join("/")+l,a=await he(f,h,c);return a.headers.Location?{...a,headers:{...a.headers,Location:`/${o}${a.headers.Location}`}}:a}};function Ie(){return'<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Kanonak origin</title></head><body style="font-family:system-ui;max-width:40rem;margin:4rem auto;padding:0 1rem"><h1>Kanonak request-driven origin</h1><p>Open a resource by its address:</p><p><code>/{publisher}/{package}/{version}/{resource}</code></p><p>e.g. <code>/kanonak.org/capabilities/2.0.0/Capability</code></p></body></html>'}export{G as ClosureScopedRepository,me as RequestRouter,_e as UNIVERSAL_RENDER_BASE,ae as buildRenderDiagnostics,z as buildRenderStackWarnings,H as deriveImportClosure,Ie as landingPage,ue as loadResourceModel,pe as loadServerModel,ge as renderDiagnosticsHtml,N as renderRefKey,q as resolveRenderContract,he as route};
@@ -1,4 +1,5 @@
1
1
  import type { PublisherConfig } from '../repositories/index.js';
2
+ import type { UnresolvedImportEdge } from './closure.js';
2
3
  /** A render-stack package by canonical (publisher, package). */
3
4
  export interface RenderPackageRef {
4
5
  readonly publisher: string;
@@ -74,4 +75,4 @@ export interface RenderStackReport {
74
75
  * package COSTS the page is part of the message — that's the insight a person
75
76
  * debugging "my site has no styles" needs, and it differs per package.
76
77
  */
77
- export declare function buildRenderStackWarnings(packages: readonly RenderPackageStatus[]): string[];
78
+ export declare function buildRenderStackWarnings(packages: readonly RenderPackageStatus[], unresolvedEdges?: readonly UnresolvedImportEdge[]): string[];
@@ -1,4 +1,4 @@
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(`
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-P36E2UV6.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
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(`
@@ -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-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};
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-3O7CRE6J.js";import"../chunk-M443OYKT.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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kanonak-protocol/sdk",
3
- "version": "5.17.0",
3
+ "version": "5.18.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.17.0",
129
+ "@kanonak-protocol/types": "^5.18.0",
130
130
  "ignore": "^7.0.5",
131
131
  "js-yaml": "^4.1.0",
132
132
  "yaml": "^2.7.0"
@@ -1 +0,0 @@
1
- import{e as u}from"./chunk-2ACBWC7K.js";function g(t){let n=t.metadata?.namespace_;return n?`${n.publisher}/${n.package_}`:void 0}function d(t){let n=t.metadata?.namespace_;if(n)return n.version?`${n.publisher}/${n.package_}@${u(n.version)}`:`${n.publisher}/${n.package_}`}async function h(t,n){let e=new Set,s=new Set,o=[...t];for(;o.length>0;){let r=o.shift(),c=g(r),i=d(r);if(!c||!i||s.has(i))continue;s.add(i),e.add(c);let a=r.metadata?.imports;if(a)for(let[p,y]of Object.entries(a))for(let D of y)try{let m=await n.getHighestCompatibleVersionAsync(p,D);m&&o.push(m)}catch{}}return e}var l=class{constructor(n,e){this.inner=n;this.scope=e}inner;scope;async getAllDocumentsAsync(){return(await this.inner.getAllDocumentsAsync()).filter(e=>{let s=g(e);return s!==void 0&&this.scope.has(s)})}getDocumentAsync(n){return this.inner.getDocumentAsync(n)}getDocumentsByNamespaceAsync(n,e){return this.inner.getDocumentsByNamespaceAsync(n,e)}getHighestCompatibleVersionAsync(n,e){return this.inner.getHighestCompatibleVersionAsync(n,e)}saveDocumentAsync(n,e){return this.inner.saveDocumentAsync(n,e)}deleteDocumentAsync(n){return this.inner.deleteDocumentAsync(n)}clearNamespaceAsync(n,e){return this.inner.clearNamespaceAsync(n,e)}getAllDocumentReferencesAsync(){return this.inner.getAllDocumentReferencesAsync()}getDocumentContentAsync(n){return this.inner.getDocumentContentAsync(n)}getDocumentUriAsync(n){return this.inner.getDocumentUriAsync(n)}};export{h as a,l as b};