@kanonak-protocol/sdk 4.1.0 → 4.2.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/canonical/index.d.ts +1 -1
- package/dist/{chunk-V3YPCUA6.js → chunk-5DXJ5B5T.js} +1 -1
- package/dist/chunk-CEFXZIHB.js +1 -0
- package/dist/{chunk-4OSNT57C.js → chunk-HJQGBT7M.js} +1 -1
- package/dist/{chunk-ZRMF5QLN.js → chunk-JE4ZJ3OB.js} +1 -1
- package/dist/{chunk-YI5GLYMB.js → chunk-JSHJ4ZDB.js} +1 -1
- package/dist/chunk-MJZSHLWI.js +2 -0
- package/dist/{chunk-6I4BYZVA.js → chunk-O27W3OKK.js} +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js +26 -26
- package/dist/parsing/index.js +1 -1
- package/dist/reasoning/index.js +1 -1
- package/dist/search/index.js +1 -1
- package/dist/server/index.js +1 -1
- package/dist/transformations/index.js +1 -1
- package/dist/validation/index.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-VNKX52D5.js +0 -2
- package/dist/chunk-WUAKDYY6.js +0 -1
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-
|
|
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-MJZSHLWI.js";import{a as Qe}from"./chunk-HJQGBT7M.js";import"./chunk-QHABFCRC.js";import{b as L,c as W,d as F}from"./chunk-YCV4H6H5.js";import{a as H}from"./chunk-4NO7MHS7.js";import{a as Pe,b as we,c as he}from"./chunk-JSHJ4ZDB.js";import{a as ke,b as be}from"./chunk-PEUTCG3B.js";import"./chunk-PEJALHXK.js";import"./chunk-SC5M74NM.js";import{A as We,B as Fe,C as Ge,L 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,j as je,k as ve,l as _e,m as Ie,n as Ae,o as Te,p as Oe,q as Ve,r as $e,s as Ue,t as Me,u as ze,v as Ne,w as Je,x as He,y as qe,z as Le}from"./chunk-5DXJ5B5T.js";import"./chunk-SHDHMKMJ.js";import{a as Y,c as le,i as pe}from"./chunk-CEFXZIHB.js";import{a as q}from"./chunk-ZYAABYDS.js";import{a as ye}from"./chunk-NC3FSY3R.js";import"./chunk-PBNVHBS3.js";import{b as ue,c as de}from"./chunk-XYEY6HUC.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};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { canonicalForm, canonicalHash, CANONICAL_FORM_VERSION } from './CanonicalHash.js';
|
|
2
|
-
export { Carrier, carrierOf
|
|
2
|
+
export { Carrier, carrierOf } from './Datatypes.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{d as _}from"./chunk-SHDHMKMJ.js";import{a as D,b as je,c as ze,u as Ge,w as A}from"./chunk-WUAKDYY6.js";import{a as Be}from"./chunk-ZYAABYDS.js";import{a as B,d as W,e as Ze,f as Je,g as T,h as Qe}from"./chunk-NC3FSY3R.js";import{a as C,d as E,f as x,h as Ne,i as w,j as L,k as V,l as O,m as S,n as M}from"./chunk-PBNVHBS3.js";import{a as N,b as U,c as Ye}from"./chunk-XYEY6HUC.js";import{c as I,d as H,k as Xe,l as qe}from"./chunk-T3JR2SV6.js";import{a as Fe}from"./chunk-FUUTGGJS.js";import{e as P}from"./chunk-2ACBWC7K.js";var q=class{isValid=!1;errors=[];warnings=[];get totalIssues(){return this.errors.length+this.warnings.length}};var b=(n=>(n.Warning="Warning",n.Error="Error",n))(b||{});var g=class{ruleType="";severity="Error";lineNumber;column;entityName;propertyName;propertyPath;message="";suggestion;actualValue;expectedValue;toString(){let e="";return this.lineNumber!==void 0&&(e+=`Line ${this.lineNumber}: `),this.entityName&&(e+=`[${this.entityName}] `),e+=this.message,e}};var _e=class y{resolvedDocuments=[];currentEntityPath;withPath(e){let n=new y;return n.resolvedDocuments=this.resolvedDocuments,n.currentEntityPath=e,n}};var Oe=class{constructor(e){this.underlying=e;this.repository=new Le(e)}underlying;repository;kanonaksPromise=null;importClosureCache=new Map;classDeclarationsCache=new Map;propertyNamesCache=new Map;allDocumentsPromise=null;getKanonaks(){return this.kanonaksPromise||(this.kanonaksPromise=new A().parseKanonaks(this.underlying)),this.kanonaksPromise}async getImportClosure(e){let n=this.importClosureCache.get(e);return n||(n=this.computeImportClosure(e),this.importClosureCache.set(e,n),n)}async getClassDeclarations(e){let n=this.classDeclarationsCache.get(e);return n||(n=this.computeClassDeclarations(e),this.classDeclarationsCache.set(e,n),n)}async getPropertyNames(e){let n=this.propertyNamesCache.get(e);return n||(n=this.computePropertyNames(e),this.propertyNamesCache.set(e,n),n)}getAllDocuments(){return this.allDocumentsPromise||(this.allDocumentsPromise=this.underlying.getAllDocumentsAsync()),this.allDocumentsPromise}async computeImportClosure(e){let n=new Set([e]),t=[e],o=await this.buildDocsByIdIndex();for(;t.length>0;){let s=t.shift(),r=o.get(s);if(r?.metadata.imports)for(let[i,a]of Object.entries(r.metadata.imports))for(let c of a){let p=await this.repository.getHighestCompatibleVersionAsync(i,c);if(!p)continue;let l=Ue(p);!l||n.has(l)||(n.add(l),t.push(l))}}return n}async buildDocsByIdIndex(){let e=await this.getAllDocuments(),n=new Map;for(let t of e){let o=Ue(t);o&&n.set(o,t)}return n}async computeClassDeclarations(e){let n=await this.findDocById(e),t=new Map;if(!n)return t;for(let[o,s]of Object.entries(n.body)){if(!et(s))continue;let r=s,i=tt(r,"type");if(i==="Class"||i?.endsWith(".Class")){let a=ft(r);t.set(o,a)}}return t}async computePropertyNames(e){let n=await this.findDocById(e),t=new Set;if(!n)return t;for(let[o,s]of Object.entries(n.body)){if(!et(s))continue;let i=tt(s,"type");(i==="ObjectProperty"||i?.endsWith(".ObjectProperty")||i==="DatatypeProperty"||i?.endsWith(".DatatypeProperty")||i==="AnnotationProperty"||i?.endsWith(".AnnotationProperty")||i==="Property"||i?.endsWith(".Property"))&&t.add(o)}return t}async findDocById(e){let n=await this.getAllDocuments();for(let t of n)if(Ue(t)===e)return t}};function Ue(y){let e=y.metadata.namespace_;if(!(!e||!e.version))return`${e.publisher}/${e.package_}@${P(e.version)}`}function et(y){return typeof y=="object"&&y!==null&&!Array.isArray(y)}function tt(y,e){if(e in y)return nt(y[e]);for(let n of Object.keys(y))if(n.endsWith(`.${e}`))return nt(y[n])}function nt(y){return Array.isArray(y)?y.length>0?String(y[0]):void 0:y==null?void 0:String(y)}function ft(y){let e=y.subClassOf;if(e===void 0){for(let n of Object.keys(y))if(n.endsWith(".subClassOf")){e=y[n];break}}return N(e)}var Le=class{constructor(e){this.inner=e}inner;highestVersionCache=new Map;byNamespaceCache=new Map;getAllDocumentsAsync(){return this.inner.getAllDocumentsAsync()}getDocumentAsync(e){return this.inner.getDocumentAsync(e)}getDocumentsByNamespaceAsync(e,n){let t=`${e}/${n}`,o=this.byNamespaceCache.get(t);return o||(o=this.inner.getDocumentsByNamespaceAsync(e,n),this.byNamespaceCache.set(t,o),o)}getHighestCompatibleVersionAsync(e,n){let t=n.version,o=t?`${t.major}.${t.minor}.${t.patch}`:"",s=`${e}/${n.packageName}@${n.versionOperator}:${o}`,r=this.highestVersionCache.get(s);return r||(r=this.inner.getHighestCompatibleVersionAsync(e,n),this.highestVersionCache.set(s,r),r)}saveDocumentAsync(){throw new Error("CachingRepository is read-only during a validation pass.")}deleteDocumentAsync(){throw new Error("CachingRepository is read-only during a validation pass.")}clearNamespaceAsync(){throw new Error("CachingRepository is read-only during a validation pass.")}getAllDocumentReferencesAsync(){return this.inner.getAllDocumentReferencesAsync()}getDocumentContentAsync(e){return this.inner.getDocumentContentAsync(e)}getDocumentUriAsync(e){return this.inner.getDocumentUriAsync(e)}};var z=class y{static NAMESPACE_PREFIX_PATTERN=/^(rdfs|xsd|owl|rdf|dc|foaf|skos|dct|dcterms|geo|time|prov|schema|og|dbo):/i;ruleName="NamespacePrefix";validate(e){let n=[];for(let[t,o]of Object.entries(e.body))o&&typeof o=="object"&&!Array.isArray(o)&&this.validateEntity(t,o,n);return n}validateEntity(e,n,t){for(let[o,s]of Object.entries(n)){let r=s?.toString()??"";if(r&&y.NAMESPACE_PREFIX_PATTERN.test(r)){let i=this.getSuggestionForPrefixedValue(r),a=e.split(".")[0],c=new g;c.ruleType=this.ruleName,c.severity="Error",c.entityName=a,c.propertyName=e,c.actualValue=o,c.expectedValue=i,c.message=`Invalid namespace prefix '${r}'. Use '${i}' without prefix.`,c.suggestion="Kanonak YAML uses simple type names. Namespace resolution is handled through imports.",t.push(c)}s&&typeof s=="object"&&!Array.isArray(s)&&this.validateEntity(`${e}.${o}`,s,t)}}getSuggestionForPrefixedValue(e){let n=e.toLowerCase();if(n==="rdfs:class"||n==="owl:class")return"Class";if(n==="rdfs:property"||n==="rdf:property")return"DatatypeProperty or ObjectProperty";if(n.startsWith("xsd:"))return e.substring(4);let t=e.indexOf(":");return t>=0?e.substring(t+1):e}};var Y=class y{static RESERVED_WORDS=new Set(["kanonak","imports","namespace","type","label","comment","subclassof","domain","range","required","functional"]);static VALID_PROPERTIES=new Set(["type","label","comment","subClassOf","subPropertyOf","domain","range","required","functional","inverseOf","transitive","symmetric","inverseFunctional"]);static VALID_NAME_PATTERN=/^[a-zA-Z][a-zA-Z0-9_-]*$/;static VALID_AUGMENTATION_PATTERN=/^[a-zA-Z][a-zA-Z0-9_-]*\.[a-zA-Z][a-zA-Z0-9_-]*$/;static VALID_PROPERTY_NAME_PATTERN=/^[a-zA-Z][a-zA-Z0-9_.]*$/;ruleName="ResourceNaming";validate(e){let n=[],t=e.metadata?.namespace_?.publisher==="kanonak.org"&&e.metadata?.namespace_?.package_?.startsWith("core-");for(let[o,s]of Object.entries(e.body)){let r=y.VALID_AUGMENTATION_PATTERN.test(o);if(!r&&!t&&y.RESERVED_WORDS.has(o.toLowerCase())){let i=new g;i.ruleType=this.ruleName,i.severity="Error",i.entityName=o,i.message=`Entity name '${o}' is a reserved word and cannot be used.`,i.suggestion="Choose a different name that doesn't conflict with Kanonak reserved words.",n.push(i);continue}if(!r&&!y.VALID_NAME_PATTERN.test(o)){let i;/^\d/.test(o)?i="Entity names must start with a letter, not a number.":o.includes(" ")?i="Entity names cannot contain spaces. Use camelCase or underscores instead.":i="Entity names must start with a letter and contain only letters, numbers, and underscores.";let a=new g;a.ruleType=this.ruleName,a.severity="Error",a.entityName=o,a.message=`Invalid entity name '${o}'. ${i}`,a.suggestion=i,n.push(a)}s&&typeof s=="object"&&!Array.isArray(s)&&this.validatePropertyNames(o,s,n)}return n}validatePropertyNames(e,n,t){for(let o of Object.keys(n))if(!y.VALID_PROPERTIES.has(o)&&!y.VALID_PROPERTY_NAME_PATTERN.test(o)){let s=new g;s.ruleType=this.ruleName,s.severity="Warning",s.entityName=e,s.propertyName=o,s.message=`Property name '${o}' in entity '${e}' doesn't follow naming conventions.`,s.suggestion="Property names should start with a letter and contain only letters, numbers, and underscores.",t.push(s)}}};var G=class y{static XSD_TYPES=new Set(["string","integer","int","long","short","byte","decimal","float","double","boolean","bool","datetime","date","time","duration","anyuri","anysimpletype","nonnegativeinteger","positiveinteger","negativeinteger","nonpositiveinteger","unsignedint","unsignedlong","unsignedshort","unsignedbyte","base64binary","hexbinary"]);ruleName="PropertyTypeSpecificity";validate(e){let n=[];if(e.metadata?.namespace_?.publisher==="kanonak.org"&&e.metadata?.namespace_?.package_?.startsWith("core-"))return n;let t=this.isPropertyDefinedAsClass(e);for(let[o,s]of Object.entries(e.body))if(s&&typeof s=="object"&&!Array.isArray(s)){let r=s,i=r.type;if(i){let a=[];if(Array.isArray(i))for(let c of i){let p=c?.toString();p&&p==="Property"&&!t&&a.push(p)}else{let c=i?.toString();c&&c==="Property"&&!t&&a.push(c)}for(let c of a){let p=this.getPropertyValue(r,"range"),l=this.determinePropertyType(p),m=new g;m.ruleType=this.ruleName,m.severity="Error",m.entityName=o,m.propertyName="type",m.actualValue=c,m.expectedValue=l,m.message=`Invalid property type '${c}'. Use '${l}' instead.`,m.suggestion="Properties should specify their type: DatatypeProperty for data values, ObjectProperty for relationships.",n.push(m)}}}return n}determinePropertyType(e){return!e||e.trim().length===0?"DatatypeProperty or ObjectProperty":y.XSD_TYPES.has(e.toLowerCase())?"DatatypeProperty":/^[A-Z]/.test(e)?"ObjectProperty":"DatatypeProperty or ObjectProperty"}getPropertyValue(e,n){let t=e[n];return t?t.toString():null}isPropertyDefinedAsClass(e){let n=e.body.Property;if(n&&typeof n=="object"&&!Array.isArray(n)){let o=n.type;if(o){let s=o.toString();return s==="Class"||s.endsWith(".Class")}}return!1}};var Z=class{get ruleName(){return"SubjectKanonakTypeRequired"}validate(e){let n=[];for(let[t,o]of Object.entries(e.body)){if(typeof o!="object"||o===null||Array.isArray(o)||t.includes("."))continue;let s=o,r="type"in s,i=s.type?.toString().trim();if(!r||!i){let a=new g;a.ruleType=this.ruleName,a.severity="Error",a.entityName=t,a.propertyName="type",a.message=`Subject Kanonak '${t}' must have a 'type' property.`,a.suggestion=`Add a type statement like:
|
|
1
|
+
import{d as _}from"./chunk-SHDHMKMJ.js";import{a as D,b as je,c as ze,g as Ge,i as A}from"./chunk-CEFXZIHB.js";import{a as Be}from"./chunk-ZYAABYDS.js";import{a as B,d as W,e as Ze,f as Je,g as T,h as Qe}from"./chunk-NC3FSY3R.js";import{a as C,d as E,f as x,h as Ne,i as w,j as L,k as V,l as O,m as S,n as M}from"./chunk-PBNVHBS3.js";import{a as N,b as U,c as Ye}from"./chunk-XYEY6HUC.js";import{c as I,d as H,k as Xe,l as qe}from"./chunk-T3JR2SV6.js";import{a as Fe}from"./chunk-FUUTGGJS.js";import{e as P}from"./chunk-2ACBWC7K.js";var q=class{isValid=!1;errors=[];warnings=[];get totalIssues(){return this.errors.length+this.warnings.length}};var b=(n=>(n.Warning="Warning",n.Error="Error",n))(b||{});var g=class{ruleType="";severity="Error";lineNumber;column;entityName;propertyName;propertyPath;message="";suggestion;actualValue;expectedValue;toString(){let e="";return this.lineNumber!==void 0&&(e+=`Line ${this.lineNumber}: `),this.entityName&&(e+=`[${this.entityName}] `),e+=this.message,e}};var _e=class y{resolvedDocuments=[];currentEntityPath;withPath(e){let n=new y;return n.resolvedDocuments=this.resolvedDocuments,n.currentEntityPath=e,n}};var Oe=class{constructor(e){this.underlying=e;this.repository=new Le(e)}underlying;repository;kanonaksPromise=null;importClosureCache=new Map;classDeclarationsCache=new Map;propertyNamesCache=new Map;allDocumentsPromise=null;getKanonaks(){return this.kanonaksPromise||(this.kanonaksPromise=new A().parseKanonaks(this.underlying)),this.kanonaksPromise}async getImportClosure(e){let n=this.importClosureCache.get(e);return n||(n=this.computeImportClosure(e),this.importClosureCache.set(e,n),n)}async getClassDeclarations(e){let n=this.classDeclarationsCache.get(e);return n||(n=this.computeClassDeclarations(e),this.classDeclarationsCache.set(e,n),n)}async getPropertyNames(e){let n=this.propertyNamesCache.get(e);return n||(n=this.computePropertyNames(e),this.propertyNamesCache.set(e,n),n)}getAllDocuments(){return this.allDocumentsPromise||(this.allDocumentsPromise=this.underlying.getAllDocumentsAsync()),this.allDocumentsPromise}async computeImportClosure(e){let n=new Set([e]),t=[e],o=await this.buildDocsByIdIndex();for(;t.length>0;){let s=t.shift(),r=o.get(s);if(r?.metadata.imports)for(let[i,a]of Object.entries(r.metadata.imports))for(let c of a){let p=await this.repository.getHighestCompatibleVersionAsync(i,c);if(!p)continue;let l=Ue(p);!l||n.has(l)||(n.add(l),t.push(l))}}return n}async buildDocsByIdIndex(){let e=await this.getAllDocuments(),n=new Map;for(let t of e){let o=Ue(t);o&&n.set(o,t)}return n}async computeClassDeclarations(e){let n=await this.findDocById(e),t=new Map;if(!n)return t;for(let[o,s]of Object.entries(n.body)){if(!et(s))continue;let r=s,i=tt(r,"type");if(i==="Class"||i?.endsWith(".Class")){let a=ft(r);t.set(o,a)}}return t}async computePropertyNames(e){let n=await this.findDocById(e),t=new Set;if(!n)return t;for(let[o,s]of Object.entries(n.body)){if(!et(s))continue;let i=tt(s,"type");(i==="ObjectProperty"||i?.endsWith(".ObjectProperty")||i==="DatatypeProperty"||i?.endsWith(".DatatypeProperty")||i==="AnnotationProperty"||i?.endsWith(".AnnotationProperty")||i==="Property"||i?.endsWith(".Property"))&&t.add(o)}return t}async findDocById(e){let n=await this.getAllDocuments();for(let t of n)if(Ue(t)===e)return t}};function Ue(y){let e=y.metadata.namespace_;if(!(!e||!e.version))return`${e.publisher}/${e.package_}@${P(e.version)}`}function et(y){return typeof y=="object"&&y!==null&&!Array.isArray(y)}function tt(y,e){if(e in y)return nt(y[e]);for(let n of Object.keys(y))if(n.endsWith(`.${e}`))return nt(y[n])}function nt(y){return Array.isArray(y)?y.length>0?String(y[0]):void 0:y==null?void 0:String(y)}function ft(y){let e=y.subClassOf;if(e===void 0){for(let n of Object.keys(y))if(n.endsWith(".subClassOf")){e=y[n];break}}return N(e)}var Le=class{constructor(e){this.inner=e}inner;highestVersionCache=new Map;byNamespaceCache=new Map;getAllDocumentsAsync(){return this.inner.getAllDocumentsAsync()}getDocumentAsync(e){return this.inner.getDocumentAsync(e)}getDocumentsByNamespaceAsync(e,n){let t=`${e}/${n}`,o=this.byNamespaceCache.get(t);return o||(o=this.inner.getDocumentsByNamespaceAsync(e,n),this.byNamespaceCache.set(t,o),o)}getHighestCompatibleVersionAsync(e,n){let t=n.version,o=t?`${t.major}.${t.minor}.${t.patch}`:"",s=`${e}/${n.packageName}@${n.versionOperator}:${o}`,r=this.highestVersionCache.get(s);return r||(r=this.inner.getHighestCompatibleVersionAsync(e,n),this.highestVersionCache.set(s,r),r)}saveDocumentAsync(){throw new Error("CachingRepository is read-only during a validation pass.")}deleteDocumentAsync(){throw new Error("CachingRepository is read-only during a validation pass.")}clearNamespaceAsync(){throw new Error("CachingRepository is read-only during a validation pass.")}getAllDocumentReferencesAsync(){return this.inner.getAllDocumentReferencesAsync()}getDocumentContentAsync(e){return this.inner.getDocumentContentAsync(e)}getDocumentUriAsync(e){return this.inner.getDocumentUriAsync(e)}};var z=class y{static NAMESPACE_PREFIX_PATTERN=/^(rdfs|xsd|owl|rdf|dc|foaf|skos|dct|dcterms|geo|time|prov|schema|og|dbo):/i;ruleName="NamespacePrefix";validate(e){let n=[];for(let[t,o]of Object.entries(e.body))o&&typeof o=="object"&&!Array.isArray(o)&&this.validateEntity(t,o,n);return n}validateEntity(e,n,t){for(let[o,s]of Object.entries(n)){let r=s?.toString()??"";if(r&&y.NAMESPACE_PREFIX_PATTERN.test(r)){let i=this.getSuggestionForPrefixedValue(r),a=e.split(".")[0],c=new g;c.ruleType=this.ruleName,c.severity="Error",c.entityName=a,c.propertyName=e,c.actualValue=o,c.expectedValue=i,c.message=`Invalid namespace prefix '${r}'. Use '${i}' without prefix.`,c.suggestion="Kanonak YAML uses simple type names. Namespace resolution is handled through imports.",t.push(c)}s&&typeof s=="object"&&!Array.isArray(s)&&this.validateEntity(`${e}.${o}`,s,t)}}getSuggestionForPrefixedValue(e){let n=e.toLowerCase();if(n==="rdfs:class"||n==="owl:class")return"Class";if(n==="rdfs:property"||n==="rdf:property")return"DatatypeProperty or ObjectProperty";if(n.startsWith("xsd:"))return e.substring(4);let t=e.indexOf(":");return t>=0?e.substring(t+1):e}};var Y=class y{static RESERVED_WORDS=new Set(["kanonak","imports","namespace","type","label","comment","subclassof","domain","range","required","functional"]);static VALID_PROPERTIES=new Set(["type","label","comment","subClassOf","subPropertyOf","domain","range","required","functional","inverseOf","transitive","symmetric","inverseFunctional"]);static VALID_NAME_PATTERN=/^[a-zA-Z][a-zA-Z0-9_-]*$/;static VALID_AUGMENTATION_PATTERN=/^[a-zA-Z][a-zA-Z0-9_-]*\.[a-zA-Z][a-zA-Z0-9_-]*$/;static VALID_PROPERTY_NAME_PATTERN=/^[a-zA-Z][a-zA-Z0-9_.]*$/;ruleName="ResourceNaming";validate(e){let n=[],t=e.metadata?.namespace_?.publisher==="kanonak.org"&&e.metadata?.namespace_?.package_?.startsWith("core-");for(let[o,s]of Object.entries(e.body)){let r=y.VALID_AUGMENTATION_PATTERN.test(o);if(!r&&!t&&y.RESERVED_WORDS.has(o.toLowerCase())){let i=new g;i.ruleType=this.ruleName,i.severity="Error",i.entityName=o,i.message=`Entity name '${o}' is a reserved word and cannot be used.`,i.suggestion="Choose a different name that doesn't conflict with Kanonak reserved words.",n.push(i);continue}if(!r&&!y.VALID_NAME_PATTERN.test(o)){let i;/^\d/.test(o)?i="Entity names must start with a letter, not a number.":o.includes(" ")?i="Entity names cannot contain spaces. Use camelCase or underscores instead.":i="Entity names must start with a letter and contain only letters, numbers, and underscores.";let a=new g;a.ruleType=this.ruleName,a.severity="Error",a.entityName=o,a.message=`Invalid entity name '${o}'. ${i}`,a.suggestion=i,n.push(a)}s&&typeof s=="object"&&!Array.isArray(s)&&this.validatePropertyNames(o,s,n)}return n}validatePropertyNames(e,n,t){for(let o of Object.keys(n))if(!y.VALID_PROPERTIES.has(o)&&!y.VALID_PROPERTY_NAME_PATTERN.test(o)){let s=new g;s.ruleType=this.ruleName,s.severity="Warning",s.entityName=e,s.propertyName=o,s.message=`Property name '${o}' in entity '${e}' doesn't follow naming conventions.`,s.suggestion="Property names should start with a letter and contain only letters, numbers, and underscores.",t.push(s)}}};var G=class y{static XSD_TYPES=new Set(["string","integer","int","long","short","byte","decimal","float","double","boolean","bool","datetime","date","time","duration","anyuri","anysimpletype","nonnegativeinteger","positiveinteger","negativeinteger","nonpositiveinteger","unsignedint","unsignedlong","unsignedshort","unsignedbyte","base64binary","hexbinary"]);ruleName="PropertyTypeSpecificity";validate(e){let n=[];if(e.metadata?.namespace_?.publisher==="kanonak.org"&&e.metadata?.namespace_?.package_?.startsWith("core-"))return n;let t=this.isPropertyDefinedAsClass(e);for(let[o,s]of Object.entries(e.body))if(s&&typeof s=="object"&&!Array.isArray(s)){let r=s,i=r.type;if(i){let a=[];if(Array.isArray(i))for(let c of i){let p=c?.toString();p&&p==="Property"&&!t&&a.push(p)}else{let c=i?.toString();c&&c==="Property"&&!t&&a.push(c)}for(let c of a){let p=this.getPropertyValue(r,"range"),l=this.determinePropertyType(p),m=new g;m.ruleType=this.ruleName,m.severity="Error",m.entityName=o,m.propertyName="type",m.actualValue=c,m.expectedValue=l,m.message=`Invalid property type '${c}'. Use '${l}' instead.`,m.suggestion="Properties should specify their type: DatatypeProperty for data values, ObjectProperty for relationships.",n.push(m)}}}return n}determinePropertyType(e){return!e||e.trim().length===0?"DatatypeProperty or ObjectProperty":y.XSD_TYPES.has(e.toLowerCase())?"DatatypeProperty":/^[A-Z]/.test(e)?"ObjectProperty":"DatatypeProperty or ObjectProperty"}getPropertyValue(e,n){let t=e[n];return t?t.toString():null}isPropertyDefinedAsClass(e){let n=e.body.Property;if(n&&typeof n=="object"&&!Array.isArray(n)){let o=n.type;if(o){let s=o.toString();return s==="Class"||s.endsWith(".Class")}}return!1}};var Z=class{get ruleName(){return"SubjectKanonakTypeRequired"}validate(e){let n=[];for(let[t,o]of Object.entries(e.body)){if(typeof o!="object"||o===null||Array.isArray(o)||t.includes("."))continue;let s=o,r="type"in s,i=s.type?.toString().trim();if(!r||!i){let a=new g;a.ruleType=this.ruleName,a.severity="Error",a.entityName=t,a.propertyName="type",a.message=`Subject Kanonak '${t}' must have a 'type' property.`,a.suggestion=`Add a type statement like:
|
|
2
2
|
type: Scene
|
|
3
3
|
|
|
4
4
|
Only embedded objects can infer type from their parent property's range. Subject Kanonaks (top-level entities) must explicitly declare their type.`,a.expectedValue="A valid class name (Scene, Character, Story, etc.)",n.push(a)}}return n}};var J=class{get ruleName(){return"EmbeddedKanonakType"}async validateAsync(e,n){let t=[],o=new U(n),s=await this.buildPropertyRangeMap(e,o);for(let[r,i]of Object.entries(e.body))typeof i=="object"&&i!==null&&!Array.isArray(i)&&await this.checkEmbeddedTypes(r,i,void 0,s,o,e,t,0);return t}pickRange(e,n,t){if(e.length===0)return;if(e.length===1)return e[0].range;let o=n.indexOf(".");if(o>0){let s=n.substring(0,o),r=e.find(i=>i.declaringAlias===s);if(r)return r.range}if(t){let s=this.localName(t),r=e.find(i=>this.localName(i.domain)===s);if(r)return r.range}return e[0].range}async checkEmbeddedTypes(e,n,t,o,s,r,i,a){if(a>0){let p=n.type;if(p!=null){let l=await this.validateEmbeddedType(e,String(p),t,s,r);l&&i.push(l)}}let c=n.type!==void 0&&n.type!==null?String(n.type):void 0;for(let[p,l]of Object.entries(n)){let m=this.localName(p),u=o.get(m),d=(u!==void 0?this.pickRange(u,p,c):void 0)??t;if(typeof l=="object"&&l!==null)if(Array.isArray(l))for(let k=0;k<l.length;k++){let h=l[k];typeof h=="object"&&h!==null&&!Array.isArray(h)&&await this.checkEmbeddedTypes(`${e}.${p}[${k}]`,h,d,o,s,r,i,a+1)}else await this.checkEmbeddedTypes(`${e}.${p}`,l,d,o,s,r,i,a+1)}}async validateEmbeddedType(e,n,t,o,s){if(n.length===0||!t)return null;let r=this.localName(n),i=this.localName(t);if(i==="Resource"||i==="Class")return null;let a=e.split(".")[0];if(r===i){let p=new g;return p.ruleType=this.ruleName,p.severity="Warning",p.entityName=a,p.propertyName=e,p.actualValue=n,p.expectedValue=t,p.message=`Embedded object at '${e}' declares 'type: ${n}', which equals the parent property's range '${t}'. The declaration is redundant \u2014 the type is already inferred from the property's range.`,p.suggestion=`Remove the 'type: ${n}' line, or keep it if explicitness is preferred over concision.`,p}if(await o.isSubclassOfAsync(n,t,s)||(r!==n||i!==t)&&await o.isSubclassOfAsync(r,i,s))return null;let c=new g;return c.ruleType=this.ruleName,c.severity="Error",c.entityName=a,c.propertyName=e,c.actualValue=n,c.expectedValue=t,c.message=`Embedded object at '${e}' has 'type: ${n}', which is not a subclass of the parent property's range '${t}'.`,c.suggestion=`Either remove the 'type: ${n}' line (so the type is inferred from the property's range '${t}'), or add 'subClassOf: ${t}' to the '${n}' class definition so the relationship holds.`,c}localName(e){let n=e.lastIndexOf(".");return n<0||n===e.length-1?e:e.substring(n+1)}async buildPropertyRangeMap(e,n){let t=new Map,o=await n.buildEntityIndexAsync(e),s=new Map;for(let[r,i]of o){let a=i.entity.type;if(a==null)continue;let c=String(a),p=this.localName(c);if(!(p==="Property"||p==="DatatypeProperty"||p==="ObjectProperty"||p==="AnnotationProperty"))continue;let m=i.entity.range;if(m==null)continue;let u=String(m);if(u.length===0)continue;let f=i.entity.domain,d=f!=null?String(f):"",k=i.uri.toString(),h=s.get(k),v=r.includes(".");(!h||v&&!h.entityName.includes("."))&&s.set(k,{entityName:r,domain:d,range:u})}for(let r of s.values()){let i=this.localName(r.entityName),a=r.entityName.indexOf("."),c=a>0?r.entityName.substring(0,a):void 0,p=t.get(i)??[];p.push({domain:r.domain,range:r.range,declaringAlias:c}),t.set(i,p)}return t}};import{VersionOperator as Te}from"@kanonak-protocol/types/document/models/enums";var Q=class{ruleName="ImportExistence";async validateAsync(e,n){let t=[];if(!e.metadata?.imports)return t;let o=await n.getAllDocumentsAsync();for(let[s,r]of Object.entries(e.metadata.imports))for(let i of r)if(!await n.getHighestCompatibleVersionAsync(s,i)){let c=await this.determineImportErrorAsync(n,s,i,o),p=new g;p.ruleType=this.ruleName,p.severity="Error",p.message=c.message,p.suggestion=c.suggestion,p.entityName=`Import: ${s}/${i.packageName}`,p.actualValue=i.toString(),p.expectedValue=c.expectedValue,t.push(p)}return t}async determineImportErrorAsync(e,n,t,o){let s=await e.getDocumentsByNamespaceAsync(n,t.packageName);if(s.length===0){let c=o.filter(u=>u.metadata.namespace_?.publisher===n).map(u=>u.metadata.namespace_.package_).filter((u,f,d)=>d.indexOf(u)===f),p=this.findSimilarPackages(t.packageName,c),l=`Import '${n}/${t.package_}' not found - package does not exist`,m=p.length>0?`Did you mean: ${p.slice(0,3).join(", ")}?`:c.length>0?`Available packages in ${n}: ${c.slice(0,5).join(", ")}`:`No packages found for publisher '${n}'. Verify the publisher name is correct.`;return{message:l,suggestion:m,expectedValue:"Existing package"}}let i=s.filter(c=>c.metadata.namespace_?.version).map(c=>c.metadata.namespace_.version.toString()).sort().join(", "),a=this.getAcceptableVersionRange(t);return{message:`Import '${n}/${t.toString()}' version mismatch - no compatible version found`,suggestion:`Available versions: ${i}. Required: ${a}`,expectedValue:a}}getAcceptableVersionRange(e){switch(e.versionOperator){case Te.Exact:return`exactly ${e.version.major}.${e.version.minor}.${e.version.patch}`;case Te.Compatible:return`${e.version.major}.${e.version.minor}.${e.version.patch} to ${e.version.major}.${e.version.minor}.x`;case Te.Major:return e.version.major===0?`0.${e.version.minor}.x`:`${e.version.major}.x.x`;case Te.Any:return`any version >= ${e.version.major}.${e.version.minor}.${e.version.patch}`;default:return e.toString()}}findSimilarPackages(e,n){if(n.length===0)return[];let t=n.filter(r=>r.toLowerCase().includes(e.toLowerCase())||e.toLowerCase().includes(r.toLowerCase()));if(t.length>0)return t.sort((r,i)=>r.length-i.length);let o=n.map(r=>({package:r,distance:this.levenshteinDistance(e.toLowerCase(),r.toLowerCase())})).sort((r,i)=>r.distance-i.distance),s=Math.max(3,Math.floor(e.length*.4));return o.filter(r=>r.distance<=s).map(r=>r.package)}levenshteinDistance(e,n){if(!e||e.length===0)return n?.length??0;if(!n||n.length===0)return e.length;let t=e.length,o=n.length,s=Array(t+1).fill(null).map(()=>Array(o+1).fill(0));for(let r=0;r<=t;r++)s[r][0]=r;for(let r=0;r<=o;r++)s[0][r]=r;for(let r=1;r<=t;r++)for(let i=1;i<=o;i++){let a=e[r-1]===n[i-1]?0:1;s[r][i]=Math.min(Math.min(s[r-1][i]+1,s[r][i-1]+1),s[r-1][i-1]+a)}return s[t][o]}};var ee=class{ruleName="UnresolvedReference";async validateAsync(e,n){let t=[],o=new U(n),s=await o.buildEntityIndexAsync(e),r=new Set;for(let[i,a]of s.entries()){let c=a.entity.type;if(c){let p=c.toString();(p==="ObjectProperty"||p.endsWith(".ObjectProperty"))&&r.add(i)}}for(let[i,a]of Object.entries(e.body)){if(!a||typeof a!="object"||Array.isArray(a))continue;let c=a,p=this.getPropertyValue(c,"type");if(!(!p||p==="Class"||p.endsWith("Property")||p==="AnnotationProperty"))for(let[l,m]of Object.entries(c))l==="type"||l==="label"||l==="comment"||!(r.has(l)||Array.from(r).some(f=>f.endsWith(`.${l}`)))||await this.validateReferenceValue(i,l,m,e,o,t)}return t}async validateReferenceValue(e,n,t,o,s,r){if(t!=null){if(typeof t=="string")await s.resolveEntityAsync(t,o)||r.push(this.createUnresolvedReferenceError(e,n,t));else if(Array.isArray(t))for(let i=0;i<t.length;i++){let a=t[i];typeof a=="string"&&(await s.resolveEntityAsync(a,o)||r.push(this.createUnresolvedReferenceError(e,`${n}[${i}]`,a)))}}}createUnresolvedReferenceError(e,n,t){let o=`The entity '${t}' cannot be found in the current document or any imported namespaces.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as L}from"./chunk-ZYAABYDS.js";import{b as _,c as F,i as C}from"./chunk-XYEY6HUC.js";import{a as U,b as B,c as S,d as b,g as I,h as D,i as T,j as w,k as $,l as j}from"./chunk-T3JR2SV6.js";var k=class extends B{name};var x=class extends U{value;carrier;lexical};var K=class extends I{links=[]};var q=n=>({publisher:"kanonak.org",package_:"core-xsd",name:n}),W=n=>({publisher:"kanonak.org",package_:"core-rdf",name:n}),z=(l=>(l.Integer="integer",l.Decimal="decimal",l.Double="double",l.Float="float",l.Boolean="boolean",l.String="string",l.AnyUri="anyURI",l.LangString="langString",l.DateTime="dateTime",l.Date="date",l.Time="time",l.HexBinary="hexBinary",l.Base64Binary="base64Binary",l))(z||{});function v(n){return`${n.publisher}/${n.package_}/${n.name}`}var J=[["integer","integer"],["long","integer"],["int","integer"],["short","integer"],["byte","integer"],["unsignedLong","integer"],["unsignedInt","integer"],["unsignedShort","integer"],["unsignedByte","integer"],["nonNegativeInteger","integer"],["positiveInteger","integer"],["nonPositiveInteger","integer"],["negativeInteger","integer"],["decimal","decimal"],["double","double"],["float","float"],["boolean","boolean"],["string","string"],["normalizedString","string"],["token","string"],["anyURI","anyURI"],["dateTime","dateTime"],["date","date"],["time","time"],["hexBinary","hexBinary"],["base64Binary","base64Binary"]],Q=new Map(J.map(([n,e])=>[v(q(n)),e])),ee=v(W("langString"));function M(n){let e=v(n);return e===ee?"langString":Q.get(e)}function ne(n){let e=n.trim();if(!/^[+-]?\d+$/.test(e))throw new Error(`canonicalInteger: '${n}' is not a valid xsd:integer lexical`);return BigInt(e.replace(/^\+/,"")).toString()}function te(n){let e=n.trim(),t=/^([+-]?)(\d*)(?:\.(\d*))?$/.exec(e);if(!t||t[2]===""&&(t[3]??"")==="")throw new Error(`canonicalDecimal: '${n}' is not a valid xsd:decimal lexical`);let r=t[1]==="-"?"-":"",a=(t[2]??"").replace(/^0+/,"")||"0",o=(t[3]??"").replace(/0+$/,""),i=o.length>0?`${a}.${o}`:a;return i==="0"?"0":`${r}${i}`}function Y(n,e,t){let r=n.trim();if(r==="NaN")return"NaN";if(r==="INF")return"INF";if(r==="-INF")return"-INF";if(!/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(r))throw new Error(`canonical${t}: '${n}' is not a valid xsd:${t.toLowerCase()} lexical`);let a=e(Number(r));if(!Number.isFinite(a))throw new Error(`canonical${t}: '${n}' is out of the finite range`);return Object.is(a,-0)?"0":String(a)}function re(n){return Y(n,e=>e,"Double")}function ae(n){return Y(n,e=>Math.fround(e),"Float")}function oe(n){let e=n.trim();if(e==="true"||e==="1")return"true";if(e==="false"||e==="0")return"false";throw new Error(`canonicalBoolean: '${n}' is not a valid xsd:boolean lexical`)}function V(n){return n.normalize("NFC")}function ie(n){return n.normalize("NFC")}function se(n){let e=n.trim();if(!/^([0-9A-Fa-f]{2})*$/.test(e))throw new Error(`canonicalHexBinary: '${n}' is not a valid xsd:hexBinary lexical`);return e.toUpperCase()}function ce(n){let e=n.replace(/\s+/g,"");if(!/^[A-Za-z0-9+/]*={0,2}$/.test(e)||e.length%4!==0)throw new Error(`canonicalBase64: '${n}' is not a valid xsd:base64Binary lexical`);return Buffer.from(e,"base64").toString("base64")}var R=n=>n<10?`0${n}`:`${n}`;function P(n){let e=n.startsWith("-"),t=(e?n.slice(1):n).replace(/^0+/,"")||"0",r=t.length<4?t.padStart(4,"0"):t;return`${e?"-":""}${r}`}function Z(n){if(!n)return"";let e=n.replace(/^\./,"").replace(/0+$/,"");return e.length>0?`.${e}`:""}function H(n){return n?n==="Z"||n==="+00:00"||n==="-00:00"?"Z":n:""}function fe(n){return n==="Z"?0:(n[0]==="-"?-1:1)*(Number(n.slice(1,3))*60+Number(n.slice(4,6)))}var pe=/^(-?\d{4,})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(\.\d+)?(Z|[+-]\d{2}:\d{2})?$/,ue=/^(-?\d{4,})-(\d{2})-(\d{2})(Z|[+-]\d{2}:\d{2})?$/,le=/^(\d{2}):(\d{2}):(\d{2})(\.\d+)?(Z|[+-]\d{2}:\d{2})?$/;function me(n){let e=pe.exec(n.trim());if(!e)throw new Error(`canonicalDateTime: '${n}' is not a valid xsd:dateTime lexical`);let[,t,r,a,o,i,s,f,u]=e,g=Z(f);if(!u)return`${P(t)}-${r}-${a}T${o}:${i}:${s}${g}`;let p=new Date(0);p.setUTCFullYear(Number(t),Number(r)-1,Number(a)),p.setUTCHours(Number(o),Number(i),Number(s),0);let c=new Date(p.getTime()-fe(u)*6e4);return`${P(String(c.getUTCFullYear()))}-${R(c.getUTCMonth()+1)}-${R(c.getUTCDate())}T${R(c.getUTCHours())}:${R(c.getUTCMinutes())}:${R(c.getUTCSeconds())}${g}Z`}function ge(n){let e=ue.exec(n.trim());if(!e)throw new Error(`canonicalDate: '${n}' is not a valid xsd:date lexical`);let[,t,r,a,o]=e;return`${P(t)}-${r}-${a}${H(o)}`}function de(n){let e=le.exec(n.trim());if(!e)throw new Error(`canonicalTime: '${n}' is not a valid xsd:time lexical`);let[,t,r,a,o,i]=e,s=Z(o),f=t;return t==="24"&&r==="00"&&a==="00"&&s===""&&(f="00"),`${f}:${r}:${a}${s}${H(i)}`}function Ke(n,e){switch(n){case"integer":return ne(e);case"decimal":return te(e);case"double":return re(e);case"float":return ae(e);case"boolean":return oe(e);case"string":return V(e);case"anyURI":return ie(e);case"langString":return V(e);case"dateTime":return me(e);case"date":return ge(e);case"time":return de(e);case"hexBinary":return se(e);case"base64Binary":return ce(e)}}var ye=/\[\[([^\[\]\n]+)\]\]/g,be=/\[\[/g,X=/```[\s\S]*?```|`[^`\n]*`/g;function ke(n){let e=[];for(let t of n.matchAll(X))e.push([t.index,t.index+t[0].length]);return e}function De(n){if(!n||!n.includes("[["))return[];let e=ke(n),t=o=>e.some(([i,s])=>o>=i&&o<s),r=new Set(A(n).map(o=>o.startOffset)),a=[];for(let o of n.matchAll(be)){let i=o.index;if(t(i)||r.has(i))continue;let s=n.slice(i,i+48).replace(/\s+/g," ").trim();a.push({startOffset:i,snippet:s})}return a}function A(n){if(!n||!n.includes("[["))return[];let e=[];for(let a of n.matchAll(X))e.push([a.index,a.index+a[0].length]);let t=a=>e.some(([o,i])=>a>=o&&a<i),r=[];for(let a of n.matchAll(ye)){let o=a.index;if(t(o))continue;let i=a[1],s=i.indexOf("|"),f=(s===-1?i:i.slice(0,s)).trim();if(f.length===0)continue;let u=s===-1?"":i.slice(s+1).trim(),g={reference:f,startOffset:o,endOffset:o+a[0].length};u.length>0&&(g.displayText=u),r.push(g)}return r}var G=class{constructor(e){}async parseKanonaks(e){let t=[],r=await e.getAllDocumentsAsync(),a=new _(e),o=new F(a);for(let p of r){let c=p.metadata.namespace_?.toString()??"";for(let[l,m]of Object.entries(p.body)){let d=new S,y=this.resolveCanonicalEntity(l,p,c);d.namespace=y.namespace,d.name=y.name,d.statement=[];let h=await this.parseStatements(m,p,a,o,e);d.statement.push(...h),t.push(d)}}let i=new Map,s=new Map,f=[];for(let p of t)if(p instanceof S){let c=`${p.namespace}/${p.name}`,l=i.get(c);if(l){let m=s.get(c);for(let d of p.statement){let y=O(d);m.has(y)||(m.add(y),l.statement.push(d))}}else{let m=new Set,d=[];for(let y of p.statement){let h=O(y);m.has(h)||(m.add(h),d.push(y))}p.statement=d,s.set(c,m),i.set(c,p),f.push(p)}}else f.push(p);let u=new Set;for(let p of f)if(p instanceof S){let c=p.namespace||"",l=c.indexOf("/"),m=l>=0?c.slice(0,l):"",d=l>=0?c.slice(l+1):"",y=d.indexOf("@"),h=y>=0?d.slice(0,y):d;u.add(`${m}/${h}/${p.name}`)}let g=p=>u.has(`${p.publisher}/${p.package_}/${p.name}`);for(let p of f)p instanceof S&&this.canonicalizeStatementBuiltins(p.statement,g);return f}canonicalizeStatementBuiltins(e,t){for(let r of e){let a=r.predicate?.subject;if(C(a,t),r instanceof w)r.object instanceof b&&C(r.object.subject,t);else if(r instanceof $)r.object&&this.canonicalizeStatementBuiltins(r.object.statement,t);else if(r instanceof j)for(let o of r.object??[])o instanceof b?C(o.subject,t):o instanceof k&&this.canonicalizeStatementBuiltins(o.statement,t)}}resolveCanonicalEntity(e,t,r){if(!e.includes(".")||!t.metadata?.imports)return{namespace:r,name:e};let a=e.indexOf("."),o=e.substring(0,a),i=e.substring(a+1);for(let[s,f]of Object.entries(t.metadata.imports))for(let u of f)if((u.alias??u.packageName)===o){let p=u.version;return{namespace:`${s}/${u.packageName}@${p.major}.${p.minor}.${p.patch}`,name:i}}return{namespace:r,name:e}}async parseStatements(e,t,r,a,o){let i=[];if(typeof e!="object"||e===null||Array.isArray(e))return i;for(let[s,f]of Object.entries(e))try{let u=await this.getPropertyMetadata(s,t,r,o,a);if(!u)continue;let g=await this.parsePropertyValue(s,f,u,t,r,a,o);g&&i.push(g)}catch(u){throw new Error(`Failed to parse property '${s}': ${u.message}`,{cause:u})}return i}async getPropertyMetadata(e,t,r,a,o){let i=await r.resolveEntityAsync(e,t);if(!i)return;let s=i.entity,f=s.type?.toString()??"",u=f.includes(".")?f.substring(f.lastIndexOf(".")+1):f;if(!new Set(["Property","DatatypeProperty","ObjectProperty","AnnotationProperty"]).has(u))return;let p=o.getPropertyTypeClassification(f),c=s.range?.toString(),l;if(p==="ObjectProperty")l="ObjectProperty";else if(p==="DatatypeProperty")l="DatatypeProperty";else{let y=c&&c.includes(".")?c.substring(c.lastIndexOf(".")+1):c??"";(c?o.isKnownXsdDatatypeName(c):!1)||y==="Literal"?l="DatatypeProperty":l="ObjectProperty"}let m;if(c){let y=t;if(i.isImported&&i.definedInNamespace){if(typeof a.getDocumentAsync!="function")throw new Error(`Cannot resolve the range of imported property '${e}': the parse repository cannot fetch defining document '${i.definedInNamespace}'. Thread the real repository through to embedded-object parsing \u2014 no stub, no fallback.`);let E=await a.getDocumentAsync(i.definedInNamespace);if(!E)throw new Error(`Cannot resolve the range of imported property '${e}': defining document '${i.definedInNamespace}' was not found in the repository.`);y=E}m=(await r.resolveEntityAsync(c,y))?.uri}return{propertyUri:i.uri.toString(),propertyType:l,range:c,rangeUri:m,isImported:i.isImported,definedInNamespace:i.definedInNamespace}}async parsePropertyValue(e,t,r,a,o,i,s){let f=r.propertyUri;if(t!=null){if(Array.isArray(t))return this.parseListValue(f,t,r,a,o,i,s);if(r.propertyType==="DatatypeProperty")return this.parseDatatypeValue(f,t,r,a,o,i);if(r.propertyType==="ObjectProperty")return this.parseObjectValue(f,t,r,a,o,i,s)}}async parseDatatypeValue(e,t,r,a,o,i){let s;if(typeof t=="string"){if(i.isSubstitutableDatatype(r.rangeUri))return await this.parseSubstitutableValue(e,t,a,o);s=t}else if(typeof t=="number"||typeof t=="boolean")s=String(t);else return;return this.typedScalarStatement(e,s,r)}typedScalarStatement(e,t,r){let a=b.parse(e),o=r.rangeUri?M(r.rangeUri):void 0;if(o==="boolean"){let s=new T;return s.predicate=a,s.object=t==="true"||t==="1",s.carrier=o,s.lexical=t,s}if(o==="integer"||o==="decimal"||o==="double"||o==="float"){let s=new D;return s.predicate=a,s.object=Number(t),s.carrier=o,s.lexical=t,s}let i=I.parse(e,t);return o&&(i.carrier=o,i.lexical=t),i}typedListLiteral(e,t){let r=new x,a=t.rangeUri?M(t.rangeUri):void 0;return a==="boolean"?r.value=e==="true"||e==="1":a==="integer"||a==="decimal"||a==="double"||a==="float"?r.value=Number(e):r.value=e,a&&(r.carrier=a,r.lexical=e),r}async parseSubstitutableValue(e,t,r,a){let o=new K;o.predicate=b.parse(e),o.object=t;for(let i of A(t)){let s=await a.resolveEntityAsync(i.reference,r),f;s&&(f=new b,f.subject=s.uri);let u={reference:i.reference,startOffset:i.startOffset,endOffset:i.endOffset};i.displayText!==void 0&&(u.displayText=i.displayText),f!==void 0&&(u.target=f),o.links.push(u)}return o}async parseObjectValue(e,t,r,a,o,i,s){if(typeof t=="string"){let f=await this.resolveReference(t,a,o);if(!f)return;let u=new w;return u.predicate=b.parse(e),u.object=f,u}if(typeof t=="object"&&!Array.isArray(t)){let f=new k;if(f.statement=await this.parseStatements(t,a,o,i,s),f.statement.length>0){let p=new $;return p.predicate=b.parse(e),p.object=f,p}let u=[];for(let[p,c]of Object.entries(t))if(typeof c=="object"&&c!==null&&!Array.isArray(c)){let l=new k;l.name=p,l.statement=await this.parseStatements(c,a,o,i,s),u.push(l)}else if(typeof c=="string"){let l=await this.resolveReference(c,a,o);l&&u.push(l)}if(u.length>0){let p=new j;return p.predicate=b.parse(e),p.object=u,p}let g=new $;return g.predicate=b.parse(e),g.object=f,g}}async parseListValue(e,t,r,a,o,i,s){let f=[],u=r.propertyType==="DatatypeProperty",g=r.rangeUri?.publisher==="kanonak.org"&&r.rangeUri?.package_==="core-rdf"&&r.rangeUri?.name==="List"||!r.rangeUri&&(r.range?.includes(".")?r.range.substring(r.range.lastIndexOf(".")+1):r.range)==="List";for(let c of t){let l=typeof c=="string"||typeof c=="number"||typeof c=="boolean";if(u&&l){let m=typeof c=="string"?c:String(c);f.push(this.typedListLiteral(m,r));continue}if(g&&l){if(typeof c=="string"){let m=await o.resolveEntityAsync(c,a);if(m){let d=new b;d.subject=m.uri,f.push(d)}else{let d=new x;d.value=c,f.push(d)}}else{let m=new x;m.value=c,f.push(m)}continue}if(typeof c=="string"){let m=await this.resolveReference(c,a,o);m&&f.push(m)}else if(typeof c=="object"&&c!==null&&!Array.isArray(c)){let m=new k;m.statement=await this.parseStatements(c,a,o,i,s),f.push(m)}}let p=new j;return p.predicate=b.parse(e),p.object=f,p}async resolveReference(e,t,r){let a=await r.resolveEntityAsync(e,t);if(a){let i=new b;return i.subject=a.uri,i}let o=t.metadata?.namespace_;if(o){let{KanonakUri:i}=await import("./KanonakUri-4VJGV3FN.js"),s=o.version??{major:0,minor:0,patch:0,toString:()=>"0.0.0",equals:()=>!1,getHashCode:()=>0,compareTo:()=>0};if(e.includes(".")){let u=e.indexOf("."),g=e.substring(0,u),p=e.substring(u+1);if(t.metadata?.imports){for(let[c,l]of Object.entries(t.metadata.imports))for(let m of l)if((m.alias??m.packageName)===g){let y=new b;return y.subject=new i(c,m.packageName,p,m.version),y}}}let f=new b;return f.subject=new i(o.publisher,o.package_,e,s),f}return null}async saveKanonaks(e,t){let r=new Map;for(let a of e)a instanceof S&&a.namespace&&(r.has(a.namespace)||r.set(a.namespace,[]),r.get(a.namespace).push(a));for(let[a,o]of r){let i=await this.convertKanonaksToDocument(a,o),s=`${a.split("@")[0]}.yml`;await t.saveDocumentAsync(i,s)}}async serializeToYaml(e,t){let r=e.filter(i=>i instanceof S&&i.namespace===t);if(r.length===0)throw new Error(`No kanonaks found with namespace '${t}'`);let a=await this.convertKanonaksToDocument(t,r);return new L().save(a)}async convertKanonaksToDocument(e,t){let a={metadata:{namespace_:e,get allImports(){if(!this.imports)return[];let i=[];for(let s of Object.values(this.imports))i.push(...s);return i}},body:{}},o=new Map;for(let i of t){let s={};for(let f of i.statement){let[u,g]=this.convertStatementToProperty(f);u&&g!==null&&g!==void 0&&(s[u]=g),this.collectImportsFromStatement(f,e,o)}a.body[i.name]=s}return a}convertStatementToProperty(e){if(e instanceof I)return[e.predicate.subject.name,e.object];if(e instanceof D)return[e.predicate.subject.name,e.object];if(e instanceof T)return[e.predicate.subject.name,e.object];if(e instanceof w)return[e.predicate.subject.name,e.object.subject.name];if(e instanceof j){let t=this.convertKanonakListToValue(e.object);return[e.predicate.subject.name,t]}else if(e instanceof $){let t=this.convertEmbeddedKanonakToValue(e.object);return[e.predicate.subject.name,t]}return[null,null]}convertKanonakListToValue(e){let t=[];for(let r of e)r instanceof b?t.push(r.subject.name):r instanceof k&&t.push(this.convertEmbeddedKanonakToValue(r));return t}convertEmbeddedKanonakToValue(e){let t={};for(let r of e.statement){let[a,o]=this.convertStatementToProperty(r);a&&o!==null&&o!==void 0&&(t[a]=o)}return t}collectImportsFromStatement(e,t,r){}};function O(n){let e=n.predicate?.subject;return(e?`${e.publisher}/${e.package_}/${e.name}`:"?")+"="+he(n)}function he(n){return n instanceof K?"m:"+String(n.object):n instanceof I?"s:"+String(n.object):n instanceof D?"n:"+String(n.object):n instanceof T?"b:"+String(n.object):n instanceof w?"r:"+N(n.object):n instanceof $?"e:"+N(n.object):n instanceof j?"l:["+(n.object??[]).map(N).join("|")+"]":"x"}function N(n){if(!n)return"";if(n instanceof b){let e=n.subject;return"R("+(e?`${e.publisher}/${e.package_}/${e.name}`:"")+")"}return n instanceof k?"E("+(n.statement??[]).map(O).join(";")+")":n instanceof x?"L("+String(n.value)+")":"N"}export{k as a,x as b,K as c,z as d,M as e,Ke as f,De as g,A as h,G as i};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as D}from"./chunk-
|
|
1
|
+
import{a as D}from"./chunk-CEFXZIHB.js";import{c as j,d as m,g as R,j as p,k as K,l as k}from"./chunk-T3JR2SV6.js";import{c as b,g as u}from"./chunk-2ACBWC7K.js";function F(a,e,n,t){let i=g(a);if(i.length>0){let s=v(i,e,n);return s?{transformation:s.transformation,source:"instance"}:void 0}let r=new Set,o=O(a);for(;o.length>0;){let s=o.shift(),f=_(s.subject);if(r.has(f))continue;r.add(f);let l=S(t,s.subject);if(l.length===0)continue;let U=l.flatMap(g),h=v(U,e,n);if(h)return{transformation:h.transformation,source:{publisher:s.subject.publisher,package_:s.subject.package_,name:s.subject.name}};for(let T of l)for(let P of $(T))o.push(P)}let c={publisher:"kanonak.org",package_:"core-rdf",name:"Resource"};if(!r.has(_(c))){let s=S(t,c).flatMap(g),f=v(s,e,n);if(f)return{transformation:f.transformation,source:c}}}function g(a){let e=[];for(let n of a.statement)if(n instanceof k&&d(n,"kanonak.org","derivation","derivations"))for(let t of n.object??[]){if(!(t instanceof D))continue;let i=x(t);i&&e.push(i)}return e}function v(a,e,n){let t=a.filter(o=>E(o.format,e)&&E(o.variant,n));if(t.length<=1)return t[0];let i=t[0].transformation,r=t[0];for(let o of t){let c=o.transformation;if(c.publisher!==i.publisher||c.package_!==i.package_||c.name!==i.name)continue;let s=u(r.transformation.version),f=u(c.version);s&&f&&b(f,s)>0&&(r=o)}return r}function x(a){let e,n,t;for(let i of a.statement)i instanceof p?d(i,"kanonak.org","derivation","format")?e=y(i):d(i,"kanonak.org","derivation","variant")&&(n=y(i)):i instanceof K&&d(i,"kanonak.org","derivation","transformation")&&(t=C(i.object));if(!(!e||!t))return n||(n={publisher:"kanonak.org",package_:"derivation",name:"default"}),{format:e,variant:n,transformation:t}}function C(a){let e,n,t,i;for(let r of a.statement){if(!(r instanceof R))continue;let o=r.predicate?.subject?.name;o==="publisher"?e=r.object:o==="package"?n=r.object:o==="version"?t=r.object:o==="name"&&(i=r.object)}if(!(!e||!n||!t||!i))return{publisher:e,package_:n,version:t,name:i}}function O(a){let e=[];for(let n of a.statement)n instanceof p&&n.predicate?.subject?.name==="type"&&n.object instanceof m&&e.push(n.object);return e}function $(a){let e=[];for(let n of a.statement)if(n instanceof p){if(n.predicate?.subject?.name!=="subClassOf")continue;n.object instanceof m&&e.push(n.object)}else if(n instanceof k){if(n.predicate?.subject?.name!=="subClassOf")continue;for(let t of n.object??[])t instanceof m&&e.push(t)}return e}function S(a,e){let n=[];for(let t of a){if(!(t instanceof j)||t.name!==e.name)continue;(t.namespace||"").startsWith(`${e.publisher}/${e.package_}@`)&&n.push(t)}return n.sort((t,i)=>{let r=u((t.namespace||"").split("@")[1]??""),o=u((i.namespace||"").split("@")[1]??"");return!r||!o?0:b(o,r)}),n}function d(a,e,n,t){let i=a.predicate?.subject;return i?i.publisher===e&&i.package_===n&&i.name===t:!1}function y(a){let e=a.object.subject;return{publisher:e.publisher,package_:e.package_,name:e.name}}function E(a,e){return a.publisher===e.publisher&&a.package_===e.package_&&a.name===e.name}function _(a){return`${a.publisher}/${a.package_}/${a.name}`}export{F as a};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as Fn}from"./chunk-4NO7MHS7.js";import{a as Mn}from"./chunk-PEJALHXK.js";import{d as u}from"./chunk-SHDHMKMJ.js";import{a as x,c as xe,
|
|
1
|
+
import{a as Fn}from"./chunk-4NO7MHS7.js";import{a as Mn}from"./chunk-PEJALHXK.js";import{d as u}from"./chunk-SHDHMKMJ.js";import{a as x,c as xe,i as An}from"./chunk-CEFXZIHB.js";import{a as Vn}from"./chunk-ZYAABYDS.js";import{a as pn,b as ue,c as xn,d as w,f as Pe,g as ke,j as gn,k as qe,m as Pn,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 T,k as H,l as V}from"./chunk-T3JR2SV6.js";import{a as Tn}from"./chunk-FUUTGGJS.js";import{c as en,g as $e}from"./chunk-2ACBWC7K.js";var Ve="kanonak.org",zn="look",We="core-rdf",Kt={publisher:Ve,package_:zn,name:"displayLabel"},Rt={publisher:Ve,package_:zn,name:"displaySummary"},Lt={publisher:Ve,package_:We,name:"type"},Ot={publisher:Ve,package_:We,name:"subClassOf"},Ut={publisher:Ve,package_:We,name:"label"},It={publisher:Ve,package_:We,name:"comment"},Dn=new Tn(Ve,We,"Resource");function D(r,e){let n=Bn(r,e,Kt)??Ut,t=Bn(r,e,Rt)??It,a=gn(e,n)??e.name,s=gn(e,t);return{label:a,summary:s}}function Bn(r,e,n){let t=qe(e,n);if(t)return t;let a=new Set,s=Hn(e,Lt);for(;s.length>0;){let o=s.shift(),i=pn(o);if(a.has(i))continue;a.add(i);let c=Pe(r,o);if(!c)continue;let l=qe(c,n);if(l)return l;s.push(...Hn(c,Ot))}if(!a.has(pn(Dn))){let o=Pe(r,Dn);if(o){let i=qe(o,n);if(i)return i}}}function Hn(r,e){let n=qe(r,e);if(n)return[n];let t=[];for(let a of Pn(r,e))a instanceof E&&t.push(a.subject);return t}function Ye(r,e={}){let n=r.replace(/\r\n/g,`
|
|
2
2
|
`).split(`
|
|
3
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
4
|
`),g=l&&e.highlight?e.highlight(l,f):De(f),m=l?` class="language-${qn(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=Ne(i[2].trim());t.push(`<h${l}>${d}</h${l}>`),a++;continue}if(s.includes("|")&&a+1<n.length&&Gn(n[a+1])){let l=mn(s),d=Ct(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(Ft(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>${Ne(d.join(" ").trim())}</li>`)}t.push(`<ul>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{h as V}from"./chunk-CEFXZIHB.js";import{a as E}from"./chunk-ZYAABYDS.js";var L=class{propertyUri;propertyType;range;rangeUri;isImported;definedInNamespace};import{parseDocument as O,LineCounter as R,isMap as h,isPair as f,isScalar as g,isSeq as I}from"yaml";var K=class i{entities=new Map;entityBlocks=new Map;properties=new Map;propertyValues=new Map;valueListItems=new Map;importPackages=new Map;nestedKeys=new Map;nestedValues=new Map;static fromContent(e){let t=new i,n=new R,r=O(e,{lineCounter:n});if(r.errors.length>0||!h(r.contents))return t;N(r.contents,[],n,t);for(let o of r.contents.items){if(!f(o)||!g(o.key))continue;let a=String(o.key.value),u=o.key.range;if(!u)continue;t.entities.set(a,d(u,n));let s=o.value,c=s&&typeof s=="object"&&"range"in s?s.range:void 0;if(c?t.entityBlocks.set(a,d([u[0],u[1],c[2]],n)):t.entityBlocks.set(a,d(u,n)),h(o.value)){let k=new Map,m=new Map,l=new Map;for(let P of o.value.items){if(!f(P)||!g(P.key))continue;let b=String(P.key.value),p=P.key.range;p&&k.set(b,d(p,n));let S=P.value;if(S&&typeof S=="object"&&"range"in S&&Array.isArray(S.range)){let v=S.range;m.set(b,d(v,n))}if(I(S)){let v=[];for(let M of S.items)M&&typeof M=="object"&&"range"in M&&Array.isArray(M.range)&&v.push(d(M.range,n));v.length>0&&l.set(b,v)}}k.size>0&&t.properties.set(a,k),m.size>0&&t.propertyValues.set(a,m),l.size>0&&t.valueListItems.set(a,l);let y=j(o.value,n);y.length>0&&t.importPackages.set(a,y)}}return t}getEntityPosition(e){return this.entities.get(e)}getEntityBlockPosition(e){return this.entityBlocks.get(e)}findEntityAtPosition(e,t){for(let[n,r]of this.entityBlocks)if(w(r,e,t))return n}findPropertyAtPosition(e,t){let n=this.findEntityAtPosition(e,t);if(!n)return;let r=this.properties.get(n),o=this.propertyValues.get(n);if(!r&&!o)return{entityName:n};let a,u;if(o)for(let[s,c]of o)w(c,e,t)&&(!u||C(c,u))&&(a=s,u=c);if(r)for(let[s,c]of r)w(c,e,t)&&(!u||C(c,u))&&(a=s,u=c);return a?{entityName:n,propertyName:a}:{entityName:n}}getPropertyPosition(e,t){return this.properties.get(e)?.get(t)}getPropertyValuePosition(e,t){return this.propertyValues.get(e)?.get(t)}getImportPackages(e){return this.importPackages.get(e)??[]}getAllImportPackages(){let e=[];for(let[t,n]of this.importPackages)for(let r of n)e.push({entityName:t,entry:r});return e}findPropertySourceName(e,t){let n=this.properties.get(e);if(n){if(n.has(t))return t;for(let r of n.keys()){let o=r.lastIndexOf(".");if((o===-1?r:r.substring(o+1))===t)return r}}}getListItemPosition(e,t,n){let r=this.valueListItems.get(e)?.get(t);if(!(!r||n<0||n>=r.length))return r[n]}getNodeKeyPosition(e){return this.nestedKeys.get(JSON.stringify(e))}getNodeValuePosition(e){return this.nestedValues.get(JSON.stringify(e))}setNestedKeyPosition(e,t){this.nestedKeys.set(e,t)}setNestedValuePosition(e,t){this.nestedValues.set(e,t)}getMostSpecificPosition(e,t,n){if(e){if(t!==void 0){if(n!==void 0){let a=this.getListItemPosition(e,t,n);if(a)return a}let r=this.getPropertyValuePosition(e,t);if(r)return r;let o=this.getPropertyPosition(e,t);if(o)return o}return this.getEntityPosition(e)}}};function j(i,e){let t=[];if(!h(i))return t;let n=i.items.find(r=>f(r)&&g(r.key)&&String(r.key.value)==="imports");if(!n||!f(n)||!I(n.value))return t;for(let r of n.value.items){if(!h(r))continue;let o=r.items.find(s=>f(s)&&g(s.key)&&String(s.key.value)==="publisher");if(!o||!f(o)||!g(o.value))continue;let a=String(o.value.value),u=r.items.find(s=>f(s)&&g(s.key)&&String(s.key.value)==="packages");if(!(!u||!f(u)||!I(u.value)))for(let s of u.value.items){if(!h(s))continue;let c=s.items.find(p=>f(p)&&g(p.key)&&String(p.key.value)==="package");if(!c||!f(c)||!g(c.value)||!c.value.range)continue;let k=String(c.value.value),m=s.items.find(p=>f(p)&&g(p.key)&&String(p.key.value)==="version"),l=m&&f(m)&&g(m.value)?String(m.value.value):"",y=s.items.find(p=>f(p)&&g(p.key)&&String(p.key.value)==="alias"),P=y&&f(y)&&g(y.value)?String(y.value.value):void 0,b=P!==void 0?{publisher:a,package_:k,version:l,alias:P,position:d(c.value.range,e)}:{publisher:a,package_:k,version:l,position:d(c.value.range,e)};t.push(b)}}return t}function w(i,e,t){return!(e<i.line||e>i.endLine||e===i.line&&t<i.column||e===i.endLine&&t>i.endColumn)}function C(i,e){let t=i.endLine-i.line,n=e.endLine-e.line;if(t!==n)return t<n;let r=i.endLine===i.line?i.endColumn-i.column:Number.MAX_SAFE_INTEGER,o=e.endLine===e.line?e.endColumn-e.column:Number.MAX_SAFE_INTEGER;return r<o}function N(i,e,t,n){if(h(i)){for(let r of i.items){if(!f(r)||!g(r.key))continue;let o=String(r.key.value),a=[...e,o],u=JSON.stringify(a);r.key.range&&n.setNestedKeyPosition(u,d(r.key.range,t));let s=r.value,c=D(s);c&&n.setNestedValuePosition(u,d(c,t)),N(s,a,t,n)}return}if(I(i)){for(let r=0;r<i.items.length;r++){let o=i.items[r],a=[...e,r],u=JSON.stringify(a),s=D(o);s&&n.setNestedValuePosition(u,d(s,t)),N(o,a,t,n)}return}}function D(i){if(!i||typeof i!="object"||!("range"in i))return;let e=i.range;return Array.isArray(e)&&e.length>=3?e:void 0}function d(i,e){let t=e.linePos(i[0]),n=e.linePos(i[2]);return{line:t.line-1,column:t.col-1,endLine:n.line-1,endColumn:n.col-1}}function x(i,e){let n=(e??new E).parse(i),r=K.fromContent(i);return{document:n,positions:r}}function W(i,e,t,n,r){if(e<n.line||e>n.endLine||e===n.line&&t<n.column||e===n.endLine&&t>=n.endColumn)return;let o=A(r,n.line,n.column),a=A(r,n.endLine,n.endColumn);if(o<0||a<0)return;let u=r.substring(o,a),s=V(u);if(s.length!==i.links.length)return;let c=e-n.line,k=e===n.line?t-n.column:t,m=A(u,c,k);if(!(m<0))for(let l=0;l<s.length;l++){let y=s[l];if(m>=y.startOffset&&m<y.endOffset)return i.links[l]}}function A(i,e,t){let n=0,r=0;for(let o=0;o<i.length;o++){if(n===e)return Math.min(r+t,i.length);i[o]===`
|
|
2
2
|
`&&(n++,r=o+1)}return n===e?Math.min(r+t,i.length):-1}export{L as a,K as b,x as c,W as d};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{I as W,J as X}from"./chunk-5DXJ5B5T.js";import{b as B,c as V,i as w}from"./chunk-CEFXZIHB.js";import{a as b,d as K,e as q,f as z}from"./chunk-NC3FSY3R.js";import{a as D,f as E,h as F,j as N,k as Y,m as v}from"./chunk-PBNVHBS3.js";import{c as G,d as x}from"./chunk-T3JR2SV6.js";import{a as L}from"./chunk-FUUTGGJS.js";import{d as U}from"./chunk-2ACBWC7K.js";var Q=(t=>(t.Class="Class",t.DatatypeProperty="DatatypeProperty",t.ObjectProperty="ObjectProperty",t.AnnotationProperty="AnnotationProperty",t.Instance="Instance",t.Datatype="Datatype",t.Unknown="Unknown",t))(Q||{}),Z=(p=>(p.InstanceOf="instanceOf",p.SubClassOf="subClassOf",p.Domain="domain",p.Range="range",p.ObjectRelationship="objectRelationship",p.SubPropertyOf="subPropertyOf",p.PropertyValue="propertyValue",p.EmbeddedLink="embeddedLink",p))(Z||{}),I=class{static async buildFromRepository(e){let a=await new w().parseKanonaks(e),o=await e.getAllDocumentsAsync(),s=[],i=[],t=new Set,p=new Set,g=new Map;for(let u of a){let l=u;l.name&&(b.isClassType(l)&&t.add(l.name),(b.isObjectPropertyType(l)||b.isGenericPropertyType(l))&&p.add(l.name))}for(let u of o)for(let[l,f]of Object.entries(u.body))p.has(l)&&f?.range&&typeof f.range=="string"&&g.set(l,f.range);let y=new Map;for(let u of a){let l=u;l.name&&y.set(l.name,l)}for(let u of o){let l=u.metadata.namespace_,f=l?`${l.publisher}/${l.package_}`:"",c=l?.version?`${l.version.major}.${l.version.minor}.${l.version.patch}`:"",d=H(u);for(let[k,m]of Object.entries(u.body)){if(!m||typeof m!="object")continue;let P=y.get(k),h="Unknown";if(P){let T=P;b.isClassType(T)?h="Class":b.isObjectPropertyType(T)?h="ObjectProperty":b.isDatatypePropertyType(T)?h="DatatypeProperty":b.isAnnotationPropertyType(T)?h="AnnotationProperty":b.isDatatypeType(T)?h="Datatype":b.isGenericPropertyType(T)?h="ObjectProperty":b.isInstanceOfKnownClass(T,t)&&(h="Instance")}let j=f&&c?`${f}/${k}@${c}`:k,A={};for(let[T,$]of Object.entries(m))T!=="type"&&(typeof $!="object"||$===null)&&(A[T]=$);s.push({id:j,label:m.label??k,type:h,namespace:f,properties:A}),J(j,m,h,t,p,i,f,c,d),_(j,m,p,g,s,i,f,c,d),ue(j,P,i)}}return{nodes:s,edges:i}}static buildFromDocument(e){let r=[],a=[],o=e.metadata.namespace_,s=o?.version?`${o.version.major}.${o.version.minor}.${o.version.patch}`:"",i=o?`${o.publisher}/${o.package_}`:"",t=new Set,p=new Set,g=new Map,y=H(e);for(let[f,c]of Object.entries(e.body)){let d=c?.type;d&&(pe(d,y)&&t.add(f),ce(d,y)&&(p.add(f),c.range&&typeof c.range=="string"&&g.set(f,c.range)))}for(let[f,c]of Object.entries(e.body)){if(!c||typeof c!="object")continue;let d=c.type,k=le(d,f,t,y),m=i&&s?`${i}/${f}@${s}`:f,P={};for(let[h,j]of Object.entries(c))h!=="type"&&(typeof j!="object"||j===null)&&(P[h]=j);r.push({id:m,label:c.label??f,type:k,namespace:i,properties:P}),J(m,c,k,t,p,a,i,s,y),_(m,c,p,g,r,a,i,s,y)}let u=new Set(r.map(f=>f.id)),l=a.filter(f=>u.has(f.source)&&u.has(f.target));return{nodes:r,edges:l}}};function H(n,e){let r=new Map;if(n.metadata?.imports)for(let[a,o]of Object.entries(n.metadata.imports))for(let s of o){let i=s.alias??s.packageName,t=s.version,p=`${t.major}.${t.minor}.${t.patch}`;r.set(i,{publisher:a,package_:s.packageName,version:p})}return r}var ee={"kanonak.org/core-rdf/Class":"Class","kanonak.org/core-owl/Class":"Class","kanonak.org/core-rdfs/Class":"Class","kanonak.org/core-owl/ObjectProperty":"ObjectProperty","kanonak.org/core-owl/DatatypeProperty":"DatatypeProperty","kanonak.org/core-owl/AnnotationProperty":"AnnotationProperty","kanonak.org/core-rdf/Property":"ObjectProperty","kanonak.org/core-rdfs/Datatype":"Datatype"},ie=new Set(["kanonak.org/core-owl/ObjectProperty","kanonak.org/core-owl/DatatypeProperty","kanonak.org/core-owl/AnnotationProperty","kanonak.org/core-rdf/Property"]);function M(n,e){if(n.includes(".")){let r=n.indexOf("."),a=n.substring(0,r),o=n.substring(r+1),s=e.get(a);if(s)return`${s.publisher}/${s.package_}/${o}`}return null}function pe(n,e){let r=M(n,e);return r?ee[r]==="Class":!1}function ce(n,e){let r=M(n,e);return r?ie.has(r):!1}function le(n,e,r,a){if(!n||n==="Package")return"Unknown";let o=M(n,a);if(o){let i=ee[o];if(i)return i;let t=o.split("/").pop()?.split("@")[0]??"";return r.has(t)?"Instance":"Unknown"}let s=n.split(".").pop()??n;return r.has(s)?"Instance":"Unknown"}var ne=new Set(["type","label","comment","version","publisher","imports","license","match","alias","package"]);function J(n,e,r,a,o,s,i,t,p){let g=e.type,y=e.subClassOf;if(y){let c=Array.isArray(y)?y:[y];for(let d of c)typeof d=="string"&&s.push({source:n,target:O(d,i,t,p),type:"subClassOf",label:"subClassOf"})}let u=e.subPropertyOf;if(u){let c=Array.isArray(u)?u:[u];for(let d of c)typeof d=="string"&&s.push({source:n,target:O(d,i,t,p),type:"subPropertyOf",label:"subPropertyOf"})}if(r==="Instance"&&g){let c=g.split(".").pop()??g;s.push({source:n,target:O(c,i,t,p),type:"instanceOf",label:"type"})}if(r==="Instance")for(let[c,d]of Object.entries(e)){if(ne.has(c)||!o.has(c))continue;let k=Array.isArray(d)?d:[d];for(let m of k)typeof m=="string"&&fe(m)&&s.push({source:n,target:O(m,i,t,p),type:"propertyValue",label:c,propertyId:O(c,i,t,p)})}let l=r==="ObjectProperty"||r==="DatatypeProperty",f=e.domain&&e.range;if((l||f)&&e.domain&&e.range){let c=typeof e.domain=="string"?e.domain:null,d=typeof e.range=="string"?e.range:null;c&&d&&s.push({source:O(c,i,t,p),target:O(d,i,t,p),type:"objectRelationship",label:e.label??n.split("/").pop()??"",propertyId:n})}}function _(n,e,r,a,o,s,i,t,p){for(let[g,y]of Object.entries(e)){if(ne.has(g)||typeof y!="object"||y===null||Array.isArray(y))continue;let u=y,l=`${n}/${g}`,f=a.get(g),c=f?f.split(".").pop()??f:"Unknown",d={};for(let[m,P]of Object.entries(u))(typeof P!="object"||P===null)&&(d[m]=P);o.push({id:l,label:`${c} (embedded)`,type:"Instance",namespace:i,properties:d});let k=i&&t?`${i}/${g}@${t}`:g;s.push({source:n,target:l,type:"propertyValue",label:g,propertyId:r.has(g)?k:void 0}),f&&s.push({source:l,target:O(c,i,t,p),type:"instanceOf",label:"type (inferred)"}),_(l,u,r,a,o,s,i,t,p)}}function ue(n,e,r){let a=e?.statement;if(Array.isArray(a))for(let o of a){if(!(o instanceof V))continue;let s=o.predicate?.subject?.name??"";for(let i of o.links){let t=i.target?.subject;if(!t)continue;let p=t.version,g=p&&typeof p.major=="number"?`@${p.major}.${p.minor}.${p.patch}`:"";r.push({source:n,target:`${t.publisher}/${t.package_}/${t.name}${g}`,type:"embeddedLink",label:s})}}}function fe(n){return!(!n||n.includes(" ")||n.includes(`
|
|
2
|
+
`)||n.startsWith("http://")||n.startsWith("https://")||/^\d{4}-\d{2}/.test(n)||/^\d+(\.\d+)?$/.test(n))}function O(n,e,r,a){if(n.includes("@")&&n.includes("/"))return n;if(n.includes(".")){let o=n.indexOf("."),s=n.substring(0,o),i=n.substring(o+1);if(a){let t=a.get(s);if(t)return`${t.publisher}/${t.package_}/${i}@${t.version}`}return e&&r?`${e}/${i}@${r}`:i}return e&&r?`${e}/${n}@${r}`:n}function de(n){if(!n.expiresAt)return!1;let e=new Date(n.expiresAt),r=300*1e3;return e.getTime()<=Date.now()+r}function Re(n){return!!n.accessToken&&!de(n)}function Se(n){let e=n.replace(/^https?:\/\//,"").replace(/^git:\/\//,"").replace(/\/+$/,"").trim();if(!e)throw new Error("Publisher host cannot be empty");return e}var C="kanonak.org",S="core-rdf",re="core-xsd",te={publisher:C,package_:S,name:"subClassOf"},oe={publisher:C,package_:S,name:"label"},ye={publisher:C,package_:S,name:"comment"},se={publisher:C,package_:"core-owl",name:"oneOf"},ae=n=>n;function ge(n){let e=Y(n,te);if(e)return[e];let r=[];for(let a of v(n,te))a instanceof x&&r.push(a.subject);return r}function me(n,e,r){if(e.publisher===C&&e.package_===S&&e.name==="Literal")return{kind:"datatype",uri:e};let o=E(n,e);if(o){let s=ae(o);if(b.isDatatypeType(s))return{kind:"datatype",uri:e};if(b.isClassType(s))return{kind:"class",uri:K(o)??e,localName:o.name}}return e.publisher===C&&e.package_===re?{kind:"datatype",uri:e}:r==="datatype"?{kind:"datatype",uri:e}:{kind:"class",uri:e,localName:e.name}}function be(n,e,r){if(!e.range)throw new Error(`Property ${e.uri.publisher}/${e.uri.package_}/${e.uri.name} has no rdfs.range; every property must declare a range. Validate the ontology before introspecting it.`);let a=me(n,e.range,e.kind),o=e.kind==="object"?"object":e.kind==="datatype"?"datatype":a.kind==="class"?"object":"datatype";return{uri:e.uri,localName:e.uri.name,kind:o,range:a,...e.label!==void 0?{label:e.label}:{},...e.comment!==void 0?{comment:e.comment}:{},...r??{}}}var R=n=>new L(C,re,n);function ke(n){return typeof n=="boolean"?R("boolean"):typeof n=="number"?Number.isInteger(n)?R("integer"):R("decimal"):R("string")}function he(n,e){let r=[];for(let a of v(e,se))if(a instanceof x){let o=E(n,a.subject),s=(o?K(o):void 0)??a.subject,i=o?N(o,oe):void 0;r.push({kind:"individual",uri:s,localName:s.name,...i!==void 0?{label:i}:{}})}else a instanceof B&&r.push({kind:"literal",value:a.value,datatype:ke(a.value)});return r}function Pe(n,e,r,a){let o=q(n,e),s=D(e);return z(n,e).filter(t=>r?!0:t.domains.some(p=>D(p)===s)).map(t=>be(n,t,X(a,o,t.uri)))}async function Te(n,e,r){let a=n.metadata?.namespace_;if(!a)throw new Error("buildOntologyModel: document has no namespace (publisher/package/version).");let o=r?.includeInherited??!1,s=await new w().parseKanonaks(e),i=W(s),t=[],p=[],g=new Set;for(let y of s){if(!(y instanceof G)||!b.isClassType(ae(y)))continue;let u=K(y);if(!u||u.publisher!==a.publisher||u.package_!==a.package_||u.version&&a.version&&!U(u.version,a.version))continue;let l=D(u);if(g.has(l))continue;g.add(l);let f=ge(y).map(k=>({uri:k,localName:k.name})),c=N(y,oe),d=N(y,ye);t.push({uri:u,localName:u.name,superClasses:f,properties:Pe(s,u,o,i),...c!==void 0?{label:c}:{},...d!==void 0?{comment:d}:{}}),F(y,se)&&p.push({uri:u,localName:u.name,members:he(s,y),...c!==void 0?{label:c}:{},...d!==void 0?{comment:d}:{}})}return{classes:t,enums:p}}export{Q as a,Z as b,I as c,de as d,Re as e,Se as f,Te as g};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as j,b as x,
|
|
1
|
+
import{a as j,b as x,i as _}from"./chunk-CEFXZIHB.js";import{d as l,e as u,f as b,g as $,h as s,j as h}from"./chunk-XYEY6HUC.js";import{c as S,d as O,g as I,h as T,i as g,j as v,k as L,l as q}from"./chunk-T3JR2SV6.js";var d=class{all=new Set;byPIdx=new Map;bySPIdx=new Map;byPOIdx=new Map;tripleList=[];add(e){let t=b(e);return this.all.has(t)?!1:(this.all.add(t),this.tripleList.push(e),P(this.byPIdx,e.p,e),P(this.bySPIdx,`${e.s}|${e.p}`,e),e.o.kind==="uri"&&P(this.byPOIdx,`${e.p}|${e.o.key}`,e),!0)}has(e){return this.all.has(b(e))}size(){return this.tripleList.length}snapshot(){return this.tripleList.slice()}byPredicate(e){let t=this.byPIdx.get(e);return t?t.slice():[]}bySubjectPredicate(e,t){let r=this.bySPIdx.get(`${e}|${t}`);return r?r.slice():[]}byPredicateObject(e,t){let r=this.byPOIdx.get(`${e}|${t}`);return r?r.slice():[]}subjectsWithPredicateObject(e,t){let r=this.byPOIdx.get(`${e}|${t}`);if(!r)return[];let n=new Set;for(let a of r)n.add(a.s);return Array.from(n)}uriObjectsOf(e,t){let r=this.bySPIdx.get(`${e}|${t}`);if(!r)return[];let n=new Set;for(let a of r)a.o.kind==="uri"&&n.add(a.o.key);return Array.from(n)}hasUri(e,t,r){return this.all.has(`${e}|${t}|u:${r}`)}hasTriple(e,t,r){return this.all.has(`${e}|${t}|${$(r)}`)}};function P(o,e,t){let r=o.get(e);r?r.push(t):o.set(e,[t])}var w={name:"rdfs2",apply(o,e){let t=!1;for(let r of o.byPredicate(e.domain)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;for(let i of o.byPredicate(n))o.add(s(i.s,e.type,a))&&(t=!0)}return t}},C={name:"rdfs3",apply(o,e){let t=!1;for(let r of o.byPredicate(e.range)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;for(let i of o.byPredicate(n))i.o.kind==="uri"&&o.add(s(i.o.key,e.type,a))&&(t=!0)}return t}},A={name:"rdfs5",apply(o,e){let t=!1;for(let r of o.byPredicate(e.subPropertyOf)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;for(let i of o.bySubjectPredicate(a,e.subPropertyOf))i.o.kind==="uri"&&o.add(s(n,e.subPropertyOf,i.o.key))&&(t=!0)}return t}},V={name:"rdfs7",apply(o,e){let t=!1;for(let r of o.byPredicate(e.subPropertyOf)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;if(n!==a)for(let i of o.byPredicate(n)){let f={s:i.s,p:a,o:i.o};o.add(f)&&(t=!0)}}return t}},W={name:"rdfs9",apply(o,e){let t=!1;for(let r of o.byPredicate(e.subClassOf)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;if(n!==a)for(let i of o.byPredicateObject(e.type,n))o.add(s(i.s,e.type,a))&&(t=!0)}return t}},F={name:"rdfs11",apply(o,e){let t=!1;for(let r of o.byPredicate(e.subClassOf)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;for(let i of o.bySubjectPredicate(a,e.subClassOf))i.o.kind==="uri"&&o.add(s(n,e.subClassOf,i.o.key))&&(t=!0)}return t}},k=[w,C,A,V,W,F];var N={name:"prp-trp",apply(o,e){let t=!1,r=o.subjectsWithPredicateObject(e.type,e.transitiveProperty);for(let n of r){let a=o.byPredicate(n);for(let i of a){if(i.o.kind!=="uri")continue;let f=i.o.key;for(let c of o.bySubjectPredicate(f,n))c.o.kind==="uri"&&i.s!==c.o.key&&o.add(s(i.s,n,c.o.key))&&(t=!0)}}return t}},D={name:"prp-symp",apply(o,e){let t=!1,r=o.subjectsWithPredicateObject(e.type,e.symmetricProperty);for(let n of r)for(let a of o.byPredicate(n))a.o.kind==="uri"&&o.add(s(a.o.key,n,a.s))&&(t=!0);return t}},z={name:"prp-inv1",apply(o,e){let t=!1;for(let r of o.byPredicate(e.inverseOf)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;for(let i of o.byPredicate(n))i.o.kind==="uri"&&o.add(s(i.o.key,a,i.s))&&(t=!0)}return t}},B={name:"prp-inv2",apply(o,e){let t=!1;for(let r of o.byPredicate(e.inverseOf)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;for(let i of o.byPredicate(a))i.o.kind==="uri"&&o.add(s(i.o.key,n,i.s))&&(t=!0)}return t}},M={name:"prp-eqp1",apply(o,e){let t=!1;for(let r of o.byPredicate(e.equivalentProperty)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;if(n!==a)for(let i of o.byPredicate(n))o.add({s:i.s,p:a,o:i.o})&&(t=!0)}return t}},G={name:"prp-eqp2",apply(o,e){let t=!1;for(let r of o.byPredicate(e.equivalentProperty)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;if(n!==a)for(let i of o.byPredicate(a))o.add({s:i.s,p:n,o:i.o})&&(t=!0)}return t}},H={name:"cax-eqc1",apply(o,e){let t=!1;for(let r of o.byPredicate(e.equivalentClass)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;if(n!==a)for(let i of o.byPredicateObject(e.type,n))o.add(s(i.s,e.type,a))&&(t=!0)}return t}},J={name:"cax-eqc2",apply(o,e){let t=!1;for(let r of o.byPredicate(e.equivalentClass)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;if(n!==a)for(let i of o.byPredicateObject(e.type,a))o.add(s(i.s,e.type,n))&&(t=!0)}return t}},Q={name:"eq-rep-s",apply(o,e){let t=!1;for(let r of o.byPredicate(e.sameAs)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;if(n!==a){for(let i of o.snapshot())i.s===n&&o.add({s:a,p:i.p,o:i.o})&&(t=!0);for(let i of o.snapshot())i.s===a&&o.add({s:n,p:i.p,o:i.o})&&(t=!0)}}return t}},X={name:"eq-rep-o",apply(o,e){let t=!1;for(let r of o.byPredicate(e.sameAs)){if(r.o.kind!=="uri")continue;let n=r.s,a=r.o.key;if(n!==a)for(let i of o.snapshot())i.o.kind==="uri"&&(i.o.key===n?o.add(s(i.s,i.p,a))&&(t=!0):i.o.key===a&&o.add(s(i.s,i.p,n))&&(t=!0))}return t}},K=[N,D,z,B,M,G,H,J,Q,X];var y=class{constructor(e,t){this.store=e;this.vocabulary=t}store;vocabulary;getInstancesOfClass(e){let t=p(e);return this.store.subjectsWithPredicateObject(this.vocabulary.type,t)}getSubclasses(e){let t=p(e);return this.store.subjectsWithPredicateObject(this.vocabulary.subClassOf,t).filter(n=>n!==t)}getSuperclasses(e){let t=p(e);return this.store.uriObjectsOf(t,this.vocabulary.subClassOf).filter(r=>r!==t)}getTypesOfIndividual(e){return this.store.uriObjectsOf(p(e),this.vocabulary.type)}isInstanceOf(e,t){return this.store.hasUri(p(e),this.vocabulary.type,p(t))}triples(){return this.store.snapshot()}size(){return this.store.size()}};function p(o){return typeof o=="string"?o:u(o.publisher,o.package_,o.name)}var R=class{vocabulary;profile;maxIterations;constructor(e={}){this.vocabulary=e.vocabulary??new h,this.profile=e.profile??"owl-rl-classification",this.maxIterations=e.maxIterations??100}async reason(e){let t=new d,n=await new _().parseKanonaks(e),a=new U;for(let c of n)if(c instanceof S){let m=Y(c);if(!m)continue;for(let E of c.statement)this.emitStatement(m,E,t,a)}let i=[...k];this.profile==="owl-rl-classification"&&i.push(...K);let f=0;for(;f<this.maxIterations;){let c=!1;for(let m of i)m.apply(t,this.vocabulary)&&(c=!0);if(!c)break;f++}return new y(t,this.vocabulary)}emitStatement(e,t,r,n){let a=Z(t);if(a){if(t instanceof I){r.add({s:e,p:a,o:{kind:"literal",lexical:t.object,datatype:"string"}});return}if(t instanceof T){r.add({s:e,p:a,o:{kind:"literal",lexical:String(t.object),datatype:"number"}});return}if(t instanceof g){r.add({s:e,p:a,o:{kind:"literal",lexical:String(t.object),datatype:"boolean"}});return}if(t instanceof v){let i=l(t.object.subject);r.add(s(e,a,i));return}if(t instanceof L){let i=n.next();r.add({s:e,p:a,o:{kind:"blank",id:i}}),this.emitEmbedded(i,t.object,r,n);return}if(t instanceof q){for(let i of t.object??[])this.emitListItem(e,a,i,r,n);return}}}emitListItem(e,t,r,n,a){if(r instanceof O)n.add(s(e,t,l(r.subject)));else if(r instanceof j){let i=a.next();n.add({s:e,p:t,o:{kind:"blank",id:i}}),this.emitEmbedded(i,r,n,a)}else if(r instanceof x){let i=typeof r.value=="number"?"number":typeof r.value=="boolean"?"boolean":"string";n.add({s:e,p:t,o:{kind:"literal",lexical:String(r.value),datatype:i}})}}emitEmbedded(e,t,r,n){let a=`_:${e}`;for(let i of t.statement)this.emitStatement(a,i,r,n)}},U=class{counter=0;next(){return`b${this.counter++}`}};function Y(o){let e=o.namespace??"",t=e.indexOf("@"),r=t===-1?e:e.substring(0,t),n=r.indexOf("/");if(n===-1)return null;let a=r.substring(0,n),i=r.substring(n+1);return!a||!i||!o.name?null:u(a,i,o.name)}function Z(o){let e=o.predicate;return e?.subject?l(e.subject):null}export{d as a,k as b,K as c,y as d,R as e};
|
package/dist/index.d.ts
CHANGED
|
@@ -33,7 +33,6 @@ export { ViewMaterializer } from './view/index.js';
|
|
|
33
33
|
export type { MaterializeOptions, MaterializeResult } from './view/index.js';
|
|
34
34
|
export { PackageBuilder, ImportBook, contentAddressedName, sanitizeName, ProducerRepository, EntitlementProducer, EntitlementDeniedError, allowAllPolicy, noopMeter, } from './producer/index.js';
|
|
35
35
|
export type { BuiltPackage, ImportEntry, IPackageProducer, ProduceResult, VersionRange, IEntitlementPolicy, IMeter, ProduceContext, PackageAddress, EntitlementDecision, RequestPrincipal, } from './producer/index.js';
|
|
36
|
-
export { canonicalForm, canonicalHash, CANONICAL_FORM_VERSION } from './canonical/index.js';
|
|
37
|
-
export { Carrier, carrierOf, canonicalInteger, canonicalDecimal, canonicalDouble, canonicalFloat, canonicalBoolean, canonicalString, canonicalAnyUri, canonicalLangString, canonicalLanguageTag, canonicalHexBinary, canonicalBase64, canonicalDateTime, canonicalDate, canonicalTime, canonicalScalarLexical, } from './canonical/index.js';
|
|
36
|
+
export { canonicalForm, canonicalHash, CANONICAL_FORM_VERSION, Carrier, carrierOf, } from './canonical/index.js';
|
|
38
37
|
export { buildOntologyModel } from './introspection/index.js';
|
|
39
38
|
export type { OntologyModel, ClassDef, PropertyDef, ClassRef, TypeRef, EnumDef, EnumMember, BuildOntologyModelOptions, } from './introspection/index.js';
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import{a as
|
|
2
|
-
Run 'kanonak logout ${t}' then 'kanonak login ${t}' to fix.`)}}catch(n){if(
|
|
1
|
+
import{a as mr,b as fr,c as yr,d as gr,e as he}from"./chunk-O27W3OKK.js";import{a as cn,c as we,e as Le,h as Fe,i as Me,j as ln}from"./chunk-JE4ZJ3OB.js";import{a as ur,b as dr,c as pr,d as U,e as _,f as l,g as un}from"./chunk-MJZSHLWI.js";import{a as sn}from"./chunk-HJQGBT7M.js";import"./chunk-QHABFCRC.js";import{a as Ut,b as _t,c as Lt,d as Ft,e as Mt,f as Jt,g as qt,h as Yt}from"./chunk-YWUKDEZA.js";import{b as Ht,c as zt,d as Gt}from"./chunk-YCV4H6H5.js";import{a as Tt}from"./chunk-4NO7MHS7.js";import{a as kr,b as br,c as Pr,d as wr}from"./chunk-JSHJ4ZDB.js";import{a as Sr,b as Ir}from"./chunk-PEUTCG3B.js";import{a as Cr}from"./chunk-PEJALHXK.js";import{a as Wt}from"./chunk-SC5M74NM.js";import{A as rn,B as nn,C as on,L as an,a as $r,b as jr,c as Br,d as Ar,e as Vr,f as Or,g as Dr,h as Nr,i as Tr,j as Ur,k as _r,l as Lr,m as Fr,n as Mr,o as Hr,p as zr,q as Wr,r as Gr,s as Jr,t as qr,u as Yr,v as Zr,w as Xr,x as Qr,y as en,z as tn}from"./chunk-5DXJ5B5T.js";import"./chunk-SHDHMKMJ.js";import{a as y,b as ce,c as er,d as Te,e as Ue,f as ge,g as sr,h as cr,i as C}from"./chunk-CEFXZIHB.js";import{a as S}from"./chunk-ZYAABYDS.js";import{a as lr,b as ke,c as Rr,d as g,e as Er,f as vr,g as xr,h as Kr}from"./chunk-NC3FSY3R.js";import{f as T,k as E,l as be,m as Pe,n as _e}from"./chunk-PBNVHBS3.js";import{b as tr,c as rr,d as R,e as nr,f as or,h as ar,j as ir}from"./chunk-XYEY6HUC.js";import{a as Zt,b as se,c as f,d as k,e as Qt,f as le,g as ue,h as de,i as pe,j as me,k as fe,l as ye}from"./chunk-T3JR2SV6.js";import{a as Xt}from"./chunk-FUUTGGJS.js";import{a as jt,b as ie,c as N,d as Bt,e as h,f as At,g as Vt,h as Ot,i as Dt,j as Nt}from"./chunk-2ACBWC7K.js";import{a as hr}from"./chunk-ODIECDN7.js";import{VersionOperator as hi}from"@kanonak-protocol/types/document/models/enums";import{existsSync as Kn,readFileSync as In}from"fs";import{homedir as $n}from"os";import{join as jn}from"path";import{execFile as dn}from"child_process";import{promisify as pn}from"util";var L=pn(dn),F="kanonak",M="/usr/bin/security",v=class{async get(e){let t=l(e);try{let{stdout:n}=await L(M,["find-generic-password","-s",F,"-a",t,"-w"],{timeout:1e4});try{return JSON.parse(n.trim())}catch{throw new Error(`Stored credential for '${t}' is corrupted (not valid JSON).
|
|
2
|
+
Run 'kanonak logout ${t}' then 'kanonak login ${t}' to fix.`)}}catch(n){if(He(n,44))return null;throw new Error(`macOS Keychain read failed for '${t}': ${H(n)}
|
|
3
3
|
The Keychain may be locked or inaccessible.
|
|
4
|
-
Try unlocking it via Keychain Access.app or running 'security unlock-keychain'.`)}}async store(e,t){let n=l(e),o=JSON.stringify(t);try{await
|
|
4
|
+
Try unlocking it via Keychain Access.app or running 'security unlock-keychain'.`)}}async store(e,t){let n=l(e),o=JSON.stringify(t);try{await L(M,["add-generic-password","-s",F,"-a",n,"-U","-w",o],{timeout:1e4})}catch(a){throw new Error(`macOS Keychain write failed for '${n}': ${H(a)}
|
|
5
5
|
Ensure the Keychain is unlocked and the CLI has write permission.
|
|
6
|
-
On managed devices, your IT policy may block credential storage.`)}}async remove(e){let t=l(e);try{await
|
|
7
|
-
The credential may not have been fully removed.`)}}async list(){try{let{stdout:e}=await
|
|
8
|
-
`))if(o.includes(`"svce"<blob>="${
|
|
9
|
-
${
|
|
6
|
+
On managed devices, your IT policy may block credential storage.`)}}async remove(e){let t=l(e);try{await L(M,["delete-generic-password","-s",F,"-a",t],{timeout:1e4})}catch(n){if(He(n,44))return;console.warn(` Warning: macOS Keychain delete failed for '${t}': ${H(n)}
|
|
7
|
+
The credential may not have been fully removed.`)}}async list(){try{let{stdout:e}=await L(M,["dump-keychain"],{timeout:1e4}),t=[],n=!1;for(let o of e.split(`
|
|
8
|
+
`))if(o.includes(`"svce"<blob>="${F}"`)&&(n=!0),n&&o.includes('"acct"<blob>=')){let a=o.match(/"acct"<blob>="([^"]+)"/);a&&t.push(a[1]),n=!1}return t}catch(e){return console.warn(` Warning: Could not enumerate Keychain entries: ${H(e)}`),[]}}};function He(r,e){return typeof r=="object"&&r!==null&&"code"in r&&r.code===e}function H(r){return r instanceof Error?r.message:String(r)}import{execFile as mn}from"child_process";import{promisify as fn}from"util";var yn=fn(mn),z="kanonak:",x=class{async get(e){let t=z+l(e),n=`
|
|
9
|
+
${G}
|
|
10
10
|
$target = [Console]::In.ReadLine()
|
|
11
11
|
$ptr = [IntPtr]::Zero
|
|
12
12
|
$result = [CredMan]::CredRead($target, 1, 0, [ref]$ptr)
|
|
@@ -18,8 +18,8 @@ try {
|
|
|
18
18
|
[System.Text.Encoding]::Unicode.GetString($bytes)
|
|
19
19
|
} finally {
|
|
20
20
|
[CredMan]::CredFree($ptr)
|
|
21
|
-
}`;try{let{stdout:o}=await
|
|
22
|
-
${
|
|
21
|
+
}`;try{let{stdout:o}=await W(n,t),a=o.trim();return a?JSON.parse(a):null}catch{return null}}async store(e,t){let n=z+l(e),o=JSON.stringify(t),a=`
|
|
22
|
+
${G}
|
|
23
23
|
$target = [Console]::In.ReadLine()
|
|
24
24
|
$json = [Console]::In.ReadLine()
|
|
25
25
|
$bytes = [System.Text.Encoding]::Unicode.GetBytes($json)
|
|
@@ -35,13 +35,13 @@ try {
|
|
|
35
35
|
if (-not $result) { throw "CredWrite failed" }
|
|
36
36
|
} finally {
|
|
37
37
|
[System.Runtime.InteropServices.Marshal]::FreeHGlobal($cred.CredentialBlob)
|
|
38
|
-
}`;try{await
|
|
39
|
-
${o}`)}catch(i){throw new Error(`Windows Credential Manager write failed: ${String(i)}`)}}async remove(e){let t=
|
|
40
|
-
${
|
|
38
|
+
}`;try{await W(a,`${n}
|
|
39
|
+
${o}`)}catch(i){throw new Error(`Windows Credential Manager write failed: ${String(i)}`)}}async remove(e){let t=z+l(e),n=`
|
|
40
|
+
${G}
|
|
41
41
|
$target = [Console]::In.ReadLine()
|
|
42
|
-
[CredMan]::CredDelete($target, 1, 0) | Out-Null`;try{await
|
|
43
|
-
${
|
|
44
|
-
${
|
|
42
|
+
[CredMan]::CredDelete($target, 1, 0) | Out-Null`;try{await W(n,t)}catch{}}async list(){let e=`
|
|
43
|
+
${G}
|
|
44
|
+
${gn}
|
|
45
45
|
$prefix = [Console]::In.ReadLine()
|
|
46
46
|
$count = 0
|
|
47
47
|
$pCreds = [IntPtr]::Zero
|
|
@@ -55,8 +55,8 @@ if ([CredMan]::CredEnumerate($null, 0, [ref]$count, [ref]$pCreds)) {
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
[CredMan]::CredFree($pCreds)
|
|
58
|
-
}`;try{let{stdout:t}=await
|
|
59
|
-
`).map(n=>n.trim()).filter(Boolean)}catch{return[]}}};async function
|
|
58
|
+
}`;try{let{stdout:t}=await W(e,z);return t.trim().split(`
|
|
59
|
+
`).map(n=>n.trim()).filter(Boolean)}catch{return[]}}};async function W(r,e){for(let t of["pwsh","powershell"])try{return await yn(t,["-NoProfile","-NonInteractive","-Command",r],{timeout:15e3,...e!==void 0&&{input:e}})}catch(n){if(t==="powershell")throw n}throw new Error("Neither pwsh nor powershell found")}var G=`
|
|
60
60
|
Add-Type -TypeDefinition @"
|
|
61
61
|
using System;
|
|
62
62
|
using System.Runtime.InteropServices;
|
|
@@ -87,13 +87,13 @@ public class CredMan {
|
|
|
87
87
|
[DllImport("Advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
|
|
88
88
|
public static extern bool CredEnumerate(string filter, int flags, out int count, out IntPtr credentials);
|
|
89
89
|
}
|
|
90
|
-
"
|
|
91
|
-
`)){let o=n.match(/attribute\.publisher\s*=\s*(.+)/);o&&t.push(o[1].trim())}return t}catch{return[]}}};async function Se(){try{return await
|
|
90
|
+
"@`,gn="";import{execFile as hn,spawn as kn}from"child_process";import{promisify as bn}from"util";var q=bn(hn),J="kanonak",K=class{async get(e){let t=l(e);try{let{stdout:n}=await q("secret-tool",["lookup","service",J,"publisher",t],{timeout:1e4}),o=n.trim();return o?JSON.parse(o):null}catch{return null}}async store(e,t){let n=l(e),o=JSON.stringify(t);await new Promise((a,i)=>{let s=kn("secret-tool",["store","--label",`Kanonak: ${n}`,"service",J,"publisher",n],{stdio:["pipe","ignore","ignore"],timeout:1e4});s.stdin.write(o),s.stdin.end(),s.on("close",c=>{c===0?a():i(new Error(`secret-tool store exited with code ${c}`))}),s.on("error",i)})}async remove(e){let t=l(e);try{await q("secret-tool",["clear","service",J,"publisher",t],{timeout:1e4})}catch{}}async list(){try{let{stdout:e}=await q("secret-tool",["search","service",J],{timeout:1e4}),t=[];for(let n of e.split(`
|
|
91
|
+
`)){let o=n.match(/attribute\.publisher\s*=\s*(.+)/);o&&t.push(o[1].trim())}return t}catch{return[]}}};async function Se(){try{return await q("sh",["-c","command -v secret-tool"],{timeout:5e3}),!0}catch{return!1}}import{existsSync as ze,mkdirSync as We,readFileSync as Ge,writeFileSync as Je}from"fs";import{createCipheriv as Pn,createDecipheriv as wn,randomBytes as qe}from"crypto";import{homedir as Sn}from"os";import{join as Ee,dirname as Ye}from"path";var Xe=Ee(Sn(),".config","kanonak"),I=Ee(Xe,"keyring.key"),Y=Ee(Xe,"credentials.enc"),Ze="aes-256-gcm",Re=32,b=12,Ce=16,$=class{async get(e){let t=this.loadStore(),n=l(e);return t[n]??null}async store(e,t){let n=this.loadStore(),o=l(e);n[o]=t,this.saveStore(n)}async remove(e){let t=this.loadStore(),n=l(e);delete t[n],this.saveStore(t)}async list(){let e=this.loadStore();return Object.keys(e)}loadStore(){if(!ze(Y))return{};try{let e=this.getOrCreateKey(),t=Ge(Y);if(t.length<b+Ce)return{};let n=t.subarray(0,b),o=t.subarray(b,b+Ce),a=t.subarray(b+Ce),i=wn(Ze,e,n);i.setAuthTag(o);let s=Buffer.concat([i.update(a),i.final()]);return JSON.parse(s.toString("utf-8"))}catch{return{}}}saveStore(e){let t=this.getOrCreateKey(),n=qe(b),o=Pn(Ze,t,n),a=Buffer.from(JSON.stringify(e),"utf-8"),i=Buffer.concat([o.update(a),o.final()]),s=o.getAuthTag(),c=Buffer.concat([n,s,i]);We(Ye(Y),{recursive:!0}),Je(Y,c,{mode:384})}getOrCreateKey(){if(ze(I)){let t=Ge(I);if(t.length!==Re)throw new Error(`Credential keyring key is corrupted (expected ${Re} bytes, got ${t.length}). Delete ${I} and re-authenticate.`);return t}let e=qe(Re);return We(Ye(I),{recursive:!0}),Je(I,e,{mode:384}),e}};import{execFile as Rn}from"child_process";import{promisify as Cn}from"util";var En=Cn(Rn),Qe=3e4,j=class{constructor(e){this.helperPath=e}helperPath;async get(e){let t=l(e);try{let o=(await this.runHelper("get",{publisher:t})).trim();return o?JSON.parse(o):null}catch(n){throw new Error(`Credential helper '${this.helperPath}' failed to read credential for '${t}': ${Z(n)}
|
|
92
92
|
Verify the helper binary exists, is executable, and implements the Kanonak credential helper protocol.
|
|
93
|
-
Check the 'credentialHelper' path in ~/.kanonak/config.json.`)}}async store(e,t){let n=l(e);try{await this.runHelper("store",{publisher:n,credential:t})}catch(o){throw new Error(`Credential helper '${this.helperPath}' failed to store credential for '${n}': ${
|
|
94
|
-
Verify the helper binary supports the 'store' action.`)}}async remove(e){let t=l(e);try{await this.runHelper("erase",{publisher:t})}catch(n){console.warn(` Warning: Credential helper '${this.helperPath}' failed to erase credential for '${t}': ${
|
|
95
|
-
Check the 'credentialHelper' path in ~/.kanonak/config.json.`):
|
|
96
|
-
The helper may be waiting for authentication to an external vault.`):n}}};function
|
|
97
|
-
Using default credential backend. Fix the JSON syntax or delete the file.`),{}}}import{createHash as
|
|
98
|
-
The stored key pair may be corrupted. Run 'kanonak login ${n}' to re-authenticate.`),i.Authorization=`Bearer ${a.accessToken}`}}else i.Authorization=`Bearer ${a.accessToken}`;let s=await fetch(t,{method:o,headers:i});if(s.status===401&&a.dpopKeyPair){let c=s.headers.get("DPoP-Nonce");if(c){e.set(n,c);try{let u=
|
|
99
|
-
`;function Pt(r=bt){if(!ro(r))return null;let e=eo(r,"utf-8"),t=kt.load(e);return!t||typeof t!="object"||t.version!=="1"?null:{version:"1",lastUpdated:t.lastUpdated??new Date().toISOString(),packages:t.packages??{}}}function wt(r,e=bt){r.lastUpdated=new Date().toISOString();let t={};for(let o of Object.keys(r.packages).sort())t[o]=r.packages[o];r.packages=t;let n=kt.dump(r,{lineWidth:-1,sortKeys:!1,quotingType:'"'});to(e,oo+n,"utf-8")}function St(r){return`sha256:${no("sha256").update(r).digest("hex")}`}import*as Ke from"js-yaml";import{createHash as ao}from"crypto";var Ct="1",Rt=new TextEncoder;function Et(r,e){let t=Rt.encode(r),n=Rt.encode(e),o=Math.min(t.length,n.length);for(let a=0;a<o;a++)if(t[a]!==n[a])return t[a]-n[a];return t.length-n.length}function xe(r){let e=[];for(let n of r)n instanceof f&&e.push(io(n));return e.sort((n,o)=>Et(n.uri,o.uri)),JSON.stringify({subjects:e})}function ee(r){let e=xe(r);return`sha256:${ao("sha256").update(e,"utf8").digest("hex")}`}function io(r){let e=mo(r),t=Ie(r.statement);return{uri:e,statements:t}}function Ie(r){let e=[];for(let t of r){let n=so(t);n&&e.push(n)}return e.sort((t,n)=>Et(t.predicate,n.predicate)),e}function so(r){let e=po(r);if(!e)return;let t=co(r);if(t)return uo(e,t)}function co(r){if(r instanceof ue&&r.carrier)return{type:"typed",carrier:r.carrier,value:R(r.carrier,r.lexical??String(r.object))};if(r instanceof de)return{type:"string",value:r.object};if(r instanceof pe)return{type:"number",value:Kt(r.object)};if(r instanceof me)return{type:"boolean",value:r.object};if(r instanceof fe)return{type:"ref",value:xt(r.object)};if(r instanceof ye){let e=r.object;return vt(e)}if(r instanceof ge)return{type:"list",items:r.object.map(lo)}}function vt(r){let e=Ie(r.statement);return r.name&&r.name.length>0?{type:"embedded",name:r.name,statements:e}:{type:"embedded",statements:e}}function lo(r){if(r instanceof k)return{type:"ref",value:xt(r)};if(r instanceof y)return vt(r);if(r instanceof le){if(r.carrier)return{type:"typed",carrier:r.carrier,value:R(r.carrier,r.lexical??String(r.value))};let e=r.value;if(typeof e=="string")return{type:"string",value:e};if(typeof e=="number")return{type:"number",value:Kt(e)};if(typeof e=="boolean")return{type:"boolean",value:e}}if(r instanceof ce)return{type:"embedded",statements:Ie(r.statement)};throw new Error(`canonicalForm: list item of unrecognized kind (${r.constructor?.name??typeof r}); add canonicalization support before hashing data that contains it`)}function uo(r,e){switch(e.type){case"string":return{predicate:r,type:"string",value:e.value};case"number":return{predicate:r,type:"number",value:e.value};case"boolean":return{predicate:r,type:"boolean",value:e.value};case"typed":return{predicate:r,type:"typed",carrier:e.carrier,value:e.value};case"ref":return{predicate:r,type:"ref",value:e.value};case"embedded":return e.name!==void 0?{predicate:r,type:"embedded",name:e.name,statements:e.statements}:{predicate:r,type:"embedded",statements:e.statements};case"list":return{predicate:r,type:"list",items:e.items}}}function po(r){let e=r.predicate;if(e)return It(e.subject)}function mo(r){let e=r.namespace??"",t=r.name??"";return`${e}/${t}`}function xt(r){return It(r.subject)}function It(r){let e=r.version;return e&&typeof e.major=="number"?`${r.publisher}/${r.package_}@${e.major}.${e.minor}.${e.patch}/${r.name}`:`${r.publisher}/${r.package_}/${r.name}`}function Kt(r){if(Number.isNaN(r))throw new Error("canonicalForm: NaN cannot be canonicalized");if(!Number.isFinite(r))throw new Error("canonicalForm: \xB1Infinity cannot be canonicalized");return Object.is(r,-0)?"0":String(r)}import{VersionOperator as $t}from"@kanonak-protocol/types/document/models/enums";var fo="0.0.0",P=class{constructor(e,t=new S,n){this.repository=e;this.parser=t;this.objectParser=n??new E(this.parser)}repository;parser;objectParser;imports(){return new D}serializeValue(e,t){return At(e,t)}async buildContentAddressed(e){let t=e.book.toImports(),n=await this.hashBody(e.publisher,t,e.body),o=$e(n),a={type:"EphemeralPackage",publisher:e.publisher,imports:t};e.contentHashProperty&&(a[e.contentHashProperty]=n),Object.assign(a,e.header??{}),a.imports=t;let i={[o]:a,...e.body},s=this.dump(i);return{yaml:s,byteCount:Bt(s),contentHash:n,packageName:o,publisher:e.publisher,resourceCount:Object.keys(e.body).length}}async buildNamed(e){let t=e.book.toImports(),n={type:e.type??"Package",publisher:e.publisher,version:e.version,imports:t},o;e.contentHashProperty&&(o=await this.hashBody(e.publisher,t,e.body),n[e.contentHashProperty]=o),Object.assign(n,e.header??{}),n.imports=t;let a={[e.name]:n,...e.body},i=this.dump(a),s={yaml:i,byteCount:Bt(i),packageName:e.name,publisher:e.publisher,resourceCount:Object.keys(e.body).length};return o!==void 0&&(s.contentHash=o),s}dump(e){return Ke.dump(e,{lineWidth:-1})}async hashBody(e,t,n){let o={[jt]:{type:"EphemeralPackage",publisher:e,imports:t},...n},a=this.parser.parse(Ke.dump(o,{lineWidth:-1})),i=a.metadata.namespace_?.toString(),c=(await this.objectParser.parseKanonaks(new et(a,this.repository))).filter(u=>u instanceof f&&u.namespace===i&&u.name!==jt);for(let u of c)u.namespace="ephemeral";return ee(c)}},jt="__pkgbuilder_probe__";function Bt(r){return new TextEncoder().encode(r).length}function $e(r){let e="sha256:",t=r.startsWith(e)?e.length:0;return`q-${r.slice(t,t+16)}`}var D=class{byKey=new Map;aliases=new Set;ensure(e,t,n,o,a=$t.Major){let i=`${e}/${t}@${n}`,s=this.byKey.get(i);if(s)return s.alias;let c=this.uniqueAlias(o);return this.byKey.set(i,{publisher:e,package_:t,version:n,alias:c,match:a}),c}ref(e){if(!e.version||typeof e.version.major!="number")throw new Error(`Cannot serialize a reference to ${e.publisher}/${e.package_}/${e.name} without a version.`);return`${this.ensure(e.publisher,e.package_,h(e.version),e.package_)}.${e.name}`}refLatest(e,t,n,o){return`${this.ensure(e,t,fo,o??t,$t.Any)}.${n}`}toImports(){let e=new Map;for(let n of this.byKey.values()){let o=e.get(n.publisher)??[];o.push(n),e.set(n.publisher,o)}return[...e.keys()].sort().map(n=>({publisher:n,packages:e.get(n).sort((o,a)=>o.package_<a.package_?-1:1).map(o=>({package:o.package_,match:se(o.match),version:o.version,alias:o.alias}))}))}uniqueAlias(e){let t=V(e)||"pkg",n=t,o=2;for(;this.aliases.has(n);)n=`${t}${o++}`;return this.aliases.add(n),n}};function At(r,e){if(r!=null){if(typeof r=="string"||typeof r=="number"||typeof r=="boolean")return r;if(r instanceof k)return e.ref(r.subject);if(Array.isArray(r)){let t=r.map(n=>At(n,e)).filter(n=>n!==void 0);return t.length>0?t:void 0}if(r instanceof y)throw new Error("Embedded values are not yet supported by PackageBuilder. Produce a literal or a reference, or compose the embedded shape into the output class.");if(yo(r))throw new Error(`Value produced a bare URI without a version (${r.publisher}/${r.package_}/${r.name}); cannot serialize it as a reference.`)}}function V(r){return r.replace(/[^A-Za-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")}function yo(r){return typeof r=="object"&&r!==null&&typeof r.publisher=="string"&&typeof r.package_=="string"&&typeof r.name=="string"}var te=class{constructor(e){this.producers=e}producers;produced=new Map;producerFor(e,t){return this.producers.find(n=>n.canProduce(e,t))}async produceCached(e,t,n,o){let a=`${t}/${n}@${h(o)}`,i=this.produced.get(a);if(i)return i;let{document:s}=await e.produce(t,n,o);return this.produced.set(a,s),s}async getHighestCompatibleVersionAsync(e,t){let n=this.producerFor(e,t.packageName);if(!n)return null;let o={operator:t.versionOperator,version:t.version},a=await n.resolveVersion(e,t.packageName,o);return a?this.produceCached(n,e,t.packageName,a):null}async getDocumentAsync(e){let t;try{t=ke(e)}catch{return null}if(t.kind!=="package"||!t.version)return null;let n=this.producerFor(t.publisher,t.package_);return n?this.produceCached(n,t.publisher,t.package_,t.version):null}async getDocumentsByNamespaceAsync(e,t){return Array.from(this.produced.values()).filter(n=>{let o=n.metadata.namespace_;return o!=null&&o.publisher===e&&o.package_===t})}async getAllDocumentsAsync(){return Array.from(this.produced.values())}async saveDocumentAsync(e,t){throw new Error("ProducerRepository is read-only: a producer is a source, not a store.")}async deleteDocumentAsync(e){throw new Error("ProducerRepository is read-only: a producer is a source, not a store.")}async clearNamespaceAsync(e,t){throw new Error("ProducerRepository is read-only: a producer is a source, not a store.")}async getAllDocumentReferencesAsync(){return[]}async getDocumentContentAsync(e){return null}async getDocumentUriAsync(e){return null}};var je={async authorize(){return{allowed:!0}}},Be={async record(){}},T=class extends Error{constructor(t,n){let o=`${t.publisher}/${t.package_}${t.version?`@${t.version.major}.${t.version.minor}.${t.version.patch}`:""}`;super(`Not entitled to produce ${o}${n?`: ${n}`:""}`);this.address=t;this.reason=n;this.name="EntitlementDeniedError"}address;reason},re=class{inner;ctx;policy;meter;constructor(e,t,n=je,o=Be){this.inner=e,this.ctx=t,this.policy=n,this.meter=o}canProduce(e,t){return this.inner.canProduce(e,t)}async resolveVersion(e,t,n){return await this.assertAllowed({publisher:e,package_:t,version:n.version}),this.inner.resolveVersion(e,t,n)}async produce(e,t,n){let o={publisher:e,package_:t,version:n};await this.assertAllowed(o);let a=await this.inner.produce(e,t,n);return await this.meter.record(this.ctx,o,a),a}async assertAllowed(e){let t=await this.policy.authorize(this.ctx,e);if(!t.allowed)throw new T(e,t.reason)}};var p="kanonak.org",m="view",Dt="core-kanonak",go={publisher:p,package_:m,name:"rootView"},ho={publisher:p,package_:m,name:"bind"},ko={publisher:p,package_:m,name:"produces"},bo={publisher:p,package_:m,name:"projections"},Po={publisher:p,package_:m,name:"where"},wo={publisher:p,package_:m,name:"value"},So={publisher:p,package_:m,name:"as"},ne=class{constructor(e,t=new S){this.repository=e;this.parser=t;this.objectParser=new E(this.parser),this.builder=new P(this.repository,this.parser,this.objectParser)}repository;parser;objectParser;builder;async materialize(e,t={}){let n=await this.objectParser.parseKanonaks(this.repository),o=this.resolveView(n,e),a=v(o,ho);if(!a)throw new Error(`View ${o.namespace}/${o.name} declares no view.bind; cannot materialize.`);let i=v(o,ko);if(!i)throw new Error(`View ${o.namespace}/${o.name} is a selection view (no view.produces). In-graph materialization of selection views is not yet supported \u2014 declare a view.produces output class to reshape the result.`);let s=Ro(o),c=Vt(n,p,Dt),u=Vt(n,p,m),d=this.builder.imports(),oe=d.ensure(p,Dt,c,"ck"),Ot=d.ensure(p,m,u,"v"),Nt=d.ref(i),Lt=new nt(this.repository,this.parser,this.objectParser),Ae=new tt(Lt,n),Ut=this.readProjections(n,o),_t=vo(o,Po),Ft=this.findInstances(n,a,await this.reason(t)),De={},Mt=new Set;for(let O of Ft){if(!await this.passesWhere(Ae,n,_t,O))continue;let ie={type:Nt};for(let Te of Ut){let Ht=await this.evaluateValue(Ae,n,Te.value,O),Oe=this.builder.serializeValue(Tt(Ht),d);Oe!==void 0&&(ie[d.ref(Te.as)]=Oe)}let Ve=g(O);Ve&&(ie[`${Ot}.derivedFrom`]=d.ref(Ve)),De[this.rowName(O,Mt)]=ie}let ae={};t.resolvedAt&&(ae[`${oe}.resolvedAt`]=t.resolvedAt),t.invocationId&&(ae[`${oe}.id`]=t.invocationId);let w=await this.builder.buildContentAddressed({publisher:s,book:d,body:De,contentHashProperty:`${oe}.contentHash`,header:ae});return{yaml:w.yaml,contentHash:w.contentHash,packageName:w.packageName,publisher:w.publisher,rowCount:w.resourceCount}}resolveView(e,t){let n=L(e,t);if(!n)throw new Error(`View ${t.publisher}/${t.package_}/${t.name} not found in the catalog.`);let o=v(n,go);if(o){let a=L(e,o);if(!a)throw new Error(`ViewPackage ${t.name} names rootView ${o.name}, which is not in the catalog.`);return a}return n}readProjections(e,t){let n=[];for(let o of Pe(t,bo)){let a=o instanceof y?o:o instanceof k?L(e,o.subject):void 0;if(!a)continue;let i=be(a,wo),s=v(a,So);i&&s&&n.push({value:i,as:s})}return n}async reason(e){return new he({profile:e.reasoningProfile??"owl-rl-classification"}).reason(this.repository)}findInstances(e,t,n){let o=Eo(e),a=[],i=new Set;for(let s of n.getInstancesOfClass(t)){if(i.has(s))continue;i.add(s);let c=o.get(s);c&&a.push(c)}return a.sort((s,c)=>{let u=C(g(s)),d=C(g(c));return u<d?-1:u>d?1:0}),a}async passesWhere(e,t,n,o){for(let a of n){let i=await this.evaluateValue(e,t,a,o);if(!xo(i))return!1}return!0}async evaluateValue(e,t,n,o){let a=rt(n,"view-projection",{catalog:t,depth:0}),i=new Map([["input",o]]);return e.evaluate(a,i)}rowName(e,t){let n=V(e.name)||"row",o=n,a=2;for(;t.has(o);)o=`${n}-${a++}`;return t.add(o),o}};function Tt(r){return we(r)?r.value:Array.isArray(r)?r.map(Tt):r}function Ro(r){let e=g(r);if(!e)throw new Error(`Could not derive a publisher from view ${r.namespace}/${r.name}.`);return e.publisher}function Vt(r,e,t){let n=Co(r,e,t);if(!n)throw new Error(`Package ${e}/${t} is not in the catalog; it must be importable to materialize a view.`);return n}function Co(r,e,t){let n;for(let o of r){if(!(o instanceof f))continue;let a=g(o);!a||a.publisher!==e||a.package_!==t||!a.version||(!n||N(a.version,n)>0)&&(n=a.version)}return n?h(n):void 0}function Eo(r){let e=new Map,t=new Map;for(let n of r){if(!(n instanceof f))continue;let o=g(n);if(!o||!o.version)continue;let a=C(o),i=t.get(a);(!i||N(o.version,i)>0)&&(t.set(a,o.version),e.set(a,n))}return e}function vo(r,e){let t=be(r,e);return t?[t]:Pe(r,e).filter(n=>n instanceof y)}function xo(r){return r===!0?!0:r===!1||r===void 0||r===null?!1:typeof r=="string"?r.length>0:typeof r=="number"?r!==0:we(r)?r.value.length>0:Array.isArray(r)?r.length>0:!!r}export{pn as AmbiguousReferenceRule,me as BooleanStatement,Ct as CANONICAL_FORM_VERSION,Ne as Carrier,kn as ClassDefinitionRule,rn as ClassHierarchyCycleRule,tr as CompositeKanonakDocumentRepository,Q as CredentialStore,ce as DefinedKanonak,un as DefinitionPropertyReferenceRule,er as DocumentLocation,Er as EdgeType,y as EmbeddedKanonak,Qr as EmbeddedKanonakTypeRule,ye as EmbeddedStatement,T as EntitlementDeniedError,re as EntitlementProducer,Qt as FileSystemKanonakDocumentRepository,jr as GitIgnoreFilter,vr as GraphBuilder,sr as HttpKanonakDocumentRepository,D as ImportBook,en as ImportExistenceRule,Xt as InMemoryKanonakDocumentRepository,ln as InstancePropertyReferenceRule,dr as Kanonak,Ar as KanonakDocumentPositions,E as KanonakObjectParser,Pn as KanonakObjectValidator,S as KanonakParser,pr as KanonakUri,Tr as KanonakUriBuilder,Nr as KanonakUrlResolver,Pr as KanonakVocabulary,ge as ListStatement,le as LiteralKanonak,cr as LocalFirstRepository,Rn as LookRenderer,bn as MarkdownLinkRule,fr as MarkdownStatement,cn as NamespaceImportCycleRule,qr as NamespacePrefixRule,Cr as NodeType,pe as NumberStatement,Kr as OWL_RL_CLASSIFICATION_RULES,fn as ObjectPropertyImportRule,yn as ObjectPropertyValueValidationRule,Wr as OntologyValidationError,Hr as OntologyValidationResult,P as PackageBuilder,te as ProducerRepository,gn as PropertyDomainRule,nn as PropertyHierarchyCycleRule,Br as PropertyMetadata,mn as PropertyRangeReferenceRule,on as PropertyRangeRequiredRule,Zr as PropertyTypeSpecificityRule,hn as PropertyValueTypeRule,or as PublisherConfigResolver,ar as PublisherIndex,Ir as RDFS_RULES,he as Reasoner,$r as ReasoningResult,k as ReferenceKanonak,fe as ReferenceStatement,nr as RepositoryFactory,Yr as ResourceNamingRule,yr as ResourceResolver,Rr as ResourceTypeClassifier,ue as ScalarStatement,mr as Statement,de as StringStatement,an as SubClassOfReferenceRule,sn as SubPropertyOfReferenceRule,f as SubjectKanonak,Xr as SubjectKanonakTypeRequiredRule,xr as TripleStore,gr as TypeResolver,tn as UnresolvedReferenceRule,Jr as ValidationCache,Gr as ValidationContext,zr as ValidationSeverity,ji as VersionOperator,ne as ViewMaterializer,dn as XsdImportRule,je as allowAllPolicy,ir as assertPackageIdentity,ur as buildLocalFirstRepository,Cn as buildOntologyModel,We as canonicalAnyUri,Ye as canonicalBase64,He as canonicalBoolean,Xe as canonicalDate,Ze as canonicalDateTime,_e as canonicalDecimal,Fe as canonicalDouble,Me as canonicalFloat,xe as canonicalForm,ee as canonicalHash,qe as canonicalHexBinary,Ue as canonicalInteger,Ge as canonicalLangString,Je as canonicalLanguageTag,R as canonicalScalarLexical,ze as canonicalString,Qe as canonicalTime,Le as carrierOf,lr as collectKanonakFiles,N as compareVersions,St as computeIntegrity,$e as contentAddressedName,Fr as contextTypesOf,ht as createAuthenticatedFetch,A as createDPoPProof,Gt as createVersion,Sr as extractMarkdownLinks,wn as findDerivation,Mr as findInstancesByType,wr as findMalformedReferences,Vr as findMarkdownLinkAt,Or as formatKanonakAddress,h as formatVersion,yt as generateDPoPKeyPair,rr as getGlobalCachePath,_ as hasValidToken,qt as isCompatibleVersion,U as isExpired,Yt as isMajorCompatible,Pt as loadLockFile,hr as makeUriKey,Be as noopMeter,l as normalizeHost,ke as parseKanonakAddress,Jt as parseVersionString,Dr as parseWithPositions,Zt as pickHighestDocument,Ur as propertiesInScope,Sn as resolveDisplayValue,_r as resolvePropertyStep,V as sanitizeName,wt as saveLockFile,gt as serverSupportsDPoP,g as subjectUri,Lr as superClassChain,kr as tripleKey,C as uriKey,br as uriTriple,zt as versionOperatorFromChar,se as versionOperatorToChar,Wt as versionsEqual};
|
|
93
|
+
Check the 'credentialHelper' path in ~/.kanonak/config.json.`)}}async store(e,t){let n=l(e);try{await this.runHelper("store",{publisher:n,credential:t})}catch(o){throw new Error(`Credential helper '${this.helperPath}' failed to store credential for '${n}': ${Z(o)}
|
|
94
|
+
Verify the helper binary supports the 'store' action.`)}}async remove(e){let t=l(e);try{await this.runHelper("erase",{publisher:t})}catch(n){console.warn(` Warning: Credential helper '${this.helperPath}' failed to erase credential for '${t}': ${Z(n)}`)}}async list(){try{let e=await this.runHelper("list",void 0);return JSON.parse(e.trim())}catch(e){return console.warn(` Warning: Credential helper '${this.helperPath}' failed to list credentials: ${Z(e)}`),[]}}async runHelper(e,t){try{let{stdout:n}=await En(this.helperPath,[e],{...t&&{input:JSON.stringify(t)},timeout:Qe});return n}catch(n){throw vn(n)?new Error(`Credential helper not found at '${this.helperPath}'.
|
|
95
|
+
Check the 'credentialHelper' path in ~/.kanonak/config.json.`):xn(n)?new Error(`Credential helper '${this.helperPath}' timed out after ${Qe/1e3}s on '${e}'.
|
|
96
|
+
The helper may be waiting for authentication to an external vault.`):n}}};function Z(r){return r instanceof Error?r.message:String(r)}function vn(r){return r instanceof Error&&"code"in r&&r.code==="ENOENT"}function xn(r){return r instanceof Error&&"killed"in r&&r.killed}var ve=jn($n(),".kanonak","config.json"),X=class{backend=null;backendReady=null;async getBackend(){if(this.backend)return this.backend;if(this.backendReady)return this.backendReady;this.backendReady=this.resolveBackend();try{return this.backend=await this.backendReady,this.backend}catch(e){throw this.backendReady=null,e}}async getToken(e){let t=Bn(e);if(t)return t;let o=await(await this.getBackend()).get(e);return!o||!_(o)?null:o.accessToken??null}async getCredential(e){return(await this.getBackend()).get(e)}async store(e,t){return(await this.getBackend()).store(e,t)}async remove(e){return(await this.getBackend()).remove(e)}async list(){return(await this.getBackend()).list()}async resolveBackend(){let e=An();return e.credentialHelper?new j(e.credentialHelper):process.platform==="darwin"?new v:process.platform==="win32"?new x:await Se()?new K:new $}};function Bn(r){let t="KANONAK_TOKEN_"+l(r).replace(/[.\-]/g,"_").toUpperCase();return process.env[t]??null}function An(){if(!Kn(ve))return{};try{return JSON.parse(In(ve,"utf-8"))}catch(r){let e=r instanceof Error?r.message:String(r);return console.warn(` Warning: Failed to parse ${ve}: ${e}
|
|
97
|
+
Using default credential backend. Fix the JSON syntax or delete the file.`),{}}}import{createHash as Vn,createPrivateKey as On,generateKeyPairSync as Dn,randomUUID as Nn,sign as Tn}from"crypto";function tt(){let{publicKey:r,privateKey:e}=Dn("ec",{namedCurve:"P-256"});return{publicKey:r.export({format:"jwk"}),privateKey:e.export({format:"jwk"})}}function B(r,e,t,n,o,a){let i={alg:"ES256",typ:"dpop+jwt",jwk:{kty:e.kty,crv:e.crv,x:e.x,y:e.y}},s={jti:Nn(),htm:t.toUpperCase(),htu:n,iat:Math.floor(Date.now()/1e3)};return o&&(s.ath=Vn("sha256").update(o).digest("base64url")),a&&(s.nonce=a),Un(i,s,r)}function rt(r){return!r||r.length===0?!1:r.some(e=>e.toUpperCase()==="ES256")}function Un(r,e,t){let n=et(JSON.stringify(r)),o=et(JSON.stringify(e)),a=`${n}.${o}`,i=On({key:t,format:"jwk"}),c=Tn("SHA256",Buffer.from(a),{key:i,dsaEncoding:"ieee-p1363"}).toString("base64url");return`${a}.${c}`}function et(r){return Buffer.from(r,"utf-8").toString("base64url")}function nt(r){let e=new Map;return async(t,n,o="GET")=>{if(!r)return fetch(t,{method:o});let a=await r.getCredential(n);if(!a?.accessToken)return fetch(t,{method:o});U(a)&&console.warn(` Warning: Access token for '${n}' is expired. Run 'kanonak login ${n}' to re-authenticate.`);let i={};if(a.dpopKeyPair){let c=e.get(n);try{let u=B(a.dpopKeyPair.privateKey,a.dpopKeyPair.publicKey,o,t,a.accessToken,c);i.Authorization=`DPoP ${a.accessToken}`,i.DPoP=u}catch(u){let d=u instanceof Error?u.message:String(u);console.error(` Error: Failed to create DPoP proof for '${n}': ${d}
|
|
98
|
+
The stored key pair may be corrupted. Run 'kanonak login ${n}' to re-authenticate.`),i.Authorization=`Bearer ${a.accessToken}`}}else i.Authorization=`Bearer ${a.accessToken}`;let s=await fetch(t,{method:o,headers:i});if(s.status===401&&a.dpopKeyPair){let c=s.headers.get("DPoP-Nonce");if(c){e.set(n,c);try{let u=B(a.dpopKeyPair.privateKey,a.dpopKeyPair.publicKey,o,t,a.accessToken,c);i.DPoP=u,s=await fetch(t,{method:o,headers:i})}catch{}}}return s}}import{readFileSync as _n,writeFileSync as Ln,existsSync as Fn}from"fs";import{createHash as Mn}from"crypto";import ot from"js-yaml";var at="kanonak.lock",Hn=`# This file is generated by Kanonak CLI. Do not edit manually.
|
|
99
|
+
`;function it(r=at){if(!Fn(r))return null;let e=_n(r,"utf-8"),t=ot.load(e);return!t||typeof t!="object"||t.version!=="1"?null:{version:"1",lastUpdated:t.lastUpdated??new Date().toISOString(),packages:t.packages??{}}}function st(r,e=at){r.lastUpdated=new Date().toISOString();let t={};for(let o of Object.keys(r.packages).sort())t[o]=r.packages[o];r.packages=t;let n=ot.dump(r,{lineWidth:-1,sortKeys:!1,quotingType:'"'});Ln(e,Hn+n,"utf-8")}function ct(r){return`sha256:${Mn("sha256").update(r).digest("hex")}`}import*as Ie from"js-yaml";import{createHash as zn}from"crypto";var ut="1",lt=new TextEncoder;function dt(r,e){let t=lt.encode(r),n=lt.encode(e),o=Math.min(t.length,n.length);for(let a=0;a<o;a++)if(t[a]!==n[a])return t[a]-n[a];return t.length-n.length}function xe(r){let e=[];for(let n of r)n instanceof f&&e.push(Wn(n));return e.sort((n,o)=>dt(n.uri,o.uri)),JSON.stringify({subjects:e})}function Q(r){let e=xe(r);return`sha256:${zn("sha256").update(e,"utf8").digest("hex")}`}function Wn(r){let e=Xn(r),t=Ke(r.statement);return{uri:e,statements:t}}function Ke(r){let e=[];for(let t of r){let n=Gn(t);n&&e.push(n)}return e.sort((t,n)=>dt(t.predicate,n.predicate)),e}function Gn(r){let e=Zn(r);if(!e)return;let t=Jn(r);if(t)return Yn(e,t)}function Jn(r){if(r instanceof le&&r.carrier)return{type:"typed",carrier:r.carrier,value:ge(r.carrier,r.lexical??String(r.object))};if(r instanceof ue)return{type:"string",value:r.object};if(r instanceof de)return{type:"number",value:yt(r.object)};if(r instanceof pe)return{type:"boolean",value:r.object};if(r instanceof me)return{type:"ref",value:mt(r.object)};if(r instanceof fe){let e=r.object;return pt(e)}if(r instanceof ye)return{type:"list",items:r.object.map(qn)}}function pt(r){let e=Ke(r.statement);return r.name&&r.name.length>0?{type:"embedded",name:r.name,statements:e}:{type:"embedded",statements:e}}function qn(r){if(r instanceof k)return{type:"ref",value:mt(r)};if(r instanceof y)return pt(r);if(r instanceof ce){if(r.carrier)return{type:"typed",carrier:r.carrier,value:ge(r.carrier,r.lexical??String(r.value))};let e=r.value;if(typeof e=="string")return{type:"string",value:e};if(typeof e=="number")return{type:"number",value:yt(e)};if(typeof e=="boolean")return{type:"boolean",value:e}}if(r instanceof se)return{type:"embedded",statements:Ke(r.statement)};throw new Error(`canonicalForm: list item of unrecognized kind (${r.constructor?.name??typeof r}); add canonicalization support before hashing data that contains it`)}function Yn(r,e){switch(e.type){case"string":return{predicate:r,type:"string",value:e.value};case"number":return{predicate:r,type:"number",value:e.value};case"boolean":return{predicate:r,type:"boolean",value:e.value};case"typed":return{predicate:r,type:"typed",carrier:e.carrier,value:e.value};case"ref":return{predicate:r,type:"ref",value:e.value};case"embedded":return e.name!==void 0?{predicate:r,type:"embedded",name:e.name,statements:e.statements}:{predicate:r,type:"embedded",statements:e.statements};case"list":return{predicate:r,type:"list",items:e.items}}}function Zn(r){let e=r.predicate;if(e)return ft(e.subject)}function Xn(r){let e=r.namespace??"",t=r.name??"";return`${e}/${t}`}function mt(r){return ft(r.subject)}function ft(r){let e=r.version;return e&&typeof e.major=="number"?`${r.publisher}/${r.package_}@${e.major}.${e.minor}.${e.patch}/${r.name}`:`${r.publisher}/${r.package_}/${r.name}`}function yt(r){if(Number.isNaN(r))throw new Error("canonicalForm: NaN cannot be canonicalized");if(!Number.isFinite(r))throw new Error("canonicalForm: \xB1Infinity cannot be canonicalized");return Object.is(r,-0)?"0":String(r)}import{VersionOperator as gt}from"@kanonak-protocol/types/document/models/enums";var Qn="0.0.0",P=class{constructor(e,t=new S,n){this.repository=e;this.parser=t;this.objectParser=n??new C(this.parser)}repository;parser;objectParser;imports(){return new A}serializeValue(e,t){return bt(e,t)}async buildContentAddressed(e){let t=e.book.toImports(),n=await this.hashBody(e.publisher,t,e.body),o=$e(n),a={type:"EphemeralPackage",publisher:e.publisher,imports:t};e.contentHashProperty&&(a[e.contentHashProperty]=n),Object.assign(a,e.header??{}),a.imports=t;let i={[o]:a,...e.body},s=this.dump(i);return{yaml:s,byteCount:kt(s),contentHash:n,packageName:o,publisher:e.publisher,resourceCount:Object.keys(e.body).length}}async buildNamed(e){let t=e.book.toImports(),n={type:e.type??"Package",publisher:e.publisher,version:e.version,imports:t},o;e.contentHashProperty&&(o=await this.hashBody(e.publisher,t,e.body),n[e.contentHashProperty]=o),Object.assign(n,e.header??{}),n.imports=t;let a={[e.name]:n,...e.body},i=this.dump(a),s={yaml:i,byteCount:kt(i),packageName:e.name,publisher:e.publisher,resourceCount:Object.keys(e.body).length};return o!==void 0&&(s.contentHash=o),s}dump(e){return Ie.dump(e,{lineWidth:-1})}async hashBody(e,t,n){let o={[ht]:{type:"EphemeralPackage",publisher:e,imports:t},...n},a=this.parser.parse(Ie.dump(o,{lineWidth:-1})),i=a.metadata.namespace_?.toString(),c=(await this.objectParser.parseKanonaks(new _e(a,this.repository))).filter(u=>u instanceof f&&u.namespace===i&&u.name!==ht);for(let u of c)u.namespace="ephemeral";return Q(c)}},ht="__pkgbuilder_probe__";function kt(r){return new TextEncoder().encode(r).length}function $e(r){let e="sha256:",t=r.startsWith(e)?e.length:0;return`q-${r.slice(t,t+16)}`}var A=class{byKey=new Map;aliases=new Set;ensure(e,t,n,o,a=gt.Major){let i=`${e}/${t}@${n}`,s=this.byKey.get(i);if(s)return s.alias;let c=this.uniqueAlias(o);return this.byKey.set(i,{publisher:e,package_:t,version:n,alias:c,match:a}),c}ref(e){if(!e.version||typeof e.version.major!="number")throw new Error(`Cannot serialize a reference to ${e.publisher}/${e.package_}/${e.name} without a version.`);return`${this.ensure(e.publisher,e.package_,h(e.version),e.package_)}.${e.name}`}refLatest(e,t,n,o){return`${this.ensure(e,t,Qn,o??t,gt.Any)}.${n}`}toImports(){let e=new Map;for(let n of this.byKey.values()){let o=e.get(n.publisher)??[];o.push(n),e.set(n.publisher,o)}return[...e.keys()].sort().map(n=>({publisher:n,packages:e.get(n).sort((o,a)=>o.package_<a.package_?-1:1).map(o=>({package:o.package_,match:ie(o.match),version:o.version,alias:o.alias}))}))}uniqueAlias(e){let t=V(e)||"pkg",n=t,o=2;for(;this.aliases.has(n);)n=`${t}${o++}`;return this.aliases.add(n),n}};function bt(r,e){if(r!=null){if(typeof r=="string"||typeof r=="number"||typeof r=="boolean")return r;if(r instanceof k)return e.ref(r.subject);if(Array.isArray(r)){let t=r.map(n=>bt(n,e)).filter(n=>n!==void 0);return t.length>0?t:void 0}if(r instanceof y)throw new Error("Embedded values are not yet supported by PackageBuilder. Produce a literal or a reference, or compose the embedded shape into the output class.");if(eo(r))throw new Error(`Value produced a bare URI without a version (${r.publisher}/${r.package_}/${r.name}); cannot serialize it as a reference.`)}}function V(r){return r.replace(/[^A-Za-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")}function eo(r){return typeof r=="object"&&r!==null&&typeof r.publisher=="string"&&typeof r.package_=="string"&&typeof r.name=="string"}var ee=class{constructor(e){this.producers=e}producers;produced=new Map;producerFor(e,t){return this.producers.find(n=>n.canProduce(e,t))}async produceCached(e,t,n,o){let a=`${t}/${n}@${h(o)}`,i=this.produced.get(a);if(i)return i;let{document:s}=await e.produce(t,n,o);return this.produced.set(a,s),s}async getHighestCompatibleVersionAsync(e,t){let n=this.producerFor(e,t.packageName);if(!n)return null;let o={operator:t.versionOperator,version:t.version},a=await n.resolveVersion(e,t.packageName,o);return a?this.produceCached(n,e,t.packageName,a):null}async getDocumentAsync(e){let t;try{t=ke(e)}catch{return null}if(t.kind!=="package"||!t.version)return null;let n=this.producerFor(t.publisher,t.package_);return n?this.produceCached(n,t.publisher,t.package_,t.version):null}async getDocumentsByNamespaceAsync(e,t){return Array.from(this.produced.values()).filter(n=>{let o=n.metadata.namespace_;return o!=null&&o.publisher===e&&o.package_===t})}async getAllDocumentsAsync(){return Array.from(this.produced.values())}async saveDocumentAsync(e,t){throw new Error("ProducerRepository is read-only: a producer is a source, not a store.")}async deleteDocumentAsync(e){throw new Error("ProducerRepository is read-only: a producer is a source, not a store.")}async clearNamespaceAsync(e,t){throw new Error("ProducerRepository is read-only: a producer is a source, not a store.")}async getAllDocumentReferencesAsync(){return[]}async getDocumentContentAsync(e){return null}async getDocumentUriAsync(e){return null}};var je={async authorize(){return{allowed:!0}}},Be={async record(){}},O=class extends Error{constructor(t,n){let o=`${t.publisher}/${t.package_}${t.version?`@${t.version.major}.${t.version.minor}.${t.version.patch}`:""}`;super(`Not entitled to produce ${o}${n?`: ${n}`:""}`);this.address=t;this.reason=n;this.name="EntitlementDeniedError"}address;reason},te=class{inner;ctx;policy;meter;constructor(e,t,n=je,o=Be){this.inner=e,this.ctx=t,this.policy=n,this.meter=o}canProduce(e,t){return this.inner.canProduce(e,t)}async resolveVersion(e,t,n){return await this.assertAllowed({publisher:e,package_:t,version:n.version}),this.inner.resolveVersion(e,t,n)}async produce(e,t,n){let o={publisher:e,package_:t,version:n};await this.assertAllowed(o);let a=await this.inner.produce(e,t,n);return await this.meter.record(this.ctx,o,a),a}async assertAllowed(e){let t=await this.policy.authorize(this.ctx,e);if(!t.allowed)throw new O(e,t.reason)}};var p="kanonak.org",m="view",Pt="core-kanonak",to={publisher:p,package_:m,name:"rootView"},ro={publisher:p,package_:m,name:"bind"},no={publisher:p,package_:m,name:"produces"},oo={publisher:p,package_:m,name:"projections"},ao={publisher:p,package_:m,name:"where"},io={publisher:p,package_:m,name:"value"},so={publisher:p,package_:m,name:"as"},re=class{constructor(e,t=new S){this.repository=e;this.parser=t;this.objectParser=new C(this.parser),this.builder=new P(this.repository,this.parser,this.objectParser)}repository;parser;objectParser;builder;async materialize(e,t={}){let n=await this.objectParser.parseKanonaks(this.repository),o=this.resolveView(n,e),a=E(o,ro);if(!a)throw new Error(`View ${o.namespace}/${o.name} declares no view.bind; cannot materialize.`);let i=E(o,no);if(!i)throw new Error(`View ${o.namespace}/${o.name} is a selection view (no view.produces). In-graph materialization of selection views is not yet supported \u2014 declare a view.produces output class to reshape the result.`);let s=co(o),c=wt(n,p,Pt),u=wt(n,p,m),d=this.builder.imports(),ne=d.ensure(p,Pt,c,"ck"),Rt=d.ensure(p,m,u,"v"),Ct=d.ref(i),Et=new Me(this.repository,this.parser,this.objectParser),Ae=new Le(Et,n),vt=this.readProjections(n,o),xt=po(o,ao),Kt=this.findInstances(n,a,await this.reason(t)),Ve={},It=new Set;for(let D of Kt){if(!await this.passesWhere(Ae,n,xt,D))continue;let ae={type:Ct};for(let De of vt){let $t=await this.evaluateValue(Ae,n,De.value,D),Ne=this.builder.serializeValue(St($t),d);Ne!==void 0&&(ae[d.ref(De.as)]=Ne)}let Oe=g(D);Oe&&(ae[`${Rt}.derivedFrom`]=d.ref(Oe)),Ve[this.rowName(D,It)]=ae}let oe={};t.resolvedAt&&(oe[`${ne}.resolvedAt`]=t.resolvedAt),t.invocationId&&(oe[`${ne}.id`]=t.invocationId);let w=await this.builder.buildContentAddressed({publisher:s,book:d,body:Ve,contentHashProperty:`${ne}.contentHash`,header:oe});return{yaml:w.yaml,contentHash:w.contentHash,packageName:w.packageName,publisher:w.publisher,rowCount:w.resourceCount}}resolveView(e,t){let n=T(e,t);if(!n)throw new Error(`View ${t.publisher}/${t.package_}/${t.name} not found in the catalog.`);let o=E(n,to);if(o){let a=T(e,o);if(!a)throw new Error(`ViewPackage ${t.name} names rootView ${o.name}, which is not in the catalog.`);return a}return n}readProjections(e,t){let n=[];for(let o of Pe(t,oo)){let a=o instanceof y?o:o instanceof k?T(e,o.subject):void 0;if(!a)continue;let i=be(a,io),s=E(a,so);i&&s&&n.push({value:i,as:s})}return n}async reason(e){return new he({profile:e.reasoningProfile??"owl-rl-classification"}).reason(this.repository)}findInstances(e,t,n){let o=uo(e),a=[],i=new Set;for(let s of n.getInstancesOfClass(t)){if(i.has(s))continue;i.add(s);let c=o.get(s);c&&a.push(c)}return a.sort((s,c)=>{let u=R(g(s)),d=R(g(c));return u<d?-1:u>d?1:0}),a}async passesWhere(e,t,n,o){for(let a of n){let i=await this.evaluateValue(e,t,a,o);if(!mo(i))return!1}return!0}async evaluateValue(e,t,n,o){let a=Fe(n,"view-projection",{catalog:t,depth:0}),i=new Map([["input",o]]);return e.evaluate(a,i)}rowName(e,t){let n=V(e.name)||"row",o=n,a=2;for(;t.has(o);)o=`${n}-${a++}`;return t.add(o),o}};function St(r){return we(r)?r.value:Array.isArray(r)?r.map(St):r}function co(r){let e=g(r);if(!e)throw new Error(`Could not derive a publisher from view ${r.namespace}/${r.name}.`);return e.publisher}function wt(r,e,t){let n=lo(r,e,t);if(!n)throw new Error(`Package ${e}/${t} is not in the catalog; it must be importable to materialize a view.`);return n}function lo(r,e,t){let n;for(let o of r){if(!(o instanceof f))continue;let a=g(o);!a||a.publisher!==e||a.package_!==t||!a.version||(!n||N(a.version,n)>0)&&(n=a.version)}return n?h(n):void 0}function uo(r){let e=new Map,t=new Map;for(let n of r){if(!(n instanceof f))continue;let o=g(n);if(!o||!o.version)continue;let a=R(o),i=t.get(a);(!i||N(o.version,i)>0)&&(t.set(a,o.version),e.set(a,n))}return e}function po(r,e){let t=be(r,e);return t?[t]:Pe(r,e).filter(n=>n instanceof y)}function mo(r){return r===!0?!0:r===!1||r===void 0||r===null?!1:typeof r=="string"?r.length>0:typeof r=="number"?r!==0:we(r)?r.value.length>0:Array.isArray(r)?r.length>0:!!r}export{Zr as AmbiguousReferenceRule,pe as BooleanStatement,ut as CANONICAL_FORM_VERSION,Te as Carrier,nn as ClassDefinitionRule,Fr as ClassHierarchyCycleRule,Lt as CompositeKanonakDocumentRepository,X as CredentialStore,se as DefinedKanonak,qr as DefinitionPropertyReferenceRule,_t as DocumentLocation,dr as EdgeType,y as EmbeddedKanonak,Ur as EmbeddedKanonakTypeRule,fe as EmbeddedStatement,O as EntitlementDeniedError,te as EntitlementProducer,Ut as FileSystemKanonakDocumentRepository,hr as GitIgnoreFilter,pr as GraphBuilder,Gt as HttpKanonakDocumentRepository,A as ImportBook,_r as ImportExistenceRule,Tt as InMemoryKanonakDocumentRepository,Jr as InstancePropertyReferenceRule,Zt as Kanonak,br as KanonakDocumentPositions,C as KanonakObjectParser,an as KanonakObjectValidator,S as KanonakParser,Xt as KanonakUri,Sr as KanonakUriBuilder,Cr as KanonakUrlResolver,ir as KanonakVocabulary,ye as ListStatement,ce as LiteralKanonak,Jt as LocalFirstRepository,ln as LookRenderer,on as MarkdownLinkRule,er as MarkdownStatement,Gr as NamespaceImportCycleRule,Or as NamespacePrefixRule,ur as NodeType,de as NumberStatement,yr as OWL_RL_CLASSIFICATION_RULES,Qr as ObjectPropertyImportRule,en as ObjectPropertyValueValidationRule,Br as OntologyValidationError,$r as OntologyValidationResult,P as PackageBuilder,ee as ProducerRepository,tn as PropertyDomainRule,Mr as PropertyHierarchyCycleRule,kr as PropertyMetadata,Xr as PropertyRangeReferenceRule,Hr as PropertyRangeRequiredRule,Nr as PropertyTypeSpecificityRule,rn as PropertyValueTypeRule,Ht as PublisherConfigResolver,zt as PublisherIndex,fr as RDFS_RULES,he as Reasoner,gr as ReasoningResult,k as ReferenceKanonak,me as ReferenceStatement,Mt as RepositoryFactory,Dr as ResourceNamingRule,tr as ResourceResolver,lr as ResourceTypeClassifier,le as ScalarStatement,Qt as Statement,ue as StringStatement,zr as SubClassOfReferenceRule,Wr as SubPropertyOfReferenceRule,f as SubjectKanonak,Tr as SubjectKanonakTypeRequiredRule,mr as TripleStore,rr as TypeResolver,Lr as UnresolvedReferenceRule,Vr as ValidationCache,Ar as ValidationContext,jr as ValidationSeverity,hi as VersionOperator,re as ViewMaterializer,Yr as XsdImportRule,je as allowAllPolicy,Wt as assertPackageIdentity,Yt as buildLocalFirstRepository,un as buildOntologyModel,xe as canonicalForm,Q as canonicalHash,Ue as carrierOf,qt as collectKanonakFiles,N as compareVersions,ct as computeIntegrity,$e as contentAddressedName,Kr as contextTypesOf,nt as createAuthenticatedFetch,B as createDPoPProof,At as createVersion,cr as extractMarkdownLinks,sn as findDerivation,Ir as findInstancesByType,sr as findMalformedReferences,wr as findMarkdownLinkAt,Rr as formatKanonakAddress,h as formatVersion,tt as generateDPoPKeyPair,Ft as getGlobalCachePath,_ as hasValidToken,Ot as isCompatibleVersion,U as isExpired,Dt as isMajorCompatible,it as loadLockFile,nr as makeUriKey,Be as noopMeter,l as normalizeHost,ke as parseKanonakAddress,Vt as parseVersionString,Pr as parseWithPositions,Nt as pickHighestDocument,vr as propertiesInScope,cn as resolveDisplayValue,xr as resolvePropertyStep,V as sanitizeName,st as saveLockFile,rt as serverSupportsDPoP,g as subjectUri,Er as superClassChain,or as tripleKey,R as uriKey,ar as uriTriple,jt as versionOperatorFromChar,ie as versionOperatorToChar,Bt as versionsEqual};
|
package/dist/parsing/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as c,b as d,c as e,d as f}from"../chunk-
|
|
1
|
+
import{a as c,b as d,c as e,d as f}from"../chunk-JSHJ4ZDB.js";import{i as b}from"../chunk-CEFXZIHB.js";import{a}from"../chunk-ZYAABYDS.js";import"../chunk-XYEY6HUC.js";import"../chunk-T3JR2SV6.js";import"../chunk-FUUTGGJS.js";import"../chunk-2ACBWC7K.js";export{d as KanonakDocumentPositions,b as KanonakObjectParser,a as KanonakParser,c as PropertyMetadata,f as findMarkdownLinkAt,e as parseWithPositions};
|
package/dist/reasoning/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as g,b as h,c as i,d as j,e as k}from"../chunk-
|
|
1
|
+
import{a as g,b as h,c as i,d as j,e as k}from"../chunk-O27W3OKK.js";import"../chunk-CEFXZIHB.js";import"../chunk-ZYAABYDS.js";import{d as a,e as b,f as c,h as d,i as e,j as f}from"../chunk-XYEY6HUC.js";import"../chunk-T3JR2SV6.js";import"../chunk-FUUTGGJS.js";import"../chunk-2ACBWC7K.js";export{f as KanonakVocabulary,i as OWL_RL_CLASSIFICATION_RULES,h as RDFS_RULES,k as Reasoner,j as ReasoningResult,g as TripleStore,e as canonicalizeBuiltinUri,b as makeUriKey,c as tripleKey,a as uriKey,d as uriTriple};
|
package/dist/search/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as g}from"../chunk-
|
|
1
|
+
import{a as g}from"../chunk-JE4ZJ3OB.js";import"../chunk-QHABFCRC.js";import"../chunk-4NO7MHS7.js";import"../chunk-PEUTCG3B.js";import"../chunk-PEJALHXK.js";import"../chunk-SC5M74NM.js";import"../chunk-SHDHMKMJ.js";import"../chunk-CEFXZIHB.js";import"../chunk-ZYAABYDS.js";import{d as m,h as S}from"../chunk-NC3FSY3R.js";import{a as p,f as E}from"../chunk-PBNVHBS3.js";import"../chunk-XYEY6HUC.js";import{c as v}from"../chunk-T3JR2SV6.js";import"../chunk-FUUTGGJS.js";import{c as x}from"../chunk-2ACBWC7K.js";import{homedir as P}from"os";import{join as d}from"path";import{existsSync as M,mkdirSync as D,readFileSync as j,writeFileSync as O}from"fs";import{createHash as C}from"crypto";import{pathToFileURL as B}from"url";var h="Xenova/all-MiniLM-L6-v2",w="q8",b=32;async function F(r){let{pipeline:e,env:t}=r.transformers;t.cacheDir=r.modelCacheDir??d(P(),".kanonak","models");let n=await e("feature-extraction",h,{dtype:w});return async s=>(await n(s,{pooling:"mean",normalize:!0})).tolist()}async function z(r){let e=d(r,"node_modules","@huggingface","transformers"),t=JSON.parse(j(d(e,"package.json"),"utf-8")),n=I(t);if(!n)throw new Error(`@huggingface/transformers at ${e} exposes no resolvable ESM entry.`);let s=await import(B(d(e,n)).href);return typeof s.pipeline=="function"?s:s.default}function I(r){let e=r.exports,t=n=>typeof n=="string"?n:n?.default;return typeof e=="string"?e:t(e?.node?.import)??t(e?.import)??t(e?.default)??r.module??r.main}var y=null;async function U(){return y||(y=(async()=>{let r;try{r=await import("@huggingface/transformers")}catch(e){throw new Error(`Semantic search requires the embedding runtime, which is an optional dependency.
|
|
2
2
|
Install it with:
|
|
3
3
|
npm install @huggingface/transformers
|
|
4
4
|
(underlying import error: ${e.message})`)}return F({transformers:r})})()),y}function H(r,e){let t=0;for(let n=0;n<r.length;n++)t+=r[n]*e[n];return t}function R(r,e){return e?r.version?e.version?x(r.version,e.version)>0:!0:!1:!0}function K(r,e){let t=g(r,e),n=[t.label],s=S(e);if(s.length>0){let i=E(r,s[0]),a=i?g(r,i).label:s[0].name;a&&n.push(`\u2014 a ${a}.`)}return t.summary&&n.push(t.summary),n.join(" ")}function q(r){let e=new Map;for(let t of r){if(!(t instanceof v))continue;let n=m(t);if(!n)continue;let s=p(n),i=e.get(s);(!i||R(n,m(i)))&&e.set(s,t)}return[...e.values()].sort((t,n)=>{let s=m(t)?p(m(t)):t.name,i=m(n)?p(m(n)):n.name;return s.localeCompare(i)})}var k=class{entries=[];embedder;constructor(e={}){this.embedder=e.embedder}resolveEmbedder(){return this.embedder?Promise.resolve(this.embedder):U()}get size(){return this.entries.length}async build(e,t={}){let n=q(e);if(t.include&&(n=n.filter(t.include)),n.length===0)return this.entries=[],{size:0,cached:!1};let s=n.map(o=>K(e,o)),i=t.cacheDir,a;if(i){let o=C("sha256").update(h+"|"+w+`
|
package/dist/server/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{j as E}from"../chunk-
|
|
1
|
+
import{j as E}from"../chunk-JE4ZJ3OB.js";import"../chunk-QHABFCRC.js";import{a as Z,d as A,f as te,g as N}from"../chunk-YWUKDEZA.js";import{a as ee,b as re,c as V,d as I}from"../chunk-YCV4H6H5.js";import{a as X}from"../chunk-4NO7MHS7.js";import"../chunk-PEUTCG3B.js";import{a as oe}from"../chunk-PEJALHXK.js";import"../chunk-SC5M74NM.js";import"../chunk-SHDHMKMJ.js";import{i as L}from"../chunk-CEFXZIHB.js";import{a as D}from"../chunk-ZYAABYDS.js";import{b as O}from"../chunk-NC3FSY3R.js";import"../chunk-PBNVHBS3.js";import"../chunk-XYEY6HUC.js";import{c as ne}from"../chunk-T3JR2SV6.js";import"../chunk-FUUTGGJS.js";import{c as F,e as z,f as K,g as Q}from"../chunk-2ACBWC7K.js";import{readFileSync as ue,existsSync as de,readdirSync as me,writeFileSync as ge,mkdirSync as fe}from"fs";import{join as q}from"path";function se(n){let e=n.metadata?.namespace_;return e?`${e.publisher}/${e.package_}`:void 0}async function M(n,e){let t=new Set,r=[...n];for(;r.length>0;){let o=r.shift(),i=se(o);if(!i||t.has(i))continue;t.add(i);let d=o.metadata?.imports;if(d)for(let[c,f]of Object.entries(d))for(let g of f)try{let l=await e.getHighestCompatibleVersionAsync(c,g);l&&r.push(l)}catch{}}return t}var j=class{constructor(e,t){this.inner=e;this.scope=t}inner;scope;async getAllDocumentsAsync(){return(await this.inner.getAllDocumentsAsync()).filter(t=>{let r=se(t);return r!==void 0&&this.scope.has(r)})}getDocumentAsync(e){return this.inner.getDocumentAsync(e)}getDocumentsByNamespaceAsync(e,t){return this.inner.getDocumentsByNamespaceAsync(e,t)}getHighestCompatibleVersionAsync(e,t){return this.inner.getHighestCompatibleVersionAsync(e,t)}saveDocumentAsync(e,t){return this.inner.saveDocumentAsync(e,t)}deleteDocumentAsync(e){return this.inner.deleteDocumentAsync(e)}clearNamespaceAsync(e,t){return this.inner.clearNamespaceAsync(e,t)}getAllDocumentReferencesAsync(){return this.inner.getAllDocumentReferencesAsync()}getDocumentContentAsync(e){return this.inner.getDocumentContentAsync(e)}getDocumentUriAsync(e){return this.inner.getDocumentUriAsync(e)}};var ae=[{publisher:"kanonak.org",package_:"core-kanonak"},{publisher:"kanonak.org",package_:"site"},{publisher:"kanonak.org",package_:"link"},{publisher:"kanonak.org",package_:"look-tokens"},{publisher:"kanonak.org",package_:"look-styles"},{publisher:"kanonak.org",package_:"look"},{publisher:"kanonak.org",package_:"universal-look"}];function C(n){let e=n?.render;if(e&&e.length>0){let t=[];for(let r of e)try{let o=O(r);o.kind==="package"?t.push({publisher:o.publisher,package_:o.package_}):o.kind==="resource"&&t.push({publisher:o.uri.publisher,package_:o.uri.package_})}catch{}if(t.length>0)return t}return ae}function H(n){return`${n.publisher}/${n.package_}`}function B(n){let{publisher:e,availablePublishers:t,catalog:r,lookRenderer:o,localNamespaces:i,rawByNsKey:d,producers:c}=n,f=new Map,g=new Map,l=new Map,a=new Set;for(let m of r){if(!(m instanceof ne))continue;let y=m.namespace||"";if(!i.has(y))continue;f.set(`${y}/${m.name}`,m);let v=y.split("/")[1]??"",[x,p]=v.split("@");if(!x||!p)continue;let b=Q(p);b&&(a.has(v)||(a.add(v),g.has(x)||g.set(x,[]),g.get(x).push({verStr:p,version:b})),m.name===x&&l.set(v,m))}for(let m of g.values())m.sort((y,v)=>F(v.version,y.version));return{publisher:e,availablePublishers:t,catalog:r,lookRenderer:o,localNamespaces:i,rawByNsKey:d,bySubject:f,pkgVersions:g,pkgSelfByVer:l,...c?{producers:c}:{}}}async function T(n,e={}){let t=new D,r=new X(t),o=[],i=[];for(let p of N(n)){let b;try{b=ue(p,"utf-8")}catch{continue}let w;try{w=t.parse(b).metadata?.namespace_}catch{continue}if(!w?.version)continue;let $=w.version;i.push({publisher:w.publisher,package_:w.package_,verStr:`${$.major}.${$.minor}.${$.patch}`,version:$,source:b})}i.sort((p,b)=>F(b.version,p.version));for(let p of i)await r.saveDocumentAsync(t.parse(p.source),`${p.publisher}/${p.package_}@${p.verStr}`),o.push({publisher:p.publisher,package_:p.package_,verStr:p.verStr,source:p.source});let d=[...new Set(o.map(p=>p.publisher))].sort(),c=e.publisher;if(c){if(!d.includes(c))throw new Error(`Publisher "${c}" not found in workspace. Available: ${d.join(", ")||"(none)"}`)}else if(d.length===1)c=d[0];else throw d.length===0?new Error(`No Kanonak packages found under ${n}`):new Error(`Workspace has multiple publishers (${d.join(", ")}). Pass --publisher <domain> to choose which one to serve.`);let f=new Set,g=new Map;for(let p of o)p.publisher===c&&(f.add(`${p.publisher}/${p.package_}@${p.verStr}`),g.set(`${p.package_}@${p.verStr}`,p.source));let l=new Z(A(),!0,t),a=e.repository??new te(r,l,new I(e.httpCache?{getFromCache:e.httpCache.getFromCache,onFetch:e.httpCache.onFetch}:void 0)),m=C(void 0);if(!e.repository){let p=A(),b=s=>{let h=q(p,s);return de(h)?new Set(me(h).filter(k=>k.endsWith(".kan.yml")).map(k=>k.split("@")[0])):new Set},w=(s,h)=>o.some(k=>k.publisher===s&&k.package_===h),$=new V,u=new Map;for(let s of m)if(u.has(s.publisher)||u.set(s.publisher,b(s.publisher)),!(u.get(s.publisher).has(s.package_)||w(s.publisher,s.package_)))try{let h=await $.getHighestVersion(s.publisher,s.package_);if(!h)continue;let k=await $.getPackageUrl(s.publisher,s.package_,h),_=await fetch(k);if(!_.ok)continue;let le=await _.text(),J=q(p,s.publisher);fe(J,{recursive:!0}),ge(q(J,`${s.package_}@${h}.kan.yml`),le,"utf-8")}catch{}}let y=a;if(!e.repository){let p=(await r.getAllDocumentsAsync()).filter(w=>w.metadata.namespace_?.publisher===c),b=await M(p,a);for(let w of m)b.add(H(w));y=new j(a,b)}let v=await new L(t).parseKanonaks(y),x=new E(v);return B({publisher:c,availablePublishers:d,catalog:v,lookRenderer:x,localNamespaces:f,rawByNsKey:g})}import{existsSync as he,readFileSync as ke,writeFileSync as ye,mkdirSync as ve}from"fs";import{join as ie}from"path";async function U(n,e={}){let t=new D,r=O(n),o=r.kind==="resource"?r.uri.publisher:r.publisher,i=e.cacheRoot??A(),d=(u,s,h)=>ie(i,u,`${s}@${h}.kan.yml`),c=new I({getFromCache:(u,s,h)=>{let k=d(u,s,h);return he(k)?ke(k,"utf-8"):null},onFetch:(u,s,h,k)=>{let _=ie(i,u);ve(_,{recursive:!0}),ye(d(u,s,h),k,"utf-8")},...e.fetchFn?{fetchFn:e.fetchFn}:{}}),f=new V(e.fetchFn?{fetchFn:e.fetchFn}:void 0),g;if(r.kind==="resource"){let u=r.uri.version;g=[u?{package_:r.uri.package_,version:`${u.major}.${u.minor}.${u.patch}`}:{package_:r.uri.package_}]}else if(r.kind==="package"){let u=r.version;g=[u?{package_:r.package_,version:`${u.major}.${u.minor}.${u.patch}`}:{package_:r.package_}]}else g=(await f.listLatestPackages(o)).map(s=>({package_:s.packageName}));let l=async(u,s,h)=>{try{let k=h?t.buildImport(s,"=",h,u):t.buildImport(s,"*","0.0.0",u);return await c.getHighestCompatibleVersionAsync(u,k)}catch{return null}},a=[];for(let u of g){let s=await l(o,u.package_,u.version);s&&a.push(s)}if(a.length===0)throw new Error(`Could not fetch any package for address "${n}" from publisher "${o}".`);let m=await new re().getConfig(o).catch(()=>{}),y=[];for(let u of C(m)){let s=await l(u.publisher,u.package_,void 0);s&&y.push(s)}let v=await M([...a,...y],c),x=new j(c,v),p=await new L(t).parseKanonaks(x),b=new E(p),w=new Set,$=new Map;for(let u of await c.getAllDocumentsAsync()){let s=u.metadata.namespace_;if(!s||s.publisher!==o)continue;let h=`${s.version.major}.${s.version.minor}.${s.version.patch}`,k=`${s.publisher}/${s.package_}@${h}`;w.add(k);let _=await c.getDocumentContentAsync(k);_!==null&&$.set(`${s.package_}@${h}`,_)}return B({publisher:o,availablePublishers:[o],catalog:p,lookRenderer:b,localNamespaces:w,rawByNsKey:$})}import{VersionOperator as W}from"@kanonak-protocol/types/document/models/enums";var S={".html":"text/html; charset=utf-8",".css":"text/css; charset=utf-8",".svg":"image/svg+xml",".md":"text/markdown; charset=utf-8",".kan.yml":"application/yaml; charset=utf-8",".txt":"text/plain; charset=utf-8",".json":"application/json; charset=utf-8"},R=(n,e,t,r)=>({status:n,headers:{"Content-Type":e,...r||{}},body:t}),P=n=>R(404,S[".html"],`<!doctype html><meta charset=utf-8><title>404</title><h1>404</h1><p>Not found: ${n}</p>`),be=n=>({status:301,headers:{Location:n},body:""}),we=n=>({status:302,headers:{Location:n},body:""});function Se(n){switch(n.kind){case"exact":return{operator:W.Exact,version:K(n.major,n.minor,n.patch)};case"minor-pin":return{operator:W.Compatible,version:K(n.major,n.minor,0)};case"major-pin":return{operator:W.Major,version:K(n.major,0,0)};default:return{operator:W.Any,version:K(0,0,0)}}}async function Re(n,e,t,r){if(!r)return null;let o=n.producers?.find(f=>f.canProduce(n.publisher,e));if(!o)return null;let i=await o.resolveVersion(n.publisher,e,Se(t));if(!i)return null;let d=z(i);if(t.kind!=="exact")return we(`/${e}/${d}.kan.yml`);let{source:c}=await o.produce(n.publisher,e,i);return R(200,S[".kan.yml"],c)}function ce(n,e,t){let r=n.pkgVersions.get(e);if(!r||r.length===0)return null;switch(t.kind){case"any":return r[0].verStr;case"major-pin":return r.find(o=>o.version.major===t.major)?.verStr??null;case"minor-pin":return r.find(o=>o.version.major===t.major&&o.version.minor===t.minor)?.verStr??null;case"exact":return r.find(o=>o.version.major===t.major&&o.version.minor===t.minor&&o.version.patch===t.patch)?.verStr??null;default:return null}}async function G(n,e,t=""){let{lookRenderer:r,publisher:o}=n;if(e==="/.well-known/kanonak.json"){let a=ee(o);return n.producers&&n.producers.length>0&&(a.resolveByRedirect=!0),R(200,S[".json"],JSON.stringify(a,null,2))}if(e==="/index.txt"){let a=[...n.localNamespaces].map(m=>m.split("/")[1].replace("@","/")).sort();return R(200,S[".txt"],a.join(`
|
|
2
2
|
`)+`
|
|
3
3
|
`)}if(e==="/"||e==="/index.html"||e==="/index.css"){let a=r.publisherSubject(o);return e==="/index.css"?R(200,S[".css"],r.renderStylesheet(a)):R(200,S[".html"],await r.renderDocument(a,{rootIndex:!0}))}let i=".html",d=!1,c=e;for(let a of[".kan.yml",".css",".svg",".md",".html"])if(e.endsWith(a)){i=a,d=!0,c=e.slice(0,-a.length);break}let f=!d&&/application\/yaml|text\/yaml/i.test(t),g=c.endsWith("/");g&&c!=="/"&&(c=c.slice(0,-1));let l=oe.parse(c,o);if(!l)return P(e);if(l.kind==="package"){let a=ce(n,l.package_,l.versionSpec);if(!a)return await Re(n,l.package_,l.versionSpec,i===".kan.yml"||f)??P(e);if(i===".kan.yml"||f){let v=n.rawByNsKey.get(`${l.package_}@${a}`);return v!==void 0?R(200,S[".kan.yml"],v):P(e)}let m=n.pkgSelfByVer.get(`${l.package_}@${a}`);if(!m)return P(e);if(i===".css")return R(200,S[".css"],r.renderStylesheet(m));if(!g)return be(c+"/");let y=l.versionSpec.kind==="any";if(y&&!r.hasDeclaredView(m)){let v=(n.pkgVersions.get(l.package_)||[]).map(x=>x.verStr);return R(200,S[".html"],r.renderPackageVersionList(l.package_,v,m))}return R(200,S[".html"],await r.renderDocument(m,y?{bareOverview:!0}:void 0))}if(l.kind==="resource"){let a=ce(n,l.package_,l.versionSpec);if(!a)return P(e);let m=n.bySubject.get(`${o}/${l.package_}@${a}/${l.name}`);if(!m)return P(e);switch(i){case".css":return R(200,S[".css"],r.renderStylesheet(m));case".svg":return R(200,S[".svg"],await r.renderSvg(m));case".md":{let y=r.renderRawMarkdown(m);return y===void 0?P(e):R(200,S[".md"],y)}default:return R(200,S[".html"],await r.renderDocument(m))}}return P(e)}import{readFileSync as xe}from"fs";var Y=class{constructor(e={}){this.options=e}options;models=new Map;workspaceIndex;clearCache(){this.models.clear(),this.workspaceIndex=void 0}getWorkspaceIndex(){if(this.workspaceIndex)return this.workspaceIndex;let e=new Set,t=new Set;if(this.options.root!==void 0){let r=new D;for(let o of N(this.options.root))try{let i=r.parse(xe(o,"utf-8")).metadata?.namespace_;if(!i?.version)continue;let d=i.version;e.add(`${i.publisher}/${i.package_}@${d.major}.${d.minor}.${d.patch}`),t.add(`${i.publisher}/${i.package_}`)}catch{}}return this.workspaceIndex={exact:e,pkgs:t},this.workspaceIndex}async modelFor(e,t,r){let o=this.getWorkspaceIndex(),i=this.options.fetchFn?{fetchFn:this.options.fetchFn}:{},d=t?r?o.exact.has(`${e}/${t}@${r}`):o.pkgs.has(`${e}/${t}`):[...o.pkgs].some(a=>a.startsWith(`${e}/`)),c,f;if(d&&this.options.root!==void 0){let a=this.options.root;c=`ws:${e}`,f=()=>T(a,{publisher:e})}else{let a=t?r?`${e}/${t}@${r}`:`${e}/${t}`:e;c=`rm:${a}`,f=()=>U(a,i)}let g=this.models.get(c);if(g)return g;let l=await f();return l.lookRenderer.setLinkMode("open-world"),this.models.set(c,l),l}async handle(e,t=""){let r=e.split("/").filter(Boolean);if(r.length===0)return{status:200,headers:{"Content-Type":"text/html; charset=utf-8"},body:pe()};let o=r[0];if(!o.includes("."))return{status:404,headers:{"Content-Type":"text/html; charset=utf-8"},body:"<!doctype html><meta charset=utf-8><title>404</title><h1>404</h1><p>Expected a publisher domain as the first path segment: <code>/{publisher}/{package}/{version}/{resource}</code></p>"};let i=r.length>=2&&(r[1]==="index.html"||r[1]==="index.css"||r[1]==="index.txt"||r[1]===".well-known"),d=!i&&r.length>=2?r[1]:void 0,c=!i&&r.length>=3&&/^\d+\.\d+\.\d+$/.test(r[2])?r[2]:void 0,f=await this.modelFor(o,d,c),g=e.endsWith("/")&&r.length>1?"/":"",l="/"+r.slice(1).join("/")+g,a=await G(f,l,t);return a.headers.Location?{...a,headers:{...a.headers,Location:`/${o}${a.headers.Location}`}}:a}};function pe(){return'<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Kanonak origin</title></head><body style="font-family:system-ui;max-width:40rem;margin:4rem auto;padding:0 1rem"><h1>Kanonak request-driven origin</h1><p>Open a resource by its address:</p><p><code>/{publisher}/{package}/{version}/{resource}</code></p><p>e.g. <code>/kanonak.org/capabilities/2.0.0/Capability</code></p></body></html>'}export{j as ClosureScopedRepository,Y as RequestRouter,ae as UNIVERSAL_RENDER_BASE,M as deriveImportClosure,pe as landingPage,U as loadResourceModel,T as loadServerModel,H as renderRefKey,C as resolveRenderContract,G as route};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as Y,c as An,d as Sn,e as ce,f as Te,g as O,h as wn,i as X,j as q}from"../chunk-
|
|
1
|
+
import{b as Y,c as An,d as Sn,e as ce,f as Te,g as O,h as wn,i as X,j as q}from"../chunk-JE4ZJ3OB.js";import{a as se}from"../chunk-HJQGBT7M.js";import"../chunk-QHABFCRC.js";import"../chunk-4NO7MHS7.js";import"../chunk-JSHJ4ZDB.js";import"../chunk-PEJALHXK.js";import{a as kn,b as bn,c as hn,d as Dn}from"../chunk-SHDHMKMJ.js";import{i as ie}from"../chunk-CEFXZIHB.js";import{a as ae}from"../chunk-ZYAABYDS.js";import{b as L,c as A,f as S}from"../chunk-PBNVHBS3.js";import"../chunk-XYEY6HUC.js";import{b as N,c as D,d as K,g as M,h as P,i as F,j as W,l as H}from"../chunk-T3JR2SV6.js";import"../chunk-FUUTGGJS.js";import{g as oe}from"../chunk-2ACBWC7K.js";var $e="kanonak.org",Ue="document-ast",i=e=>({publisher:$e,package_:Ue,name:e}),m={Document:i("Document"),Block:i("Block"),Inline:i("Inline"),StructuredValue:i("StructuredValue"),Heading:i("Heading"),Paragraph:i("Paragraph"),RawBlock:i("RawBlock"),Text:i("Text"),StructuredMap:i("StructuredMap"),StructuredEntry:i("StructuredEntry"),StructuredList:i("StructuredList"),StringScalar:i("StringScalar"),IntegerScalar:i("IntegerScalar"),EscapeHint:i("EscapeHint"),MediaType:i("MediaType"),metadata:i("metadata"),children:i("children"),level:i("level"),inlines:i("inlines"),text:i("text"),entries:i("entries"),key:i("key"),value:i("value"),escapeHint:i("escapeHint"),items:i("items"),stringValue:i("stringValue"),integerValue:i("integerValue"),rawContent:i("rawContent"),mediaType:i("mediaType"),mimeType:i("mimeType"),ESC_RAW:i("esc-raw"),ESC_YAML_SAFE:i("esc-yaml-safe"),ESC_TOML_STRING:i("esc-toml-string"),ESC_TOML_MULTILINE:i("esc-toml-multiline"),ESC_JSON:i("esc-json"),ESC_DYNAMODB_BOOL:i("esc-dynamodb-bool"),ESC_DYNAMODB_NUMBER:i("esc-dynamodb-number"),ESC_DYNAMODB_NULL:i("esc-dynamodb-null"),TEXT_PLAIN:i("text-plain"),TEXT_MARKDOWN:i("text-markdown"),TEXT_HTML:i("text-html"),TEXT_CSS:i("text-css"),APPLICATION_JSON:i("application-json"),TEXT_YAML:i("text-yaml"),IMAGE_SVG_XML:i("image-svg-xml"),ResourceLink:i("ResourceLink"),target:i("target"),linkLabel:i("linkLabel"),PropertyList:i("PropertyList"),propertyEntries:i("propertyEntries"),PropertyEntry:i("PropertyEntry"),propertyKey:i("propertyKey"),propertyValue:i("propertyValue"),Table:i("Table"),tableColumnLabels:i("tableColumnLabels"),tableRows:i("tableRows"),TableRow:i("TableRow"),tableCells:i("tableCells")};function ue(e,n){return e.publisher===n.publisher&&e.package_===n.package_&&e.name===n.name}var j=class{backendUri="kanonak.org/transformations/markdown-with-frontmatter";render(n,t){let r=xe(n.metadata,t),o=Le(n.children),s=["---",...r,"---","",o].join(`
|
|
2
2
|
`);return t?.trailingNewline&&(s.endsWith(`
|
|
3
3
|
`)||(s+=`
|
|
4
4
|
`)),s}};function xe(e,n){if(!e)return[];let t=new Map;for(let c of e.entries)t.set(I(c.key),c);let r=new Map;if(n?.metadataRenames)for(let[c,u]of n.metadataRenames)r.set(I(c),u);let a=(n?.metadataKeys??e.entries.map(c=>c.key)).map(I),s=[];for(let c of a){let u=t.get(c);if(!u)continue;let f=r.get(c),l=I(f??c),d=me(u.value,u.escapeHint);d!==void 0&&s.push(`${l}: ${d}`)}return s}function I(e){let n=e.lastIndexOf(".");return n===-1?e:e.substring(n+1)||e}function me(e,n){switch(e.kind){case"StringScalar":return Ve(e.stringValue,n);case"IntegerScalar":return String(e.integerValue);case"StructuredList":{let t=[];for(let r of e.items){let o=me(r,n);o!==void 0&&t.push(o)}return t.join(", ")}case"StructuredMap":return;default:return}}function Ve(e,n){return!n||ue(n,m.ESC_RAW)?e:ue(n,m.ESC_YAML_SAFE)?ve(e):e}function ve(e){return e.includes(`
|
package/dist/validation/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A,B,C,D,E,F,G,H,K as I,L as J,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}from"../chunk-
|
|
1
|
+
import{A,B,C,D,E,F,G,H,K as I,L as J,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}from"../chunk-5DXJ5B5T.js";import"../chunk-SHDHMKMJ.js";import"../chunk-CEFXZIHB.js";import"../chunk-ZYAABYDS.js";import"../chunk-NC3FSY3R.js";import"../chunk-PBNVHBS3.js";import"../chunk-XYEY6HUC.js";import"../chunk-T3JR2SV6.js";import"../chunk-FUUTGGJS.js";import"../chunk-2ACBWC7K.js";export{v as AmbiguousReferenceRule,B as ClassDefinitionRule,m as ClassHierarchyCycleRule,t as DefinitionPropertyReferenceRule,I as DiamondNameClashRule,D as DisplayLensScopeRule,j as EmbeddedKanonakTypeRule,k as ImportExistenceRule,s as InstancePropertyReferenceRule,J as KanonakObjectValidator,E as LookSemanticSvgPathRule,C as MarkdownLinkRule,r as NamespaceImportCycleRule,f as NamespacePrefixRule,x as ObjectPropertyImportRule,y as ObjectPropertyValueValidationRule,c as OntologyValidationError,a as OntologyValidationResult,H as OwlOneOfRule,z as PropertyDomainRule,n as PropertyHierarchyCycleRule,w as PropertyRangeReferenceRule,o as PropertyRangeRequiredRule,h as PropertyTypeSpecificityRule,A as PropertyValueTypeRule,g as ResourceNamingRule,G as ShaclShapeRule,p as SubClassOfReferenceRule,q as SubPropertyOfReferenceRule,i as SubjectKanonakTypeRequiredRule,F as TxExpressionPathRule,l as UnresolvedReferenceRule,e as ValidationCache,d as ValidationContext,b as ValidationSeverity,u as XsdImportRule};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kanonak-protocol/sdk",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.2.0",
|
|
4
4
|
"description": "TypeScript SDK for the Kanonak Protocol — parse, resolve, validate, reason over, and render .kan.yml packages.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
"yaml-parser"
|
|
127
127
|
],
|
|
128
128
|
"dependencies": {
|
|
129
|
-
"@kanonak-protocol/types": "^4.
|
|
129
|
+
"@kanonak-protocol/types": "^4.2.0",
|
|
130
130
|
"ignore": "^7.0.5",
|
|
131
131
|
"js-yaml": "^4.1.0",
|
|
132
132
|
"yaml": "^2.7.0"
|
package/dist/chunk-VNKX52D5.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{I as W,J as X}from"./chunk-V3YPCUA6.js";import{b as B,c as V,w}from"./chunk-WUAKDYY6.js";import{a as b,d as K,e as q,f as z}from"./chunk-NC3FSY3R.js";import{a as D,f as E,h as F,j as N,k as Y,m as v}from"./chunk-PBNVHBS3.js";import{c as G,d as x}from"./chunk-T3JR2SV6.js";import{a as L}from"./chunk-FUUTGGJS.js";import{d as U}from"./chunk-2ACBWC7K.js";var Q=(t=>(t.Class="Class",t.DatatypeProperty="DatatypeProperty",t.ObjectProperty="ObjectProperty",t.AnnotationProperty="AnnotationProperty",t.Instance="Instance",t.Datatype="Datatype",t.Unknown="Unknown",t))(Q||{}),Z=(p=>(p.InstanceOf="instanceOf",p.SubClassOf="subClassOf",p.Domain="domain",p.Range="range",p.ObjectRelationship="objectRelationship",p.SubPropertyOf="subPropertyOf",p.PropertyValue="propertyValue",p.EmbeddedLink="embeddedLink",p))(Z||{}),I=class{static async buildFromRepository(e){let a=await new w().parseKanonaks(e),o=await e.getAllDocumentsAsync(),s=[],i=[],t=new Set,p=new Set,g=new Map;for(let u of a){let l=u;l.name&&(b.isClassType(l)&&t.add(l.name),(b.isObjectPropertyType(l)||b.isGenericPropertyType(l))&&p.add(l.name))}for(let u of o)for(let[l,f]of Object.entries(u.body))p.has(l)&&f?.range&&typeof f.range=="string"&&g.set(l,f.range);let y=new Map;for(let u of a){let l=u;l.name&&y.set(l.name,l)}for(let u of o){let l=u.metadata.namespace_,f=l?`${l.publisher}/${l.package_}`:"",c=l?.version?`${l.version.major}.${l.version.minor}.${l.version.patch}`:"",d=H(u);for(let[k,m]of Object.entries(u.body)){if(!m||typeof m!="object")continue;let P=y.get(k),h="Unknown";if(P){let T=P;b.isClassType(T)?h="Class":b.isObjectPropertyType(T)?h="ObjectProperty":b.isDatatypePropertyType(T)?h="DatatypeProperty":b.isAnnotationPropertyType(T)?h="AnnotationProperty":b.isDatatypeType(T)?h="Datatype":b.isGenericPropertyType(T)?h="ObjectProperty":b.isInstanceOfKnownClass(T,t)&&(h="Instance")}let j=f&&c?`${f}/${k}@${c}`:k,A={};for(let[T,$]of Object.entries(m))T!=="type"&&(typeof $!="object"||$===null)&&(A[T]=$);s.push({id:j,label:m.label??k,type:h,namespace:f,properties:A}),J(j,m,h,t,p,i,f,c,d),_(j,m,p,g,s,i,f,c,d),ue(j,P,i)}}return{nodes:s,edges:i}}static buildFromDocument(e){let r=[],a=[],o=e.metadata.namespace_,s=o?.version?`${o.version.major}.${o.version.minor}.${o.version.patch}`:"",i=o?`${o.publisher}/${o.package_}`:"",t=new Set,p=new Set,g=new Map,y=H(e);for(let[f,c]of Object.entries(e.body)){let d=c?.type;d&&(pe(d,y)&&t.add(f),ce(d,y)&&(p.add(f),c.range&&typeof c.range=="string"&&g.set(f,c.range)))}for(let[f,c]of Object.entries(e.body)){if(!c||typeof c!="object")continue;let d=c.type,k=le(d,f,t,y),m=i&&s?`${i}/${f}@${s}`:f,P={};for(let[h,j]of Object.entries(c))h!=="type"&&(typeof j!="object"||j===null)&&(P[h]=j);r.push({id:m,label:c.label??f,type:k,namespace:i,properties:P}),J(m,c,k,t,p,a,i,s,y),_(m,c,p,g,r,a,i,s,y)}let u=new Set(r.map(f=>f.id)),l=a.filter(f=>u.has(f.source)&&u.has(f.target));return{nodes:r,edges:l}}};function H(n,e){let r=new Map;if(n.metadata?.imports)for(let[a,o]of Object.entries(n.metadata.imports))for(let s of o){let i=s.alias??s.packageName,t=s.version,p=`${t.major}.${t.minor}.${t.patch}`;r.set(i,{publisher:a,package_:s.packageName,version:p})}return r}var ee={"kanonak.org/core-rdf/Class":"Class","kanonak.org/core-owl/Class":"Class","kanonak.org/core-rdfs/Class":"Class","kanonak.org/core-owl/ObjectProperty":"ObjectProperty","kanonak.org/core-owl/DatatypeProperty":"DatatypeProperty","kanonak.org/core-owl/AnnotationProperty":"AnnotationProperty","kanonak.org/core-rdf/Property":"ObjectProperty","kanonak.org/core-rdfs/Datatype":"Datatype"},ie=new Set(["kanonak.org/core-owl/ObjectProperty","kanonak.org/core-owl/DatatypeProperty","kanonak.org/core-owl/AnnotationProperty","kanonak.org/core-rdf/Property"]);function M(n,e){if(n.includes(".")){let r=n.indexOf("."),a=n.substring(0,r),o=n.substring(r+1),s=e.get(a);if(s)return`${s.publisher}/${s.package_}/${o}`}return null}function pe(n,e){let r=M(n,e);return r?ee[r]==="Class":!1}function ce(n,e){let r=M(n,e);return r?ie.has(r):!1}function le(n,e,r,a){if(!n||n==="Package")return"Unknown";let o=M(n,a);if(o){let i=ee[o];if(i)return i;let t=o.split("/").pop()?.split("@")[0]??"";return r.has(t)?"Instance":"Unknown"}let s=n.split(".").pop()??n;return r.has(s)?"Instance":"Unknown"}var ne=new Set(["type","label","comment","version","publisher","imports","license","match","alias","package"]);function J(n,e,r,a,o,s,i,t,p){let g=e.type,y=e.subClassOf;if(y){let c=Array.isArray(y)?y:[y];for(let d of c)typeof d=="string"&&s.push({source:n,target:O(d,i,t,p),type:"subClassOf",label:"subClassOf"})}let u=e.subPropertyOf;if(u){let c=Array.isArray(u)?u:[u];for(let d of c)typeof d=="string"&&s.push({source:n,target:O(d,i,t,p),type:"subPropertyOf",label:"subPropertyOf"})}if(r==="Instance"&&g){let c=g.split(".").pop()??g;s.push({source:n,target:O(c,i,t,p),type:"instanceOf",label:"type"})}if(r==="Instance")for(let[c,d]of Object.entries(e)){if(ne.has(c)||!o.has(c))continue;let k=Array.isArray(d)?d:[d];for(let m of k)typeof m=="string"&&fe(m)&&s.push({source:n,target:O(m,i,t,p),type:"propertyValue",label:c,propertyId:O(c,i,t,p)})}let l=r==="ObjectProperty"||r==="DatatypeProperty",f=e.domain&&e.range;if((l||f)&&e.domain&&e.range){let c=typeof e.domain=="string"?e.domain:null,d=typeof e.range=="string"?e.range:null;c&&d&&s.push({source:O(c,i,t,p),target:O(d,i,t,p),type:"objectRelationship",label:e.label??n.split("/").pop()??"",propertyId:n})}}function _(n,e,r,a,o,s,i,t,p){for(let[g,y]of Object.entries(e)){if(ne.has(g)||typeof y!="object"||y===null||Array.isArray(y))continue;let u=y,l=`${n}/${g}`,f=a.get(g),c=f?f.split(".").pop()??f:"Unknown",d={};for(let[m,P]of Object.entries(u))(typeof P!="object"||P===null)&&(d[m]=P);o.push({id:l,label:`${c} (embedded)`,type:"Instance",namespace:i,properties:d});let k=i&&t?`${i}/${g}@${t}`:g;s.push({source:n,target:l,type:"propertyValue",label:g,propertyId:r.has(g)?k:void 0}),f&&s.push({source:l,target:O(c,i,t,p),type:"instanceOf",label:"type (inferred)"}),_(l,u,r,a,o,s,i,t,p)}}function ue(n,e,r){let a=e?.statement;if(Array.isArray(a))for(let o of a){if(!(o instanceof V))continue;let s=o.predicate?.subject?.name??"";for(let i of o.links){let t=i.target?.subject;if(!t)continue;let p=t.version,g=p&&typeof p.major=="number"?`@${p.major}.${p.minor}.${p.patch}`:"";r.push({source:n,target:`${t.publisher}/${t.package_}/${t.name}${g}`,type:"embeddedLink",label:s})}}}function fe(n){return!(!n||n.includes(" ")||n.includes(`
|
|
2
|
-
`)||n.startsWith("http://")||n.startsWith("https://")||/^\d{4}-\d{2}/.test(n)||/^\d+(\.\d+)?$/.test(n))}function O(n,e,r,a){if(n.includes("@")&&n.includes("/"))return n;if(n.includes(".")){let o=n.indexOf("."),s=n.substring(0,o),i=n.substring(o+1);if(a){let t=a.get(s);if(t)return`${t.publisher}/${t.package_}/${i}@${t.version}`}return e&&r?`${e}/${i}@${r}`:i}return e&&r?`${e}/${n}@${r}`:n}function de(n){if(!n.expiresAt)return!1;let e=new Date(n.expiresAt),r=300*1e3;return e.getTime()<=Date.now()+r}function Re(n){return!!n.accessToken&&!de(n)}function Se(n){let e=n.replace(/^https?:\/\//,"").replace(/^git:\/\//,"").replace(/\/+$/,"").trim();if(!e)throw new Error("Publisher host cannot be empty");return e}var C="kanonak.org",S="core-rdf",re="core-xsd",te={publisher:C,package_:S,name:"subClassOf"},oe={publisher:C,package_:S,name:"label"},ye={publisher:C,package_:S,name:"comment"},se={publisher:C,package_:"core-owl",name:"oneOf"},ae=n=>n;function ge(n){let e=Y(n,te);if(e)return[e];let r=[];for(let a of v(n,te))a instanceof x&&r.push(a.subject);return r}function me(n,e,r){if(e.publisher===C&&e.package_===S&&e.name==="Literal")return{kind:"datatype",uri:e};let o=E(n,e);if(o){let s=ae(o);if(b.isDatatypeType(s))return{kind:"datatype",uri:e};if(b.isClassType(s))return{kind:"class",uri:K(o)??e,localName:o.name}}return e.publisher===C&&e.package_===re?{kind:"datatype",uri:e}:r==="datatype"?{kind:"datatype",uri:e}:{kind:"class",uri:e,localName:e.name}}function be(n,e,r){if(!e.range)throw new Error(`Property ${e.uri.publisher}/${e.uri.package_}/${e.uri.name} has no rdfs.range; every property must declare a range. Validate the ontology before introspecting it.`);let a=me(n,e.range,e.kind),o=e.kind==="object"?"object":e.kind==="datatype"?"datatype":a.kind==="class"?"object":"datatype";return{uri:e.uri,localName:e.uri.name,kind:o,range:a,...e.label!==void 0?{label:e.label}:{},...e.comment!==void 0?{comment:e.comment}:{},...r??{}}}var R=n=>new L(C,re,n);function ke(n){return typeof n=="boolean"?R("boolean"):typeof n=="number"?Number.isInteger(n)?R("integer"):R("decimal"):R("string")}function he(n,e){let r=[];for(let a of v(e,se))if(a instanceof x){let o=E(n,a.subject),s=(o?K(o):void 0)??a.subject,i=o?N(o,oe):void 0;r.push({kind:"individual",uri:s,localName:s.name,...i!==void 0?{label:i}:{}})}else a instanceof B&&r.push({kind:"literal",value:a.value,datatype:ke(a.value)});return r}function Pe(n,e,r,a){let o=q(n,e),s=D(e);return z(n,e).filter(t=>r?!0:t.domains.some(p=>D(p)===s)).map(t=>be(n,t,X(a,o,t.uri)))}async function Te(n,e,r){let a=n.metadata?.namespace_;if(!a)throw new Error("buildOntologyModel: document has no namespace (publisher/package/version).");let o=r?.includeInherited??!1,s=await new w().parseKanonaks(e),i=W(s),t=[],p=[],g=new Set;for(let y of s){if(!(y instanceof G)||!b.isClassType(ae(y)))continue;let u=K(y);if(!u||u.publisher!==a.publisher||u.package_!==a.package_||u.version&&a.version&&!U(u.version,a.version))continue;let l=D(u);if(g.has(l))continue;g.add(l);let f=ge(y).map(k=>({uri:k,localName:k.name})),c=N(y,oe),d=N(y,ye);t.push({uri:u,localName:u.name,superClasses:f,properties:Pe(s,u,o,i),...c!==void 0?{label:c}:{},...d!==void 0?{comment:d}:{}}),F(y,se)&&p.push({uri:u,localName:u.name,members:he(s,y),...c!==void 0?{label:c}:{},...d!==void 0?{comment:d}:{}})}return{classes:t,enums:p}}export{Q as a,Z as b,I as c,de as d,Re as e,Se as f,Te as g};
|
package/dist/chunk-WUAKDYY6.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as L}from"./chunk-ZYAABYDS.js";import{b as _,c as F,i as C}from"./chunk-XYEY6HUC.js";import{a as U,b as B,c as S,d as b,g as I,h as D,i as T,j as w,k as $,l as j}from"./chunk-T3JR2SV6.js";var k=class extends B{name};var x=class extends U{value;carrier;lexical};var K=class extends I{links=[]};var q=t=>({publisher:"kanonak.org",package_:"core-xsd",name:t}),W=t=>({publisher:"kanonak.org",package_:"core-rdf",name:t}),z=(l=>(l.Integer="integer",l.Decimal="decimal",l.Double="double",l.Float="float",l.Boolean="boolean",l.String="string",l.AnyUri="anyURI",l.LangString="langString",l.DateTime="dateTime",l.Date="date",l.Time="time",l.HexBinary="hexBinary",l.Base64Binary="base64Binary",l))(z||{});function v(t){return`${t.publisher}/${t.package_}/${t.name}`}var J=[["integer","integer"],["long","integer"],["int","integer"],["short","integer"],["byte","integer"],["unsignedLong","integer"],["unsignedInt","integer"],["unsignedShort","integer"],["unsignedByte","integer"],["nonNegativeInteger","integer"],["positiveInteger","integer"],["nonPositiveInteger","integer"],["negativeInteger","integer"],["decimal","decimal"],["double","double"],["float","float"],["boolean","boolean"],["string","string"],["normalizedString","string"],["token","string"],["anyURI","anyURI"],["dateTime","dateTime"],["date","date"],["time","time"],["hexBinary","hexBinary"],["base64Binary","base64Binary"]],Q=new Map(J.map(([t,e])=>[v(q(t)),e])),ee=v(W("langString"));function M(t){let e=v(t);return e===ee?"langString":Q.get(e)}function ne(t){let e=t.trim();if(!/^[+-]?\d+$/.test(e))throw new Error(`canonicalInteger: '${t}' is not a valid xsd:integer lexical`);return BigInt(e.replace(/^\+/,"")).toString()}function te(t){let e=t.trim(),n=/^([+-]?)(\d*)(?:\.(\d*))?$/.exec(e);if(!n||n[2]===""&&(n[3]??"")==="")throw new Error(`canonicalDecimal: '${t}' is not a valid xsd:decimal lexical`);let r=n[1]==="-"?"-":"",a=(n[2]??"").replace(/^0+/,"")||"0",o=(n[3]??"").replace(/0+$/,""),i=o.length>0?`${a}.${o}`:a;return i==="0"?"0":`${r}${i}`}function Y(t,e,n){let r=t.trim();if(r==="NaN")return"NaN";if(r==="INF")return"INF";if(r==="-INF")return"-INF";if(!/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(r))throw new Error(`canonical${n}: '${t}' is not a valid xsd:${n.toLowerCase()} lexical`);let a=e(Number(r));if(!Number.isFinite(a))throw new Error(`canonical${n}: '${t}' is out of the finite range`);return Object.is(a,-0)?"0":String(a)}function re(t){return Y(t,e=>e,"Double")}function ae(t){return Y(t,e=>Math.fround(e),"Float")}function oe(t){let e=t.trim();if(e==="true"||e==="1")return"true";if(e==="false"||e==="0")return"false";throw new Error(`canonicalBoolean: '${t}' is not a valid xsd:boolean lexical`)}function V(t){return t.normalize("NFC")}function ie(t){return t.normalize("NFC")}function Re(t,e){return{value:t.normalize("NFC"),lang:se(e)}}function se(t){let e=t.trim().split("-");if(e.length===0||e[0]==="")throw new Error(`canonicalLanguageTag: '${t}' is not a valid language tag`);return e.map((n,r)=>r===0?n.toLowerCase():n.length===4&&/^[A-Za-z]{4}$/.test(n)?n[0].toUpperCase()+n.slice(1).toLowerCase():n.length===2&&/^[A-Za-z]{2}$/.test(n)?n.toUpperCase():n.toLowerCase()).join("-")}function ce(t){let e=t.trim();if(!/^([0-9A-Fa-f]{2})*$/.test(e))throw new Error(`canonicalHexBinary: '${t}' is not a valid xsd:hexBinary lexical`);return e.toUpperCase()}function fe(t){let e=t.replace(/\s+/g,"");if(!/^[A-Za-z0-9+/]*={0,2}$/.test(e)||e.length%4!==0)throw new Error(`canonicalBase64: '${t}' is not a valid xsd:base64Binary lexical`);return Buffer.from(e,"base64").toString("base64")}var R=t=>t<10?`0${t}`:`${t}`;function P(t){let e=t.startsWith("-"),n=(e?t.slice(1):t).replace(/^0+/,"")||"0",r=n.length<4?n.padStart(4,"0"):n;return`${e?"-":""}${r}`}function Z(t){if(!t)return"";let e=t.replace(/^\./,"").replace(/0+$/,"");return e.length>0?`.${e}`:""}function H(t){return t?t==="Z"||t==="+00:00"||t==="-00:00"?"Z":t:""}function pe(t){return t==="Z"?0:(t[0]==="-"?-1:1)*(Number(t.slice(1,3))*60+Number(t.slice(4,6)))}var ue=/^(-?\d{4,})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(\.\d+)?(Z|[+-]\d{2}:\d{2})?$/,le=/^(-?\d{4,})-(\d{2})-(\d{2})(Z|[+-]\d{2}:\d{2})?$/,me=/^(\d{2}):(\d{2}):(\d{2})(\.\d+)?(Z|[+-]\d{2}:\d{2})?$/;function ge(t){let e=ue.exec(t.trim());if(!e)throw new Error(`canonicalDateTime: '${t}' is not a valid xsd:dateTime lexical`);let[,n,r,a,o,i,s,f,u]=e,g=Z(f);if(!u)return`${P(n)}-${r}-${a}T${o}:${i}:${s}${g}`;let p=new Date(0);p.setUTCFullYear(Number(n),Number(r)-1,Number(a)),p.setUTCHours(Number(o),Number(i),Number(s),0);let c=new Date(p.getTime()-pe(u)*6e4);return`${P(String(c.getUTCFullYear()))}-${R(c.getUTCMonth()+1)}-${R(c.getUTCDate())}T${R(c.getUTCHours())}:${R(c.getUTCMinutes())}:${R(c.getUTCSeconds())}${g}Z`}function de(t){let e=le.exec(t.trim());if(!e)throw new Error(`canonicalDate: '${t}' is not a valid xsd:date lexical`);let[,n,r,a,o]=e;return`${P(n)}-${r}-${a}${H(o)}`}function ye(t){let e=me.exec(t.trim());if(!e)throw new Error(`canonicalTime: '${t}' is not a valid xsd:time lexical`);let[,n,r,a,o,i]=e,s=Z(o),f=n;return n==="24"&&r==="00"&&a==="00"&&s===""&&(f="00"),`${f}:${r}:${a}${s}${H(i)}`}function De(t,e){switch(t){case"integer":return ne(e);case"decimal":return te(e);case"double":return re(e);case"float":return ae(e);case"boolean":return oe(e);case"string":return V(e);case"anyURI":return ie(e);case"langString":return V(e);case"dateTime":return ge(e);case"date":return de(e);case"time":return ye(e);case"hexBinary":return ce(e);case"base64Binary":return fe(e)}}var be=/\[\[([^\[\]\n]+)\]\]/g,ke=/\[\[/g,X=/```[\s\S]*?```|`[^`\n]*`/g;function he(t){let e=[];for(let n of t.matchAll(X))e.push([n.index,n.index+n[0].length]);return e}function Ce(t){if(!t||!t.includes("[["))return[];let e=he(t),n=o=>e.some(([i,s])=>o>=i&&o<s),r=new Set(A(t).map(o=>o.startOffset)),a=[];for(let o of t.matchAll(ke)){let i=o.index;if(n(i)||r.has(i))continue;let s=t.slice(i,i+48).replace(/\s+/g," ").trim();a.push({startOffset:i,snippet:s})}return a}function A(t){if(!t||!t.includes("[["))return[];let e=[];for(let a of t.matchAll(X))e.push([a.index,a.index+a[0].length]);let n=a=>e.some(([o,i])=>a>=o&&a<i),r=[];for(let a of t.matchAll(be)){let o=a.index;if(n(o))continue;let i=a[1],s=i.indexOf("|"),f=(s===-1?i:i.slice(0,s)).trim();if(f.length===0)continue;let u=s===-1?"":i.slice(s+1).trim(),g={reference:f,startOffset:o,endOffset:o+a[0].length};u.length>0&&(g.displayText=u),r.push(g)}return r}var G=class{constructor(e){}async parseKanonaks(e){let n=[],r=await e.getAllDocumentsAsync(),a=new _(e),o=new F(a);for(let p of r){let c=p.metadata.namespace_?.toString()??"";for(let[l,m]of Object.entries(p.body)){let d=new S,y=this.resolveCanonicalEntity(l,p,c);d.namespace=y.namespace,d.name=y.name,d.statement=[];let h=await this.parseStatements(m,p,a,o,e);d.statement.push(...h),n.push(d)}}let i=new Map,s=new Map,f=[];for(let p of n)if(p instanceof S){let c=`${p.namespace}/${p.name}`,l=i.get(c);if(l){let m=s.get(c);for(let d of p.statement){let y=O(d);m.has(y)||(m.add(y),l.statement.push(d))}}else{let m=new Set,d=[];for(let y of p.statement){let h=O(y);m.has(h)||(m.add(h),d.push(y))}p.statement=d,s.set(c,m),i.set(c,p),f.push(p)}}else f.push(p);let u=new Set;for(let p of f)if(p instanceof S){let c=p.namespace||"",l=c.indexOf("/"),m=l>=0?c.slice(0,l):"",d=l>=0?c.slice(l+1):"",y=d.indexOf("@"),h=y>=0?d.slice(0,y):d;u.add(`${m}/${h}/${p.name}`)}let g=p=>u.has(`${p.publisher}/${p.package_}/${p.name}`);for(let p of f)p instanceof S&&this.canonicalizeStatementBuiltins(p.statement,g);return f}canonicalizeStatementBuiltins(e,n){for(let r of e){let a=r.predicate?.subject;if(C(a,n),r instanceof w)r.object instanceof b&&C(r.object.subject,n);else if(r instanceof $)r.object&&this.canonicalizeStatementBuiltins(r.object.statement,n);else if(r instanceof j)for(let o of r.object??[])o instanceof b?C(o.subject,n):o instanceof k&&this.canonicalizeStatementBuiltins(o.statement,n)}}resolveCanonicalEntity(e,n,r){if(!e.includes(".")||!n.metadata?.imports)return{namespace:r,name:e};let a=e.indexOf("."),o=e.substring(0,a),i=e.substring(a+1);for(let[s,f]of Object.entries(n.metadata.imports))for(let u of f)if((u.alias??u.packageName)===o){let p=u.version;return{namespace:`${s}/${u.packageName}@${p.major}.${p.minor}.${p.patch}`,name:i}}return{namespace:r,name:e}}async parseStatements(e,n,r,a,o){let i=[];if(typeof e!="object"||e===null||Array.isArray(e))return i;for(let[s,f]of Object.entries(e))try{let u=await this.getPropertyMetadata(s,n,r,o,a);if(!u)continue;let g=await this.parsePropertyValue(s,f,u,n,r,a,o);g&&i.push(g)}catch(u){throw new Error(`Failed to parse property '${s}': ${u.message}`,{cause:u})}return i}async getPropertyMetadata(e,n,r,a,o){let i=await r.resolveEntityAsync(e,n);if(!i)return;let s=i.entity,f=s.type?.toString()??"",u=f.includes(".")?f.substring(f.lastIndexOf(".")+1):f;if(!new Set(["Property","DatatypeProperty","ObjectProperty","AnnotationProperty"]).has(u))return;let p=o.getPropertyTypeClassification(f),c=s.range?.toString(),l;if(p==="ObjectProperty")l="ObjectProperty";else if(p==="DatatypeProperty")l="DatatypeProperty";else{let y=c&&c.includes(".")?c.substring(c.lastIndexOf(".")+1):c??"";(c?o.isKnownXsdDatatypeName(c):!1)||y==="Literal"?l="DatatypeProperty":l="ObjectProperty"}let m;if(c){let y=n;if(i.isImported&&i.definedInNamespace){if(typeof a.getDocumentAsync!="function")throw new Error(`Cannot resolve the range of imported property '${e}': the parse repository cannot fetch defining document '${i.definedInNamespace}'. Thread the real repository through to embedded-object parsing \u2014 no stub, no fallback.`);let E=await a.getDocumentAsync(i.definedInNamespace);if(!E)throw new Error(`Cannot resolve the range of imported property '${e}': defining document '${i.definedInNamespace}' was not found in the repository.`);y=E}m=(await r.resolveEntityAsync(c,y))?.uri}return{propertyUri:i.uri.toString(),propertyType:l,range:c,rangeUri:m,isImported:i.isImported,definedInNamespace:i.definedInNamespace}}async parsePropertyValue(e,n,r,a,o,i,s){let f=r.propertyUri;if(n!=null){if(Array.isArray(n))return this.parseListValue(f,n,r,a,o,i,s);if(r.propertyType==="DatatypeProperty")return this.parseDatatypeValue(f,n,r,a,o,i);if(r.propertyType==="ObjectProperty")return this.parseObjectValue(f,n,r,a,o,i,s)}}async parseDatatypeValue(e,n,r,a,o,i){let s;if(typeof n=="string"){if(i.isSubstitutableDatatype(r.rangeUri))return await this.parseSubstitutableValue(e,n,a,o);s=n}else if(typeof n=="number"||typeof n=="boolean")s=String(n);else return;return this.typedScalarStatement(e,s,r)}typedScalarStatement(e,n,r){let a=b.parse(e),o=r.rangeUri?M(r.rangeUri):void 0;if(o==="boolean"){let s=new T;return s.predicate=a,s.object=n==="true"||n==="1",s.carrier=o,s.lexical=n,s}if(o==="integer"||o==="decimal"||o==="double"||o==="float"){let s=new D;return s.predicate=a,s.object=Number(n),s.carrier=o,s.lexical=n,s}let i=I.parse(e,n);return o&&(i.carrier=o,i.lexical=n),i}typedListLiteral(e,n){let r=new x,a=n.rangeUri?M(n.rangeUri):void 0;return a==="boolean"?r.value=e==="true"||e==="1":a==="integer"||a==="decimal"||a==="double"||a==="float"?r.value=Number(e):r.value=e,a&&(r.carrier=a,r.lexical=e),r}async parseSubstitutableValue(e,n,r,a){let o=new K;o.predicate=b.parse(e),o.object=n;for(let i of A(n)){let s=await a.resolveEntityAsync(i.reference,r),f;s&&(f=new b,f.subject=s.uri);let u={reference:i.reference,startOffset:i.startOffset,endOffset:i.endOffset};i.displayText!==void 0&&(u.displayText=i.displayText),f!==void 0&&(u.target=f),o.links.push(u)}return o}async parseObjectValue(e,n,r,a,o,i,s){if(typeof n=="string"){let f=await this.resolveReference(n,a,o);if(!f)return;let u=new w;return u.predicate=b.parse(e),u.object=f,u}if(typeof n=="object"&&!Array.isArray(n)){let f=new k;if(f.statement=await this.parseStatements(n,a,o,i,s),f.statement.length>0){let p=new $;return p.predicate=b.parse(e),p.object=f,p}let u=[];for(let[p,c]of Object.entries(n))if(typeof c=="object"&&c!==null&&!Array.isArray(c)){let l=new k;l.name=p,l.statement=await this.parseStatements(c,a,o,i,s),u.push(l)}else if(typeof c=="string"){let l=await this.resolveReference(c,a,o);l&&u.push(l)}if(u.length>0){let p=new j;return p.predicate=b.parse(e),p.object=u,p}let g=new $;return g.predicate=b.parse(e),g.object=f,g}}async parseListValue(e,n,r,a,o,i,s){let f=[],u=r.propertyType==="DatatypeProperty",g=r.rangeUri?.publisher==="kanonak.org"&&r.rangeUri?.package_==="core-rdf"&&r.rangeUri?.name==="List"||!r.rangeUri&&(r.range?.includes(".")?r.range.substring(r.range.lastIndexOf(".")+1):r.range)==="List";for(let c of n){let l=typeof c=="string"||typeof c=="number"||typeof c=="boolean";if(u&&l){let m=typeof c=="string"?c:String(c);f.push(this.typedListLiteral(m,r));continue}if(g&&l){if(typeof c=="string"){let m=await o.resolveEntityAsync(c,a);if(m){let d=new b;d.subject=m.uri,f.push(d)}else{let d=new x;d.value=c,f.push(d)}}else{let m=new x;m.value=c,f.push(m)}continue}if(typeof c=="string"){let m=await this.resolveReference(c,a,o);m&&f.push(m)}else if(typeof c=="object"&&c!==null&&!Array.isArray(c)){let m=new k;m.statement=await this.parseStatements(c,a,o,i,s),f.push(m)}}let p=new j;return p.predicate=b.parse(e),p.object=f,p}async resolveReference(e,n,r){let a=await r.resolveEntityAsync(e,n);if(a){let i=new b;return i.subject=a.uri,i}let o=n.metadata?.namespace_;if(o){let{KanonakUri:i}=await import("./KanonakUri-4VJGV3FN.js"),s=o.version??{major:0,minor:0,patch:0,toString:()=>"0.0.0",equals:()=>!1,getHashCode:()=>0,compareTo:()=>0};if(e.includes(".")){let u=e.indexOf("."),g=e.substring(0,u),p=e.substring(u+1);if(n.metadata?.imports){for(let[c,l]of Object.entries(n.metadata.imports))for(let m of l)if((m.alias??m.packageName)===g){let y=new b;return y.subject=new i(c,m.packageName,p,m.version),y}}}let f=new b;return f.subject=new i(o.publisher,o.package_,e,s),f}return null}async saveKanonaks(e,n){let r=new Map;for(let a of e)a instanceof S&&a.namespace&&(r.has(a.namespace)||r.set(a.namespace,[]),r.get(a.namespace).push(a));for(let[a,o]of r){let i=await this.convertKanonaksToDocument(a,o),s=`${a.split("@")[0]}.yml`;await n.saveDocumentAsync(i,s)}}async serializeToYaml(e,n){let r=e.filter(i=>i instanceof S&&i.namespace===n);if(r.length===0)throw new Error(`No kanonaks found with namespace '${n}'`);let a=await this.convertKanonaksToDocument(n,r);return new L().save(a)}async convertKanonaksToDocument(e,n){let a={metadata:{namespace_:e,get allImports(){if(!this.imports)return[];let i=[];for(let s of Object.values(this.imports))i.push(...s);return i}},body:{}},o=new Map;for(let i of n){let s={};for(let f of i.statement){let[u,g]=this.convertStatementToProperty(f);u&&g!==null&&g!==void 0&&(s[u]=g),this.collectImportsFromStatement(f,e,o)}a.body[i.name]=s}return a}convertStatementToProperty(e){if(e instanceof I)return[e.predicate.subject.name,e.object];if(e instanceof D)return[e.predicate.subject.name,e.object];if(e instanceof T)return[e.predicate.subject.name,e.object];if(e instanceof w)return[e.predicate.subject.name,e.object.subject.name];if(e instanceof j){let n=this.convertKanonakListToValue(e.object);return[e.predicate.subject.name,n]}else if(e instanceof $){let n=this.convertEmbeddedKanonakToValue(e.object);return[e.predicate.subject.name,n]}return[null,null]}convertKanonakListToValue(e){let n=[];for(let r of e)r instanceof b?n.push(r.subject.name):r instanceof k&&n.push(this.convertEmbeddedKanonakToValue(r));return n}convertEmbeddedKanonakToValue(e){let n={};for(let r of e.statement){let[a,o]=this.convertStatementToProperty(r);a&&o!==null&&o!==void 0&&(n[a]=o)}return n}collectImportsFromStatement(e,n,r){}};function O(t){let e=t.predicate?.subject;return(e?`${e.publisher}/${e.package_}/${e.name}`:"?")+"="+Se(t)}function Se(t){return t instanceof K?"m:"+String(t.object):t instanceof I?"s:"+String(t.object):t instanceof D?"n:"+String(t.object):t instanceof T?"b:"+String(t.object):t instanceof w?"r:"+N(t.object):t instanceof $?"e:"+N(t.object):t instanceof j?"l:["+(t.object??[]).map(N).join("|")+"]":"x"}function N(t){if(!t)return"";if(t instanceof b){let e=t.subject;return"R("+(e?`${e.publisher}/${e.package_}/${e.name}`:"")+")"}return t instanceof k?"E("+(t.statement??[]).map(O).join(";")+")":t instanceof x?"L("+String(t.value)+")":"N"}export{k as a,x as b,K as c,z as d,M as e,ne as f,te as g,re as h,ae as i,oe as j,V as k,ie as l,Re as m,se as n,ce as o,fe as p,ge as q,de as r,ye as s,De as t,Ce as u,A as v,G as w};
|