@kanonak-protocol/sdk 4.7.0 → 4.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.js +1 -1
- package/dist/chunk-MFQUKORC.js +2 -0
- package/dist/chunk-OOR5SVNQ.js +152 -0
- package/dist/{chunk-MPBNEKCQ.js → chunk-T63Q2PMS.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/look/LookRenderer.d.ts +81 -0
- package/dist/look/index.d.ts +1 -1
- package/dist/repositories/PublisherConfig.d.ts +3 -0
- package/dist/repositories/browser.js +1 -1
- package/dist/repositories/index.js +1 -1
- package/dist/search/index.js +1 -1
- package/dist/server/assembleModel.d.ts +2 -0
- package/dist/server/index.d.ts +4 -2
- package/dist/server/index.js +65 -2
- package/dist/server/loadResourceModel.d.ts +5 -0
- package/dist/server/renderDiagnostics.d.ts +74 -0
- package/dist/server/renderStack.d.ts +40 -0
- package/dist/server/requestRouter.d.ts +6 -0
- package/dist/server/types.d.ts +26 -0
- package/dist/transformations/index.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-F26XWM5K.js +0 -2
- package/dist/chunk-XRXCYM3U.js +0 -148
package/dist/browser.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as fe,b as ge,c as me,d as C,e as E,f as d,g as Ye}from"./chunk-KGWDV7FW.js";import{a as Qe}from"./chunk-NV63IOB7.js";import"./chunk-QHABFCRC.js";import{b as L,c as W,d as F}from"./chunk-
|
|
1
|
+
import{a as fe,b as ge,c as me,d as C,e as E,f as d,g as Ye}from"./chunk-KGWDV7FW.js";import{a as Qe}from"./chunk-NV63IOB7.js";import"./chunk-QHABFCRC.js";import{b as L,c as W,d as F}from"./chunk-MFQUKORC.js";import{a as H}from"./chunk-4NO7MHS7.js";import{a as Pe,b as we,c as he}from"./chunk-RYOZTXI7.js";import{a as ke,b as be}from"./chunk-PEUTCG3B.js";import"./chunk-PEJALHXK.js";import"./chunk-SC5M74NM.js";import{A as Le,B as We,C as Fe,D as Ge,M as Xe,a as Ke,b as xe,c as Se,d as Re,f as De,g as Be,h as Ce,i as Ee,k as je,l as ve,m as _e,n as Ie,o as Ae,p as Te,q as Oe,r as Ve,s as $e,t as Ue,u as Me,v as ze,w as Ne,x as Je,y as He,z as qe}from"./chunk-IZRPJCQW.js";import"./chunk-SHDHMKMJ.js";import{a as Y,c as le,i as pe}from"./chunk-DSHPAWJQ.js";import{a as q}from"./chunk-NJ3AZYQD.js";import{a as ye}from"./chunk-UK2OIPAB.js";import"./chunk-PBNVHBS3.js";import{b as ue,c as de}from"./chunk-VKTFLHCW.js";import{a as G,b as X,c as Q,d as ee,e as re,f as te,g as ne,h as oe,i as se,j as ie,k as ae,l as ce}from"./chunk-T3JR2SV6.js";import{a as Z}from"./chunk-FUUTGGJS.js";import{c as O,d as V,e as $,f as U,g as M,h as z,i as N,j as J}from"./chunk-2ACBWC7K.js";var j="kanonak-credentials",u="credentials",Ze=1,g=class{async get(r){let e=d(r),t=await h();return new Promise((o,a)=>{let s=t.transaction(u,"readonly"),i=s.objectStore(u).get(e);i.onsuccess=()=>o(i.result??null),i.onerror=()=>a(new Error(`IndexedDB read failed for '${e}': ${i.error?.message}`)),s.oncomplete=()=>t.close()})}async store(r,e){let t=d(r),o=await h();return new Promise((a,s)=>{let l=o.transaction(u,"readwrite"),c=l.objectStore(u).put(e,t);c.onsuccess=()=>a(),c.onerror=()=>s(new Error(`IndexedDB write failed for '${t}': ${c.error?.message}`)),l.oncomplete=()=>o.close()})}async remove(r){let e=d(r),t=await h();return new Promise((o,a)=>{let s=t.transaction(u,"readwrite"),i=s.objectStore(u).delete(e);i.onsuccess=()=>o(),i.onerror=()=>a(new Error(`IndexedDB delete failed for '${e}': ${i.error?.message}`)),s.oncomplete=()=>t.close()})}async list(){let r=await h();return new Promise((e,t)=>{let o=r.transaction(u,"readonly"),s=o.objectStore(u).getAllKeys();s.onsuccess=()=>e(s.result??[]),s.onerror=()=>t(new Error(`IndexedDB list failed: ${s.error?.message}`)),o.oncomplete=()=>r.close()})}};function h(){return new Promise((n,r)=>{let e=indexedDB.open(j,Ze);e.onupgradeneeded=()=>{let t=e.result;t.objectStoreNames.contains(u)||t.createObjectStore(u)},e.onsuccess=()=>n(e.result),e.onerror=()=>r(new Error(`Failed to open IndexedDB '${j}': ${e.error?.message}
|
|
2
2
|
Credential storage requires IndexedDB support in your browser.`))})}async function _(){let n=await crypto.subtle.generateKey({name:"ECDSA",namedCurve:"P-256"},!1,["sign"]),r=await crypto.subtle.exportKey("jwk",n.publicKey);return{signingKey:n.privateKey,publicKeyJwk:r}}async function k(){let n=await crypto.subtle.generateKey({name:"ECDSA",namedCurve:"P-256"},!0,["sign"]),r=await crypto.subtle.exportKey("jwk",n.publicKey),e=await crypto.subtle.exportKey("jwk",n.privateKey);return{keys:{signingKey:n.privateKey,publicKeyJwk:r},dpopKeyPair:{publicKey:r,privateKey:e}}}async function b(n){return{signingKey:await crypto.subtle.importKey("jwk",n.privateKey,{name:"ECDSA",namedCurve:"P-256"},!1,["sign"]),publicKeyJwk:n.publicKey}}async function K(n,r,e,t,o){let a={alg:"ES256",typ:"dpop+jwt",jwk:{kty:n.publicKeyJwk.kty,crv:n.publicKeyJwk.crv,x:n.publicKeyJwk.x,y:n.publicKeyJwk.y}},s={jti:crypto.randomUUID(),htm:r.toUpperCase(),htu:e,iat:Math.floor(Date.now()/1e3)};return t&&(s.ath=await rr(t)),o&&(s.nonce=o),await er(a,s,n.signingKey)}function x(n){return!n||n.length===0?!1:n.some(r=>r.toUpperCase()==="ES256")}async function er(n,r,e){let t=v(JSON.stringify(n)),o=v(JSON.stringify(r)),a=new TextEncoder().encode(`${t}.${o}`),s=await crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},e,a),l=D(s);return`${t}.${o}.${l}`}async function rr(n){let r=new TextEncoder().encode(n),e=await crypto.subtle.digest("SHA-256",r);return D(e)}function v(n){let r=new TextEncoder().encode(n);return D(r.buffer)}function D(n){let r=new Uint8Array(n),e="";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var tr=300*1e3,S=class{credentialBackend;callbackUrl;constructor(r){this.credentialBackend=new g,this.callbackUrl=r??`${window.location.origin}/browser/callback.html`}async authorize(r){let e=d(r),t=await this.discover(e);if(!t)return{success:!1,error:`No OAuth discovery endpoint found for '${e}'.`};if(!t.authorizationEndpoint||!t.tokenEndpoint)return{success:!1,error:`OAuth metadata incomplete for '${e}'.`};let o=x(t.dpopSigningAlgValuesSupported),a=null,s=null;if(o){let f=await k();a=f.keys,s=f.dpopKeyPair}let l=await this.credentialBackend.get(e),i=l?.clientId??null,c=l?.clientSecret??null;if(!i&&t.registrationEndpoint){let f=await this.registerClient(t.registrationEndpoint);if(!f)return{success:!1,error:`Dynamic client registration failed for '${e}'.`};i=f.clientId,c=f.clientSecret??null}if(!i)return{success:!1,error:`No OAuth client credentials for '${e}'.`};let m=nr(),p=await or(m),R=sr(),A=ir(t.authorizationEndpoint,i,this.callbackUrl,R,p),y=await this.openAuthPopup(A,R);if(!y)return{success:!1,error:"Authorization timed out or was cancelled."};if(y.error)return{success:!1,error:`Authorization failed: ${y.error}`};if(!y.code)return{success:!1,error:"No authorization code received."};if(y.state!==R)return{success:!1,error:"State mismatch \u2014 possible CSRF attack."};let P=await this.exchangeCode(t.tokenEndpoint,i,c,y.code,this.callbackUrl,m,a);if(!P)return{success:!1,error:"Token exchange failed."};let T={clientId:i,clientSecret:c,accessToken:P.accessToken??null,refreshToken:P.refreshToken??null,expiresAt:P.expiresIn?new Date(Date.now()+P.expiresIn*1e3).toISOString():null,tokenEndpoint:t.tokenEndpoint,dpopKeyPair:s};return await this.credentialBackend.store(e,T),{success:!0,host:e}}async getCredentialWithKeys(r){let e=await this.credentialBackend.get(r);if(!e)return null;let t=null;return e.dpopKeyPair&&(t=await b(e.dpopKeyPair)),{credential:e,dpopKeys:t}}async logout(r){let e=d(r);return await this.credentialBackend.remove(e),{success:!0,host:e}}async listAuthenticated(){return this.credentialBackend.list()}async discover(r){for(let e of[`https://${r}/.well-known/oauth-authorization-server`,`https://${r}/.well-known/openid-configuration`])try{let t=await fetch(e);if(!t.ok)continue;let o=await t.json();return{issuer:w(o.issuer),authorizationEndpoint:w(o.authorization_endpoint),tokenEndpoint:w(o.token_endpoint),registrationEndpoint:w(o.registration_endpoint),revocationEndpoint:w(o.revocation_endpoint),dpopSigningAlgValuesSupported:I(o.dpop_signing_alg_values_supported),codeChallengeMethodsSupported:I(o.code_challenge_methods_supported)}}catch{continue}return null}async registerClient(r){try{let e=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_name:"Kanonak Browser",redirect_uris:[this.callbackUrl],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"})});if(!e.ok)return null;let t=await e.json(),o=t.client_id;return o?{clientId:o,clientSecret:t.client_secret}:null}catch{return null}}openAuthPopup(r,e){return new Promise(t=>{let o=window.open(r,"kanonak-auth","width=500,height=700,menubar=no,toolbar=no,location=yes,status=no");if(!o){t(null);return}let a=setTimeout(()=>{i(),t(null)},tr),s=c=>{c.origin===window.location.origin&&(!c.data||c.data.type!=="kanonak-auth-callback"||(i(),t({code:c.data.code??void 0,state:c.data.state??void 0,error:c.data.error??void 0})))},l=setInterval(()=>{o.closed&&(i(),t(null))},500),i=()=>{clearTimeout(a),clearInterval(l),window.removeEventListener("message",s);try{o.close()}catch{}};window.addEventListener("message",s)})}async exchangeCode(r,e,t,o,a,s,l){let i=new URLSearchParams({grant_type:"authorization_code",client_id:e,code:o,redirect_uri:a,code_verifier:s});t&&i.set("client_secret",t);let c={"Content-Type":"application/x-www-form-urlencoded"};l&&(c.DPoP=await K(l,"POST",r));try{let m=await fetch(r,{method:"POST",headers:c,body:i.toString()});if(!m.ok)return null;let p=await m.json();return{accessToken:p.access_token,refreshToken:p.refresh_token,expiresIn:typeof p.expires_in=="number"?p.expires_in:void 0}}catch{return null}}};function nr(){let n=new Uint8Array(32);return crypto.getRandomValues(n),B(n.buffer)}async function or(n){let r=new TextEncoder().encode(n),e=await crypto.subtle.digest("SHA-256",r);return B(e)}function sr(){let n=new Uint8Array(16);return crypto.getRandomValues(n),B(n.buffer)}function ir(n,r,e,t,o){let a=new URLSearchParams({client_id:r,response_type:"code",redirect_uri:e,state:t,code_challenge:o,code_challenge_method:"S256"});return`${n}?${a}`}function B(n){let r=new Uint8Array(n),e="";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function w(n){return typeof n=="string"?n:null}function I(n){return Array.isArray(n)?n.filter(r=>typeof r=="string"):null}export{Ne as AmbiguousReferenceRule,se as BooleanStatement,g as BrowserCredentialBackend,S as BrowserOAuthFlow,Fe as ClassDefinitionRule,Ie as ClassHierarchyCycleRule,X as DefinedKanonak,Me as DefinitionPropertyReferenceRule,ge as EdgeType,Y as EmbeddedKanonak,je as EmbeddedKanonakTypeRule,ae as EmbeddedStatement,me as GraphBuilder,F as HttpKanonakDocumentRepository,ve as ImportExistenceRule,H as InMemoryKanonakDocumentRepository,Ue as InstancePropertyReferenceRule,G as Kanonak,we as KanonakDocumentPositions,pe as KanonakObjectParser,Xe as KanonakObjectValidator,q as KanonakParser,Z as KanonakUri,ke as KanonakUriBuilder,ce as ListStatement,Ge as MarkdownLinkRule,le as MarkdownStatement,$e as NamespaceImportCycleRule,De as NamespacePrefixRule,fe as NodeType,oe as NumberStatement,He as ObjectPropertyImportRule,qe as ObjectPropertyValueValidationRule,Se as OntologyValidationError,Ke as OntologyValidationResult,Le as PropertyDomainRule,Ae as PropertyHierarchyCycleRule,Pe as PropertyMetadata,Je as PropertyRangeReferenceRule,Te as PropertyRangeRequiredRule,Ce as PropertyTypeSpecificityRule,We as PropertyValueTypeRule,L as PublisherConfigResolver,W as PublisherIndex,ee as ReferenceKanonak,ie as ReferenceStatement,Be as ResourceNamingRule,ue as ResourceResolver,ye as ResourceTypeClassifier,te as ScalarStatement,re as Statement,ne as StringStatement,Oe as SubClassOfReferenceRule,Ve as SubPropertyOfReferenceRule,Q as SubjectKanonak,Ee as SubjectKanonakTypeRequiredRule,de as TypeResolver,_e as UnresolvedReferenceRule,Re as ValidationContext,xe as ValidationSeverity,ze as XsdImportRule,x as browserServerSupportsDPoP,Ye as buildOntologyModel,O as compareVersions,K as createBrowserDPoPProof,U as createVersion,Qe as findDerivation,be as findInstancesByType,$ as formatVersion,k as generateBrowserDPoPKeyPair,_ as generateBrowserDPoPKeys,E as hasValidToken,b as importDPoPKeys,z as isCompatibleVersion,C as isExpired,N as isMajorCompatible,d as normalizeHost,M as parseVersionString,he as parseWithPositions,J as pickHighestDocument,V as versionsEqual};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as u}from"./chunk-SC5M74NM.js";import{a as y}from"./chunk-NJ3AZYQD.js";import{e as v}from"./chunk-2ACBWC7K.js";var F="https://{publisher}/index.txt",x="https://{publisher}/{package}/{version}.kan.yml",k={version:1};function A(c){return{version:1,index:F.replaceAll("{publisher}",c),package:x.replaceAll("{publisher}",c),auth:"none"}}var f=class{constructor(e){this.fetchFn=e}fetchFn;cache=new Map;getConfig(e){let n=this.cache.get(e);return n||(n=this.fetchConfig(e),this.cache.set(e,n),n.catch(()=>{this.cache.get(e)===n&&this.cache.delete(e)})),n}async fetchConfig(e){let n=`https://${e}/.well-known/kanonak.json`,r;try{r=await(this.fetchFn?this.fetchFn(n,e):fetch(n))}catch{return k}if(r.status===404)return k;if(!r.ok)throw new Error(`Failed to fetch publisher config: ${n} (${r.status} ${r.statusText})`);let t=await r.json();if(typeof t.version!="number")throw new Error(`Invalid publisher config at ${n}: missing or invalid "version" field`);let s={version:t.version};return typeof t.index=="string"&&(s.index=t.index),typeof t.package=="string"&&(s.package=t.package),(t.auth==="none"||t.auth==="oauth"||t.auth==="bearer")&&(s.auth=t.auth),Array.isArray(t.render)&&t.render.every(i=>typeof i=="string")&&(s.render=t.render),typeof t.resolveByRedirect=="boolean"&&(s.resolveByRedirect=t.resolveByRedirect),s}resolveIndexUrl(e,n){let r=n.index??F;return w(r,{publisher:e})}resolvePackageUrl(e,n,r,t){let s=t.package??x;return w(s,{publisher:e,package:n,version:r})}};function w(c,e){let n=c;for(let[t,s]of Object.entries(e))n=n.replaceAll(`{${t}}`,s);let r=n.match(/\{[a-z]+\}/);if(r)throw new Error(`Unresolved variable ${r[0]} in URL template: ${c}`);return n}import{VersionOperator as m}from"@kanonak-protocol/types/document/models/enums";var l=class c{indexCache=new Map;configResolver;fetchFn;constructor(e){this.configResolver=e?.configResolver??new f(e?.fetchFn),this.fetchFn=e?.fetchFn}async resolveVersion(e,n){let r=await this.getPackageVersions(e,n.packageName);if(r.length===0)return null;let t=r.filter(s=>this.isVersionCompatible(s,n.version,n.versionOperator));return t.length===0?null:(t.sort((s,i)=>this.compareVersionStrings(i,s)),t[0])}async getHighestVersion(e,n){let r=await this.getPackageVersions(e,n);return r.length===0?null:[...r].sort((s,i)=>this.compareVersionStrings(i,s))[0]}async listLatestPackages(e){let n=await this.getIndex(e),r=[];for(let[t,s]of n){if(s.length===0)continue;let i=[...s].sort((o,a)=>this.compareVersionStrings(a,o));r.push({packageName:t,version:i[0]})}return r.sort((t,s)=>t.packageName.localeCompare(s.packageName)),r}async getPackageUrl(e,n,r){let t=await this.configResolver.getConfig(e);return this.configResolver.resolvePackageUrl(e,n,r,t)}getConfig(e){return this.configResolver.getConfig(e)}async getPackageVersions(e,n){return(await this.getIndex(e)).get(n)??[]}getIndex(e){let n=this.indexCache.get(e);return n||(n=this.fetchIndex(e),this.indexCache.set(e,n),n.catch(()=>{this.indexCache.get(e)===n&&this.indexCache.delete(e)})),n}async fetchIndex(e){let n=await this.configResolver.getConfig(e),r=this.configResolver.resolveIndexUrl(e,n),t=this.fetchFn?await this.fetchFn(r,e):await fetch(r);if(!t.ok)throw new Error(`Failed to fetch publisher index: ${r} (${t.status} ${t.statusText})`);let s=await t.text();return c.parseIndex(s)}static parseIndex(e){let n=new Map;for(let r of e.split(`
|
|
2
|
+
`)){let t=r.trim();if(!t||t.startsWith("#"))continue;let s=t.indexOf("/");if(s===-1)continue;let i=t.substring(0,s),o=t.substring(s+1);if(!i||!o)continue;let a=n.get(i);a?a.push(o):n.set(i,[o])}return n}isVersionCompatible(e,n,r){let t=c.parseVersion(e);if(!t)return!1;switch(r){case m.Any:return!0;case m.Exact:return t.major===n.major&&t.minor===n.minor&&t.patch===n.patch;case m.Compatible:return t.major===n.major&&t.minor===n.minor&&t.patch>=n.patch;case m.Major:return t.major!==n.major?!1:t.minor>n.minor?!0:t.minor===n.minor?t.patch>=n.patch:!1;default:return!1}}static parseVersion(e){let n=e.split(".");if(n.length<2)return null;let r=parseInt(n[0],10),t=parseInt(n[1],10),s=n.length>=3?parseInt(n[2],10):0;return isNaN(r)||isNaN(t)||isNaN(s)?null:{major:r,minor:t,patch:s}}compareVersionStrings(e,n){let r=c.parseVersion(e),t=c.parseVersion(n);return!r&&!t?0:r?t?r.major!==t.major?r.major-t.major:r.minor!==t.minor?r.minor-t.minor:r.patch-t.patch:1:-1}};import{VersionOperator as C}from"@kanonak-protocol/types/document/models/enums";var P=class{parser=new y;publisherIndex;documents=new Map;contentCache=new Map;fetchFn;onFetch;getFromCache;constructor(e){this.onFetch=e?.onFetch,this.getFromCache=e?.getFromCache,this.fetchFn=e?.fetchFn,this.publisherIndex=e?.fetchFn?new l({fetchFn:e.fetchFn}):new l}async getHighestCompatibleVersionAsync(e,n){if((await this.publisherIndex.getConfig(e)).resolveByRedirect)return this.resolveByRedirect(e,n);let t=await this.publisherIndex.resolveVersion(e,n);if(!t)return null;let s=`${e}/${n.packageName}@${t}`,i=this.documents.get(s);if(i)return i;if(this.getFromCache){let p=this.getFromCache(e,n.packageName,t);if(p){let d=this.parser.parse(p);return u(d,e,n.packageName,t),this.documents.set(s,d),this.contentCache.set(s,p),d}}let o=await this.publisherIndex.getPackageUrl(e,n.packageName,t),a=this.fetchFn?await this.fetchFn(o,e):await fetch(o);if(!a.ok)throw new Error(`Failed to fetch Kanonak package: ${o} (${a.status} ${a.statusText})`);let g=await a.text(),h=this.parser.parse(g);return u(h,e,n.packageName,t),this.onFetch&&this.onFetch(e,n.packageName,t,g),this.documents.set(s,h),this.contentCache.set(s,g),h}async resolveByRedirect(e,n){let r=n.packageName,s=n.versionOperator===C.Exact?await this.publisherIndex.getPackageUrl(e,r,v(n.version)):`https://${e}/${r}.kan.yml`,i=await this.fetchFollowing(s,e);if(!i)return null;let o=this.parser.parse(i.content),a=o.metadata.namespace_;if(!a||!a.version)throw new Error(`Producer origin returned a package with no namespace/version for ${e}/${r}`);let g=v(a.version);u(o,e,r,g);let h=`${e}/${r}@${g}`;return this.onFetch&&this.onFetch(e,r,g,i.content),this.documents.set(h,o),this.contentCache.set(h,i.content),o}async fetchFollowing(e,n,r=4){let t=e;for(let s=0;s<r;s++){let i=this.fetchFn?await this.fetchFn(t,n):await fetch(t,{redirect:"manual"});if(i.status===301||i.status===302){let o=i.headers.get("location");if(!o)throw new Error(`Redirect with no Location header from ${t}`);t=new URL(o,t).toString();continue}if(i.status===404)return null;if(!i.ok)throw new Error(`Failed to fetch Kanonak package: ${t} (${i.status} ${i.statusText})`);return{url:t,content:await i.text()}}throw new Error(`Too many redirects resolving ${e}`)}async getAllDocumentsAsync(){return Array.from(this.documents.values())}async getDocumentAsync(e){return this.documents.get(e)??null}async getDocumentsByNamespaceAsync(e,n){return Array.from(this.documents.values()).filter(r=>{let t=r.metadata.namespace_;return t&&t.publisher===e&&t.package_===n})}async saveDocumentAsync(e,n){throw new Error("HttpKanonakDocumentRepository is read-only")}async deleteDocumentAsync(e){throw new Error("HttpKanonakDocumentRepository is read-only")}async clearNamespaceAsync(e,n){throw new Error("HttpKanonakDocumentRepository is read-only")}async getAllDocumentReferencesAsync(){return[]}async getDocumentContentAsync(e){return this.contentCache.get(e)??null}async getDocumentUriAsync(e){let n=e.match(/^(.+?)\/(.+?)@(.+)$/);if(!n)return null;let[,r,t,s]=n;return this.publisherIndex.getPackageUrl(r,t,s)}};export{A as a,f as b,l as c,P as d};
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import{a as Cn}from"./chunk-4NO7MHS7.js";import{a as An}from"./chunk-PEJALHXK.js";import{d as u}from"./chunk-SHDHMKMJ.js";import{a as M,c as Me,i as Vn}from"./chunk-DSHPAWJQ.js";import{a as Fn}from"./chunk-NJ3AZYQD.js";import{a as pn,b as ue,c as xn,d as w,f as Ne,g as ke,j as gn,k as qe,m as Mn,n as Nn}from"./chunk-PBNVHBS3.js";import{b as Oe,c as G,d as E,g as X,h as me,i as re,j as V,k as H,l as T}from"./chunk-T3JR2SV6.js";import{a as Tn}from"./chunk-FUUTGGJS.js";import{c as en,g as ye}from"./chunk-2ACBWC7K.js";var Te="kanonak.org",Hn="look",We="core-rdf",Et={publisher:Te,package_:Hn,name:"displayLabel"},Kt={publisher:Te,package_:Hn,name:"displaySummary"},Rt={publisher:Te,package_:We,name:"type"},Lt={publisher:Te,package_:We,name:"subClassOf"},Ot={publisher:Te,package_:We,name:"label"},Ut={publisher:Te,package_:We,name:"comment"},Pn=new Tn(Te,We,"Resource");function D(r,e){let n=Dn(r,e,Et)??Ot,t=Dn(r,e,Kt)??Ut,a=gn(e,n)??e.name,s=gn(e,t);return{label:a,summary:s}}function Dn(r,e,n){let t=qe(e,n);if(t)return t;let a=new Set,s=Bn(e,Rt);for(;s.length>0;){let o=s.shift(),i=pn(o);if(a.has(i))continue;a.add(i);let c=Ne(r,o);if(!c)continue;let l=qe(c,n);if(l)return l;s.push(...Bn(c,Lt))}if(!a.has(pn(Pn))){let o=Ne(r,Pn);if(o){let i=qe(o,n);if(i)return i}}}function Bn(r,e){let n=qe(r,e);if(n)return[n];let t=[];for(let a of Mn(r,e))a instanceof E&&t.push(a.subject);return t}function Ye(r,e={}){let n=r.replace(/\r\n/g,`
|
|
2
|
+
`).split(`
|
|
3
|
+
`),t=[],a=0;for(;a<n.length;){let s=n[a];if(s.trim()===""){a++;continue}let o=/^(\s*)```(\S*)\s*$/.exec(s);if(o){let l=o[2],d=[];for(a++;a<n.length&&!/^(\s*)```\s*$/.test(n[a]);)d.push(n[a]),a++;a++;let f=d.join(`
|
|
4
|
+
`),g=l&&e.highlight?e.highlight(l,f):De(f),m=l?` class="language-${Gn(l)}"`:"";t.push(`<pre class="kan-code"><code${m}>${g}</code></pre>`);continue}let i=/^(#{1,6})\s+(.*)$/.exec(s);if(i){let l=i[1].length,d=Pe(i[2].trim());t.push(`<h${l}>${d}</h${l}>`),a++;continue}if(s.includes("|")&&a+1<n.length&&zn(n[a+1])){let l=mn(s),d=It(n[a+1]);a+=2;let f=[];for(;a<n.length&&n[a].trim()!==""&&n[a].includes("|");)f.push(mn(n[a])),a++;t.push(Ct(l,d,f));continue}if(/^\s*[-*]\s+/.test(s)){let l=[];for(;a<n.length&&/^\s*[-*]\s+/.test(n[a]);){let d=[n[a].replace(/^\s*[-*]\s+/,"")];for(a++;a<n.length&&n[a].trim()!==""&&!/^\s*[-*]\s+/.test(n[a])&&!/^\s*\d+\.\s+/.test(n[a]);)d.push(n[a]),a++;a<n.length&&n[a].trim()===""&&a++,l.push(`<li>${Pe(d.join(" ").trim())}</li>`)}t.push(`<ul>
|
|
5
|
+
${l.join(`
|
|
6
|
+
`)}
|
|
7
|
+
</ul>`);continue}if(/^\s*\d+\.\s+/.test(s)){let l=[];for(;a<n.length&&/^\s*\d+\.\s+/.test(n[a]);){let d=[n[a].replace(/^\s*\d+\.\s+/,"")];for(a++;a<n.length&&n[a].trim()!==""&&!/^\s*\d+\.\s+/.test(n[a])&&!/^\s*[-*]\s+/.test(n[a]);)d.push(n[a]),a++;a<n.length&&n[a].trim()===""&&a++,l.push(`<li>${Pe(d.join(" ").trim())}</li>`)}t.push(`<ol>
|
|
8
|
+
${l.join(`
|
|
9
|
+
`)}
|
|
10
|
+
</ol>`);continue}let c=[s];for(a++;a<n.length&&n[a].trim()!==""&&!/^(#{1,6})\s+/.test(n[a])&&!/^(\s*)```/.test(n[a])&&!/^\s*[-*]\s+/.test(n[a])&&!/^\s*\d+\.\s+/.test(n[a])&&!(n[a].includes("|")&&a+1<n.length&&zn(n[a+1]));)c.push(n[a]),a++;t.push(`<p>${Pe(c.join(" "))}</p>`)}return t.join(`
|
|
11
|
+
`)}function zn(r){return r.includes("-")?/^[\s|:-]+$/.test(r):!1}function mn(r){let e=r.trim();return e.startsWith("|")&&(e=e.slice(1)),e.endsWith("|")&&(e=e.slice(0,-1)),e.split("|").map(n=>n.trim())}function It(r){return mn(r).map(e=>{let n=e.startsWith(":"),t=e.endsWith(":");return n&&t?"center":t?"right":n?"left":null})}function Ct(r,e,n){let t=o=>{let i=e[o];return i?` style="text-align:${i}"`:""},a=r.map((o,i)=>`<th${t(i)}>${Pe(o)}</th>`).join(""),s=n.map(o=>`<tr>${o.map((c,l)=>`<td${t(l)}>${Pe(c)}</td>`).join("")}</tr>`).join(`
|
|
12
|
+
`);return`<table>
|
|
13
|
+
<thead><tr>${a}</tr></thead>
|
|
14
|
+
<tbody>
|
|
15
|
+
${s}
|
|
16
|
+
</tbody>
|
|
17
|
+
</table>`}function Pe(r){let e=De(r);return e=e.replace(/`([^`\n]+)`/g,(n,t)=>`<code>${t}</code>`),e=e.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,t,a)=>`<a href="${Gn(a)}">${t}</a>`),e=e.replace(/\*\*([^*\n]+)\*\*/g,(n,t)=>`<strong>${t}</strong>`),e=e.replace(/(^|[^*])\*([^*\n]+)\*(?!\*)/g,(n,t,a)=>`${t}<em>${a}</em>`),e=e.replace(/(^|[\s(])_([^_\n]+)_(?=[\s).,;:!?]|$)/g,(n,t,a)=>`${t}<em>${a}</em>`),e}function De(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Gn(r){return r.replace(/"/g,""").replace(/&/g,"&")}var Ft={publisher:"kanonak.org",package_:"core-rdf",name:"label"};function Ae(r){return typeof r=="object"&&r!==null&&r.kind==="raw-string"}var Ee=class extends Error{},Xe=class{constructor(e,n,t=new Map){this.resolver=e;this.catalog=n;this.fragments=t}resolver;catalog;fragments;async evaluate(e,n){switch(e.kind){case"string-literal":return e.value;case"integer-literal":return e.value;case"decimal-literal":return e.value;case"boolean-literal":return e.value;case"uri-literal":return{...e.refTo};case"var-ref":{if(!n.has(e.varName))throw new Ee(`Unbound variable "${e.varName}"`);return n.get(e.varName)}case"concat":{let t=[];for(let a of e.parts){let s=await this.evaluate(a,n);if(s!=null)if(Array.isArray(s))for(let o of s)t.push(o);else t.push(s)}return t}case"fallback":{let t=await this.evaluate(e.primary,n);return qn(t)?t:this.evaluate(e.alternate,n)}case"when":return await this.evaluate(e.condition,n)===!0?this.evaluate(e.thenBuild,n):e.elseBuild?this.evaluate(e.elseBuild,n):void 0;case"is-set":{let t=await this.evaluate(e.check,n);return qn(t)}case"property-read":{let t=await this.evaluate(e.source,n);return nn(t,e.readProp)}case"traverse":{let t=await this.evaluate(e.source,n);if(!(t instanceof Oe))return;let a=Vt(t,e.through),s=[];for(let o of a){let i=ke(this.catalog,o),c=i.length>0?i:[await this.resolver.resolveSubject(o,this.catalog)];for(let l of c){if(!l)continue;let d=new Map(n);d.set("input",l);let f=await this.evaluate(e.step,d);if(f!=null&&Ve(f)!==""){s.push(Ve(f));break}}}return s.join("")}case"uri-name":{let t=await this.evaluate(e.source,n);return Be(t)?t.name:t instanceof E?t.subject.name:t instanceof G?t.name:t instanceof M?t.name??"":void 0}case"uri-publisher":{let t=await this.evaluate(e.source,n);return kn(t)?.publisher}case"uri-package":{let t=await this.evaluate(e.source,n);return kn(t)?.package_}case"uri-version":{let t=await this.evaluate(e.source,n);return kn(t)?.version}case"subject-uri":{let t=await this.evaluate(e.source,n);if(t instanceof G){let a=t.namespace??"",s=t.name??"";return!a||!s?void 0:`${a}/${s}`}if(t instanceof E){let a=t.subject,s=a.version;return s&&typeof s.major=="number"?`${a.publisher}/${a.package_}@${s.major}.${s.minor}.${s.patch}/${a.name}`:`${a.publisher}/${a.package_}/${a.name}`}return}case"display-label":{let t=await this.resolver.resolveSubject({...e.labelTarget},this.catalog);return t?nn(t,e.labelSource):void 0}case"resolve-ref":{let t=await this.evaluate(e.source,n);return t instanceof G?t:t instanceof E?await this.resolver.resolveSubject(t.subject,this.catalog):Be(t)?await this.resolver.resolveSubject(t,this.catalog):void 0}case"normalize":{let t=await this.evaluate(e.source,n),a=t==null?"":Ve(t);return e.normKind==="trim-end"?a.replace(/[\s\r\n]+$/u,""):e.normKind==="to-upper"?a.toUpperCase():e.normKind==="to-lower"?a.toLowerCase():e.normKind==="first-char"?a.length===0?"":a.charAt(0):a}case"unescaped-string":{let t=await this.evaluate(e.source,n);return{kind:"raw-string",value:t==null?"":Ve(t)}}case"render-markdown":{let t=await this.evaluate(e.source,n);if(!(t instanceof Oe))return;let a;for(let o of t.statement){let i=bn(o);if(i&&ue(i,e.readProp)){a=o;break}}if(!(a instanceof Me)){let o=nn(t,e.readProp);return o==null?void 0:Ve(o)}let s=await this.renderMarkdownLinks(a);return e.format==="html"?Ye(s):s}case"build-ast-node":{let t={kind:e.astClass.name};for(let a of e.set){let s=await this.evaluate(a.value,n);if(s==null||Array.isArray(s)&&s.length===0)continue;let o=a.field.name;xt.has(o)&&(Array.isArray(s)&&s.every(i=>Wn(i))?s=s.map(i=>Yn(i)).join(""):Wn(s)&&(s=Yn(s))),t[o]=s}return t}case"call-fragment":{let t=this.fragments.get(e.fragmentKey);if(!t)throw new Ee(`ExpressionFragment ${e.fragmentKey} not found in registry`);return this.evaluate(t,n)}case"join":return(await this.evaluateList(e.source,n)).map(a=>a==null?"":Ve(a)).join(e.separator);case"count":return(await this.evaluateList(e.source,n)).length;case"sum":{let t=await this.evaluateList(e.source,n),a=0;for(let s of t)a+=de(s,"Sum");return a}case"min":{let t=await this.evaluateList(e.source,n);if(t.length===0)throw new Ee("Min on an empty list is undefined; guard with IsSet");let a=de(t[0],"Min");for(let s=1;s<t.length;s++){let o=de(t[s],"Min");o<a&&(a=o)}return a}case"max":{let t=await this.evaluateList(e.source,n);if(t.length===0)throw new Ee("Max on an empty list is undefined; guard with IsSet");let a=de(t[0],"Max");for(let s=1;s<t.length;s++){let o=de(t[s],"Max");o>a&&(a=o)}return a}case"average":{let t=await this.evaluateList(e.source,n);if(t.length===0)throw new Ee("Average on an empty list is undefined; guard with IsSet");let a=0;for(let s of t)a+=de(s,"Average");return a/t.length}case"for-each":{let t=await this.evaluateList(e.source,n),a=[];for(let s of t){let o=new Map(n);o.set(e.loopVar,$e(s));let i=await this.evaluate(e.emit,o);if(i!=null)if(Array.isArray(i))for(let c of i)a.push(c);else a.push(i)}return a}case"list-map":{let t=await this.evaluateList(e.source,n),a=[];for(let s of t){let o=new Map(n);o.set(e.loopVar,$e(s)),a.push(await this.evaluate(e.mapBody,o))}return a}case"filter":{let t=await this.evaluateList(e.source,n),a=[];for(let s of t){let o=new Map(n);o.set(e.loopVar,$e(s)),await this.evaluate(e.predicate,o)===!0&&a.push(s)}return a}case"partition-by":{let t=await this.evaluateList(e.source,n),a=new Map,s=[];for(let o of t){let i=new Map(n);i.set(e.loopVar,$e(o));let c=await this.evaluate(e.partitionKey,i),l=Zn(c),d=a.get(l);d||(d={kind:"Partition",key:c,members:[]},a.set(l,d),s.push(l)),d.members.push(o)}return s.map(o=>a.get(o))}case"distinct-by":{let t=await this.evaluateList(e.source,n),a=new Set,s=[];for(let o of t){let i=new Map(n);i.set(e.loopVar,$e(o));let c=await this.evaluate(e.distinctKey,i),l=Zn(c);a.has(l)||(a.add(l),s.push(o))}return s}case"all-statements":{let t=await this.evaluate(e.source,n);return t instanceof Oe?t.statement:[]}case"statement-predicate":{let t=await this.evaluate(e.source,n);if(hn(t)){let a=t.predicate;if(a instanceof E)return a}return}case"statement-value":{let t=await this.evaluate(e.source,n);return hn(t)?Pt(t):void 0}case"date-format":{let t=await this.evaluate(e.source,n),a=t==null?"":Ve(t);return a?Nt(a,e.format):""}case"add":{let t=de(await this.evaluate(e.left,n),"Add"),a=de(await this.evaluate(e.right,n),"Add");return t+a}case"subtract":{let t=de(await this.evaluate(e.left,n),"Subtract"),a=de(await this.evaluate(e.right,n),"Subtract");return t-a}case"multiply":{let t=de(await this.evaluate(e.left,n),"Multiply"),a=de(await this.evaluate(e.right,n),"Multiply");return t*a}case"divide":{let t=de(await this.evaluate(e.left,n),"Divide"),a=de(await this.evaluate(e.right,n),"Divide");if(a===0)throw new Ee("Divide by zero; guard with When");return t/a}case"reverse":{if(e.source.kind==="reverse")return this.evaluate(e.source.source,n);let t=await this.evaluateReverseIterator(e.source,n);return t!==void 0?t:[...await this.evaluateList(e.source,n)].reverse()}case"windowed-map":{let t=await this.evaluateList(e.source,n);if(t.length<e.windowSize)return[];let a=[];for(let s=0;s+e.windowSize<=t.length;s++){let o=t.slice(s,s+e.windowSize),i=new Map(n);i.set(e.windowVar,o);let c=await this.evaluate(e.windowBody,i);if(c!=null)if(Array.isArray(c))for(let l of c)a.push(l);else a.push(c)}return a}case"pairwise-map":{let t=await this.evaluateList(e.source,n);if(t.length<2)return[];let a=[];for(let s=0;s+1<t.length;s++){let o=new Map(n);o.set(e.firstVar,$e(t[s])),o.set(e.secondVar,$e(t[s+1]));let i=await this.evaluate(e.pairBody,o);if(i!=null)if(Array.isArray(i))for(let c of i)a.push(c);else a.push(i)}return a}case"scan":{let t=await this.evaluateList(e.source,n);if(t.length===0)return[];let a=await this.evaluate(e.initialState,n),s=[];for(let o of t){let i=new Map(n);i.set(e.stateVar,a),i.set(e.elementVar,$e(o));let c=await this.evaluate(e.accumulate,i);s.push(c),a=c}return s}case"list-item-at":{let t=await this.evaluateList(e.source,n),a=await this.evaluate(e.itemIndex,n);return typeof a!="number"||!Number.isInteger(a)||a<0||a>=t.length?void 0:t[a]}case"equals":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return Xn(t,a)}case"greater-than":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return typeof t!="number"||typeof a!="number"?!1:t>a}case"less-than":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return typeof t!="number"||typeof a!="number"?!1:t<a}case"greater-than-or-equal":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return typeof t!="number"||typeof a!="number"?!1:t>=a}case"less-than-or-equal":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return typeof t!="number"||typeof a!="number"?!1:t<=a}case"not":{let t=await this.evaluate(e.operand,n);return t===!0?!1:t===!1?!0:void 0}case"and":{for(let t of e.operands)if(await this.evaluate(t,n)!==!0)return!1;return!0}case"or":{for(let t of e.operands)if(await this.evaluate(t,n)===!0)return!0;return!1}case"contains":{let t=await this.evaluateList(e.haystack,n),a=await this.evaluate(e.needle,n);for(let s of t)if(Xn(s,a))return!0;return!1}case"abs":{let t=de(await this.evaluate(e.value,n),"Abs");return Math.abs(t)}case"negate":return-de(await this.evaluate(e.value,n),"Negate");case"is-reference":{let t=await this.evaluate(e.check,n);return t instanceof E||t instanceof G}case"is-embedded":return await this.evaluate(e.check,n)instanceof M;case"is-list":{let t=await this.evaluate(e.check,n);return Array.isArray(t)}case"is-string":return typeof await this.evaluate(e.check,n)=="string";case"is-number":return typeof await this.evaluate(e.check,n)=="number";case"is-boolean":return typeof await this.evaluate(e.check,n)=="boolean";case"statement-object":{let t=await this.evaluate(e.source,n);if(!hn(t))return;let a=t;return a instanceof X||a instanceof me||a instanceof re||a instanceof V||a instanceof H||a instanceof T?a.object:void 0}case"let":{let t=await this.evaluate(e.bindValue,n),a=new Map(n);return a.set(e.bindName,t),this.evaluate(e.body,a)}case"get-statement-by-name":{let t=await this.evaluate(e.inSubject,n),a=await this.evaluate(e.byName,n);if(!(t instanceof Oe)||typeof a!="string")return;for(let s of t.statement)if(s.predicate?.subject?.name===a)return s;return}default:{let t=e;throw new Ee("Unknown expression kind")}}}async renderMarkdownLinks(e){let n=e.object,t="",a=0;for(let s of e.links){if(t+=n.slice(a,s.startOffset),s.target){let o=s.target.subject,i=s.displayText??await this.resolveLabel(o)??o.name;t+=`[${i}](${xn(o)})`}else t+=s.displayText??s.reference;a=s.endOffset}return t+=n.slice(a),t}async resolveLabel(e){let n=await this.resolver.resolveSubject(e,this.catalog);if(!n)return;let t=nn(n,Ft);return typeof t=="string"?t:void 0}async evaluateList(e,n){let t=await this.evaluate(e,n);return t==null?[]:Array.isArray(t)?t:[t]}async evaluateReverseIterator(e,n){if(e.kind==="pairwise-map"){let t=await this.evaluateList(e.source,n);if(t.length<2)return[];let a=[];for(let s=t.length-1;s>=1;s--){let o=new Map(n);o.set(e.firstVar,$e(t[s-1])),o.set(e.secondVar,$e(t[s]));let i=await this.evaluate(e.pairBody,o);if(i!=null)if(Array.isArray(i))for(let c of i)a.push(c);else a.push(i)}return a}if(e.kind==="for-each"){let t=await this.evaluateList(e.source,n),a=[];for(let s=t.length-1;s>=0;s--){let o=new Map(n);o.set(e.loopVar,$e(t[s]));let i=await this.evaluate(e.emit,o);if(i!=null)if(Array.isArray(i))for(let c of i)a.push(c);else a.push(i)}return a}if(e.kind==="list-map"){let t=await this.evaluateList(e.source,n),a=[];for(let s=t.length-1;s>=0;s--){let o=new Map(n);o.set(e.loopVar,$e(t[s])),a.push(await this.evaluate(e.mapBody,o))}return a}if(e.kind==="windowed-map"){let t=await this.evaluateList(e.source,n);if(t.length<e.windowSize)return[];let a=[];for(let s=t.length-e.windowSize;s>=0;s--){let o=t.slice(s,s+e.windowSize),i=new Map(n);i.set(e.windowVar,o);let c=await this.evaluate(e.windowBody,i);if(c!=null)if(Array.isArray(c))for(let l of c)a.push(l);else a.push(c)}return a}}};function nn(r,e){if(r instanceof Oe)return Tt(r,e);if(At(r))return ue(e,u.key)?r.key:ue(e,u.members)?r.members:void 0}function Tt(r,e){for(let n of r.statement){let t=bn(n);if(!(!t||!ue(t,e))&&(n instanceof X||n instanceof me||n instanceof re||n instanceof V||n instanceof H||n instanceof T))return n.object}}function Vt(r,e){let n=[];for(let t of r.statement){let a=bn(t);if(!(!a||!ue(a,e))){if(t instanceof V)n.push(t.object.subject);else if(t instanceof T)for(let s of t.object)s instanceof E&&n.push(s.subject)}}return n}function bn(r){return r.predicate?.subject}function Ve(r){if(r==null)return"";if(typeof r=="string")return r;if(typeof r=="number"||typeof r=="boolean")return String(r);if(Ae(r))return r.value;if(r instanceof Oe)return r.name??"";if(r instanceof E)return r.subject.name;if(Be(r))return r.name;let e=r.value;return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function $e(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)&&!(r instanceof Oe)&&!(r instanceof E)&&!(r instanceof M)&&"value"in r?r.value:r}function qn(r){return r==null?!1:typeof r=="string"||Array.isArray(r)?r.length>0:typeof r=="boolean"?r===!0:!0}function Be(r){return typeof r=="object"&&r!==null&&typeof r.publisher=="string"&&typeof r.package_=="string"&&typeof r.name=="string"}function At(r){return typeof r=="object"&&r!==null&&r.kind==="Partition"&&Array.isArray(r.members)}function de(r,e){if(typeof r=="number"&&Number.isFinite(r))return r;throw new Ee(`${e} requires numeric elements; got ${Mt(r)}`)}function kn(r){if(r instanceof G){let e=r.namespace??"",n=e.indexOf("/"),t=e.indexOf("@",n+1);return n<0||t<0?void 0:{publisher:e.substring(0,n),package_:e.substring(n+1,t),version:e.substring(t+1),name:r.name??""}}if(r instanceof E){let e=r.subject,n=e.version;return{publisher:e.publisher,package_:e.package_,version:n&&typeof n.major=="number"?`${n.major}.${n.minor}.${n.patch}`:"",name:e.name}}if(Be(r))return{publisher:r.publisher,package_:r.package_,version:"",name:r.name}}var xt=new Set(["stringValue","text","rawContent","key","propertyKey","linkLabel"]);function Wn(r){return typeof r=="string"||typeof r=="number"||typeof r=="boolean"||Ae(r)}function Yn(r){return Ae(r)?r.value:String(r)}function Mt(r){return r===void 0?"undefined":r===null?"null":Array.isArray(r)?`array(${r.length})`:typeof r}function Nt(r,e){let n=new Date(r);if(isNaN(n.getTime()))return"";let t=n.getUTCFullYear(),a=["January","February","March","April","May","June","July","August","September","October","November","December"][n.getUTCMonth()],s=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][n.getUTCMonth()],o=n.getUTCDate(),i=(c,l=2)=>String(c).padStart(l,"0");switch(e){case"iso-date":return`${t}-${i(n.getUTCMonth()+1)}-${i(o)}`;case"iso-datetime":return`${t}-${i(n.getUTCMonth()+1)}-${i(o)}T${i(n.getUTCHours())}:${i(n.getUTCMinutes())}:${i(n.getUTCSeconds())}Z`;case"short-date":return`${s} ${o}`;case"long-date":return`${a} ${o}, ${t}`;case"year":return String(t);case"month-year":return`${a} ${t}`}}function Xn(r,e){if(r==null||e===void 0||e===null)return!1;if(r===e)return!0;let n=typeof r=="object"&&"value"in r?r.value:void 0,t=typeof e=="object"&&"value"in e?e.value:void 0,a=n??r,s=t??e,o=Jn(r),i=Jn(e);return o&&i?o.publisher===i.publisher&&o.package_===i.package_&&o.name===i.name:typeof a=="string"&&typeof s=="string"||typeof a=="number"&&typeof s=="number"||typeof a=="boolean"&&typeof s=="boolean"?a===s:!1}function Jn(r){if(r instanceof E){let e=r.subject;return{publisher:e.publisher,package_:e.package_,name:e.name}}if(r instanceof G){let e=r.namespace??"",n=e.indexOf("/"),t=e.indexOf("@",n+1);if(n<0)return;let a=e.substring(0,n),s=t>=0?e.substring(n+1,t):e.substring(n+1);return{publisher:a,package_:s,name:r.name??""}}if(Be(r))return{publisher:r.publisher,package_:r.package_,name:r.name}}function hn(r){return r instanceof X||r instanceof me||r instanceof re||r instanceof V||r instanceof H||r instanceof T}function Pt(r){return r instanceof X||r instanceof me||r instanceof re?String(r.object??""):r instanceof V?r.object?.subject?.name??"":r instanceof H?"[embedded]":r instanceof T?(r.object??[]).map(n=>{if(n instanceof E)return n.subject.name;let t=n.name;if(t&&t.length>0)return t;let a=n.value;return typeof a=="string"||typeof a=="number"||typeof a=="boolean"?String(a):"[embedded]"}).join(", "):""}function Zn(r){if(r===void 0)return"\0undef";if(r===null)return"\0null";if(typeof r=="string")return`s:${r}`;if(typeof r=="number")return`n:${r}`;if(typeof r=="boolean")return`b:${r}`;if(r instanceof E){let e=r.subject;return`r:${e.publisher}/${e.package_}/${e.name}`}if(r instanceof Oe){let e=r.name??"";return`k:${r.namespace??""}/${e}`}return Be(r)?`u:${r.publisher}/${r.package_}/${r.name}`:`o:${JSON.stringify(r)}`}var q=class extends Error{constructor(n,t){super(`${n} (at ${t})`);this.path=t}path};function us(r,e){let n=r.name,t=Zt(e),a={catalog:e,depth:0};if(w(r,u.InstanceTransformation))return Dt(r,n,a,t);if(w(r,u.SetTransformation))return Bt(r,n,a,t);throw new q("Subject is not a recognized v3 transformation type \u2014 expected InstanceTransformation or SetTransformation",n)}function Dt(r,e,n,t){return{kind:"instance",name:r.name,inputPattern:rt(r,e),rule:tn(r,u.rule,`${e}.rule`,n),artifactName:tn(r,u.artifactName,`${e}.artifactName`,n),outputs:st(r,`${e}.outputs`),overrides:ot(r,`${e}.formatOverrides`,n),fragments:t}}function Bt(r,e,n,t){let a=Ie(r,u.partitionBy);return{kind:"set",name:r.name,inputPattern:rt(r,e),rule:tn(r,u.rule,`${e}.rule`,n),artifactName:tn(r,u.artifactName,`${e}.artifactName`,n),outputs:st(r,`${e}.outputs`),overrides:ot(r,`${e}.formatOverrides`,n),partitionBy:a,fragments:t}}function rt(r,e){let n=Je(r,u.inputPattern);if(!n)throw new q("inputPattern is required",e);return Ht(n,`${e}.inputPattern`)}function Ht(r,e){let n=Ie(r,u.matchesClass);if(!n)throw new q("matchesClass is required",e);let t=[];for(let o of ve(r,u.requires))if(o instanceof V)t.push($n(o.object.subject));else if(o instanceof T)for(let i of o.object)i instanceof E&&t.push($n(i.subject));let a=[],s=0;for(let o of ve(r,u.sortBy))if(o instanceof T)for(let i of o.object)i instanceof M&&a.push(Qn(i,`${e}.sortBy[${s++}]`));else o instanceof H&&a.push(Qn(o.object,`${e}.sortBy[${s++}]`));return{matchesClass:n,requires:t,sortBy:a}}function Qn(r,e){let n=Ie(r,u.byProperty);if(!n)throw new q("SortKey.byProperty is required",e);let t=Ie(r,u.order);if(!t)throw new q("SortKey.order is required",e);if(ue(t,u.ascending))return{byProperty:n,order:"ascending"};if(ue(t,u.descending))return{byProperty:n,order:"descending"};throw new q(`SortKey.order must reference tx.ascending or tx.descending; got ${t.publisher}/${t.package_}/${t.name}`,e)}function tn(r,e,n,t){let a=Je(r,e);if(!a)throw new q("expression is required",n);return Ue(a,n,t)}function Ue(r,e,n){if(w(r,u.StringLiteral))return{kind:"string-literal",value:he(r,u.stringLiteral,e)};if(w(r,u.IntegerLiteral))return{kind:"integer-literal",value:at(r,u.integerLiteral,e)};if(w(r,u.DecimalLiteral))return{kind:"decimal-literal",value:at(r,u.decimalLiteral,e)};if(w(r,u.BooleanLiteral))return{kind:"boolean-literal",value:na(r,u.booleanLiteral,e)};if(w(r,u.VarRef))return{kind:"var-ref",varName:he(r,u.varName,e)};if(w(r,u.PropertyRead))return{kind:"property-read",source:y(r,u.readSource,`${e}.readSource`,n),readProp:Ce(r,u.readProp,e,"readProp")};if(w(r,u.Traverse))return{kind:"traverse",source:y(r,u.traverseSource,`${e}.traverseSource`,n),through:Ce(r,u.through,e,"through"),step:y(r,u.step,`${e}.step`,n)};if(w(r,u.BuildAstNode))return{kind:"build-ast-node",astClass:Ce(r,u.astClass,e,"astClass"),set:Gt(r,`${e}.set`,n)};if(w(r,u.When))return{kind:"when",condition:y(r,u.condition,`${e}.condition`,n),thenBuild:y(r,u.thenBuild,`${e}.thenBuild`,n),elseBuild:zt(r,u.elseBuild,`${e}.elseBuild`,n)};if(w(r,u.Concat))return{kind:"concat",parts:vn(r,u.parts,`${e}.parts`,n)};if(w(r,u.Fallback))return{kind:"fallback",primary:y(r,u.primary,`${e}.primary`,n),alternate:y(r,u.alternate,`${e}.alternate`,n)};if(w(r,u.UriName))return{kind:"uri-name",source:y(r,u.uriNameOf,`${e}.uriNameOf`,n)};if(w(r,u.UriPublisher))return{kind:"uri-publisher",source:y(r,u.uriPublisherOf,`${e}.uriPublisherOf`,n)};if(w(r,u.UriPackage))return{kind:"uri-package",source:y(r,u.uriPackageOf,`${e}.uriPackageOf`,n)};if(w(r,u.UriVersion))return{kind:"uri-version",source:y(r,u.uriVersionOf,`${e}.uriVersionOf`,n)};if(w(r,u.SubjectUri))return{kind:"subject-uri",source:y(r,u.subjectOf,`${e}.subjectOf`,n)};if(w(r,u.UriLiteral))return{kind:"uri-literal",refTo:Ce(r,u.refTo,e,"refTo")};if(w(r,u.DisplayLabel))return{kind:"display-label",labelTarget:Ce(r,u.labelTarget,e,"labelTarget"),labelSource:Ce(r,u.labelSource,e,"labelSource")};if(w(r,u.ResolveRef))return{kind:"resolve-ref",source:y(r,u.resolveSource,`${e}.resolveSource`,n)};if(w(r,u.Normalize))return{kind:"normalize",source:y(r,u.normSource,`${e}.normSource`,n),normKind:qt(r,e)};if(w(r,u.UnescapedString))return{kind:"unescaped-string",source:y(r,u.unescapedSource,`${e}.unescapedSource`,n)};if(w(r,u.RenderMarkdown))return{kind:"render-markdown",source:y(r,u.renderSource,`${e}.renderSource`,n),readProp:Ce(r,u.renderProp,e,"renderProp"),format:Wt(r,e)};if(w(r,u.IsSet))return{kind:"is-set",check:y(r,u.checkExpr,`${e}.checkExpr`,n)};if(w(r,u.CallFragment))return Xt(r,e,n);if(w(r,u.Join))return{kind:"join",source:y(r,u.source,`${e}.source`,n),separator:he(r,u.separator,e)};if(w(r,u.Count))return{kind:"count",source:y(r,u.source,`${e}.source`,n)};if(w(r,u.Sum))return{kind:"sum",source:y(r,u.source,`${e}.source`,n)};if(w(r,u.Min))return{kind:"min",source:y(r,u.source,`${e}.source`,n)};if(w(r,u.Max))return{kind:"max",source:y(r,u.source,`${e}.source`,n)};if(w(r,u.Average))return{kind:"average",source:y(r,u.source,`${e}.source`,n)};if(w(r,u.ForEach))return{kind:"for-each",source:y(r,u.source,`${e}.source`,n),loopVar:he(r,u.loopVar,e),emit:y(r,u.emit,`${e}.emit`,n)};if(w(r,u.ListMap))return{kind:"list-map",source:y(r,u.source,`${e}.source`,n),loopVar:he(r,u.loopVar,e),mapBody:y(r,u.mapBody,`${e}.mapBody`,n)};if(w(r,u.Filter))return{kind:"filter",source:y(r,u.source,`${e}.source`,n),loopVar:he(r,u.loopVar,e),predicate:y(r,u.predicate,`${e}.predicate`,n)};if(w(r,u.PartitionBy))return{kind:"partition-by",source:y(r,u.source,`${e}.source`,n),loopVar:he(r,u.loopVar,e),partitionKey:y(r,u.partitionKey,`${e}.partitionKey`,n)};if(w(r,u.DistinctBy))return{kind:"distinct-by",source:y(r,u.source,`${e}.source`,n),loopVar:he(r,u.loopVar,e),distinctKey:y(r,u.distinctKey,`${e}.distinctKey`,n)};if(w(r,u.AllStatements))return{kind:"all-statements",source:y(r,u.statementsOf,`${e}.statementsOf`,n)};if(w(r,u.StatementPredicate))return{kind:"statement-predicate",source:y(r,u.predicateOf,`${e}.predicateOf`,n)};if(w(r,u.StatementValue))return{kind:"statement-value",source:y(r,u.valueOf,`${e}.valueOf`,n)};if(w(r,u.DateFormat))return{kind:"date-format",source:y(r,u.dateSource,`${e}.dateSource`,n),format:Yt(r,e)};if(w(r,u.Add))return{kind:"add",left:y(r,u.arithLeft,`${e}.arithLeft`,n),right:y(r,u.arithRight,`${e}.arithRight`,n)};if(w(r,u.Subtract))return{kind:"subtract",left:y(r,u.arithLeft,`${e}.arithLeft`,n),right:y(r,u.arithRight,`${e}.arithRight`,n)};if(w(r,u.Multiply))return{kind:"multiply",left:y(r,u.arithLeft,`${e}.arithLeft`,n),right:y(r,u.arithRight,`${e}.arithRight`,n)};if(w(r,u.Divide))return{kind:"divide",left:y(r,u.arithLeft,`${e}.arithLeft`,n),right:y(r,u.arithRight,`${e}.arithRight`,n)};if(w(r,u.Reverse))return{kind:"reverse",source:y(r,u.source,`${e}.source`,n)};if(w(r,u.WindowedMap)){let t=it(r,u.windowSize);if(t===void 0||!Number.isInteger(t)||t<1)throw new q("windowSize must be a positive integer",`${e}.windowSize`);return{kind:"windowed-map",source:y(r,u.source,`${e}.source`,n),windowSize:t,windowVar:he(r,u.windowVar,e),windowBody:y(r,u.windowBody,`${e}.windowBody`,n)}}if(w(r,u.PairwiseMap))return{kind:"pairwise-map",source:y(r,u.source,`${e}.source`,n),firstVar:he(r,u.firstVar,e),secondVar:he(r,u.secondVar,e),pairBody:y(r,u.pairBody,`${e}.pairBody`,n)};if(w(r,u.Scan))return{kind:"scan",source:y(r,u.source,`${e}.source`,n),initialState:y(r,u.initialState,`${e}.initialState`,n),stateVar:he(r,u.stateVar,e),elementVar:he(r,u.elementVar,e),accumulate:y(r,u.accumulate,`${e}.accumulate`,n)};if(w(r,u.ListItemAt))return{kind:"list-item-at",source:y(r,u.source,`${e}.source`,n),itemIndex:y(r,u.itemIndex,`${e}.itemIndex`,n)};if(w(r,u.Equals))return{kind:"equals",left:y(r,u.compareLeft,`${e}.compareLeft`,n),right:y(r,u.compareRight,`${e}.compareRight`,n)};if(w(r,u.GreaterThan))return{kind:"greater-than",left:y(r,u.compareLeft,`${e}.compareLeft`,n),right:y(r,u.compareRight,`${e}.compareRight`,n)};if(w(r,u.LessThan))return{kind:"less-than",left:y(r,u.compareLeft,`${e}.compareLeft`,n),right:y(r,u.compareRight,`${e}.compareRight`,n)};if(w(r,u.GreaterThanOrEqual))return{kind:"greater-than-or-equal",left:y(r,u.compareLeft,`${e}.compareLeft`,n),right:y(r,u.compareRight,`${e}.compareRight`,n)};if(w(r,u.LessThanOrEqual))return{kind:"less-than-or-equal",left:y(r,u.compareLeft,`${e}.compareLeft`,n),right:y(r,u.compareRight,`${e}.compareRight`,n)};if(w(r,u.Not))return{kind:"not",operand:y(r,u.operand,`${e}.operand`,n)};if(w(r,u.And))return{kind:"and",operands:vn(r,u.operands,`${e}.operands`,n)};if(w(r,u.Or))return{kind:"or",operands:vn(r,u.operands,`${e}.operands`,n)};if(w(r,u.Contains))return{kind:"contains",haystack:y(r,u.haystack,`${e}.haystack`,n),needle:y(r,u.needle,`${e}.needle`,n)};if(w(r,u.Abs))return{kind:"abs",value:y(r,u.value,`${e}.value`,n)};if(w(r,u.Negate))return{kind:"negate",value:y(r,u.value,`${e}.value`,n)};if(w(r,u.IsReference))return{kind:"is-reference",check:y(r,u.kindCheck,`${e}.kindCheck`,n)};if(w(r,u.IsEmbedded))return{kind:"is-embedded",check:y(r,u.kindCheck,`${e}.kindCheck`,n)};if(w(r,u.IsList))return{kind:"is-list",check:y(r,u.kindCheck,`${e}.kindCheck`,n)};if(w(r,u.IsString))return{kind:"is-string",check:y(r,u.kindCheck,`${e}.kindCheck`,n)};if(w(r,u.IsNumber))return{kind:"is-number",check:y(r,u.kindCheck,`${e}.kindCheck`,n)};if(w(r,u.IsBoolean))return{kind:"is-boolean",check:y(r,u.kindCheck,`${e}.kindCheck`,n)};if(w(r,u.StatementObject))return{kind:"statement-object",source:y(r,u.statementSource,`${e}.statementSource`,n)};if(w(r,u.Let))return{kind:"let",bindName:he(r,u.letName,e),bindValue:y(r,u.letValue,`${e}.letValue`,n),body:y(r,u.letBody,`${e}.letBody`,n)};if(w(r,u.GetStatementByName))return{kind:"get-statement-by-name",inSubject:y(r,u.inSubject,`${e}.inSubject`,n),byName:y(r,u.byName,`${e}.byName`,n)};throw new q("Expression is not of a recognized v3 type \u2014 embedded has no matching subclass of tx.Expression",e)}function y(r,e,n,t){let a=Je(r,e);if(!a)throw new q("child expression is required",n);return Ue(a,n,t)}function zt(r,e,n,t){let a=Je(r,e);if(a)return Ue(a,n,t)}function vn(r,e,n,t){let a=[],s=0;for(let o of ve(r,e))if(o instanceof T)for(let i of o.object)i instanceof M&&a.push(Ue(i,`${n}[${s++}]`,t));else o instanceof H&&a.push(Ue(o.object,`${n}[${s++}]`,t));return a}function Gt(r,e,n){let t=[],a=0;for(let s of ve(r,u.set))if(s instanceof T)for(let o of s.object)o instanceof M&&t.push(et(o,`${e}[${a++}]`,n));else s instanceof H&&t.push(et(s.object,`${e}[${a++}]`,n));return t}function et(r,e,n){return{field:Ce(r,u.field,e,"field"),value:y(r,u.bindValue,`${e}.bindValue`,n)}}function qt(r,e){let n=Ie(r,u.normKind);if(!n)throw new q("normKind is required",e);if(ue(n,u.NORM_TRIM_END))return"trim-end";if(ue(n,u.NORM_TO_UPPER))return"to-upper";if(ue(n,u.NORM_TO_LOWER))return"to-lower";if(ue(n,u.NORM_FIRST_CHAR))return"first-char";throw new q(`Unknown NormalizeKind: ${n.publisher}/${n.package_}/${n.name}`,e)}function Wt(r,e){let n=Ie(r,u.renderFormat);if(!n)throw new q("renderFormat is required",e);if(ue(n,u.RENDER_HTML))return"html";if(ue(n,u.RENDER_MARKDOWN))return"markdown";throw new q(`Unknown RenderFormat: ${n.publisher}/${n.package_}/${n.name}`,e)}var nt=new Set(["iso-date","iso-datetime","short-date","long-date","year","month-year"]);function Yt(r,e){let n=He(r,u.dateFormat);if(!n)throw new q("dateFormat is required",e);if(!nt.has(n))throw new q(`Unknown dateFormat "${n}"; supported: ${[...nt].join(", ")}`,e);return n}function Xt(r,e,n){let t=Ie(r,u.fragmentRef);if(!t)throw new q("fragmentRef is required",e);if(!Qt(n.catalog,t))throw new q(`ExpressionFragment not found: ${t.publisher}/${t.package_}/${t.name}`,e);return{kind:"call-fragment",fragmentKey:Jt(t)}}function Jt(r){return`${r.publisher}/${r.package_}/${r.name}`}function Zt(r){let e=new Map,n=[];for(let t of r){if(!(t instanceof G)||!w(t,u.ExpressionFragment))continue;let a=Je(t,u.body);if(!a)continue;let s=(t.namespace||"").split("@")[0]||"",o=s.indexOf("/");if(o<0)continue;let i=s.substring(0,o),c=s.substring(o+1),l=`${i}/${c}/${t.name}`;n.push({key:l,subject:t,bodyEmb:a,pubPkgName:`${s}/${t.name}`})}for(let t of n){let a=Ue(t.bodyEmb,`fragment(${t.pubPkgName})`,{catalog:r,depth:0});e.set(t.key,a)}return e}function Qt(r,e){for(let n of r)if(!(!(n instanceof G)||n.name!==e.name||!(n.namespace||"").startsWith(`${e.publisher}/${e.package_}@`))&&w(n,u.ExpressionFragment))return n}function st(r,e){let n=new Set;for(let t of ve(r,u.outputs))if(t instanceof V)n.add(t.object.subject.name);else if(t instanceof T)for(let a of t.object)a instanceof E&&n.add(a.subject.name);if(n.size===0)throw new q("outputs is required (at least one OutputFormat)",e);return n}function ot(r,e,n){let t=new Map,a=0;for(let s of ve(r,u.formatOverrides))if(s instanceof T){for(let o of s.object)if(o instanceof M){let[i,c]=tt(o,`${e}[${a++}]`);t.set(i,c)}}else if(s instanceof H){let[o,i]=tt(s.object,`${e}[${a++}]`);t.set(o,i)}return t}function tt(r,e){let n=Ie(r,u.formatTarget);if(!n)throw new q("formatTarget is required",e);let t=[];for(let i of ve(r,u.metadataKeys))if(i instanceof X)t.push(i.object);else if(i instanceof T)for(let c of i.object){let l=c.value;typeof l=="string"&&t.push(l)}let a=new Map;for(let i of ve(r,u.metadataRenames))if(i instanceof T){for(let c of i.object)if(c instanceof M){let l=He(c,u.fromKey),d=He(c,u.toKey);l&&d&&a.set(l,d)}}else if(i instanceof H){let c=i.object,l=He(c,u.fromKey),d=He(c,u.toKey);l&&d&&a.set(l,d)}let s=yn(r,u.trailingNewline),o=yn(r,u.omitWrapper);return[n.name,{metadataKeys:t.length>0?t:void 0,metadataRenames:a,trailingNewline:s,omitWrapper:o}]}function ea(r){return r.predicate?.subject}function ve(r,e){let n=[];for(let t of r.statement){let a=ea(t);a&&ue(a,e)&&n.push(t)}return n}function Je(r,e){for(let n of ve(r,e))if(n instanceof H)return n.object}function Ie(r,e){for(let n of ve(r,e))if(n instanceof V)return $n(n.object.subject)}function He(r,e){for(let n of ve(r,e))if(n instanceof X)return n.object}function it(r,e){for(let n of ve(r,e))if(n instanceof me)return n.object}function yn(r,e){for(let n of ve(r,e))if(n instanceof re)return n.object}function he(r,e,n){let t=He(r,e);if(t===void 0)throw new q(`${e.name} (string) is required`,n);return t}function at(r,e,n){let t=it(r,e);if(t===void 0)throw new q(`${e.name} (number) is required`,n);return t}function na(r,e,n){let t=yn(r,e);if(t===void 0)throw new q(`${e.name} (boolean) is required`,n);return t}function Ce(r,e,n,t){let a=Ie(r,e);if(!a)throw new q(`${t} (URI reference) is required`,n);return a}function $n(r){return{publisher:r.publisher,package_:r.package_,name:r.name}}var an=class{constructor(e,n,t){this.repository=e;this.parser=n;this.objectParser=t}repository;parser;objectParser;cache=new Map;async resolveSubject(e,n){let t=Ne(n,e);if(t)return t;let a=e.version,s=a&&typeof a.major=="number"?`@${a.major}.${a.minor}.${a.patch}`:"",o=`${e.publisher}/${e.package_}${s}`,i=this.cache.get(o);if(!i){let l=await this.repository.getDocumentsByNamespaceAsync(e.publisher,e.package_);if(l.length===0)return;let d=a&&typeof a.major=="number"?l.find(g=>{let m=g.metadata?.namespace_?.version;return m&&m.major===a.major&&m.minor===a.minor&&m.patch===a.patch})??l[0]:l[0],f=new Nn(d,this.repository);i=await this.objectParser.parseKanonaks(f),this.cache.set(o,i)}let c=Ne(i,e);if(c)return c;for(let l of i)if(l instanceof G&&l.name===e.name)return l}};var rn=class{byLang=new Map;constructor(e){for(let n of e){if(!n.language)continue;let t=[];for(let a of n.rules){if(!a.tokenClass||!a.pattern)continue;let s;try{s=new RegExp(a.pattern,"y")}catch{continue}t.push({tokenClass:a.tokenClass,re:s})}this.byLang.set(n.language,t)}}has(e){return this.byLang.has(e)}highlight(e,n){let t=this.byLang.get(e);return!t||t.length===0?De(n):n.split(`
|
|
18
|
+
`).map(a=>this.highlightLine(a,t)).join(`
|
|
19
|
+
`)}highlightLine(e,n){let t="",a=0;for(;a<e.length;){let s=!1;for(let o of n){o.re.lastIndex=a;let i=o.re.exec(e);if(i&&i[0].length>0){t+=`<span class="kan-tok-${o.tokenClass}">${De(i[0])}</span>`,a+=i[0].length,s=!0;break}}s||(t+=De(e[a]),a++)}return t}};var un={publisher:"kanonak.org",package_:"derivation",name:"look"},dn={publisher:"kanonak.org",package_:"derivation",name:"tokens"},Se={publisher:"kanonak.org",package_:"core-rdf",name:"Resource"},wn={publisher:"kanonak.org",package_:"core-rdf",name:"label"},ct={publisher:"kanonak.org",package_:"core-rdf",name:"comment"},ta={publisher:"kanonak.org",package_:"core-rdf",name:"range"},aa={publisher:"kanonak.org",package_:"core-rdf",name:"Class"},ra={publisher:"kanonak.org",package_:"core-owl",name:"Class"},sa={publisher:"kanonak.org",package_:"look",name:"Hero"},oa={publisher:"kanonak.org",package_:"look",name:"PropertyList"},ia={publisher:"kanonak.org",package_:"look",name:"PropertyTable"},ca={publisher:"kanonak.org",package_:"look",name:"BadgeRow"},la={publisher:"kanonak.org",package_:"look",name:"ChipRow"},ua={publisher:"kanonak.org",package_:"look",name:"ReferenceList"},da={publisher:"kanonak.org",package_:"look",name:"ReferencedBy"},fa={publisher:"kanonak.org",package_:"look",name:"Instances"},lt={publisher:"kanonak.org",package_:"look",name:"Markdown"},pa={publisher:"kanonak.org",package_:"look",name:"NavGroup"},ga={publisher:"kanonak.org",package_:"look",name:"nav"},jn={publisher:"kanonak.org",package_:"look",name:"NavLink"},ma={publisher:"kanonak.org",package_:"look",name:"footer"},ka={publisher:"kanonak.org",package_:"look",name:"text"},ha={publisher:"kanonak.org",package_:"look",name:"links"},ut={publisher:"kanonak.org",package_:"look",name:"target"},ba={publisher:"kanonak.org",package_:"look",name:"ResourceGrid"},va={publisher:"kanonak.org",package_:"look",name:"Timeline"},ya={publisher:"kanonak.org",package_:"look",name:"VersionDiff"},$a={publisher:"kanonak.org",package_:"look",name:"Figure"},wa={publisher:"kanonak.org",package_:"look",name:"Diagram"},ja={publisher:"kanonak.org",package_:"look",name:"facets"},Sa={publisher:"kanonak.org",package_:"look",name:"relation"},_a={publisher:"kanonak.org",package_:"look",name:"encode"},Ea={publisher:"kanonak.org",package_:"look",name:"cluster"},Ka={publisher:"kanonak.org",package_:"look",name:"connector"},Ra={publisher:"kanonak.org",package_:"look",name:"channels"},La={publisher:"kanonak.org",package_:"look",name:"mapPath"},Oa={publisher:"kanonak.org",package_:"look",name:"to"},Ua={publisher:"kanonak.org",package_:"look",name:"mark"},Ia={publisher:"kanonak.org",package_:"look",name:"expand"},Ca={publisher:"kanonak.org",package_:"look",name:"edges"},Fa={publisher:"kanonak.org",package_:"look",name:"nodeTier"},Ta={publisher:"kanonak.org",package_:"look",name:"diagramTier"},Va={publisher:"kanonak.org",package_:"look",name:"nodeNote"},Aa={publisher:"kanonak.org",package_:"look",name:"edgeLabel"},xa={publisher:"kanonak.org",package_:"look",name:"labelEdges"},Ma={publisher:"kanonak.org",package_:"look",name:"edgeValue"},Na={publisher:"kanonak.org",package_:"look",name:"figureTitle"},Pa={publisher:"kanonak.org",package_:"look",name:"titlePosition"},Da=`(function(){
|
|
20
|
+
if(window.__kanDiagramZoom)return;window.__kanDiagramZoom=1;
|
|
21
|
+
var TIERS=['chip','icon','card','full'];
|
|
22
|
+
var css='.kan-dgm-tier[hidden]{display:none}.kan-dgm-tiers{position:relative}'
|
|
23
|
+
+'.kan-dgm-tiers>.kan-dgm-btn{opacity:0;transition:opacity .12s}.kan-dgm-tiers:hover>.kan-dgm-btn,.kan-dgm-btn:focus{opacity:1}'
|
|
24
|
+
+'#kan-dgm-modal{position:fixed;inset:0;z-index:9999;display:none;background:rgba(0,0,0,.85);cursor:grab}'
|
|
25
|
+
+'#kan-dgm-stage{position:absolute;top:50%;left:50%}'
|
|
26
|
+
+'#kan-dgm-bar{position:fixed;top:14px;left:50%;transform:translateX(-50%);display:flex;gap:9px;align-items:center;font:12px sans-serif;color:#cbd5e1;background:rgba(12,18,32,.92);border:1px solid #1e293b;border-radius:999px;padding:7px 14px;user-select:none}'
|
|
27
|
+
+'#kan-dgm-bar .pip{width:9px;height:9px;border-radius:50%;background:#334155;cursor:pointer}'
|
|
28
|
+
+'#kan-dgm-bar .pip.on{background:#38bdf8}'
|
|
29
|
+
+'#kan-dgm-lbl{min-width:32px;text-transform:capitalize}';
|
|
30
|
+
var sty=document.createElement('style');sty.textContent=css;(document.head||document.documentElement).appendChild(sty);
|
|
31
|
+
var S={cont:null,mode:'snap',tier:1,z:1,x:0,y:0,drag:0,sx:0,sy:0,lock:0};
|
|
32
|
+
function el(id){return document.getElementById(id);}
|
|
33
|
+
function modal(){var m=el('kan-dgm-modal');if(m)return m;
|
|
34
|
+
m=document.createElement('div');m.id='kan-dgm-modal';
|
|
35
|
+
var st=document.createElement('div');st.id='kan-dgm-stage';m.appendChild(st);
|
|
36
|
+
var bar=document.createElement('div');bar.id='kan-dgm-bar';
|
|
37
|
+
var lbl=document.createElement('span');lbl.id='kan-dgm-lbl';bar.appendChild(lbl);
|
|
38
|
+
for(var i=0;i<4;i++){(function(i){var p=document.createElement('span');p.className='pip';p.title=TIERS[i];p.addEventListener('click',function(e){e.stopPropagation();setTier(i);});bar.appendChild(p);})(i);}
|
|
39
|
+
var h=document.createElement('span');h.textContent='scroll: zoom \\u00b7 drag: pan \\u00b7 esc';h.style.cssText='margin-left:6px;color:#64748b';bar.appendChild(h);
|
|
40
|
+
m.appendChild(bar);m.addEventListener('click',function(e){if(e.target===m)close();});document.body.appendChild(m);return m;}
|
|
41
|
+
function apply(){var st=el('kan-dgm-stage');if(st)st.style.transform='translate(calc(-50% + '+S.x+'px),calc(-50% + '+S.y+'px)) scale('+S.z+')';}
|
|
42
|
+
function updBar(){var b=el('kan-dgm-bar');if(!b)return;var geo=S.mode==='geo';var ps=b.querySelectorAll('.pip');for(var i=0;i<ps.length;i++){ps[i].style.display=geo?'none':'';ps[i].className='pip'+(i===S.tier?' on':'');}el('kan-dgm-lbl').textContent=geo?'zoom':TIERS[S.tier];}
|
|
43
|
+
function sizeVisible(){var c=S.cont;if(!c||S.mode==='geo')return;var svg=c.querySelector('.kan-dgm-tier:not([hidden]) svg');if(svg){var vb=(svg.getAttribute('viewBox')||'0 0 800 600').split(' ');var w=parseFloat(vb[2])||800;svg.style.width=Math.min(w,window.innerWidth*0.92)+'px';svg.style.height='auto';svg.style.display='block';}apply();}
|
|
44
|
+
function setTier(i){i=Math.max(0,Math.min(3,i));S.tier=i;var c=S.cont;if(!c)return;var ts=c.querySelectorAll('.kan-dgm-tier');for(var j=0;j<ts.length;j++){if(ts[j].getAttribute('data-tier')===TIERS[i])ts[j].removeAttribute('hidden');else ts[j].setAttribute('hidden','');}sizeVisible();updBar();}
|
|
45
|
+
function uniq(root){var seq=(window.__kanMk=(window.__kanMk||0)+1);var map={};var mk=root.querySelectorAll('marker[id]');for(var i=0;i<mk.length;i++){var o=mk[i].getAttribute('id');var n=o+'_z'+seq;map[o]=n;mk[i].setAttribute('id',n);}var all=root.querySelectorAll('[marker-end],[marker-start],[marker-mid]');for(var j=0;j<all.length;j++){(function(e){['marker-end','marker-start','marker-mid'].forEach(function(a){var v=e.getAttribute(a);if(!v)return;var mm=v.match(/url\\(#(.+?)\\)/);if(mm&&map[mm[1]])e.setAttribute(a,'url(#'+map[mm[1]]+')');});})(all[j]);}}
|
|
46
|
+
function open(tiersEl){modal();var st=el('kan-dgm-stage');var c=tiersEl.cloneNode(true);uniq(c);var bb=c.querySelector('.kan-dgm-btn');if(bb&&bb.parentNode)bb.parentNode.removeChild(bb);st.innerHTML='';st.appendChild(c);S.cont=c;S.x=0;S.y=0;S.z=1;
|
|
47
|
+
S.mode=c.getAttribute('data-geo')?'geo':'snap';
|
|
48
|
+
var vis=c.querySelector('.kan-dgm-tier:not([hidden])');var t=vis?vis.getAttribute('data-tier'):'icon';S.tier=Math.max(0,TIERS.indexOf(t));
|
|
49
|
+
el('kan-dgm-modal').style.display='block';
|
|
50
|
+
if(S.mode==='geo'){var bw=c.getBoundingClientRect().width||600;S.z=Math.min(1.8,(window.innerWidth*0.9)/bw);if(!(S.z>0))S.z=1;}else sizeVisible();
|
|
51
|
+
apply();updBar();}
|
|
52
|
+
function close(){var m=el('kan-dgm-modal');if(m){m.style.display='none';el('kan-dgm-stage').innerHTML='';S.cont=null;}}
|
|
53
|
+
document.addEventListener('wheel',function(e){var m=el('kan-dgm-modal');if(!m||m.style.display==='none')return;e.preventDefault();
|
|
54
|
+
if(S.mode==='geo'){S.z*=e.deltaY<0?1.15:1/1.15;S.z=Math.max(.2,Math.min(S.z,9));apply();return;}
|
|
55
|
+
var n=Date.now();if(n-S.lock<200)return;S.lock=n;setTier(S.tier+(e.deltaY<0?1:-1));},{passive:false});
|
|
56
|
+
document.addEventListener('mousedown',function(e){var m=el('kan-dgm-modal');if(!m||m.style.display==='none')return;S.drag=1;S.sx=e.clientX-S.x;S.sy=e.clientY-S.y;m.style.cursor='grabbing';});
|
|
57
|
+
document.addEventListener('mousemove',function(e){if(!S.drag)return;S.x=e.clientX-S.sx;S.y=e.clientY-S.sy;apply();});
|
|
58
|
+
document.addEventListener('mouseup',function(){S.drag=0;var m=el('kan-dgm-modal');if(m)m.style.cursor='grab';});
|
|
59
|
+
document.addEventListener('keydown',function(e){if(e.key==='Escape')close();});
|
|
60
|
+
function enhance(){var cs=document.querySelectorAll('.kan-dgm-tiers');for(var i=0;i<cs.length;i++){(function(c){if(c.__kz)return;c.__kz=1;
|
|
61
|
+
var b=document.createElement('button');b.type='button';b.className='kan-dgm-btn';b.textContent='\\u2922';b.setAttribute('aria-label','Open and zoom');
|
|
62
|
+
b.style.cssText='position:absolute;top:6px;right:6px;z-index:3;border:1px solid var(--kan-border,#333);background:var(--kan-bg-card,#111);color:var(--kan-text,#ccc);border-radius:6px;width:28px;height:28px;cursor:pointer;font-size:15px;line-height:1;padding:0';
|
|
63
|
+
b.addEventListener('click',function(ev){ev.preventDefault();ev.stopPropagation();open(c);});c.appendChild(b);})(cs[i]);}}
|
|
64
|
+
if(document.readyState!=='loading')enhance();else document.addEventListener('DOMContentLoaded',enhance);
|
|
65
|
+
})();`,Ze={chip:56,icon:120,card:240,full:420},Ba=["chip","icon","card","full"],Ha={56:"chip",120:"icon",240:"card",420:"full"},_e=11,za={publisher:"kanonak.org",package_:"look",name:"placement"},Ga={publisher:"kanonak.org",package_:"look",name:"width"},qa=4,Wa={publisher:"kanonak.org",package_:"look",name:"StatRow"},Ya={publisher:"kanonak.org",package_:"look",name:"Horizon"},Xa={publisher:"kanonak.org",package_:"look",name:"PackageContents"},Sn={publisher:"kanonak.org",package_:"core-kanonak",name:"Package"},Ja={publisher:"kanonak.org",package_:"core-kanonak",name:"Publisher"},Za={publisher:"kanonak.org",package_:"look",name:"FeaturedResource"},Qa={publisher:"kanonak.org",package_:"look",name:"PublisherPackages"},er={publisher:"kanonak.org",package_:"look",name:"packages"},nr={publisher:"kanonak.org",package_:"code-grammars",name:"CodeGrammar"},tr={publisher:"kanonak.org",package_:"code-grammars",name:"language"},ar={publisher:"kanonak.org",package_:"code-grammars",name:"rule"},rr={publisher:"kanonak.org",package_:"code-grammars",name:"tokenClass"},sr={publisher:"kanonak.org",package_:"code-grammars",name:"pattern"},or={publisher:"kanonak.org",package_:"look",name:"Links"},ir={publisher:"kanonak.org",package_:"link",name:"url"},cr={publisher:"kanonak.org",package_:"link",name:"links"};var lr={publisher:"kanonak.org",package_:"look",name:"Distribution"},ur={publisher:"kanonak.org",package_:"look",name:"alphaPath"},dr={publisher:"kanonak.org",package_:"look",name:"betaPath"},_n={publisher:"kanonak.org",package_:"look",name:"SectionHeading"},fr={publisher:"kanonak.org",package_:"look",name:"SectionNav"},dt={publisher:"kanonak.org",package_:"look",name:"heading"},pr={publisher:"kanonak.org",package_:"look",name:"note"},gr={publisher:"kanonak.org",package_:"look",name:"VersionDelta"},mr={publisher:"kanonak.org",package_:"look",name:"TimePlot"},kr={publisher:"kanonak.org",package_:"look",name:"Details"},hr={publisher:"kanonak.org",package_:"look",name:"EmbeddedViews"},br={publisher:"kanonak.org",package_:"look",name:"skip"},vr={publisher:"kanonak.org",package_:"derivation",name:"derivations"},yr={publisher:"kanonak.org",package_:"look",name:"laneBy"},$r={publisher:"kanonak.org",package_:"look",name:"stats"},wr={publisher:"kanonak.org",package_:"look",name:"statPath"},jr={publisher:"kanonak.org",package_:"look",name:"statLabel"},ft={publisher:"kanonak.org",package_:"look",name:"labelPath"},Sr={publisher:"kanonak.org",package_:"look",name:"badgePath"},En={publisher:"kanonak.org",package_:"look",name:"orderBy"},pt={publisher:"kanonak.org",package_:"look",name:"track"},sn={publisher:"kanonak.org",package_:"look",name:"metricPath"},Kn={publisher:"kanonak.org",package_:"look",name:"hueBy"},gt={publisher:"kanonak.org",package_:"look",name:"lowerPath"},mt={publisher:"kanonak.org",package_:"look",name:"upperPath"},_r={publisher:"kanonak.org",package_:"look",name:"axisMin"},Er={publisher:"kanonak.org",package_:"look",name:"axisMax"},Kr={publisher:"kanonak.org",package_:"look",name:"valueLabel"};var kt={publisher:"kanonak.org",package_:"look",name:"semanticSvg"},Rr={publisher:"kanonak.org",package_:"look",name:"tierChip"},Lr={publisher:"kanonak.org",package_:"look",name:"tierIcon"},Or={publisher:"kanonak.org",package_:"look",name:"tierCard"},Ur={publisher:"kanonak.org",package_:"look",name:"tierFull"},Ir={publisher:"kanonak.org",package_:"core-rdf",name:"type"},ht=6,Rn={publisher:"kanonak.org",package_:"look",name:"bands"},Cr={publisher:"kanonak.org",package_:"look",name:"title"},Fr={publisher:"kanonak.org",package_:"look",name:"eyebrow"},Tr={publisher:"kanonak.org",package_:"look",name:"subtitle"},bt={publisher:"kanonak.org",package_:"look",name:"badges"},fe={publisher:"kanonak.org",package_:"look",name:"source"},Vr={publisher:"kanonak.org",package_:"look",name:"via"},Ar={publisher:"kanonak.org",package_:"look",name:"size"},xr={publisher:"kanonak.org",package_:"look",name:"icon"},Mr={publisher:"kanonak.org",package_:"look",name:"avatar"},Nr={publisher:"kanonak.org",package_:"look",name:"contents"},Pr={publisher:"kanonak.org",package_:"look",name:"transitive"},Dr={publisher:"kanonak.org",package_:"look",name:"chips"},vt={publisher:"kanonak.org",package_:"look",name:"entries"},Br={publisher:"kanonak.org",package_:"look",name:"urlForm"},In=class{constructor(e){this.catalog=e}catalog;linkMode="single-publisher";setLinkMode(e){return this.linkMode=e,this}get publisherFirst(){return this.linkMode==="open-world"}linkBase(e){return this.publisherFirst?`/${e}`:""}resourceHref(e,n,t="="){return An.formatResourceUrl(e,t,{contextPublisher:n,...this.publisherFirst?{publisherFirst:!0}:{}})}packageHref(e,n,t){return`${this.linkBase(e)}/${n}${t?`/${t}`:""}`}publisherHref(e){return`${this.linkBase(e)}/`}_codeHighlighter;findCascadedLook(e){let n=Gr(e)?void 0:on(e);return n?{declaration:n,sourceClass:{publisher:ne(e),package_:(e.namespace||"").split("/")[1]?.split("@")[0]??"",name:e.name}}:this.lookFromTypeRefs(be(e))}lookFromTypeRefs(e){let n=new Set,t=[...e];for(;t.length>0;){let s=t.shift().subject,o=Z(s);if(n.has(o))continue;n.add(o);let i=ke(this.catalog,s);for(let c of i){let l=on(c);if(l)return{declaration:l,sourceClass:{publisher:s.publisher,package_:s.package_,name:s.name}}}for(let c of i)for(let l of Qe(c))t.push(l)}if(!n.has(Z(Se)))for(let a of ke(this.catalog,Se)){let s=on(a);if(s)return{declaration:s,sourceClass:{...Se}}}}findCascadedTokens(e){let n=this.explainCascadedTokens(e),t=new Map;for(let[a,s]of n)t.set(a,s.value);return t}explainCascadedTokens(e){let n=new Map,t=(o,i)=>{for(let[c,l]of Hr(o))n.has(c)||n.set(c,{value:l,sourceNamespace:o.namespace||"",sourceName:o.name,level:i})};t(e,"instance");let a=new Set,s=be(e);for(;s.length>0;){let o=s.shift(),i=Z(o.subject);if(a.has(i))continue;a.add(i);let c=i===Z(Se)?"resource-floor":"class",l=ke(this.catalog,o.subject);if(l.length!==0)for(let d of l){t(d,c);for(let f of Qe(d))s.push(f)}}if(!a.has(Z(Se))){let o=ke(this.catalog,Se);for(let i of o)t(i,"resource-floor")}return n}async renderSvg(e){let n=D(this.catalog,e).label,t=(n.trim().charAt(0)||"?").toUpperCase(),a=`${e.namespace??""}/${e.name}`,s=this.collectCascadedSvgTiers(e),o=new Map([["input",e],["label",n],["firstLetter",t],["uri",a],["resourceKey",e.name]]),i=await this.evaluateTier(s.tierChip,o),c=await this.evaluateTier(s.tierIcon,o),l=await this.evaluateTier(s.tierCard,o),d=await this.evaluateTier(s.tierFull,o),g=[...this.findCascadedTokens(e)].map(([m,k])=>`--kan-${m}: ${k};`).join(" ");return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" style="${Ke(g)}">
|
|
66
|
+
<style>
|
|
67
|
+
.tier-chip,.tier-icon,.tier-card{display:none}
|
|
68
|
+
.tier-full{display:block}
|
|
69
|
+
@media (max-width:400px){.tier-full{display:none}.tier-card{display:block}}
|
|
70
|
+
@media (max-width:160px){.tier-card{display:none}.tier-icon{display:block}}
|
|
71
|
+
@media (max-width:60px){.tier-icon{display:none}.tier-chip{display:block}}
|
|
72
|
+
</style>
|
|
73
|
+
<g class="tier-chip">${i}</g>
|
|
74
|
+
<g class="tier-icon">${c}</g>
|
|
75
|
+
<g class="tier-card">${l}</g>
|
|
76
|
+
<g class="tier-full">${d}</g>
|
|
77
|
+
</svg>`}resolverInstance;expressionResolver(){if(!this.resolverInstance){let e=new Fn,n=new Cn(e);this.resolverInstance=new an(n,e,new Vn(e))}return this.resolverInstance}async evaluateTier(e,n){if(!e)return"";let t;try{t=Ue(e,"semanticSvg-tier",{catalog:this.catalog,depth:0})}catch{return""}let a=new Xe(this.expressionResolver(),this.catalog);if(t.kind==="concat"){let o=[];for(let i of t.parts){let c=await a.evaluate(i,n);o.push($t(i.kind,c))}return o.join("")}let s=await a.evaluate(t,n);return $t(t.kind,s)}async evaluateCarrier(e,n){if(!e)return;let t;try{t=Ue(e,"look-carrier",{catalog:this.catalog,depth:0})}catch{return}let a=new Xe(this.expressionResolver(),this.catalog),s=new Map([["input",n]]),o=await a.evaluate(t,s),i=_t(o);return i===""?void 0:i}async evaluateCarrierNum(e,n){let t=await this.evaluateCarrier(e,n);return t===void 0?NaN:parseFloat(t)}readEmbeddedCarrier(e,n){let t=W(e,n);return t instanceof H&&t.object instanceof M?t.object:void 0}referenceLabel(e){let n=e.subject,t=ke(this.catalog,n);if(t.length===0){let a=ee(this.catalog,n);a&&t.push(a)}for(let a of t){let s=D(this.catalog,a);if(s.label!==a.name)return s.label}return n.name}collectCascadedSvgTiers(e){let n={},t=c=>{let l=W(c,kt);if(!(l instanceof H))return;let d=l.object,f=cn(d,Rr),g=cn(d,Lr),m=cn(d,Or),k=cn(d,Ur);n.tierChip===void 0&&f!==void 0&&(n.tierChip=f),n.tierIcon===void 0&&g!==void 0&&(n.tierIcon=g),n.tierCard===void 0&&m!==void 0&&(n.tierCard=m),n.tierFull===void 0&&k!==void 0&&(n.tierFull=k)};t(e);let a=e.namespace||"",s=a.indexOf("/");if(s>=0){let c=a.indexOf("@"),l={publisher:a.slice(0,s),package_:a.slice(s+1,c>=0?c:a.length),name:e.name};for(let d of ke(this.catalog,l))t(d)}let o=new Set,i=be(e);for(;i.length>0;){let c=i.shift(),l=Z(c.subject);if(o.has(l))continue;o.add(l);let d=ke(this.catalog,c.subject);for(let f of d){t(f);for(let g of Qe(f))i.push(g)}}if(!o.has(Z(Se)))for(let c of ke(this.catalog,Se))t(c);return n}renderStylesheet(e){let n=this.explainStylesheet(e),t=[];for(let[o,i]of n.tokens)t.push(` --kan-${o}: ${i.value};`);let a=t.length>0?`:root {
|
|
78
|
+
${t.join(`
|
|
79
|
+
`)}
|
|
80
|
+
}`:":root { /* no tokens resolved */ }",s=n.baseStylesheet.css??"";return`${qr(n)}
|
|
81
|
+
${a}
|
|
82
|
+
${s}`}explainStylesheet(e){let n=this.explainCascadedTokens(e),t=this.explainBaseStylesheet(ne(e)),a=this.findCascadedLook(e),s=[];return t.css||(t.problem==="content-property-unresolved"?s.push(`Base stylesheet asset ${t.sourceNamespace}/base-stylesheet is in the catalog but its site.content property did not resolve \u2014 the package was likely cached without its imports block. Pages will render UNSTYLED (CSS stops at :root). Fix: re-install it from its published source: kanonak install kanonak.org/look-styles`):s.push("No look-styles package in the render catalog \u2014 pages will render UNSTYLED (CSS stops at :root). The look stack is ambient (not imported): it must be in the workspace, the global cache, or fetchable from kanonak.org by the user running the render. Fix: kanonak install kanonak.org/look-styles")),n.size===0&&s.push("No design tokens resolved \u2014 the :root block is empty. The universal token floor lives on rdfs.Resource in kanonak.org/look-tokens; that package is missing from the render catalog. Fix: kanonak install kanonak.org/look-tokens"),a||s.push(`No look (band declaration) resolved for ${e.namespace}/${e.name} \u2014 the HTML body will be an empty comment. The universal look floor lives on rdfs.Resource in kanonak.org/universal-look. Fix: kanonak install kanonak.org/universal-look`),{resource:{namespace:e.namespace||"",name:e.name},tokens:n,baseStylesheet:t,...a?{look:{sourceClass:a.sourceClass}}:{},warnings:s}}findBaseStylesheet(e){return this.explainBaseStylesheet(e).css}explainBaseStylesheet(e){let n="kanonak.org/site/content",t=f=>ye((f.namespace||"").split("@")[1]??""),a=[],s,o,i,c;for(let f of this.catalog){if(!(f instanceof G)||f.name!=="base-stylesheet")continue;let g=f.namespace||"";if(g.startsWith(`${e}/look-styles@`)){a.push(g);let m=t(f);m&&(!o||en(m,o)>0)&&(s=f,o=m)}else if(g.startsWith("kanonak.org/look-styles@")){a.push(g);let m=t(f);m&&(!c||en(m,c)>0)&&(i=f,c=m)}}let l=s??i;if(!l)return{problem:"no-look-styles-in-catalog",candidates:a};let d=l===s?"publisher-override":"universal-default";for(let f of l.statement){let g=f.predicate?.subject;if(!g)continue;if(`${g.publisher}/${g.package_}/${g.name}`===n&&f instanceof X)return{css:f.object,sourceNamespace:l.namespace||"",scope:d,candidates:a}}return{problem:"content-property-unresolved",sourceNamespace:l.namespace||"",scope:d,candidates:a}}async renderHtml(e){let n=this.findCascadedLook(e);if(!n)return`<!-- LookRenderer: no derivation.look found for ${e.namespace}/${e.name} -->`;let t=Ln(n.declaration);if(t.length===0)return"<!-- LookRenderer: look declaration has no bands -->";let a=ne(e),s=this.collectSectionHeadings(t);this.diagramScriptEmitted=!1,this.diagramArrowSeq=0;let o=[];for(let i of t){let c=ze(i);c&&R(c,_n)&&o.push('<div style="clear:both"></div>'),o.push(this.applyBandPlacement(i,await this.renderBand(i,e,a,s)))}return o.push('<div style="clear:both"></div>'),o.join(`
|
|
83
|
+
`)}applyBandPlacement(e,n){let t=Q(e,za);if(t!=="floatLeft"&&t!=="floatRight")return n;let a=t==="floatLeft"?"left":"right",s=Q(e,Ga),o=s&&/^\d+(\.\d+)?(%|px|rem|em)$/.test(s)?s:"42%";return`<div class="kan-band-float kan-band-${a}" style="float:${a};width:${o};margin:${a==="left"?"0 1.25rem 0.75rem 0":"0 0 0.75rem 1.25rem"}">${n}</div>`}collectSectionHeadings(e){let n=[];for(let t of e){let a=ze(t);if(!a||!R(a,_n))continue;let s=Q(t,dt);s&&n.push({slug:wt(s),label:s})}return n}publisherSubject(e){for(let t of this.catalog){if(!(t instanceof G)||ne(t)!==e||!be(t).some(s=>R(s.subject,Ja)))continue;return ke(this.catalog,{publisher:e,package_:(t.namespace||"").split("/")[1]?.split("@")[0]??"",name:t.name})[0]??t}let n=new G;return n.namespace=e,n.name=e,n.statement=[V.parse("kanonak.org/core-rdf/type","kanonak.org/core-kanonak/Publisher"),X.parse("kanonak.org/core-rdf/label",e)],n}hasDeclaredView(e){let n=this.findCascadedLook(e);return n?!(a=>a.publisher===Se.publisher&&a.package_===Se.package_&&a.name===Se.name||a.publisher===Sn.publisher&&a.package_===Sn.package_&&a.name===Sn.name)(n.sourceClass):!1}renderPackageVersionList(e,n,t){let a=ne(t),s=this.renderNavGroup(t,a),o=this.renderBreadcrumb(t,a,{bareOverview:!0}),i=n.map(l=>`<a class="kan-resource-card" href="${p(this.packageHref(a,e,l))}/"><h3 class="kan-resource-card-title">${p(l)}</h3></a>`).join(`
|
|
84
|
+
`),c=`<header class="kan-hero">
|
|
85
|
+
<span class="kan-hero-eyebrow">PACKAGE</span>
|
|
86
|
+
<h1 class="kan-hero-title">${p(e)}</h1>
|
|
87
|
+
</header>
|
|
88
|
+
<section class="kan-resource-grid">
|
|
89
|
+
${i}
|
|
90
|
+
</section>`;return`<!doctype html>
|
|
91
|
+
<html lang="en">
|
|
92
|
+
<head>
|
|
93
|
+
<meta charset="utf-8">
|
|
94
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
95
|
+
<title>${p(e)}</title>
|
|
96
|
+
<link rel="stylesheet" href="${p(t.name)}.css">
|
|
97
|
+
</head>
|
|
98
|
+
<body>
|
|
99
|
+
${s}
|
|
100
|
+
${o}
|
|
101
|
+
<main class="kan-main">
|
|
102
|
+
${c}
|
|
103
|
+
</main>
|
|
104
|
+
</body>
|
|
105
|
+
</html>
|
|
106
|
+
`}async renderDocument(e,n){let t=await this.renderHtml(e),a=D(this.catalog,e).label,s=n?.rootIndex?"index.css":`${e.name}.css`,o=!n?.rootIndex&&this.hasSvgDerivation(e)?`<figure class="kan-figure"><img src="${p(e.name)}.svg" alt=""></figure>
|
|
107
|
+
`:"",i=ne(e),c=this.renderNavGroup(e,i),l=this.renderSiteFooter(i),d=n?.rootIndex?"":this.renderBreadcrumb(e,i,n);return`<!doctype html>
|
|
108
|
+
<html lang="en">
|
|
109
|
+
<head>
|
|
110
|
+
<meta charset="utf-8">
|
|
111
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
112
|
+
<title>${p(a)}</title>
|
|
113
|
+
<link rel="stylesheet" href="${p(s)}">
|
|
114
|
+
</head>
|
|
115
|
+
<body>
|
|
116
|
+
${c}
|
|
117
|
+
${d}
|
|
118
|
+
<main class="kan-main">
|
|
119
|
+
${o}${t}
|
|
120
|
+
</main>
|
|
121
|
+
${l}
|
|
122
|
+
</body>
|
|
123
|
+
</html>
|
|
124
|
+
`}hasSvgDerivation(e){let n=new Set,t=be(e);for(;t.length>0;){let a=t.shift(),s=Z(a.subject);if(n.has(s))continue;n.add(s);let o=ee(this.catalog,a.subject);if(o){for(let i of o.statement)if(i instanceof T&&we(i,"kanonak.org","derivation","derivations")){for(let c of i.object??[])if(c instanceof M)for(let l of c.statement){if(!(l instanceof V)||!we(l,"kanonak.org","derivation","format")||!(l.object instanceof E))continue;let d=l.object.subject;if(d.publisher==="kanonak.org"&&d.package_==="formats"&&d.name==="svg")return!0}}for(let i of Qe(o))t.push(i)}}return!1}async renderBand(e,n,t,a=[],s=""){let o=ze(e);return o?R(o,fr)?this.renderSectionNav(a):R(o,sa)?this.renderHero(e,n,t):R(o,oa)?this.renderPropertyList(e,n,t):R(o,ia)?this.renderPropertyTable(e,n,t,s):R(o,ca)?this.renderBadgeRow(e,n,t):R(o,la)?this.renderChipRow(e,n,t):R(o,ua)?this.renderReferenceList(e,n,t):R(o,da)?this.renderReferencedBy(e,n,t):R(o,fa)?this.renderInstances(e,n,t):R(o,lt)?this.renderMarkdown(e,n,t):R(o,or)?this.renderLinks(e,n):R(o,pa)?this.renderNavGroup(n,t):R(o,ba)?this.renderResourceGrid(e,t,n):R(o,va)?this.renderTimeline(e,t):R(o,ya)?this.renderVersionDiff(e,t):R(o,$a)?this.renderFigure(e,n,t):R(o,wa)?this.renderDiagram(e,n,t):R(o,Wa)?this.renderStatRow(e,n):R(o,Ya)?this.renderHorizon(e,n,t):R(o,Xa)?this.renderPackageContents(n,t):R(o,Za)?this.renderFeaturedResource(e,t):R(o,Qa)?this.renderPublisherPackages(e,t):R(o,lr)?this.renderDistribution(e,n):R(o,_n)?this.renderSectionHeading(e):R(o,gr)?this.renderVersionDelta(e,n):R(o,mr)?this.renderTimePlot(e,n,t):R(o,kr)?this.renderDetails(e,n,t):R(o,hr)?this.renderEmbeddedViews(e,n,t,s):`<!-- LookRenderer: unsupported band ${o.publisher}/${o.package_}/${o.name} -->`:"<!-- LookRenderer: band has no rdf:type -->"}async collectTrackedSeries(e,n,t,a){let{hueBy:s,lowerPath:o,upperPath:i}=a??{},c=new Map,l=e.length;for(let d=0;d<e.length;d++){let f=e[d],g=this.readPropertyValueReferences(f,n);for(let m of g){let k=ee(this.catalog,{publisher:m.subject.publisher,package_:m.subject.package_,name:m.subject.name,...m.subject.version?{version:m.subject.version}:{}});if(!k)continue;let b=m.subject.name,h=c.get(b);h||(h={key:b,label:D(this.catalog,k).label,points:new Array(l).fill(null),...o?{lower:new Array(l).fill(null)}:{},...i?{upper:new Array(l).fill(null)}:{}},c.set(b,h));let v=await this.evaluateCarrierNum(t,k);if(Number.isFinite(v)&&(h.points[d]=v),o&&h.lower){let j=await this.evaluateCarrierNum(o,k);Number.isFinite(j)&&(h.lower[d]=j)}if(i&&h.upper){let j=await this.evaluateCarrierNum(i,k);Number.isFinite(j)&&(h.upper[d]=j)}if(s){let j=await this.evaluateCarrierNum(s,k);Number.isFinite(j)&&(h.hue=j)}h.lastSubject=k}}return[...c.values()]}hrefForSubject(e,n,t="="){let a=e.namespace||"",s=a.split("/")[1]?.split("@")[0]??"",o=a.split("@")[1]??"",i=o?ye(o):void 0;return this.resourceHref({publisher:ne(e),package_:s,name:e.name,...i?{version:i}:{}},n,t)}async renderVersionDiff(e,n){let t=B(e,fe);if(!t)return"<!-- LookRenderer.VersionDiff: no look.source -->";let a=this.readEmbeddedCarrier(e,sn),s=B(e,pt);if(!s||!a)return"<!-- LookRenderer.VersionDiff: needs look.track + look.metricPath -->";let o=B(e,En),i=this.readEmbeddedCarrier(e,Kn),c=this.findInstancesOfClass(t);if(c.length===0)return"<!-- LookRenderer.VersionDiff: no instances -->";let l=m=>o?this.readPropertyValueText(m,o)??"":"",d=c.slice().sort((m,k)=>l(m).localeCompare(l(k))),f=await this.collectTrackedSeries(d,s,a,{hueBy:i});return f.length===0?"<!-- LookRenderer.VersionDiff: no tracked series -->":`<section class="kan-vdiff">${f.map((m,k)=>{let b=m.hue!==void 0?m.hue:Math.round(k*360/f.length),h=m.points.filter(U=>U!==null);if(h.length===0)return"";let v=h[0],j=h[h.length-1],S=j-v,_;if(Math.abs(S)>=.005){let U=S>0?"up":"down",N=S>0?"\u25B2":"\u25BC";_=`<span class="kan-vdiff-delta ${U}">${S>0?"+":""}${S.toFixed(2)} ${N}</span>`}else _='<span class="kan-vdiff-delta flat">\u2014</span>';let L=m.lastSubject&&this.isLinkable(ne(m.lastSubject),n)?`<a href="${p(this.hrefForSubject(m.lastSubject,n))}">${p(m.label)}</a>`:p(m.label);return`<div class="kan-vdiff-row" style="--kan-vdiff-hue:${b}"><span class="kan-vdiff-label">${L}</span><span class="kan-vdiff-start">${v.toFixed(2)}</span>`+this.sparkline(m.points,b)+`<span class="kan-vdiff-end">${j.toFixed(2)}</span>`+_+"</div>"}).join("")}</section>`}sparkline(e,n){let o=`hsl(${n},65%,60%)`,i=e.filter(h=>h!==null);if(i.length===0)return'<svg class="kan-vdiff-spark" viewBox="0 0 132 30" xmlns="http://www.w3.org/2000/svg"></svg>';let c=Math.min(...i),d=Math.max(...i)-c,f=e.length,g=h=>f<=1?132/2:4+h/(f-1)*124,m=h=>d<1e-9?30/2:26-(h-c)/d*22,k=[],b=[];return e.forEach((h,v)=>{if(h===null)return;let j=g(v),S=m(h);k.push(`${j.toFixed(1)},${S.toFixed(1)}`),b.push(`<circle cx="${j.toFixed(1)}" cy="${S.toFixed(1)}" r="2" fill="${o}"/>`)}),`<svg class="kan-vdiff-spark" viewBox="0 0 132 30" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" role="img"><polyline points="${k.join(" ")}" fill="none" stroke="${o}" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/>`+b.join("")+"</svg>"}svgUrlForSubject(e,n,t="="){return`${this.hrefForSubject(e,n,t)}.svg`}renderFigure(e,n,t){let a=n,s=B(e,fe);if(s){let d=ee(this.catalog,s);d&&(a=d)}let o=this.svgUrlForSubject(a,t),i=D(this.catalog,a).label,c=Q(e,Ar);return`<figure class="kan-figure${c==="small"||c==="medium"||c==="large"?` kan-figure-${c}`:""}"><img class="kan-figure-img" src="${p(o)}" alt="${p(i)}" loading="lazy"/></figure>`}diagramArrowSeq=0;diagramScriptEmitted=!1;async renderDiagram(e,n,t,a=0,s=new Set){let o=this.gatherValueItems(W(e,ja)).filter(k=>k instanceof M);if(o.length===0)return"<!-- LookRenderer.Diagram: no look.facets -->";let i=[];for(let k of o){let b=B(k,Sa);if(!b){i.push("<!-- LookRenderer.Diagram: facet has no resolvable look.relation -->");continue}let h=B(k,_a),v=this.resolveFacetNodes(n,b);if(v.length===0){i.push(`<!-- LookRenderer.Diagram: relation ${b.publisher}/${b.package_}/${b.name} resolved to 0 instances -->`);continue}let j=await this.resolveFacetChannels(k,v),S=W(k,Ua),_=S instanceof H&&S.object instanceof M?S.object:void 0,L=Q(k,Fa),U=L&&Ze[L]!==void 0?Ze[L]:void 0,N=U??this.classTierSize(v),I=Ha[N??Ze.icon]??"icon",ce=this.readEmbeddedCarrier(k,Va),C=B(k,Ia),P=C?ee(this.catalog,C):void 0;if(P){i.push(await this.renderDiagramExpand(v,P,t,a,s,ce,U));continue}if(h&&R(h,Ka)){let Y=B(k,Ca),se=this.facetEdgeLabel(k,Y??b),le=this.readEmbeddedCarrier(k,Ma);i.push(await this.embedTiers(I,O=>Y?this.renderDiagramDag(v,Y,j,t,O,se,le):this.renderDiagramConnector(n,v,j,t,O,se,le)));continue}if(h&&!R(h,Ea)){i.push(`<!-- LookRenderer.Diagram: unknown encode role ${h.publisher}/${h.package_}/${h.name} -->`);continue}i.push(_?`<div class="kan-dgm-tiers" data-geo="1"><div class="kan-dgm-tier" data-tier="card">${await this.renderDiagramCluster(v,j,_,t,N)}</div></div>`:await this.embedTiers(I,Y=>this.renderDiagramCluster(v,j,void 0,t,Y)))}let c=Q(e,Na),l=Q(e,Pa),d=k=>`<div class="kan-diagram-title" style="font-weight:600;font-size:0.95rem;color:var(--kan-text);${k}">${p(c)}</div>`,f=c&&l!=="bottom"?d("margin:0 0 .5rem"):"",g=c&&l==="bottom"?d("margin:.5rem 0 0"):"",m="";return a===0&&!this.diagramScriptEmitted&&(this.diagramScriptEmitted=!0,m=`<script>${Da}</script>`),`<section class="kan-diagram">${f}${i.join("")}${g}${m}</section>`}async embedTiers(e,n){let t=[];for(let a of Ba){let s=await n(Ze[a]);t.push(`<div class="kan-dgm-tier" data-tier="${a}"${a===e?"":" hidden"}>${s}</div>`)}return`<div class="kan-dgm-tiers">${t.join("")}</div>`}async renderDiagramExpand(e,n,t,a,s,o,i){let c=[];for(let l of e){let d=`${l.namespace??""}/${l.name}`,f=await this.diagramNodeRow(l,t,i??56,o),m=a<qa&&!s.has(d)?await this.renderDiagram(n,l,t,a+1,new Set([...s,d])):"",k=m?`<div style="margin-left:30px;border-left:2px solid var(--kan-border);padding-left:14px;margin-top:6px">${m}</div>`:"";c.push(`<div class="kan-diagram-node" style="margin:6px 0">${f}${k}</div>`)}return`<figure class="kan-diagram-figure"><div class="kan-diagram-tree">${c.join("")}</div></figure>`}async diagramNodeRow(e,n,t=56,a){let s=this.hrefForSubject(e,n),o=this.svgUrlForSubject(e,n),i=D(this.catalog,e).label,c=a?await this.evaluateCarrier(a,e):void 0,l=c!==void 0?`<span class="kan-diagram-node-note" style="display:block;font-size:0.8em;color:var(--kan-text-dim)">${p(c)}</span>`:"";return`<a href="${p(s)}" style="display:inline-flex;align-items:center;gap:10px;text-decoration:none"><img src="${p(o)}" width="${t}" height="${t}" alt="" loading="lazy"/><span><span class="kan-diagram-node-label">${p(i)}</span>${l}</span></a>`}classTierSize(e){let n;for(let t of e)for(let a of be(t)){let s=ee(this.catalog,a.subject);if(!s)continue;let o=Q(s,Ta),i=o?Ze[o]:void 0;i!==void 0&&(n=n===void 0?i:Math.max(n,i))}return n}resolveFacetNodes(e,n){let t=[];for(let a of this.readPropertyValueReferences(e,n)){let s=a.subject,o=ee(this.catalog,{publisher:s.publisher,package_:s.package_,name:s.name,...s.version?{version:s.version}:{}});o&&t.push(o)}return t}async resolveFacetChannels(e,n){let t=this.gatherValueItems(W(e,Ra)).filter(s=>s instanceof M),a=[];for(let s of t){let o=this.readEmbeddedCarrier(s,La),i=Q(s,Oa);if(!o||!i)continue;let c=[];for(let k of n){let b=await this.evaluateCarrierNum(o,k);c.push(Number.isFinite(b)?b:NaN)}let l=c.filter(k=>Number.isFinite(k)),d=l.length?Math.min(...l):0,g=(l.length?Math.max(...l):0)-d,m=c.map(k=>Number.isFinite(k)&&g>0?(k-d)/g:.5);a.push({to:i,norm:m})}return a}facetEdgeLabel(e,n){let t=Q(e,Aa);if(t)return t;if(zr(e,xa)&&n){let s=ee(this.catalog,n);if(s)return D(this.catalog,s).label}}async edgeText(e,n,t){let a=t&&n?await this.evaluateCarrier(t,n):void 0,s=[e,a].filter(o=>!!o);return s.length?s.join(" "):void 0}edgeLabelEl(e,n,t){return`<text x="${e.toFixed(1)}" y="${n.toFixed(1)}" text-anchor="middle" class="kan-diagram-edge-label" style="font-size:11px;paint-order:stroke;stroke:var(--kan-bg);stroke-width:3px;fill:var(--kan-text-dim)">${p(t)}</text>`}async renderDiagramCluster(e,n,t,a,s){let o=s??132,i=18,c=18,l=n.find(b=>b.to==="opacity");if(t){let b=[];for(let h=0;h<e.length;h++){let v=e[h],j=await this.renderBand(t,v,a),S=this.hrefForSubject(v,a),_=D(this.catalog,v).label,L=l?`opacity:${(.4+l.norm[h]*.6).toFixed(2)};`:"";b.push(`<a class="kan-diagram-mark" href="${p(S)}" style="display:block;text-decoration:none;${L}">${j}<span class="kan-diagram-mark-label">${p(_)}</span></a>`)}return`<figure class="kan-diagram-figure"><div class="kan-diagram-marks" style="display:flex;flex-wrap:wrap;gap:18px;align-items:flex-start">${b.join("")}</div></figure>`}let d=Math.min(e.length,4),f=Math.ceil(e.length/d),g=c*2+d*o+(d-1)*i,m=c*2+f*o+(f-1)*i,k=e.map((b,h)=>{let v=h%d,j=Math.floor(h/d),S=c+v*(o+i),_=c+j*(o+i),L=l?.4+l.norm[h]*.6:1;return this.diagramTile(b,S,_,o,a,L)}).join("");return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${g} ${m}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${k}</svg></figure>`}async renderDiagramConnector(e,n,t,a,s,o,i){let c=s??120,l=24,d=130,f=18,g=t.find(C=>C.to==="thickness"),m=t.find(C=>C.to==="opacity"),k=n.length,b=k*c+(k-1)*l,h=f*2+b,v=f*2+c+d+c,j=f,S=f+(b-c)/2,_=f+c+d,L=`kan-arrow-${this.diagramArrowSeq++}`,U=[],N=[],I=[];for(let C=0;C<n.length;C++){let P=n[C],Y=f+C*(c+l),se=j+c,le=S+c/2,O=_-_e,J=Y+c/2,F=(se+_)/2,$=g?1.5+g.norm[C]*5.5:2,x=m?.4+m.norm[C]*.6:1,z=m?` stroke-opacity="${x.toFixed(2)}"`:"";U.push(`<path d="M${se.toFixed(1)},${le.toFixed(1)} C${F.toFixed(1)},${le.toFixed(1)} ${F.toFixed(1)},${J.toFixed(1)} ${O.toFixed(1)},${J.toFixed(1)}" class="kan-diagram-edge" fill="none" stroke="var(--kan-border)" stroke-width="${$.toFixed(1)}"${z} marker-end="url(#${L})"/>`);let K=await this.edgeText(o,P,i);K&&N.push(this.edgeLabelEl((se+_)/2,(le+J)/2-5,K)),I.push(this.diagramTile(P,_,Y,c,a,m?x:1))}let ce=this.diagramTile(e,j,S,c,a);return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${v.toFixed(0)} ${h.toFixed(0)}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${this.arrowMarkerDef(L,"var(--kan-border)")}${U.join("")}${N.join("")}${ce}${I.join("")}</svg></figure>`}arrowMarkerDef(e,n){return`<defs><marker id="${e}" viewBox="0 0 ${_e} ${_e}" refX="0" refY="${(_e/2).toFixed(1)}" markerWidth="${_e}" markerHeight="${_e}" markerUnits="userSpaceOnUse" orient="auto"><path d="M0,1 L${_e},${(_e/2).toFixed(1)} L0,${_e-1}" fill="${n}"/></marker></defs>`}async renderDiagramDag(e,n,t,a,s,o,i){let c=s??110,l=110,d=22,f=18,g=new Map(e.map(($,x)=>[$.name,x])),m=new Set(e.map($=>$.name)),k=new Map(e.map($=>[$.name,[]])),b=new Map(e.map($=>[$.name,[]]));for(let $ of e)for(let x of this.readPropertyValueReferences($,n)){let z=x.subject.name;z!==$.name&&m.has(z)&&(k.get($.name).push(z),b.get(z).push($.name))}let h=new Map,v=new Set,j=$=>{let x=h.get($);if(x!==void 0)return x;if(v.has($))return 0;v.add($);let z=0;for(let K of b.get($)??[])z=Math.max(z,j(K)+1);return v.delete($),h.set($,z),z};for(let $ of e)j($.name);let S=Math.min(...h.values());if(S>0)for(let $ of[...h.keys()])h.set($,h.get($)-S);let _=Math.max(0,...h.values()),L=Array.from({length:_+1},()=>[]);for(let $ of e)L[h.get($.name)].push($);let U=Math.max(1,...L.map($=>$.length)),N=!1;for(let[$,x]of k)for(let z of x)h.get(z)<=h.get($)&&(N=!0);let I=N?84:0,ce=U*c+(U-1)*d,C=f*2+(_+1)*c+_*l,P=f*2+I+ce,Y=new Map;L.forEach(($,x)=>{let z=$.length*c+($.length-1)*d,K=f+I+(ce-z)/2;$.forEach((A,pe)=>Y.set(A.name,{x:f+x*(c+l),y:K+pe*(c+d)}))});let se=t.find($=>$.to==="thickness"),le=`kan-arrow-${this.diagramArrowSeq++}`,O=[],J=[];for(let[$,x]of k){let z=Y.get($);for(let K of x){let A=Y.get(K),pe=A.x>=z.x,ge=se?1.5+se.norm[g.get($)]*4.5:2,te,oe,ie;if(pe){let ae=z.x+c,Fe=z.y+c/2,Le=A.x-_e,Ge=A.y+c/2,xe=(ae+Le)/2;te=`M${ae.toFixed(1)},${Fe.toFixed(1)} C${xe.toFixed(1)},${Fe.toFixed(1)} ${xe.toFixed(1)},${Ge.toFixed(1)} ${Le.toFixed(1)},${Ge.toFixed(1)}`,oe=(ae+Le)/2,ie=(Fe+Ge)/2-5}else{let ae=z.x+c/2,Fe=z.y,Le=A.x+c/2,Ge=A.y-_e,xe=f+I*.2;te=`M${ae.toFixed(1)},${Fe.toFixed(1)} C${ae.toFixed(1)},${xe.toFixed(1)} ${Le.toFixed(1)},${xe.toFixed(1)} ${Le.toFixed(1)},${Ge.toFixed(1)}`,oe=(ae+Le)/2,ie=xe+4}let Re=pe?"":' stroke-dasharray="6 4"';O.push(`<path d="${te}" class="kan-diagram-edge" fill="none" stroke="var(--kan-accent)" stroke-width="${ge.toFixed(1)}" stroke-opacity="0.75"${Re} marker-end="url(#${le})"/>`);let je=await this.edgeText(o,e[g.get($)],i);je&&J.push(this.edgeLabelEl(oe,ie,je))}}let F=e.map($=>{let x=Y.get($.name);return this.diagramTile($,x.x,x.y,c,a)}).join("");return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${C.toFixed(0)} ${P.toFixed(0)}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${this.arrowMarkerDef(le,"var(--kan-accent)")}${O.join("")}${J.join("")}${F}</svg></figure>`}diagramTile(e,n,t,a,s,o=1){let i=this.hrefForSubject(e,s),c=this.svgUrlForSubject(e,s),l=D(this.catalog,e).label,d=o<1?` opacity="${o.toFixed(2)}"`:"";return`<a href="${p(i)}"><image href="${p(c)}" x="${n}" y="${t}" width="${a}" height="${a}"${d}><title>${p(l)}</title></image></a>`}async renderStatRow(e,n){let t=W(e,$r),a=this.gatherValueItems(t).filter(o=>o instanceof M);if(a.length===0)return"<!-- LookRenderer.StatRow: no look.stats -->";let s=[];for(let o of a){let i=this.readEmbeddedCarrier(o,wr);if(!i)continue;let c=await this.evaluateCarrier(i,n);if(c===void 0)continue;let l=Q(o,jr)??"";s.push('<div class="kan-stat">'+(l?`<span class="kan-stat-label">${p(l)}</span>`:"")+`<span class="kan-stat-val">${p(c)}</span></div>`)}return s.length===0?"":`<div class="kan-stat-row">${s.join("")}</div>`}renderHorizon(e,n,t){let a=B(e,fe);if(!a)return"<!-- LookRenderer.Horizon: no look.source -->";let s=this.gatherValueItems(W(n,a)).filter(i=>i instanceof M);return s.length===0?"":`<section class="kan-horizon">${s.map(i=>this.renderConditionNode(i,t,0)).join("")}</section>`}renderConditionNode(e,n,t){let a=ze(e),s=a?this.readLabelForUri({publisher:a.publisher,package_:a.package_,name:a.name})??a.name:"Condition",o=[],i=[];for(let g of e.statement){let m=g.predicate?.subject;if(!m||m.name==="type")continue;let k=this.readLabelForUri({publisher:m.publisher,package_:m.package_,name:m.name})??m.name;if(g instanceof X||g instanceof me||g instanceof re)o.push(`<div class="kan-cond-field"><span class="kan-cond-key">${p(k)}</span><span class="kan-cond-v">${p(String(g.object))}</span></div>`);else if(g instanceof V&&g.object instanceof E){let b=g.object.subject,h=this.readLabelForUri({publisher:b.publisher,package_:b.package_,name:b.name})??b.name;o.push(`<div class="kan-cond-field"><span class="kan-cond-key">${p(k)}</span><span class="kan-cond-v">${p(h)}</span></div>`)}else if(g instanceof H)i.push(this.renderConditionNode(g.object,n,t+1));else if(g instanceof T)for(let b of g.object??[])b instanceof M&&i.push(this.renderConditionNode(b,n,t+1))}let c=o.length?`<div class="kan-cond-fields">${o.join("")}</div>`:"",l=i.length?`<div class="kan-cond-children">${i.join("")}</div>`:"",d=i.length>0,f=d?`<span class="kan-cond-op">${p(s)}</span>`:`<div class="kan-cond-type">${p(s)}</div>`;return`<div class="kan-cond ${d?"kan-cond-branch":"kan-cond-leaf"}">${f}${c}${l}</div>`}renderSectionHeading(e){let n=e,t=Q(n,dt);if(!t)return"<!-- LookRenderer.SectionHeading: no look.heading -->";let a=Q(n,pr);return`<div class="kan-section" id="${wt(t)}"><h2 class="kan-section-title">${p(t)}</h2>`+(a?`<p class="kan-section-note">${p(a)}</p>`:"")+"</div>"}renderSectionNav(e){return e.length===0?"<!-- LookRenderer.SectionNav: no section headings in this view -->":`<nav class="kan-section-nav" aria-label="On this page">${e.map(t=>`<a class="kan-section-nav-link" href="#${p(t.slug)}">${p(t.label)}</a>`).join("")}</nav>`}async renderVersionDelta(e,n){let t=this.readEmbeddedCarrier(e,sn);if(!t)return"<!-- LookRenderer.VersionDelta: no look.metricPath -->";let a=async C=>{let P=await this.evaluateCarrierNum(t,C);return Number.isFinite(P)?P:void 0},s=await a(n);if(s===void 0)return"";let o=C=>ye((C.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},i=(C,P)=>C.major-P.major||C.minor-P.minor||C.patch-P.patch,c={publisher:ne(n),package_:(n.namespace||"").split("/")[1]?.split("@")[0]??"",name:n.name},l=o(n),d,f;for(let C of ke(this.catalog,c)){let P=o(C);i(P,l)<0&&(!f||i(P,f)>0)&&(d=C,f=P)}if(!d||!f)return'<div class="kan-delta kan-delta-first">First tracked in this version</div>';let g=await a(d);if(g===void 0)return"";let m=s-g,k=Math.abs(m)<.005?"flat":m>0?"up":"down",b=k==="up"?"\u25B2":k==="down"?"\u25BC":"\u2014",h=k==="up"?"#34d399":k==="down"?"#f87171":"var(--kan-text-faint)",v=`${f.major}.${f.minor}.${f.patch}`,j=320,S=46,_=14,L=30,U=C=>_+Math.min(1,Math.max(0,C))*(j-2*_),N=U(g),I=U(s),ce=`<svg class="kan-delta-track" viewBox="0 0 ${j} ${S}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img"><line x1="${_}" y1="${L}" x2="${j-_}" y2="${L}" class="kan-delta-base"/><line x1="${N.toFixed(1)}" y1="${L}" x2="${I.toFixed(1)}" y2="${L}" stroke="${h}" stroke-width="3"/><circle cx="${N.toFixed(1)}" cy="${L}" r="4" class="kan-delta-prev"/><circle cx="${I.toFixed(1)}" cy="${L}" r="5.5" fill="${h}"/><text x="${N.toFixed(1)}" y="${L-9}" text-anchor="middle" class="kan-delta-tick kan-delta-tick-prev">${g.toFixed(2)}</text><text x="${I.toFixed(1)}" y="${L+17}" text-anchor="middle" class="kan-delta-tick">${s.toFixed(2)}</text></svg>`;return`<div class="kan-delta"><div class="kan-delta-head"><span class="kan-delta-vs">vs ${p(v)}</span><span class="kan-delta-badge ${k}">${m>0?"+":""}${m.toFixed(2)} ${b}</span></div>`+ce+"</div>"}async renderTimePlot(e,n,t){let a=B(e,fe),s=B(e,En);if(!a||!s)return"<!-- LookRenderer.TimePlot: needs look.source + look.orderBy -->";let o=this.readEmbeddedCarrier(e,yr),i=this.readEmbeddedCarrier(e,ft),c=[];for(let O of this.readPropertyValueReferences(n,a)){let J=ee(this.catalog,{publisher:O.subject.publisher,package_:O.subject.package_,name:O.subject.name,...O.subject.version?{version:O.subject.version}:{}});if(!J)continue;let F=this.readPropertyValueText(J,s)??"",$=Date.parse(F);if(!Number.isFinite($))continue;let x=o?await this.evaluateCarrier(o,J)??"":"",z=(i?await this.evaluateCarrier(i,J):void 0)??D(this.catalog,J).label;c.push({t:$,dateStr:F,lane:x,label:z,href:this.hrefForSubject(J,t),linkable:this.isLinkable(ne(J),t)})}if(c.length===0)return"<!-- LookRenderer.TimePlot: no dated points -->";let l=[];for(let O of c)l.includes(O.lane)||l.push(O.lane);let d=Math.min(...c.map(O=>O.t)),f=Math.max(...c.map(O=>O.t));f===d&&(f=d+1);let g=l.some(O=>O),m=720,k=g?96:16,b=18,h=12,v=24,j=36,S=h+l.length*j+v,_=k,L=m-b,U=L-_,N=O=>_+(O-d)/(f-d)*U,I=O=>h+O*j+j/2,ce=O=>Math.round(O*360/Math.max(1,l.length)),C=[];l.forEach((O,J)=>{let F=I(J);C.push(`<line x1="${_}" y1="${F.toFixed(1)}" x2="${L}" y2="${F.toFixed(1)}" class="kan-plot-guide"/>`),O&&C.push(`<text x="${(k-8).toFixed(1)}" y="${(F+4).toFixed(1)}" text-anchor="end" class="kan-plot-lane">${Ke(O)}</text>`)});let P={},Y=[];for(let O of c){let J=l.indexOf(O.lane),$=((P[O.lane]=(P[O.lane]??0)+1)%3-1)*7,x=N(O.t),z=I(J)+$,K=`${ln(O.dateStr)} \xB7 ${O.label}`,A=`<circle cx="${x.toFixed(1)}" cy="${z.toFixed(1)}" r="5" fill="hsl(${ce(J)},65%,60%)" class="kan-plot-pt"><title>${Ke(K)}</title></circle>`;Y.push(O.linkable?`<a href="${p(O.href)}" class="kan-plot-link">${A}</a>`:A)}let se=`<text x="${_}" y="${(S-6).toFixed(1)}" text-anchor="start" class="kan-plot-axis">${Ke(ln(new Date(d).toISOString()))}</text><text x="${L}" y="${(S-6).toFixed(1)}" text-anchor="end" class="kan-plot-axis">${Ke(ln(new Date(f).toISOString()))}</text>`;return`<section class="kan-plot">${`<svg class="kan-plot-svg" viewBox="0 0 ${m} ${S}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+C.join("")+Y.join("")+se+"</svg>"}</section>`}renderDetails(e,n,t){let a=On(e,br),s=this.detailRows(n,t,a);return s?`<dl class="kan-details">${s}</dl>`:"<!-- LookRenderer.Details: no properties -->"}detailRows(e,n,t){let a=[];for(let s of e.statement){let o=s.predicate?.subject;if(!o||this.isMetaPredicate(o)||t.some(l=>R(l,o)))continue;let i=this.readLabelForUri({publisher:o.publisher,package_:o.package_,name:o.name})??o.name,c=this.detailValue(s,n,t);c&&a.push(`<dt class="kan-details-key">${p(i)}</dt><dd class="kan-details-val">${c}</dd>`)}return a.join("")}detailValue(e,n,t){if(e instanceof X)return St(e.object);if(e instanceof me||e instanceof re)return p(String(e.object));if(e instanceof V&&e.object instanceof E)return this.detailReferenceLink(e.object,n);if(e instanceof H)return this.detailEmbedded(e.object,n,t);if(e instanceof T){let a=e.object??[];return a.length>0&&a.every(s=>s instanceof M)?a.map(s=>this.detailEmbedded(s,n,t)).join(""):a.map(s=>s instanceof E?this.detailReferenceLink(s,n):s instanceof M?this.detailEmbedded(s,n,t):p(String(s))).filter(s=>s).join(", ")}return""}detailReferenceLink(e,n){let t=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name;if(!this.isLinkable(e.subject.publisher,n))return`<span class="kan-link-plain">${p(t)}</span>`;let a=this.urlForReference(e,void 0,n);return`<img class="kan-md-chip" src="${p(`${a}.svg`)}" alt="" loading="lazy"><a class="kan-link" href="${p(a)}">${p(t)}</a>`}detailEmbedded(e,n,t){let a=ze(e),s=a?this.readLabelForUri({publisher:a.publisher,package_:a.package_,name:a.name})??a.name:"",o=this.detailRows(e,n,t);return'<div class="kan-details-embed">'+(s?`<span class="kan-details-type">${p(s)}</span>`:"")+(o?`<dl class="kan-details">${o}</dl>`:"")+"</div>"}rangeTypeRefs(e){let n=ee(this.catalog,e);if(!n)return[];let t=W(n,ta);return t instanceof V&&t.object instanceof E?[t.object]:[]}async renderEmbeddedViews(e,n,t,a=""){let s=B(e,fe);if(!s)return"<!-- LookRenderer: EmbeddedViews missing look.source -->";let o=this.gatherValueItems(W(n,s)).filter(m=>m instanceof M);if(o.length===0)return"";let i=a?`${a}.${s.name}`:s.name,c=W(e,Nr),l=c instanceof re?c.object===!0:c instanceof X&&c.object==="true",d=[],f=[];for(let m of o){let k=m,b=m.name?`${i}.${m.name}`:"";if(l&&b){let U=D(this.catalog,k).label||m.name||b;d.push(`<a class="kan-section-nav-link" href="#${p(b)}">${p(U)}</a>`)}let h=be(k),v=h.length>0?h:this.rangeTypeRefs(s),j=on(k)?this.findCascadedLook(k):this.lookFromTypeRefs(v),S="";if(j){let U=[];for(let N of Ln(j.declaration))U.push(await this.renderBand(N,k,t,[],b));S=U.join(`
|
|
125
|
+
`)}else{let U=this.detailRows(m,t,[]);S=U?`<dl class="kan-details">${U}</dl>`:""}let _=b?` id="${p(b)}"`:"",L=b?this.anchorLink(b):"";f.push(`<section class="kan-embedded-view"${_}>${L}${S}</section>`)}return`<div class="kan-embedded-views">${d.length>0?`<nav class="kan-section-nav" aria-label="On this page">${d.join("")}</nav>
|
|
126
|
+
`:""}${f.join(`
|
|
127
|
+
`)}</div>`}anchorLink(e){return`<a class="kan-anchor" href="#${p(e)}" title="${p(e)}" aria-label="Link to this resource">#</a>`}isMetaPredicate(e){return R(e,Ir)||R(e,wn)||R(e,ct)||R(e,un)||R(e,dn)||R(e,vr)||R(e,kt)||R(e,cr)}renderPackageContents(e,n){let t=e.namespace||"";if(!t)return"";let a=this.catalog.filter(o=>o instanceof G&&o.namespace===t&&o.name!==e.name);return a.length===0?`<!-- LookRenderer.PackageContents: no members in ${t} -->`:(a.sort((o,i)=>{let c=D(this.catalog,o).label,l=D(this.catalog,i).label;return c.localeCompare(l)}),`<section class="kan-pkg-grid">${a.map(o=>{let i=D(this.catalog,o),c=i.label,l=i.summary,d=l?Un(l,160):"",f=this.hrefForSubject(o,n),g=this.svgUrlForSubject(o,n);return`<a class="kan-pkg-card" href="${p(f)}"><img class="kan-pkg-card-svg" src="${p(g)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${p(c)}</span>`+(d?`<span class="kan-pkg-card-comment">${p(d)}</span>`:"")+"</span></a>"}).join("")}</section>`)}renderReferencedBy(e,n,t){let a=B(e,Vr),s={publisher:ne(n),package_:(n.namespace||"").split("/")[1]?.split("@")[0]??"",name:n.name},o=Z(s),i=g=>ye((g.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},c=(g,m)=>g.major-m.major||g.minor-m.minor||g.patch-m.patch,l=new Map;for(let g of this.catalog){if(!(g instanceof G))continue;let m=Z({publisher:ne(g),package_:(g.namespace||"").split("/")[1]?.split("@")[0]??"",name:g.name});if(m!==o)for(let k of g.statement){let b=k.predicate?.subject;if(!b||b.name==="type"||a&&Z(b)!==Z(a))continue;let h=[];if(k instanceof V&&k.object instanceof E)h.push(k.object);else if(k instanceof T)for(let _ of k.object??[])_ instanceof E&&h.push(_);if(!h.some(_=>Z(_.subject)===o))continue;let v=Z(b),j=l.get(v);j||(j={label:this.readLabelForUri(b)??b.name,best:new Map},l.set(v,j));let S=j.best.get(m);(!S||c(i(g),i(S))>0)&&j.best.set(m,g)}}return l.size===0?"<!-- LookRenderer.ReferencedBy: no incoming references -->":`<div class="kan-section"><h2 class="kan-section-title">Referenced by</h2></div>${[...l.values()].sort((g,m)=>g.label.localeCompare(m.label)).map(g=>{let k=[...g.best.values()].sort((b,h)=>D(this.catalog,b).label.localeCompare(D(this.catalog,h).label)).map(b=>this.resourceCard(b,t,n.namespace??void 0)).join("");return`<div class="kan-rel-group"><h3 class="kan-rel-prop"><span class="kan-rel-dir" title="incoming \u2014 references this resource">\u2190</span> ${p(g.label)}</h3><section class="kan-pkg-grid">${k}</section></div>`}).join("")}`}resourceCard(e,n,t){let a=D(this.catalog,e),s=a.summary?Un(a.summary,160):"",o=be(e).map(h=>this.readLabelForUri({publisher:h.subject.publisher,package_:h.subject.package_,name:h.subject.name})??h.subject.name),c='<span class="kan-pkg-card-body">'+(o.length>0?`<span class="kan-card-types">${o.map(h=>`<span class="kan-card-type">${p(h)}</span>`).join("")}</span>`:"")+`<span class="kan-pkg-card-title">${p(a.label)}</span>`+(s?`<span class="kan-pkg-card-comment">${p(s)}</span>`:"")+"</span>",l=this.isLinkable(ne(e),n),d=l?`<a class="kan-pkg-card-link" href="${p(this.hrefForSubject(e,n))}"><img class="kan-pkg-card-svg" src="${p(this.svgUrlForSubject(e,n))}" alt="" loading="lazy"/>`+c+"</a>":`<span class="kan-pkg-card-link">${c}</span>`,f=e.namespace||"",g=f.split("/")[0]??"",[m,k]=(f.split("/")[1]??"").split("@"),b="";if(m&&f!==t){let h=k?`<span class="kan-card-at">@</span><span class="kan-card-ver">${p(k)}</span>`:"";if(l){let v=`<span class="kan-card-pkg">${p(m)}</span>${h}`;b=`<a class="kan-pkg-card-foot" href="${p(this.packageHref(g,m,k||void 0))}" title="${p(k?`${m}@${k}`:m)}">${v}</a>`}else{let v=`<span class="kan-card-pub">${p(g)}/</span><span class="kan-card-pkg">${p(m)}</span>${h}`;b=`<span class="kan-pkg-card-foot" title="${p(k?`${g}/${m}@${k}`:`${g}/${m}`)}">${v}</span>`}}return`<div class="kan-pkg-card kan-pkg-card--foot">${d}${b}</div>`}renderInstances(e,n,t){let a={publisher:ne(n),package_:(n.namespace||"").split("/")[1]?.split("@")[0]??"",name:n.name},s=W(e,Pr),o=s instanceof re?s.object===!0:s instanceof X&&s.object==="true",i=o?this.subclassClosure(a):new Set([Z(a)]),c=v=>ye((v.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},l=(v,j)=>v.major-j.major||v.minor-j.minor||v.patch-j.patch,d=new Map;for(let v of this.catalog){if(!(v instanceof G)||!be(v).some(L=>i.has(Z(L.subject))))continue;let S=Z({publisher:ne(v),package_:(v.namespace||"").split("/")[1]?.split("@")[0]??"",name:v.name}),_=d.get(S);(!_||l(c(v),c(_))>0)&&d.set(S,v)}let f=[...d.values()];if(f.length===0)return"<!-- LookRenderer.Instances: none -->";f.sort((v,j)=>D(this.catalog,v).label.localeCompare(D(this.catalog,j).label));let g=48,m=f.slice(0,g),k=m.map(v=>this.resourceCard(v,t,n.namespace??void 0)),b=f.length>g?` <span class="kan-count">${m.length} of ${f.length}</span>`:` <span class="kan-count">${f.length}</span>`;return`<div class="kan-section"><h2 class="kan-section-title">${o?"Instances (including subtypes)":"Instances"}${b}</h2></div><section class="kan-pkg-grid">${k.join("")}</section>`}subclassClosure(e){let n=new Set([Z(e)]),t=!0;for(;t;){t=!1;for(let a of this.catalog){if(!(a instanceof G))continue;let s=Z({publisher:ne(a),package_:(a.namespace||"").split("/")[1]?.split("@")[0]??"",name:a.name});if(!n.has(s)){for(let o of Qe(a))if(n.has(Z(o.subject))){n.add(s),t=!0;break}}}}return n}referencesTarget(e,n,t){for(let a of e.statement){let s=a.predicate?.subject;if(s?.name==="type"||t&&!(s&&Z(s)===Z(t)))continue;let o=[];if(a instanceof V&&a.object instanceof E)o.push(a.object);else if(a instanceof T)for(let i of a.object??[])i instanceof E&&o.push(i);for(let i of o)if(Z(i.subject)===n)return!0}return!1}async renderFeaturedResource(e,n){let t=B(e,fe);if(!t)return"<!-- LookRenderer.FeaturedResource: no look.source -->";let a=ke(this.catalog,t),s=l=>ye((l.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},o=a.length>0?a.slice().sort((l,d)=>{let f=s(l),g=s(d);return g.major-f.major||g.minor-f.minor||g.patch-f.patch})[0]:ee(this.catalog,t);if(!o)return`<!-- LookRenderer.FeaturedResource: ${t.publisher}/${t.package_}/${t.name} not found -->`;let i=await this.renderHtml(o),c=this.hrefForSubject(o,n);return`<section class="kan-featured"><a class="kan-featured-permalink" href="${p(c)}">View full resource \u2192</a>`+i+"</section>"}async renderDistribution(e,n){let t=async F=>{let $=this.readEmbeddedCarrier(e,F);if(!$)return;let x=await this.evaluateCarrierNum($,n);return Number.isFinite(x)?x:void 0},a=await t(ur),s=await t(dr);if(a===void 0||s===void 0||a<=0||s<=0)return"<!-- LookRenderer.Distribution: needs resolvable alphaPath + betaPath (> 0) -->";let o=await t(sn)??a/(a+s),i=await t(gt),c=await t(mt),l=await t(Kn),d=l!==void 0?`hsl(${l},65%,60%)`:"var(--kan-accent)",f=F=>Number.isInteger(F)?String(F):F.toFixed(1),g=280,m=168,k={top:14,right:14,bottom:24,left:14},b=g-k.left-k.right,h=m-k.top-k.bottom,v=120,j=1e-4,S=[],_=[],L=0;for(let F=0;F<=v;F++){let $=F/v;$<j?$=j:$>1-j&&($=1-j);let x=Math.exp((a-1)*Math.log($)+(s-1)*Math.log(1-$));S.push($),_.push(x),x>L&&(L=x)}let U=F=>k.left+Math.min(1,Math.max(0,F))*b,N=F=>k.top+(1-(L>0?F/L:0))*h,I=k.top+h,ce=S.map((F,$)=>`${U(F).toFixed(1)},${N(_[$]).toFixed(1)}`),C=`M${U(0).toFixed(1)},${I.toFixed(1)} L${ce.join(" L")} L${U(1).toFixed(1)},${I.toFixed(1)} Z`,P="";if(i!==void 0&&c!==void 0&&c>i){let F=[`${U(i).toFixed(1)},${I.toFixed(1)}`];for(let $=0;$<=v;$++)S[$]>=i&&S[$]<=c&&F.push(`${U(S[$]).toFixed(1)},${N(_[$]).toFixed(1)}`);F.push(`${U(c).toFixed(1)},${I.toFixed(1)}`),P=`<path d="M${F.join(" L")} Z" fill="${d}" fill-opacity="0.3"/>`}let Y=U(o),se=`<line x1="${Y.toFixed(1)}" y1="${k.top.toFixed(1)}" x2="${Y.toFixed(1)}" y2="${I.toFixed(1)}" stroke="${d}" stroke-width="1.5" stroke-dasharray="3 3"/><text x="${Y.toFixed(1)}" y="${(k.top-3).toFixed(1)}" text-anchor="middle" class="kan-dist-mean">\u03BC ${o.toFixed(2)}</text>`,le=`<text x="${U(0).toFixed(1)}" y="${(I+15).toFixed(1)}" text-anchor="start" class="kan-dist-axis">0</text><text x="${U(1).toFixed(1)}" y="${(I+15).toFixed(1)}" text-anchor="end" class="kan-dist-axis">1</text>`,O=`<svg class="kan-dist-svg" viewBox="0 0 ${g} ${m}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img"><line x1="${k.left}" y1="${I.toFixed(1)}" x2="${(g-k.right).toFixed(1)}" y2="${I.toFixed(1)}" class="kan-dist-base"/><path d="${C}" fill="${d}" fill-opacity="0.12"/>`+P+`<polyline points="${ce.join(" ")}" fill="none" stroke="${d}" stroke-width="2"/>`+se+le+"</svg>",J=i!==void 0&&c!==void 0?` \xB7 95% CI [${i.toFixed(2)}\u2013${c.toFixed(2)}]`:"";return`<figure class="kan-dist">${O}<figcaption class="kan-dist-caption">Beta(${f(a)}, ${f(s)})${J}</figcaption></figure>`}renderPublisherPackages(e,n){let t=new Map;for(let c of this.catalog){if(!(c instanceof G)||ne(c)!==n)continue;let l=(c.namespace||"").split("/")[1]?.split("@")[0]??"";if(!l||c.name!==l)continue;let d=t.get(l),f=ye((c.namespace||"").split("@")[1]??""),g=d?ye((d.namespace||"").split("@")[1]??""):void 0;(!d||f&&(!g||en(f,g)>0))&&t.set(l,c)}let a,s=W(e,er),o=s instanceof T?s.object??[]:s instanceof V&&s.object instanceof E?[s.object]:[];if(o.length>0){a=[];for(let c of o){if(!(c instanceof E))continue;let l=c.subject.package_,d=t.get(l);d&&a.push([l,d])}}else a=[...t.entries()].sort((c,l)=>c[0].localeCompare(l[0]));return a.length===0?"":`<section class="kan-pkg-grid">${a.map(([c,l])=>{let d=D(this.catalog,l),f=d.label,g=d.summary,m=g?Un(g,160):"",k=this.svgUrlForSubject(l,n);return`<a class="kan-pkg-card" href="${p(this.packageHref(n,c))}"><img class="kan-pkg-card-svg" src="${p(k)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${p(f)}</span>`+(m?`<span class="kan-pkg-card-comment">${p(m)}</span>`:"")+"</span></a>"}).join("")}</section>`}async renderTimeline(e,n){let t=B(e,fe);if(!t)return"<!-- LookRenderer.Timeline: no look.source -->";let a=B(e,En),s=this.findInstancesOfClass(t);if(s.length===0)return"<!-- LookRenderer.Timeline: no instances -->";let o=f=>a?this.readPropertyValueText(f,a)??"":"",i=s.slice().sort((f,g)=>o(f).localeCompare(o(g))),c=B(e,pt),l=this.readEmbeddedCarrier(e,sn);return c&&l?this.renderTrajectoryChart(i,c,l,e,n,o):`<section class="kan-timeline"><ol>
|
|
128
|
+
${i.map(f=>{let g=f.namespace||"",m=g.split("/")[1]?.split("@")[0]??"",k=g.split("@")[1]??"",b=k?ye(k):void 0,h=this.resourceHref({publisher:ne(f),package_:m,name:f.name,...b?{version:b}:{}},n),v=o(f),j=v?`<span class="kan-timeline-date">${p(v)}</span>`:"",S=k||f.name;return`<li class="kan-timeline-node"><a href="${p(h)}"><span class="kan-timeline-key">${p(S)}</span>${j}</a></li>`}).join(`
|
|
129
|
+
`)}
|
|
130
|
+
</ol></section>`}async renderTrajectoryChart(e,n,t,a,s,o){let i=a,c=this.readEmbeddedCarrier(a,Kn),l=this.readEmbeddedCarrier(a,gt),d=this.readEmbeddedCarrier(a,mt),f=Q(i,Kr),g=yt(i,_r),m=yt(i,Er),k=e.length,b=await this.collectTrackedSeries(e,n,t,{hueBy:c,lowerPath:l,upperPath:d});if(b.length===0)return"<!-- LookRenderer.Timeline: no tracked series -->";let h=[];for(let K of b){for(let A of K.points)A!==null&&h.push(A);for(let A of K.lower??[])A!==null&&h.push(A);for(let A of K.upper??[])A!==null&&h.push(A)}if(h.length===0)return"<!-- LookRenderer.Timeline: no metric values -->";let v=Math.min(...h),j=Math.max(...h);j-v<1e-9&&(v-=.5,j+=.5);let S=(j-v)*.08,_=g!==void 0?g:v-S,L=m!==void 0?m:j+S;L-_<1e-9&&(L=_+1);let U=1e3,N=440,I={top:28,right:24,bottom:56,left:52},ce=U-I.left-I.right,C=N-I.top-I.bottom,P=K=>k<=1?I.left+ce/2:I.left+K/(k-1)*ce,Y=K=>I.top+(1-(K-_)/(L-_))*C,se=(K,A)=>K.hue!==void 0?K.hue:Math.round(A*360/b.length),le=[];for(let K=0;K<5;K++){let A=_+K*(L-_)/4,pe=Y(A);le.push(`<line x1="${I.left}" y1="${pe.toFixed(1)}" x2="${(U-I.right).toFixed(1)}" y2="${pe.toFixed(1)}" class="kan-fan-grid"/>`),le.push(`<text x="${(I.left-8).toFixed(1)}" y="${(pe+4).toFixed(1)}" class="kan-fan-axis" text-anchor="end">${A.toFixed(2)}</text>`)}let O=[];e.forEach((K,A)=>{let pe=this.hrefForSubject(K,s),ge=(K.namespace||"").split("@")[1]??"",te=P(A),oe=ln(o(K));O.push(`<a href="${p(pe)}" class="kan-fan-xtick"><line x1="${te.toFixed(1)}" y1="${I.top}" x2="${te.toFixed(1)}" y2="${(N-I.bottom).toFixed(1)}" class="kan-fan-vline"/><text x="${te.toFixed(1)}" y="${(N-I.bottom+20).toFixed(1)}" class="kan-fan-xlabel" text-anchor="middle">${Ke(ge||K.name)}</text>`+(oe?`<text x="${te.toFixed(1)}" y="${(N-I.bottom+36).toFixed(1)}" class="kan-fan-xdate" text-anchor="middle">${Ke(oe)}</text>`:"")+"</a>")});let J=[];b.forEach((K,A)=>{if(!K.lower||!K.upper)return;let pe=se(K,A),ge=[],te=[];for(let ie=0;ie<k;ie++){let Re=K.upper[ie],je=K.lower[ie];Re==null||je===null||je===void 0||(ge.push(`${P(ie).toFixed(1)},${Y(Re).toFixed(1)}`),te.unshift(`${P(ie).toFixed(1)},${Y(je).toFixed(1)}`))}let oe=ge.concat(te);oe.length<3||J.push(`<polygon class="kan-fan-band" points="${oe.join(" ")}" fill="hsl(${pe},65%,60%)"/>`)});let F=[];b.forEach((K,A)=>{let ge=`hsl(${se(K,A)},65%,60%)`,te=[],oe=[];K.points.forEach((ie,Re)=>{if(ie===null)return;let je=P(Re),ae=Y(ie);te.push(`${je.toFixed(1)},${ae.toFixed(1)}`),oe.push(`<circle cx="${je.toFixed(1)}" cy="${ae.toFixed(1)}" r="3.5" fill="${ge}"/>`)}),te.length!==0&&F.push(`<g class="kan-fan-series" data-series="${p(K.key)}"><polyline points="${te.join(" ")}" fill="none" stroke="${ge}" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/>`+oe.join("")+"</g>")});let $=`<svg class="kan-fan-svg" viewBox="0 0 ${U} ${N}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+le.join("")+O.join("")+J.join("")+F.join("")+"</svg>",x=f?`${p(f)}=`:"",z=b.map((K,A)=>{let pe=se(K,A),ge=K.points.filter(ae=>ae!==null),te=ge.length?ge[0]:void 0,oe=ge.length?ge[ge.length-1]:void 0,ie="";if(oe!==void 0&&te!==void 0){let ae=oe-te;if(Math.abs(ae)>=.005){let Fe=ae>0?"up":"down",Le=ae>0?"\u25B2":"\u25BC";ie=` <span class="kan-fan-delta ${Fe}">${ae>0?"+":""}${ae.toFixed(2)} ${Le}</span>`}else ie=' <span class="kan-fan-delta flat">\u2014</span>'}let Re=oe!==void 0?`${x}${oe.toFixed(2)}`:"\u2014",je=K.lastSubject&&this.isLinkable(ne(K.lastSubject),s)?`<a href="${p(this.hrefForSubject(K.lastSubject,s))}">${p(K.label)}</a>`:p(K.label);return`<div class="kan-fan-legend-item" style="--kan-fan-hue:${pe}"><span class="kan-fan-swatch"></span><span class="kan-fan-legend-label">${je}</span><span class="kan-fan-legend-cur">${Re}${ie}</span></div>`});return`<section class="kan-fan"><div class="kan-fan-chart">${$}</div><div class="kan-fan-legend">${z.join("")}</div></section>`}renderResourceGrid(e,n,t){let a=B(e,fe);if(!a)return"<!-- LookRenderer.ResourceGrid: no look.source -->";let s=ee(this.catalog,a),o=s?be(s).some(l=>{let d=l.subject.name;return d==="ObjectProperty"||d==="DatatypeProperty"||d==="Property"}):!1,i=[];if(o&&t){let l=this.readPropertyValueReferences(t,a);for(let d of l){let f=ee(this.catalog,{publisher:d.subject.publisher,package_:d.subject.package_,name:d.subject.name,...d.subject.version?{version:d.subject.version}:{}});f&&i.push(f)}}else i=this.findInstancesOfClass(a);if(i.length===0)return`<!-- LookRenderer.ResourceGrid: no resources for ${a.publisher}/${a.package_}/${a.name} -->`;let c=[];for(let l of i){let d=D(this.catalog,l),f=d.label,g=d.summary,m=l.namespace||"",k=m.split("/")[1]?.split("@")[0]??"",b=m.split("@")[1]??"",h=b?ye(b):void 0,v=this.resourceHref({publisher:ne(l),package_:k,name:l.name,...h?{version:h}:{}},n),j=g?`<p class="kan-resource-card-subtitle">${p(g)}</p>`:"",S=`<h3 class="kan-resource-card-title">${p(f)}</h3>${j}`;c.push(this.isLinkable(ne(l),n)?`<a class="kan-resource-card" href="${p(v)}">${S}</a>`:`<span class="kan-resource-card">${S}</span>`)}return`<section class="kan-resource-grid">
|
|
131
|
+
${c.join(`
|
|
132
|
+
`)}
|
|
133
|
+
</section>`}findInstancesOfClass(e){let n=[];for(let t of this.catalog){if(!(t instanceof G))continue;be(t).map(o=>o.subject).some(o=>o.publisher===e.publisher&&o.package_===e.package_&&o.name===e.name)&&n.push(t)}return n}renderBreadcrumb(e,n,t){let s=(e.namespace||"").split("/");if(s.length<2)return"";let o=s[0],i=s[1]??"",c=i.split("@")[0]??"",l=i.split("@")[1]??"";if(!o||!c)return"";if(t?.bareOverview)return`<nav class="kan-breadcrumb"><ol>
|
|
134
|
+
<li><a href="${p(this.publisherHref(o))}">${p(o)}</a></li>
|
|
135
|
+
<li aria-current="page">${p(c)}</li>
|
|
136
|
+
</ol></nav>`;let d=e.name,g=!!ee(this.catalog,{publisher:o,package_:c,name:c}),m=l?`${c}@${l}`:c,k=this.resourceHref({publisher:o,package_:c,name:c,...l?{version:ye(l)}:{}},o),b=e.name===c,h=[];return h.push(`<li><a href="${p(this.publisherHref(o))}">${p(o)}</a></li>`),b?h.push(`<li aria-current="page">${p(m)}</li>`):(h.push(g?`<li><a href="${p(k)}">${p(m)}</a></li>`:`<li>${p(m)}</li>`),h.push(`<li aria-current="page">${p(d)}</li>`)),`<nav class="kan-breadcrumb"><ol>
|
|
137
|
+
${h.join(`
|
|
138
|
+
`)}
|
|
139
|
+
</ol></nav>`}renderNavGroup(e,n){let t=W(this.publisherSubject(n),ga),a=t instanceof T?t.object??[]:t instanceof V&&t.object instanceof E?[t.object]:[];if(a.length===0)return"";let s=[];for(let o of a){if(!(o instanceof E))continue;let i=ee(this.catalog,{publisher:o.subject.publisher,package_:o.subject.package_,name:o.subject.name}),{href:c,label:l}=this.resolveNavEntry(o,i,n),d=this.hrefForSubject(e,n),f=c===d?' aria-current="page"':"";s.push(`<li><a class="kan-nav-link" href="${p(c)}"${f}>${p(l)}</a></li>`)}return`<nav class="kan-site-nav"><ul>
|
|
140
|
+
${s.join(`
|
|
141
|
+
`)}
|
|
142
|
+
</ul></nav>`}renderSiteFooter(e){let n=W(this.publisherSubject(e),ma),t;if(n instanceof H?t=n.object:n instanceof V&&n.object instanceof E&&(t=ee(this.catalog,{publisher:n.object.subject.publisher,package_:n.object.subject.package_,name:n.object.subject.name})),!t)return"";let a=Q(t,ka),s=W(t,ha),o=s instanceof T?s.object??[]:s instanceof V&&s.object instanceof E?[s.object]:[],i=[];for(let l of o){if(!(l instanceof E))continue;let d=ee(this.catalog,{publisher:l.subject.publisher,package_:l.subject.package_,name:l.subject.name}),{href:f,label:g}=this.resolveNavEntry(l,d,e);i.push(`<a class="kan-footer-link" href="${p(f)}">${p(g)}</a>`)}if(!a&&i.length===0)return"";let c=[];return i.length>0&&c.push(`<div class="kan-footer-links">${i.join("")}</div>`),a&&c.push(`<p class="kan-footer-text">${p(a)}</p>`),`<footer class="kan-site-footer">${c.join(`
|
|
143
|
+
`)}</footer>`}resolveNavEntry(e,n,t){if(n&&be(n).map(c=>c.subject).some(c=>c.publisher===jn.publisher&&c.package_===jn.package_&&c.name===jn.name)){let c=Q(n,wn),l=W(n,ut);if(l instanceof V&&l.object instanceof E){let d=l.object,f=this.readLabelForUri({publisher:d.subject.publisher,package_:d.subject.package_,name:d.subject.name});return{href:this.urlForReference(d,ut,t),label:c??f??d.subject.name}}}let a=this.resourceHref({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},t,"*"),s=n?D(this.catalog,n).label:e.subject.name;return{href:a,label:s}}codeHighlighter(){return this._codeHighlighter||(this._codeHighlighter=new rn(this.collectGrammars())),this._codeHighlighter}collectGrammars(){let e=[];for(let n of this.catalog){if(!(n instanceof G)||!be(n).some(i=>R(i.subject,nr)))continue;let t=Q(n,tr);if(!t)continue;let a=W(n,ar),s=a instanceof T?a.object??[]:[],o=[];for(let i of s){if(!(i instanceof M))continue;let c=B(i,rr),l=Q(i,sr);!c||!l||o.push({tokenClass:c.name,pattern:l})}e.push({language:t,rules:o})}return e}renderLinks(e,n){let t=B(e,fe);if(!t)return"";let a=W(n,t),s=[];a instanceof T?s=a.object??[]:a instanceof H?s=[a.object]:a instanceof V&&a.object instanceof E&&(s=[a.object]);let o=[];for(let i of s){let c;if(i instanceof M?c=i:i instanceof E&&(c=ee(this.catalog,{publisher:i.subject.publisher,package_:i.subject.package_,name:i.subject.name})),!c)continue;let l=Q(c,ir);if(!l)continue;let d=Q(c,wn)??l,f=Q(c,ct),g=f?` title="${p(f)}"`:"";o.push(`<a class="kan-extlink" href="${p(l)}"${g} target="_blank" rel="noopener noreferrer">${p(d)}</a>`)}return o.length===0?"":`<section class="kan-extlink-row">${o.join("")}</section>`}renderMarkdown(e,n,t){let a=B(e,fe);if(!a)return"<!-- LookRenderer.Markdown: no look.source -->";let s=W(n,a),o=new Map,i;if(s instanceof Me?i=this.resolveMarkdownLinks(s,t,o):s instanceof X?i=s.object:i=this.readPropertyValueText(n,a),!i)return"";let c=this.codeHighlighter(),l=Ye(i,{highlight:(d,f)=>c.highlight(d,f)});for(let[d,f]of o){let g=new RegExp('(<a href="'+jt(d)+'">)([^<]*)(</a>)',"g");l=l.replace(g,`$1<img class="kan-md-chip" src="${p(f)}" alt="" loading="lazy">$2$3`)}return`<section class="kan-markdown">
|
|
144
|
+
${l}
|
|
145
|
+
</section>`}resolveMarkdownLinks(e,n,t){let a=e.object,s=[...e.links].sort((o,i)=>i.startOffset-o.startOffset);for(let o of s){let i;if(o.target&&this.isLinkable(o.target.subject.publisher,n)){let c=o.target.subject,l=(o.displayText??this.readLabelForUri({publisher:c.publisher,package_:c.package_,name:c.name})??o.reference).replace(/[[\]]/g,""),d=this.resourceHref({publisher:c.publisher,package_:c.package_,name:c.name,...c.version?{version:c.version}:{}},n);t&&t.set(d,`${d}.svg`),i=`[${l}](${d})`}else if(o.target){let c=o.target.subject;i=(o.displayText??this.readLabelForUri({publisher:c.publisher,package_:c.package_,name:c.name})??o.reference).replace(/[[\]]/g,"")}else i=o.displayText??o.reference;a=a.slice(0,o.startOffset)+i+a.slice(o.endOffset)}return a}renderRawMarkdown(e){let n=this.findCascadedLook(e);if(!n)return;let t=Ln(n.declaration),a=[];for(let s of t){let o=ze(s);if(!o||!R(o,lt))continue;let i=B(s,fe);if(!i)continue;let c=this.readPropertyValueText(e,i);c&&a.push(c)}return a.length>0?a.join(`
|
|
146
|
+
|
|
147
|
+
`):void 0}renderHero(e,n,t){let a=b=>{let h=W(e,b);return h instanceof re?h.object===!0:h instanceof X&&h.object==="true"},s=a(Mr),o=!s&&a(xr),i=s||o,l=[`<header class="${s?"kan-hero kan-hero-has-avatar":o?"kan-hero kan-hero-has-icon":"kan-hero"}">`];if(i){let b=this.svgUrlForSubject(n,t),h=s?"kan-hero-avatar":"kan-hero-icon";l.push(`<img class="${h}" src="${p(b)}" alt="" loading="lazy"/>`),l.push('<div class="kan-hero-text">')}let d=B(e,Fr);if(d){let b=this.readPropertyValueText(n,d);b&&l.push(`<span class="kan-hero-eyebrow">${p(fn(b)??b)}</span>`)}let f=B(e,Cr),g="";f&&(g=this.readPropertyValueText(n,f)??""),g||(g=D(this.catalog,n).label),l.push(`<h1 class="kan-hero-title">${p(fn(g)??g)}</h1>`);let m=B(e,Tr);if(m){let b=this.readPropertyValueText(n,m);b&&l.push(`<p class="kan-hero-subtitle">${p(fn(b)??b)}</p>`)}let k=B(e,bt);if(k){let b=this.readPropertyValueReferences(n,k);if(b.length>0){let h=b.map(v=>this.renderBadge(v,bt,t)).join("");l.push(`<div class="kan-hero-badges">${h}</div>`)}}return i&&l.push("</div>"),l.push("</header>"),l.join(`
|
|
148
|
+
`)}renderPropertyList(e,n,t){let a=B(e,fe);if(!a)return"<!-- LookRenderer: PropertyList missing look.source -->";let s=this.readLabelForUri(a)??a.name,o=W(n,a),i=this.gatherValueItems(o),c=i.length>0?i.map(l=>`<li>${this.renderInlineValue(l,fe,t)}</li>`).join(""):'<li class="kan-empty">(no values)</li>';return['<section class="kan-property-list">',`<h3 class="kan-property-list-title">${p(s)}</h3>`,`<ul class="kan-property-list-items">${c}</ul>`,"</section>"].join(`
|
|
149
|
+
`)}renderPropertyTable(e,n,t,a=""){let s=B(e,fe);if(!s)return"<!-- LookRenderer: PropertyTable missing look.source -->";let o=this.gatherValueItems(W(n,s)).filter(l=>l instanceof M);if(o.length===0)return"";let i=this.readLabelForUri(s)??s.name,c=a?`${a}.${s.name}`:s.name;return this.renderEmbeddedTable(o,t,i,c)}renderEmbeddedTable(e,n,t,a){let s=[],o=new Set;for(let b of e)for(let h of b.statement){let v=h.predicate?.subject;if(!v||this.isMetaPredicate(v))continue;let j=`${v.publisher}/${v.package_}/${v.name}`;o.has(j)||(o.add(j),s.push({uri:{publisher:v.publisher,package_:v.package_,name:v.name},label:this.readLabelForUri(v)??v.name}))}if(s.length===0)return"";let i=e.map(b=>D(this.catalog,b).label),c=e.some((b,h)=>i[h]!==""&&i[h]!==b.name),l=!!a,d=(l?'<th class="kan-anchor-col"></th>':"")+(c?"<th></th>":"")+s.map(b=>`<th>${p(b.label)}</th>`).join(""),f=e.map((b,h)=>{let v=l&&b.name?`${a}.${b.name}`:"",j=v?` id="${p(v)}"`:"",S=l?`<td class="kan-anchor-col">${v?this.anchorLink(v):""}</td>`:"",_=c?`<th scope="row">${p(i[h]??"")}</th>`:"",L=s.map(U=>{let N=W(b,U.uri);return`<td>${N?this.tableCellValue(N,n):""}</td>`}).join("");return`<tr${j}>${S}${_}${L}</tr>`}).join(""),g=l&&a?` id="${p(a)}"`:"",m=l&&a?this.anchorLink(a):"",k=t?`<caption>${p(t)}${m}</caption>`:"";return`<table class="kan-property-table"${g}>${k}<thead><tr>${d}</tr></thead><tbody>${f}</tbody></table>`}tableCellValue(e,n){if(e instanceof Me)return this.statementToMarkdownHtml(e,n);if(e instanceof X)return St(e.object);if(e instanceof me||e instanceof re)return p(String(e.object));if(e instanceof V&&e.object instanceof E)return this.detailReferenceLink(e.object,n);if(e instanceof H)return this.renderEmbeddedTable([e.object],n);if(e instanceof T){let t=e.object??[],a=t.filter(s=>s instanceof M);return a.length>0&&a.length===t.length?this.renderEmbeddedTable(a,n):t.map(s=>s instanceof E?this.detailReferenceLink(s,n):s instanceof M?this.renderEmbeddedTable([s],n):p(String(s))).filter(s=>s).join(", ")}return""}statementToMarkdownHtml(e,n){let t=new Map,a;if(e instanceof Me?a=this.resolveMarkdownLinks(e,n,t):e instanceof X&&(a=e.object),!a)return"";let s=this.codeHighlighter(),o=Ye(a,{highlight:(i,c)=>s.highlight(i,c)});for(let[i,c]of t){let l=new RegExp('(<a href="'+jt(i)+'">)([^<]*)(</a>)',"g");o=o.replace(l,`$1<img class="kan-md-chip" src="${p(c)}" alt="" loading="lazy">$2$3`)}return o}renderBadgeRow(e,n,t){let a=B(e,fe);if(!a)return"<!-- LookRenderer: BadgeRow missing look.source -->";let s=this.readPropertyValueReferences(n,a);return s.length===0?"":`<div class="kan-badge-row">${s.map(i=>this.renderBadge(i,fe,t)).join("")}</div>`}renderChipRow(e,n,t){let a=On(e,Dr);if(a.length===0)return"<!-- LookRenderer: ChipRow has no look.chips -->";let s=[];for(let o of a){let i=W(n,o);if(!i)continue;let c=this.readLabelForUri(o)??o.name,l=this.renderStatementInlineValue(i,o,t);l&&s.push(`<span class="kan-chip"><span class="kan-chip-key">${p(c)}</span> <span class="kan-chip-val">${l}</span></span>`)}return s.length===0?"":`<div class="kan-chip-row">${s.join("")}</div>`}async renderReferenceList(e,n,t){let a=On(e,vt);if(a.length===0)return"<!-- LookRenderer: ReferenceList has no look.entries -->";let s=this.readEmbeddedCarrier(e,ft),o=this.readEmbeddedCarrier(e,Sr),i=[];for(let c of a){let l=this.readPropertyValueReferences(n,c);if(l.length===0)continue;let d=this.readLabelForUri(c)??c.name;if(s){let f=[];for(let m of l)f.push(await this.renderDetailRow(m,s,o,t));let g=f.filter(m=>m).join("");g&&i.push(`<dt>${p(d)}</dt><dd><ul class="kan-ref-rows">${g}</ul></dd>`)}else{let f=l.map(g=>this.renderReferenceLink(g,vt,t)).join(", ");i.push(`<dt>${p(d)}</dt><dd>${f}</dd>`)}}return i.length===0?"":`<dl class="kan-reference-list">${i.join("")}</dl>`}async renderDetailRow(e,n,t,a){let s=ee(this.catalog,{publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name,...e.subject.version?{version:e.subject.version}:{}});if(!s)return"";let o=await this.evaluateCarrier(n,s)??D(this.catalog,s).label,i="";if(t){let f=await this.evaluateCarrier(t,s);f&&(i=`<span class="kan-ref-badge">${p(f)}</span>`)}let c=`<span class="kan-ref-text">${p(o)}</span>${i}`;if(!this.isLinkable(ne(s),a))return`<li class="kan-ref-row"><span class="kan-ref-rowlink">${c}</span></li>`;let l=this.hrefForSubject(s,a),d=this.svgUrlForSubject(s,a);return`<li class="kan-ref-row"><a class="kan-ref-rowlink" href="${p(l)}"><img class="kan-ref-icon" src="${p(d)}" alt="" loading="lazy"/>`+c+"</a></li>"}readPropertyValueText(e,n){let t=W(e,n);if(t){if(t instanceof X)return t.object;if(t instanceof V){let a=t.object;return this.readLabelForUri({publisher:a.subject.publisher,package_:a.subject.package_,name:a.subject.name})??a.subject.name}if(t instanceof H)return this.readEmbeddedText(t.object,0)||void 0;if(t instanceof T)return(t.object??[]).map(s=>s instanceof E?this.readLabelForUri({publisher:s.subject.publisher,package_:s.subject.package_,name:s.subject.name})??s.subject.name:s instanceof M?this.readEmbeddedText(s,0):String(s)).filter(s=>s).join(", ")}}readEmbeddedText(e,n){if(n>=ht)return"\u2026";let t=[];for(let a of e.statement)if(a.predicate?.subject?.name!=="type")if(a instanceof X)t.push(a.object);else if(a instanceof me||a instanceof re)t.push(String(a.object));else if(a instanceof V){let o=a.object;t.push(this.readLabelForUri({publisher:o.subject.publisher,package_:o.subject.package_,name:o.subject.name})??o.subject.name)}else a instanceof H&&t.push(this.readEmbeddedText(a.object,n+1));return t.filter(a=>a).join(", ")}readPropertyValueReferences(e,n){let t=W(e,n);if(!t)return[];if(t instanceof V)return[t.object];if(t instanceof T){let a=[];for(let s of t.object??[])s instanceof E&&a.push(s);return a}return[]}gatherValueItems(e){return e?e instanceof T?e.object??[]:e instanceof V?[e.object]:e instanceof H?[e.object]:e instanceof X?[e.object]:e instanceof me||e instanceof re?[e.object]:[]:[]}renderInlineValue(e,n,t,a=0){return e instanceof E?this.renderReferenceLink(e,n,t):e instanceof M?this.renderEmbeddedInline(e,t,a):typeof e=="string"?p(e):typeof e=="number"||typeof e=="boolean"?p(String(e)):""}renderStatementInlineValue(e,n,t,a=0){return e instanceof X?p(e.object):e instanceof me||e instanceof re?p(String(e.object)):e instanceof V?this.renderReferenceLink(e.object,n,t):e instanceof H?this.renderEmbeddedInline(e.object,t,a):e instanceof T?(e.object??[]).map(o=>this.renderInlineValue(o,n,t,a)).filter(o=>o).join(", "):""}renderEmbeddedInline(e,n,t=0){if(t>=ht)return"\u2026";let a=[];for(let s of e.statement){let o=s.predicate?.subject;if(!o||o.name==="type")continue;let i=this.readLabelForUri({publisher:o.publisher,package_:o.package_,name:o.name})??o.name,c=this.renderStatementInlineValue(s,o,n,t+1);c&&a.push(`<dt>${p(i)}</dt><dd>${c}</dd>`)}return a.length?`<dl class="kan-embedded">${a.join("")}</dl>`:""}renderReferenceLink(e,n,t){let a=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name;if(!this.isLinkable(e.subject.publisher,t))return`<span class="kan-link-plain">${p(a)}</span>`;let s=this.urlForReference(e,n,t);return`<a class="kan-link" href="${p(s)}">${p(a)}</a>`}isLinkable(e,n){return this.publisherFirst||e===n}renderBadge(e,n,t){let a=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name,s=this.readCommentForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name}),o=s?` title="${p(s)}"`:"";if(!this.isLinkable(e.subject.publisher,t))return`<span class="kan-badge"${o}>${p(a)}</span>`;let i=this.urlForReference(e,n,t);return`<a class="kan-badge" href="${p(i)}"${o}>${p(a)}</a>`}urlForReference(e,n,t){let a=n?this.getUrlFormForProperty(n):"=";return this.resourceHref({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},t,a)}getUrlFormForProperty(e){let n=ee(this.catalog,e);if(!n)return"=";let t=Q(n,Br);return t==="*"||t==="^"||t==="~"||t==="="?t:"="}readLabelForUri(e){let n=ee(this.catalog,e);if(n)return D(this.catalog,n).label}readCommentForUri(e){let n=ee(this.catalog,e);if(n)return D(this.catalog,n).summary}};function Hr(r){let e=new Map;for(let n of r.statement){if(!(n instanceof H)||!we(n,dn.publisher,dn.package_,dn.name))continue;let t=n.object;for(let a of t.statement){if(!(a instanceof X))continue;let s=a.predicate?.subject?.name;if(!s)continue;let o=a.object;e.has(s)||e.set(s,o)}}return e}function on(r){for(let e of r.statement)if(e instanceof H&&we(e,un.publisher,un.package_,un.name))return e.object}function Ln(r){for(let e of r.statement){if(!(e instanceof T)||!we(e,Rn.publisher,Rn.package_,Rn.name))continue;let n=[];for(let t of e.object??[])t instanceof M&&n.push(t);return n}return[]}function ze(r){for(let e of r.statement)if(e instanceof V&&e.predicate?.subject?.name==="type"&&e.object instanceof E){let n=e.object.subject;return{publisher:n.publisher,package_:n.package_,name:n.name}}}function B(r,e){for(let n of r.statement)if(n instanceof V&&we(n,e.publisher,e.package_,e.name)&&n.object instanceof E){let t=n.object.subject;return{publisher:t.publisher,package_:t.package_,name:t.name}}}function On(r,e){for(let n of r.statement){if(!(n instanceof T)||!we(n,e.publisher,e.package_,e.name))continue;let t=[];for(let a of n.object??[])a instanceof E&&t.push({publisher:a.subject.publisher,package_:a.subject.package_,name:a.subject.name});return t}return[]}function W(r,e){for(let n of r.statement)if(we(n,e.publisher,e.package_,e.name))return n}function Q(r,e){for(let n of r.statement)if(n instanceof X&&we(n,e.publisher,e.package_,e.name))return n.object}function cn(r,e){for(let n of r.statement)if(n instanceof H&&we(n,e.publisher,e.package_,e.name))return n.object}function yt(r,e){for(let n of r.statement)if(n instanceof me&&we(n,e.publisher,e.package_,e.name))return n.object}function zr(r,e){for(let n of r.statement)if(n instanceof re&&we(n,e.publisher,e.package_,e.name))return n.object===!0;return!1}function Gr(r){for(let e of be(r))if(R(e.subject,aa)||R(e.subject,ra))return!0;return!1}function be(r){let e=[];for(let n of r.statement)if(n instanceof V){if(n.predicate?.subject?.name!=="type")continue;n.object instanceof E&&e.push(n.object)}else if(n instanceof T){if(n.predicate?.subject?.name!=="type")continue;for(let t of n.object??[])t instanceof E&&e.push(t)}return e}function Qe(r){let e=[];for(let n of r.statement)if(n instanceof V){if(n.predicate?.subject?.name!=="subClassOf")continue;n.object instanceof E&&e.push(n.object)}else if(n instanceof T){if(n.predicate?.subject?.name!=="subClassOf")continue;for(let t of n.object??[])t instanceof E&&e.push(t)}return e}function ee(r,e){let n="version"in e?e.version:void 0;if(n){let t=`${e.publisher}/${e.package_}@${n.major}.${n.minor}.${n.patch}`;for(let a of r)if(a instanceof G&&a.name===e.name&&a.namespace===t)return a}for(let t of r){if(!(t instanceof G)||t.name!==e.name)continue;if((t.namespace||"").startsWith(`${e.publisher}/${e.package_}@`))return t}}function we(r,e,n,t){let a=r.predicate?.subject;return a?a.publisher===e&&a.package_===n&&a.name===t:!1}function R(r,e){return r.publisher===e.publisher&&r.package_===e.package_&&r.name===e.name}function Z(r){return`${r.publisher}/${r.package_}/${r.name}`}function qr(r){let e=s=>s.replace(/\*\//g,"* /"),n=[];n.push(` * kanonak stylesheet \u2014 ${e(r.resource.namespace)}/${e(r.resource.name)}`),n.push(" *");let t=new Map;for(let s of r.tokens.values()){let o=`${s.sourceNamespace} ${s.sourceName}`,i=t.get(o)??{count:0,level:s.level};i.count+=1,t.set(o,i)}if(t.size===0)n.push(" * :root tokens: NONE resolved");else{n.push(` * :root tokens (${r.tokens.size}):`);for(let[s,{count:o,level:i}]of t)n.push(` * ${o} from ${e(s)} (${i})`)}let a=r.baseStylesheet;if(a.css!==void 0)n.push(` * base CSS: ${e(a.sourceNamespace??"")}/base-stylesheet (${a.css.length} bytes, ${a.scope})`);else{n.push(" *"),n.push(" * !! WARNING: NO BASE STYLESHEET \u2014 this file contains only :root tokens."),n.push(" * !! Pages will appear UNSTYLED.");for(let s of r.warnings)n.push(` * !! ${e(s)}`);n.push(" * !! Full diagnostics: /.well-known/kanonak-render")}if(r.look){let s=r.look.sourceClass;n.push(` * look: ${e(s.publisher)}/${e(s.package_)}/${e(s.name)}`)}return`/*
|
|
150
|
+
${n.join(`
|
|
151
|
+
`)}
|
|
152
|
+
*/`}function ne(r){let e=r.namespace||"",n=e.indexOf("/");return n>=0?e.substring(0,n):e}function p(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Ke(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function $t(r,e){return e==null?"":Ae(e)?e.value:r==="string-literal"?typeof e=="string"?e:String(e):Array.isArray(e)?e.map(n=>Ae(n)?n.value:Ke(typeof n=="string"?n:String(n))).join(""):Ke(typeof e=="string"?e:String(e))}function _t(r){if(r==null)return"";if(typeof r=="string")return r;if(typeof r=="number"||typeof r=="boolean")return String(r);if(Ae(r))return r.value;if(Array.isArray(r))return r.map(_t).filter(n=>n!=="").join(", ");if(r instanceof E)return r.subject.name;if(r instanceof G||r instanceof M)return r.name??"";let e=r.value;return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function Un(r,e){return r.length<=e?r:r.slice(0,e).replace(/\s+\S*$/,"")+"\u2026"}function wt(r){return r.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function jt(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function St(r){let e=fn(r);return p(e||r)}function fn(r){let e=/^(\d{4})-(\d{2})-(\d{2})([T ]\d{2}:\d{2}(?::\d{2})?(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?)?$/.exec(r.trim());if(!e)return;let n=Date.parse(r);if(!Number.isFinite(n))return;let t=new Date(n),s=`${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][t.getUTCMonth()]} ${t.getUTCDate()}, ${t.getUTCFullYear()}`;if(!e[4])return s;let o=t.getUTCHours(),i=(o+11)%12+1,c=o>=12?"PM":"AM";return`${s} \xB7 ${i}:${String(t.getUTCMinutes()).padStart(2,"0")} ${c} UTC`}function ln(r){if(!r)return"";let e=/^(\d{4})-(\d{2})-(\d{2})/.exec(r);return e?`${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][parseInt(e[2],10)-1]??e[2]} ${parseInt(e[3],10)}`:r}export{D as a,Ye as b,Ae as c,Ee as d,Xe as e,q as f,us as g,Ue as h,an as i,In as j};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as v}from"./chunk-F26XWM5K.js";import{a as w}from"./chunk-4NO7MHS7.js";import{a as f}from"./chunk-NJ3AZYQD.js";import{c as A,d as R,g as b,h as F,i as S}from"./chunk-2ACBWC7K.js";import*as i from"fs/promises";import*as c from"path";import{pathToFileURL as x}from"url";import{VersionOperator as P}from"@kanonak-protocol/types/document/models/enums";var y=class{rootPath;recursive;parser;documentCache;filePathsByIdentifier;cacheInitialized=!1;cacheInitPromise=null;parsingErrors=new Map;constructor(e,t=!0,n){if(!e||e.trim().length===0)throw new Error("Root path cannot be null or empty");this.rootPath=c.resolve(e),this.recursive=t,this.parser=n??new f,this.documentCache=new Map,this.filePathsByIdentifier=new Map}async getAllDocumentsAsync(){await this.ensureCacheInitialized();let e=new Set(this.documentCache.values());return Array.from(e)}async getDocumentAsync(e){await this.ensureCacheInitialized();let t=this.documentCache.get(e);if(t)return t;let n=c.join(this.rootPath,e);if(t=this.documentCache.get(n),t)return t;for(let o of[".kan.yml",".yml",".yaml"])if(!e.endsWith(o)){let s=e+o;if(t=this.documentCache.get(s),t)return t;let a=c.join(this.rootPath,s);if(t=this.documentCache.get(a),t)return t}return null}async getDocumentsByNamespaceAsync(e,t){await this.ensureCacheInitialized();let n=new Set(this.documentCache.values());return Array.from(n).filter(o=>o.metadata.namespace_?.publisher===e&&o.metadata.namespace_?.package_===t)}async getHighestCompatibleVersionAsync(e,t){await this.ensureCacheInitialized();let n=new Set(this.documentCache.values()),o=Array.from(n).filter(a=>a.metadata?.namespace_?.publisher===e&&a.metadata?.namespace_?.package_===t.packageName&&a.metadata?.namespace_?.version!==void 0);if(o.length===0)return null;let s=o.filter(a=>{let r=a.metadata.namespace_.version;switch(t.versionOperator){case P.Exact:return R(r,t.version);case P.Compatible:return F(r,t.version);case P.Major:return S(r,t.version);case P.Any:return A(r,t.minVersion)>=0;default:return!1}});return s.length===0?null:(s.sort((a,r)=>{let m=a.metadata.namespace_.version,l=r.metadata.namespace_.version;return A(l,m)}),s[0])}async saveDocumentAsync(e,t){let n,o=e.metadata.namespace_?.toString();if(o&&o.includes("@")&&o.includes("/")){let m=o.split("/"),l=m[0],h=m[1].replace("@","@")+".kan.yml";n=c.join(this.rootPath,l,h)}else n=c.join(this.rootPath,t),!n.endsWith(".yml")&&!n.endsWith(".yaml")&&!n.endsWith(".kan.yml")&&(n+=".kan.yml");let s=c.dirname(n);await i.mkdir(s,{recursive:!0});let a=this.parser.save(e);await i.writeFile(n,a,"utf8"),o&&this.documentCache.set(o,e),this.documentCache.set(n,e);let r=c.relative(this.rootPath,n);this.documentCache.set(r,e)}async deleteDocumentAsync(e){let t=await this.getDocumentAsync(e);if(!t)return;let n=this.filePathsByIdentifier.get(e);if(!n)return;try{await i.unlink(n)}catch{}let o=t.metadata.namespace_?.toString();o&&this.documentCache.delete(o),this.documentCache.delete(e),this.documentCache.delete(n);let s=c.relative(this.rootPath,n);this.documentCache.delete(s)}async clearNamespaceAsync(e,t){await this.ensureCacheInitialized();let n=[];for(let[s,a]of this.documentCache.entries()){let r=a.metadata.namespace_?.toString()||"";r.includes(e)&&r.includes(t)&&n.push([s,a])}let o=c.join(this.rootPath,e);try{let s=await i.readdir(o);for(let a of s)a.includes(t)&&a.endsWith(".kan.yml")&&await i.unlink(c.join(o,a))}catch{}for(let[s]of n)this.documentCache.delete(s)}async getAllDocumentReferencesAsync(){await this.ensureCacheInitialized();let e=new Set(this.filePathsByIdentifier.values()),t=[];for(let n of e){let o=x(n).toString(),s;for(let[m,l]of this.documentCache.entries())if(this.filePathsByIdentifier.get(m)===n&&l.metadata.namespace_){s=l.metadata.namespace_.toString();break}let a=s??c.relative(this.rootPath,n),r=this.parsingErrors.has(n);t.push({identifier:a,uri:o,hasParseError:r})}return t}async getDocumentContentAsync(e){await this.ensureCacheInitialized();let t=this.filePathsByIdentifier.get(e);if(!t)try{await i.access(e),t=e}catch{let n=c.join(this.rootPath,e);try{await i.access(n),t=n}catch{return null}}try{return await i.readFile(t,"utf8")}catch{return null}}async getDocumentUriAsync(e){await this.ensureCacheInitialized();let t=this.filePathsByIdentifier.get(e);if(!t)try{await i.access(e),t=e}catch{let n=c.join(this.rootPath,e);try{await i.access(n),t=n}catch{return null}}return x(t).toString()}async refreshAsync(){this.documentCache.clear(),this.filePathsByIdentifier.clear(),this.parsingErrors.clear(),this.cacheInitialized=!1,this.cacheInitPromise=null,await this.ensureCacheInitialized()}async ensureCacheInitialized(){if(!this.cacheInitialized){if(this.cacheInitPromise){await this.cacheInitPromise;return}this.cacheInitPromise=this.loadDocuments(),await this.cacheInitPromise,this.cacheInitialized=!0}}async loadDocuments(){try{await i.mkdir(this.rootPath,{recursive:!0})}catch{}let t=(await this.findYamlFiles(this.rootPath,this.recursive)).map(async o=>{try{let s=await i.readFile(o,"utf8"),a=this.parser.parse(s);return{filePath:o,document:a,error:null}}catch(s){return{filePath:o,document:null,error:s instanceof Error?s.message:String(s)}}}),n=await Promise.all(t);for(let{filePath:o,document:s,error:a}of n){let r=c.relative(this.rootPath,o);if(s&&s.metadata.namespace_){let m=s.metadata.namespace_.toString();this.documentCache.set(m,s),this.documentCache.set(o,s),this.documentCache.set(r,s),this.filePathsByIdentifier.set(m,o),this.filePathsByIdentifier.set(o,o),this.filePathsByIdentifier.set(r,o)}else this.filePathsByIdentifier.set(o,o),this.filePathsByIdentifier.set(r,o);a&&this.parsingErrors.set(o,a)}}async findYamlFiles(e,t){let n=[];try{let o=await i.readdir(e,{withFileTypes:!0});for(let s of o){let a=c.join(e,s.name);if(s.isDirectory()&&t){let r=await this.findYamlFiles(a,t);n.push(...r)}else s.isFile()&&s.name.endsWith(".kan.yml")&&n.push(a)}}catch{}return n}};import*as g from"fs";var _=(n=>(n.NotFound="NotFound",n.Workspace="Workspace",n.Cache="Cache",n))(_||{}),k=class{cache;workspace;constructor(e,t,n){let o=n??new f;g.existsSync(e)||g.mkdirSync(e,{recursive:!0}),g.existsSync(t)||g.mkdirSync(t,{recursive:!0}),this.cache=new y(e,!0,o),this.workspace=new y(t,!0,o)}getCache(){return this.cache}getWorkspace(){return this.workspace}async getAllDocumentsAsync(){let e=await this.workspace.getAllDocumentsAsync(),t=await this.cache.getAllDocumentsAsync(),n=new Map;for(let o of t)if(o.metadata.namespace_){let s=o.metadata.namespace_.toString();n.set(s,o)}for(let o of e)if(o.metadata.namespace_){let s=o.metadata.namespace_.toString();n.set(s,o)}return Array.from(n.values())}async getDocumentAsync(e){let t=await this.workspace.getDocumentAsync(e);return t||await this.cache.getDocumentAsync(e)}async getDocumentsByNamespaceAsync(e,t){let n=await this.workspace.getDocumentsByNamespaceAsync(e,t),o=await this.cache.getDocumentsByNamespaceAsync(e,t),s=new Map;for(let a of o)if(a.metadata.namespace_?.version){let r=a.metadata.namespace_.version.toString();s.set(r,a)}for(let a of n)if(a.metadata.namespace_?.version){let r=a.metadata.namespace_.version.toString();s.set(r,a)}return Array.from(s.values())}async getHighestCompatibleVersionAsync(e,t){let n=await this.workspace.getHighestCompatibleVersionAsync(e,t);return n||await this.cache.getHighestCompatibleVersionAsync(e,t)}async saveDocumentAsync(e,t){await this.workspace.saveDocumentAsync(e,t)}async saveToCacheAsync(e,t){await this.cache.saveDocumentAsync(e,t)}async deleteDocumentAsync(e){await this.workspace.deleteDocumentAsync(e)}async clearNamespaceAsync(e,t){await this.workspace.clearNamespaceAsync(e,t)}async getAllDocumentReferencesAsync(){let e=await this.workspace.getAllDocumentReferencesAsync(),t=await this.cache.getAllDocumentReferencesAsync(),n=[];return n.push(...e),n.push(...t),n}async getDocumentContentAsync(e){let t=await this.workspace.getDocumentContentAsync(e);return t||await this.cache.getDocumentContentAsync(e)}async getDocumentUriAsync(e){let t=await this.workspace.getDocumentUriAsync(e);return t||await this.cache.getDocumentUriAsync(e)}async getDocumentLocationAsync(e){return await this.workspace.getDocumentAsync(e)?"Workspace":await this.cache.getDocumentAsync(e)?"Cache":"NotFound"}};import{homedir as $}from"os";import{join as B}from"path";function d(){let u=process.env.KANONAK_PACKAGE_CACHE;return u||B($(),".kanonak","packages")}var C=class u{static createComposite(e,t,n){let o=e??d(),s=t??".";return new k(o,s,n)}static createFromEnvironment(e){let t=d(),n=process.env.KANONAK_WORKSPACE_PATH??".";return u.createComposite(t,n,e)}};var D=class{repos;constructor(...e){this.repos=e}async getHighestCompatibleVersionAsync(e,t){for(let n of this.repos)try{let o=await n.getHighestCompatibleVersionAsync(e,t);if(o)return o}catch{}return null}async getAllDocumentsAsync(){let e=[],t=new Set;for(let n of this.repos)try{for(let o of await n.getAllDocumentsAsync()){let s=o.metadata?.namespace_,a=s?s.version?`${s.publisher}/${s.package_}@${s.version.major}.${s.version.minor}.${s.version.patch}`:`${s.publisher}/${s.package_}`:void 0;if(a!==void 0){if(t.has(a))continue;t.add(a)}e.push(o)}}catch{}return e}async getDocumentAsync(e){for(let t of this.repos)try{let n=await t.getDocumentAsync(e);if(n)return n}catch{}return null}async getDocumentsByNamespaceAsync(e,t){for(let n of this.repos)try{let o=await n.getDocumentsByNamespaceAsync(e,t);if(o.length>0)return o}catch{}return[]}async saveDocumentAsync(e,t){await this.repos[0].saveDocumentAsync(e,t)}async deleteDocumentAsync(e){await this.repos[0].deleteDocumentAsync(e)}async clearNamespaceAsync(e,t){await this.repos[0].clearNamespaceAsync(e,t)}async getAllDocumentReferencesAsync(){return this.repos[0].getAllDocumentReferencesAsync()}async getDocumentContentAsync(e){for(let t of this.repos)try{let n=await t.getDocumentContentAsync(e);if(n)return n}catch{}return null}async getDocumentUriAsync(e){for(let t of this.repos)try{let n=await t.getDocumentUriAsync(e);if(n)return n}catch{}return null}};import{VersionOperator as H}from"@kanonak-protocol/types/document/models/enums";var K=class{constructor(e,t){this.base=e;this.lock=t}base;lock;pinnedVersion(e,t){return this.lock.packages[`${e}/${t}`]?.version}async getHighestCompatibleVersionAsync(e,t){let n=this.pinnedVersion(e,t.packageName);if(n){let o=b(n);if(o){let s={...t,versionOperator:H.Exact,version:o};return this.base.getHighestCompatibleVersionAsync(e,s)}}return this.base.getHighestCompatibleVersionAsync(e,t)}async getDocumentsByNamespaceAsync(e,t){let n=await this.base.getDocumentsByNamespaceAsync(e,t),o=this.pinnedVersion(e,t);return o?n.filter(s=>{let a=s.metadata.namespace_?.version;return a?`${a.major}.${a.minor}.${a.patch}`===o:!1}):n}getAllDocumentsAsync(){return this.base.getAllDocumentsAsync()}getDocumentAsync(e){return this.base.getDocumentAsync(e)}saveDocumentAsync(e,t){return this.base.saveDocumentAsync(e,t)}deleteDocumentAsync(e){return this.base.deleteDocumentAsync(e)}clearNamespaceAsync(e,t){return this.base.clearNamespaceAsync(e,t)}getAllDocumentReferencesAsync(){return this.base.getAllDocumentReferencesAsync()}getDocumentContentAsync(e){return this.base.getDocumentContentAsync(e)}getDocumentUriAsync(e){return this.base.getDocumentUriAsync(e)}};import{readFileSync as V,readdirSync as j}from"fs";import{join as N}from"path";var E=new Set(["node_modules",".kanonak",".git","_site","build",".stage"]);function I(u,e=[]){for(let t of j(u,{withFileTypes:!0}))t.isDirectory()?E.has(t.name)||I(N(u,t.name),e):t.name.endsWith(".kan.yml")&&e.push(N(u,t.name));return e}async function z(u,e=new f,t={}){let n=new w(e);for(let m of I(u))try{let l=e.parse(V(m,"utf-8")),p=l.metadata?.namespace_,h=p?.version;p&&h&&await n.saveDocumentAsync(l,`${p.publisher}/${p.package_}@${h.major}.${h.minor}.${h.patch}`)}catch{}let o=new y(d(),!0,e),s=new Map,a=t.httpCache??{getFromCache:(m,l,p)=>s.get(`${m}|${l}|${p}`)??null,onFetch:(m,l,p,h)=>{s.set(`${m}|${l}|${p}`,h)}},r=new v({getFromCache:a.getFromCache,onFetch:a.onFetch});return new D(n,o,r)}export{y as a,_ as b,k as c,d,C as e,D as f,K as g,I as h,z as i};
|
|
1
|
+
import{d as v}from"./chunk-MFQUKORC.js";import{a as w}from"./chunk-4NO7MHS7.js";import{a as f}from"./chunk-NJ3AZYQD.js";import{c as A,d as R,g as b,h as F,i as S}from"./chunk-2ACBWC7K.js";import*as i from"fs/promises";import*as c from"path";import{pathToFileURL as x}from"url";import{VersionOperator as P}from"@kanonak-protocol/types/document/models/enums";var y=class{rootPath;recursive;parser;documentCache;filePathsByIdentifier;cacheInitialized=!1;cacheInitPromise=null;parsingErrors=new Map;constructor(e,t=!0,n){if(!e||e.trim().length===0)throw new Error("Root path cannot be null or empty");this.rootPath=c.resolve(e),this.recursive=t,this.parser=n??new f,this.documentCache=new Map,this.filePathsByIdentifier=new Map}async getAllDocumentsAsync(){await this.ensureCacheInitialized();let e=new Set(this.documentCache.values());return Array.from(e)}async getDocumentAsync(e){await this.ensureCacheInitialized();let t=this.documentCache.get(e);if(t)return t;let n=c.join(this.rootPath,e);if(t=this.documentCache.get(n),t)return t;for(let o of[".kan.yml",".yml",".yaml"])if(!e.endsWith(o)){let s=e+o;if(t=this.documentCache.get(s),t)return t;let a=c.join(this.rootPath,s);if(t=this.documentCache.get(a),t)return t}return null}async getDocumentsByNamespaceAsync(e,t){await this.ensureCacheInitialized();let n=new Set(this.documentCache.values());return Array.from(n).filter(o=>o.metadata.namespace_?.publisher===e&&o.metadata.namespace_?.package_===t)}async getHighestCompatibleVersionAsync(e,t){await this.ensureCacheInitialized();let n=new Set(this.documentCache.values()),o=Array.from(n).filter(a=>a.metadata?.namespace_?.publisher===e&&a.metadata?.namespace_?.package_===t.packageName&&a.metadata?.namespace_?.version!==void 0);if(o.length===0)return null;let s=o.filter(a=>{let r=a.metadata.namespace_.version;switch(t.versionOperator){case P.Exact:return R(r,t.version);case P.Compatible:return F(r,t.version);case P.Major:return S(r,t.version);case P.Any:return A(r,t.minVersion)>=0;default:return!1}});return s.length===0?null:(s.sort((a,r)=>{let m=a.metadata.namespace_.version,l=r.metadata.namespace_.version;return A(l,m)}),s[0])}async saveDocumentAsync(e,t){let n,o=e.metadata.namespace_?.toString();if(o&&o.includes("@")&&o.includes("/")){let m=o.split("/"),l=m[0],h=m[1].replace("@","@")+".kan.yml";n=c.join(this.rootPath,l,h)}else n=c.join(this.rootPath,t),!n.endsWith(".yml")&&!n.endsWith(".yaml")&&!n.endsWith(".kan.yml")&&(n+=".kan.yml");let s=c.dirname(n);await i.mkdir(s,{recursive:!0});let a=this.parser.save(e);await i.writeFile(n,a,"utf8"),o&&this.documentCache.set(o,e),this.documentCache.set(n,e);let r=c.relative(this.rootPath,n);this.documentCache.set(r,e)}async deleteDocumentAsync(e){let t=await this.getDocumentAsync(e);if(!t)return;let n=this.filePathsByIdentifier.get(e);if(!n)return;try{await i.unlink(n)}catch{}let o=t.metadata.namespace_?.toString();o&&this.documentCache.delete(o),this.documentCache.delete(e),this.documentCache.delete(n);let s=c.relative(this.rootPath,n);this.documentCache.delete(s)}async clearNamespaceAsync(e,t){await this.ensureCacheInitialized();let n=[];for(let[s,a]of this.documentCache.entries()){let r=a.metadata.namespace_?.toString()||"";r.includes(e)&&r.includes(t)&&n.push([s,a])}let o=c.join(this.rootPath,e);try{let s=await i.readdir(o);for(let a of s)a.includes(t)&&a.endsWith(".kan.yml")&&await i.unlink(c.join(o,a))}catch{}for(let[s]of n)this.documentCache.delete(s)}async getAllDocumentReferencesAsync(){await this.ensureCacheInitialized();let e=new Set(this.filePathsByIdentifier.values()),t=[];for(let n of e){let o=x(n).toString(),s;for(let[m,l]of this.documentCache.entries())if(this.filePathsByIdentifier.get(m)===n&&l.metadata.namespace_){s=l.metadata.namespace_.toString();break}let a=s??c.relative(this.rootPath,n),r=this.parsingErrors.has(n);t.push({identifier:a,uri:o,hasParseError:r})}return t}async getDocumentContentAsync(e){await this.ensureCacheInitialized();let t=this.filePathsByIdentifier.get(e);if(!t)try{await i.access(e),t=e}catch{let n=c.join(this.rootPath,e);try{await i.access(n),t=n}catch{return null}}try{return await i.readFile(t,"utf8")}catch{return null}}async getDocumentUriAsync(e){await this.ensureCacheInitialized();let t=this.filePathsByIdentifier.get(e);if(!t)try{await i.access(e),t=e}catch{let n=c.join(this.rootPath,e);try{await i.access(n),t=n}catch{return null}}return x(t).toString()}async refreshAsync(){this.documentCache.clear(),this.filePathsByIdentifier.clear(),this.parsingErrors.clear(),this.cacheInitialized=!1,this.cacheInitPromise=null,await this.ensureCacheInitialized()}async ensureCacheInitialized(){if(!this.cacheInitialized){if(this.cacheInitPromise){await this.cacheInitPromise;return}this.cacheInitPromise=this.loadDocuments(),await this.cacheInitPromise,this.cacheInitialized=!0}}async loadDocuments(){try{await i.mkdir(this.rootPath,{recursive:!0})}catch{}let t=(await this.findYamlFiles(this.rootPath,this.recursive)).map(async o=>{try{let s=await i.readFile(o,"utf8"),a=this.parser.parse(s);return{filePath:o,document:a,error:null}}catch(s){return{filePath:o,document:null,error:s instanceof Error?s.message:String(s)}}}),n=await Promise.all(t);for(let{filePath:o,document:s,error:a}of n){let r=c.relative(this.rootPath,o);if(s&&s.metadata.namespace_){let m=s.metadata.namespace_.toString();this.documentCache.set(m,s),this.documentCache.set(o,s),this.documentCache.set(r,s),this.filePathsByIdentifier.set(m,o),this.filePathsByIdentifier.set(o,o),this.filePathsByIdentifier.set(r,o)}else this.filePathsByIdentifier.set(o,o),this.filePathsByIdentifier.set(r,o);a&&this.parsingErrors.set(o,a)}}async findYamlFiles(e,t){let n=[];try{let o=await i.readdir(e,{withFileTypes:!0});for(let s of o){let a=c.join(e,s.name);if(s.isDirectory()&&t){let r=await this.findYamlFiles(a,t);n.push(...r)}else s.isFile()&&s.name.endsWith(".kan.yml")&&n.push(a)}}catch{}return n}};import*as g from"fs";var _=(n=>(n.NotFound="NotFound",n.Workspace="Workspace",n.Cache="Cache",n))(_||{}),k=class{cache;workspace;constructor(e,t,n){let o=n??new f;g.existsSync(e)||g.mkdirSync(e,{recursive:!0}),g.existsSync(t)||g.mkdirSync(t,{recursive:!0}),this.cache=new y(e,!0,o),this.workspace=new y(t,!0,o)}getCache(){return this.cache}getWorkspace(){return this.workspace}async getAllDocumentsAsync(){let e=await this.workspace.getAllDocumentsAsync(),t=await this.cache.getAllDocumentsAsync(),n=new Map;for(let o of t)if(o.metadata.namespace_){let s=o.metadata.namespace_.toString();n.set(s,o)}for(let o of e)if(o.metadata.namespace_){let s=o.metadata.namespace_.toString();n.set(s,o)}return Array.from(n.values())}async getDocumentAsync(e){let t=await this.workspace.getDocumentAsync(e);return t||await this.cache.getDocumentAsync(e)}async getDocumentsByNamespaceAsync(e,t){let n=await this.workspace.getDocumentsByNamespaceAsync(e,t),o=await this.cache.getDocumentsByNamespaceAsync(e,t),s=new Map;for(let a of o)if(a.metadata.namespace_?.version){let r=a.metadata.namespace_.version.toString();s.set(r,a)}for(let a of n)if(a.metadata.namespace_?.version){let r=a.metadata.namespace_.version.toString();s.set(r,a)}return Array.from(s.values())}async getHighestCompatibleVersionAsync(e,t){let n=await this.workspace.getHighestCompatibleVersionAsync(e,t);return n||await this.cache.getHighestCompatibleVersionAsync(e,t)}async saveDocumentAsync(e,t){await this.workspace.saveDocumentAsync(e,t)}async saveToCacheAsync(e,t){await this.cache.saveDocumentAsync(e,t)}async deleteDocumentAsync(e){await this.workspace.deleteDocumentAsync(e)}async clearNamespaceAsync(e,t){await this.workspace.clearNamespaceAsync(e,t)}async getAllDocumentReferencesAsync(){let e=await this.workspace.getAllDocumentReferencesAsync(),t=await this.cache.getAllDocumentReferencesAsync(),n=[];return n.push(...e),n.push(...t),n}async getDocumentContentAsync(e){let t=await this.workspace.getDocumentContentAsync(e);return t||await this.cache.getDocumentContentAsync(e)}async getDocumentUriAsync(e){let t=await this.workspace.getDocumentUriAsync(e);return t||await this.cache.getDocumentUriAsync(e)}async getDocumentLocationAsync(e){return await this.workspace.getDocumentAsync(e)?"Workspace":await this.cache.getDocumentAsync(e)?"Cache":"NotFound"}};import{homedir as $}from"os";import{join as B}from"path";function d(){let u=process.env.KANONAK_PACKAGE_CACHE;return u||B($(),".kanonak","packages")}var C=class u{static createComposite(e,t,n){let o=e??d(),s=t??".";return new k(o,s,n)}static createFromEnvironment(e){let t=d(),n=process.env.KANONAK_WORKSPACE_PATH??".";return u.createComposite(t,n,e)}};var D=class{repos;constructor(...e){this.repos=e}async getHighestCompatibleVersionAsync(e,t){for(let n of this.repos)try{let o=await n.getHighestCompatibleVersionAsync(e,t);if(o)return o}catch{}return null}async getAllDocumentsAsync(){let e=[],t=new Set;for(let n of this.repos)try{for(let o of await n.getAllDocumentsAsync()){let s=o.metadata?.namespace_,a=s?s.version?`${s.publisher}/${s.package_}@${s.version.major}.${s.version.minor}.${s.version.patch}`:`${s.publisher}/${s.package_}`:void 0;if(a!==void 0){if(t.has(a))continue;t.add(a)}e.push(o)}}catch{}return e}async getDocumentAsync(e){for(let t of this.repos)try{let n=await t.getDocumentAsync(e);if(n)return n}catch{}return null}async getDocumentsByNamespaceAsync(e,t){for(let n of this.repos)try{let o=await n.getDocumentsByNamespaceAsync(e,t);if(o.length>0)return o}catch{}return[]}async saveDocumentAsync(e,t){await this.repos[0].saveDocumentAsync(e,t)}async deleteDocumentAsync(e){await this.repos[0].deleteDocumentAsync(e)}async clearNamespaceAsync(e,t){await this.repos[0].clearNamespaceAsync(e,t)}async getAllDocumentReferencesAsync(){return this.repos[0].getAllDocumentReferencesAsync()}async getDocumentContentAsync(e){for(let t of this.repos)try{let n=await t.getDocumentContentAsync(e);if(n)return n}catch{}return null}async getDocumentUriAsync(e){for(let t of this.repos)try{let n=await t.getDocumentUriAsync(e);if(n)return n}catch{}return null}};import{VersionOperator as H}from"@kanonak-protocol/types/document/models/enums";var K=class{constructor(e,t){this.base=e;this.lock=t}base;lock;pinnedVersion(e,t){return this.lock.packages[`${e}/${t}`]?.version}async getHighestCompatibleVersionAsync(e,t){let n=this.pinnedVersion(e,t.packageName);if(n){let o=b(n);if(o){let s={...t,versionOperator:H.Exact,version:o};return this.base.getHighestCompatibleVersionAsync(e,s)}}return this.base.getHighestCompatibleVersionAsync(e,t)}async getDocumentsByNamespaceAsync(e,t){let n=await this.base.getDocumentsByNamespaceAsync(e,t),o=this.pinnedVersion(e,t);return o?n.filter(s=>{let a=s.metadata.namespace_?.version;return a?`${a.major}.${a.minor}.${a.patch}`===o:!1}):n}getAllDocumentsAsync(){return this.base.getAllDocumentsAsync()}getDocumentAsync(e){return this.base.getDocumentAsync(e)}saveDocumentAsync(e,t){return this.base.saveDocumentAsync(e,t)}deleteDocumentAsync(e){return this.base.deleteDocumentAsync(e)}clearNamespaceAsync(e,t){return this.base.clearNamespaceAsync(e,t)}getAllDocumentReferencesAsync(){return this.base.getAllDocumentReferencesAsync()}getDocumentContentAsync(e){return this.base.getDocumentContentAsync(e)}getDocumentUriAsync(e){return this.base.getDocumentUriAsync(e)}};import{readFileSync as V,readdirSync as j}from"fs";import{join as N}from"path";var E=new Set(["node_modules",".kanonak",".git","_site","build",".stage"]);function I(u,e=[]){for(let t of j(u,{withFileTypes:!0}))t.isDirectory()?E.has(t.name)||I(N(u,t.name),e):t.name.endsWith(".kan.yml")&&e.push(N(u,t.name));return e}async function z(u,e=new f,t={}){let n=new w(e);for(let m of I(u))try{let l=e.parse(V(m,"utf-8")),p=l.metadata?.namespace_,h=p?.version;p&&h&&await n.saveDocumentAsync(l,`${p.publisher}/${p.package_}@${h.major}.${h.minor}.${h.patch}`)}catch{}let o=new y(d(),!0,e),s=new Map,a=t.httpCache??{getFromCache:(m,l,p)=>s.get(`${m}|${l}|${p}`)??null,onFetch:(m,l,p,h)=>{s.set(`${m}|${l}|${p}`,h)}},r=new v({getFromCache:a.getFromCache,onFetch:a.onFetch});return new D(n,o,r)}export{y as a,_ as b,k as c,d,C as e,D as f,K as g,I as h,z as i};
|