{"_id":"@canonical/ke-graphql","_rev":"20-7466ca7b2355375c5e68a16b50755274","name":"@canonical/ke-graphql","dist-tags":{"latest":"0.43.0","experimental":"0.43.0-experimental.0"},"versions":{"0.27.1-experimental.0":{"name":"@canonical/ke-graphql","version":"0.27.1-experimental.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.27.1-experimental.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"amylily1011","email":"amy.lily@canonical.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"mariadias143","email":"marianovadias@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ando.gq","email":"tom@ando.sh"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma#readme","bugs":{"url":"https://github.com/canonical/pragma/issues"},"dist":{"shasum":"29a259d272c6499fcd05ea576a0caa021c0246c7","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.27.1-experimental.0.tgz","fileCount":222,"integrity":"sha512-AuKvK599ZccdvyadsvoKEN48J+c+J2Ztc0GlvF5uynypsDn/0v6aVJO1v0tAfmkaSRyyYbFpfqGs7qNT78USVA==","signatures":[{"sig":"MEYCIQCIQUKraYbiCxZmgWegtFOFOCoGuWWpJVzbS+S9U+A78gIhAI1Crv5wK4OdBmxyYoqTjlZbgpWbjmrhhFQHKLsLmnK8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":505142},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"152aaadcb37084d7c205bd2648ee99096d46d92a","imports":{"#tbox":{"types":"./dist/types/lib/tbox/index.d.ts","default":"./dist/esm/lib/tbox/index.js","development":"./src/lib/tbox/index.ts"},"#shared":{"types":"./dist/types/lib/shared/index.d.ts","default":"./dist/esm/lib/shared/index.js","development":"./src/lib/shared/index.ts"},"#testing":{"types":"./src/testing/index.ts","default":"./src/testing/index.ts","development":"./src/testing/index.ts"},"#compiler":{"types":"./dist/types/lib/compiler/index.d.ts","default":"./dist/esm/lib/compiler/index.js","development":"./src/lib/compiler/index.ts"},"#resolver":{"types":"./dist/types/lib/resolver/index.d.ts","default":"./dist/esm/lib/resolver/index.js","development":"./src/lib/resolver/index.ts"},"#execution":{"types":"./dist/types/lib/execution/index.d.ts","default":"./dist/esm/lib/execution/index.js","development":"./src/lib/execution/index.ts"},"#hardening":{"types":"./dist/types/lib/hardening/index.d.ts","default":"./dist/esm/lib/hardening/index.js","development":"./src/lib/hardening/index.ts"},"#dataloader":{"types":"./dist/types/lib/dataloader/index.d.ts","default":"./dist/esm/lib/dataloader/index.js","development":"./src/lib/dataloader/index.ts"}},"scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},"repository":{"url":"git+https://github.com/canonical/pragma.git","type":"git"},"_npmVersion":"10.9.2","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"22.15.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^5.9.3","@types/node":"^24.12.0","@canonical/ke":"^0.27.1-experimental.0","@biomejs/biome":"2.4.9","@canonical/biome-config":"^0.27.1-experimental.0","@canonical/webarchitect":"^0.27.1-experimental.0","@canonical/typescript-config":"^0.27.1-experimental.0"},"peerDependencies":{"@canonical/ke":"^0.27.1-experimental.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.27.1-experimental.0_1781617008007_0.9029145944739494","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"@canonical/ke-graphql","version":"0.29.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.29.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"amylily1011","email":"amy.lily@canonical.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ando.gq","email":"tom@ando.sh"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma#readme","bugs":{"url":"https://github.com/canonical/pragma/issues"},"dist":{"shasum":"e22be4c448b151cb3afaeed312d95272c00467ca","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.29.0.tgz","fileCount":223,"integrity":"sha512-a56pjK9RSIhT8Z1vqazcREJJE4ehFBW7+DuO8NoxsBJa5Ka5YIIYSWnxu4HDPJ3Sv6CSDEijfJ8H+InLvY2iPw==","signatures":[{"sig":"MEUCIFhBEFKWjQKXAOVH+ojRMqe051D0JEeaPlkcVXcAlqHzAiEAhJ8y4VkeQ3FbvCanr76nobQvTX9yAjHQ2nzi3gnjZZ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.29.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":512757},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"7c96ac31ff350a3bd099168d249680a8f9632568","imports":{"#tbox":{"types":"./dist/types/lib/tbox/index.d.ts","default":"./dist/esm/lib/tbox/index.js","development":"./src/lib/tbox/index.ts"},"#shared":{"types":"./dist/types/lib/shared/index.d.ts","default":"./dist/esm/lib/shared/index.js","development":"./src/lib/shared/index.ts"},"#testing":{"types":"./src/testing/index.ts","default":"./src/testing/index.ts","development":"./src/testing/index.ts"},"#compiler":{"types":"./dist/types/lib/compiler/index.d.ts","default":"./dist/esm/lib/compiler/index.js","development":"./src/lib/compiler/index.ts"},"#resolver":{"types":"./dist/types/lib/resolver/index.d.ts","default":"./dist/esm/lib/resolver/index.js","development":"./src/lib/resolver/index.ts"},"#execution":{"types":"./dist/types/lib/execution/index.d.ts","default":"./dist/esm/lib/execution/index.js","development":"./src/lib/execution/index.ts"},"#hardening":{"types":"./dist/types/lib/hardening/index.d.ts","default":"./dist/esm/lib/hardening/index.js","development":"./src/lib/hardening/index.ts"},"#dataloader":{"types":"./dist/types/lib/dataloader/index.d.ts","default":"./dist/esm/lib/dataloader/index.js","development":"./src/lib/dataloader/index.ts"}},"scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11c5ed61-1e00-4f5e-83da-9f7ba9675e05"}},"repository":{"url":"git+https://github.com/canonical/pragma.git","type":"git"},"_npmVersion":"lerna/9.0.7/node@v24.18.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"24.18.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^5.9.3","@types/node":"^24.12.0","@canonical/ke":"^0.29.0","@biomejs/biome":"2.4.9","@canonical/biome-config":"^0.29.0","@canonical/webarchitect":"^0.29.0","@canonical/typescript-config":"^0.29.0"},"peerDependencies":{"@canonical/ke":"^0.27.1-experimental.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.29.0_1783100781491_0.8430217297388853","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"name":"@canonical/ke-graphql","version":"0.30.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.30.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"amylily1011","email":"amy.lily@canonical.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ando.gq","email":"tom@ando.sh"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma#readme","bugs":{"url":"https://github.com/canonical/pragma/issues"},"dist":{"shasum":"e2aa596715e17cc97ffd0c7fcf3c6b7af894fa84","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.30.0.tgz","fileCount":223,"integrity":"sha512-4lsc0/Yf/83RjplHp2th0jR9JJwW05kEZWpKyVr0dNUFTuTlWwYkAwkC9nZ9nx8bR9tq60vwjzVjT9vqvzzXdA==","signatures":[{"sig":"MEUCIQDChNiw2RaLReOuT6gmYcOmLpnKuquWJ0cJLTkarMxtoAIgXSO53k/+fiueygK0X2HQ/F4wluDBvgWVSa65fHMDpLE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.30.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":515043},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"40fe86ac955473536ac14f074812a9821f5b65c0","scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11c5ed61-1e00-4f5e-83da-9f7ba9675e05"}},"repository":{"url":"git+https://github.com/canonical/pragma.git","type":"git"},"_npmVersion":"lerna/9.0.7/node@v24.18.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"24.18.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^5.9.3","@types/node":"^24.12.0","@canonical/ke":"^0.30.0","@biomejs/biome":"2.4.9","@canonical/biome-config":"^0.30.0","@canonical/webarchitect":"^0.30.0","@canonical/typescript-config":"^0.30.0"},"peerDependencies":{"@canonical/ke":"^0.29.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.30.0_1783988110268_0.2658771896767089","host":"s3://npm-registry-packages-npm-production"}},"0.31.0":{"name":"@canonical/ke-graphql","version":"0.31.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.31.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"amylily1011","email":"amy.lily@canonical.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ando.gq","email":"tom@ando.sh"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma#readme","bugs":{"url":"https://github.com/canonical/pragma/issues"},"dist":{"shasum":"1e13acd78cde635bc308e2d26b31cf05ddd58bf0","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.31.0.tgz","fileCount":223,"integrity":"sha512-TMKyyUBFQxK0bFF7cpeVYqkipRgSEA9xPF+0fqT3M3eymcX8FaZ5UGybdb7w9lXkc3ojPIeFI3O5BfmyXdsHxg==","signatures":[{"sig":"MEYCIQCfaTRN7gHf2wJnfCnXYM0nn58m+sN4lVEHkjy0VMccCAIhAN+/iCoHAypFVISqFKzAQXaBJVyGqD9U4lPeRI7vKQoD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.31.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":515043},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"d4a67ebe42e62b8cf3de77f42f537309ca88d672","scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11c5ed61-1e00-4f5e-83da-9f7ba9675e05"}},"repository":{"url":"git+https://github.com/canonical/pragma.git","type":"git"},"_npmVersion":"lerna/9.0.7/node@v24.18.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"24.18.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^5.9.3","@types/node":"^24.12.0","@canonical/ke":"^0.31.0","@biomejs/biome":"2.4.9","@canonical/biome-config":"^0.31.0","@canonical/webarchitect":"^0.31.0","@canonical/typescript-config":"^0.31.0"},"peerDependencies":{"@canonical/ke":"^0.30.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.31.0_1784323747061_0.1480532279856719","host":"s3://npm-registry-packages-npm-production"}},"0.32.0":{"name":"@canonical/ke-graphql","version":"0.32.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.32.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"amylily1011","email":"amy.lily@canonical.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ando.gq","email":"tom@ando.sh"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma#readme","bugs":{"url":"https://github.com/canonical/pragma/issues"},"dist":{"shasum":"924e8624ac64b81ec03f3b096e586bf28a86e196","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.32.0.tgz","fileCount":223,"integrity":"sha512-goZS9XPS1jrD2sbEkByGDk+IwwJfrnCDCPumstcf4diIbXVZLRQXA8uc6PTh75A7MRKiE5nNaCmNu0mL6V7K4w==","signatures":[{"sig":"MEYCIQDwou709okltqDVeu7oi3+q027aKenlYNDr9aL0wjhzqgIhANqtjtRXjKi0tptgFJvNU7Z9W0ElnLLtgPFMk6TvVUQ6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.32.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":515043},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"5b279d8150e3988c68c6c2a741046bcd425624ca","scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11c5ed61-1e00-4f5e-83da-9f7ba9675e05"}},"repository":{"url":"git+https://github.com/canonical/pragma.git","type":"git"},"_npmVersion":"lerna/9.0.7/node@v24.18.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"24.18.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^5.9.3","@types/node":"^24.12.0","@canonical/ke":"^0.32.0","@biomejs/biome":"2.4.9","@canonical/biome-config":"^0.32.0","@canonical/webarchitect":"^0.32.0","@canonical/typescript-config":"^0.32.0"},"peerDependencies":{"@canonical/ke":"^0.30.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.32.0_1784542941513_0.26858413710708096","host":"s3://npm-registry-packages-npm-production"}},"0.33.0":{"name":"@canonical/ke-graphql","version":"0.33.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.33.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"amylily1011","email":"amy.lily@canonical.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ando.gq","email":"tom@ando.sh"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma#readme","bugs":{"url":"https://github.com/canonical/pragma/issues"},"dist":{"shasum":"3a83b438f034234bd9dad1dd267a8be3cef89a65","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.33.0.tgz","fileCount":223,"integrity":"sha512-nToTye1MVTOZ8aTk4DPUTjNU6Q7jgeYIy1olYNyCyefuqMzAiYHTOjO9tbghj81l9x9W6E/6zzUUSUVM58FtAQ==","signatures":[{"sig":"MEQCIB5mWArWGIs7FWXVZzESZANKy+rSd9DKTQtD1xXWjvtrAiAbQiwIRAWgMUEQ4QdQnxRJYSkU7DRemUNFfAWEnYSf7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.33.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":515043},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"fca2bc4440fff2d511fc8db6686f9b19222fdbc7","scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11c5ed61-1e00-4f5e-83da-9f7ba9675e05"}},"repository":{"url":"git+https://github.com/canonical/pragma.git","type":"git"},"_npmVersion":"lerna/9.0.7/node@v24.18.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"24.18.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^5.9.3","@types/node":"^24.12.0","@canonical/ke":"^0.33.0","@biomejs/biome":"2.4.9","@canonical/biome-config":"^0.33.0","@canonical/webarchitect":"^0.33.0","@canonical/typescript-config":"^0.33.0"},"peerDependencies":{"@canonical/ke":"^0.30.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.33.0_1784914677049_0.2505164288156416","host":"s3://npm-registry-packages-npm-production"}},"0.34.0":{"name":"@canonical/ke-graphql","version":"0.34.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.34.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"amylily1011","email":"amy.lily@canonical.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ando.gq","email":"tom@ando.sh"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma#readme","bugs":{"url":"https://github.com/canonical/pragma/issues"},"dist":{"shasum":"53ea924ad914932777131d10a99667079b0f5724","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.34.0.tgz","fileCount":223,"integrity":"sha512-s/IXXNZPYM8cjkjLOG/Ngx64yKNo5tJYUzMRXmlpzctB4U6TVmAEmSbz9NYkC68YkQ1pV18VtW1GQKkg2Rf/cg==","signatures":[{"sig":"MEYCIQCPI9MpBEKsC/i6AqPOrjtY2GxI2P7jSOHq0JNPK8F6qAIhALfLKMcfPYawJxLTCn+LcAbf8+VwEEtNu7QsyBpvXvED","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.34.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":515043},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"e8d25fecbe6e70edfc4cb300bad65f691dbbd26e","scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11c5ed61-1e00-4f5e-83da-9f7ba9675e05"}},"repository":{"url":"git+https://github.com/canonical/pragma.git","type":"git"},"_npmVersion":"lerna/9.0.7/node@v24.19.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"24.19.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^5.9.3","@types/node":"^24.12.0","@canonical/ke":"^0.34.0","@biomejs/biome":"2.4.9","@canonical/biome-config":"^0.34.0","@canonical/webarchitect":"^0.34.0","@canonical/typescript-config":"^0.34.0"},"peerDependencies":{"@canonical/ke":"^0.30.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.34.0_1787317083261_0.7130770240744313","host":"s3://npm-registry-packages-npm-production"}},"0.35.0":{"name":"@canonical/ke-graphql","version":"0.35.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.35.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"amylily1011","email":"amy.lily@canonical.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ando.gq","email":"tom@ando.sh"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma#readme","bugs":{"url":"https://github.com/canonical/pragma/issues"},"dist":{"shasum":"267256d95d0c4b784abac6c684acccfb4247f004","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.35.0.tgz","fileCount":223,"integrity":"sha512-oVNn0sVZtRKiH7nTLc9MJOV29TncZ4mYCvu+t7DXyomMCfizLVmKLpwYMwVyGGKyv8zrV+9wV0Vhl7NPrh3JOQ==","signatures":[{"sig":"MEQCIHH+QsCt0fZToK0YWIfHPiuT5YstXV5cXm7zgEhBLMzxAiB24Su/A0bPTR9Bf23RhwJeXtQJx5weU9k2a69cHVXYPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.35.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":515042},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"5198c5399ef657959272c0e35924391573d81146","scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11c5ed61-1e00-4f5e-83da-9f7ba9675e05"}},"repository":{"url":"git+https://github.com/canonical/pragma.git","type":"git"},"_npmVersion":"lerna/9.0.7/node@v24.19.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"24.19.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^5.9.3","@types/node":"^26.0.0","@canonical/ke":"^0.35.0","@biomejs/biome":"2.4.9","@canonical/biome-config":"^0.35.0","@canonical/webarchitect":"^0.35.0","@canonical/typescript-config":"^0.35.0"},"peerDependencies":{"@canonical/ke":"^0.34.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.35.0_1787877256375_0.7235222594804389","host":"s3://npm-registry-packages-npm-production"}},"0.36.0":{"name":"@canonical/ke-graphql","version":"0.36.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.36.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ando.gq","email":"tom@ando.sh"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma#readme","bugs":{"url":"https://github.com/canonical/pragma/issues"},"dist":{"shasum":"ec528fbc749261a98629f8ff6016383bde71c70d","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.36.0.tgz","fileCount":223,"integrity":"sha512-FwmfT6Ur0Uj4OK6Ywve0CeNBIX3cm8kLS6YPgHhI9SWa4On+BODt/xNZTOQyWwHUmOeylKUX/Y6LE7cE+E7JNA==","signatures":[{"sig":"MEYCIQD63/2lOJWBUy6K0rAJmel0WLvdC/p1EzavcF9gCL3F7wIhAMAbp9QuBweN1nNWAEs6Ffep8mKB4pWFYdcKwqY+c7RE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.36.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":515042},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"78eb47ac10104e914eeacd331795e14b832703d4","scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11c5ed61-1e00-4f5e-83da-9f7ba9675e05"}},"repository":{"url":"git+https://github.com/canonical/pragma.git","type":"git"},"_npmVersion":"lerna/9.0.7/node@v24.19.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"24.19.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^5.9.3","@types/node":"^26.0.0","@canonical/ke":"^0.36.0","@biomejs/biome":"2.4.9","@canonical/biome-config":"^0.36.0","@canonical/webarchitect":"^0.36.0","@canonical/typescript-config":"^0.36.0"},"peerDependencies":{"@canonical/ke":"^0.36.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.36.0_1788012112371_0.23507692445453565","host":"s3://npm-registry-packages-npm-production"}},"0.37.0":{"name":"@canonical/ke-graphql","version":"0.37.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.37.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"abbiesims","email":"abbie.sims@canonical.com"},{"name":"ataku_b","email":"atakan99saglam@gmail.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ando.gq","email":"tom@ando.sh"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma#readme","bugs":{"url":"https://github.com/canonical/pragma/issues"},"dist":{"shasum":"0331d29708d87e0b6871cca46f3c92ade2b92615","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.37.0.tgz","fileCount":247,"integrity":"sha512-hZS3utV9j61ilajj4oHkxb2Oiix8dIxi8ESEPvxDQ4htACU1xoPUowLu4jr3Ij4tE+r13DClvqCwwJrH5P3Hdw==","signatures":[{"sig":"MEUCIQC/88EQSEAK4pcJnP4LzF9c0qsQGeq6Fg6+l2DqGuVT7wIgKtxqOM6GrT7fem1N5hB3e8fhrxipx5vrGYN2QfoUxtE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.37.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":708526},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"ac8383bdb4be1bcd6fa6c4960a1e3d78c0279688","scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11c5ed61-1e00-4f5e-83da-9f7ba9675e05"}},"repository":{"url":"git+https://github.com/canonical/pragma.git","type":"git"},"_npmVersion":"lerna/10.0.1/node@v24.19.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"24.19.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^5.9.3","@types/node":"^24.12.0","@canonical/ke":"^0.37.0","@biomejs/biome":"2.4.9","@canonical/biome-config":"^0.37.0","@canonical/webarchitect":"^0.37.0","@canonical/typescript-config":"^0.37.0"},"peerDependencies":{"@canonical/ke":"^0.37.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.37.0_1788345308007_0.24777391711750285","host":"s3://npm-registry-packages-npm-production"}},"0.38.0":{"name":"@canonical/ke-graphql","version":"0.38.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.38.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"abbiesims","email":"abbie.sims@canonical.com"},{"name":"ataku_b","email":"atakan99saglam@gmail.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma#readme","bugs":{"url":"https://github.com/canonical/pragma/issues"},"dist":{"shasum":"eac28288d4e5ad94fd60ed5eca3f7ae1e03b286c","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.38.0.tgz","fileCount":247,"integrity":"sha512-D4uqPuQjkuDsKkorZfMPry7Zibl22xol62qes32uLb1Bzg9oVOxDQYlCF2PCoQ8o8KvPhHrp3r9cm4AwtZvqsw==","signatures":[{"sig":"MEUCIGm6TAvXezgf1TWcQ6ASvDwgkNiPwhR9yyRYf7QDMp8LAiEAqzrdw6v9omG/JvivOVUhVzWjTGkgR6zINn0ORowHSS4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBc7nbUmj5t6RvMZXClDfz/YLxf4bJXGHL3wq2xUN1HTAiEAyr6kxGP+sL5XeLoKEs7nvIOQ/c3TgtCp3seNvW01jtQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.38.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":708318},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"4d10a68a9b299af6fe3d1d7d053e54ca128944ad","scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11c5ed61-1e00-4f5e-83da-9f7ba9675e05"}},"repository":{"url":"git+https://github.com/canonical/pragma.git","type":"git"},"_npmVersion":"lerna/10.0.1/node@v24.20.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"24.20.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^5.9.3","@types/node":"^24.12.0","@canonical/ke":"^0.38.0","@biomejs/biome":"2.5.13","@canonical/biome-config":"^0.38.0","@canonical/webarchitect":"^0.38.0","@canonical/typescript-config":"^0.38.0"},"peerDependencies":{"@canonical/ke":"^0.38.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.38.0_1789573148122_0.4271519808107367","host":"s3://npm-registry-packages-npm-production"}},"0.40.0":{"name":"@canonical/ke-graphql","version":"0.40.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.40.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"abbiesims","email":"abbie.sims@canonical.com"},{"name":"ataku_b","email":"atakan99saglam@gmail.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma#readme","bugs":{"url":"https://github.com/canonical/pragma/issues"},"dist":{"shasum":"8578cbfca8f7ef6f878b868845cebfb279d4c778","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.40.0.tgz","fileCount":247,"integrity":"sha512-Y+Qo0A5GZyDj/3orY/BZTEFKXiJS+e1BYOEGi3KFsR5PaqeWDiuKIYIENYMmIs2Anhzz94zlujkMi40pXGO+JA==","signatures":[{"sig":"MEQCIHbWpEVDIB7leKCVc3Ft7wGyarEjiXHtMeYF/eQ7ZNZKAiBPDoRu57wDERHSf4tm5dOanyBgcXdCqkCT5f5uMYeRzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC12EtXD4VC7VUEdY5Hcp7IIQBy7udHUZ4wR/f1q8qqjwIhANcT3vyLAZvHUxz11gXTfPPgyWBsaPnvatqGyn3dlxir","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.40.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":708318},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"9136b71518260c5f33e7619da087198c931e4c13","scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11c5ed61-1e00-4f5e-83da-9f7ba9675e05"}},"repository":{"url":"git+https://github.com/canonical/pragma.git","type":"git"},"_npmVersion":"lerna/10.0.1/node@v24.20.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"24.20.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^5.9.3","@types/node":"^24.12.0","@canonical/ke":"^0.40.0","@biomejs/biome":"2.5.13","@canonical/biome-config":"^0.40.0","@canonical/webarchitect":"^0.40.0","@canonical/typescript-config":"^0.40.0"},"peerDependencies":{"@canonical/ke":"^0.40.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.40.0_1789941857612_0.003964415471469085","host":"s3://npm-registry-packages-npm-production"}},"0.42.0":{"name":"@canonical/ke-graphql","version":"0.42.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.42.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"abbiesims","email":"abbie.sims@canonical.com"},{"name":"ataku_b","email":"atakan99saglam@gmail.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma#readme","bugs":{"url":"https://github.com/canonical/pragma/issues"},"dist":{"shasum":"bb56bddce4dfa7c68ab326f8338e0cce6265d63a","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.42.0.tgz","fileCount":247,"integrity":"sha512-0Q3bROSCcX307EaH2kP2SXLM1lq184hLGTGftmjnXJlFU3Bv5iIwFzvduJOP3rnun6pGiSSKh9l7pGVwZpvd+w==","signatures":[{"sig":"MEUCIQC1Rc97ptLdiNLfzhnHJCKVDumUxLbHkP3DFtjKnNHZbwIgF/fdCIdyHepcmefORT9p1IUrSzjCkzsRyc3gXCNKYI0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDEax/JJXQBN+lGkPeJJeG/kC9aisxuOHVWiePscK3FEAIgfmQWvHjiMHr3L5yT0/lUdo5ge5sxKRfYUCStAOeXta4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.42.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":708176},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"75c2b17029ba899be3fa645be28290ac6fcb83a9","scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11c5ed61-1e00-4f5e-83da-9f7ba9675e05"}},"repository":{"url":"git+https://github.com/canonical/pragma.git","type":"git"},"_npmVersion":"lerna/10.0.1/node@v24.21.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"24.21.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^7.0.2","@types/node":"^24.12.0","@canonical/ke":"^0.42.0","@biomejs/biome":"2.5.14","@canonical/biome-config":"^0.42.0","@canonical/webarchitect":"^0.42.0","@canonical/typescript-config":"^0.42.0"},"peerDependencies":{"@canonical/ke":"^0.42.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.42.0_1790560961414_0.2940084130578673","host":"s3://npm-registry-packages-npm-production"}},"0.43.0-experimental.0":{"name":"@canonical/ke-graphql","version":"0.43.0-experimental.0","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","_id":"@canonical/ke-graphql@0.43.0-experimental.0","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"abbiesims","email":"abbie.sims@canonical.com"},{"name":"ataku_b","email":"atakan99saglam@gmail.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"homepage":"https://github.com/canonical/pragma-core#readme","bugs":{"url":"https://github.com/canonical/pragma-core/issues"},"dist":{"shasum":"ab40b3966d870ff88026e59facb4b991226450bf","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.43.0-experimental.0.tgz","fileCount":247,"integrity":"sha512-mkURdidSZZSk9pbUHSXqH8a+49avFA8TjbrdaAgvRTcPEwfcig7Wg8YA4T/OVzrfKizyax9OAnw2AEbElGNcRQ==","signatures":[{"sig":"MEYCIQCjnBjh4N6b58K/OpUc3Pv83ngYNKmdNDGwXKUZEi1qnAIhAMFDGG32DxPxjq6il4U/Pm8z9LCNLWVa8efpwEISnO68","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCKTZbFvX64kUGsYcBEL2Hv47V4Cu3QBCPQF/yIKA+85gIgW73SHihvL+aiH3A8/AZrDivYmUel41CHQ6VtEYHoi3g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.43.0-experimental.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":708281},"type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"5c1b1bdbb95844fac6211f1fe6ba10c29238d6ee","scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d5b14a3c-830e-47bc-873b-19bf82fd567d"}},"repository":{"url":"git+https://github.com/canonical/pragma-core.git","type":"git"},"_npmVersion":"lerna/10.0.1/node@v24.21.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"_nodeVersion":"24.21.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^7.0.2","@types/node":"^24.12.0","@canonical/ke":"^0.43.0-experimental.0","@biomejs/biome":"2.5.14","@canonical/biome-config":"^0.43.0-experimental.0","@canonical/webarchitect":"^0.43.0-experimental.0","@canonical/typescript-config":"^0.43.0-experimental.0"},"peerDependencies":{"@canonical/ke":"^0.43.0-experimental.0"},"_npmOperationalInternal":{"tmp":"tmp/ke-graphql_0.43.0-experimental.0_1790649829816_0.19949129324870585","host":"s3://npm-registry-packages-npm-production"}},"0.43.0":{"_id":"@canonical/ke-graphql@0.43.0","bugs":{"url":"https://github.com/canonical/pragma-core/issues"},"dist":{"shasum":"a83b28a422b9220df623c826a99f26b9e8444e2c","tarball":"https://registry.npmjs.org/@canonical/ke-graphql/-/ke-graphql-0.43.0.tgz","fileCount":247,"integrity":"sha512-Pntyrs3eak+dLLQ1r8iQhHIVV17TZ39LOlUj1l0X8ErhI2GHsuUmNNETWlPICFSemfUPfBamHvT3lyZP4J37Og==","signatures":[{"sig":"MEUCIGgTzVQkLbMglyfCwRt+TZWnwAAF9V7nK77QkET3cqQbAiEA354zoZfykc94Px+M2eqqTc0HFJI5n+67XH6M8oFz0kY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICyX+q+X6g61z/fK9VbzegM+7C/4lLQn5n8nOWHUkGA7AiEAk/HAL0ellxgd+/g+zNlSMsjm9pvLAXLKTU9EAEHB2CI="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canonical%2fke-graphql@0.43.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":708206},"name":"@canonical/ke-graphql","type":"module","types":"dist/types/index.d.ts","author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js"},"./http":{"types":"./dist/types/http/index.d.ts","import":"./dist/esm/http/index.js"}},"gitHead":"79f70779057238803359b820183de972b4a1220c","license":"LGPL-3.0","scripts":{"demo":"bun demo/server.ts","test":"bun run test:vitest","bench":"bun run build && node scripts/bench.mjs","build":"bun run build:package","check":"bun run check:biome && bun run check:ts && bun run check:webarchitect","check:ts":"tsc --noEmit","build:all":"bun run build:package","check:fix":"bun run check:biome:fix && bun run check:ts","check:biome":"biome check","test:vitest":"vitest run --coverage","build:package":"bun run build:package:tsc","check:biome:fix":"biome check --write","build:package:tsc":"tsc -p tsconfig.build.json","test:vitest:watch":"vitest","check:webarchitect":"webarchitect library"},"version":"0.43.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d5b14a3c-830e-47bc-873b-19bf82fd567d"}},"homepage":"https://github.com/canonical/pragma-core#readme","repository":{"url":"git+https://github.com/canonical/pragma-core.git","type":"git"},"_npmVersion":"lerna/10.0.1/node@v24.21.0+x64 (linux)","description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","directories":{},"maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"abbiesims","email":"abbie.sims@canonical.com"},{"name":"ataku_b","email":"atakan99saglam@gmail.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"_nodeVersion":"24.21.0","dependencies":{"graphql":"17.0.0-rc.0","dataloader":"^2.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/bun":"^1.3.10","typescript":"^7.0.2","@types/node":"^24.12.0","@canonical/ke":"^0.43.0","@biomejs/biome":"2.5.14","@canonical/biome-config":"^0.43.0","@canonical/webarchitect":"^0.43.0","@canonical/typescript-config":"^0.43.0"},"peerDependencies":{"@canonical/ke":"^0.43.0-experimental.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ke-graphql_0.43.0_1790797616644_0.815512075372095"}}},"time":{"created":"2026-06-16T13:36:47.853Z","modified":"2026-09-30T19:46:57.176Z","0.27.1-experimental.0":"2026-06-16T13:36:48.255Z","0.29.0":"2026-07-03T17:46:21.631Z","0.30.0":"2026-07-14T00:15:10.431Z","0.31.0":"2026-07-17T21:29:07.239Z","0.32.0":"2026-07-20T10:22:21.666Z","0.33.0":"2026-07-24T17:37:57.183Z","0.34.0":"2026-08-21T12:58:03.431Z","0.35.0":"2026-08-28T00:34:16.539Z","0.36.0":"2026-08-29T14:01:52.538Z","0.37.0":"2026-09-02T10:35:08.161Z","0.38.0":"2026-09-16T15:39:08.287Z","0.40.0":"2026-09-20T22:04:17.707Z","0.42.0":"2026-09-28T02:02:41.502Z","0.43.0-experimental.0":"2026-09-29T02:43:49.922Z","0.43.0":"2026-09-30T19:46:56.736Z"},"bugs":{"url":"https://github.com/canonical/pragma-core/issues"},"author":{"name":"Canonical Webteam","email":"webteam@canonical.com"},"license":"LGPL-3.0","homepage":"https://github.com/canonical/pragma-core#readme","repository":{"url":"git+https://github.com/canonical/pragma-core.git","type":"git"},"description":"OWL → GraphQL compiler for the ke triple store: typed IR, seven-pass pipeline, Relay conventions, incremental delivery","maintainers":[{"name":"ilayda21","email":"ilayda.cavusoglupars@canonical.com"},{"name":"frankban","email":"frankban@gmail.com"},{"name":"huwshimi","email":"huw@ikmail.com"},{"name":"anthonydillon","email":"me@anthonydillon.com"},{"name":"steverydz","email":"steverydz@gmail.com"},{"name":"bartaz","email":"bartek.szopka@canonical.com"},{"name":"jpmartinspt","email":"joao.figueiredo.martins@canonical.com"},{"name":"petesfrench","email":"peterfrench94@gmail.com"},{"name":"jmuzina","email":"jmuzina@pm.me"},{"name":"mtruj","email":"mariapaula.trujillo@canonical.com"},{"name":"edlerd","email":"david.edler@canonical.com"},{"name":"abehnia","email":"ardavan.behnia@canonical.com"},{"name":"canonical-organization","email":"is-admin@canonical.com"},{"name":"edisile-canonical","email":"eduard.manta@canonical.com"},{"name":"steciuk-canonical","email":"adam.steciuk@canonical.com"},{"name":"abbiesims","email":"abbie.sims@canonical.com"},{"name":"ataku_b","email":"atakan99saglam@gmail.com"},{"name":"ad.vl","email":"adrian.villa.g@gmail.com"},{"name":"engr-ali","email":"its.muhammad.ali.mughal@gmail.com"},{"name":"ninfa_jeon","email":"urvashi.sharma271099@gmail.com"},{"name":"ndv99","email":"n.devilliers1999@gmail.com"},{"name":"goulin-canonical","email":"goulin.khoge@canonical.com"},{"name":"immortalcodes","email":"21112002mj@gmail.com"},{"name":"alvaromateo","email":"alvaro.mateoalvarez@canonical.com"},{"name":"onibenjo-canonical","email":"benjaminaderopo.oni@canonical.com"}],"readme":"# @canonical/ke-graphql\n\nOWL → GraphQL compiler for the [ke](../ke) triple store. Point it at a loaded store and it reads the ontology — classes, properties, domains and ranges, `subClassOf` chains, cardinality markers, SHACL shapes — and compiles a complete, executable `GraphQLSchema`: types, interfaces, field resolvers, batched data loading, and Relay server conventions. The ontology is the schema definition; there is nothing else to maintain.\n\nIt is a compiler, not a middleware. OWL is not a database schema — a class with no instances should become an interface, an `owl:inverseOf` pair should produce one field per side rather than four, a blank-node-only class can't have a global ID. Mapping that faithfully takes semantic analysis, so the package is built like a compiler: seven passes over a typed intermediate representation, diagnostics with stable codes that never abort on the first problem, and a deterministic output you can snapshot. `docs/architecture.md` is the full design rationale.\n\nLike ke itself, the root export is a library, not a server: schema + resolvers + local execution, nothing that knows HTTP exists. The fetch handler and GraphiQL live behind the `./http` subpath, mirroring `@canonical/ke/http`.\n\n## Installation\n\n```bash\nbun add @canonical/ke-graphql\n```\n\n`graphql` (v17, pinned — see [Incremental delivery](#incremental-delivery-defer)) and `dataloader` come with it; `@canonical/ke` is a peer dependency.\n\n## Quick start\n\nThe compiler runs as a ke plugin: when the store finishes loading, the schema is ready alongside it.\n\n```typescript\nimport { createStore } from \"@canonical/ke\";\nimport { createSchemaPlugin, type SchemaPluginApi } from \"@canonical/ke-graphql\";\nimport { createGraphQLHandler } from \"@canonical/ke-graphql/http\";\n\nconst graphql = createSchemaPlugin();\n\nconst store = await createStore({\n  sources: [\"./ontology.ttl\", \"./data/**/*.ttl\"],\n  prefixes: { lib: \"https://example.org/library/\" }, // display prefixes + the `lib:dune` lookup shorthand\n  plugins: [graphql],\n});\n\nconst { schema, sdl, createContext } = store.api<SchemaPluginApi>(\"ke-graphql\")!;\n\nBun.serve({\n  port: 4000,\n  fetch: createGraphQLHandler(schema, {\n    graphiql: true,\n    context: () => createContext(store),\n  }),\n});\n```\n\nOpen `http://localhost:4000` and GraphiQL is talking to your ontology.\n\n## What gets generated\n\nEverything below is the compiler's actual output for this input — regenerate it any time with `pragma graphql build`.\n\nGiven a small ontology and some data:\n\n```turtle\n@prefix lib: <https://example.org/library/> .\n\nlib:Work a owl:Class .\nlib:Book a owl:Class ; rdfs:subClassOf lib:Work .\nlib:Film a owl:Class ; rdfs:subClassOf lib:Work .\nlib:Author a owl:Class .\nlib:Review a owl:Class .\n\nlib:title     a owl:DatatypeProperty ; rdfs:domain lib:Work   ; rdfs:range xsd:string .\nlib:pageCount a owl:DatatypeProperty ; rdfs:domain lib:Book   ; rdfs:range xsd:integer .\nlib:inPrint   a owl:DatatypeProperty ; rdfs:domain lib:Book   ; rdfs:range xsd:boolean .\nlib:hasAuthor a owl:ObjectProperty   ; rdfs:domain lib:Work   ; rdfs:range lib:Author ;\n              owl:inverseOf lib:authored .\nlib:authored  a owl:ObjectProperty   ; rdfs:domain lib:Author ; rdfs:range lib:Work .\nlib:name      a owl:DatatypeProperty ; rdfs:domain lib:Author ; rdfs:range xsd:string .\nlib:hasReview a owl:ObjectProperty   ; rdfs:domain lib:Work   ; rdfs:range lib:Review .\nlib:rating    a owl:DatatypeProperty ; rdfs:domain lib:Review ; rdfs:range xsd:integer .\nlib:comment   a owl:DatatypeProperty ; rdfs:domain lib:Review ; rdfs:range xsd:string .\n\nlib:dune a lib:Book ;\n  lib:title \"Dune\" ; lib:pageCount 412 ; lib:inPrint \"true\" ;\n  lib:hasAuthor lib:herbert ;\n  lib:hasReview [ a lib:Review ; lib:rating 5 ] .\nlib:herbert a lib:Author ; lib:name \"Frank Herbert\" .\n```\n\nthe compiler emits the following (fields lightly reordered for reading, Relay boilerplate and the TBox types elided — `pragma graphql build` regenerates the full file):\n\n```graphql\n# ke-graphql · canonical SDL\n# graphql-schema-spec: 1\n# provider: unknown\n# mode: annotated\n# validated-store: false\n# revision: 0\n# prefixing: none\n\ninterface Node {           # identity + self-description, and nothing else\n  uri: ID!\n  _meta: EntityMeta!\n}\n\ntype EntityMeta {          # every generic answer lives here, off the data surface\n  curie: String!                         # DISPLAY form of uri (\"lib:dune\") — never an identity\n  title(lang: String = \"en\"): String!    # TOTAL — never null, always renderable\n  label(lang: String = \"en\"): String\n  comment(lang: String = \"en\"): String\n  definition(lang: String = \"en\"): String\n  type: OntologyClass!\n  field(name: String!): ClassProperty\n  fields: [ClassProperty!]!\n}\n\ninterface Work implements Node {\n  uri: ID!\n  _meta: EntityMeta!\n  title: String\n  authors(first: Int, after: String, last: Int, before: String): AuthorConnection!\n  reviews: [Review!]!\n}\n\ntype Book implements Node & Work {\n  uri: ID!                 # the absolute IRI: \"https://example.org/library/dune\"\n  _meta: EntityMeta!\n  title: String\n  pageCount: Int\n  inPrint: Boolean         # data stores \"true\" as a string — the resolver coerces\n  authors(first: Int, after: String, last: Int, before: String): AuthorConnection!\n  reviews: [Review!]!      # plain list — Review instances are blank nodes\n}\n\ntype Author implements Node {\n  uri: ID!\n  _meta: EntityMeta!\n  name: String\n  authoreds(first: Int, after: String, last: Int, before: String): WorkConnection!\n}\n\ntype Review {              # embeddable: no Node, no uri — it lives inside its parent\n  _meta: EntityMeta!       # …but it still knows its own class\n  rating: Int\n  comment: String\n}\n\ntype Query {\n  node(id: ID!): Node\n  book(uri: String!): Book\n  books(first: Int, after: String, last: Int, before: String): BookConnection!\n  author(uri: String!): Author\n  authors(first: Int, after: String, last: Int, before: String): AuthorConnection!\n  film(uri: String!): Film\n  films(first: Int, after: String, last: Int, before: String): FilmConnection!\n  ontologies: [Ontology!]!\n  ontology(prefix: String!): Ontology\n  ontologyClass(uri: String!): OntologyClass\n  ontologyProperty(uri: String!): OntologyProperty\n}\n```\n\nReading the output back against the input shows most of the compiler's rules at once:\n\n- **`Work` became an interface.** It has subclasses and no direct instances, so it's abstract — and because all of its concrete implementors are full entities, the interface itself implements `Node`, which is what lets Relay refetch a fragment written against `Work`. (A class with subclasses *and* direct instances of its own stays a concrete type and earns a `V016` warning: a supertype-typed field can't surface its subclasses' fields. Force it abstract with `{ abstract: true }` when it has no direct instances; the interface-plus-companion-type alternative is a deferred option.)\n- **`hasAuthor` became `authors`.** Field names strip a leading `has`/`is` verb; list fields are pluralized (`category → categories`, `child → children` — the pluralizer knows the irregulars).\n- **`reviews` is a plain list while `authors` is a connection.** `Review` instances are blank nodes: no URI means no global ID, no cursor, no standalone resolution. The compiler marks such classes *embeddable* and resolves them inline from the parent's own triples. Everything URI-addressable gets a paginated Relay connection instead. An embeddable still carries `_meta`, because knowing your own class is a fact about the class, not about identity — and it means a class with zero properties of its own still compiles.\n- **One field per side of the inverse pair, and direction doesn't matter.** `hasAuthor`/`authored` produce `Book.authors` and `Author.authoreds` — never the duplicates. At resolution time each side takes the union of forward and reverse assertions, so data written in either direction answers identically from both ends.\n- **`inPrint: Boolean` works even though the data says `\"true\"`.** Real-world TTL stores booleans as strings; the resolver coerces (`\"true\"/\"false\"/\"1\"/\"0\"`) and reports anything else through the runtime-warning channel instead of crashing the response.\n- **Identity is the absolute IRI**, not an opaque token and not a prefixed form. `uri: ID!` on every node, `node(id: \"https://example.org/library/dune\")`, the loader keys, and the connection cursors are all the same string — one currency, so an `after:` cursor can never quietly miss. The prefixed form survives in exactly two places, neither of them identity-bearing: the singular `book(uri: \"lib:dune\")` lookup ARGUMENT, as a typing convenience, and `_meta.curie`, the DISPLAY form — a string to render, never to store, send back, or compare. `toPrefixed` is exported so a consumer can compute it themselves too.\n- **Everything generic moved behind `_meta`.** `title`/`label`/`comment`/`definition` are `EntityMeta` fields with a `lang` argument, so the whole data surface — every field name except `uri` and `_meta` — belongs to your ontology. `title` is total: it falls through label, then any-language literal, then the IRI local name, so a lens always has something to render.\n\nAbout `authoreds` — that's the pluralizer being mechanically right and ergonomically wrong. Which brings us to:\n\n## Annotation-driven binding: the `graphql:` vocabulary\n\nThe primary transport for projection intent is the ontology itself. Thirteen annotation terms — declared on the class or property they describe and captured by the extractor from any loaded source — bind the same knobs the config once carried, so every consumer of an ontology resolves it identically:\n\n```turtle\n@prefix graphql: <https://pragma.canonical.com/graphql#> .\n\nlib:Book     graphql:name \"Publication\" ;         # verbatim type name\n             graphql:expose true ;                # allowlist member under mode: \"explicit\"\n             graphql:titleFrom lib:heading .      # _meta.title reads lib:heading first\nlib:authored graphql:name \"works\" .               # verbatim field name — never pluralized/prefixed\nlib:hasPublisher graphql:singular true .          # cardinality without owl/SHACL markers\nlib:title    graphql:nonNull true ;               # promote to String!\n             graphql:searchable true .            # search-index membership (IR capture only — see below)\nlib:cites    graphql:inverse lib:citedBy .        # declared pair, same semantics as owl:inverseOf\nlib:Annotation graphql:embeddable true .          # force embedded shape\n<https://example.org/library/> graphql:prefix \"lib\" .  # namespace prefix, ahead of the registered map\n```\n\n> Declare the prefix exactly as above. The extractor matches annotation terms by namespace: assertions under any other IRI — including near-misses like an `http://` form — are ignored without a diagnostic.\n\nThe class-side terms are `name`, `abstract`, `embeddable`, `expose`, and the four descriptive sources `titleFrom`/`labelFrom`/`commentFrom`/`definitionFrom` (nearest ancestor wins — annotate a root class to cover its tree); the property-side terms are `name`, `singular`, `nonNull`, `inverse`, `searchable`; `prefix` targets the namespace or ontology subject. `searchable` is **IR capture only** in this release: it is validated and carried on `OntologyIR.graphql`, and no schema surface reads it — no root field, no connection, no `OntologyProperty` field — so the emitted SDL is byte-identical with or without it. Annotate for it if you are modelling ahead; expect no behavior from it yet. Validation is loud and never tiebreaks: conflicting values are a fatal `A001`, foreign targets (`rdfs:label`, an absent vocabulary, a typo) a fatal `A002`, malformed values a fatal `A003`; an unrecognized local name or inapplicable target is ignored with `A004`. Under `mode: \"auto\"` the annotations are deliberately not consulted (`A006`) — the escape hatch that compiles even a broken annotation set.\n\n## Custom mappings (config — deprecated)\n\nConfig mappings survive as the workspace-local shadow: keys are full IRIs or prefixed names; values override one aspect each. A config key that contradicts an annotation **wins per key** with an `A005` warning naming both values — the draft-locally workflow. Upstream the value into the ontology and delete the key when it stabilizes. (The synthetic `inverse: { graphqlName }` form stays config-only: a synthesized field has no IRI to annotate.)\n\n```typescript\nconst graphql = createSchemaPlugin({\n  mappings: {\n    // rename: fix the mechanical plural\n    \"lib:authored\": { graphqlName: \"works\" },\n\n    // cardinality: an object property that is singular in practice but\n    // carries no owl:FunctionalProperty or SHACL marker\n    \"lib:hasPublisher\": { singular: true },\n\n    // synthesize an inverse field on the RANGE type when the ontology\n    // declares no owl:inverseOf — no ontology change required, the\n    // resolver queries the forward assertions in reverse\n    \"lib:cites\": { inverse: { graphqlName: \"citedBy\" } },\n\n    // force embeddable/abstract when the loaded data can't reveal it\n    // (e.g. a blank-node-only class that happens to have zero instances\n    // in this particular dataset)\n    \"lib:Annotation\": { embeddable: true },\n  },\n});\n```\n\nA mapping that references nothing in the ontology produces an `M003` diagnostic rather than silently doing nothing.\n\nTYPE names the compiler owns (`Node`, `Query`, `PageInfo`, the built-in scalars, …) are auto-resolved on collision by prefixing the namespace — a class named `lib:Node` becomes `LibNode` with an `M004` info diagnostic. Illegal GraphQL characters in local names are sanitized (`My-Class → My_Class`) with an `M002` warning.\n\nFIELD names are never silently renamed. The compiler owns exactly two — `uri` and `_meta` — and a property mapping onto either is **dropped** with an error-severity `M005` naming the IRI and both remedies; two properties mapping to one name drop the second with `M001` naming both IRIs. A rename would break the consumer's query just as surely while hiding which IRI caused it. Fix one clash with `mappings`; `prefixing: \"all\"`, which namespace-prefixes every generated field name (`lib:uri` → `libUri`), fixes every `M005` at once but only those `M001`s whose two IRIs come from different namespaces — same-namespace claimants (`ex:name` and `ex:hasName`, both stripping to `name`) take the same prefix and still collide.\n\n## Cardinality: how a property becomes singular or a list\n\nPrecedence, highest first:\n\n1. custom mapping `{ singular }` override (the config shadow)\n2. `graphql:singular` annotation on the property\n3. `owl:FunctionalProperty`\n4. SHACL `sh:maxCount 1` — per *(class, property)* pair, so the same property can be singular on one class and a list on another; `sh:or` branches merge to the most permissive interpretation, repeated shapes for one path merge as the SHACL conjunction\n5. kind default: **datatype and annotation properties are singular; object properties are lists.** (Multi-valued literals are the exception in RDF practice; opt a datatype property back into a list with `graphql:singular false` or `{ singular: false }`.)\n\nNullability is deliberate and honest: `uri` and `_meta` are non-null, list and connection fields are non-null with empty defaults — and *everything else is nullable*, because OWL ontologies don't promise completeness. SHACL `sh:minCount` is **recorded** (queryable as `ClassProperty.required`) but never auto-promoted to GraphQL non-null: a single missing value would take down whole responses. An ontology that knows its data promotes a field with `graphql:nonNull true`; the deprecated `nonNullOverrides: { Book: [\"title\"] }` config keeps working and OR-merges with it (both only ever promote).\n\n## The second schema: `_meta` and the ontology browser\n\nThe compiler emits two connected schemas. Alongside the data types, a hand-written TBox schema exposes the ontology itself — and every generated type carries a `_meta: EntityMeta!` field bridging the two:\n\n```graphql\n{\n  book(uri: \"lib:dune\") {\n    title\n    _meta {\n      title                                                 # generic, total, renderable\n      label(lang: \"en\")                                     # generic, nullable\n      curie                                                 # \"lib:dune\" — display only\n      type { label definition superclasses { label } }      # the OWL class\n      fields {                                              # every applicable property\n        name          # what field(name:) accepts — pluralized FOR THIS class\n        property { label range acceptanceCriteria }\n        required      # SHACL sh:minCount, for THIS class\n        singular\n        inherited     # declared on an ancestor vs Book itself\n      }\n    }\n  }\n  ontologyClass(uri: \"https://example.org/library/Work\") {\n    isAbstract\n    subclasses { label }\n    instances(first: 10) { edges { node { uri } } }         # TBox → ABox hop\n  }\n}\n```\n\nThis is what powers documentation UIs: \"which fields *should* this entity have, which are required, what does good look like\" — asked of the schema itself, in the same query as the data. The reflective surface reads the compiler's frozen IR, **not the store** — labels, definitions, cardinality, sub/superclasses, `isAbstract`, even `instanceCount` (a Pass 1 statistic) — so ontology browsing answers before the TTL finishes parsing and even against a disposed store, and it can't disagree with the schema's own shape because both came from the same compilation. The one exception is `OntologyClass.instances`: it hands back real entities, so it reaches the store through the same loaders as any data field and needs a live one.\n\n## Diagnostics\n\nThe compiler collects problems instead of aborting on the first one (the `tsc` model). Every diagnostic has a stable code:\n\n| Range | Meaning | Examples |\n|---|---|---|\n| `E001` | extraction/SPARQL failure | query failed, unregistered namespace (synthetic prefix assigned), blank nodes nested deeper than the loader's closure |\n| `A001–A008` | `graphql:` annotation resolution + projection modes | conflicting values, never tiebroken (`A001`, error), foreign/unknown target (`A002`, error), malformed value (`A003`, error), unrecognized term or inapplicable target ignored (`A004`), config shadows an annotation — config wins (`A005`), `mode: \"auto\"` ignoring present annotations (`A006`, info), the `mode: \"explicit\"` dropped-class aggregate (`A007`, info), field omitted for an unexposed range class (`A008`) |\n| `B001–B005` | build references | `subClassOf` cycle, unknown domain/range/inverse, two namespaces claiming one prefix with no declaration in play (`B005`) |\n| `V001–V016` | data/ontology validation | blank-node-only class (`V001`), domainless property (`V002`), boolean-as-string (`V006`), SHACL `sh:maxCount 0` omission (`V010`), undeclared ABox predicate (`V014`), abstract mapping with direct instances (`V015`), concrete supertype flattening (`V016`) |\n| `M001–M006` | naming | duplicate type or field name, later claimant dropped (`M001`, error), illegal class local name sanitized (`M002`), unknown mapping (`M003`), auto-resolved type collision (`M004`), property claims a structural field name and is dropped (`M005`, error), one union name minted with different member sets (`M006`, error) |\n| `X002–X003` | union emission | named / synthesized union created |\n| `W001` | Relay wiring | two root query fields claim one name, later field dropped (error) |\n| `C001–C003` | composition | extension targets unknown type, extension field conflict (incl. a generated root field colliding with a TBox root field), `validateSchema` failure |\n\n**Any error-severity diagnostic refuses the compile** — `compile()` throws `CompilationError` carrying the complete diagnostic list. A schema minus silently dropped fields must never be served, so a boot dies loudly instead. Warnings and infos surface in `result.diagnostics` while the schema builds; the consumer chooses its policy for those.\n\n## Plugin options\n\n```typescript\ncreateSchemaPlugin({\n  mappings,                          // DEPRECATED — CustomMappings (above); config wins per key with A005\n  extensions,                        // consumer fields — object or factory form (below)\n  relay: true,                       // Node/uri/_meta/connections/root queries (default true)\n  incremental: false,                // add @defer/@stream directives (below)\n  sdlOutput: \"./schema.graphql\",     // write the SDL on every compile that prints one — feed\n                                     // relay-compiler (artifact boots skip printing and leave\n                                     // the file untouched)\n  nonNullOverrides: { Book: [\"title\"] },  // DEPRECATED — prefer graphql:nonNull (OR-merged)\n  prefixing: \"none\",                 // or \"all\" — namespace-prefix EVERY field name\n  mode: \"annotated\",                 // \"auto\" (ignore annotations) | \"annotated\" (bind them)\n                                     // | \"explicit\" (graphql:expose allowlist)\n  provider: \"library\",               // stamped into the SDL provenance header\n  revision: \"a1b2c3d\",               // stamped into the SDL provenance header\n  standardVocabFields: {             // DEPRECATED, superseded by the graphql:*From annotations:\n    Category: { \"http://www.w3.org/2000/01/rdf-schema#label\": \"label\" },\n  },                                 // opt-in instance-level rdfs:label/comment as ordinary fields\n  loaderCache: \"request\",            // or \"process\" — see Performance\n  extraction: \"./extraction.json\",   // precomputed boot artifact — see Fast boot\n  onRuntimeWarning: (w) => log.warn(w),  // coercion failures at resolve time\n});\n```\n\n`onReload` recompiles when the store reloads — note that with ke's `cache:` configured, `store.reload()` short-circuits on a cache hit, so dev flows that edit TTL should call `reload({ force: true })`.\n\n## Extensions\n\nDomain-specific computed fields stay out of the compiler and in your code. The object form covers scalar-typed fields; the **factory form** receives the generated types, for extension fields typed as them:\n\n```typescript\nextensions: (types) => ({\n  Book: {\n    citation: {\n      type: GraphQLString,\n      resolve: (book) => formatCitation(book),       // book is an EntityValue\n    },\n  },\n  Query: {\n    search: {\n      type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(SearchHitType))),\n      args: { query: { type: new GraphQLNonNull(GraphQLString) } },\n      resolve: (_s, args, ctx) => ctx.searchIndex.search(args.query),\n    },\n  },\n})\n```\n\nExtensions are validated at composition: an unknown type name is `C001`, a clash with a generated field is `C002` — both fatal, both reported together. Extension resolvers receive the `CompilerContext` (the loaders, the name map, the store escape hatch) and may stash their own state on it.\n\n## Serving over HTTP\n\n```typescript\nimport { createGraphQLHandler } from \"@canonical/ke-graphql/http\";\n\nconst handler = createGraphQLHandler(schema, {\n  context: (request) => createContext(store),   // fresh DataLoaders per request\n  graphiql: true,            // GET + Accept: text/html → GraphiQL (dev default)\n  cors: true,\n  introspection: true,       // default: dev on, production off\n  maxDepth: 12,              // built-in depth limit (default 20; 0 disables)\n  validationRules: [         // add your own rules on top (e.g. cost analysis)\n    createComplexityRule({ maximumComplexity: 1000, estimators: [...] }),\n  ],\n  persistedQueries: {        // strongest hardening: only build-time queries execute\n    get: (hash) => manifest[hash] ?? null,\n    allowArbitraryQueries: false,\n  },\n  hideFieldSuggestions: true,   // no \"Did you mean…?\" schema enumeration (prod default)\n  maskErrors: true,             // generic message for internal errors (prod default)\n  formatError: (e) => redact(e),\n  onOperation: ({ operation, duration, errors }) => metrics.record(...),\n});\n\nBun.serve({ fetch: handler });   // or compose with other handlers by pathname\n```\n\nThe handler is a plain `(Request) => Promise<Response>` — no framework, same composition pattern as `createSparqlHandler`. It implements GraphQL-over-HTTP (GET with query param, POST JSON, persisted-query extension), answers CORS preflight, honors `Accept` q-values, and serves nothing it wasn't asked to: the handler provides *seams*, the consumer provides *policy*. Build the persisted manifest from your client's compiled operations with `createPersistedManifest(operationTexts)` (SHA-256, the Relay/Apollo convention).\n\n**Built-in hardening defaults.** On top of those seams, the package ships a baseline production posture from its `hardening` domain (all named, exported, and tunable — never magic numbers buried in a resolver): every connection is page-size-clamped (`DEFAULT_PAGE_SIZE` 50, `MAX_PAGE_SIZE` 100), so a list is never unbounded and a client can't demand an oversized page; queries nested deeper than `maxDepth` (default `DEFAULT_MAX_QUERY_DEPTH`, 20) are rejected, bounding the recursion that cyclic types otherwise allow; IRIs that would break out of a SPARQL `IRIREF` are dropped before interpolation, so a crafted `node(id:)` resolves to `null` rather than injected SPARQL; and in production (`maskErrors`, default on) an unexpected internal error is returned as a generic message — store and SPARQL internals never reach the client, while deliberate validation/argument errors pass through. `loaderCache: \"process\"` uses bounded LRU caches (next section) so ID enumeration can't exhaust memory.\n\nGraphiQL's assets load as version-pinned UMD bundles from unpkg; air-gapped deployments supply their own page through the `graphiqlHtml` option.\n\n## Incremental delivery (`@defer`)\n\n`incremental: true` on the plugin adds the `@defer`/`@stream` directives (graphql v17 doesn't define them by default), and `incremental: true` on the handler streams deferred payloads as `multipart/mixed` to clients that accept it — everyone else gets a single, complete, drained-and-merged JSON response. Correctness can't be lost to a transport mismatch, only streaming.\n\nOne ecosystem wrinkle this package absorbs for you: graphql v17 emits the 2023 incremental payload format (`pending`/`incremental`/`completed`), while Relay's network layer still consumes the legacy shape (`path`/`label` per payload, `is_final`). The `relayFormatAdapter` translates between them — used in-process for SSR and by the handler's `incrementalFormat: \"relay-legacy\"` option. This is also why `graphql` is **pinned exactly**: the adapter is coupled to the RC's payload format, and upgrades should be deliberate, snapshot-diffed events.\n\n## Executing without a server\n\nThe compiled schema is a value and `graphql(schema, query, context)` is a function call — every serving mode is a thin shell over it:\n\n```typescript\nimport { executeLocal, extractStatic } from \"@canonical/ke-graphql\";\n\n// In-process (SSR prefetch, tests, scripts) — no HTTP, no serialization.\n// One context per render pass: DataLoaders batch across every concurrent\n// Relay query in the same render.\nconst result = await executeLocal({\n  schema,\n  source: `{ books(first: 24) { edges { node { title } } } }`,\n  contextValue: createContext(store),\n});\n\n// Build time (static sites, CDN): run the site's whole query set once,\n// ship the results as JSON. uri-typed variables are enumerated against\n// the store's own instance inventory; anything non-enumerable\n// (pagination cursors) fails loudly instead of shipping partial data.\nconst artifacts = await extractStatic({\n  schema, mapped: result.mapped, context: createContext(store),\n  queries: [\n    { name: \"AllBooks\", text: \"{ books(first: 500) { edges { node { uri title } } } }\" },\n    { name: \"BookPage\",\n      text: \"query($uri: String!) { book(uri: $uri) { title authors(first: 10) { edges { node { name } } } } }\",\n      variables: { uri: \"String!\" } },\n  ],\n});\n```\n\n## Fast boot: the extraction artifact\n\nPass 1 (the SPARQL extraction) is the only part of compilation that needs the store — and its output is ~2 KiB of serializable JSON. Snapshot it at build time and every subsequent boot skips the store entirely:\n\n```bash\npragma graphql build ./ontology.ttl \"./data/**/*.ttl\" \\\n  --sdl schema.graphql --extraction extraction.json \\\n  --prefix lib=https://example.org/library/\n```\n\n```typescript\n// boots the schema in ~10 ms — no Oxigraph, no TTL parse, no SPARQL\ncreateSchemaPlugin({ extraction: \"./extraction.json\" });\n\n// or with no store at all until the first data query:\nimport { compileFromExtraction } from \"@canonical/ke-graphql\";\nconst result = compileFromExtraction(artifactJson, { loaderCache: \"process\" });\nconst storeReady = createStore({ sources, prefixes });   // not awaited!\nconst ctx = result.createContext(storeReady);            // TBox answers now;\n                                                         // data queries await the store\n```\n\nThe artifact embeds a `sourcesHash` fingerprint of the TTL it was built from. The plugin re-fingerprints the sources as ke loads them: match → fast boot; mismatch → a warning and a live compile. A stale artifact can cost you milliseconds, never wrong answers. `pragma graphql check` runs the same compile with no outputs and fails on error diagnostics — the CI gate that puts ontology changes under the same discipline as code.\n\n## Performance\n\nMeasured by the committed benchmark (`bun run bench`, 250-entity graph):\n\n| Path | Cost |\n|---|---|\n| Schema boot from artifact (`compileFromExtraction`) | **~10 ms** — no store |\n| Live compile (Pass 1 + passes 2–7 + validate) | ~50–110 ms |\n| Detail page / `node()` with `loaderCache: \"process\"` | **~0.3 ms** |\n| Listing `first: 24` | **~0.7 ms** warm — pagination runs on the URI list; only the page hydrates |\n| TBox / ontology browsing | ~0.1 ms — store-free |\n\n`loaderCache: \"process\"` shares DataLoader caches across requests — sound because the store is immutable between reloads, and a reload produces a new compile (automatic invalidation). The shared caches are **bounded LRUs** (`processCacheSize`, default 10,000 entries each), so enumerating distinct IDs can't grow them without limit; evicted entries are simply re-queried, and failed batches are evicted, never memoized. The default `\"request\"` keeps the textbook per-request isolation.\n\nThe ladder to zero: a warm process answers in microseconds; Lambda-style containers pay one ~80 ms boot per container with the artifact; Cloudflare Workers (WASM precompiled at deploy, TTL as ke inline sources — see `examples/cloudflare-worker`) cold-start in ~25–60 ms; and with persisted queries in front of a CDN, responses are pure functions of *(hash, variables)* until the next deploy — cacheable to 0 ms. For fully static deployments, `extractStatic` removes the runtime altogether.\n\n## Package boundary\n\n| Entry | Exports | Dependencies |\n|---|---|---|\n| `@canonical/ke-graphql` | `createSchemaPlugin`, `compile`, `compileFromExtraction`, `serializeExtraction`/`deserializeExtraction`/`hashSources`, `executeLocal`, `extractStatic`, `mergeIncremental`, `relayFormatAdapter`, `createPersistedManifest`, connection/pagination helpers, all IR + diagnostic types | `graphql` (pinned), `dataloader` |\n| `@canonical/ke-graphql/http` | `createGraphQLHandler`, `graphiqlHtml` | the root, plus platform-native fetch |\n\nConsumers that never serve — static extraction in CI, SSR-only processes, tests — never load a byte of HTTP or GraphiQL code.\n\n## Development\n\n```bash\nbun run demo     # GraphiQL on http://localhost:4000/graphql in under a second\nbun run test     # the fixture-suite tests, with coverage gates\nbun run check    # biome + tsc + webarchitect\nbun run bench    # the numbers in this README\n```\n\n`bun run demo` boots `demo/server.ts` against `demo/graph.ttl` — the library\nontology from this README with a few shelves of data — logging ke's load\nactivity (sources, triple counts), the compiler diagnostics, and a ready-made\n`curl`. It serves GraphQL + GraphiQL with `@defer` enabled, so every example\nabove can be pasted straight in. The folder is type-checked and linted with\nthe package but ships nowhere: it is excluded from the build and the npm\ntarball.\n\nThe intermediate representations (`RawExtraction`, `OntologyIR`, `MappedIR`) are exported public contracts, not internals — tooling can consume them the way Prisma generators consume the DMMF. They are pinned by the golden-SDL snapshot in the test suite, so changes to the emitted shape are caught.\n\nA separate, coarser question can be asked of the same emission: does it satisfy `@canonical/prism-contract`, the data contract a documentation-site provider must offer? That is semantic subsumption — `findBreakingChanges` with the contract as the old schema and an emitted SDL as the new one, zero violations meaning the emission is a conformant superset.\n\n**That check does not belong here**, and is not run here. The contract is authored by the documentation site, not by the compiler, and a compiler that vendored its own conformance check would be marking its own homework — so it belongs on the contract's side, published separately and reading the golden SDLs above. One consequence is worth knowing before you regenerate them: those goldens are that check's input, so a change to the emitted shape can turn a suite red in a package you never opened.\n\nThis package therefore takes no dependency on `packages/prism/*`, not even a devDependency, and carries no `contract.test.ts`. The arrow points one way.\n","readmeFilename":"README.md"}