{"_id":"@lorion-org/composition-graph","_rev":"8-2efe389bf660bbe820bdc067cd110e3c","name":"@lorion-org/composition-graph","dist-tags":{"beta":"1.0.0-beta.5","latest":"1.0.0-beta.8"},"versions":{"1.0.0-beta.0":{"name":"@lorion-org/composition-graph","version":"1.0.0-beta.0","keywords":["composition","graph","descriptor","catalog"],"license":"MIT","_id":"@lorion-org/composition-graph@1.0.0-beta.0","maintainers":[{"name":"davewww","email":"david@dampfer.net"}],"homepage":"https://github.com/lorion-org/lorion/tree/main/packages/composition-graph#readme","bugs":{"url":"https://github.com/lorion-org/lorion/issues"},"dist":{"shasum":"614df6a58ff6b416995f1a67ff1017a85cd2af35","tarball":"https://registry.npmjs.org/@lorion-org/composition-graph/-/composition-graph-1.0.0-beta.0.tgz","fileCount":9,"integrity":"sha512-K22HJjjxqSSy2QvLenCA/5CVHABf/wcwJfHcuImHzztu9lc0I8BCmOoevSaJ9jR9XBFBrHScjURyfpL+G7rwiw==","signatures":[{"sig":"MEQCIFhEI8YiDhd7QE/2v/d9hC85rJft+hAlP8pE+FhvpUhbAiBrEtNRDT27lgerrGWAIp6JPYly19dRYpOoAgfkfsmXJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54508},"main":"./dist/index.cjs","type":"module","_from":"file:lorion-org-composition-graph-1.0.0-beta.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","build":"tsup src/index.ts --format esm,cjs --dts","clean":"rimraf coverage dist tsconfig.tsbuildinfo","coverage":"node -e \"require('node:fs').mkdirSync('../../coverage/.tmp', { recursive: true })\" && vitest run --coverage --coverage.include=packages/composition-graph/src/**/*.ts --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","typecheck":"tsc -p tsconfig.json --noEmit","package:check":"pnpm build && pnpm pack --dry-run && publint","example:composition":"node ./examples/deployment-composition.js"},"_npmUser":{"name":"davewww","email":"david@dampfer.net"},"_resolved":"C:\\Users\\david\\AppData\\Local\\Temp\\cc7872975bbb09498a8340c6c00e4e0a\\lorion-org-composition-graph-1.0.0-beta.0.tgz","_integrity":"sha512-K22HJjjxqSSy2QvLenCA/5CVHABf/wcwJfHcuImHzztu9lc0I8BCmOoevSaJ9jR9XBFBrHScjURyfpL+G7rwiw==","repository":{"url":"git+https://github.com/lorion-org/lorion.git","type":"git","directory":"packages/composition-graph"},"_npmVersion":"10.9.2","description":"Framework-free descriptor catalogs, relation graphs, and composition selection logic.","directories":{},"sideEffects":false,"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/composition-graph_1.0.0-beta.0_1777463990463_0.19241217682165224","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-beta.1":{"name":"@lorion-org/composition-graph","version":"1.0.0-beta.1","keywords":["composition","graph","descriptor","catalog"],"license":"MIT","_id":"@lorion-org/composition-graph@1.0.0-beta.1","maintainers":[{"name":"davewww","email":"david@dampfer.net"}],"homepage":"https://github.com/lorion-org/lorion/tree/main/packages/composition-graph#readme","bugs":{"url":"https://github.com/lorion-org/lorion/issues"},"dist":{"shasum":"d99b57d70f8efa4bd6754495b63dae91753993e7","tarball":"https://registry.npmjs.org/@lorion-org/composition-graph/-/composition-graph-1.0.0-beta.1.tgz","fileCount":9,"integrity":"sha512-uCp6Eq3mt1a5LxegDizXp7bnOs09R4hTx5tNyiC0+kgRIX4qrV8g+Msj12EpxXlpc5JzBNuQvbijEpdLb61oBA==","signatures":[{"sig":"MEQCIFCDAOWOK7z9LcZyHNvvjbQ0BlxDhTxSELuof+gdB2PbAiBypyZ7yFvOwDC8hgdA5Ugnw5malg8tKMdJjEI6yc3MJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55753},"main":"./dist/index.cjs","type":"module","_from":"file:lorion-org-composition-graph-1.0.0-beta.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","build":"tsup src/index.ts --format esm,cjs --dts","clean":"rimraf coverage dist tsconfig.tsbuildinfo","coverage":"node -e \"require('node:fs').mkdirSync('../../coverage/.tmp', { recursive: true })\" && vitest run --coverage --coverage.include=packages/composition-graph/src/**/*.ts --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","typecheck":"tsc -p tsconfig.json --noEmit","package:check":"pnpm build && pnpm pack --dry-run && publint","example:composition":"node ./examples/deployment-composition.js"},"_npmUser":{"name":"davewww","email":"david@dampfer.net"},"_resolved":"C:\\Users\\david\\AppData\\Local\\Temp\\e88ba321fef9fdec6998416aa771489e\\lorion-org-composition-graph-1.0.0-beta.1.tgz","_integrity":"sha512-uCp6Eq3mt1a5LxegDizXp7bnOs09R4hTx5tNyiC0+kgRIX4qrV8g+Msj12EpxXlpc5JzBNuQvbijEpdLb61oBA==","repository":{"url":"git+https://github.com/lorion-org/lorion.git","type":"git","directory":"packages/composition-graph"},"_npmVersion":"10.9.3","description":"Framework-free descriptor catalogs, relation graphs, and composition selection logic.","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/composition-graph_1.0.0-beta.1_1777572803632_0.4891634631961417","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-beta.2":{"name":"@lorion-org/composition-graph","version":"1.0.0-beta.2","keywords":["composition","graph","descriptor","catalog"],"license":"MIT","_id":"@lorion-org/composition-graph@1.0.0-beta.2","maintainers":[{"name":"davewww","email":"david@dampfer.net"}],"homepage":"https://github.com/lorion-org/lorion/tree/main/packages/composition-graph#readme","bugs":{"url":"https://github.com/lorion-org/lorion/issues"},"dist":{"shasum":"3da7e0c25b084cc84a6d87becf742c57f71606c3","tarball":"https://registry.npmjs.org/@lorion-org/composition-graph/-/composition-graph-1.0.0-beta.2.tgz","fileCount":15,"integrity":"sha512-IKUQ7X8ii9cYV6QgiPFSwIR0vawCirbb31KCMW0VVqSN6m2u5rU5Qg/jFx5DtIXW3c3dQNiXEWdwkKS2jf2LdA==","signatures":[{"sig":"MEYCIQDOx5PqS1OmKJG4sj/LNe1iTjCpRxxW379GfyF8oMmTnwIhAOWIuN5dh8bdoPOdO7vueforyxkpk7pMKXSt3UxgyZ9s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@lorion-org%2fcomposition-graph@1.0.0-beta.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90032},"main":"./dist/index.cjs","type":"module","_from":"file:lorion-org-composition-graph-1.0.0-beta.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"},"lorion-source":{"types":"./src/index.ts","default":"./src/index.ts"}}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","build":"tsup src/index.ts --format esm,cjs --dts","clean":"rimraf coverage dist tsconfig.tsbuildinfo","coverage":"node -e \"require('node:fs').mkdirSync('../../coverage/.tmp', { recursive: true })\" && vitest run --coverage --coverage.include=packages/composition-graph/src/**/*.ts --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","typecheck":"tsc -p tsconfig.json --noEmit","package:check":"pnpm build && pnpm pack --dry-run && publint","example:composition":"node ./examples/deployment-composition.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3b4625d0-8313-4f5d-b010-36378c0f99ed"}},"_resolved":"/tmp/2ffb2497e4bbd561a73ab3c53acf6a16/lorion-org-composition-graph-1.0.0-beta.2.tgz","_integrity":"sha512-IKUQ7X8ii9cYV6QgiPFSwIR0vawCirbb31KCMW0VVqSN6m2u5rU5Qg/jFx5DtIXW3c3dQNiXEWdwkKS2jf2LdA==","repository":{"url":"git+https://github.com/lorion-org/lorion.git","type":"git","directory":"packages/composition-graph"},"_npmVersion":"11.11.0","description":"Framework-free descriptor catalogs, relation graphs, and composition selection logic.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/composition-graph_1.0.0-beta.2_1777894985805_0.3255377237564836","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-beta.5":{"name":"@lorion-org/composition-graph","version":"1.0.0-beta.5","keywords":["composition","graph","descriptor","catalog"],"license":"MIT","_id":"@lorion-org/composition-graph@1.0.0-beta.5","maintainers":[{"name":"davewww","email":"david@dampfer.net"}],"homepage":"https://github.com/lorion-org/lorion/tree/main/packages/composition-graph#readme","bugs":{"url":"https://github.com/lorion-org/lorion/issues"},"dist":{"shasum":"52a162b0c676d663e7750b5ad36c0c51527fbaeb","tarball":"https://registry.npmjs.org/@lorion-org/composition-graph/-/composition-graph-1.0.0-beta.5.tgz","fileCount":13,"integrity":"sha512-867BC1OPUwD1SYhB3OAZH3j6vialeDzEy/qEtxvkQuut2ylpbchD4O7REukX2Qw0c/gjyBUUuTNLfjUn1rkj9g==","signatures":[{"sig":"MEUCIQCTmsJ3Y9YQ1B1g0bVawlR6DTAqBFLnVY8O2ueTx0tCoAIgBCJIBFfivPgXMhnpX8z3frYafrDOUJaZ7tX/1TMgaL8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@lorion-org%2fcomposition-graph@1.0.0-beta.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":87291},"main":"./dist/index.cjs","type":"module","_from":"file:lorion-org-composition-graph-1.0.0-beta.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"},"lorion-source":{"types":"./src/index.ts","default":"./src/index.ts"}}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","build":"tsup src/index.ts --format esm,cjs --dts","clean":"rimraf coverage dist tsconfig.tsbuildinfo","coverage":"node -e \"require('node:fs').mkdirSync('../../coverage/.tmp', { recursive: true })\" && vitest run --coverage --coverage.include=packages/composition-graph/src/**/*.ts --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","typecheck":"tsc -p tsconfig.json --noEmit","package:check":"pnpm build && pnpm pack --dry-run && publint","example:composition":"node ./snippets/deployment-composition.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3b4625d0-8313-4f5d-b010-36378c0f99ed"}},"_resolved":"/tmp/d9289b38259d3356c6692ff2c445be89/lorion-org-composition-graph-1.0.0-beta.5.tgz","_integrity":"sha512-867BC1OPUwD1SYhB3OAZH3j6vialeDzEy/qEtxvkQuut2ylpbchD4O7REukX2Qw0c/gjyBUUuTNLfjUn1rkj9g==","repository":{"url":"git+https://github.com/lorion-org/lorion.git","type":"git","directory":"packages/composition-graph"},"_npmVersion":"11.16.0","description":"Framework-free descriptor catalogs, relation graphs, and composition selection logic.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/composition-graph_1.0.0-beta.5_1784540011931_0.4140112939774918","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-beta.6":{"name":"@lorion-org/composition-graph","version":"1.0.0-beta.6","keywords":["composition","graph","descriptor","catalog"],"license":"MIT","_id":"@lorion-org/composition-graph@1.0.0-beta.6","maintainers":[{"name":"davewww","email":"david@dampfer.net"}],"homepage":"https://github.com/lorion-org/lorion/tree/main/packages/composition-graph#readme","bugs":{"url":"https://github.com/lorion-org/lorion/issues"},"dist":{"shasum":"ebca5ac898a298e115d15ac5778c0b590d0a7821","tarball":"https://registry.npmjs.org/@lorion-org/composition-graph/-/composition-graph-1.0.0-beta.6.tgz","fileCount":13,"integrity":"sha512-DytgrLWq51eGNSDvCsRlUZm6BjyFNThaWRkOrFTj91XbFiDR9JtL++ZtoWrVMemBa1fALYwkZ84qmBM+juil1A==","signatures":[{"sig":"MEYCIQCvMVZu65tleHRCzIHCpRuySPXPpDftxqiUOOVMFhoixAIhAKy0IyGhtXyNjui1tDkSYQIq9mKHGBUmJ2MZOZrTwBTV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@lorion-org%2fcomposition-graph@1.0.0-beta.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":87291},"main":"./dist/index.cjs","type":"module","_from":"file:lorion-org-composition-graph-1.0.0-beta.6.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"},"lorion-source":{"types":"./src/index.ts","default":"./src/index.ts"}}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","build":"tsup src/index.ts --format esm,cjs --dts","clean":"rimraf coverage dist tsconfig.tsbuildinfo","coverage":"node -e \"require('node:fs').mkdirSync('../../coverage/.tmp', { recursive: true })\" && vitest run --coverage --coverage.include=packages/composition-graph/src/**/*.ts --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","typecheck":"tsc -p tsconfig.json --noEmit","package:check":"pnpm build && pnpm pack --dry-run && publint","example:composition":"node ./snippets/deployment-composition.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3b4625d0-8313-4f5d-b010-36378c0f99ed"}},"_resolved":"/tmp/d9e2fd6d884f3ecdc438bb76aa5a76c4/lorion-org-composition-graph-1.0.0-beta.6.tgz","_integrity":"sha512-DytgrLWq51eGNSDvCsRlUZm6BjyFNThaWRkOrFTj91XbFiDR9JtL++ZtoWrVMemBa1fALYwkZ84qmBM+juil1A==","repository":{"url":"git+https://github.com/lorion-org/lorion.git","type":"git","directory":"packages/composition-graph"},"_npmVersion":"11.16.0","description":"Framework-free descriptor catalogs, relation graphs, and composition selection logic.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/composition-graph_1.0.0-beta.6_1784831543010_0.3763401004909772","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-beta.7":{"name":"@lorion-org/composition-graph","version":"1.0.0-beta.7","keywords":["composition","graph","descriptor","catalog"],"license":"MIT","_id":"@lorion-org/composition-graph@1.0.0-beta.7","maintainers":[{"name":"davewww","email":"david@dampfer.net"}],"homepage":"https://github.com/lorion-org/lorion/tree/main/packages/composition-graph#readme","bugs":{"url":"https://github.com/lorion-org/lorion/issues"},"dist":{"shasum":"57b6baef6857b70ba12e74f42fdb4e9da41c686b","tarball":"https://registry.npmjs.org/@lorion-org/composition-graph/-/composition-graph-1.0.0-beta.7.tgz","fileCount":13,"integrity":"sha512-JSKuy7XbyvJkxogamJTwi7iBGd1J54COdaAV6zhgsFoS6uE8dfEWTNmZxciKtvj9k2ZOCk8YU+oZCYglZDOzVQ==","signatures":[{"sig":"MEYCIQCJImofr5p7HcHg0jNZt3ywZOqF3C0biaVfRAidNascFAIhAOuFtIr3W/6WCdPceRCZrw57WGNjPtyVcgU9xpOJftIS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@lorion-org%2fcomposition-graph@1.0.0-beta.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":89779},"main":"./dist/index.cjs","type":"module","_from":"file:lorion-org-composition-graph-1.0.0-beta.7.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"},"lorion-source":{"types":"./src/index.ts","default":"./src/index.ts"}}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","build":"tsup src/index.ts --format esm,cjs --dts","clean":"rimraf coverage dist tsconfig.tsbuildinfo","coverage":"node -e \"require('node:fs').mkdirSync('../../coverage/.tmp', { recursive: true })\" && vitest run --coverage --coverage.include=packages/composition-graph/src/**/*.ts --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","typecheck":"tsc -p tsconfig.json --noEmit","package:check":"pnpm build && pnpm pack --dry-run && publint","example:composition":"node ./snippets/deployment-composition.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3b4625d0-8313-4f5d-b010-36378c0f99ed"}},"_resolved":"/tmp/b91092c6e4e9384cb62c283fb6ae342d/lorion-org-composition-graph-1.0.0-beta.7.tgz","_integrity":"sha512-JSKuy7XbyvJkxogamJTwi7iBGd1J54COdaAV6zhgsFoS6uE8dfEWTNmZxciKtvj9k2ZOCk8YU+oZCYglZDOzVQ==","repository":{"url":"git+https://github.com/lorion-org/lorion.git","type":"git","directory":"packages/composition-graph"},"_npmVersion":"11.16.0","description":"Framework-free descriptor catalogs, relation graphs, and composition selection logic.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/composition-graph_1.0.0-beta.7_1785089201271_0.9009117154429374","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-beta.8":{"name":"@lorion-org/composition-graph","version":"1.0.0-beta.8","description":"Framework-free descriptor catalogs, relation graphs, and composition selection logic.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/lorion-org/lorion.git","directory":"packages/composition-graph"},"homepage":"https://github.com/lorion-org/lorion/tree/main/packages/composition-graph#readme","bugs":{"url":"https://github.com/lorion-org/lorion/issues"},"type":"module","sideEffects":false,"publishConfig":{"access":"public"},"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"lorion-source":{"types":"./src/index.ts","default":"./src/index.ts"},"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"keywords":["composition","graph","descriptor","catalog"],"engines":{"node":"^20.19.0 || >=22.12.0"},"scripts":{"build":"tsup src/index.ts --format esm,cjs --dts","clean":"rimraf coverage dist tsconfig.tsbuildinfo","example:composition":"node ./snippets/deployment-composition.js","lint":"eslint src --ext .ts","test":"vitest run --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","coverage":"node -e \"require('node:fs').mkdirSync('../../coverage/.tmp', { recursive: true })\" && vitest run --coverage --coverage.include=packages/composition-graph/src/**/*.ts --root ../.. --config vitest.config.mts packages/composition-graph/src/index.spec.ts","typecheck":"tsc -p tsconfig.json --noEmit","package:check":"pnpm build && pnpm pack --dry-run && publint"},"_id":"@lorion-org/composition-graph@1.0.0-beta.8","_integrity":"sha512-hJafc6XE00ODXMqIZgxwCmjxG053fzQjsDJIo6BpNPUQu2iqEiJhmdUpuMOoL+UsqOK5LEflYl9BuDo3uggozQ==","_resolved":"/tmp/4c1aa9b861d9d612c840d56623a2e913/lorion-org-composition-graph-1.0.0-beta.8.tgz","_from":"file:lorion-org-composition-graph-1.0.0-beta.8.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-hJafc6XE00ODXMqIZgxwCmjxG053fzQjsDJIo6BpNPUQu2iqEiJhmdUpuMOoL+UsqOK5LEflYl9BuDo3uggozQ==","shasum":"59686837ab3af1a7c7581dfc27a98470472d6804","tarball":"https://registry.npmjs.org/@lorion-org/composition-graph/-/composition-graph-1.0.0-beta.8.tgz","fileCount":13,"unpackedSize":89409,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@lorion-org%2fcomposition-graph@1.0.0-beta.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGpop2oW+59383KvtcalbswjnbtCV6ucLcsKcDLB6MH8AiEAk5DhPsagOyD0irwLqclR+plOSmtpWjsvGlecnSjwGYI="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3b4625d0-8313-4f5d-b010-36378c0f99ed"}},"directories":{},"maintainers":[{"name":"davewww","email":"david@dampfer.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/composition-graph_1.0.0-beta.8_1785770493295_0.6999590569360559"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-29T11:59:50.361Z","modified":"2026-08-03T15:21:33.852Z","1.0.0-beta.0":"2026-04-29T11:59:50.614Z","1.0.0-beta.1":"2026-04-30T18:13:23.769Z","1.0.0-beta.2":"2026-05-04T11:43:05.953Z","1.0.0-beta.5":"2026-07-20T09:33:32.068Z","1.0.0-beta.6":"2026-07-23T18:32:23.189Z","1.0.0-beta.7":"2026-07-26T18:06:41.416Z","1.0.0-beta.8":"2026-08-03T15:21:33.487Z"},"bugs":{"url":"https://github.com/lorion-org/lorion/issues"},"license":"MIT","homepage":"https://github.com/lorion-org/lorion/tree/main/packages/composition-graph#readme","keywords":["composition","graph","descriptor","catalog"],"repository":{"type":"git","url":"git+https://github.com/lorion-org/lorion.git","directory":"packages/composition-graph"},"description":"Framework-free descriptor catalogs, relation graphs, and composition selection logic.","maintainers":[{"name":"davewww","email":"david@dampfer.net"}],"readme":"# @lorion-org/composition-graph\n\nFramework-free descriptor catalogs, relation graphs, and composition selection logic.\n\nThis package models flat named descriptors, their declared relations, optional base descriptors, and deterministic composition flows.\n\n## Install\n\n```shell\npnpm add @lorion-org/composition-graph\n```\n\n## What it is\n\n- a typed descriptor model for flat descriptors\n- a graph builder for declared relations\n- a catalog for querying profiles and relation paths\n- a selection layer for resolving selected and base descriptors into a final set\n\n## What it is not\n\n- not a package manager\n- not a filesystem discovery tool\n- not a framework adapter\n- not a runtime-config loader\n\n## Basic example\n\n```ts\nimport { createDescriptorCatalog } from '@lorion-org/composition-graph';\n\nconst catalog = createDescriptorCatalog({\n  descriptors: [\n    {\n      id: 'default',\n      version: '1.0.0',\n      dependencies: { web: '^1.0.0' },\n    },\n    {\n      id: 'web',\n      version: '1.0.0',\n      dependencies: {\n        checkout: '^1.0.0',\n        payments: '^1.0.0',\n        'payment-provider-invoice': '^1.0.0',\n        'payment-provider-stripe': '^1.0.0',\n        shops: '^1.0.0',\n        'shop-coffee': '^1.0.0',\n        'shop-stationery': '^1.0.0',\n      },\n    },\n    {\n      id: 'checkout',\n      version: '1.0.0',\n      dependencies: { payments: '^1.0.0' },\n    },\n    {\n      id: 'payments',\n      version: '1.0.0',\n    },\n    {\n      id: 'shops',\n      version: '1.0.0',\n    },\n    {\n      id: 'payment-provider-invoice',\n      version: '1.0.0',\n      providesFor: 'payment-checkout',\n      dependencies: { payments: '^1.0.0' },\n    },\n    {\n      id: 'payment-provider-stripe',\n      version: '1.0.0',\n      defaultFor: 'payment-checkout',\n      providesFor: 'payment-checkout',\n      dependencies: { payments: '^1.0.0' },\n    },\n    {\n      id: 'shop-coffee',\n      version: '1.0.0',\n      dependencies: { shops: '^1.0.0' },\n    },\n    {\n      id: 'shop-stationery',\n      version: '1.0.0',\n      dependencies: { shops: '^1.0.0' },\n    },\n  ],\n});\n\nconst selection = catalog.resolveSelection({\n  selected: ['default'],\n});\n\nconsole.log(selection.getResolved());\nconsole.log(selection.getProvenance());\n```\n\n## Example: explicit base descriptors\n\nUse `baseDescriptors` for descriptors that always participate in the\nresolution for a given runtime, deployment, or application shell.\n\n```ts\nimport { createDescriptorCatalog } from '@lorion-org/composition-graph';\n\nconst catalog = createDescriptorCatalog({\n  descriptors: [\n    {\n      id: 'web',\n      version: '1.0.0',\n      dependencies: { checkout: '^1.0.0', shops: '^1.0.0' },\n    },\n    {\n      id: 'checkout',\n      version: '1.0.0',\n      dependencies: { payments: '^1.0.0' },\n    },\n    {\n      id: 'payments',\n      version: '1.0.0',\n    },\n    {\n      id: 'shops',\n      version: '1.0.0',\n    },\n  ],\n});\n\nconst selection = catalog.resolveSelection({\n  baseDescriptors: ['web'],\n});\n\nselection.getResolved();\n// => ['checkout', 'payments', 'shops', 'web']\n```\n\n## Example: normalize selection seeds\n\nHost adapters often accept descriptor selections from CLI flags, package-manager\nconfig variables, environment variables, or static defaults. Use\n`resolveDescriptorSelectionSeed()` at that boundary and pass the resulting ids to\nthe catalog or framework adapter.\n\nThe graph package does not prescribe a domain word for selection. Pass `key`\nwhen you want derived CLI and environment names, or pass explicit `cliKeys` and\n`envKeys`. Framework adapters such as `@lorion-org/nuxt` and\n`@lorion-org/react` provide their own `capability` default.\n\n```ts\nimport { resolveDescriptorSelectionSeed } from '@lorion-org/composition-graph';\n\nconst selected = resolveDescriptorSelectionSeed({\n  argv: process.argv,\n  defaultValue: ['default'],\n  env: process.env,\n  key: 'capability',\n});\n\n// --capabilities=admin,checkout\n// LORION_CAPABILITIES=\"admin checkout\"\n// => ['admin', 'checkout']\n```\n\n## Example: explain why something is present\n\nThe catalog and selection APIs expose path explanation helpers for diagnostics,\nadmin UIs, and composition debugging.\n\n```ts\nimport { createDescriptorCatalog } from '@lorion-org/composition-graph';\n\nconst catalog = createDescriptorCatalog({\n  descriptors: [\n    {\n      id: 'web',\n      version: '1.0.0',\n      dependencies: { checkout: '^1.0.0' },\n    },\n    {\n      id: 'checkout',\n      version: '1.0.0',\n      dependencies: { payments: '^1.0.0' },\n    },\n    {\n      id: 'payments',\n      version: '1.0.0',\n    },\n  ],\n});\n\ncatalog.explain({\n  from: 'web',\n  to: 'payments',\n  relationIds: ['dependencies'],\n});\n// => [\n//   { from: 'web', to: 'checkout', relation: 'dependencies' },\n//   { from: 'checkout', to: 'payments', relation: 'dependencies' },\n// ]\n```\n\n## Example: combine with descriptor discovery\n\n`@lorion-org/composition-graph` expects flat descriptors. If your authoring format\nallows nested descriptor documents, flatten them before building the catalog.\n\n```ts\nimport { createDescriptorCatalog } from '@lorion-org/composition-graph';\nimport { discoverDescriptors } from '@lorion-org/descriptor-discovery';\n\nconst discovered = discoverDescriptors({\n  cwd: '.',\n  descriptorPaths: ['layer-extensions/*/extension.json'],\n  nestedField: 'bundles',\n});\n\nconst catalog = createDescriptorCatalog({\n  descriptors: discovered.map((entry) => entry.descriptor),\n});\n```\n\n## Relations\n\n- `dependencies` is the only built-in relation\n- every additional relation must be registered via `relationDescriptors`\n- unconfigured descriptor fields are ignored by the graph\n- selection seed parsing belongs at the host adapter boundary\n- nested descriptor authoring belongs in a discovery or normalization layer, not in this package\n\n`relationDescriptors` are intentionally small:\n\n- `id` identifies the relation in graph queries and policies\n- `field` optionally maps the relation to a descriptor field name\n- `targetMode: 'values'` reads object values instead of object keys\n- `direction: 'incoming'` builds inverse edges from a target field back to the descriptor\n\nThe core graph does not prescribe provider policy, hinting, or weighting. Those\nconcerns belong in higher layers. A framework adapter can, for example, register\nan inverse `defaultProviders` relation for provider-owned defaults:\n\n```ts\nconst catalog = createDescriptorCatalog({\n  descriptors,\n  relationDescriptors: [{ id: 'defaultProviders', field: 'defaultFor', direction: 'incoming' }],\n});\n```\n\nThat turns `{ id: 'auth-oidc', defaultFor: 'auth' }` into a graph edge\n`auth -> auth-oidc`, as long as both descriptors exist.\n\nDependency-specific projections are also intentionally outside the core. If a\nconsumer needs a \"what pulled this in?\" view, derive that from\n`getProvenance()` in its own adapter or UI layer.\n\n## Local commands\n\n```shell\ncd packages/composition-graph\npnpm build\npnpm test\npnpm coverage\npnpm typecheck\npnpm package:check\n```\n","readmeFilename":"README.md"}